@svadmin/ui 0.73.0 → 0.74.0

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 (295) hide show
  1. package/README.md +53 -28
  2. package/dist/app.css +3733 -4119
  3. package/dist/app.theme.css +3733 -4119
  4. package/dist/component-registry.d.ts +14977 -0
  5. package/dist/component-registry.js +216 -0
  6. package/dist/components/AboutSettings.svelte +7 -1
  7. package/dist/components/AboutSettings.svelte.d.ts +4 -1
  8. package/dist/components/ActivityFeed.svelte +9 -3
  9. package/dist/components/ActivityFeed.svelte.d.ts +3 -0
  10. package/dist/components/AdminApp.svelte +19 -10
  11. package/dist/components/AdminApp.svelte.d.ts +6 -0
  12. package/dist/components/ApiSettings.svelte +41 -5
  13. package/dist/components/ApprovalCenter.svelte +283 -0
  14. package/dist/components/ApprovalCenter.svelte.d.ts +10 -0
  15. package/dist/components/AuditLogViewer.svelte +3 -1
  16. package/dist/components/AutoForm.svelte +33 -3
  17. package/dist/components/AutoForm.svelte.d.ts +1 -0
  18. package/dist/components/AutoTable.svelte +610 -47
  19. package/dist/components/AutoTable.svelte.d.ts +17 -1
  20. package/dist/components/BoundRecordDetailDrawer.svelte +9 -0
  21. package/dist/components/BoundRecordDetailDrawer.svelte.d.ts +2 -0
  22. package/dist/components/Breadcrumbs.svelte +11 -1
  23. package/dist/components/CancelTaskButton.svelte +12 -42
  24. package/dist/components/ColorPicker.svelte +73 -0
  25. package/dist/components/ColorPicker.svelte.d.ts +15 -0
  26. package/dist/components/ComboboxField.svelte +114 -27
  27. package/dist/components/ComboboxField.svelte.d.ts +1 -0
  28. package/dist/components/DashboardView.svelte +99 -0
  29. package/dist/components/DashboardView.svelte.d.ts +14 -0
  30. package/dist/components/DatePicker.svelte +10 -0
  31. package/dist/components/DatePicker.svelte.d.ts +6 -0
  32. package/dist/components/DateRangeInput.svelte +85 -5
  33. package/dist/components/DateRangeInput.svelte.d.ts +10 -0
  34. package/dist/components/DateRangePicker.svelte +10 -0
  35. package/dist/components/DateRangePicker.svelte.d.ts +6 -0
  36. package/dist/components/DateTimeInput.svelte +74 -5
  37. package/dist/components/DateTimeInput.svelte.d.ts +8 -0
  38. package/dist/components/DateTimePicker.svelte +10 -0
  39. package/dist/components/DateTimePicker.svelte.d.ts +6 -0
  40. package/dist/components/DevTools.svelte +34 -26
  41. package/dist/components/DevframePanel.svelte +123 -0
  42. package/dist/components/DevframePanel.svelte.d.ts +3 -0
  43. package/dist/components/ErrorSummary.svelte +52 -0
  44. package/dist/components/ErrorSummary.svelte.d.ts +14 -0
  45. package/dist/components/FieldRenderer.svelte +82 -81
  46. package/dist/components/FileUpload.svelte +214 -52
  47. package/dist/components/FileUpload.svelte.d.ts +11 -0
  48. package/dist/components/FilterBuilder.svelte +88 -66
  49. package/dist/components/FilterCollectionInput.svelte +80 -0
  50. package/dist/components/FilterCollectionInput.svelte.d.ts +10 -0
  51. package/dist/components/GanttChart.svelte +66 -14
  52. package/dist/components/GanttChart.svelte.d.ts +6 -0
  53. package/dist/components/Header.svelte +18 -2
  54. package/dist/components/ImportWizard.svelte +339 -17
  55. package/dist/components/ImportWizard.svelte.d.ts +11 -0
  56. package/dist/components/JsonSchemaForm.svelte +120 -52
  57. package/dist/components/JsonSchemaForm.svelte.d.ts +7 -1
  58. package/dist/components/KanbanBoard.svelte +195 -40
  59. package/dist/components/KanbanBoard.svelte.d.ts +9 -2
  60. package/dist/components/Layout.svelte +4 -2
  61. package/dist/components/LazyAutoForm.svelte +28 -0
  62. package/dist/components/LazyAutoForm.svelte.d.ts +8 -0
  63. package/dist/components/LazyAutoTable.svelte +28 -0
  64. package/dist/components/LazyAutoTable.svelte.d.ts +8 -0
  65. package/dist/components/LazySettingsPage.svelte +28 -0
  66. package/dist/components/LazySettingsPage.svelte.d.ts +8 -0
  67. package/dist/components/LazyShowPage.svelte +28 -0
  68. package/dist/components/LazyShowPage.svelte.d.ts +8 -0
  69. package/dist/components/ListPage.svelte +5 -1
  70. package/dist/components/ListPage.svelte.d.ts +3 -0
  71. package/dist/components/LoginPage.svelte +1 -1
  72. package/dist/components/MultiTabKeepAlive.svelte +11 -6
  73. package/dist/components/NotificationsSettings.svelte +69 -2
  74. package/dist/components/NotificationsSettings.svelte.d.ts +25 -1
  75. package/dist/components/PermissionMatrix.svelte +20 -1
  76. package/dist/components/PivotExportButton.svelte +157 -0
  77. package/dist/components/PivotExportButton.svelte.d.ts +16 -0
  78. package/dist/components/PivotTable.svelte +229 -74
  79. package/dist/components/PivotTable.svelte.d.ts +19 -2
  80. package/dist/components/RadioGroup.svelte +121 -0
  81. package/dist/components/RadioGroup.svelte.d.ts +43 -0
  82. package/dist/components/RangeSlider.svelte +127 -0
  83. package/dist/components/RangeSlider.svelte.d.ts +22 -0
  84. package/dist/components/Rate.svelte +121 -0
  85. package/dist/components/Rate.svelte.d.ts +16 -0
  86. package/dist/components/RecordDetailDrawer.svelte +4 -2
  87. package/dist/components/RecordDetailDrawer.svelte.d.ts +2 -0
  88. package/dist/components/RelationPicker.svelte +341 -0
  89. package/dist/components/RelationPicker.svelte.d.ts +26 -0
  90. package/dist/components/ResourceOperationsPage.svelte +18 -18
  91. package/dist/components/ResourceOperationsPage.svelte.d.ts +2 -2
  92. package/dist/components/RetryTaskButton.svelte +12 -42
  93. package/dist/components/SecuritySettings.svelte +29 -5
  94. package/dist/components/SegmentedControl.svelte +145 -0
  95. package/dist/components/SegmentedControl.svelte.d.ts +38 -0
  96. package/dist/components/SettingsPage.svelte +3 -1
  97. package/dist/components/SettingsPage.svelte.d.ts +1 -0
  98. package/dist/components/ShowPage.svelte +18 -3
  99. package/dist/components/ShowPage.svelte.d.ts +3 -0
  100. package/dist/components/Sidebar.svelte +2 -2
  101. package/dist/components/Slider.svelte +100 -0
  102. package/dist/components/Slider.svelte.d.ts +19 -0
  103. package/dist/components/SpreadsheetView.svelte +1213 -95
  104. package/dist/components/SpreadsheetView.svelte.d.ts +19 -0
  105. package/dist/components/TagsInput.svelte +178 -0
  106. package/dist/components/TagsInput.svelte.d.ts +17 -0
  107. package/dist/components/TimePicker.svelte +10 -0
  108. package/dist/components/TimePicker.svelte.d.ts +6 -0
  109. package/dist/components/TreeSelect.svelte +267 -53
  110. package/dist/components/TreeSelect.svelte.d.ts +3 -0
  111. package/dist/components/TreeTable.svelte +484 -82
  112. package/dist/components/TreeTable.svelte.d.ts +24 -1
  113. package/dist/components/TwoFactorAuthPage.svelte +85 -48
  114. package/dist/components/TwoFactorAuthPage.svelte.d.ts +12 -1
  115. package/dist/components/VirtualTable.svelte +116 -20
  116. package/dist/components/VirtualTable.svelte.d.ts +5 -0
  117. package/dist/components/account/CompanyProfilePage.svelte +74 -38
  118. package/dist/components/account/GetStartedPage.svelte +2 -1
  119. package/dist/components/account/ImportMembersPage.svelte +22 -167
  120. package/dist/components/account/ImportMembersPage.svelte.d.ts +4 -1
  121. package/dist/components/account/MemberDirectory.svelte +156 -0
  122. package/dist/components/account/MemberDirectory.svelte.d.ts +19 -0
  123. package/dist/components/account/MembersStarterPage.svelte +9 -55
  124. package/dist/components/account/MembersStarterPage.svelte.d.ts +5 -1
  125. package/dist/components/account/SecurityLogPage.svelte +4 -1
  126. package/dist/components/account/SettingsPlainPage.svelte +7 -38
  127. package/dist/components/account/SettingsPlainPage.svelte.d.ts +4 -1
  128. package/dist/components/account/SettingsSidebarPage.svelte +7 -20
  129. package/dist/components/account/TeamMembersPage.svelte +4 -20
  130. package/dist/components/account/TeamMembersPage.svelte.d.ts +5 -1
  131. package/dist/components/account/UserProfilePage.svelte +3 -25
  132. package/dist/components/account/UserProfilePage.svelte.d.ts +17 -2
  133. package/dist/components/buttons/ExportButton.svelte +56 -12
  134. package/dist/components/buttons/ExportButton.svelte.d.ts +11 -0
  135. package/dist/components/content/ContentPageHeader.svelte +1 -1
  136. package/dist/components/content/ContentPageShell.svelte +1 -1
  137. package/dist/components/content/MetricBlock.svelte +1 -1
  138. package/dist/components/content/PageToolbar.svelte +1 -1
  139. package/dist/components/content/ReferenceNotice.svelte +5 -0
  140. package/dist/components/content/ReferenceNotice.svelte.d.ts +18 -0
  141. package/dist/components/content/SectionHeader.svelte +1 -1
  142. package/dist/components/content/SettingsFieldRow.svelte +1 -1
  143. package/dist/components/content/SettingsGroup.svelte +1 -1
  144. package/dist/components/content/StatusBadge.svelte +1 -1
  145. package/dist/components/content/WorkspaceLayout.svelte +1 -1
  146. package/dist/components/export-reference.d.ts +2 -0
  147. package/dist/components/export-reference.js +9 -0
  148. package/dist/components/fieldComponentMap.js +2 -5
  149. package/dist/components/fields/DateField.svelte +12 -13
  150. package/dist/components/fields/date-display.d.ts +6 -0
  151. package/dist/components/fields/date-display.js +24 -0
  152. package/dist/components/network/TeamCrewTablePage.svelte +6 -1
  153. package/dist/components/network/UserCardsNFTPage.svelte +2 -0
  154. package/dist/components/profile/PublicProfilePage.svelte +2 -0
  155. package/dist/components/saved-list-views.d.ts +74 -1
  156. package/dist/components/saved-list-views.js +191 -3
  157. package/dist/components/table-contract.d.ts +12 -1
  158. package/dist/components/task-action.svelte.d.ts +13 -0
  159. package/dist/components/task-action.svelte.js +73 -0
  160. package/dist/components/ui/DesignSystemShowcase.svelte +164 -0
  161. package/dist/components/ui/DesignSystemShowcase.svelte.d.ts +3 -0
  162. package/dist/components/ui/badge/badge-variants.d.ts +3 -2
  163. package/dist/components/ui/badge/badge-variants.js +2 -3
  164. package/dist/components/ui/badge/badge.svelte +3 -0
  165. package/dist/components/ui/badge/badge.svelte.d.ts +1 -0
  166. package/dist/components/ui/button/button-variants.d.ts +5 -4
  167. package/dist/components/ui/button/button-variants.js +7 -5
  168. package/dist/components/ui/checkbox/checkbox.svelte +5 -1
  169. package/dist/components/ui/checkbox/checkbox.svelte.d.ts +5 -1
  170. package/dist/components/ui/input/input.svelte +7 -2
  171. package/dist/components/ui/input/input.svelte.d.ts +4 -1
  172. package/dist/components/ui/select/select.svelte +4 -1
  173. package/dist/components/ui/select/select.svelte.d.ts +2 -1
  174. package/dist/components/ui/textarea/textarea.svelte +2 -2
  175. package/dist/components.css +33 -2
  176. package/dist/date-input-policy.d.ts +4 -0
  177. package/dist/date-input-policy.js +35 -0
  178. package/dist/design-system-components.d.ts +100 -0
  179. package/dist/design-system-components.js +101 -0
  180. package/dist/design-system.js +1 -1
  181. package/dist/devtools-bridge.d.ts +80 -0
  182. package/dist/devtools-bridge.js +92 -0
  183. package/dist/index.d.ts +37 -2
  184. package/dist/index.js +23 -2
  185. package/dist/recipes.d.ts +960 -4
  186. package/dist/recipes.js +264 -4
  187. package/dist/tree-table-model.d.ts +24 -0
  188. package/dist/tree-table-model.js +111 -0
  189. package/package.json +22 -10
  190. package/dist/styled-system/css/conditions.js +0 -36
  191. package/dist/styled-system/css/css.d.ts +0 -22
  192. package/dist/styled-system/css/css.js +0 -45
  193. package/dist/styled-system/css/cva.d.ts +0 -6
  194. package/dist/styled-system/css/cva.js +0 -87
  195. package/dist/styled-system/css/cx.d.ts +0 -5
  196. package/dist/styled-system/css/cx.js +0 -15
  197. package/dist/styled-system/css/index.d.ts +0 -5
  198. package/dist/styled-system/css/index.js +0 -4
  199. package/dist/styled-system/css/sva.d.ts +0 -4
  200. package/dist/styled-system/css/sva.js +0 -46
  201. package/dist/styled-system/helpers.js +0 -316
  202. package/dist/styled-system/patterns/aspect-ratio.d.ts +0 -20
  203. package/dist/styled-system/patterns/aspect-ratio.js +0 -38
  204. package/dist/styled-system/patterns/bleed.d.ts +0 -21
  205. package/dist/styled-system/patterns/bleed.js +0 -24
  206. package/dist/styled-system/patterns/box.d.ts +0 -20
  207. package/dist/styled-system/patterns/box.js +0 -15
  208. package/dist/styled-system/patterns/center.d.ts +0 -20
  209. package/dist/styled-system/patterns/center.js +0 -21
  210. package/dist/styled-system/patterns/circle.d.ts +0 -20
  211. package/dist/styled-system/patterns/circle.js +0 -25
  212. package/dist/styled-system/patterns/container.d.ts +0 -20
  213. package/dist/styled-system/patterns/container.js +0 -21
  214. package/dist/styled-system/patterns/cq.d.ts +0 -21
  215. package/dist/styled-system/patterns/cq.js +0 -21
  216. package/dist/styled-system/patterns/divider.d.ts +0 -22
  217. package/dist/styled-system/patterns/divider.js +0 -25
  218. package/dist/styled-system/patterns/flex.d.ts +0 -26
  219. package/dist/styled-system/patterns/flex.js +0 -26
  220. package/dist/styled-system/patterns/float.d.ts +0 -23
  221. package/dist/styled-system/patterns/float.js +0 -52
  222. package/dist/styled-system/patterns/grid-item.d.ts +0 -25
  223. package/dist/styled-system/patterns/grid-item.js +0 -25
  224. package/dist/styled-system/patterns/grid.d.ts +0 -24
  225. package/dist/styled-system/patterns/grid.js +0 -27
  226. package/dist/styled-system/patterns/hstack.d.ts +0 -21
  227. package/dist/styled-system/patterns/hstack.js +0 -24
  228. package/dist/styled-system/patterns/index.d.ts +0 -21
  229. package/dist/styled-system/patterns/index.js +0 -20
  230. package/dist/styled-system/patterns/link-overlay.d.ts +0 -20
  231. package/dist/styled-system/patterns/link-overlay.js +0 -24
  232. package/dist/styled-system/patterns/spacer.d.ts +0 -20
  233. package/dist/styled-system/patterns/spacer.js +0 -25
  234. package/dist/styled-system/patterns/square.d.ts +0 -20
  235. package/dist/styled-system/patterns/square.js +0 -24
  236. package/dist/styled-system/patterns/stack.d.ts +0 -23
  237. package/dist/styled-system/patterns/stack.js +0 -24
  238. package/dist/styled-system/patterns/visually-hidden.d.ts +0 -20
  239. package/dist/styled-system/patterns/visually-hidden.js +0 -18
  240. package/dist/styled-system/patterns/vstack.d.ts +0 -21
  241. package/dist/styled-system/patterns/vstack.js +0 -24
  242. package/dist/styled-system/patterns/wrap.d.ts +0 -24
  243. package/dist/styled-system/patterns/wrap.js +0 -25
  244. package/dist/styled-system/recipes/content-header.d.ts +0 -31
  245. package/dist/styled-system/recipes/content-header.js +0 -65
  246. package/dist/styled-system/recipes/content-page.d.ts +0 -34
  247. package/dist/styled-system/recipes/content-page.js +0 -43
  248. package/dist/styled-system/recipes/create-recipe.js +0 -82
  249. package/dist/styled-system/recipes/index.d.ts +0 -17
  250. package/dist/styled-system/recipes/index.js +0 -16
  251. package/dist/styled-system/recipes/metric-block.d.ts +0 -34
  252. package/dist/styled-system/recipes/metric-block.js +0 -76
  253. package/dist/styled-system/recipes/product-list.d.ts +0 -31
  254. package/dist/styled-system/recipes/product-list.js +0 -73
  255. package/dist/styled-system/recipes/product-section.d.ts +0 -31
  256. package/dist/styled-system/recipes/product-section.js +0 -49
  257. package/dist/styled-system/recipes/product-settings-row.d.ts +0 -34
  258. package/dist/styled-system/recipes/product-settings-row.js +0 -58
  259. package/dist/styled-system/recipes/product-settings.d.ts +0 -31
  260. package/dist/styled-system/recipes/product-settings.js +0 -57
  261. package/dist/styled-system/recipes/product-status.d.ts +0 -34
  262. package/dist/styled-system/recipes/product-status.js +0 -45
  263. package/dist/styled-system/recipes/product-toolbar.d.ts +0 -31
  264. package/dist/styled-system/recipes/product-toolbar.js +0 -41
  265. package/dist/styled-system/recipes/product-workspace.d.ts +0 -34
  266. package/dist/styled-system/recipes/product-workspace.js +0 -58
  267. package/dist/styled-system/recipes/surface-metric.d.ts +0 -38
  268. package/dist/styled-system/recipes/surface-metric.js +0 -63
  269. package/dist/styled-system/recipes/surface-table.d.ts +0 -34
  270. package/dist/styled-system/recipes/surface-table.js +0 -62
  271. package/dist/styled-system/recipes/ui-badge.d.ts +0 -31
  272. package/dist/styled-system/recipes/ui-badge.js +0 -38
  273. package/dist/styled-system/recipes/ui-button.d.ts +0 -32
  274. package/dist/styled-system/recipes/ui-button.js +0 -43
  275. package/dist/styled-system/recipes/ui-input.d.ts +0 -31
  276. package/dist/styled-system/recipes/ui-input.js +0 -49
  277. package/dist/styled-system/recipes/ui-textarea.d.ts +0 -31
  278. package/dist/styled-system/recipes/ui-textarea.js +0 -24
  279. package/dist/styled-system/styles.css +0 -1257
  280. package/dist/styled-system/tokens/index.d.ts +0 -9
  281. package/dist/styled-system/tokens/index.js +0 -268
  282. package/dist/styled-system/tokens/tokens.d.ts +0 -36
  283. package/dist/styled-system/types/composition.d.ts +0 -227
  284. package/dist/styled-system/types/conditions.d.ts +0 -236
  285. package/dist/styled-system/types/csstype.d.ts +0 -22570
  286. package/dist/styled-system/types/index.d.ts +0 -6
  287. package/dist/styled-system/types/parts.d.ts +0 -8
  288. package/dist/styled-system/types/pattern.d.ts +0 -78
  289. package/dist/styled-system/types/prop-type.d.ts +0 -223
  290. package/dist/styled-system/types/recipe.d.ts +0 -181
  291. package/dist/styled-system/types/selectors.d.ts +0 -59
  292. package/dist/styled-system/types/static-css.d.ts +0 -56
  293. package/dist/styled-system/types/style-props.d.ts +0 -8088
  294. package/dist/styled-system/types/system-types.d.ts +0 -151
  295. package/dist/styles/recipes.css +0 -1262
@@ -0,0 +1,26 @@
1
+ import type { Filter, KnownResources } from '@svadmin/core';
2
+ export interface RelationPickerOption {
3
+ value: string | number;
4
+ label: string;
5
+ }
6
+ interface Props {
7
+ resource: KnownResources;
8
+ value?: string | number | null | (string | number)[];
9
+ onchange?: (value: string | number | null | (string | number)[]) => void;
10
+ optionLabel?: string;
11
+ placeholder?: string;
12
+ title?: string;
13
+ multiple?: boolean;
14
+ searchable?: boolean;
15
+ fetchSize?: number;
16
+ sorters?: {
17
+ field: string;
18
+ order: 'asc' | 'desc';
19
+ }[];
20
+ filters?: Filter[];
21
+ disabled?: boolean;
22
+ allowClear?: boolean;
23
+ }
24
+ declare const RelationPicker: import("svelte").Component<Props, {}, "">;
25
+ type RelationPicker = ReturnType<typeof RelationPicker>;
26
+ export default RelationPicker;
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
- import type { ResourceRendering } from '../rendering/index.js';
3
2
  import { captureAdminContext, useCan, useNavigation } from '@svadmin/core';
4
3
  import type { Component, ComponentProps } from 'svelte';
4
+ import type { ResourceRendering } from '../rendering/index.js';
5
5
  import AutoTable from './AutoTable.svelte';
6
6
  import { Badge } from './ui/badge/index.js';
7
7
  import { Button } from './ui/button/index.js';
@@ -59,7 +59,7 @@
59
59
  emptyLanesText?: string;
60
60
  highlightsLabel?: string;
61
61
  workspaceStyle?: WorkspaceStyle;
62
- tableProps?: Omit<ComponentProps<typeof AutoTable>, 'resourceName' | 'rendering'>;
62
+ tableProps?: Omit<ComponentProps<typeof AutoTable>, 'resourceName'>;
63
63
  }
64
64
 
65
65
  let {
@@ -100,18 +100,18 @@
100
100
 
101
101
  {#if workspaceStyle === 'inventory'}
102
102
  <section class="svadmin-u-f3c543ad5fe9 svadmin-u-0d304f904cb0 svadmin-u-64f847a259bc" data-svadmin-inventory-layout>
103
- <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-50d0d216a2f8 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {...tableProps} {rendering} {resourceName} /></div>
103
+ <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-50d0d216a2f8 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></div>
104
104
  <aside class="svadmin-u-b43b4c086d9a"><section><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p><div class="svadmin-u-eccd13ef4f2f svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-8b8196092091 svadmin-u-18049387f0af">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-1b2d54a3fd12"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p>{#if lane.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{:else}<p class="svadmin-u-1b2d54a3fd12 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{emptyLanesText}</p>{/each}</div></section><section><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><div class="svadmin-u-eccd13ef4f2f svadmin-u-6f7e013d6499">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-eb6e8b881acd"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div></section></aside>
105
105
  </section>
106
106
  {:else if workspaceStyle === 'operations'}
107
107
  <section class="svadmin-u-b43b4c086d9a" data-svadmin-operations-layout>
108
108
  <div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-478497d5efa5"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><div class="svadmin-u-0ab8667228fd svadmin-u-3e7ce58d64fa">{#each lanes as lane (lane.label)}<div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-fc7473ca09eb"><span class="svadmin-u-2689f3958069">{lane.label}</span><span class="svadmin-u-bfa603190748">{lane.value}</span></div><div class="svadmin-u-50d0d216a2f8 svadmin-u-095acb275581 svadmin-u-2cd02d11d1af svadmin-u-ac204c108886 svadmin-u-2ef11f1cb219"><div class="svadmin-u-668b21aa5409 svadmin-u-ac204c108886 svadmin-u-75b1bec3ea0e" style:width={`${Math.min(100, Math.max(12, Number(lane.value) * 8))}%`}></div></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div>{/each}</div></div><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<div class="svadmin-u-f3c543ad5fe9 svadmin-u-77a2a20e90d4 svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12 svadmin-u-18d3e28787c3"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}</div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}{#if item.meta}<span class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.meta}</span>{/if}</div></div>{/each}</div></div></div>
109
109
  <div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div><p class="svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div>
110
- <AutoTable {...tableProps} {rendering} {resourceName} />
110
+ <AutoTable {...tableProps} {resourceName} {rendering} />
111
111
  </section>
112
112
  {:else if workspaceStyle === 'orders'}
113
113
  <section class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-956fcc198f22" data-svadmin-orders-layout>
114
- <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-f57e7530965b svadmin-u-6cbc84dd9e1a svadmin-u-81976f3f2c63"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {...tableProps} {rendering} {resourceName} /></div>
114
+ <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-f57e7530965b svadmin-u-6cbc84dd9e1a svadmin-u-81976f3f2c63"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></div>
115
115
  <aside class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{tableDescription}</p></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<div class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069">{lane.label}</p>{#if lane.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside>
116
116
  </section>
117
117
  {:else if workspaceStyle === 'people'}
@@ -121,51 +121,51 @@
121
121
  <div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a svadmin-u-bb10ec63a8d0">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-1b2d54a3fd12"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div>
122
122
  <div class="svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p>{#if lane.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{/each}</div>
123
123
  </aside>
124
- <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558">{#each highlights as item (item.title)}<article class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-0c3bc98565dd svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</article>{/each}</div><AutoTable {...tableProps} {rendering} {resourceName} /></div>
124
+ <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558">{#each highlights as item (item.title)}<article class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-0c3bc98565dd svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</article>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></div>
125
125
  </section>
126
126
  {:else if workspaceStyle === 'calendar'}
127
127
  <section class="svadmin-u-b43b4c086d9a" data-svadmin-calendar-layout>
128
128
  <div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div>
129
129
  <div class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-d9a1932be4d4"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<article class="svadmin-u-f3c543ad5fe9 svadmin-u-77a2a20e90d4 svadmin-u-8e63407b5ceb svadmin-u-8045cf4c0182"><p class="svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</article>{/each}</div></div><aside class="svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div>{/each}</aside></div>
130
- <AutoTable {...tableProps} {rendering} {resourceName} />
130
+ <AutoTable {...tableProps} {resourceName} {rendering} />
131
131
  </section>
132
132
  {:else if workspaceStyle === 'crm'}
133
133
  <section class="svadmin-u-b43b4c086d9a" data-svadmin-crm-layout>
134
134
  <div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-f57e7530965b svadmin-u-6cbc84dd9e1a svadmin-u-81976f3f2c63"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div>
135
135
  <div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-4a33def12a78"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-ab1b20c2292a">{#each lanes as lane (lane.label)}<section class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-8e63407b5ceb svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</section>{/each}</div><aside class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558">{#each highlights as item (item.title)}<article class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</aside></div>
136
- <AutoTable {...tableProps} {rendering} {resourceName} />
136
+ <AutoTable {...tableProps} {resourceName} {rendering} />
137
137
  </section>
138
138
  {:else if workspaceStyle === 'property'}
139
139
  <section class="svadmin-u-b43b4c086d9a" data-svadmin-property-layout>
140
140
  <div class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-64f847a259bc"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-e4d6f343b9ff">{#each highlights as item (item.title)}<Card.Root><Card.Content class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-89a62219c1a7 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-20aaf08a7ed1">{#if Icon}<Icon class="svadmin-u-cc46d0fa277d" />{/if}</div><div class="svadmin-u-0ab8667228fd svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><div><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.title}</h2>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><aside class="svadmin-u-3e7ce58d64fa">{#each metrics as metric (metric.label)}<div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div>
141
- <AutoTable {...tableProps} {rendering} {resourceName} />
141
+ <AutoTable {...tableProps} {resourceName} {rendering} />
142
142
  </section>
143
143
  {:else if workspaceStyle === 'ai'}
144
144
  <section class="svadmin-u-f3c543ad5fe9 svadmin-u-479a710e57e6 svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-cecf8bbb11d7" data-svadmin-ai-layout>
145
145
  <aside class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-967d113a1451 svadmin-u-8e63407b5ceb svadmin-u-e2f2b4a69d35 svadmin-u-64a6e3fce6e0"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{tableDescription}</p><div class="svadmin-u-0ab8667228fd svadmin-u-6f7e013d6499">{#each lanes as lane (lane.label)}<div class="svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div>{/each}</div></aside>
146
- <div class="svadmin-u-7e0b7cdf1a94"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-6ed543e2fbbb svadmin-u-8e63407b5ceb">{#each highlights as item (item.title)}<article class="svadmin-u-2cc8041eca99 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-50d0d216a2f8 svadmin-u-fc7473ca09eb svadmin-u-18550d5945ae svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div><div class="svadmin-u-b950dda299d3 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><AutoTable {...tableProps} {rendering} {resourceName} /></div></div>
146
+ <div class="svadmin-u-7e0b7cdf1a94"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-6ed543e2fbbb svadmin-u-8e63407b5ceb">{#each highlights as item (item.title)}<article class="svadmin-u-2cc8041eca99 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-50d0d216a2f8 svadmin-u-fc7473ca09eb svadmin-u-18550d5945ae svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div><div class="svadmin-u-b950dda299d3 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><AutoTable {...tableProps} {resourceName} {rendering} /></div></div>
147
147
  </section>
148
148
  {:else if workspaceStyle === 'communications'}
149
149
  <section class="svadmin-u-f3c543ad5fe9 svadmin-u-89904d276530 svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c98d73ab4dcd" data-svadmin-communications-layout>
150
150
  <nav class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-967d113a1451 svadmin-u-eb6e8b881acd svadmin-u-e2f2b4a69d35 svadmin-u-64a6e3fce6e0">{#each lanes as lane (lane.label)}<button class="svadmin-u-60fbb7713999 svadmin-u-6da6a3c3f741 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-421ac2be5045 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b svadmin-u-2eba0d65d059 svadmin-u-fc7473ca09eb svadmin-u-300b7bc3815e"><span><span class="svadmin-u-0214b4b355d1 svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</span>{#if lane.hint}<span class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</span>{/if}</span><Badge variant="outline">{lane.value}</Badge></button>{/each}</nav>
151
- <div class="svadmin-u-7e0b7cdf1a94"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<article class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb svadmin-u-18d3e28787c3"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{item.description}</p>{/if}</div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}{#if item.meta}<span class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.meta}</span>{/if}</div></article>{/each}</div><div class="svadmin-u-b950dda299d3 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><AutoTable {...tableProps} {rendering} {resourceName} /></div></div>
151
+ <div class="svadmin-u-7e0b7cdf1a94"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<article class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb svadmin-u-18d3e28787c3"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{item.description}</p>{/if}</div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}{#if item.meta}<span class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.meta}</span>{/if}</div></article>{/each}</div><div class="svadmin-u-b950dda299d3 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><AutoTable {...tableProps} {resourceName} {rendering} /></div></div>
152
152
  </section>
153
153
  {:else if workspaceStyle === 'store'}
154
- <section class="svadmin-u-b43b4c086d9a" data-svadmin-store-layout><div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-0c3bc98565dd svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e svadmin-u-020ba687fa12 svadmin-u-f89e35297f0f svadmin-u-3b9871a0bf93"><div><h2 class="svadmin-u-4ee734926ff6 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p></div><div class="svadmin-u-60fbb7713999 svadmin-u-b39e60c339f4">{#each metrics as metric (metric.label)}<div><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div></div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-e4d6f343b9ff svadmin-u-b86f7f946cd8">{#each highlights as item (item.title)}<Card.Root><Card.Content class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-9e50f522071f svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-20aaf08a7ed1">{#if Icon}<Icon class="svadmin-u-d8f5213f0fe0" />{/if}</div><div class="svadmin-u-0ab8667228fd svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><div><h3 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.title}</h3>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-4d62c2e3009b"><aside class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><div class="svadmin-u-eccd13ef4f2f svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside><AutoTable {...tableProps} {rendering} {resourceName} /></div></section>
154
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-store-layout><div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-0c3bc98565dd svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e svadmin-u-020ba687fa12 svadmin-u-f89e35297f0f svadmin-u-3b9871a0bf93"><div><h2 class="svadmin-u-4ee734926ff6 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p></div><div class="svadmin-u-60fbb7713999 svadmin-u-b39e60c339f4">{#each metrics as metric (metric.label)}<div><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div></div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-e4d6f343b9ff svadmin-u-b86f7f946cd8">{#each highlights as item (item.title)}<Card.Root><Card.Content class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-9e50f522071f svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-20aaf08a7ed1">{#if Icon}<Icon class="svadmin-u-d8f5213f0fe0" />{/if}</div><div class="svadmin-u-0ab8667228fd svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><div><h3 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.title}</h3>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-4d62c2e3009b"><aside class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><div class="svadmin-u-eccd13ef4f2f svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside><AutoTable {...tableProps} {resourceName} {rendering} /></div></section>
155
155
  {:else if workspaceStyle === 'planning'}
156
- <section class="svadmin-u-b43b4c086d9a" data-svadmin-planning-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-19d9b25e8fae">{#each lanes as lane, laneIndex (lane.label)}<section class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div><div class="svadmin-u-6ed543e2fbbb svadmin-u-eb6e8b881acd">{#each highlights.filter((_, itemIndex) => itemIndex % lanes.length === laneIndex) as item (item.title)}<article class="svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-eb6e8b881acd"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div></section>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {...tableProps} {rendering} {resourceName} /></section>
156
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-planning-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-19d9b25e8fae">{#each lanes as lane, laneIndex (lane.label)}<section class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div><div class="svadmin-u-6ed543e2fbbb svadmin-u-eb6e8b881acd">{#each highlights.filter((_, itemIndex) => itemIndex % lanes.length === laneIndex) as item (item.title)}<article class="svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-eb6e8b881acd"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div></section>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></section>
157
157
  {:else if workspaceStyle === 'generation'}
158
158
  <section class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-fd0beb7ec078" data-svadmin-generation-layout>
159
159
  <aside class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><div class="svadmin-u-0ab8667228fd svadmin-u-3e7ce58d64fa">{#each lanes as lane, index (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-1004c0c3954c"><span class="svadmin-u-60fbb7713999 svadmin-u-cc46d0fa277d svadmin-u-012fbd121f37 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-2ef11f1cb219 svadmin-u-359090c2d529 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{index + 1}</span><div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div></div>{/each}</div></aside>
160
- <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-9a638cfe8212">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}</article>{/each}</div><AutoTable {...tableProps} {rendering} {resourceName} /></div>
160
+ <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-9a638cfe8212">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}</article>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></div>
161
161
  </section>
162
162
  {:else if workspaceStyle === 'billing'}
163
- <section class="svadmin-u-b43b4c086d9a" data-svadmin-billing-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-9a638cfe8212">{#each highlights as item (item.title)}<Card.Root><Card.Header><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><Card.Title class="svadmin-u-4ee734926ff6">{item.title}</Card.Title>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<Card.Description>{item.description}</Card.Description>{/if}</Card.Header><Card.Content>{#if item.meta}<p class="svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.meta}</p>{/if}<Button variant="outline" size="sm" class="svadmin-u-0ab8667228fd svadmin-u-6da6a3c3f741">{actionLabel}</Button></Card.Content></Card.Root>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-64f847a259bc"><AutoTable {...tableProps} {rendering} {resourceName} /><aside class="svadmin-u-3e7ce58d64fa">{#each metrics as metric (metric.label)}<div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div></section>
163
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-billing-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-9a638cfe8212">{#each highlights as item (item.title)}<Card.Root><Card.Header><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><Card.Title class="svadmin-u-4ee734926ff6">{item.title}</Card.Title>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<Card.Description>{item.description}</Card.Description>{/if}</Card.Header><Card.Content>{#if item.meta}<p class="svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.meta}</p>{/if}<Button variant="outline" size="sm" class="svadmin-u-0ab8667228fd svadmin-u-6da6a3c3f741">{actionLabel}</Button></Card.Content></Card.Root>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-64f847a259bc"><AutoTable {...tableProps} {resourceName} {rendering} /><aside class="svadmin-u-3e7ce58d64fa">{#each metrics as metric (metric.label)}<div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div></section>
164
164
  {:else if workspaceStyle === 'security'}
165
- <section class="svadmin-u-b43b4c086d9a" data-svadmin-security-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-2ee0591bf105"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c07e54fd1439"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-bfa603190748">{metrics[0]?.label}</p><p class="svadmin-u-eccd13ef4f2f svadmin-u-751fb0d102ba svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metrics[0]?.value}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metrics[0]?.hint}</p><div class="svadmin-u-fb77735ed17c svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></div><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</div>{/each}</div></div></div><AutoTable {...tableProps} {rendering} {resourceName} /></section>
165
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-security-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-2ee0591bf105"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c07e54fd1439"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-bfa603190748">{metrics[0]?.label}</p><p class="svadmin-u-eccd13ef4f2f svadmin-u-751fb0d102ba svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metrics[0]?.value}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metrics[0]?.hint}</p><div class="svadmin-u-fb77735ed17c svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></div><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</div>{/each}</div></div></div><AutoTable {...tableProps} {resourceName} {rendering} /></section>
166
166
  {:else if workspaceStyle === 'referral'}
167
- <section class="svadmin-u-f3c543ad5fe9 svadmin-u-0d304f904cb0 svadmin-u-4a33def12a78" data-svadmin-referral-layout><div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c07e54fd1439"><h2 class="svadmin-u-4ee734926ff6 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p><div class="svadmin-u-fb77735ed17c svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p></div>{/each}</div></div><AutoTable {...tableProps} {rendering} {resourceName} /></div><aside class="svadmin-u-6ed543e2fbbb">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b svadmin-u-0e65706bcccd svadmin-u-359090c2d529 svadmin-u-d4108abe6359">{item.meta}</p>{/if}</article>{/each}</aside></section>
167
+ <section class="svadmin-u-f3c543ad5fe9 svadmin-u-0d304f904cb0 svadmin-u-4a33def12a78" data-svadmin-referral-layout><div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c07e54fd1439"><h2 class="svadmin-u-4ee734926ff6 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p><div class="svadmin-u-fb77735ed17c svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p></div>{/each}</div></div><AutoTable {...tableProps} {resourceName} {rendering} /></div><aside class="svadmin-u-6ed543e2fbbb">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b svadmin-u-0e65706bcccd svadmin-u-359090c2d529 svadmin-u-d4108abe6359">{item.meta}</p>{/if}</article>{/each}</aside></section>
168
168
  {:else}
169
- <section class="svadmin-u-3e7ce58d64fa" data-svadmin-default-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div><AutoTable {...tableProps} {rendering} {resourceName} /></section>
169
+ <section class="svadmin-u-3e7ce58d64fa" data-svadmin-default-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></section>
170
170
  {/if}
171
171
  </div>
@@ -1,5 +1,5 @@
1
- import type { ResourceRendering } from '../rendering/index.js';
2
1
  import type { Component, ComponentProps } from 'svelte';
2
+ import type { ResourceRendering } from '../rendering/index.js';
3
3
  import AutoTable from './AutoTable.svelte';
4
4
  interface SummaryMetric {
5
5
  label: string;
@@ -36,7 +36,7 @@ interface Props {
36
36
  emptyLanesText?: string;
37
37
  highlightsLabel?: string;
38
38
  workspaceStyle?: WorkspaceStyle;
39
- tableProps?: Omit<ComponentProps<typeof AutoTable>, 'resourceName' | 'rendering'>;
39
+ tableProps?: Omit<ComponentProps<typeof AutoTable>, 'resourceName'>;
40
40
  }
41
41
  declare const ResourceOperationsPage: Component<Props, {}, "">;
42
42
  type ResourceOperationsPage = ReturnType<typeof ResourceOperationsPage>;
@@ -1,17 +1,15 @@
1
1
  <script lang="ts">
2
- import { captureAdminContext, queryKeyMatches, withValidatedTaskProvider } from '@svadmin/core';
3
- import { useQueryClient } from '@tanstack/svelte-query';
4
2
  import { useTranslation } from '@svadmin/core/i18n';
5
3
 
6
4
  import { Button } from './ui/button/index.js';
7
5
  import { Loader2, RotateCcw } from '@lucide/svelte';
6
+ import { createTaskAction } from './task-action.svelte.js';
8
7
 
9
8
  const i18n = useTranslation();
10
- const adminContext = captureAdminContext();
11
9
 
12
10
  let {
13
11
  taskId,
14
- taskProvider = adminContext.taskProvider ?? undefined,
12
+ taskProvider,
15
13
  onSuccess,
16
14
  onError,
17
15
  disabled = false,
@@ -29,46 +27,18 @@
29
27
  children?: import('svelte').Snippet;
30
28
  }>();
31
29
 
32
- const queryClient = useQueryClient();
33
- let pending = $state(false);
34
-
35
- async function handleRetry() {
36
- if (!taskProvider?.retry || pending) return;
37
- const scopedTaskId = taskId;
38
- const scope = adminContext.queryKeyMatcher();
39
- pending = true;
40
- try {
41
- const provider = withValidatedTaskProvider(taskProvider);
42
- if (!provider.retry) return;
43
- await provider.retry(scopedTaskId);
44
- await Promise.all([
45
- queryClient.invalidateQueries({
46
- predicate: (query) => queryKeyMatches(query.queryKey, {
47
- ...scope,
48
- kind: 'task',
49
- action: 'list',
50
- }),
51
- }),
52
- queryClient.invalidateQueries({
53
- predicate: (query) => queryKeyMatches(query.queryKey, {
54
- ...scope,
55
- kind: 'task',
56
- action: 'one',
57
- id: scopedTaskId,
58
- }),
59
- }),
60
- ]);
61
- onSuccess?.();
62
- } catch (error) {
63
- onError?.(error);
64
- } finally {
65
- pending = false;
66
- }
67
- }
30
+ const action = createTaskAction({
31
+ action: 'retry',
32
+ get taskId() { return taskId; },
33
+ get provider() { return taskProvider; },
34
+ get disabled() { return disabled; },
35
+ get onSuccess() { return onSuccess; },
36
+ get onError() { return onError; },
37
+ });
68
38
  </script>
69
39
 
70
- <Button {variant} {size} onclick={handleRetry} disabled={disabled || pending || !taskProvider?.retry}>
71
- {#if pending}
40
+ <Button {variant} {size} onclick={action.run} disabled={!action.available || action.pending}>
41
+ {#if action.pending}
72
42
  <Loader2 class="svadmin-u-82cc6c6581cd svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c svadmin-u-afbdd13a380e" />
73
43
  {:else}
74
44
  <RotateCcw class="svadmin-u-82cc6c6581cd svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
@@ -10,6 +10,7 @@
10
10
  import SettingsFieldRow from './content/SettingsFieldRow.svelte';
11
11
  import DataState from './content/DataState.svelte';
12
12
  import FeedbackNotice from './content/FeedbackNotice.svelte';
13
+ import ConfirmDialog from './ConfirmDialog.svelte';
13
14
 
14
15
  const i18n = useTranslation();
15
16
  const adminContext = captureAdminContext();
@@ -29,6 +30,11 @@
29
30
  let passwordErrorMessage = $state('');
30
31
  let changingPassword = $state(false);
31
32
  let requestId = 0;
33
+ let pendingDanger = $state<{ label: string; run: () => Promise<void> } | null>(null);
34
+ function requestDanger(label: string, run: () => Promise<void>): void {
35
+ const epoch = requestId;
36
+ pendingDanger = { label, run: async () => { if (epoch === requestId) await run(); } };
37
+ }
32
38
 
33
39
  function message(error: unknown): string {
34
40
  return error instanceof Error ? error.message : String(error);
@@ -70,11 +76,16 @@
70
76
  changingPassword = false;
71
77
  updatingMfa = false;
72
78
  revoking = null;
79
+ pendingDanger = null;
73
80
  void loadSecurity();
74
81
  return () => { requestId += 1; };
75
82
  });
76
83
 
77
- async function handleMfaChange(enabled: boolean): Promise<void> {
84
+ async function handleMfaChange(enabled: boolean, confirmed = false): Promise<void> {
85
+ if (!enabled && !confirmed) {
86
+ requestDanger(isZh ? '关闭两步验证' : 'Disable two-factor authentication', () => handleMfaChange(false, true));
87
+ return;
88
+ }
78
89
  const provider = sessionProvider;
79
90
  const currentRequest = requestId;
80
91
  const context = adminContext.enterpriseRequestContext;
@@ -120,7 +131,11 @@
120
131
  }
121
132
  }
122
133
 
123
- async function revokeSession(id: string): Promise<void> {
134
+ async function revokeSession(id: string, confirmed = false): Promise<void> {
135
+ if (!confirmed) {
136
+ requestDanger(`${i18n.t('security.revokeSession')}: ${id}`, () => revokeSession(id, true));
137
+ return;
138
+ }
124
139
  const provider = sessionProvider;
125
140
  const currentRequest = requestId;
126
141
  const context = adminContext.enterpriseRequestContext;
@@ -139,7 +154,11 @@
139
154
  }
140
155
  }
141
156
 
142
- async function revokeAllOthers(): Promise<void> {
157
+ async function revokeAllOthers(confirmed = false): Promise<void> {
158
+ if (!confirmed) {
159
+ requestDanger(i18n.t('security.revokeOthers'), () => revokeAllOthers(true));
160
+ return;
161
+ }
143
162
  const provider = sessionProvider;
144
163
  const currentRequest = requestId;
145
164
  const context = adminContext.enterpriseRequestContext;
@@ -166,7 +185,7 @@
166
185
  {/if}
167
186
  <SettingsGroup title={i18n.t('security.twoFactorAuth')} description={i18n.t('security.twoFactorDescription')}>
168
187
  <SettingsFieldRow label={i18n.t('security.enable2fa')} description={is2faEnabled ? i18n.t('security.twoFactorActive') : i18n.t('security.twoFactorInactive')}>
169
- {#snippet control()}<Switch checked={is2faEnabled} disabled={!sessionProvider?.setMfaEnabled || updatingMfa} onCheckedChange={handleMfaChange} />{/snippet}
188
+ {#snippet control()}<Switch bind:checked={() => is2faEnabled, (enabled) => { void handleMfaChange(enabled); }} disabled={!sessionProvider?.setMfaEnabled || updatingMfa} />{/snippet}
170
189
  </SettingsFieldRow>
171
190
  </SettingsGroup>
172
191
  <SettingsGroup title={i18n.t('profile.changePassword')} description={isZh ? '密码修改由 AuthProvider 持久化。' : 'Password changes are persisted by AuthProvider.'}>
@@ -180,7 +199,7 @@
180
199
  </form>
181
200
  </SettingsGroup>
182
201
  <SettingsGroup title={i18n.t('security.activeSessions')} description={i18n.t('security.sessionsDescription')}>
183
- {#snippet actions()}{#if sessions.some((session) => !session.current)}<Button variant="outline" size="sm" disabled={revoking !== null} onclick={revokeAllOthers}>{i18n.t('security.revokeOthers')}</Button>{/if}{/snippet}
202
+ {#snippet actions()}{#if sessions.some((session) => !session.current)}<Button variant="outline" size="sm" disabled={revoking !== null} onclick={() => revokeAllOthers()}>{i18n.t('security.revokeOthers')}</Button>{/if}{/snippet}
184
203
  {#if loadingSessions}
185
204
  <DataState state="loading" />
186
205
  {:else if sessionError}
@@ -199,3 +218,8 @@
199
218
  {/if}
200
219
  </SettingsGroup>
201
220
  </div>
221
+ <ConfirmDialog open={pendingDanger !== null}
222
+ title={pendingDanger?.label ?? ''}
223
+ message={isZh ? '此操作将立即影响登录访问。确认继续?' : 'This immediately affects sign-in access. Continue?'}
224
+ oncancel={() => pendingDanger = null}
225
+ onconfirm={() => { const action = pendingDanger; pendingDanger = null; void action?.run(); }} />
@@ -0,0 +1,145 @@
1
+ <script lang="ts" generics="T extends string">
2
+ import { cn } from '../utils.js';
3
+
4
+ export interface SegmentedControlOption<T extends string = string> {
5
+ value: T;
6
+ label: string;
7
+ disabled?: boolean;
8
+ }
9
+
10
+ interface Props<T extends string = string> {
11
+ options: readonly SegmentedControlOption<T>[];
12
+ value?: T;
13
+ disabled?: boolean;
14
+ ariaLabel: string;
15
+ dir?: 'ltr' | 'rtl';
16
+ class?: string;
17
+ onchange?: (value: T) => void;
18
+ }
19
+
20
+ let {
21
+ options,
22
+ value = $bindable(),
23
+ disabled = false,
24
+ ariaLabel,
25
+ dir,
26
+ class: className = '',
27
+ onchange,
28
+ }: Props<T> = $props();
29
+
30
+ let root: HTMLDivElement;
31
+ const enabledOptions = $derived(options.filter(option => !option.disabled));
32
+ const tabValue = $derived(enabledOptions.find(option => option.value === value)?.value ?? enabledOptions[0]?.value);
33
+
34
+ function select(option: SegmentedControlOption<T>): void {
35
+ if (disabled || option.disabled) return;
36
+ if (value !== option.value) {
37
+ value = option.value;
38
+ onchange?.(option.value);
39
+ }
40
+ }
41
+
42
+ function moveFocus(index: number, direction: number): void {
43
+ if (disabled || enabledOptions.length === 0) return;
44
+ const next = (index + direction + enabledOptions.length) % enabledOptions.length;
45
+ const nextOption = enabledOptions[next];
46
+ if (!nextOption) return;
47
+ const target = root.querySelector<HTMLButtonElement>(
48
+ `[data-svadmin-segment-value="${CSS.escape(nextOption.value)}"]`,
49
+ );
50
+ target?.focus();
51
+ select(nextOption);
52
+ }
53
+
54
+ function handleKeydown(event: KeyboardEvent, option: SegmentedControlOption<T>, index: number): void {
55
+ if (disabled || option.disabled) return;
56
+ const rtl = getComputedStyle(root).direction === 'rtl' || dir === 'rtl';
57
+ if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
58
+ event.preventDefault();
59
+ moveFocus(index, event.key === 'ArrowRight' && rtl ? -1 : 1);
60
+ } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
61
+ event.preventDefault();
62
+ moveFocus(index, event.key === 'ArrowLeft' && rtl ? 1 : -1);
63
+ } else if (event.key === 'Home') {
64
+ event.preventDefault();
65
+ moveFocus(index, -index);
66
+ } else if (event.key === 'End') {
67
+ event.preventDefault();
68
+ moveFocus(index, enabledOptions.length - 1 - index);
69
+ } else if (event.key === ' ' || event.key === 'Enter') {
70
+ event.preventDefault();
71
+ select(option);
72
+ }
73
+ }
74
+ </script>
75
+
76
+ <div
77
+ bind:this={root}
78
+ {dir}
79
+ role="radiogroup"
80
+ aria-label={ariaLabel}
81
+ aria-disabled={disabled ? 'true' : undefined}
82
+ class={cn('svadmin-segmented-control', className)}
83
+ >
84
+ {#each options as option (option.value)}
85
+ {@const selected = value === option.value}
86
+ {@const enabledIndex = enabledOptions.findIndex(candidate => candidate.value === option.value)}
87
+ <button
88
+ type="button"
89
+ role="radio"
90
+ aria-checked={selected}
91
+ aria-disabled={disabled || option.disabled ? 'true' : undefined}
92
+ tabindex={!disabled && !option.disabled && option.value === tabValue ? 0 : -1}
93
+ disabled={disabled || option.disabled}
94
+ data-svadmin-segment-value={option.value}
95
+ class={cn('svadmin-segmented-control__item', selected && 'svadmin-segmented-control__item--selected')}
96
+ onclick={() => select(option)}
97
+ onkeydown={(event) => handleKeydown(event, option, enabledIndex)}
98
+ >
99
+ {option.label}
100
+ </button>
101
+ {/each}
102
+ </div>
103
+
104
+ <style>
105
+ .svadmin-segmented-control {
106
+ display: inline-flex;
107
+ flex-wrap: wrap;
108
+ gap: 4px;
109
+ padding: 4px;
110
+ max-width: 100%;
111
+ border: 1px solid var(--border);
112
+ border-radius: 6px;
113
+ background: var(--muted);
114
+ }
115
+
116
+ .svadmin-segmented-control__item {
117
+ min-height: 32px;
118
+ min-width: 0;
119
+ padding: 4px 12px;
120
+ border: 1px solid transparent;
121
+ border-radius: 4px;
122
+ background: transparent;
123
+ color: var(--muted-foreground);
124
+ font: inherit;
125
+ letter-spacing: 0;
126
+ overflow-wrap: anywhere;
127
+ cursor: pointer;
128
+ }
129
+
130
+ .svadmin-segmented-control__item--selected {
131
+ background: var(--background);
132
+ color: var(--foreground);
133
+ border-color: var(--border);
134
+ }
135
+
136
+ .svadmin-segmented-control__item:focus-visible {
137
+ outline: 2px solid var(--ring);
138
+ outline-offset: 2px;
139
+ }
140
+
141
+ .svadmin-segmented-control__item:disabled {
142
+ opacity: 0.5;
143
+ cursor: not-allowed;
144
+ }
145
+ </style>
@@ -0,0 +1,38 @@
1
+ export interface SegmentedControlOption<T extends string = string> {
2
+ value: T;
3
+ label: string;
4
+ disabled?: boolean;
5
+ }
6
+ interface Props<T extends string = string> {
7
+ options: readonly SegmentedControlOption<T>[];
8
+ value?: T;
9
+ disabled?: boolean;
10
+ ariaLabel: string;
11
+ dir?: 'ltr' | 'rtl';
12
+ class?: string;
13
+ onchange?: (value: T) => void;
14
+ }
15
+ declare function $$render<T extends string>(): {
16
+ props: Props<T>;
17
+ exports: {};
18
+ bindings: "value";
19
+ slots: {};
20
+ events: {};
21
+ };
22
+ declare class __sveltets_Render<T extends string> {
23
+ props(): ReturnType<typeof $$render<T>>['props'];
24
+ events(): ReturnType<typeof $$render<T>>['events'];
25
+ slots(): ReturnType<typeof $$render<T>>['slots'];
26
+ bindings(): "value";
27
+ exports(): {};
28
+ }
29
+ interface $$IsomorphicComponent {
30
+ new <T extends string>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
31
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
32
+ } & ReturnType<__sveltets_Render<T>['exports']>;
33
+ <T extends string>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
34
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
35
+ }
36
+ declare const SegmentedControl: $$IsomorphicComponent;
37
+ type SegmentedControl<T extends string> = InstanceType<typeof SegmentedControl<T>>;
38
+ export default SegmentedControl;