@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
@@ -1529,7 +1529,7 @@ export function getInteractionRegistry(): ControlInteractionRegistry {
1529
1529
  onsubmit={handleSubmit}
1530
1530
  {method}
1531
1531
  {action}
1532
- use:applyEnhance={enhance}
1532
+ use:applyEnhance={enhance} data-smrt-component="Form"
1533
1533
  >
1534
1534
  <!--
1535
1535
  Screen-reader status region (L1 #1420): announces async STT / field-
@@ -1642,16 +1642,18 @@ export function getInteractionRegistry(): ControlInteractionRegistry {
1642
1642
  </form>
1643
1643
 
1644
1644
  {#if isFormListening && spokenText}
1645
- <div class="spoken-toaster">
1645
+ <div class="spoken-toaster" data-smrt-component="Form">
1646
1646
  <strong>{t(M['ui.form.you_said'])}</strong> {spokenText}
1647
1647
  </div>
1648
1648
  {/if}
1649
1649
 
1650
1650
  <style>
1651
+ @layer smrt.reset, smrt.structure, smrt.theme;
1652
+ @layer smrt.theme {
1651
1653
  .smrt-form {
1652
1654
  display: flex;
1653
1655
  flex-direction: column;
1654
- gap: var(--smrt-spacing-4, 16px);
1656
+ gap: var(--smrt-spacing-4);
1655
1657
  }
1656
1658
 
1657
1659
  /* Visually-hidden live region (L1 #1420) — announced to screen readers only. */
@@ -1670,23 +1672,23 @@ export function getInteractionRegistry(): ControlInteractionRegistry {
1670
1672
  .form-controls {
1671
1673
  display: flex;
1672
1674
  align-items: center;
1673
- gap: var(--smrt-spacing-4, 16px);
1675
+ gap: var(--smrt-spacing-4);
1674
1676
  flex-wrap: wrap;
1675
1677
  }
1676
1678
 
1677
1679
  .mode-toggle {
1678
1680
  display: flex;
1679
- background: var(--smrt-color-surface-container-high, #f3f4f6);
1680
- padding: var(--smrt-spacing-1, 4px);
1681
- border-radius: var(--smrt-radius-md, 8px);
1681
+ background: var(--smrt-color-surface-container-high);
1682
+ padding: var(--smrt-spacing-1);
1683
+ border-radius: var(--smrt-radius-md);
1682
1684
  }
1683
1685
 
1684
1686
  .mode-btn {
1685
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-4, 16px);
1687
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-4);
1686
1688
  border: none;
1687
1689
  background: transparent;
1688
- color: var(--smrt-color-on-surface-variant, #6b7280);
1689
- border-radius: var(--smrt-radius-md, 8px);
1690
+ color: var(--smrt-color-on-surface-variant);
1691
+ border-radius: var(--smrt-radius-md);
1690
1692
  cursor: pointer;
1691
1693
  font-size: var(--smrt-typography-label-large-size, 0.875rem);
1692
1694
  font-weight: var(--smrt-typography-weight-medium, 500);
@@ -1694,24 +1696,24 @@ export function getInteractionRegistry(): ControlInteractionRegistry {
1694
1696
  }
1695
1697
 
1696
1698
  .mode-btn:hover {
1697
- color: var(--smrt-color-on-surface, #374151);
1699
+ color: var(--smrt-color-on-surface);
1698
1700
  }
1699
1701
 
1700
1702
  .mode-btn.active {
1701
- background: var(--smrt-color-surface, #fff);
1702
- color: var(--smrt-color-primary, #3b82f6);
1703
+ background: var(--smrt-color-surface);
1704
+ color: var(--smrt-color-primary);
1703
1705
  box-shadow: var(--smrt-elevation-1, 0 1px 3px color-mix(in srgb, var(--smrt-color-shadow) 10%, transparent));
1704
1706
  }
1705
1707
 
1706
1708
  .form-listen-btn {
1707
1709
  display: flex;
1708
1710
  align-items: center;
1709
- gap: var(--smrt-spacing-2, 8px);
1710
- padding: var(--smrt-spacing-3, 12px) var(--smrt-spacing-5, 20px);
1711
- border: 2px solid var(--smrt-color-primary, #3b82f6);
1711
+ gap: var(--smrt-spacing-2);
1712
+ padding: var(--smrt-spacing-3) var(--smrt-spacing-5);
1713
+ border: 2px solid var(--smrt-color-primary);
1712
1714
  background: var(--smrt-color-surface);
1713
1715
  color: var(--smrt-color-primary);
1714
- border-radius: var(--smrt-radius-md, 8px);
1716
+ border-radius: var(--smrt-radius-md);
1715
1717
  cursor: pointer;
1716
1718
  font-size: var(--smrt-typography-label-large-size, 0.875rem);
1717
1719
  font-weight: var(--smrt-typography-weight-medium, 500);
@@ -1719,20 +1721,20 @@ export function getInteractionRegistry(): ControlInteractionRegistry {
1719
1721
  }
1720
1722
 
1721
1723
  .form-listen-btn:hover {
1722
- background: var(--smrt-color-primary-container, #eff6ff);
1724
+ background: var(--smrt-color-primary-container);
1723
1725
  }
1724
1726
 
1725
1727
  .form-listen-btn.listening {
1726
- background: var(--smrt-color-primary, #22c55e);
1727
- border-color: var(--smrt-color-primary, #22c55e);
1728
- color: var(--smrt-color-on-primary, #fff);
1728
+ background: var(--smrt-color-primary);
1729
+ border-color: var(--smrt-color-primary);
1730
+ color: var(--smrt-color-on-primary);
1729
1731
  animation: pulse-btn 1.5s var(--smrt-easing-standard, ease-in-out) infinite;
1730
1732
  }
1731
1733
 
1732
1734
  .form-listen-btn.extracting {
1733
- background: var(--smrt-color-secondary, #f59e0b);
1734
- border-color: var(--smrt-color-secondary, #f59e0b);
1735
- color: var(--smrt-color-on-secondary, #fff);
1735
+ background: var(--smrt-color-secondary);
1736
+ border-color: var(--smrt-color-secondary);
1737
+ color: var(--smrt-color-on-secondary);
1736
1738
  }
1737
1739
 
1738
1740
  .form-listen-btn:disabled {
@@ -1769,12 +1771,12 @@ export function getInteractionRegistry(): ControlInteractionRegistry {
1769
1771
  bottom: 0;
1770
1772
  left: 0;
1771
1773
  right: 0;
1772
- padding: var(--smrt-spacing-3, 12px) var(--smrt-spacing-6, 24px);
1774
+ padding: var(--smrt-spacing-3) var(--smrt-spacing-6);
1773
1775
  /* 90%-opacity primary. The old `--smrt-color-primary-rgb` channel token
1774
1776
  was never emitted (issue #1431); color-mix derives the alpha from the
1775
1777
  emitted `--smrt-color-primary` token instead. */
1776
- background: color-mix(in srgb, var(--smrt-color-primary, #166534) 90%, transparent);
1777
- color: var(--smrt-color-on-primary, #fff);
1778
+ background: color-mix(in srgb, var(--smrt-color-primary) 90%, transparent);
1779
+ color: var(--smrt-color-on-primary);
1778
1780
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
1779
1781
  box-shadow: 0 -2px 12px color-mix(in srgb, var(--smrt-color-shadow) 15%, transparent);
1780
1782
  z-index: var(--smrt-z-index-toast, 1500);
@@ -1784,7 +1786,7 @@ export function getInteractionRegistry(): ControlInteractionRegistry {
1784
1786
  }
1785
1787
 
1786
1788
  .spoken-toaster strong {
1787
- color: var(--smrt-color-on-primary-container, #bbf7d0);
1789
+ color: var(--smrt-color-on-primary-container);
1788
1790
  }
1789
1791
 
1790
1792
  @keyframes slideUp {
@@ -1799,10 +1801,10 @@ export function getInteractionRegistry(): ControlInteractionRegistry {
1799
1801
  }
1800
1802
 
1801
1803
  .extract-error {
1802
- padding: var(--smrt-spacing-3, 12px) var(--smrt-spacing-4, 16px);
1804
+ padding: var(--smrt-spacing-3) var(--smrt-spacing-4);
1803
1805
  background: var(--smrt-color-error-container);
1804
1806
  border: 1px solid var(--smrt-color-error);
1805
- border-radius: var(--smrt-radius-md, 8px);
1807
+ border-radius: var(--smrt-radius-md);
1806
1808
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
1807
1809
  color: var(--smrt-color-error);
1808
1810
  }
@@ -1810,6 +1812,7 @@ export function getInteractionRegistry(): ControlInteractionRegistry {
1810
1812
  .form-fields {
1811
1813
  display: flex;
1812
1814
  flex-direction: column;
1813
- gap: var(--smrt-spacing-4, 16px);
1815
+ gap: var(--smrt-spacing-4);
1814
1816
  }
1817
+ }
1815
1818
  </style>
@@ -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>