@happyvertical/smrt-svelte 0.55.16 → 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
@@ -395,7 +395,7 @@ function handleCountryChange(e: Event) {
395
395
  }
396
396
  </script>
397
397
 
398
- <div class="smrt-address" data-smrt-field-owner={fieldOwnerToken}>
398
+ <div class="smrt-address" data-smrt-field-owner={fieldOwnerToken} data-smrt-component="AddressInput">
399
399
  {#if label}
400
400
  <FieldLabel for={primaryFieldId} {label} {required} />
401
401
  {/if}
@@ -517,36 +517,38 @@ function handleCountryChange(e: Event) {
517
517
  </div>
518
518
 
519
519
  <style>
520
+ @layer smrt.reset, smrt.structure, smrt.theme;
521
+ @layer smrt.theme {
520
522
  .smrt-address {
521
523
  display: flex;
522
524
  flex-direction: column;
523
- gap: var(--smrt-spacing-2, 8px);
525
+ gap: var(--smrt-spacing-2);
524
526
  }
525
527
 
526
528
  .address-fields {
527
529
  display: flex;
528
530
  flex-direction: column;
529
- gap: var(--smrt-spacing-3, 12px);
530
- padding: var(--smrt-spacing-4, 16px);
531
- background: var(--smrt-color-surface-container-low, #f9fafb);
532
- border: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
533
- border-radius: var(--smrt-radius-medium, 8px);
531
+ gap: var(--smrt-spacing-3);
532
+ padding: var(--smrt-spacing-4);
533
+ background: var(--smrt-color-surface-container-low);
534
+ border: 1px solid var(--smrt-color-outline-variant);
535
+ border-radius: var(--smrt-radius-medium);
534
536
  }
535
537
 
536
538
  .address-fields.smrt-mode {
537
- border-color: var(--smrt-color-tertiary, #6b5778);
538
- background: var(--smrt-color-tertiary-container, #f3e5f5);
539
+ border-color: var(--smrt-color-tertiary);
540
+ background: var(--smrt-color-tertiary-container);
539
541
  }
540
542
 
541
543
  .field-row {
542
544
  display: flex;
543
545
  flex-direction: column;
544
- gap: var(--smrt-spacing-1, 4px);
546
+ gap: var(--smrt-spacing-1);
545
547
  }
546
548
 
547
549
  .field-row-group {
548
550
  display: flex;
549
- gap: var(--smrt-spacing-3, 12px);
551
+ gap: var(--smrt-spacing-3);
550
552
  }
551
553
 
552
554
  .full-width {
@@ -564,33 +566,33 @@ function handleCountryChange(e: Event) {
564
566
  .field-label {
565
567
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
566
568
  font-weight: var(--smrt-typography-body-small-weight, 500);
567
- color: var(--smrt-color-on-surface-variant, #6b7280);
569
+ color: var(--smrt-color-on-surface-variant);
568
570
  text-transform: uppercase;
569
571
  letter-spacing: 0.025em;
570
572
  }
571
573
 
572
574
  .smrt-input {
573
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
575
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
574
576
  font-size: var(--smrt-typography-body-large-size, 1rem);
575
- border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
576
- border-radius: var(--smrt-radius-small, 6px);
577
- background: var(--smrt-color-surface, #fff);
577
+ border: 1px solid var(--smrt-color-outline-variant);
578
+ border-radius: var(--smrt-radius-small);
579
+ background: var(--smrt-color-surface);
578
580
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
579
581
  }
580
582
 
581
583
  .smrt-input: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
  .smrt-input:disabled {
588
- background: var(--smrt-color-surface-container-high, #f3f4f6);
590
+ background: var(--smrt-color-surface-container-high);
589
591
  cursor: not-allowed;
590
592
  }
591
593
 
592
594
  .smrt-input.invalid {
593
- border-color: var(--smrt-color-error, #ba1a1a);
595
+ border-color: var(--smrt-color-error);
594
596
  }
595
597
 
596
598
  .smrt-select {
@@ -599,8 +601,8 @@ function handleCountryChange(e: Event) {
599
601
 
600
602
  .validation-error {
601
603
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
602
- color: var(--smrt-color-error, #ba1a1a);
603
- margin-top: var(--smrt-spacing-1, 4px);
604
+ color: var(--smrt-color-error);
605
+ margin-top: var(--smrt-spacing-1);
604
606
  }
605
607
 
606
608
  @media (max-width: 600px) {
@@ -608,4 +610,5 @@ function handleCountryChange(e: Event) {
608
610
  flex-direction: column;
609
611
  }
610
612
  }
613
+ }
611
614
  </style>
@@ -110,7 +110,7 @@ function handleChange(e: Event) {
110
110
  }
111
111
  </script>
112
112
 
113
- <div class="smrt-checkbox-field" class:disabled class:smrt-mode={isSmrt}>
113
+ <div class="smrt-checkbox-field" class:disabled class:smrt-mode={isSmrt} data-smrt-component="CheckboxInput">
114
114
  <div class="container" use:ripple>
115
115
  <input
116
116
  type="checkbox"
@@ -140,11 +140,13 @@ function handleChange(e: Event) {
140
140
  </div>
141
141
 
142
142
  <style>
143
+ @layer smrt.reset, smrt.structure, smrt.theme;
144
+ @layer smrt.theme {
143
145
  .smrt-checkbox-field {
144
146
  display: inline-flex;
145
147
  min-width: 0;
146
148
  align-items: center;
147
- gap: var(--smrt-spacing-2, 8px);
149
+ gap: var(--smrt-spacing-2);
148
150
  cursor: pointer;
149
151
  vertical-align: middle;
150
152
  user-select: none;
@@ -157,7 +159,7 @@ function handleChange(e: Event) {
157
159
  display: flex;
158
160
  align-items: center;
159
161
  justify-content: center;
160
- border-radius: var(--smrt-radius-full, 9999px);
162
+ border-radius: var(--smrt-radius-full);
161
163
  margin: -10px; /* Offset the 40x40 container to align 18x18 checkbox */
162
164
  }
163
165
 
@@ -175,7 +177,7 @@ function handleChange(e: Event) {
175
177
  width: 18px;
176
178
  height: 18px;
177
179
  border: 2px solid var(--smrt-color-on-surface-variant);
178
- border-radius: var(--smrt-radius-sm, 4px);
180
+ border-radius: var(--smrt-radius-sm);
179
181
  display: flex;
180
182
  align-items: center;
181
183
  justify-content: center;
@@ -226,7 +228,7 @@ function handleChange(e: Event) {
226
228
  left: 0;
227
229
  right: 0;
228
230
  bottom: 0;
229
- border-radius: var(--smrt-radius-full, 9999px);
231
+ border-radius: var(--smrt-radius-full);
230
232
  pointer-events: none;
231
233
  transition: opacity var(--smrt-duration-short3, 200ms) var(--smrt-easing-standard, ease);
232
234
  }
@@ -235,4 +237,5 @@ function handleChange(e: Event) {
235
237
  background-color: var(--smrt-color-on-surface);
236
238
  opacity: 0.08;
237
239
  }
240
+ }
238
241
  </style>
@@ -450,7 +450,7 @@ const primaryControlId = $derived(isSmrt ? `${name}_voice` : `${name}_start`);
450
450
  class="smrt-daterange"
451
451
  class:listening={isRecording}
452
452
  class:parsing={isParsing}
453
- data-smrt-field-owner={fieldOwnerToken}
453
+ data-smrt-field-owner={fieldOwnerToken} data-smrt-component="DateRangeInput"
454
454
  >
455
455
  {#if label}
456
456
  <FieldLabel for={primaryControlId} {label} {required} />
@@ -567,10 +567,12 @@ const primaryControlId = $derived(isSmrt ? `${name}_voice` : `${name}_start`);
567
567
  </div>
568
568
 
569
569
  <style>
570
+ @layer smrt.reset, smrt.structure, smrt.theme;
571
+ @layer smrt.theme {
570
572
  .smrt-daterange {
571
573
  display: flex;
572
574
  flex-direction: column;
573
- gap: var(--smrt-spacing-2, 8px);
575
+ gap: var(--smrt-spacing-2);
574
576
  }
575
577
 
576
578
  .range-wrapper {
@@ -579,88 +581,88 @@ const primaryControlId = $derived(isSmrt ? `${name}_voice` : `${name}_start`);
579
581
  }
580
582
 
581
583
  .range-wrapper.smrt-mode {
582
- border: 1px solid var(--smrt-color-tertiary, #6b5778);
583
- border-radius: var(--smrt-radius-small, 6px);
584
- background: var(--smrt-color-tertiary-container, #f3e5f5);
584
+ border: 1px solid var(--smrt-color-tertiary);
585
+ border-radius: var(--smrt-radius-small);
586
+ background: var(--smrt-color-tertiary-container);
585
587
  }
586
588
 
587
589
  .range-wrapper.invalid {
588
- border-color: var(--smrt-color-error, #ba1a1a);
590
+ border-color: var(--smrt-color-error);
589
591
  }
590
592
 
591
593
  .voice-input-wrapper {
592
594
  display: flex;
593
595
  align-items: center;
594
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
595
- gap: var(--smrt-spacing-2, 8px);
596
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
597
+ gap: var(--smrt-spacing-2);
596
598
  }
597
599
 
598
600
  .voice-display {
599
601
  flex: 1;
600
602
  display: flex;
601
603
  align-items: center;
602
- gap: var(--smrt-spacing-2, 8px);
604
+ gap: var(--smrt-spacing-2);
603
605
  font-size: var(--smrt-typography-body-large-size, 1rem);
604
606
  }
605
607
 
606
608
  .date-value {
607
- color: var(--smrt-color-on-surface, #374151);
609
+ color: var(--smrt-color-on-surface);
608
610
  }
609
611
 
610
612
  .range-separator {
611
- color: var(--smrt-color-on-surface-variant, #9ca3af);
613
+ color: var(--smrt-color-on-surface-variant);
612
614
  font-weight: var(--smrt-typography-weight-medium, 500);
613
615
  }
614
616
 
615
617
  .placeholder {
616
- color: var(--smrt-color-on-surface-variant, #9ca3af);
618
+ color: var(--smrt-color-on-surface-variant);
617
619
  font-style: italic;
618
620
  }
619
621
 
620
622
  .date-inputs {
621
623
  display: flex;
622
624
  align-items: flex-end;
623
- gap: var(--smrt-spacing-3, 12px);
625
+ gap: var(--smrt-spacing-3);
624
626
  }
625
627
 
626
628
  .date-field {
627
629
  flex: 1;
628
630
  display: flex;
629
631
  flex-direction: column;
630
- gap: var(--smrt-spacing-1, 4px);
632
+ gap: var(--smrt-spacing-1);
631
633
  }
632
634
 
633
635
  .field-label {
634
636
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
635
637
  font-weight: var(--smrt-typography-body-small-weight, 500);
636
- color: var(--smrt-color-on-surface-variant, #6b7280);
638
+ color: var(--smrt-color-on-surface-variant);
637
639
  text-transform: uppercase;
638
640
  letter-spacing: 0.025em;
639
641
  }
640
642
 
641
643
  .range-arrow {
642
- color: var(--smrt-color-on-surface-variant, #9ca3af);
644
+ color: var(--smrt-color-on-surface-variant);
643
645
  font-size: var(--smrt-typography-title-medium-size, 1.25rem);
644
- padding-bottom: var(--smrt-spacing-2, 8px);
646
+ padding-bottom: var(--smrt-spacing-2);
645
647
  }
646
648
 
647
649
  .smrt-input {
648
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
650
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
649
651
  font-size: var(--smrt-typography-body-large-size, 1rem);
650
- border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
651
- border-radius: var(--smrt-radius-small, 6px);
652
- background: var(--smrt-color-surface, #fff);
652
+ border: 1px solid var(--smrt-color-outline-variant);
653
+ border-radius: var(--smrt-radius-small);
654
+ background: var(--smrt-color-surface);
653
655
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
654
656
  }
655
657
 
656
658
  .smrt-input:focus {
657
659
  outline: none;
658
- border-color: var(--smrt-color-primary, #005ac1);
659
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary, #005ac1) 10%, transparent);
660
+ border-color: var(--smrt-color-primary);
661
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary) 10%, transparent);
660
662
  }
661
663
 
662
664
  .smrt-input:disabled {
663
- background: var(--smrt-color-surface-container-high, #f3f4f6);
665
+ background: var(--smrt-color-surface-container-high);
664
666
  cursor: not-allowed;
665
667
  }
666
668
 
@@ -672,7 +674,7 @@ const primaryControlId = $derived(isSmrt ? `${name}_voice` : `${name}_start`);
672
674
  justify-content: center;
673
675
  background: transparent;
674
676
  border: none;
675
- border-radius: var(--smrt-radius-sm, 4px);
677
+ border-radius: var(--smrt-radius-sm);
676
678
  color: var(--smrt-color-on-surface-variant);
677
679
  cursor: pointer;
678
680
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
@@ -680,12 +682,12 @@ const primaryControlId = $derived(isSmrt ? `${name}_voice` : `${name}_start`);
680
682
  }
681
683
 
682
684
  .mic-btn:hover {
683
- background: var(--smrt-color-surface-container-high, #f3f4f6);
684
- color: var(--smrt-color-on-surface, #374151);
685
+ background: var(--smrt-color-surface-container-high);
686
+ color: var(--smrt-color-on-surface);
685
687
  }
686
688
 
687
689
  .mic-btn.active {
688
- background: var(--smrt-color-primary, #22c55e);
690
+ background: var(--smrt-color-primary);
689
691
  color: var(--smrt-color-on-primary, white);
690
692
  }
691
693
 
@@ -711,48 +713,49 @@ const primaryControlId = $derived(isSmrt ? `${name}_voice` : `${name}_start`);
711
713
  }
712
714
 
713
715
  .smrt-daterange.listening .range-wrapper.smrt-mode {
714
- border-color: var(--smrt-color-success, #22c55e);
715
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success, #22c55e) 30%, transparent);
716
+ border-color: var(--smrt-color-success);
717
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success) 30%, transparent);
716
718
  animation: pulse-green 1.5s var(--smrt-easing-standard, ease-in-out) infinite;
717
719
  }
718
720
 
719
721
  .smrt-daterange.parsing .range-wrapper.smrt-mode {
720
- border-color: var(--smrt-color-warning, #f59e0b);
721
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-warning, #f59e0b) 20%, transparent);
722
+ border-color: var(--smrt-color-warning);
723
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-warning) 20%, transparent);
722
724
  }
723
725
 
724
726
  @keyframes pulse-green {
725
727
  0%, 100% {
726
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success, #22c55e) 30%, transparent);
728
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success) 30%, transparent);
727
729
  }
728
730
  50% {
729
- box-shadow: 0 0 0 6px color-mix(in srgb, var(--smrt-color-success, #22c55e) 15%, transparent);
731
+ box-shadow: 0 0 0 6px color-mix(in srgb, var(--smrt-color-success) 15%, transparent);
730
732
  }
731
733
  }
732
734
 
733
735
  .listening-indicator {
734
736
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
735
- color: var(--smrt-color-primary, #22c55e);
737
+ color: var(--smrt-color-primary);
736
738
  }
737
739
 
738
740
  .parsing-indicator {
739
741
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
740
- color: var(--smrt-color-secondary, #f59e0b);
742
+ color: var(--smrt-color-secondary);
741
743
  }
742
744
 
743
745
  .error-indicator {
744
746
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
745
- color: var(--smrt-color-error, #ba1a1a);
747
+ color: var(--smrt-color-error);
746
748
  }
747
749
 
748
750
  @media (max-width: 600px) {
749
751
  .date-inputs {
750
752
  flex-direction: column;
751
- gap: var(--smrt-spacing-2, 8px);
753
+ gap: var(--smrt-spacing-2);
752
754
  }
753
755
 
754
756
  .range-arrow {
755
757
  display: none;
756
758
  }
757
759
  }
760
+ }
758
761
  </style>
@@ -349,7 +349,7 @@ function handleNativeChange(e: Event) {
349
349
  }
350
350
  </script>
351
351
 
352
- <div class="smrt-datetime" class:listening={isHolding} class:parsing={isParsing}>
352
+ <div class="smrt-datetime" class:listening={isHolding} class:parsing={isParsing} data-smrt-component="DateTimeInput">
353
353
  {#if label}
354
354
  <FieldLabel id={labelId} for={name} {label} {required} />
355
355
  {/if}
@@ -450,12 +450,14 @@ function handleNativeChange(e: Event) {
450
450
  </div>
451
451
 
452
452
  <style>
453
+ @layer smrt.reset, smrt.structure, smrt.theme;
454
+ @layer smrt.theme {
453
455
  .smrt-datetime {
454
456
  display: flex;
455
457
  flex-direction: column;
456
458
  width: 100%;
457
459
  min-width: 0;
458
- gap: var(--smrt-spacing-1, 4px);
460
+ gap: var(--smrt-spacing-1);
459
461
  position: relative;
460
462
  }
461
463
 
@@ -469,47 +471,47 @@ function handleNativeChange(e: Event) {
469
471
  box-sizing: border-box;
470
472
  min-width: 0;
471
473
  width: 100%;
472
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
474
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
473
475
  font-size: var(--smrt-typography-body-large-size, 1rem);
474
- border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
475
- border-radius: var(--smrt-radius-small, 6px);
476
- background: var(--smrt-color-surface, #fff);
476
+ border: 1px solid var(--smrt-color-outline-variant);
477
+ border-radius: var(--smrt-radius-small);
478
+ background: var(--smrt-color-surface);
477
479
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
478
480
  }
479
481
 
480
482
  .smrt-input:focus {
481
483
  outline: none;
482
- border-color: var(--smrt-color-primary, #005ac1);
483
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary, #005ac1) 10%, transparent);
484
+ border-color: var(--smrt-color-primary);
485
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary) 10%, transparent);
484
486
  }
485
487
 
486
488
  .smrt-input.smrt-mode {
487
- padding-right: var(--smrt-spacing-11, 44px);
489
+ padding-right: var(--smrt-spacing-11);
488
490
  cursor: pointer;
489
491
  }
490
492
 
491
493
  .smrt-input:disabled {
492
- background: var(--smrt-color-surface-container-high, #f3f4f6);
494
+ background: var(--smrt-color-surface-container-high);
493
495
  cursor: not-allowed;
494
496
  }
495
497
 
496
498
  .smrt-datetime.listening .smrt-input {
497
- border-color: var(--smrt-color-success, #22c55e);
498
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success, #22c55e) 30%, transparent);
499
+ border-color: var(--smrt-color-success);
500
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success) 30%, transparent);
499
501
  animation: pulse-green 1.5s var(--smrt-easing-standard, ease-in-out) infinite;
500
502
  }
501
503
 
502
504
  .smrt-datetime.parsing .smrt-input {
503
- border-color: var(--smrt-color-warning, #f59e0b);
504
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-warning, #f59e0b) 20%, transparent);
505
+ border-color: var(--smrt-color-warning);
506
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-warning) 20%, transparent);
505
507
  }
506
508
 
507
509
  @keyframes pulse-green {
508
510
  0%, 100% {
509
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success, #22c55e) 30%, transparent);
511
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-success) 30%, transparent);
510
512
  }
511
513
  50% {
512
- box-shadow: 0 0 0 6px color-mix(in srgb, var(--smrt-color-success, #22c55e) 15%, transparent);
514
+ box-shadow: 0 0 0 6px color-mix(in srgb, var(--smrt-color-success) 15%, transparent);
513
515
  }
514
516
  }
515
517
 
@@ -525,19 +527,19 @@ function handleNativeChange(e: Event) {
525
527
  justify-content: center;
526
528
  background: transparent;
527
529
  border: none;
528
- border-radius: var(--smrt-radius-sm, 4px);
529
- color: var(--smrt-color-on-surface-variant, #6b7280);
530
+ border-radius: var(--smrt-radius-sm);
531
+ color: var(--smrt-color-on-surface-variant);
530
532
  cursor: pointer;
531
533
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
532
534
  }
533
535
 
534
536
  .mic-btn:hover {
535
537
  background: var(--smrt-color-surface-container);
536
- color: var(--smrt-color-on-surface, #374151);
538
+ color: var(--smrt-color-on-surface);
537
539
  }
538
540
 
539
541
  .mic-btn.active {
540
- background: var(--smrt-color-primary, #22c55e);
542
+ background: var(--smrt-color-primary);
541
543
  color: var(--smrt-color-on-primary, white);
542
544
  }
543
545
 
@@ -564,19 +566,20 @@ function handleNativeChange(e: Event) {
564
566
 
565
567
  .listening-indicator {
566
568
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
567
- color: var(--smrt-color-primary, #22c55e);
568
- margin-top: var(--smrt-spacing-1, 4px);
569
+ color: var(--smrt-color-primary);
570
+ margin-top: var(--smrt-spacing-1);
569
571
  }
570
572
 
571
573
  .parsing-indicator {
572
574
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
573
- color: var(--smrt-color-secondary, #f59e0b);
574
- margin-top: var(--smrt-spacing-1, 4px);
575
+ color: var(--smrt-color-secondary);
576
+ margin-top: var(--smrt-spacing-1);
575
577
  }
576
578
 
577
579
  .error-indicator {
578
580
  font-size: var(--smrt-typography-body-small-size, 0.75rem);
579
- color: var(--smrt-color-error, #ba1a1a);
580
- margin-top: var(--smrt-spacing-1, 4px);
581
+ color: var(--smrt-color-error);
582
+ margin-top: var(--smrt-spacing-1);
581
583
  }
584
+ }
582
585
  </style>
@@ -249,7 +249,7 @@ function formatFileSize(bytes: number): string {
249
249
  }
250
250
  </script>
251
251
 
252
- <div class="file-upload" class:disabled>
252
+ <div class="file-upload" class:disabled data-smrt-component="FileUpload">
253
253
  <div
254
254
  class="drop-zone"
255
255
  class:dragging={isDragging}
@@ -323,6 +323,8 @@ function formatFileSize(bytes: number): string {
323
323
  </div>
324
324
 
325
325
  <style>
326
+ @layer smrt.reset, smrt.structure, smrt.theme;
327
+ @layer smrt.theme {
326
328
  .file-upload {
327
329
  position: relative;
328
330
  display: flex;
@@ -356,52 +358,52 @@ function formatFileSize(bytes: number): string {
356
358
  justify-content: center;
357
359
  gap: var(--smrt-spacing-2, 0.5rem);
358
360
  padding: var(--smrt-spacing-8, 2rem) var(--smrt-spacing-6, 1.5rem);
359
- border: 2px dashed var(--smrt-color-outline, #79747e);
361
+ border: 2px dashed var(--smrt-color-outline);
360
362
  border-radius: var(--smrt-radius-lg, 1rem);
361
- background: var(--smrt-color-surface-container-low, #f7f2fa);
363
+ background: var(--smrt-color-surface-container-low);
362
364
  cursor: pointer;
363
365
  transition: all 200ms;
364
366
  text-align: center;
365
367
  }
366
368
 
367
369
  .drop-zone:hover {
368
- border-color: var(--smrt-color-primary, #6750a4);
369
- background: var(--smrt-color-surface-container, #f3edf7);
370
+ border-color: var(--smrt-color-primary);
371
+ background: var(--smrt-color-surface-container);
370
372
  }
371
373
 
372
374
  .drop-zone:focus-visible {
373
- outline: 2px solid var(--smrt-color-primary, #6750a4);
375
+ outline: 2px solid var(--smrt-color-primary);
374
376
  outline-offset: 2px;
375
377
  }
376
378
 
377
379
  .drop-zone.dragging {
378
- border-color: var(--smrt-color-primary, #6750a4);
379
- background: var(--smrt-color-primary-container, #eaddff);
380
+ border-color: var(--smrt-color-primary);
381
+ background: var(--smrt-color-primary-container);
380
382
  border-style: solid;
381
383
  }
382
384
 
383
385
  .drop-zone__icon {
384
- color: var(--smrt-color-on-surface-variant, #49454f);
386
+ color: var(--smrt-color-on-surface-variant);
385
387
  }
386
388
 
387
389
  .drop-zone__label {
388
390
  margin: 0;
389
391
  font: var(--smrt-typography-body-large-font);
390
- color: var(--smrt-color-on-surface, #1d1b20);
392
+ color: var(--smrt-color-on-surface);
391
393
  }
392
394
 
393
395
  .drop-zone__hint {
394
396
  margin: 0;
395
397
  font: var(--smrt-typography-body-small-font);
396
398
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
397
- color: var(--smrt-color-on-surface-variant, #49454f);
399
+ color: var(--smrt-color-on-surface-variant);
398
400
  }
399
401
 
400
402
  .file-upload__error {
401
403
  margin: 0;
402
404
  padding: var(--smrt-spacing-2, 0.5rem) var(--smrt-spacing-3, 0.75rem);
403
- background: var(--smrt-color-error-container, #f9dedc);
404
- color: var(--smrt-color-on-error-container, #410e0b);
405
+ background: var(--smrt-color-error-container);
406
+ color: var(--smrt-color-on-error-container);
405
407
  border-radius: var(--smrt-radius-sm, 0.25rem);
406
408
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
407
409
  }
@@ -410,7 +412,7 @@ function formatFileSize(bytes: number): string {
410
412
  list-style: none;
411
413
  margin: 0;
412
414
  padding: 0;
413
- border: 1px solid var(--smrt-color-outline-variant, #cac4d0);
415
+ border: 1px solid var(--smrt-color-outline-variant);
414
416
  border-radius: var(--smrt-radius-md, 0.5rem);
415
417
  overflow: hidden;
416
418
  }
@@ -420,7 +422,7 @@ function formatFileSize(bytes: number): string {
420
422
  align-items: center;
421
423
  gap: var(--smrt-spacing-3, 0.75rem);
422
424
  padding: var(--smrt-spacing-2, 0.5rem) var(--smrt-spacing-3, 0.75rem);
423
- border-bottom: 1px solid var(--smrt-color-outline-variant, #cac4d0);
425
+ border-bottom: 1px solid var(--smrt-color-outline-variant);
424
426
  }
425
427
 
426
428
  .file-list__item:last-child {
@@ -430,7 +432,7 @@ function formatFileSize(bytes: number): string {
430
432
  .file-list__name {
431
433
  flex: 1;
432
434
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
433
- color: var(--smrt-color-on-surface, #1d1b20);
435
+ color: var(--smrt-color-on-surface);
434
436
  overflow: hidden;
435
437
  text-overflow: ellipsis;
436
438
  white-space: nowrap;
@@ -438,7 +440,7 @@ function formatFileSize(bytes: number): string {
438
440
 
439
441
  .file-list__size {
440
442
  font-size: var(--smrt-typography-label-medium-size, 0.75rem);
441
- color: var(--smrt-color-on-surface-variant, #49454f);
443
+ color: var(--smrt-color-on-surface-variant);
442
444
  white-space: nowrap;
443
445
  }
444
446
 
@@ -450,15 +452,16 @@ function formatFileSize(bytes: number): string {
450
452
  height: 28px;
451
453
  padding: 0;
452
454
  border: none;
453
- border-radius: var(--smrt-radius-full, 9999px);
455
+ border-radius: var(--smrt-radius-full);
454
456
  background: transparent;
455
- color: var(--smrt-color-on-surface-variant, #49454f);
457
+ color: var(--smrt-color-on-surface-variant);
456
458
  cursor: pointer;
457
459
  transition: background-color 200ms;
458
460
  }
459
461
 
460
462
  .file-list__remove:hover {
461
- background: var(--smrt-color-error-container, #f9dedc);
462
- color: var(--smrt-color-error, #ba1a1a);
463
+ background: var(--smrt-color-error-container);
464
+ color: var(--smrt-color-error);
463
465
  }
466
+ }
464
467
  </style>