@happyvertical/smrt-chat 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/AGENTS.md +35 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +163 -0
  5. package/dist/__smrt-register__.d.ts +2 -0
  6. package/dist/__smrt-register__.d.ts.map +1 -0
  7. package/dist/chunks/ChatService-Dpzc1Pa5.js +2044 -0
  8. package/dist/chunks/ChatService-Dpzc1Pa5.js.map +1 -0
  9. package/dist/collections/AgentSessionCollection.d.ts +57 -0
  10. package/dist/collections/AgentSessionCollection.d.ts.map +1 -0
  11. package/dist/collections/ChatMessageCollection.d.ts +79 -0
  12. package/dist/collections/ChatMessageCollection.d.ts.map +1 -0
  13. package/dist/collections/ChatParticipantCollection.d.ts +26 -0
  14. package/dist/collections/ChatParticipantCollection.d.ts.map +1 -0
  15. package/dist/collections/ChatReactionCollection.d.ts +23 -0
  16. package/dist/collections/ChatReactionCollection.d.ts.map +1 -0
  17. package/dist/collections/ChatRoomCollection.d.ts +43 -0
  18. package/dist/collections/ChatRoomCollection.d.ts.map +1 -0
  19. package/dist/collections/ChatThreadCollection.d.ts +9 -0
  20. package/dist/collections/ChatThreadCollection.d.ts.map +1 -0
  21. package/dist/index.d.ts +5 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +18 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/internal/agent-runtime.d.ts +16 -0
  26. package/dist/internal/agent-runtime.d.ts.map +1 -0
  27. package/dist/internal/agent-runtime.js +5 -0
  28. package/dist/internal/agent-runtime.js.map +1 -0
  29. package/dist/manifest.json +2811 -0
  30. package/dist/models/AgentSession.d.ts +70 -0
  31. package/dist/models/AgentSession.d.ts.map +1 -0
  32. package/dist/models/ChatMessage.d.ts +55 -0
  33. package/dist/models/ChatMessage.d.ts.map +1 -0
  34. package/dist/models/ChatParticipant.d.ts +32 -0
  35. package/dist/models/ChatParticipant.d.ts.map +1 -0
  36. package/dist/models/ChatReaction.d.ts +19 -0
  37. package/dist/models/ChatReaction.d.ts.map +1 -0
  38. package/dist/models/ChatRoom.d.ts +44 -0
  39. package/dist/models/ChatRoom.d.ts.map +1 -0
  40. package/dist/models/ChatThread.d.ts +24 -0
  41. package/dist/models/ChatThread.d.ts.map +1 -0
  42. package/dist/models/index.d.ts +7 -0
  43. package/dist/models/index.d.ts.map +1 -0
  44. package/dist/playground.d.ts +2 -0
  45. package/dist/playground.d.ts.map +1 -0
  46. package/dist/playground.js +166 -0
  47. package/dist/playground.js.map +1 -0
  48. package/dist/services/ChatService.d.ts +390 -0
  49. package/dist/services/ChatService.d.ts.map +1 -0
  50. package/dist/services/index.d.ts +2 -0
  51. package/dist/services/index.d.ts.map +1 -0
  52. package/dist/smrt-knowledge.json +1507 -0
  53. package/dist/svelte/components/agent/AgentChat.svelte +542 -0
  54. package/dist/svelte/components/agent/AgentChat.svelte.d.ts +21 -0
  55. package/dist/svelte/components/agent/AgentChat.svelte.d.ts.map +1 -0
  56. package/dist/svelte/components/agent/AgentSelector.svelte +175 -0
  57. package/dist/svelte/components/agent/AgentSelector.svelte.d.ts +11 -0
  58. package/dist/svelte/components/agent/AgentSelector.svelte.d.ts.map +1 -0
  59. package/dist/svelte/components/agent/AgentSessionPanel.svelte +322 -0
  60. package/dist/svelte/components/agent/AgentSessionPanel.svelte.d.ts +15 -0
  61. package/dist/svelte/components/agent/AgentSessionPanel.svelte.d.ts.map +1 -0
  62. package/dist/svelte/components/agent/ToolCallDisplay.svelte +335 -0
  63. package/dist/svelte/components/agent/ToolCallDisplay.svelte.d.ts +9 -0
  64. package/dist/svelte/components/agent/ToolCallDisplay.svelte.d.ts.map +1 -0
  65. package/dist/svelte/components/agent/message-blocks.d.ts +12 -0
  66. package/dist/svelte/components/agent/message-blocks.d.ts.map +1 -0
  67. package/dist/svelte/components/agent/message-blocks.js +41 -0
  68. package/dist/svelte/components/agent/message-blocks.test.js +31 -0
  69. package/dist/svelte/components/dialogs/RoomCreateDialog.svelte +403 -0
  70. package/dist/svelte/components/dialogs/RoomCreateDialog.svelte.d.ts +16 -0
  71. package/dist/svelte/components/dialogs/RoomCreateDialog.svelte.d.ts.map +1 -0
  72. package/dist/svelte/components/dialogs/SearchMessages.svelte +457 -0
  73. package/dist/svelte/components/dialogs/SearchMessages.svelte.d.ts +17 -0
  74. package/dist/svelte/components/dialogs/SearchMessages.svelte.d.ts.map +1 -0
  75. package/dist/svelte/components/layout/ChatLayout.svelte +150 -0
  76. package/dist/svelte/components/layout/ChatLayout.svelte.d.ts +18 -0
  77. package/dist/svelte/components/layout/ChatLayout.svelte.d.ts.map +1 -0
  78. package/dist/svelte/components/layout/MemberList.svelte +389 -0
  79. package/dist/svelte/components/layout/MemberList.svelte.d.ts +11 -0
  80. package/dist/svelte/components/layout/MemberList.svelte.d.ts.map +1 -0
  81. package/dist/svelte/components/layout/RoomHeader.svelte +241 -0
  82. package/dist/svelte/components/layout/RoomHeader.svelte.d.ts +15 -0
  83. package/dist/svelte/components/layout/RoomHeader.svelte.d.ts.map +1 -0
  84. package/dist/svelte/components/layout/RoomList.svelte +471 -0
  85. package/dist/svelte/components/layout/RoomList.svelte.d.ts +15 -0
  86. package/dist/svelte/components/layout/RoomList.svelte.d.ts.map +1 -0
  87. package/dist/svelte/components/messages/MessageInput.svelte +232 -0
  88. package/dist/svelte/components/messages/MessageInput.svelte.d.ts +20 -0
  89. package/dist/svelte/components/messages/MessageInput.svelte.d.ts.map +1 -0
  90. package/dist/svelte/components/messages/MessageItem.svelte +431 -0
  91. package/dist/svelte/components/messages/MessageItem.svelte.d.ts +19 -0
  92. package/dist/svelte/components/messages/MessageItem.svelte.d.ts.map +1 -0
  93. package/dist/svelte/components/messages/MessageList.svelte +129 -0
  94. package/dist/svelte/components/messages/MessageList.svelte.d.ts +17 -0
  95. package/dist/svelte/components/messages/MessageList.svelte.d.ts.map +1 -0
  96. package/dist/svelte/components/messages/ThreadPanel.svelte +156 -0
  97. package/dist/svelte/components/messages/ThreadPanel.svelte.d.ts +17 -0
  98. package/dist/svelte/components/messages/ThreadPanel.svelte.d.ts.map +1 -0
  99. package/dist/svelte/components/messages/__tests__/MessageInput.test.js +38 -0
  100. package/dist/svelte/components/shared/Avatar.svelte +30 -0
  101. package/dist/svelte/components/shared/Avatar.svelte.d.ts +14 -0
  102. package/dist/svelte/components/shared/Avatar.svelte.d.ts.map +1 -0
  103. package/dist/svelte/components/shared/FileUpload.svelte +382 -0
  104. package/dist/svelte/components/shared/FileUpload.svelte.d.ts +14 -0
  105. package/dist/svelte/components/shared/FileUpload.svelte.d.ts.map +1 -0
  106. package/dist/svelte/components/shared/LinkPreview.svelte +108 -0
  107. package/dist/svelte/components/shared/LinkPreview.svelte.d.ts +18 -0
  108. package/dist/svelte/components/shared/LinkPreview.svelte.d.ts.map +1 -0
  109. package/dist/svelte/components/shared/MentionAutocomplete.svelte +168 -0
  110. package/dist/svelte/components/shared/MentionAutocomplete.svelte.d.ts +18 -0
  111. package/dist/svelte/components/shared/MentionAutocomplete.svelte.d.ts.map +1 -0
  112. package/dist/svelte/components/shared/MessageBubble.svelte +81 -0
  113. package/dist/svelte/components/shared/MessageBubble.svelte.d.ts +16 -0
  114. package/dist/svelte/components/shared/MessageBubble.svelte.d.ts.map +1 -0
  115. package/dist/svelte/components/shared/ReactionPicker.svelte +103 -0
  116. package/dist/svelte/components/shared/ReactionPicker.svelte.d.ts +10 -0
  117. package/dist/svelte/components/shared/ReactionPicker.svelte.d.ts.map +1 -0
  118. package/dist/svelte/components/shared/ReadReceipts.svelte +127 -0
  119. package/dist/svelte/components/shared/ReadReceipts.svelte.d.ts +13 -0
  120. package/dist/svelte/components/shared/ReadReceipts.svelte.d.ts.map +1 -0
  121. package/dist/svelte/components/shared/TypingIndicator.svelte +90 -0
  122. package/dist/svelte/components/shared/TypingIndicator.svelte.d.ts +12 -0
  123. package/dist/svelte/components/shared/TypingIndicator.svelte.d.ts.map +1 -0
  124. package/dist/svelte/components/shared/UserPresence.svelte +65 -0
  125. package/dist/svelte/components/shared/UserPresence.svelte.d.ts +13 -0
  126. package/dist/svelte/components/shared/UserPresence.svelte.d.ts.map +1 -0
  127. package/dist/svelte/components/shared/__tests__/Avatar.test.js +20 -0
  128. package/dist/svelte/components/shared/__tests__/LinkPreview.test.js +29 -0
  129. package/dist/svelte/components/shared/__tests__/MessageBubble.test.js +21 -0
  130. package/dist/svelte/components/shared/__tests__/ReactionPicker.test.js +35 -0
  131. package/dist/svelte/components/shared/__tests__/ReadReceipts.test.js +28 -0
  132. package/dist/svelte/components/shared/__tests__/TypingIndicator.test.js +27 -0
  133. package/dist/svelte/components/shared/__tests__/UserPresence.test.js +23 -0
  134. package/dist/svelte/components/tabs/ChatTab.svelte +240 -0
  135. package/dist/svelte/components/tabs/ChatTab.svelte.d.ts +21 -0
  136. package/dist/svelte/components/tabs/ChatTab.svelte.d.ts.map +1 -0
  137. package/dist/svelte/components/tabs/ChatTabList.svelte +158 -0
  138. package/dist/svelte/components/tabs/ChatTabList.svelte.d.ts +13 -0
  139. package/dist/svelte/components/tabs/ChatTabList.svelte.d.ts.map +1 -0
  140. package/dist/svelte/components/tabs/ChatTabs.svelte +88 -0
  141. package/dist/svelte/components/tabs/ChatTabs.svelte.d.ts +21 -0
  142. package/dist/svelte/components/tabs/ChatTabs.svelte.d.ts.map +1 -0
  143. package/dist/svelte/components/tabs/MiniChat.svelte +253 -0
  144. package/dist/svelte/components/tabs/MiniChat.svelte.d.ts +15 -0
  145. package/dist/svelte/components/tabs/MiniChat.svelte.d.ts.map +1 -0
  146. package/dist/svelte/i18n.d.ts +51 -0
  147. package/dist/svelte/i18n.d.ts.map +1 -0
  148. package/dist/svelte/i18n.js +72 -0
  149. package/dist/svelte/i18n.messages.d.ts +50 -0
  150. package/dist/svelte/i18n.messages.d.ts.map +1 -0
  151. package/dist/svelte/i18n.messages.js +69 -0
  152. package/dist/svelte/index.d.ts +48 -0
  153. package/dist/svelte/index.d.ts.map +1 -0
  154. package/dist/svelte/index.js +117 -0
  155. package/dist/svelte/playground.d.ts +171 -0
  156. package/dist/svelte/playground.d.ts.map +1 -0
  157. package/dist/svelte/playground.js +161 -0
  158. package/dist/svelte/types.d.ts +116 -0
  159. package/dist/svelte/types.d.ts.map +1 -0
  160. package/dist/svelte/types.js +1 -0
  161. package/dist/types.d.ts +99 -0
  162. package/dist/types.d.ts.map +1 -0
  163. package/dist/types.js +2 -0
  164. package/dist/types.js.map +1 -0
  165. package/dist/ui.d.ts +4 -0
  166. package/dist/ui.d.ts.map +1 -0
  167. package/dist/ui.js +92 -0
  168. package/dist/ui.js.map +1 -0
  169. package/package.json +95 -0
@@ -0,0 +1,403 @@
1
+ <script lang="ts">
2
+ /**
3
+ * RoomCreateDialog - Modal dialog for creating a new chat room
4
+ * Provides name, type selector, and description fields
5
+ */
6
+ import { useI18n } from '@happyvertical/smrt-ui/i18n';
7
+ import { M } from '../../i18n.js';
8
+
9
+ const { t } = useI18n();
10
+
11
+ export interface Props {
12
+ /** Whether the dialog is open */
13
+ isOpen: boolean;
14
+ /** Callback to close the dialog */
15
+ onclose: () => void;
16
+ /** Callback when room is created */
17
+ oncreate: (params: {
18
+ name: string;
19
+ roomType: string;
20
+ description: string;
21
+ }) => void;
22
+ }
23
+
24
+ let { isOpen, onclose, oncreate }: Props = $props();
25
+
26
+ let name = $state('');
27
+ let roomType = $state('public');
28
+ let description = $state('');
29
+ let nameInput = $state<HTMLInputElement | null>(null);
30
+
31
+ const canCreate = $derived(name.trim().length > 0);
32
+
33
+ const roomTypes = [
34
+ {
35
+ value: 'public',
36
+ label: 'Public Channel',
37
+ description: 'Anyone can join and view messages',
38
+ },
39
+ {
40
+ value: 'private',
41
+ label: 'Private Channel',
42
+ description: 'Invite-only, hidden from non-members',
43
+ },
44
+ {
45
+ value: 'dm',
46
+ label: 'Direct Message',
47
+ description: 'Private conversation between users',
48
+ },
49
+ {
50
+ value: 'agent',
51
+ label: 'Agent',
52
+ description: 'Conversation with an AI agent',
53
+ },
54
+ ];
55
+
56
+ function handleSubmit() {
57
+ if (!canCreate) return;
58
+ oncreate({
59
+ name: name.trim(),
60
+ roomType,
61
+ description: description.trim(),
62
+ });
63
+ resetForm();
64
+ }
65
+
66
+ function handleClose() {
67
+ resetForm();
68
+ onclose();
69
+ }
70
+
71
+ function resetForm() {
72
+ name = '';
73
+ roomType = 'public';
74
+ description = '';
75
+ }
76
+
77
+ function handleKeydown(event: KeyboardEvent) {
78
+ if (event.key === 'Escape') {
79
+ handleClose();
80
+ }
81
+ }
82
+
83
+ $effect(() => {
84
+ if (!isOpen || typeof window === 'undefined') {
85
+ return;
86
+ }
87
+
88
+ const onWindowKeydown = (event: KeyboardEvent) => {
89
+ handleKeydown(event);
90
+ };
91
+
92
+ window.addEventListener('keydown', onWindowKeydown);
93
+ return () => {
94
+ window.removeEventListener('keydown', onWindowKeydown);
95
+ };
96
+ });
97
+
98
+ $effect(() => {
99
+ if (isOpen && nameInput) {
100
+ nameInput.focus();
101
+ }
102
+ });
103
+ </script>
104
+
105
+ {#if isOpen}
106
+ <div class="dialog-backdrop">
107
+ <button
108
+ type="button"
109
+ class="dialog-backdrop__dismiss"
110
+ tabindex="-1"
111
+ aria-label={t(M['chat.room_create_dialog.close'])}
112
+ onclick={handleClose}
113
+ ></button>
114
+ <div
115
+ class="dialog"
116
+ role="dialog"
117
+ aria-modal="true"
118
+ aria-labelledby="create-room-title"
119
+ tabindex="-1"
120
+ >
121
+ <h2 id="create-room-title" class="dialog__title">{t(M['chat.room_create_dialog.title'])}</h2>
122
+
123
+ <form
124
+ class="dialog__form"
125
+ onsubmit={(e) => { e.preventDefault(); handleSubmit(); }}
126
+ >
127
+ <div class="field">
128
+ <label class="field__label" for="room-name">
129
+ {t(M['chat.room_create_dialog.room_name'])} <span class="field__required" aria-label={t(M['chat.room_create_dialog.required'])}>*</span>
130
+ </label>
131
+ <input
132
+ bind:this={nameInput}
133
+ bind:value={name}
134
+ id="room-name"
135
+ type="text"
136
+ class="field__input"
137
+ placeholder={t(M['chat.room_create_dialog.name_placeholder'])}
138
+ maxlength="100"
139
+ autocomplete="off"
140
+ />
141
+ </div>
142
+
143
+ <fieldset class="field">
144
+ <legend class="field__label">{t(M['chat.room_create_dialog.room_type'])}</legend>
145
+ <div class="type-options">
146
+ {#each roomTypes as option (option.value)}
147
+ <label
148
+ class="type-option"
149
+ class:type-option--selected={roomType === option.value}
150
+ >
151
+ <input
152
+ type="radio"
153
+ name="roomType"
154
+ value={option.value}
155
+ bind:group={roomType}
156
+ class="type-option__radio"
157
+ />
158
+ <span class="type-option__content">
159
+ <span class="type-option__label">{option.label}</span>
160
+ <span class="type-option__description">{option.description}</span>
161
+ </span>
162
+ </label>
163
+ {/each}
164
+ </div>
165
+ </fieldset>
166
+
167
+ <div class="field">
168
+ <label class="field__label" for="room-description">Description</label>
169
+ <textarea
170
+ bind:value={description}
171
+ id="room-description"
172
+ class="field__textarea"
173
+ placeholder={t(M['chat.room_create_dialog.description_placeholder'])}
174
+ rows="3"
175
+ maxlength="500"
176
+ ></textarea>
177
+ <span class="field__hint">{description.length}/500</span>
178
+ </div>
179
+
180
+ <div class="dialog__actions">
181
+ <button
182
+ type="button"
183
+ class="btn btn--secondary"
184
+ onclick={handleClose}
185
+ >
186
+ Cancel
187
+ </button>
188
+ <button
189
+ type="submit"
190
+ class="btn btn--primary"
191
+ disabled={!canCreate}
192
+ >
193
+ {t(M['chat.room_create_dialog.create_room'])}
194
+ </button>
195
+ </div>
196
+ </form>
197
+ </div>
198
+ </div>
199
+ {/if}
200
+
201
+ <style>
202
+ .dialog-backdrop {
203
+ position: fixed;
204
+ inset: 0;
205
+ background: var(--smrt-color-scrim, rgba(0, 0, 0, 0.32));
206
+ display: flex;
207
+ align-items: center;
208
+ justify-content: center;
209
+ padding: 1rem;
210
+ z-index: var(--smrt-z-index-dialog, 1300);
211
+ position: relative;
212
+ }
213
+
214
+ .dialog-backdrop__dismiss {
215
+ position: absolute;
216
+ inset: 0;
217
+ padding: 0;
218
+ border: 0;
219
+ background: transparent;
220
+ }
221
+
222
+ .dialog {
223
+ background: var(--smrt-color-surface, #fefbff);
224
+ border-radius: var(--smrt-radius-extra-large, 28px);
225
+ box-shadow: var(--smrt-elevation-3, 0 4px 8px 3px rgba(0, 0, 0, 0.15), 0 1px 3px rgba(0, 0, 0, 0.3));
226
+ width: 100%;
227
+ max-width: 32rem;
228
+ padding: 1.5rem;
229
+ max-height: calc(100vh - 2rem);
230
+ overflow-y: auto;
231
+ position: relative;
232
+ z-index: 1;
233
+ }
234
+
235
+ .dialog__title {
236
+ margin: 0 0 1.25rem;
237
+ font: var(--smrt-typography-headline-small-font, 400 1.5rem / 2rem sans-serif);
238
+ color: var(--smrt-color-on-surface, #1a1c1e);
239
+ }
240
+
241
+ .dialog__form {
242
+ display: flex;
243
+ flex-direction: column;
244
+ gap: 1.25rem;
245
+ }
246
+
247
+ .field {
248
+ display: flex;
249
+ flex-direction: column;
250
+ gap: 0.375rem;
251
+ border: none;
252
+ margin: 0;
253
+ padding: 0;
254
+ }
255
+
256
+ .field__label {
257
+ font: var(--smrt-typography-label-large-font, 500 0.875rem / 1.25 sans-serif);
258
+ color: var(--smrt-color-on-surface, #1a1c1e);
259
+ }
260
+
261
+ .field__required {
262
+ color: var(--smrt-color-error, #ba1a1a);
263
+ }
264
+
265
+ .field__input {
266
+ padding: 0.75rem;
267
+ font: var(--smrt-typography-body-large-font, 1rem / 1.5 sans-serif);
268
+ font-family: inherit;
269
+ border: 1px solid var(--smrt-color-outline, #74777f);
270
+ border-radius: var(--smrt-radius-medium, 0.5rem);
271
+ background: var(--smrt-color-surface, #fefbff);
272
+ color: var(--smrt-color-on-surface, #1a1c1e);
273
+ }
274
+
275
+ .field__input:focus {
276
+ outline: none;
277
+ border-color: var(--smrt-color-primary, #005ac1);
278
+ box-shadow: 0 0 0 1px var(--smrt-color-primary, #005ac1);
279
+ }
280
+
281
+ .field__textarea {
282
+ padding: 0.75rem;
283
+ font: var(--smrt-typography-body-large-font, 1rem / 1.5 sans-serif);
284
+ font-family: inherit;
285
+ border: 1px solid var(--smrt-color-outline, #74777f);
286
+ border-radius: var(--smrt-radius-medium, 0.5rem);
287
+ background: var(--smrt-color-surface, #fefbff);
288
+ color: var(--smrt-color-on-surface, #1a1c1e);
289
+ resize: vertical;
290
+ min-height: 80px;
291
+ }
292
+
293
+ .field__textarea:focus {
294
+ outline: none;
295
+ border-color: var(--smrt-color-primary, #005ac1);
296
+ box-shadow: 0 0 0 1px var(--smrt-color-primary, #005ac1);
297
+ }
298
+
299
+ .field__hint {
300
+ font: var(--smrt-typography-body-small-font, 0.75rem / 1.25 sans-serif);
301
+ color: var(--smrt-color-on-surface-variant, #43474e);
302
+ text-align: right;
303
+ }
304
+
305
+ .type-options {
306
+ display: flex;
307
+ flex-direction: column;
308
+ gap: 0.5rem;
309
+ }
310
+
311
+ .type-option {
312
+ display: flex;
313
+ align-items: flex-start;
314
+ gap: 0.75rem;
315
+ padding: 0.75rem;
316
+ border: 1px solid var(--smrt-color-outline-variant, #c4c6d0);
317
+ border-radius: var(--smrt-radius-medium, 0.5rem);
318
+ cursor: pointer;
319
+ transition: border-color var(--smrt-duration-short2, 150ms),
320
+ background var(--smrt-duration-short2, 150ms);
321
+ }
322
+
323
+ .type-option:hover {
324
+ background: var(--smrt-color-surface-container, #f0f0f4);
325
+ }
326
+
327
+ .type-option--selected {
328
+ border-color: var(--smrt-color-primary, #005ac1);
329
+ background: var(--smrt-color-primary-container, #d6e3ff);
330
+ }
331
+
332
+ .type-option__radio {
333
+ margin-top: 0.125rem;
334
+ accent-color: var(--smrt-color-primary, #005ac1);
335
+ }
336
+
337
+ .type-option__content {
338
+ display: flex;
339
+ flex-direction: column;
340
+ gap: 0.125rem;
341
+ }
342
+
343
+ .type-option__label {
344
+ font: var(--smrt-typography-body-medium-font, 0.875rem / 1.25 sans-serif);
345
+ color: var(--smrt-color-on-surface, #1a1c1e);
346
+ font-weight: var(--smrt-typography-weight-medium, 500);
347
+ }
348
+
349
+ .type-option__description {
350
+ font: var(--smrt-typography-body-small-font, 0.75rem / 1.25 sans-serif);
351
+ color: var(--smrt-color-on-surface-variant, #43474e);
352
+ }
353
+
354
+ .dialog__actions {
355
+ display: flex;
356
+ justify-content: flex-end;
357
+ gap: 0.5rem;
358
+ margin-top: 0.25rem;
359
+ }
360
+
361
+ .btn {
362
+ display: inline-flex;
363
+ align-items: center;
364
+ justify-content: center;
365
+ padding: 0.625rem 1.5rem;
366
+ font: var(--smrt-typography-label-large-font, 500 0.875rem / 1.25 sans-serif);
367
+ letter-spacing: 0.1px;
368
+ border-radius: var(--smrt-radius-full, 9999px);
369
+ border: none;
370
+ cursor: pointer;
371
+ transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
372
+ }
373
+
374
+ .btn:disabled {
375
+ opacity: 0.38;
376
+ cursor: not-allowed;
377
+ }
378
+
379
+ .btn--primary {
380
+ background: var(--smrt-color-primary, #005ac1);
381
+ color: var(--smrt-color-on-primary, #fff);
382
+ }
383
+
384
+ .btn--primary:hover:not(:disabled) {
385
+ box-shadow: var(--smrt-elevation-1, 0 1px 2px rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.15));
386
+ }
387
+
388
+ .btn--secondary {
389
+ background: transparent;
390
+ color: var(--smrt-color-primary, #005ac1);
391
+ }
392
+
393
+ .btn--secondary:hover:not(:disabled) {
394
+ background: color-mix(in srgb, var(--smrt-color-primary, #005ac1) 8%, transparent);
395
+ }
396
+
397
+ @media (prefers-reduced-motion: reduce) {
398
+ .type-option,
399
+ .btn {
400
+ transition: none;
401
+ }
402
+ }
403
+ </style>
@@ -0,0 +1,16 @@
1
+ export interface Props {
2
+ /** Whether the dialog is open */
3
+ isOpen: boolean;
4
+ /** Callback to close the dialog */
5
+ onclose: () => void;
6
+ /** Callback when room is created */
7
+ oncreate: (params: {
8
+ name: string;
9
+ roomType: string;
10
+ description: string;
11
+ }) => void;
12
+ }
13
+ declare const RoomCreateDialog: import("svelte").Component<Props, {}, "">;
14
+ type RoomCreateDialog = ReturnType<typeof RoomCreateDialog>;
15
+ export default RoomCreateDialog;
16
+ //# sourceMappingURL=RoomCreateDialog.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoomCreateDialog.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/dialogs/RoomCreateDialog.svelte.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,KAAK;IACpB,iCAAiC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,mCAAmC;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,oCAAoC;IACpC,QAAQ,EAAE,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,KAAK,IAAI,CAAC;CACZ;AA8ID,QAAA,MAAM,gBAAgB,2CAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}