@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
@@ -65,7 +65,7 @@ function handleKeydown(e: KeyboardEvent) {
65
65
  onkeydown={handleKeydown}
66
66
  role="button"
67
67
  tabindex="0"
68
- aria-label={isListening ? 'Stop listening' : 'Click to speak'}
68
+ aria-label={isListening ? 'Stop listening' : 'Click to speak'} data-smrt-component="FormMicButton"
69
69
  >
70
70
  {#if isExtracting}
71
71
  <svg
@@ -102,12 +102,14 @@ function handleKeydown(e: KeyboardEvent) {
102
102
  {/if}
103
103
 
104
104
  <style>
105
+ @layer smrt.reset, smrt.structure, smrt.theme;
106
+ @layer smrt.theme {
105
107
  .form-mic-icon {
106
108
  display: inline-flex;
107
109
  align-items: center;
108
110
  justify-content: center;
109
111
  position: relative;
110
- color: var(--smrt-color-on-surface-variant, #9ca3af);
112
+ color: var(--smrt-color-on-surface-variant);
111
113
  cursor: pointer;
112
114
  transition: color var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
113
115
  vertical-align: middle;
@@ -115,16 +117,16 @@ function handleKeydown(e: KeyboardEvent) {
115
117
  }
116
118
 
117
119
  .form-mic-icon:hover {
118
- color: var(--smrt-color-on-surface-variant, #6b7280);
120
+ color: var(--smrt-color-on-surface-variant);
119
121
  }
120
122
 
121
123
  .form-mic-icon.listening {
122
- color: var(--smrt-color-primary, #22c55e);
124
+ color: var(--smrt-color-primary);
123
125
  animation: pulse 1.5s ease-in-out infinite;
124
126
  }
125
127
 
126
128
  .form-mic-icon.extracting {
127
- color: var(--smrt-color-primary, #22c55e);
129
+ color: var(--smrt-color-primary);
128
130
  }
129
131
 
130
132
  .tooltip {
@@ -134,8 +136,8 @@ function handleKeydown(e: KeyboardEvent) {
134
136
  transform: translateX(-50%);
135
137
  margin-top: 0.5rem;
136
138
  padding: 0.5rem 0.75rem;
137
- background: var(--smrt-color-inverse-surface, var(--smrt-color-on-surface, #1f2937));
138
- color: var(--smrt-color-inverse-on-surface, #fff);
139
+ background: var(--smrt-color-inverse-surface, var(--smrt-color-on-surface));
140
+ color: var(--smrt-color-inverse-on-surface);
139
141
  font-size: var(--smrt-typography-label-medium-size, 0.75rem);
140
142
  font-weight: var(--smrt-typography-weight-normal, 400);
141
143
  border-radius: 0.375rem;
@@ -179,4 +181,5 @@ function handleKeydown(e: KeyboardEvent) {
179
181
  animation: none;
180
182
  }
181
183
  }
184
+ }
182
185
  </style>
@@ -189,14 +189,17 @@ useWebMcpTool(
189
189
  );
190
190
  </script>
191
191
 
192
- <div class="smrt-form-scope" data-smrt-form-scope={formId} bind:this={scope}>
192
+ <div class="smrt-form-scope" data-smrt-form-scope={formId} bind:this={scope} data-smrt-component="FormScope">
193
193
  {@render children()}
194
194
  <StagedControlReview {registry} {formId} {formElement} summary={stagedReview} />
195
195
  </div>
196
196
 
197
197
  <style>
198
+ @layer smrt.reset, smrt.structure, smrt.theme;
199
+ @layer smrt.theme {
198
200
  /* Layout-neutral: the wrapped content lays out exactly as before. */
199
201
  .smrt-form-scope {
200
202
  display: contents;
201
203
  }
204
+ }
202
205
  </style>
@@ -441,7 +441,7 @@ function handleUnitChange(e: Event) {
441
441
  }
442
442
  </script>
443
443
 
444
- <div class="smrt-measurement" data-smrt-field-owner={fieldOwnerToken}>
444
+ <div class="smrt-measurement" data-smrt-field-owner={fieldOwnerToken} data-smrt-component="MeasurementInput">
445
445
  {#if label}
446
446
  <FieldLabel for={name} {label} {required} />
447
447
  {/if}
@@ -497,31 +497,33 @@ function handleUnitChange(e: Event) {
497
497
  </div>
498
498
 
499
499
  <style>
500
+ @layer smrt.reset, smrt.structure, smrt.theme;
501
+ @layer smrt.theme {
500
502
  .smrt-measurement {
501
503
  display: flex;
502
504
  flex-direction: column;
503
- gap: var(--smrt-spacing-1, 4px);
505
+ gap: var(--smrt-spacing-1);
504
506
  }
505
507
 
506
508
  .input-wrapper {
507
509
  display: flex;
508
- gap: var(--smrt-spacing-2, 8px);
510
+ gap: var(--smrt-spacing-2);
509
511
  }
510
512
 
511
513
  .input-wrapper.smrt-mode {
512
- border: 1px solid var(--smrt-color-tertiary, #6b5778);
513
- border-radius: var(--smrt-radius-small, 6px);
514
- padding: var(--smrt-spacing-1, 2px);
515
- background: var(--smrt-color-tertiary-container, #f3e5f5);
514
+ border: 1px solid var(--smrt-color-tertiary);
515
+ border-radius: var(--smrt-radius-small);
516
+ padding: var(--smrt-spacing-1);
517
+ background: var(--smrt-color-tertiary-container);
516
518
  }
517
519
 
518
520
  .smrt-input {
519
521
  flex: 1;
520
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
522
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
521
523
  font-size: var(--smrt-typography-body-large-size, 1rem);
522
- border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
523
- border-radius: var(--smrt-radius-small, 6px);
524
- background: var(--smrt-color-surface, #fff);
524
+ border: 1px solid var(--smrt-color-outline-variant);
525
+ border-radius: var(--smrt-radius-small);
526
+ background: var(--smrt-color-surface);
525
527
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
526
528
  min-width: 0;
527
529
  }
@@ -533,8 +535,8 @@ function handleUnitChange(e: Event) {
533
535
 
534
536
  .smrt-input:focus {
535
537
  outline: none;
536
- border-color: var(--smrt-color-primary, #005ac1);
537
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary, #005ac1) 10%, transparent);
538
+ border-color: var(--smrt-color-primary);
539
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary) 10%, transparent);
538
540
  }
539
541
 
540
542
  .input-wrapper.smrt-mode .smrt-input:focus {
@@ -542,12 +544,12 @@ function handleUnitChange(e: Event) {
542
544
  }
543
545
 
544
546
  .smrt-input:disabled {
545
- background: var(--smrt-color-surface-container-high, #f3f4f6);
547
+ background: var(--smrt-color-surface-container-high);
546
548
  cursor: not-allowed;
547
549
  }
548
550
 
549
551
  .smrt-input.invalid {
550
- border-color: var(--smrt-color-error, #ba1a1a);
552
+ border-color: var(--smrt-color-error);
551
553
  }
552
554
 
553
555
  /* Hide spinner buttons */
@@ -563,11 +565,11 @@ function handleUnitChange(e: Event) {
563
565
  }
564
566
 
565
567
  .unit-select {
566
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
568
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
567
569
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
568
- border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
569
- border-radius: var(--smrt-radius-small, 6px);
570
- background: var(--smrt-color-surface, #fff);
570
+ border: 1px solid var(--smrt-color-outline-variant);
571
+ border-radius: var(--smrt-radius-small);
572
+ background: var(--smrt-color-surface);
571
573
  cursor: pointer;
572
574
  min-width: 100px;
573
575
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
@@ -580,8 +582,8 @@ function handleUnitChange(e: Event) {
580
582
 
581
583
  .unit-select:focus {
582
584
  outline: none;
583
- border-color: var(--smrt-color-primary, #005ac1);
584
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary, #005ac1) 10%, transparent);
585
+ border-color: var(--smrt-color-primary);
586
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary) 10%, transparent);
585
587
  }
586
588
 
587
589
  .unit-select.smrt-mode:focus {
@@ -595,7 +597,8 @@ function handleUnitChange(e: Event) {
595
597
 
596
598
  .validation-error {
597
599
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
598
- color: var(--smrt-color-error, #ba1a1a);
599
- margin-top: var(--smrt-spacing-1, 4px);
600
+ color: var(--smrt-color-error);
601
+ margin-top: var(--smrt-spacing-1);
600
602
  }
603
+ }
601
604
  </style>
@@ -308,7 +308,7 @@ function handleBlur() {
308
308
  }
309
309
  </script>
310
310
 
311
- <div class="smrt-money">
311
+ <div class="smrt-money" data-smrt-component="MoneyInput">
312
312
  {#if label}
313
313
  <FieldLabel id={labelId} for={name} {label} {required} />
314
314
  {/if}
@@ -353,10 +353,12 @@ function handleBlur() {
353
353
  </div>
354
354
 
355
355
  <style>
356
+ @layer smrt.reset, smrt.structure, smrt.theme;
357
+ @layer smrt.theme {
356
358
  .smrt-money {
357
359
  display: flex;
358
360
  flex-direction: column;
359
- gap: var(--smrt-spacing-1, 4px);
361
+ gap: var(--smrt-spacing-1);
360
362
  }
361
363
 
362
364
  .input-wrapper {
@@ -368,7 +370,7 @@ function handleBlur() {
368
370
  .currency-code {
369
371
  position: absolute;
370
372
  right: 12px;
371
- color: var(--smrt-color-on-surface-variant, #9ca3af);
373
+ color: var(--smrt-color-on-surface-variant);
372
374
  font-size: var(--smrt-typography-label-medium-size, 0.75rem);
373
375
  text-transform: uppercase;
374
376
  pointer-events: none;
@@ -376,42 +378,43 @@ function handleBlur() {
376
378
 
377
379
  .smrt-input {
378
380
  flex: 1;
379
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-12, 48px) var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
381
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-12) var(--smrt-spacing-2) var(--smrt-spacing-3);
380
382
  font-size: var(--smrt-typography-body-large-size, 1rem);
381
- border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
382
- border-radius: var(--smrt-radius-small, 6px);
383
- background: var(--smrt-color-surface, #fff);
383
+ border: 1px solid var(--smrt-color-outline-variant);
384
+ border-radius: var(--smrt-radius-small);
385
+ background: var(--smrt-color-surface);
384
386
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
385
387
  text-align: right;
386
388
  }
387
389
 
388
390
  .smrt-input:focus {
389
391
  outline: none;
390
- border-color: var(--smrt-color-primary, #005ac1);
391
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary, #005ac1) 10%, transparent);
392
+ border-color: var(--smrt-color-primary);
393
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary) 10%, transparent);
392
394
  }
393
395
 
394
396
  .smrt-input:disabled {
395
- background: var(--smrt-color-surface-container-high, #f3f4f6);
397
+ background: var(--smrt-color-surface-container-high);
396
398
  cursor: not-allowed;
397
399
  }
398
400
 
399
401
  .smrt-input.smrt-mode {
400
- border-color: var(--smrt-color-tertiary, #6b5778);
402
+ border-color: var(--smrt-color-tertiary);
401
403
  }
402
404
 
403
405
  .smrt-input.invalid {
404
- border-color: var(--smrt-color-error, #ba1a1a);
406
+ border-color: var(--smrt-color-error);
405
407
  }
406
408
 
407
409
  .smrt-input.invalid:focus {
408
410
  border-color: var(--smrt-color-error);
409
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-error, #ba1a1a) 10%, transparent);
411
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-error) 10%, transparent);
410
412
  }
411
413
 
412
414
  .validation-error {
413
415
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
414
- color: var(--smrt-color-error, #ba1a1a);
415
- margin-top: var(--smrt-spacing-1, 4px);
416
+ color: var(--smrt-color-error);
417
+ margin-top: var(--smrt-spacing-1);
416
418
  }
419
+ }
417
420
  </style>
@@ -233,7 +233,7 @@ function handleInput(e: Event) {
233
233
  }
234
234
  </script>
235
235
 
236
- <div class="smrt-number">
236
+ <div class="smrt-number" data-smrt-component="NumberInput">
237
237
  {#if label}
238
238
  <FieldLabel id={labelId} for={name} {label} {required} />
239
239
  {/if}
@@ -272,12 +272,14 @@ function handleInput(e: Event) {
272
272
  </div>
273
273
 
274
274
  <style>
275
+ @layer smrt.reset, smrt.structure, smrt.theme;
276
+ @layer smrt.theme {
275
277
  .smrt-number {
276
278
  display: flex;
277
279
  flex-direction: column;
278
280
  width: 100%;
279
281
  min-width: 0;
280
- gap: var(--smrt-spacing-1, 4px);
282
+ gap: var(--smrt-spacing-1);
281
283
  }
282
284
 
283
285
  .input-wrapper {
@@ -290,36 +292,36 @@ function handleInput(e: Event) {
290
292
  box-sizing: border-box;
291
293
  min-width: 0;
292
294
  width: 100%;
293
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
295
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
294
296
  font-size: var(--smrt-typography-body-large-size, 1rem);
295
- border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
296
- border-radius: var(--smrt-radius-small, 6px);
297
- background: var(--smrt-color-surface, #fff);
297
+ border: 1px solid var(--smrt-color-outline-variant);
298
+ border-radius: var(--smrt-radius-small);
299
+ background: var(--smrt-color-surface);
298
300
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
299
301
  }
300
302
 
301
303
  .smrt-input:focus {
302
304
  outline: none;
303
- border-color: var(--smrt-color-primary, #005ac1);
304
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary, #005ac1) 10%, transparent);
305
+ border-color: var(--smrt-color-primary);
306
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary) 10%, transparent);
305
307
  }
306
308
 
307
309
  .smrt-input:disabled {
308
- background: var(--smrt-color-surface-container-high, #f3f4f6);
310
+ background: var(--smrt-color-surface-container-high);
309
311
  cursor: not-allowed;
310
312
  }
311
313
 
312
314
  .smrt-input.smrt-mode {
313
- border-color: var(--smrt-color-tertiary, #6b5778);
315
+ border-color: var(--smrt-color-tertiary);
314
316
  }
315
317
 
316
318
  .smrt-input.invalid {
317
- border-color: var(--smrt-color-error, #ba1a1a);
319
+ border-color: var(--smrt-color-error);
318
320
  }
319
321
 
320
322
  .smrt-input.invalid:focus {
321
323
  border-color: var(--smrt-color-error);
322
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-error, #ba1a1a) 10%, transparent);
324
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-error) 10%, transparent);
323
325
  }
324
326
 
325
327
  /* Hide spinner buttons */
@@ -336,7 +338,8 @@ function handleInput(e: Event) {
336
338
 
337
339
  .validation-error {
338
340
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
339
- color: var(--smrt-color-error, #ba1a1a);
340
- margin-top: var(--smrt-spacing-1, 4px);
341
+ color: var(--smrt-color-error);
342
+ margin-top: var(--smrt-spacing-1);
341
343
  }
344
+ }
342
345
  </style>
@@ -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>