@happyvertical/smrt-svelte 0.55.15 → 0.55.17

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 +145 -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 +274 -9
  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 +27 -1
  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 +4 -1
  101. package/dist/components/workspace/admin-shell/AdminShell.svelte +502 -72
  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 +21 -8
  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 +4 -1
  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 +4 -1
  113. package/dist/components/workspace/admin-shell/ShellLayoutEditor.svelte +4 -1
  114. package/dist/components/workspace/admin-shell/ShellNavEditor.svelte +13 -7
  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 +4 -1
  118. package/dist/components/workspace/admin-shell/ShellSectionIcon.svelte +4 -1
  119. package/dist/components/workspace/admin-shell/ShellSectionMenu.svelte +15 -10
  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 +81 -36
  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 +305 -53
  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
@@ -298,7 +298,7 @@ function handleInput(e: Event) {
298
298
  }
299
299
  </script>
300
300
 
301
- <div class="smrt-phone" class:listening={isHolding}>
301
+ <div class="smrt-phone" class:listening={isHolding} data-smrt-component="PhoneInput">
302
302
  {#if label}
303
303
  <FieldLabel id={labelId} for={name} {label} {required} />
304
304
  {/if}
@@ -391,10 +391,12 @@ function handleInput(e: Event) {
391
391
  </div>
392
392
 
393
393
  <style>
394
+ @layer smrt.reset, smrt.structure, smrt.theme;
395
+ @layer smrt.theme {
394
396
  .smrt-phone {
395
397
  display: flex;
396
398
  flex-direction: column;
397
- gap: var(--smrt-spacing-1, 4px);
399
+ gap: var(--smrt-spacing-1);
398
400
  position: relative;
399
401
  }
400
402
 
@@ -405,42 +407,42 @@ function handleInput(e: Event) {
405
407
 
406
408
  .smrt-input {
407
409
  flex: 1;
408
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
410
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
409
411
  font-size: var(--smrt-typography-body-large-size, 1rem);
410
- border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
411
- border-radius: var(--smrt-radius-small, 6px);
412
- background: var(--smrt-color-surface, #fff);
412
+ border: 1px solid var(--smrt-color-outline-variant);
413
+ border-radius: var(--smrt-radius-small);
414
+ background: var(--smrt-color-surface);
413
415
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
414
416
  }
415
417
 
416
418
  .smrt-input:focus {
417
419
  outline: none;
418
- border-color: var(--smrt-color-primary, #005ac1);
419
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary, #005ac1) 10%, transparent);
420
+ border-color: var(--smrt-color-primary);
421
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary) 10%, transparent);
420
422
  }
421
423
 
422
424
  .smrt-input.smrt-mode {
423
- padding-right: var(--smrt-spacing-11, 44px);
425
+ padding-right: var(--smrt-spacing-11);
424
426
  cursor: pointer;
425
427
  }
426
428
 
427
429
  .smrt-input:disabled {
428
- background: var(--smrt-color-surface-container-high, #f3f4f6);
430
+ background: var(--smrt-color-surface-container-high);
429
431
  cursor: not-allowed;
430
432
  }
431
433
 
432
434
  .smrt-phone.listening .smrt-input {
433
- border-color: var(--smrt-color-success, #22c55e);
434
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success, #22c55e) 30%, transparent);
435
+ border-color: var(--smrt-color-success);
436
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success) 30%, transparent);
435
437
  animation: pulse-green 1.5s var(--smrt-easing-standard, ease-in-out) infinite;
436
438
  }
437
439
 
438
440
  @keyframes pulse-green {
439
441
  0%, 100% {
440
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success, #22c55e) 30%, transparent);
442
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success) 30%, transparent);
441
443
  }
442
444
  50% {
443
- box-shadow: 0 0 0 6px color-mix(in srgb, var(--smrt-color-success, #22c55e) 15%, transparent);
445
+ box-shadow: 0 0 0 6px color-mix(in srgb, var(--smrt-color-success) 15%, transparent);
444
446
  }
445
447
  }
446
448
 
@@ -462,19 +464,19 @@ function handleInput(e: Event) {
462
464
  justify-content: center;
463
465
  background: transparent;
464
466
  border: none;
465
- border-radius: var(--smrt-radius-sm, 4px);
466
- color: var(--smrt-color-on-surface-variant, #6b7280);
467
+ border-radius: var(--smrt-radius-sm);
468
+ color: var(--smrt-color-on-surface-variant);
467
469
  cursor: pointer;
468
470
  transition: all 0.2s;
469
471
  }
470
472
 
471
473
  .mic-btn:hover {
472
474
  background: var(--smrt-color-surface-container);
473
- color: var(--smrt-color-on-surface, #374151);
475
+ color: var(--smrt-color-on-surface);
474
476
  }
475
477
 
476
478
  .mic-btn.active {
477
- background: var(--smrt-color-primary, #22c55e);
479
+ background: var(--smrt-color-primary);
478
480
  color: var(--smrt-color-on-primary, white);
479
481
  }
480
482
 
@@ -484,12 +486,12 @@ function handleInput(e: Event) {
484
486
  }
485
487
 
486
488
  .smrt-input.invalid {
487
- border-color: var(--smrt-color-error, #ba1a1a);
489
+ border-color: var(--smrt-color-error);
488
490
  }
489
491
 
490
492
  .smrt-input.invalid:focus {
491
- border-color: var(--smrt-color-error, #ba1a1a);
492
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-error, #ba1a1a) 10%, transparent);
493
+ border-color: var(--smrt-color-error);
494
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-error) 10%, transparent);
493
495
  }
494
496
 
495
497
  .smrt-input.processing {
@@ -502,17 +504,17 @@ function handleInput(e: Event) {
502
504
  .listening-indicator {
503
505
  display: flex;
504
506
  align-items: center;
505
- gap: var(--smrt-spacing-2, 8px);
507
+ gap: var(--smrt-spacing-2);
506
508
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
507
509
  color: var(--smrt-color-on-surface-variant);
508
- margin-top: var(--smrt-spacing-1, 4px);
510
+ margin-top: var(--smrt-spacing-1);
509
511
  }
510
512
 
511
513
  .listening-dot {
512
514
  width: 8px;
513
515
  height: 8px;
514
516
  background: var(--smrt-color-success);
515
- border-radius: var(--smrt-radius-full, 9999px);
517
+ border-radius: var(--smrt-radius-full);
516
518
  animation: pulse-dot 1s ease-in-out infinite;
517
519
  }
518
520
 
@@ -536,19 +538,19 @@ function handleInput(e: Event) {
536
538
  .processing-indicator {
537
539
  display: flex;
538
540
  align-items: center;
539
- gap: var(--smrt-spacing-2, 8px);
541
+ gap: var(--smrt-spacing-2);
540
542
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
541
- color: var(--smrt-color-on-surface-variant, #6b7280);
542
- margin-top: var(--smrt-spacing-1, 4px);
543
+ color: var(--smrt-color-on-surface-variant);
544
+ margin-top: var(--smrt-spacing-1);
543
545
  }
544
546
 
545
547
  .downloading-indicator {
546
548
  display: flex;
547
549
  align-items: center;
548
- gap: var(--smrt-spacing-2, 8px);
550
+ gap: var(--smrt-spacing-2);
549
551
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
550
552
  color: var(--smrt-color-tertiary);
551
- margin-top: var(--smrt-spacing-1, 4px);
553
+ margin-top: var(--smrt-spacing-1);
552
554
  }
553
555
 
554
556
  .processing-spinner {
@@ -556,7 +558,7 @@ function handleInput(e: Event) {
556
558
  height: 12px;
557
559
  border: 2px solid var(--smrt-color-outline-variant);
558
560
  border-top-color: var(--smrt-color-primary);
559
- border-radius: var(--smrt-radius-full, 9999px);
561
+ border-radius: var(--smrt-radius-full);
560
562
  animation: spin 0.8s linear infinite;
561
563
  }
562
564
 
@@ -568,13 +570,14 @@ function handleInput(e: Event) {
568
570
 
569
571
  .error-message {
570
572
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
571
- color: var(--smrt-color-error, #f97316);
572
- margin-top: var(--smrt-spacing-1, 4px);
573
+ color: var(--smrt-color-error);
574
+ margin-top: var(--smrt-spacing-1);
573
575
  }
574
576
 
575
577
  .validation-error {
576
578
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
577
- color: var(--smrt-color-error, #ba1a1a);
578
- margin-top: var(--smrt-spacing-1, 4px);
579
+ color: var(--smrt-color-error);
580
+ margin-top: var(--smrt-spacing-1);
579
581
  }
582
+ }
580
583
  </style>
@@ -132,7 +132,7 @@ const sizeClasses = {
132
132
  <div
133
133
  class="search-input {sizeClasses[size]}"
134
134
  class:search-input--disabled={disabled}
135
- class:search-input--loading={loading}
135
+ class:search-input--loading={loading} data-smrt-component="SearchInput"
136
136
  >
137
137
  <span class="search-input__icon" aria-hidden="true">
138
138
  {#if loading}
@@ -213,20 +213,22 @@ const sizeClasses = {
213
213
  </div>
214
214
 
215
215
  <style>
216
+ @layer smrt.reset, smrt.structure, smrt.theme;
217
+ @layer smrt.theme {
216
218
  .search-input {
217
219
  position: relative;
218
220
  display: flex;
219
221
  align-items: center;
220
222
  width: 100%;
221
- background: var(--smrt-color-surface-container-low, #f9fafb);
222
- border: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
223
+ background: var(--smrt-color-surface-container-low);
224
+ border: 1px solid var(--smrt-color-outline-variant);
223
225
  border-radius: var(--smrt-radius-md, 0.5rem);
224
226
  transition: all var(--smrt-duration-fast, 150ms) var(--smrt-easing-standard, ease);
225
227
  }
226
228
 
227
229
  .search-input:focus-within {
228
- background: var(--smrt-color-surface, #ffffff);
229
- border-color: var(--smrt-color-primary, #005ac1);
230
+ background: var(--smrt-color-surface);
231
+ border-color: var(--smrt-color-primary);
230
232
  box-shadow: 0 0 0 3px var(--smrt-color-primary-container, rgba(0, 90, 193, 0.1));
231
233
  }
232
234
 
@@ -240,7 +242,7 @@ const sizeClasses = {
240
242
  align-items: center;
241
243
  justify-content: center;
242
244
  flex-shrink: 0;
243
- color: var(--smrt-color-on-surface-variant, #6b7280);
245
+ color: var(--smrt-color-on-surface-variant);
244
246
  }
245
247
 
246
248
  .search-input__spinner {
@@ -259,12 +261,12 @@ const sizeClasses = {
259
261
  border: none;
260
262
  background: transparent;
261
263
  font-family: inherit;
262
- color: var(--smrt-color-on-surface, #111827);
264
+ color: var(--smrt-color-on-surface);
263
265
  outline: none;
264
266
  }
265
267
 
266
268
  .search-input__field::placeholder {
267
- color: var(--smrt-color-on-surface-variant, #9ca3af);
269
+ color: var(--smrt-color-on-surface-variant);
268
270
  }
269
271
 
270
272
  /* Hide default search clear button */
@@ -280,19 +282,19 @@ const sizeClasses = {
280
282
  padding: 0;
281
283
  border: none;
282
284
  background: transparent;
283
- color: var(--smrt-color-on-surface-variant, #6b7280);
285
+ color: var(--smrt-color-on-surface-variant);
284
286
  cursor: pointer;
285
- border-radius: var(--smrt-radius-full, 9999px);
287
+ border-radius: var(--smrt-radius-full);
286
288
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
287
289
  }
288
290
 
289
291
  .search-input__clear:hover {
290
- color: var(--smrt-color-on-surface, #111827);
291
- background: var(--smrt-color-surface-container, #f3f4f6);
292
+ color: var(--smrt-color-on-surface);
293
+ background: var(--smrt-color-surface-container);
292
294
  }
293
295
 
294
296
  .search-input__clear:focus-visible {
295
- outline: 2px solid var(--smrt-color-primary, #005ac1);
297
+ outline: 2px solid var(--smrt-color-primary);
296
298
  outline-offset: 2px;
297
299
  }
298
300
 
@@ -355,4 +357,5 @@ const sizeClasses = {
355
357
  height: 32px;
356
358
  margin-right: var(--smrt-spacing-3, 0.75rem);
357
359
  }
360
+ }
358
361
  </style>
@@ -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>