@happyvertical/smrt-svelte 0.55.16 → 0.55.18

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 (153) hide show
  1. package/README.md +5 -3
  2. package/agents/cookbook-shell.md +7 -1
  3. package/agents/overview-surfaces.md +5 -0
  4. package/agents/workspace.md +155 -11
  5. package/dist/browser-ai/svelte/components/DownloadProgress.svelte +22 -19
  6. package/dist/browser-ai/svelte/components/ModelStatusControl.svelte +16 -13
  7. package/dist/browser-ai/svelte/components/STTTest.svelte +41 -38
  8. package/dist/browser-ai/svelte/components/VoiceInput.svelte +17 -14
  9. package/dist/components/activity/ActivityList.svelte +1 -1
  10. package/dist/components/app/AppShell.svelte +279 -14
  11. package/dist/components/app/AppShell.svelte.d.ts +63 -2
  12. package/dist/components/app/AppShell.svelte.d.ts.map +1 -1
  13. package/dist/components/app/DockToggles.svelte +53 -11
  14. package/dist/components/app/DockToggles.svelte.d.ts.map +1 -1
  15. package/dist/components/app/OwnerSetupForm.svelte +98 -34
  16. package/dist/components/app/OwnerSetupForm.svelte.d.ts +4 -0
  17. package/dist/components/app/OwnerSetupForm.svelte.d.ts.map +1 -1
  18. package/dist/components/app/PhoneTabBar.svelte +136 -0
  19. package/dist/components/app/PhoneTabBar.svelte.d.ts +22 -0
  20. package/dist/components/app/PhoneTabBar.svelte.d.ts.map +1 -0
  21. package/dist/components/app/ShellSettingsPage.svelte +17 -2
  22. package/dist/components/app/ShellSettingsPage.svelte.d.ts +11 -16
  23. package/dist/components/app/ShellSettingsPage.svelte.d.ts.map +1 -1
  24. package/dist/components/app/dock-toggle.d.ts +3 -2
  25. package/dist/components/app/dock-toggle.d.ts.map +1 -1
  26. package/dist/components/app/index.d.ts +2 -1
  27. package/dist/components/app/index.d.ts.map +1 -1
  28. package/dist/components/app/index.js +1 -0
  29. package/dist/components/app/owner-setup-types.d.ts +5 -0
  30. package/dist/components/app/owner-setup-types.d.ts.map +1 -1
  31. package/dist/components/app/phone-tabs.d.ts +41 -0
  32. package/dist/components/app/phone-tabs.d.ts.map +1 -0
  33. package/dist/components/app/phone-tabs.js +66 -0
  34. package/dist/components/app/slot-item.d.ts +16 -0
  35. package/dist/components/app/slot-item.d.ts.map +1 -1
  36. package/dist/components/app/view-transition.d.ts +43 -0
  37. package/dist/components/app/view-transition.d.ts.map +1 -0
  38. package/dist/components/app/view-transition.js +76 -0
  39. package/dist/components/audit/AuditList.svelte +4 -1
  40. package/dist/components/audit/RecordHistory.svelte +4 -1
  41. package/dist/components/board/Board.svelte +4 -1
  42. package/dist/components/command-palette/CommandPalette.svelte +4 -1
  43. package/dist/components/command-palette/CommandPalette.svelte.d.ts +2 -0
  44. package/dist/components/command-palette/CommandPalette.svelte.d.ts.map +1 -1
  45. package/dist/components/command-palette/CommandPaletteDialog.svelte +3 -0
  46. package/dist/components/command-palette/CommandPaletteTrigger.svelte +3 -0
  47. package/dist/components/cookbook/CookbookApp.svelte +2 -1
  48. package/dist/components/cookbook/CookbookApp.svelte.d.ts.map +1 -1
  49. package/dist/components/cookbook/CookbookSectionPage.svelte +4 -1
  50. package/dist/components/cookbook/brand-theme.d.ts.map +1 -1
  51. package/dist/components/cookbook/brand-theme.js +21 -2
  52. package/dist/components/cookbook/build.js +1 -1
  53. package/dist/components/cookbook/theme.d.ts.map +1 -1
  54. package/dist/components/cookbook/theme.js +9 -5
  55. package/dist/components/cookbook/types.d.ts +5 -1
  56. package/dist/components/cookbook/types.d.ts.map +1 -1
  57. package/dist/components/forms/AddressInput.svelte +25 -22
  58. package/dist/components/forms/CheckboxInput.svelte +8 -5
  59. package/dist/components/forms/DateRangeInput.svelte +41 -38
  60. package/dist/components/forms/DateTimeInput.svelte +29 -26
  61. package/dist/components/forms/FileUpload.svelte +24 -21
  62. package/dist/components/forms/Form.svelte +34 -31
  63. package/dist/components/forms/FormMicButton.svelte +10 -7
  64. package/dist/components/forms/FormScope.svelte +4 -1
  65. package/dist/components/forms/MeasurementInput.svelte +26 -23
  66. package/dist/components/forms/MoneyInput.svelte +18 -15
  67. package/dist/components/forms/NumberInput.svelte +17 -14
  68. package/dist/components/forms/PhoneInput.svelte +37 -34
  69. package/dist/components/forms/SearchInput.svelte +16 -13
  70. package/dist/components/forms/SelectInput.svelte +17 -14
  71. package/dist/components/forms/TextInput.svelte +19 -16
  72. package/dist/components/forms/TextareaInput.svelte +21 -18
  73. package/dist/components/import-export/ImportExport.svelte +4 -1
  74. package/dist/components/module/ModulePanel.svelte +14 -11
  75. package/dist/components/notifications/NotificationBell.svelte +4 -1
  76. package/dist/components/overview/OverviewAssistantUndo.svelte +4 -1
  77. package/dist/components/overview/OverviewGrid.svelte +11 -6
  78. package/dist/components/overview/OverviewGrid.svelte.d.ts.map +1 -1
  79. package/dist/components/overview/WidgetOptionsForm.svelte +3 -0
  80. package/dist/components/overview/widgets/ChartWidget.svelte +7 -4
  81. package/dist/components/overview/widgets/MetricWidget.svelte +5 -2
  82. package/dist/components/overview/widgets/NoteWidget.svelte +5 -2
  83. package/dist/components/overview/widgets/RecordListWidget.svelte +6 -3
  84. package/dist/components/overview/widgets/ShortcutsWidget.svelte +12 -6
  85. package/dist/components/overview/widgets/ShortcutsWidget.svelte.d.ts.map +1 -1
  86. package/dist/components/screens/DetailScreen.svelte +6 -3
  87. package/dist/components/screens/EditForm.svelte +6 -3
  88. package/dist/components/screens/ListScreen.svelte +4 -1
  89. package/dist/components/screens/RecipeScreens.svelte +1 -1
  90. package/dist/components/settings/SettingsCatalog.svelte +4 -1
  91. package/dist/components/sortable/Sortable.svelte +11 -5
  92. package/dist/components/sortable/Sortable.svelte.d.ts.map +1 -1
  93. package/dist/components/workspace/Breadcrumbs.svelte +4 -1
  94. package/dist/components/workspace/NavTree.svelte +4 -1
  95. package/dist/components/workspace/RoleShell.svelte +4 -1
  96. package/dist/components/workspace/WorkspaceShell.svelte +43 -40
  97. package/dist/components/workspace/admin-shell/ActivityItem.svelte +4 -1
  98. package/dist/components/workspace/admin-shell/ActivityList.svelte +5 -2
  99. package/dist/components/workspace/admin-shell/ActivityTicker.svelte +6 -3
  100. package/dist/components/workspace/admin-shell/ActivityToasts.svelte +9 -4
  101. package/dist/components/workspace/admin-shell/AdminShell.svelte +642 -126
  102. package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts +7 -1
  103. package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts.map +1 -1
  104. package/dist/components/workspace/admin-shell/AppScopePanel.svelte +4 -1
  105. package/dist/components/workspace/admin-shell/HotkeyInput.svelte +4 -1
  106. package/dist/components/workspace/admin-shell/PhoneBottomBar.svelte +58 -14
  107. package/dist/components/workspace/admin-shell/PhoneBottomBar.svelte.d.ts +9 -2
  108. package/dist/components/workspace/admin-shell/PhoneBottomBar.svelte.d.ts.map +1 -1
  109. package/dist/components/workspace/admin-shell/PhoneTopBar.svelte +15 -6
  110. package/dist/components/workspace/admin-shell/ShellBrand.svelte +3 -0
  111. package/dist/components/workspace/admin-shell/ShellCorner.svelte +4 -1
  112. package/dist/components/workspace/admin-shell/ShellIconButton.svelte +11 -7
  113. package/dist/components/workspace/admin-shell/ShellLayoutEditor.svelte +6 -3
  114. package/dist/components/workspace/admin-shell/ShellNavEditor.svelte +19 -13
  115. package/dist/components/workspace/admin-shell/ShellNavEditor.svelte.d.ts +1 -1
  116. package/dist/components/workspace/admin-shell/ShellNavEditor.svelte.d.ts.map +1 -1
  117. package/dist/components/workspace/admin-shell/ShellNavToggle.svelte +8 -5
  118. package/dist/components/workspace/admin-shell/ShellSectionIcon.svelte +4 -1
  119. package/dist/components/workspace/admin-shell/ShellSectionMenu.svelte +24 -17
  120. package/dist/components/workspace/admin-shell/ShellSectionMenu.svelte.d.ts.map +1 -1
  121. package/dist/components/workspace/admin-shell/ShellSettingsPanel.svelte +236 -48
  122. package/dist/components/workspace/admin-shell/ShellSettingsPanel.svelte.d.ts +11 -1
  123. package/dist/components/workspace/admin-shell/ShellSettingsPanel.svelte.d.ts.map +1 -1
  124. package/dist/components/workspace/admin-shell/ShellTitle.svelte +4 -1
  125. package/dist/components/workspace/admin-shell/ShortcutsOverlay.svelte +4 -1
  126. package/dist/components/workspace/admin-shell/SystemScopePanel.svelte +4 -1
  127. package/dist/components/workspace/admin-shell/SystemStatusChips.svelte +5 -2
  128. package/dist/components/workspace/admin-shell/TenantNav.svelte +112 -43
  129. package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts +4 -3
  130. package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts.map +1 -1
  131. package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte +322 -55
  132. package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.d.ts +15 -2
  133. package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.d.ts.map +1 -1
  134. package/dist/components/workspace/admin-shell/motion.d.ts +19 -0
  135. package/dist/components/workspace/admin-shell/motion.d.ts.map +1 -0
  136. package/dist/components/workspace/admin-shell/motion.js +44 -0
  137. package/dist/components/workspace/admin-shell/settings.d.ts +1 -0
  138. package/dist/components/workspace/admin-shell/settings.d.ts.map +1 -1
  139. package/dist/components/workspace/admin-shell/settings.js +1 -1
  140. package/dist/components/workspace/admin-shell/shell-icons.d.ts +8 -0
  141. package/dist/components/workspace/admin-shell/shell-icons.d.ts.map +1 -1
  142. package/dist/components/workspace/admin-shell/shell-icons.js +8 -0
  143. package/dist/components/workspace/admin-shell/state.svelte.d.ts +6 -0
  144. package/dist/components/workspace/admin-shell/state.svelte.d.ts.map +1 -1
  145. package/dist/components/workspace/admin-shell/state.svelte.js +15 -0
  146. package/dist/components/workspace/admin-shell/types.d.ts +13 -3
  147. package/dist/components/workspace/admin-shell/types.d.ts.map +1 -1
  148. package/dist/components/workspace/tools-dock/ToolsDock.svelte +41 -38
  149. package/dist/i18n/strings.workspace.d.ts +37 -0
  150. package/dist/i18n/strings.workspace.d.ts.map +1 -1
  151. package/dist/i18n/strings.workspace.js +42 -2
  152. package/dist/mcp-apps/McpAppsBridge.svelte +4 -1
  153. package/package.json +14 -14
@@ -136,7 +136,7 @@ function handleChange(e: Event) {
136
136
  class:smrt-mode={isSmrt}
137
137
  class:focused={isFocused}
138
138
  class:disabled
139
- class:has-value={!!value}
139
+ class:has-value={!!value} data-smrt-component="SelectInput"
140
140
  >
141
141
  {#if label}
142
142
  <FieldLabel id={labelId} for={name} {label} {required} />
@@ -180,10 +180,12 @@ function handleChange(e: Event) {
180
180
  </div>
181
181
 
182
182
  <style>
183
+ @layer smrt.reset, smrt.structure, smrt.theme;
184
+ @layer smrt.theme {
183
185
  .smrt-select-field {
184
- --field-color: var(--smrt-color-on-surface-variant);
185
- --field-bg: var(--smrt-color-surface-container-highest);
186
- --field-active: var(--smrt-color-primary);
186
+ --smrt-select-input-field-color: var(--smrt-color-on-surface-variant);
187
+ --smrt-select-input-field-bg: var(--smrt-color-surface-container-highest);
188
+ --smrt-select-input-field-active: var(--smrt-color-primary);
187
189
 
188
190
  display: flex;
189
191
  flex-direction: column;
@@ -195,11 +197,11 @@ function handleChange(e: Event) {
195
197
  position: relative;
196
198
  display: flex;
197
199
  align-items: center;
198
- background-color: var(--smrt-color-surface, #fff);
199
- border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
200
- border-radius: var(--smrt-radius-small, 6px);
200
+ background-color: var(--smrt-color-surface);
201
+ border: 1px solid var(--smrt-color-outline-variant);
202
+ border-radius: var(--smrt-radius-small);
201
203
  min-height: 40px;
202
- padding: 0 var(--smrt-spacing-3, 12px);
204
+ padding: 0 var(--smrt-spacing-3);
203
205
  transition: background-color var(--smrt-duration-short3, 200ms) var(--smrt-easing-standard, cubic-bezier(0.2, 0, 0, 1));
204
206
  }
205
207
 
@@ -221,7 +223,7 @@ function handleChange(e: Event) {
221
223
  background: transparent;
222
224
  font-size: var(--smrt-typography-body-large-size, 1rem);
223
225
  line-height: var(--smrt-typography-body-large-line-height, 1.5);
224
- letter-spacing: var(--smrt-typography-body-large-tracking, 0.5px);
226
+ letter-spacing: var(--smrt-typography-body-large-tracking);
225
227
  color: var(--smrt-color-on-surface);
226
228
  width: 100%;
227
229
  padding: 0;
@@ -239,7 +241,7 @@ function handleChange(e: Event) {
239
241
  display: flex;
240
242
  align-items: center;
241
243
  justify-content: center;
242
- color: var(--field-color);
244
+ color: var(--smrt-select-input-field-color);
243
245
  pointer-events: none;
244
246
  margin-right: -4px;
245
247
  }
@@ -247,12 +249,12 @@ function handleChange(e: Event) {
247
249
  .active-indicator { display: none; }
248
250
 
249
251
  .focused .container {
250
- border-color: var(--field-active);
251
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--field-active) 10%, transparent);
252
+ border-color: var(--smrt-select-input-field-active);
253
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-select-input-field-active) 10%, transparent);
252
254
  }
253
255
 
254
256
  .supporting-text {
255
- padding: var(--smrt-spacing-1, 4px) 0 0;
257
+ padding: var(--smrt-spacing-1) 0 0;
256
258
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
257
259
  }
258
260
 
@@ -265,6 +267,7 @@ function handleChange(e: Event) {
265
267
 
266
268
  /* Smrt mode overrides */
267
269
  .smrt-mode {
268
- --field-active: var(--smrt-color-tertiary);
270
+ --smrt-select-input-field-active: var(--smrt-color-tertiary);
269
271
  }
272
+ }
270
273
  </style>
@@ -265,7 +265,7 @@ function handleInput(e: Event) {
265
265
  class:invalid={showInvalid}
266
266
  class:disabled
267
267
  class:has-value={!!value}
268
- class:listening={isHolding}
268
+ class:listening={isHolding} data-smrt-component="TextInput"
269
269
  >
270
270
  {#if label}
271
271
  <FieldLabel id={labelId} for={name} {label} {required} />
@@ -337,10 +337,12 @@ function handleInput(e: Event) {
337
337
  </div>
338
338
 
339
339
  <style>
340
+ @layer smrt.reset, smrt.structure, smrt.theme;
341
+ @layer smrt.theme {
340
342
  .smrt-text-field {
341
- --field-color: var(--smrt-color-on-surface-variant);
342
- --field-bg: var(--smrt-color-surface-container-highest);
343
- --field-active: var(--smrt-color-primary);
343
+ --smrt-text-input-field-color: var(--smrt-color-on-surface-variant);
344
+ --smrt-text-input-field-bg: var(--smrt-color-surface-container-highest);
345
+ --smrt-text-input-field-active: var(--smrt-color-primary);
344
346
 
345
347
  display: flex;
346
348
  flex-direction: column;
@@ -352,11 +354,11 @@ function handleInput(e: Event) {
352
354
  position: relative;
353
355
  display: flex;
354
356
  align-items: center;
355
- background-color: var(--smrt-color-surface, #fff);
356
- border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
357
- border-radius: var(--smrt-radius-small, 6px);
357
+ background-color: var(--smrt-color-surface);
358
+ border: 1px solid var(--smrt-color-outline-variant);
359
+ border-radius: var(--smrt-radius-small);
358
360
  min-height: 40px;
359
- padding: 0 var(--smrt-spacing-3, 12px);
361
+ padding: 0 var(--smrt-spacing-3);
360
362
  transition: background-color var(--smrt-duration-short3, 200ms) var(--smrt-easing-standard, cubic-bezier(0.2, 0, 0, 1));
361
363
  }
362
364
 
@@ -378,7 +380,7 @@ function handleInput(e: Event) {
378
380
  background: transparent;
379
381
  font-size: var(--smrt-typography-body-large-size, 1rem);
380
382
  line-height: var(--smrt-typography-body-large-line-height, 1.5);
381
- letter-spacing: var(--smrt-typography-body-large-tracking, 0.5px);
383
+ letter-spacing: var(--smrt-typography-body-large-tracking);
382
384
  color: var(--smrt-color-on-surface);
383
385
  width: 100%;
384
386
  padding: 0;
@@ -393,8 +395,8 @@ function handleInput(e: Event) {
393
395
  .active-indicator { display: none; }
394
396
 
395
397
  .focused .container {
396
- border-color: var(--field-active);
397
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--field-active) 10%, transparent);
398
+ border-color: var(--smrt-text-input-field-active);
399
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-text-input-field-active) 10%, transparent);
398
400
  }
399
401
 
400
402
  .mic-btn {
@@ -405,8 +407,8 @@ function handleInput(e: Event) {
405
407
  justify-content: center;
406
408
  border: none;
407
409
  background: transparent;
408
- color: var(--field-color);
409
- border-radius: var(--smrt-radius-full, 9999px);
410
+ color: var(--smrt-text-input-field-color);
411
+ border-radius: var(--smrt-radius-full);
410
412
  cursor: pointer;
411
413
  margin-right: -8px;
412
414
  transition: all 200ms;
@@ -418,7 +420,7 @@ function handleInput(e: Event) {
418
420
  }
419
421
 
420
422
  .supporting-text {
421
- padding: var(--smrt-spacing-1, 4px) 0 0;
423
+ padding: var(--smrt-spacing-1) 0 0;
422
424
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
423
425
  min-height: 16px;
424
426
  }
@@ -429,8 +431,8 @@ function handleInput(e: Event) {
429
431
 
430
432
  /* States */
431
433
  .invalid {
432
- --field-active: var(--smrt-color-error);
433
- --field-color: var(--smrt-color-error);
434
+ --smrt-text-input-field-active: var(--smrt-color-error);
435
+ --smrt-text-input-field-color: var(--smrt-color-error);
434
436
  }
435
437
 
436
438
  .listening {
@@ -441,4 +443,5 @@ function handleInput(e: Event) {
441
443
  opacity: 0.38;
442
444
  pointer-events: none;
443
445
  }
446
+ }
444
447
  </style>
@@ -228,7 +228,7 @@ function handleInput(e: Event) {
228
228
  class:focused={isFocused}
229
229
  class:disabled
230
230
  class:has-value={!!value}
231
- class:listening={isHolding}
231
+ class:listening={isHolding} data-smrt-component="TextareaInput"
232
232
  >
233
233
  {#if label}
234
234
  <FieldLabel id={labelId} for={name} {label} {required} />
@@ -297,10 +297,12 @@ function handleInput(e: Event) {
297
297
  </div>
298
298
 
299
299
  <style>
300
+ @layer smrt.reset, smrt.structure, smrt.theme;
301
+ @layer smrt.theme {
300
302
  .smrt-text-field {
301
- --field-color: var(--smrt-color-on-surface-variant);
302
- --field-bg: var(--smrt-color-surface-container-highest);
303
- --field-active: var(--smrt-color-primary);
303
+ --smrt-textarea-input-field-color: var(--smrt-color-on-surface-variant);
304
+ --smrt-textarea-input-field-bg: var(--smrt-color-surface-container-highest);
305
+ --smrt-textarea-input-field-active: var(--smrt-color-primary);
304
306
 
305
307
  display: flex;
306
308
  flex-direction: column;
@@ -312,11 +314,11 @@ function handleInput(e: Event) {
312
314
  position: relative;
313
315
  display: flex;
314
316
  align-items: flex-start;
315
- background-color: var(--smrt-color-surface, #fff);
316
- border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
317
- border-radius: var(--smrt-radius-small, 6px);
317
+ background-color: var(--smrt-color-surface);
318
+ border: 1px solid var(--smrt-color-outline-variant);
319
+ border-radius: var(--smrt-radius-small);
318
320
  min-height: 40px;
319
- padding: 0 var(--smrt-spacing-3, 12px);
321
+ padding: 0 var(--smrt-spacing-3);
320
322
  transition: background-color var(--smrt-duration-short3, 200ms) var(--smrt-easing-standard, cubic-bezier(0.2, 0, 0, 1));
321
323
  }
322
324
 
@@ -328,8 +330,8 @@ function handleInput(e: Event) {
328
330
  flex: 1;
329
331
  display: flex;
330
332
  flex-direction: column;
331
- padding-top: var(--smrt-spacing-2, 8px);
332
- padding-bottom: var(--smrt-spacing-2, 8px);
333
+ padding-top: var(--smrt-spacing-2);
334
+ padding-bottom: var(--smrt-spacing-2);
333
335
  }
334
336
 
335
337
 
@@ -338,7 +340,7 @@ function handleInput(e: Event) {
338
340
  background: transparent;
339
341
  font-size: var(--smrt-typography-body-large-size, 1rem);
340
342
  line-height: var(--smrt-typography-body-large-line-height, 1.5);
341
- letter-spacing: var(--smrt-typography-body-large-tracking, 0.5px);
343
+ letter-spacing: var(--smrt-typography-body-large-tracking);
342
344
  color: var(--smrt-color-on-surface);
343
345
  width: 100%;
344
346
  padding: 0;
@@ -354,8 +356,8 @@ function handleInput(e: Event) {
354
356
  .active-indicator { display: none; }
355
357
 
356
358
  .focused .container {
357
- border-color: var(--field-active);
358
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--field-active) 10%, transparent);
359
+ border-color: var(--smrt-textarea-input-field-active);
360
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-textarea-input-field-active) 10%, transparent);
359
361
  }
360
362
 
361
363
  .mic-btn {
@@ -366,11 +368,11 @@ function handleInput(e: Event) {
366
368
  justify-content: center;
367
369
  border: none;
368
370
  background: transparent;
369
- color: var(--field-color);
370
- border-radius: var(--smrt-radius-full, 9999px);
371
+ color: var(--smrt-textarea-input-field-color);
372
+ border-radius: var(--smrt-radius-full);
371
373
  cursor: pointer;
372
374
  margin-right: -8px;
373
- margin-top: var(--smrt-spacing-2, 8px);
375
+ margin-top: var(--smrt-spacing-2);
374
376
  transition: all 200ms;
375
377
  }
376
378
 
@@ -380,7 +382,7 @@ function handleInput(e: Event) {
380
382
  }
381
383
 
382
384
  .supporting-text {
383
- padding: var(--smrt-spacing-1, 4px) 0 0;
385
+ padding: var(--smrt-spacing-1) 0 0;
384
386
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
385
387
  min-height: 16px;
386
388
  }
@@ -399,6 +401,7 @@ function handleInput(e: Event) {
399
401
  }
400
402
 
401
403
  .smrt-mode {
402
- --field-active: var(--smrt-color-tertiary);
404
+ --smrt-textarea-input-field-active: var(--smrt-color-tertiary);
403
405
  }
406
+ }
404
407
  </style>
@@ -319,7 +319,7 @@ async function startExport() {
319
319
  }
320
320
  </script>
321
321
 
322
- <section class="smrt-import-export" aria-label={collectionLabel ? `${t(M['ui.importExport.label'])}: ${collectionLabel}` : t(M['ui.importExport.label'])}>
322
+ <section class="smrt-import-export" aria-label={collectionLabel ? `${t(M['ui.importExport.label'])}: ${collectionLabel}` : t(M['ui.importExport.label'])} data-smrt-component="ImportExport">
323
323
  {#if canImport && canExport}
324
324
  <SegmentedControl
325
325
  label={t(M['ui.importExport.mode'])}
@@ -637,6 +637,8 @@ async function startExport() {
637
637
  </section>
638
638
 
639
639
  <style>
640
+ @layer smrt.reset, smrt.structure, smrt.theme;
641
+ @layer smrt.theme {
640
642
  .smrt-import-export {
641
643
  display: flex;
642
644
  flex-direction: column;
@@ -675,4 +677,5 @@ async function startExport() {
675
677
  padding: 0;
676
678
  margin: 0;
677
679
  }
680
+ }
678
681
  </style>
@@ -56,7 +56,7 @@ const slotMeta = $derived(moduleMeta?.uiSlots?.[slotId]);
56
56
  class={className}
57
57
  />
58
58
  {:else}
59
- <div class="module-panel-placeholder {className}">
59
+ <div class="module-panel-placeholder {className}" data-smrt-component="ModulePanel">
60
60
  <div class="module-panel-placeholder__icon">
61
61
  <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
62
62
  <path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/>
@@ -85,6 +85,8 @@ const slotMeta = $derived(moduleMeta?.uiSlots?.[slotId]);
85
85
  {/if}
86
86
 
87
87
  <style>
88
+ @layer smrt.reset, smrt.structure, smrt.theme;
89
+ @layer smrt.theme {
88
90
  .module-panel-placeholder {
89
91
  display: flex;
90
92
  flex-direction: column;
@@ -92,15 +94,15 @@ const slotMeta = $derived(moduleMeta?.uiSlots?.[slotId]);
92
94
  justify-content: center;
93
95
  padding: 2rem;
94
96
  text-align: center;
95
- background: var(--smrt-color-surface-container-low, #f8fafc);
96
- border: 1px dashed var(--smrt-color-outline-variant, #e2e8f0);
97
- border-radius: var(--smrt-radius-medium, 8px);
97
+ background: var(--smrt-color-surface-container-low);
98
+ border: 1px dashed var(--smrt-color-outline-variant);
99
+ border-radius: var(--smrt-radius-medium);
98
100
  min-height: 150px;
99
101
  gap: 0.75rem;
100
102
  }
101
103
 
102
104
  .module-panel-placeholder__icon {
103
- color: var(--smrt-color-on-surface-variant, #94a3b8);
105
+ color: var(--smrt-color-on-surface-variant);
104
106
  opacity: 0.6;
105
107
  }
106
108
 
@@ -108,27 +110,28 @@ const slotMeta = $derived(moduleMeta?.uiSlots?.[slotId]);
108
110
  margin: 0;
109
111
  font-size: var(--smrt-typography-title-medium-size, 1rem);
110
112
  font-weight: var(--smrt-typography-weight-semibold, 600);
111
- color: var(--smrt-color-on-surface, #1e293b);
113
+ color: var(--smrt-color-on-surface);
112
114
  }
113
115
 
114
116
  .module-panel-placeholder__code {
115
117
  font-family: var(--smrt-font-family-mono, 'SF Mono', 'Monaco', 'Consolas', monospace);
116
118
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
117
119
  padding: var(--smrt-spacing-1, 0.25rem) var(--smrt-spacing-2, 0.5rem);
118
- background: var(--smrt-color-surface-container-high, #e2e8f0);
119
- border-radius: var(--smrt-radius-small, 4px);
120
- color: var(--smrt-color-on-surface-variant, #64748b);
120
+ background: var(--smrt-color-surface-container-high);
121
+ border-radius: var(--smrt-radius-small);
122
+ color: var(--smrt-color-on-surface-variant);
121
123
  }
122
124
 
123
125
  .module-panel-placeholder__hint {
124
126
  margin: 0;
125
127
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
126
- color: var(--smrt-color-on-surface-variant, #64748b);
128
+ color: var(--smrt-color-on-surface-variant);
127
129
  }
128
130
 
129
131
  .module-panel-placeholder__meta {
130
132
  margin: 0;
131
133
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
132
- color: var(--smrt-color-on-surface-variant, #94a3b8);
134
+ color: var(--smrt-color-on-surface-variant);
133
135
  }
136
+ }
134
137
  </style>
@@ -106,7 +106,7 @@ $effect(() => {
106
106
  });
107
107
  </script>
108
108
 
109
- <div class="smrt-notification-bell">
109
+ <div class="smrt-notification-bell" data-smrt-component="NotificationBell">
110
110
  <Button id={`${instanceId}-trigger`} aria-controls={`${instanceId}-panel`} variant="ghost" aria-haspopup="dialog" aria-expanded={open} onclick={() => (open = !open)}>
111
111
  {heading}{#if unread > 0}<span aria-label={t(M['ui.notification_bell.unread'], { count: unread })}> ({unread})</span>{/if}
112
112
  </Button>
@@ -126,6 +126,8 @@ $effect(() => {
126
126
  </div>
127
127
 
128
128
  <style>
129
+ @layer smrt.reset, smrt.structure, smrt.theme;
130
+ @layer smrt.theme {
129
131
  .smrt-notification-bell { position: relative; }
130
132
  .smrt-notification-bell__panel { position: absolute; z-index: 1; inset-block-start: 100%; inset-inline-end: 0; inline-size: min(24rem, 90vw); padding: var(--smrt-spacing-3); background: var(--smrt-color-surface); border: 1px solid var(--smrt-color-outline); border-radius: var(--smrt-radius-medium); }
131
133
  header { display: flex; justify-content: space-between; gap: var(--smrt-spacing-2); }
@@ -133,4 +135,5 @@ $effect(() => {
133
135
  li { padding-block: var(--smrt-spacing-2); border-block-end: 1px solid var(--smrt-color-outline-variant); }
134
136
  li[data-read='false'] { border-inline-start: 3px solid var(--smrt-color-primary); padding-inline-start: var(--smrt-spacing-2); }
135
137
  p { overflow-wrap: anywhere; }
138
+ }
136
139
  </style>
@@ -44,7 +44,7 @@ $effect(() => {
44
44
  });
45
45
  </script>
46
46
 
47
- <div class="smrt-overview-assistant-undo {className}" data-active={batch ? '' : undefined}>
47
+ <div class="smrt-overview-assistant-undo {className}" data-active={batch ? '' : undefined} data-smrt-component="OverviewAssistantUndo">
48
48
  <!-- The live region stays mounted so each new message is announced. -->
49
49
  <span class="smrt-overview-assistant-undo__message" role="status" aria-live="polite">
50
50
  {#if batch}
@@ -64,6 +64,8 @@ $effect(() => {
64
64
  </div>
65
65
 
66
66
  <style>
67
+ @layer smrt.reset, smrt.structure, smrt.theme;
68
+ @layer smrt.theme {
67
69
  .smrt-overview-assistant-undo {
68
70
  display: flex;
69
71
  flex-wrap: wrap;
@@ -74,4 +76,5 @@ $effect(() => {
74
76
  .smrt-overview-assistant-undo__message {
75
77
  flex: 1 1 12rem;
76
78
  }
79
+ }
77
80
  </style>
@@ -26,6 +26,7 @@ import {
26
26
  type SortableAnnouncement,
27
27
  } from '../sortable/controller.svelte.js';
28
28
  import { tryUseShellLayout } from '../workspace/admin-shell/layout-context.js';
29
+ import { flipRow } from '../workspace/admin-shell/motion.js';
29
30
  import ShellIconButton from '../workspace/admin-shell/ShellIconButton.svelte';
30
31
  import ShellSectionIcon from '../workspace/admin-shell/ShellSectionIcon.svelte';
31
32
  import type { OverviewOpResult } from './controller.svelte.js';
@@ -378,7 +379,7 @@ const headingTag = $derived(`h${headingLevel}`);
378
379
  </article>
379
380
  {/snippet}
380
381
 
381
- <div class="smrt-overview" bind:this={rootEl} data-editing={editing ? '' : undefined} data-presentation={presentation}>
382
+ <div class="smrt-overview" bind:this={rootEl} data-editing={editing ? '' : undefined} data-presentation={presentation} data-smrt-component="OverviewGrid">
382
383
  {#if editing}
383
384
  <div class="smrt-overview__toolbar" role="toolbar" aria-label={t(M['ui.overview.toolbar'])}>
384
385
  <ShellIconButton
@@ -415,11 +416,12 @@ const headingTag = $derived(`h${headingLevel}`);
415
416
  <div
416
417
  role="listitem"
417
418
  class="smrt-overview__item"
419
+ animate:flipRow
418
420
  data-span={spanOf(row)}
419
421
  data-smrt-overview-item={row.widget.id}
420
422
  data-dragging={dragged === row.widget.id ? '' : undefined}
421
423
  data-drop={mark}
422
- style:--span={spanOf(row)}
424
+ style:--smrt-overview-grid-span={spanOf(row)}
423
425
  ondragover={(event) => event.preventDefault()}
424
426
  ondrop={(event) => {
425
427
  if (!sortable.drag) return;
@@ -537,15 +539,17 @@ const headingTag = $derived(`h${headingLevel}`);
537
539
  {/if}
538
540
 
539
541
  <style>
542
+ @layer smrt.reset, smrt.structure, smrt.theme;
543
+ @layer smrt.theme {
540
544
  .smrt-overview { container-type: inline-size; min-inline-size: 0; }
541
545
  .smrt-overview__toolbar { display: flex; gap: var(--smrt-spacing-1); margin-block-end: var(--smrt-spacing-2); }
542
546
  .smrt-overview__empty { margin: 0; color: var(--smrt-color-on-surface-variant); }
543
547
  /* Gaps are tile padding, not grid gap, so a pointer never crosses a dead
544
548
  zone between tiles while dragging. */
545
- .smrt-overview__list { --_pad: var(--smrt-spacing-2); display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: calc(-1 * var(--_pad)); }
546
- .smrt-overview__item { position: relative; grid-column: span var(--span, 1); min-inline-size: 0; padding: var(--_pad); }
549
+ .smrt-overview__list { --smrt-overview-grid-pad: var(--smrt-spacing-2); display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: calc(-1 * var(--smrt-overview-grid-pad)); }
550
+ .smrt-overview__item { position: relative; grid-column: span var(--smrt-overview-grid-span, 1); min-inline-size: 0; padding: var(--smrt-overview-grid-pad); }
547
551
  .smrt-overview__item[data-dragging] { opacity: 0.5; }
548
- .smrt-overview__item[data-drop]::before { content: ''; position: absolute; inset-block: var(--_pad); inline-size: 0.1875rem; border-radius: var(--smrt-radius-full, 9999px); background: var(--smrt-color-primary); }
552
+ .smrt-overview__item[data-drop]::before { content: ''; position: absolute; inset-block: var(--smrt-overview-grid-pad); inline-size: 0.1875rem; border-radius: var(--smrt-radius-full); background: var(--smrt-color-primary); }
549
553
  .smrt-overview__item[data-drop='before']::before { inset-inline-start: 0; }
550
554
  .smrt-overview__item[data-drop='after']::before { inset-inline-end: 0; }
551
555
  .smrt-overview__tile { position: relative; block-size: 100%; box-sizing: border-box; padding: var(--smrt-spacing-3); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-large, var(--smrt-radius-medium)); background: var(--smrt-color-surface); color: var(--smrt-color-on-surface); }
@@ -561,7 +565,7 @@ const headingTag = $derived(`h${headingLevel}`);
561
565
  .smrt-overview__handle:hover { background: var(--smrt-color-surface-container-high); }
562
566
  .smrt-overview__handle:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
563
567
  .smrt-overview__handle[aria-pressed='true'] { background: var(--smrt-color-primary-container); color: var(--smrt-color-on-primary-container); }
564
- .smrt-overview__resize { position: absolute; inset-block-start: 50%; inset-inline-end: -0.4375rem; inline-size: 0.875rem; block-size: 2.75rem; transform: translateY(-50%); border: 1px solid var(--smrt-color-outline); border-radius: var(--smrt-radius-full, 9999px); background: var(--smrt-color-surface-container-high); cursor: ew-resize; touch-action: none; }
568
+ .smrt-overview__resize { position: absolute; inset-block-start: 50%; inset-inline-end: -0.4375rem; inline-size: 0.875rem; block-size: 2.75rem; transform: translateY(-50%); border: 1px solid var(--smrt-color-outline); border-radius: var(--smrt-radius-full); background: var(--smrt-color-surface-container-high); cursor: ew-resize; touch-action: none; }
565
569
  .smrt-overview__resize:hover { background: var(--smrt-color-primary-container); }
566
570
  .smrt-overview__resize:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
567
571
  .smrt-overview__choices { display: grid; gap: var(--smrt-spacing-1); margin: 0; padding: 0; list-style: none; }
@@ -579,4 +583,5 @@ const headingTag = $derived(`h${headingLevel}`);
579
583
  .smrt-overview__list { grid-template-columns: minmax(0, 1fr); }
580
584
  .smrt-overview__list .smrt-overview__item[data-span] { grid-column: span 1; }
581
585
  }
586
+ }
582
587
  </style>
@@ -1 +1 @@
1
- {"version":3,"file":"OverviewGrid.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/overview/OverviewGrid.svelte.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA4bzD,QAAA,MAAM,YAAY,uDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"OverviewGrid.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/overview/OverviewGrid.svelte.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA6bzD,QAAA,MAAM,YAAY,uDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -186,8 +186,11 @@ const modelValues = $derived(
186
186
  </Form>
187
187
 
188
188
  <style>
189
+ @layer smrt.reset, smrt.structure, smrt.theme;
190
+ @layer smrt.theme {
189
191
  .smrt-widget-form__check { display: flex; flex-direction: column; gap: var(--smrt-spacing-1); }
190
192
  .smrt-widget-form__hint { color: var(--smrt-color-on-surface-variant); }
191
193
  .smrt-widget-form__error { color: var(--smrt-color-error); }
192
194
  .smrt-widget-form__none { margin: 0; color: var(--smrt-color-on-surface-variant); }
195
+ }
193
196
  </style>
@@ -57,9 +57,9 @@ const summary = $derived(
57
57
  </script>
58
58
 
59
59
  {#if points.length === 0}
60
- <p class="smrt-chart__empty">{t(M['ui.overview.no_data'])}</p>
60
+ <p class="smrt-chart__empty" data-smrt-component="ChartWidget">{t(M['ui.overview.no_data'])}</p>
61
61
  {:else if style === 'line'}
62
- <div class="smrt-chart">
62
+ <div class="smrt-chart" data-smrt-component="ChartWidget">
63
63
  <svg class="smrt-chart__line" viewBox="0 0 100 40" preserveAspectRatio="none" role="img" aria-label={summary}>
64
64
  <polyline points={polyline} fill="none" stroke="currentColor" stroke-width="2" vector-effect="non-scaling-stroke" />
65
65
  </svg>
@@ -83,7 +83,7 @@ const summary = $derived(
83
83
  </table>
84
84
  </div>
85
85
  {:else}
86
- <ul class="smrt-chart__bars" aria-label={summary}>
86
+ <ul class="smrt-chart__bars" aria-label={summary} data-smrt-component="ChartWidget">
87
87
  {#each points as point, index (index)}
88
88
  <li class="smrt-chart__row">
89
89
  <span class="smrt-chart__label">{point.label}</span>
@@ -97,15 +97,18 @@ const summary = $derived(
97
97
  {/if}
98
98
 
99
99
  <style>
100
+ @layer smrt.reset, smrt.structure, smrt.theme;
101
+ @layer smrt.theme {
100
102
  .smrt-chart { display: grid; gap: var(--smrt-spacing-1); color: var(--smrt-color-primary); }
101
103
  .smrt-chart__line { inline-size: 100%; block-size: 7rem; overflow: visible; }
102
104
  .smrt-chart__axis { display: flex; justify-content: space-between; margin: 0; color: var(--smrt-color-on-surface-variant); font-size: var(--smrt-typography-label-large-size, 0.75rem); }
103
105
  .smrt-chart__bars { display: grid; gap: var(--smrt-spacing-2); margin: 0; padding: 0; list-style: none; }
104
106
  .smrt-chart__row { display: grid; grid-template-columns: minmax(4rem, 30%) minmax(0, 1fr) auto; align-items: center; gap: var(--smrt-spacing-2); font-size: var(--smrt-typography-body-medium-size, 0.875rem); color: var(--smrt-color-on-surface); }
105
107
  .smrt-chart__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
106
- .smrt-chart__track { display: block; block-size: 0.625rem; border-radius: var(--smrt-radius-full, 9999px); background: var(--smrt-color-surface-container-high); overflow: hidden; }
108
+ .smrt-chart__track { display: block; block-size: 0.625rem; border-radius: var(--smrt-radius-full); background: var(--smrt-color-surface-container-high); overflow: hidden; }
107
109
  .smrt-chart__bar { display: block; block-size: 100%; border-radius: inherit; background: var(--smrt-color-primary); }
108
110
  .smrt-chart__value { font-variant-numeric: tabular-nums; color: var(--smrt-color-on-surface-variant); }
109
111
  .smrt-chart__empty { margin: 0; color: var(--smrt-color-on-surface-variant); }
110
112
  .smrt-chart__table { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
113
+ }
111
114
  </style>
@@ -56,7 +56,7 @@ const href = $derived(
56
56
  </script>
57
57
 
58
58
  {#if valid && metric}
59
- <div class="smrt-metric">
59
+ <div class="smrt-metric" data-smrt-component="MetricWidget">
60
60
  {#if href}
61
61
  <a class="smrt-metric__value" {href}>{text}</a>
62
62
  {:else}
@@ -73,14 +73,17 @@ const href = $derived(
73
73
  {/if}
74
74
  </div>
75
75
  {:else}
76
- <p class="smrt-metric__label">{t(M['ui.overview.no_data'])}</p>
76
+ <p class="smrt-metric__label" data-smrt-component="MetricWidget">{t(M['ui.overview.no_data'])}</p>
77
77
  {/if}
78
78
 
79
79
  <style>
80
+ @layer smrt.reset, smrt.structure, smrt.theme;
81
+ @layer smrt.theme {
80
82
  .smrt-metric { display: grid; gap: var(--smrt-spacing-1); }
81
83
  .smrt-metric__value { margin: 0; color: var(--smrt-color-on-surface); font-size: var(--smrt-typography-display-small-size, 2rem); font-weight: var(--smrt-typography-weight-medium, 500); line-height: 1.1; text-decoration: none; font-variant-numeric: tabular-nums; }
82
84
  a.smrt-metric__value:hover { text-decoration: underline; }
83
85
  a.smrt-metric__value:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; border-radius: var(--smrt-radius-small, 0.25rem); }
84
86
  .smrt-metric__label { margin: 0; color: var(--smrt-color-on-surface-variant); font-size: var(--smrt-typography-body-medium-size, 0.875rem); }
85
87
  .smrt-metric__change { margin: 0; color: var(--smrt-color-on-surface-variant); font-size: var(--smrt-typography-label-large-size, 0.875rem); }
88
+ }
86
89
  </style>
@@ -24,9 +24,9 @@ const blocks = $derived(
24
24
  {/snippet}
25
25
 
26
26
  {#if blocks.length === 0}
27
- <p class="smrt-note__empty">{t(M['ui.overview.no_data'])}</p>
27
+ <p class="smrt-note__empty" data-smrt-component="NoteWidget">{t(M['ui.overview.no_data'])}</p>
28
28
  {:else}
29
- <div class="smrt-note">
29
+ <div class="smrt-note" data-smrt-component="NoteWidget">
30
30
  {#each blocks as block, index (index)}
31
31
  {#if block.type === 'heading'}
32
32
  <p class="smrt-note__heading" data-level={block.level}><strong>{@render inline(block.children)}</strong></p>
@@ -48,6 +48,8 @@ const blocks = $derived(
48
48
  {/if}
49
49
 
50
50
  <style>
51
+ @layer smrt.reset, smrt.structure, smrt.theme;
52
+ @layer smrt.theme {
51
53
  .smrt-note { display: grid; gap: var(--smrt-spacing-2); color: var(--smrt-color-on-surface); font-size: var(--smrt-typography-body-medium-size, 0.875rem); overflow-wrap: anywhere; }
52
54
  .smrt-note p, .smrt-note ul, .smrt-note ol, .smrt-note blockquote, .smrt-note pre { margin: 0; }
53
55
  .smrt-note ul, .smrt-note ol { padding-inline-start: var(--smrt-spacing-5, 1.25rem); }
@@ -58,4 +60,5 @@ const blocks = $derived(
58
60
  .smrt-note__heading[data-level='1'] { font-size: var(--smrt-typography-title-large-size, 1.25rem); }
59
61
  .smrt-note__heading[data-level='2'] { font-size: var(--smrt-typography-title-medium-size, 1.125rem); }
60
62
  .smrt-note__empty { margin: 0; color: var(--smrt-color-on-surface-variant); }
63
+ }
61
64
  </style>
@@ -49,9 +49,9 @@ const viewAll = $derived(
49
49
  </script>
50
50
 
51
51
  {#if rows.length === 0}
52
- <p class="smrt-records__empty">{t(M['ui.overview.records.empty'])}</p>
52
+ <p class="smrt-records__empty" data-smrt-component="RecordListWidget">{t(M['ui.overview.records.empty'])}</p>
53
53
  {:else}
54
- <ul class="smrt-records">
54
+ <ul class="smrt-records" data-smrt-component="RecordListWidget">
55
55
  {#each rows as row (row.id)}
56
56
  <li class="smrt-records__row">
57
57
  <span class="smrt-records__main">
@@ -68,7 +68,7 @@ const viewAll = $derived(
68
68
  </ul>
69
69
  {/if}
70
70
  {#if total !== null || viewAll}
71
- <p class="smrt-records__foot">
71
+ <p class="smrt-records__foot" data-smrt-component="RecordListWidget">
72
72
  {#if total !== null}
73
73
  <span>{t(M['ui.overview.records.total'], { count: new Intl.NumberFormat(locale).format(total) })}</span>
74
74
  {/if}
@@ -77,6 +77,8 @@ const viewAll = $derived(
77
77
  {/if}
78
78
 
79
79
  <style>
80
+ @layer smrt.reset, smrt.structure, smrt.theme;
81
+ @layer smrt.theme {
80
82
  .smrt-records { display: grid; margin: 0; padding: 0; list-style: none; }
81
83
  .smrt-records__row { display: flex; align-items: baseline; justify-content: space-between; gap: var(--smrt-spacing-3); padding: var(--smrt-spacing-2) 0; border-block-end: 1px solid var(--smrt-color-outline-variant); }
82
84
  .smrt-records__row:last-child { border-block-end: 0; }
@@ -88,4 +90,5 @@ const viewAll = $derived(
88
90
  .smrt-records__foot { display: flex; justify-content: space-between; gap: var(--smrt-spacing-3); margin: var(--smrt-spacing-2) 0 0; color: var(--smrt-color-on-surface-variant); font-size: var(--smrt-typography-body-medium-size, 0.875rem); }
89
91
  .smrt-records__foot a { color: var(--smrt-color-primary); }
90
92
  .smrt-records__empty { margin: 0; color: var(--smrt-color-on-surface-variant); }
93
+ }
91
94
  </style>