@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
@@ -49,16 +49,18 @@ const cards = $derived.by((): Card[] => {
49
49
  </script>
50
50
 
51
51
  {#if cards.length === 0}
52
- <p class="smrt-shortcuts__empty">{t(M['ui.overview.shortcuts.empty'])}</p>
52
+ <p class="smrt-shortcuts__empty" data-smrt-component="ShortcutsWidget">{t(M['ui.overview.shortcuts.empty'])}</p>
53
53
  {:else}
54
- <ul class="smrt-shortcuts">
54
+ <ul class="smrt-shortcuts" data-smrt-component="ShortcutsWidget">
55
55
  {#each cards as card (card.id)}
56
56
  <li class="smrt-shortcuts__card">
57
57
  <a class="smrt-shortcuts__link" href={card.href}>
58
- <span class="smrt-shortcuts__icon">
59
- <ShellSectionIcon name={card.icon} size={28} {iconComponent} />
58
+ <span class="smrt-shortcuts__heading">
59
+ <span class="smrt-shortcuts__icon">
60
+ <ShellSectionIcon name={card.icon} size={28} {iconComponent} />
61
+ </span>
62
+ <span class="smrt-shortcuts__title">{card.label}</span>
60
63
  </span>
61
- <span class="smrt-shortcuts__title">{card.label}</span>
62
64
  {#if card.description}<span class="smrt-shortcuts__desc">{card.description}</span>{/if}
63
65
  </a>
64
66
  </li>
@@ -67,14 +69,18 @@ const cards = $derived.by((): Card[] => {
67
69
  {/if}
68
70
 
69
71
  <style>
72
+ @layer smrt.reset, smrt.structure, smrt.theme;
73
+ @layer smrt.theme {
70
74
  .smrt-shortcuts { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(12rem, 100%), 1fr)); gap: var(--smrt-spacing-3); margin: 0; padding: 0; list-style: none; }
71
75
  .smrt-shortcuts__card { position: relative; display: flex; min-inline-size: 0; border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-large, var(--smrt-radius-medium)); background: var(--smrt-color-surface); transition: background-color 120ms, border-color 120ms; }
72
76
  .smrt-shortcuts__card:hover { background: var(--smrt-color-surface-container-high); border-color: var(--smrt-color-outline); }
73
77
  .smrt-shortcuts__link { flex: 1 1 auto; display: flex; flex-direction: column; gap: var(--smrt-spacing-2); padding: var(--smrt-spacing-3); color: var(--smrt-color-on-surface); text-decoration: none; }
74
78
  .smrt-shortcuts__link:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; border-radius: inherit; }
75
- .smrt-shortcuts__icon { display: inline-grid; place-items: center; inline-size: 3rem; block-size: 3rem; border-radius: var(--smrt-radius-full, 9999px); background: var(--smrt-color-primary-container); color: var(--smrt-color-on-primary-container); }
79
+ .smrt-shortcuts__heading { display: flex; align-items: center; gap: var(--smrt-spacing-2); min-inline-size: 0; }
80
+ .smrt-shortcuts__icon { display: inline-grid; place-items: center; flex: 0 0 28px; inline-size: 28px; block-size: 28px; color: var(--smrt-color-primary); }
76
81
  .smrt-shortcuts__icon :global(.smrt-shell-section-icon) { inline-size: 28px; block-size: 28px; }
77
82
  .smrt-shortcuts__title { font-weight: var(--smrt-typography-weight-medium, 500); overflow-wrap: anywhere; }
78
83
  .smrt-shortcuts__desc { display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; color: var(--smrt-color-on-surface-variant); font-size: var(--smrt-typography-body-medium-size, 0.875rem); }
79
84
  .smrt-shortcuts__empty { margin: 0; color: var(--smrt-color-on-surface-variant); }
85
+ }
80
86
  </style>
@@ -1 +1 @@
1
- {"version":3,"file":"ShortcutsWidget.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/overview/widgets/ShortcutsWidget.svelte.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAY,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAqE/D,QAAA,MAAM,eAAe,+EAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ShortcutsWidget.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/overview/widgets/ShortcutsWidget.svelte.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAY,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAuE/D,QAAA,MAAM,eAAe,+EAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -152,7 +152,7 @@ async function confirmDelete(): Promise<void> {
152
152
  </PageHeader>
153
153
  {/if}
154
154
 
155
- <article class="smrt-detail-screen" aria-label={heading}>
155
+ <article class="smrt-detail-screen" aria-label={heading} data-smrt-component="DetailScreen">
156
156
  {#if sourceError}
157
157
  <Alert variant="error">{sourceError}</Alert>
158
158
  {:else}
@@ -186,6 +186,8 @@ async function confirmDelete(): Promise<void> {
186
186
  {/if}
187
187
 
188
188
  <style>
189
+ @layer smrt.reset, smrt.structure, smrt.theme;
190
+ @layer smrt.theme {
189
191
  .smrt-detail-screen {
190
192
  display: flex;
191
193
  flex-direction: column;
@@ -202,7 +204,7 @@ async function confirmDelete(): Promise<void> {
202
204
  margin: 0;
203
205
  }
204
206
  .smrt-detail-screen__field dt {
205
- color: var(--smrt-color-on-surface-variant, #5f6368);
207
+ color: var(--smrt-color-on-surface-variant);
206
208
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
207
209
  }
208
210
  .smrt-detail-screen__field dd {
@@ -210,11 +212,12 @@ async function confirmDelete(): Promise<void> {
210
212
  overflow-wrap: anywhere;
211
213
  }
212
214
  .smrt-detail-screen__empty {
213
- color: var(--smrt-color-on-surface-variant, #5f6368);
215
+ color: var(--smrt-color-on-surface-variant);
214
216
  }
215
217
  .smrt-detail-screen__block {
216
218
  margin: 0;
217
219
  white-space: pre-wrap;
218
220
  font-family: inherit;
219
221
  }
222
+ }
220
223
  </style>
@@ -252,7 +252,7 @@ const formError = $derived(
252
252
  <PageHeader title={heading} />
253
253
  {/if}
254
254
 
255
- <section class="smrt-edit-form" aria-label={heading}>
255
+ <section class="smrt-edit-form" aria-label={heading} data-smrt-component="EditForm">
256
256
  {#if sourceError}
257
257
  <Alert variant="error">{sourceError}</Alert>
258
258
  {:else}
@@ -284,6 +284,8 @@ const formError = $derived(
284
284
  </section>
285
285
 
286
286
  <style>
287
+ @layer smrt.reset, smrt.structure, smrt.theme;
288
+ @layer smrt.theme {
287
289
  .smrt-edit-form {
288
290
  max-width: 40rem;
289
291
  }
@@ -305,9 +307,10 @@ const formError = $derived(
305
307
  gap: var(--smrt-spacing-xs, 0.25rem);
306
308
  }
307
309
  .smrt-edit-form__hint {
308
- color: var(--smrt-color-on-surface-variant, #5f6368);
310
+ color: var(--smrt-color-on-surface-variant);
309
311
  }
310
312
  .smrt-edit-form__error {
311
- color: var(--smrt-color-error, #b42318);
313
+ color: var(--smrt-color-error);
312
314
  }
315
+ }
313
316
  </style>
@@ -132,7 +132,7 @@ function matches(row: DisplayRow): boolean {
132
132
  </PageHeader>
133
133
  {/if}
134
134
 
135
- <section class="smrt-list-screen" aria-label={heading}>
135
+ <section class="smrt-list-screen" aria-label={heading} data-smrt-component="ListScreen">
136
136
  {#if sourceError}
137
137
  <Alert variant="error">{sourceError}</Alert>
138
138
  {:else}
@@ -180,6 +180,8 @@ function matches(row: DisplayRow): boolean {
180
180
  </section>
181
181
 
182
182
  <style>
183
+ @layer smrt.reset, smrt.structure, smrt.theme;
184
+ @layer smrt.theme {
183
185
  .smrt-list-screen {
184
186
  display: flex;
185
187
  flex-direction: column;
@@ -188,4 +190,5 @@ function matches(row: DisplayRow): boolean {
188
190
  .smrt-list-screen__search {
189
191
  max-width: 24rem;
190
192
  }
193
+ }
191
194
  </style>
@@ -169,7 +169,7 @@ async function remove(): Promise<void> {
169
169
  }
170
170
  </script>
171
171
 
172
- <div class="smrt-recipe-screens">
172
+ <div class="smrt-recipe-screens" data-smrt-component="RecipeScreens">
173
173
  {#if view === 'create' && allowCreate}
174
174
  <EditForm
175
175
  {definition}
@@ -56,7 +56,7 @@ function catalogHref(targetPage: number, selectedId?: string): string {
56
56
  }
57
57
  </script>
58
58
 
59
- <section class="smrt-settings-catalog">
59
+ <section class="smrt-settings-catalog" data-smrt-component="SettingsCatalog">
60
60
  <aside class="smrt-settings-catalog__browser">
61
61
  <Form method="GET" action={baseUrl} preventDefault={false} class="smrt-settings-catalog__search" role="search">
62
62
  {#each Object.entries(preservedParams) as [name, value] (name)}
@@ -149,6 +149,8 @@ function catalogHref(targetPage: number, selectedId?: string): string {
149
149
  </section>
150
150
 
151
151
  <style>
152
+ @layer smrt.reset, smrt.structure, smrt.theme;
153
+ @layer smrt.theme {
152
154
  .smrt-settings-catalog {
153
155
  display: grid;
154
156
  grid-template-columns: minmax(17rem, 22rem) minmax(0, 1fr);
@@ -289,4 +291,5 @@ function catalogHref(targetPage: number, selectedId?: string): string {
289
291
  max-block-size: 18rem;
290
292
  }
291
293
  }
294
+ }
292
295
  </style>
@@ -1,6 +1,7 @@
1
1
  <script lang="ts" generics="Item extends SortableItem, Container extends SortableContainer">
2
2
  import { useI18n } from '@happyvertical/smrt-ui/i18n';
3
3
  import { M } from '../../i18n/strings.sortable.js';
4
+ import { flipRow } from '../workspace/admin-shell/motion.js';
4
5
  import { formatSortableAnnouncement } from './announce.js';
5
6
  import {
6
7
  createSortable,
@@ -163,12 +164,10 @@ function containerRank(id: string): number {
163
164
  aria-label={t(M['ui.sortable.group'], { label: container.label, count })}
164
165
  >
165
166
  {#each list as entry, index (entry.id)}
166
- {#if markerBefore(container.id, nonDraggedRank(list, index)) && entry.id !== dragged}
167
- <div class="smrt-sortable__marker" aria-hidden="true"></div>
168
- {/if}
169
167
  <div
170
168
  role="listitem"
171
169
  class="smrt-sortable__item"
170
+ animate:flipRow
172
171
  class:smrt-sortable__item--dragging={dragged === entry.id}
173
172
  data-smrt-sortable-item-id={entry.id}
174
173
  ondragover={(event) => event.preventDefault()}
@@ -178,6 +177,9 @@ function containerRank(id: string): number {
178
177
  itemSortable.dropOnItem(event, container.id, index);
179
178
  }}
180
179
  >
180
+ {#if markerBefore(container.id, nonDraggedRank(list, index)) && entry.id !== dragged}
181
+ <div class="smrt-sortable__marker smrt-sortable__marker--before" aria-hidden="true"></div>
182
+ {/if}
181
183
  <!-- raw-primitive-allow: native button owns keyboard pickup and HTML drag/drop -->
182
184
  <button
183
185
  type="button"
@@ -278,7 +280,7 @@ function containerRank(id: string): number {
278
280
  bind:this={root}
279
281
  class="smrt-sortable"
280
282
  role="group"
281
- aria-label={label ?? t(M['ui.sortable.label'])}
283
+ aria-label={label ?? t(M['ui.sortable.label'])} data-smrt-component="Sortable"
282
284
  >
283
285
  {#each fixed as container (container.id)}
284
286
  {@render containerBlock(container, false)}
@@ -311,6 +313,8 @@ function containerRank(id: string): number {
311
313
  </div>
312
314
 
313
315
  <style>
316
+ @layer smrt.reset, smrt.structure, smrt.theme;
317
+ @layer smrt.theme {
314
318
  .smrt-sortable { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--smrt-spacing-3); min-width: 0; position: relative; }
315
319
  .smrt-sortable__containers { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--smrt-spacing-3); min-width: 0; }
316
320
  .smrt-sortable__container { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--smrt-spacing-2); padding: var(--smrt-spacing-3); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-md); background: var(--smrt-color-surface-container); min-width: 0; }
@@ -319,7 +323,7 @@ function containerRank(id: string): number {
319
323
  .smrt-sortable__header { display: flex; align-items: center; gap: var(--smrt-spacing-2); min-block-size: 2.25rem; }
320
324
  .smrt-sortable__content { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: var(--smrt-spacing-2); }
321
325
  .smrt-sortable__items { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--smrt-spacing-1); min-block-size: 2.25rem; min-width: 0; }
322
- .smrt-sortable__item { display: flex; align-items: center; gap: var(--smrt-spacing-2); padding: var(--smrt-spacing-1) var(--smrt-spacing-2); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-sm); background: var(--smrt-color-surface); min-width: 0; }
326
+ .smrt-sortable__item { display: flex; align-items: center; gap: var(--smrt-spacing-2); padding: var(--smrt-spacing-1) var(--smrt-spacing-2); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-sm); background: var(--smrt-color-surface); min-width: 0; position: relative; }
323
327
  .smrt-sortable__item--dragging { opacity: 0.55; }
324
328
  .smrt-sortable__handle { display: inline-grid; place-items: center; flex: 0 0 auto; inline-size: 2rem; block-size: 2rem; padding: 0; border: 0; border-radius: var(--smrt-radius-sm); background: transparent; color: var(--smrt-color-on-surface-variant); cursor: grab; touch-action: none; }
325
329
  .smrt-sortable__handle:active { cursor: grabbing; }
@@ -327,6 +331,8 @@ function containerRank(id: string): number {
327
331
  .smrt-sortable__handle:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
328
332
  .smrt-sortable__handle[aria-pressed='true'] { background: var(--smrt-color-primary-container, var(--smrt-color-surface-container-high)); color: var(--smrt-color-on-primary-container, inherit); }
329
333
  .smrt-sortable__marker { block-size: 0.1875rem; border-radius: var(--smrt-radius-full); background: var(--smrt-color-primary); }
334
+ .smrt-sortable__marker--before { position: absolute; inset-inline: 0; inset-block-start: calc(-0.5 * (var(--smrt-spacing-1) + 0.1875rem)); }
330
335
  .smrt-sortable__empty { margin: 0; padding: var(--smrt-spacing-2); color: var(--smrt-color-on-surface-variant); font: var(--smrt-typography-body-small-font); }
331
336
  .smrt-sortable__live { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
337
+ }
332
338
  </style>
@@ -1 +1 @@
1
- {"version":3,"file":"Sortable.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/sortable/Sortable.svelte.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,iBAAS,QAAQ,CAAC,IAAI,SAAS,YAAY,EAAE,SAAS,SAAS,iBAAiB;WAsPnD,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC;;;;;EAA4E;AACvI,cAAM,iBAAiB,CAAC,IAAI,SAAS,YAAY,EAAC,SAAS,SAAS,iBAAiB;IACjF,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,MAAM,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/D,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,QAAQ;IACR,OAAO;CACV;AAED,UAAU,qBAAqB;IAC3B,KAAK,IAAI,SAAS,YAAY,EAAC,SAAS,SAAS,iBAAiB,EAAE,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACtgB,CAAC,IAAI,SAAS,YAAY,EAAC,SAAS,SAAS,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACjN,YAAY,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CACrE;AACD,QAAA,MAAM,QAAQ,EAAE,qBAAmC,CAAC;AAClC,KAAK,QAAQ,CAAC,IAAI,SAAS,YAAY,EAAC,SAAS,SAAS,iBAAiB,IAAI,YAAY,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,CAAC;AAC/H,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Sortable.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/sortable/Sortable.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,iBAAS,QAAQ,CAAC,IAAI,SAAS,YAAY,EAAE,SAAS,SAAS,iBAAiB;WAuPnD,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC;;;;;EAA4E;AACvI,cAAM,iBAAiB,CAAC,IAAI,SAAS,YAAY,EAAC,SAAS,SAAS,iBAAiB;IACjF,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,MAAM,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/D,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,QAAQ;IACR,OAAO;CACV;AAED,UAAU,qBAAqB;IAC3B,KAAK,IAAI,SAAS,YAAY,EAAC,SAAS,SAAS,iBAAiB,EAAE,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACtgB,CAAC,IAAI,SAAS,YAAY,EAAC,SAAS,SAAS,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACjN,YAAY,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CACrE;AACD,QAAA,MAAM,QAAQ,EAAE,qBAAmC,CAAC;AAClC,KAAK,QAAQ,CAAC,IAAI,SAAS,YAAY,EAAC,SAAS,SAAS,iBAAiB,IAAI,YAAY,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC,CAAC;AAC/H,eAAe,QAAQ,CAAC"}
@@ -82,6 +82,8 @@ const lastIndex = $derived(crumbs.length - 1);
82
82
  </nav>
83
83
 
84
84
  <style>
85
+ @layer smrt.reset, smrt.structure, smrt.theme;
86
+ @layer smrt.theme {
85
87
  .smrt-breadcrumbs {
86
88
  width: 100%;
87
89
  }
@@ -127,7 +129,7 @@ const lastIndex = $derived(crumbs.length - 1);
127
129
  .crumb-link:focus-visible {
128
130
  outline: 2px solid var(--smrt-color-primary);
129
131
  outline-offset: 2px;
130
- border-radius: var(--smrt-radius-sm, 4px);
132
+ border-radius: var(--smrt-radius-sm);
131
133
  }
132
134
 
133
135
  @media (max-width: 640px) {
@@ -138,4 +140,5 @@ const lastIndex = $derived(crumbs.length - 1);
138
140
  margin: 0 0.35rem;
139
141
  }
140
142
  }
143
+ }
141
144
  </style>
@@ -206,6 +206,8 @@ function navChildrenId(href: string): string {
206
206
  </nav>
207
207
 
208
208
  <style>
209
+ @layer smrt.reset, smrt.structure, smrt.theme;
210
+ @layer smrt.theme {
209
211
  .smrt-nav-tree {
210
212
  display: flex;
211
213
  flex-direction: column;
@@ -277,7 +279,7 @@ function navChildrenId(href: string): string {
277
279
  font-size: var(--smrt-typography-label-small-size, 0.7rem);
278
280
  font-weight: var(--smrt-typography-weight-semibold, 600);
279
281
  line-height: var(--smrt-typography-label-small-line-height, 1.2);
280
- border-radius: var(--smrt-radius-full, 9999px);
282
+ border-radius: var(--smrt-radius-full);
281
283
  background: var(--smrt-color-secondary-container);
282
284
  color: var(--smrt-color-on-secondary-container);
283
285
  }
@@ -351,4 +353,5 @@ function navChildrenId(href: string): string {
351
353
  .smrt-nav-tree.collapsed .children {
352
354
  display: none;
353
355
  }
356
+ }
354
357
  </style>
@@ -283,6 +283,8 @@ function handleNavigate(): void {
283
283
  </div>
284
284
 
285
285
  <style>
286
+ @layer smrt.reset, smrt.structure, smrt.theme;
287
+ @layer smrt.theme {
286
288
  /*
287
289
  * Display: contents lets the WorkspaceShell drive the grid/layout while
288
290
  * still giving us a single DOM node to hang `--smrt-role-color` off.
@@ -304,6 +306,7 @@ function handleNavigate(): void {
304
306
  margin-right: 0.4rem;
305
307
  font-size: var(--smrt-typography-title-medium-size, 1.1rem);
306
308
  line-height: 1;
307
- color: var(--smrt-role-color, var(--smrt-color-on-surface, #111827));
309
+ color: var(--smrt-role-color, var(--smrt-color-on-surface));
308
310
  }
311
+ }
309
312
  </style>
@@ -433,6 +433,8 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
433
433
  </div>
434
434
 
435
435
  <style>
436
+ @layer smrt.reset, smrt.structure, smrt.theme;
437
+ @layer smrt.theme {
436
438
  .smrt-workspace-shell {
437
439
  --smrt-ws-sidebar-width: 280px;
438
440
  --smrt-ws-sidebar-collapsed-width: 96px;
@@ -446,8 +448,8 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
446
448
  grid-template-columns: var(--smrt-ws-sidebar-width) 1fr;
447
449
  min-height: 100vh;
448
450
  min-height: 100dvh;
449
- background: var(--smrt-color-surface-container-low, #f8fafc);
450
- color: var(--smrt-color-on-surface, #1f2937);
451
+ background: var(--smrt-color-surface-container-low);
452
+ color: var(--smrt-color-on-surface);
451
453
  isolation: isolate;
452
454
  }
453
455
 
@@ -479,8 +481,8 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
479
481
  height: 100vh;
480
482
  height: 100dvh;
481
483
  box-sizing: border-box;
482
- background: var(--smrt-color-surface, #ffffff);
483
- border-right: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
484
+ background: var(--smrt-color-surface);
485
+ border-right: 1px solid var(--smrt-color-outline-variant);
484
486
  min-width: 0;
485
487
  overflow: hidden;
486
488
  overscroll-behavior: contain;
@@ -505,13 +507,13 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
505
507
  margin: 0;
506
508
  font-size: var(--smrt-typography-title-large-size, 1.25rem);
507
509
  line-height: var(--smrt-typography-title-large-line-height, 1.1);
508
- color: var(--smrt-color-on-surface, #111827);
510
+ color: var(--smrt-color-on-surface);
509
511
  font-weight: var(--smrt-typography-weight-semibold, 600);
510
512
  }
511
513
 
512
514
  .brand .subtitle {
513
515
  margin: 0;
514
- color: var(--smrt-color-on-surface-variant, #6b7280);
516
+ color: var(--smrt-color-on-surface-variant);
515
517
  line-height: var(--smrt-typography-body-medium-line-height, 1.4);
516
518
  font-size: var(--smrt-typography-body-medium-size, 0.9rem);
517
519
  }
@@ -521,7 +523,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
521
523
  font-weight: var(--smrt-typography-weight-bold, 700);
522
524
  letter-spacing: var(--smrt-typography-label-small-tracking, 0.12em);
523
525
  text-transform: uppercase;
524
- color: var(--smrt-color-on-surface-variant, #6b7280);
526
+ color: var(--smrt-color-on-surface-variant);
525
527
  }
526
528
 
527
529
  /* These shell-chrome controls now render through smrt-ui <Button>; pierce
@@ -529,9 +531,9 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
529
531
  :global(.class)` (#1589). Button owns focus-visible, so those rules are
530
532
  dropped. The responsive `display` toggles below are preserved. */
531
533
  .smrt-workspace-shell :global(.shell-toggle) {
532
- border: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
533
- background: var(--smrt-color-surface-container, #f3f4f6);
534
- color: var(--smrt-color-on-surface, #111827);
534
+ border: 1px solid var(--smrt-color-outline-variant);
535
+ background: var(--smrt-color-surface-container);
536
+ color: var(--smrt-color-on-surface);
535
537
  border-radius: var(--smrt-radius-medium, 0.65rem);
536
538
  width: 2rem;
537
539
  height: 2rem;
@@ -545,7 +547,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
545
547
  }
546
548
 
547
549
  .smrt-workspace-shell :global(.shell-toggle):hover {
548
- background: var(--smrt-color-surface-container-high, #e5e7eb);
550
+ background: var(--smrt-color-surface-container-high);
549
551
  }
550
552
 
551
553
  .shell-toggle-glyph {
@@ -570,8 +572,8 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
570
572
  display: grid;
571
573
  gap: 0.75rem;
572
574
  padding-top: 0.75rem;
573
- background: var(--smrt-color-surface, #ffffff);
574
- border-top: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
575
+ background: var(--smrt-color-surface);
576
+ border-top: 1px solid var(--smrt-color-outline-variant);
575
577
  z-index: 1;
576
578
  }
577
579
 
@@ -594,8 +596,8 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
594
596
  gap: 0.85rem;
595
597
  padding: 0.75rem var(--smrt-ws-page-pad);
596
598
  min-height: var(--smrt-ws-topbar-height);
597
- background: var(--smrt-color-surface, #ffffff);
598
- border-bottom: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
599
+ background: var(--smrt-color-surface);
600
+ border-bottom: 1px solid var(--smrt-color-outline-variant);
599
601
  box-shadow: var(--smrt-elevation-1, 0 1px 2px rgb(0 0 0 / 0.05));
600
602
  }
601
603
 
@@ -626,7 +628,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
626
628
  }
627
629
 
628
630
  .topbar-eyebrow {
629
- color: var(--smrt-color-on-surface-variant, #6b7280);
631
+ color: var(--smrt-color-on-surface-variant);
630
632
  }
631
633
 
632
634
  .mode-title,
@@ -637,11 +639,11 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
637
639
  .mode-title {
638
640
  font-size: var(--smrt-typography-title-small-size, 0.9rem);
639
641
  font-weight: var(--smrt-typography-weight-semibold, 600);
640
- color: var(--smrt-color-on-surface, #111827);
642
+ color: var(--smrt-color-on-surface);
641
643
  }
642
644
 
643
645
  .mode-detail {
644
- color: var(--smrt-color-on-surface-variant, #6b7280);
646
+ color: var(--smrt-color-on-surface-variant);
645
647
  max-width: 18rem;
646
648
  text-align: right;
647
649
  font-size: var(--smrt-typography-body-medium-size, 0.85rem);
@@ -652,10 +654,10 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
652
654
  align-items: center;
653
655
  gap: 0.4rem;
654
656
  padding: 0.25rem 0.65rem;
655
- border-radius: var(--smrt-radius-full, 999px);
656
- border: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
657
- background: var(--smrt-color-surface-container, #f3f4f6);
658
- color: var(--smrt-color-on-surface, #111827);
657
+ border-radius: var(--smrt-radius-full);
658
+ border: 1px solid var(--smrt-color-outline-variant);
659
+ background: var(--smrt-color-surface-container);
660
+ color: var(--smrt-color-on-surface);
659
661
  font-size: var(--smrt-typography-label-medium-size, 0.78rem);
660
662
  font-weight: var(--smrt-typography-weight-semibold, 600);
661
663
  line-height: 1;
@@ -665,29 +667,29 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
665
667
  .mode-dot {
666
668
  width: 0.55rem;
667
669
  height: 0.55rem;
668
- border-radius: var(--smrt-radius-full, 9999px);
669
- background: var(--smrt-color-on-surface-variant, #9ca3af);
670
+ border-radius: var(--smrt-radius-full);
671
+ background: var(--smrt-color-on-surface-variant);
670
672
  flex-shrink: 0;
671
673
  }
672
674
 
673
675
  .mode-badge[data-status='active'] .mode-dot {
674
- background: var(--smrt-color-success, #16a34a);
676
+ background: var(--smrt-color-success);
675
677
  }
676
678
  .mode-badge[data-status='offline'] .mode-dot {
677
- background: var(--smrt-color-on-surface-variant, #9ca3af);
679
+ background: var(--smrt-color-on-surface-variant);
678
680
  }
679
681
  .mode-badge[data-status='local-only'] .mode-dot {
680
- background: var(--smrt-color-primary, #2563eb);
682
+ background: var(--smrt-color-primary);
681
683
  }
682
684
  .mode-badge[data-status='attention'] .mode-dot {
683
- background: var(--smrt-color-warning, #f59e0b);
685
+ background: var(--smrt-color-warning);
684
686
  }
685
687
 
686
688
  .smrt-workspace-shell :global(.mobile-menu) {
687
689
  display: none;
688
- border: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
689
- background: var(--smrt-color-surface, #ffffff);
690
- color: var(--smrt-color-on-surface, #111827);
690
+ border: 1px solid var(--smrt-color-outline-variant);
691
+ background: var(--smrt-color-surface);
692
+ color: var(--smrt-color-on-surface);
691
693
  border-radius: var(--smrt-radius-medium, 0.65rem);
692
694
  width: 2.35rem;
693
695
  height: 2.35rem;
@@ -718,8 +720,8 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
718
720
  width: var(--smrt-ws-inspector-width);
719
721
  display: flex;
720
722
  flex-direction: column;
721
- background: var(--smrt-color-surface, #ffffff);
722
- border-left: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
723
+ background: var(--smrt-color-surface);
724
+ border-left: 1px solid var(--smrt-color-outline-variant);
723
725
  box-shadow: var(--smrt-elevation-2, 0 4px 6px -1px rgb(0 0 0 / 0.1));
724
726
  z-index: 22;
725
727
  }
@@ -729,19 +731,19 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
729
731
  align-items: center;
730
732
  justify-content: space-between;
731
733
  padding: 0.85rem 1rem;
732
- border-bottom: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
734
+ border-bottom: 1px solid var(--smrt-color-outline-variant);
733
735
  }
734
736
 
735
737
  .inspector-title {
736
738
  font-weight: var(--smrt-typography-weight-semibold, 600);
737
- color: var(--smrt-color-on-surface, #111827);
739
+ color: var(--smrt-color-on-surface);
738
740
  font-size: var(--smrt-typography-title-medium-size, 0.95rem);
739
741
  }
740
742
 
741
743
  .smrt-workspace-shell :global(.inspector-close) {
742
744
  border: 1px solid transparent;
743
745
  background: transparent;
744
- color: var(--smrt-color-on-surface-variant, #6b7280);
746
+ color: var(--smrt-color-on-surface-variant);
745
747
  border-radius: var(--smrt-radius-medium, 0.5rem);
746
748
  width: 2rem;
747
749
  height: 2rem;
@@ -756,8 +758,8 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
756
758
  }
757
759
 
758
760
  .smrt-workspace-shell :global(.inspector-close):hover {
759
- background: var(--smrt-color-surface-container-high, #e5e7eb);
760
- color: var(--smrt-color-on-surface, #111827);
761
+ background: var(--smrt-color-surface-container-high);
762
+ color: var(--smrt-color-on-surface);
761
763
  }
762
764
 
763
765
  .inspector-body {
@@ -778,8 +780,8 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
778
780
  align-items: center;
779
781
  gap: 0.4rem;
780
782
  padding: 0.75rem 0.25rem;
781
- background: var(--smrt-color-surface, #ffffff);
782
- border-left: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
783
+ background: var(--smrt-color-surface);
784
+ border-left: 1px solid var(--smrt-color-outline-variant);
783
785
  z-index: 18;
784
786
  }
785
787
 
@@ -941,4 +943,5 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
941
943
  text-align: left;
942
944
  }
943
945
  }
946
+ }
944
947
  </style>
@@ -13,7 +13,7 @@ let { activity }: Props = $props();
13
13
  const { t } = useI18n();
14
14
  </script>
15
15
 
16
- <article class="smrt-activity-item" data-status={activity.status}>
16
+ <article class="smrt-activity-item" data-status={activity.status} data-smrt-component="ActivityItem">
17
17
  <div class="smrt-activity-item__main">
18
18
  <strong>{activity.label}</strong>
19
19
  <span>{activity.status}</span>
@@ -41,6 +41,8 @@ const { t } = useI18n();
41
41
  </article>
42
42
 
43
43
  <style>
44
+ @layer smrt.reset, smrt.structure, smrt.theme;
45
+ @layer smrt.theme {
44
46
  .smrt-activity-item {
45
47
  display: flex;
46
48
  align-items: flex-start;
@@ -83,4 +85,5 @@ const { t } = useI18n();
83
85
  gap: var(--smrt-spacing-2);
84
86
  justify-content: flex-end;
85
87
  }
88
+ }
86
89
  </style>
@@ -21,18 +21,20 @@ const activities = $derived(shell.listActivities(filter));
21
21
  </script>
22
22
 
23
23
  {#if activities.length > 0}
24
- <div class="smrt-activity-list">
24
+ <div class="smrt-activity-list" data-smrt-component="ActivityList">
25
25
  {#each activities as activity (activity.id)}
26
26
  <ActivityItem {activity} />
27
27
  {/each}
28
28
  </div>
29
29
  {:else if !hideWhenEmpty}
30
- <p class="smrt-activity-list__empty">
30
+ <p class="smrt-activity-list__empty" data-smrt-component="ActivityList">
31
31
  {emptyLabel ?? t(M['ui.activity_list.empty'])}
32
32
  </p>
33
33
  {/if}
34
34
 
35
35
  <style>
36
+ @layer smrt.reset, smrt.structure, smrt.theme;
37
+ @layer smrt.theme {
36
38
  .smrt-activity-list {
37
39
  display: grid;
38
40
  }
@@ -41,4 +43,5 @@ const activities = $derived(shell.listActivities(filter));
41
43
  margin: 0;
42
44
  color: var(--smrt-color-on-surface-variant);
43
45
  }
46
+ }
44
47
  </style>
@@ -41,8 +41,8 @@ function activityLabel(activity: ShellActivity): string {
41
41
  }
42
42
  </script>
43
43
 
44
- <div class="smrt-activity-ticker-shell">
45
- <div class="smrt-activity-ticker" class:multiple class:paused role="region" aria-label={label ?? t(M['ui.activity_ticker.label'])} style:--activity-ticker-duration={`${Math.max(20, running.length * 10)}s`}>
44
+ <div class="smrt-activity-ticker-shell" data-smrt-component="ActivityTicker">
45
+ <div class="smrt-activity-ticker" class:multiple class:paused role="region" aria-label={label ?? t(M['ui.activity_ticker.label'])} style:--smrt-activity-ticker-duration={`${Math.max(20, running.length * 10)}s`}>
46
46
  {#if running.length === 0}
47
47
  <span class="smrt-activity-ticker__empty">{emptyLabel ?? t(M['ui.activity_ticker.empty'])}</span>
48
48
  {:else}
@@ -73,12 +73,14 @@ function activityLabel(activity: ShellActivity): string {
73
73
  </div>
74
74
 
75
75
  <style>
76
+ @layer smrt.reset, smrt.structure, smrt.theme;
77
+ @layer smrt.theme {
76
78
  .smrt-activity-ticker-shell { display:flex; align-items:center; flex:1; min-width:0; gap:var(--smrt-spacing-2); }
77
79
  .smrt-activity-ticker { flex:1; min-width:0; overflow:hidden; color:var(--smrt-color-on-surface-variant); font-size:var(--smrt-typography-body-small-size); white-space:nowrap; }
78
80
  .smrt-activity-ticker__track { display:flex; width:max-content; }
79
81
  .smrt-activity-ticker__group { display:flex; gap:var(--smrt-spacing-6); flex-shrink:0; }
80
82
  .multiple .smrt-activity-ticker__group { padding-inline-end:var(--smrt-spacing-6); }
81
- .multiple .smrt-activity-ticker__track { animation:smrt-activity-scroll var(--activity-ticker-duration) linear infinite; }
83
+ .multiple .smrt-activity-ticker__track { animation:smrt-activity-scroll var(--smrt-activity-ticker-duration) linear infinite; }
82
84
  .smrt-activity-ticker.paused .smrt-activity-ticker__track,
83
85
  .smrt-activity-ticker:hover .smrt-activity-ticker__track,
84
86
  .smrt-activity-ticker-shell:focus-within .smrt-activity-ticker__track { animation-play-state:paused; }
@@ -89,4 +91,5 @@ function activityLabel(activity: ShellActivity): string {
89
91
  .multiple .smrt-activity-ticker__track { animation:none; }
90
92
  .smrt-activity-ticker__copy, .smrt-activity-ticker__control { display:none; }
91
93
  }
94
+ }
92
95
  </style>