@svadmin/ui 0.70.0 → 0.73.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 (372) hide show
  1. package/README.md +40 -25
  2. package/THIRD_PARTY_NOTICES.md +52 -0
  3. package/dist/actions.js +1 -1
  4. package/dist/app.css +7804 -5188
  5. package/dist/app.theme.css +7738 -5173
  6. package/dist/class-properties.generated.d.ts +1 -0
  7. package/dist/class-properties.generated.js +2 -0
  8. package/dist/classnames.d.ts +8 -0
  9. package/dist/classnames.js +26 -0
  10. package/dist/component-registry.svelte.d.ts +33 -19
  11. package/dist/component-registry.svelte.js +6 -4
  12. package/dist/components/AdminApp.svelte +55 -53
  13. package/dist/components/AdminApp.svelte.d.ts +2 -2
  14. package/dist/components/ApiSettings.svelte +19 -1
  15. package/dist/components/AuditLogDrawer.svelte +14 -3
  16. package/dist/components/AutoForm.svelte +162 -50
  17. package/dist/components/AutoForm.svelte.d.ts +4 -0
  18. package/dist/components/AutoTable.svelte +599 -259
  19. package/dist/components/AutoTable.svelte.d.ts +6 -0
  20. package/dist/components/BoundRecordDetailDrawer.svelte +172 -0
  21. package/dist/components/BoundRecordDetailDrawer.svelte.d.ts +11 -0
  22. package/dist/components/Breadcrumbs.svelte +7 -4
  23. package/dist/components/CancelTaskButton.svelte +9 -5
  24. package/dist/components/ColumnHeaderFilter.svelte +4 -3
  25. package/dist/components/ColumnSettings.svelte +1 -0
  26. package/dist/components/ComboboxField.svelte +118 -36
  27. package/dist/components/ComboboxField.svelte.d.ts +5 -4
  28. package/dist/components/CreatePage.svelte +7 -1
  29. package/dist/components/CreatePage.svelte.d.ts +2 -0
  30. package/dist/components/DateRangeInput.svelte +75 -0
  31. package/dist/components/DateRangeInput.svelte.d.ts +25 -0
  32. package/dist/components/DateTimeInput.svelte +65 -0
  33. package/dist/components/DateTimeInput.svelte.d.ts +19 -0
  34. package/dist/components/DetailDrawer.svelte +4 -0
  35. package/dist/components/DetailDrawer.svelte.d.ts +1 -0
  36. package/dist/components/DevTools.svelte +8 -21
  37. package/dist/components/DraggableGrid.svelte +1 -0
  38. package/dist/components/DraggableHeader.svelte +5 -9
  39. package/dist/components/DraggableHeader.svelte.d.ts +43 -18
  40. package/dist/components/DraggableRowTable.svelte +2 -2
  41. package/dist/components/DynamicFormList.svelte +17 -17
  42. package/dist/components/DynamicFormList.svelte.d.ts +2 -1
  43. package/dist/components/EditPage.svelte +7 -1
  44. package/dist/components/EditPage.svelte.d.ts +2 -0
  45. package/dist/components/EditableTable.svelte +4 -0
  46. package/dist/components/ErrorPage.svelte +3 -1
  47. package/dist/components/FieldDisplay.svelte +14 -0
  48. package/dist/components/FieldDisplay.svelte.d.ts +7 -0
  49. package/dist/components/FieldRenderer.svelte +96 -20
  50. package/dist/components/FileUpload.svelte +250 -0
  51. package/dist/components/FileUpload.svelte.d.ts +32 -0
  52. package/dist/components/FilterBuilder.svelte +236 -268
  53. package/dist/components/FilterBuilder.svelte.d.ts +3 -0
  54. package/dist/components/FilterDropdown.svelte.d.ts +1 -1
  55. package/dist/components/Header.svelte +5 -6
  56. package/dist/components/ImportWizard.svelte +182 -94
  57. package/dist/components/InfiniteList.svelte +22 -8
  58. package/dist/components/InfiniteList.svelte.d.ts +5 -3
  59. package/dist/components/InlineEdit.svelte +114 -44
  60. package/dist/components/JsonSchemaForm.svelte +256 -95
  61. package/dist/components/JsonSchemaForm.svelte.d.ts +12 -1
  62. package/dist/components/Layout.svelte +20 -17
  63. package/dist/components/LazyTaskQueueDrawer.svelte +26 -0
  64. package/dist/components/LazyTaskQueueDrawer.svelte.d.ts +8 -0
  65. package/dist/components/ListPage.svelte +11 -6
  66. package/dist/components/ListPage.svelte.d.ts +2 -0
  67. package/dist/components/LoginPage.svelte +1 -1
  68. package/dist/components/MasterDetailView.svelte +3 -3
  69. package/dist/components/MediaLibraryModal.svelte +5 -2
  70. package/dist/components/MentionsInput.svelte +4 -3
  71. package/dist/components/MoneyInput.svelte +25 -0
  72. package/dist/components/MoneyInput.svelte.d.ts +20 -0
  73. package/dist/components/NavigateToResource.svelte +3 -2
  74. package/dist/components/NumberInput.svelte +25 -0
  75. package/dist/components/NumberInput.svelte.d.ts +19 -0
  76. package/dist/components/NumericInput.svelte +110 -0
  77. package/dist/components/NumericInput.svelte.d.ts +23 -0
  78. package/dist/components/PercentInput.svelte +25 -0
  79. package/dist/components/PercentInput.svelte.d.ts +20 -0
  80. package/dist/components/PermissionMatrix.svelte +4 -3
  81. package/dist/components/ProfilePage.svelte +2 -2
  82. package/dist/components/QuickEditDrawer.svelte +42 -0
  83. package/dist/components/QuickEditDrawer.svelte.d.ts +10 -0
  84. package/dist/components/RecordDetailDrawer.svelte +16 -108
  85. package/dist/components/RecordDetailDrawer.svelte.d.ts +2 -0
  86. package/dist/components/RecordRowActions.svelte +41 -0
  87. package/dist/components/RecordRowActions.svelte.d.ts +14 -0
  88. package/dist/components/ResourceAccessGuard.svelte +7 -5
  89. package/dist/components/ResourceOperationsPage.svelte +25 -19
  90. package/dist/components/ResourceOperationsPage.svelte.d.ts +5 -1
  91. package/dist/components/RetryTaskButton.svelte +9 -5
  92. package/dist/components/RowActions.svelte +5 -3
  93. package/dist/components/SensitiveDataMask.svelte +3 -3
  94. package/dist/components/SettingsPage.svelte +1 -1
  95. package/dist/components/ShowInferencer.svelte +4 -2
  96. package/dist/components/ShowInferencer.svelte.d.ts +2 -0
  97. package/dist/components/ShowPage.svelte +49 -39
  98. package/dist/components/ShowPage.svelte.d.ts +2 -0
  99. package/dist/components/Sidebar.svelte +15 -13
  100. package/dist/components/SplitPaneLayout.svelte +4 -2
  101. package/dist/components/SpreadsheetView.svelte +81 -286
  102. package/dist/components/StepsForm.svelte +166 -49
  103. package/dist/components/StepsForm.svelte.d.ts +1 -0
  104. package/dist/components/SvarAutoTable.svelte +39 -0
  105. package/dist/components/SvarAutoTable.svelte.d.ts +13 -0
  106. package/dist/components/SvarDataGrid.svelte +362 -0
  107. package/dist/components/SvarDataGrid.svelte.d.ts +57 -0
  108. package/dist/components/SvarGridCell.svelte +10 -0
  109. package/dist/components/SvarGridCell.svelte.d.ts +7 -0
  110. package/dist/components/SvarResourceRead.svelte +50 -0
  111. package/dist/components/SvarResourceRead.svelte.d.ts +23 -0
  112. package/dist/components/SvarResourceTable.svelte +63 -0
  113. package/dist/components/SvarResourceTable.svelte.d.ts +42 -0
  114. package/dist/components/SvarResourceTableView.svelte +364 -0
  115. package/dist/components/SvarResourceTableView.svelte.d.ts +4 -0
  116. package/dist/components/TaskDetails.svelte +20 -7
  117. package/dist/components/TaskList.svelte +19 -7
  118. package/dist/components/TaskQueueDrawer.svelte +92 -37
  119. package/dist/components/Toast.svelte +4 -2
  120. package/dist/components/TooltipButton.svelte +1 -1
  121. package/dist/components/TreeSelect.svelte +212 -30
  122. package/dist/components/TreeSelect.svelte.d.ts +3 -1
  123. package/dist/components/ValidatedField.svelte +27 -0
  124. package/dist/components/ValidatedField.svelte.d.ts +35 -0
  125. package/dist/components/account/ImportMembersPage.svelte +2 -2
  126. package/dist/components/account/SecurityLogPage.svelte +3 -1
  127. package/dist/components/account/SettingsEnterprisePage.svelte +7 -5
  128. package/dist/components/account/TeamMembersPage.svelte +1 -1
  129. package/dist/components/auto-table-grid.d.ts +26 -0
  130. package/dist/components/auto-table-grid.js +1 -0
  131. package/dist/components/buttons/CloneButton.svelte +6 -4
  132. package/dist/components/buttons/DeleteButton.svelte +95 -29
  133. package/dist/components/buttons/DeleteButton.svelte.d.ts +2 -0
  134. package/dist/components/buttons/EditButton.svelte +6 -4
  135. package/dist/components/buttons/ExportButton.svelte +22 -4
  136. package/dist/components/buttons/ImportButton.svelte +83 -38
  137. package/dist/components/buttons/ImportButton.svelte.d.ts +6 -10
  138. package/dist/components/buttons/RefreshButton.svelte +48 -8
  139. package/dist/components/buttons/ShowButton.svelte +6 -4
  140. package/dist/components/content/ApiKeyList.svelte +3 -1
  141. package/dist/components/content/ContentPageHeader.svelte +12 -9
  142. package/dist/components/content/ContentPageShell.svelte +8 -9
  143. package/dist/components/content/FileBrowser.svelte +35 -0
  144. package/dist/components/content/FileBrowser.svelte.d.ts +14 -0
  145. package/dist/components/content/FileList.svelte +3 -1
  146. package/dist/components/content/MemberList.svelte +3 -1
  147. package/dist/components/content/MetricBlock.svelte +10 -13
  148. package/dist/components/content/NetworkTable.svelte +6 -4
  149. package/dist/components/content/NetworkTable.svelte.d.ts +1 -0
  150. package/dist/components/content/PageToolbar.svelte +6 -10
  151. package/dist/components/content/SectionHeader.svelte +8 -13
  152. package/dist/components/content/SecurityEventTable.svelte +3 -1
  153. package/dist/components/content/SettingsFieldRow.svelte +9 -23
  154. package/dist/components/content/SettingsGroup.svelte +11 -27
  155. package/dist/components/content/StatusBadge.svelte +3 -8
  156. package/dist/components/content/StatusTabs.svelte +2 -2
  157. package/dist/components/content/WorkspaceLayout.svelte +8 -12
  158. package/dist/components/enterprise/filter-tree.d.ts +48 -0
  159. package/dist/components/enterprise/filter-tree.js +224 -0
  160. package/dist/components/enterprise/json-schema-form.d.ts +39 -0
  161. package/dist/components/enterprise/json-schema-form.js +195 -0
  162. package/dist/components/enterprise/recursive-schema-form.d.ts +30 -0
  163. package/dist/components/enterprise/recursive-schema-form.js +196 -0
  164. package/dist/components/enterprise/spreadsheet-formula.d.ts +12 -0
  165. package/dist/components/enterprise/spreadsheet-formula.js +245 -0
  166. package/dist/components/fieldComponentMap.d.ts +18 -13
  167. package/dist/components/fieldComponentMap.js +100 -47
  168. package/dist/components/fields/AvatarField.svelte +1 -1
  169. package/dist/components/fields/ChoiceField.svelte +16 -0
  170. package/dist/components/fields/ChoiceField.svelte.d.ts +10 -0
  171. package/dist/components/fields/CodeField.svelte +11 -12
  172. package/dist/components/fields/CodeField.svelte.d.ts +1 -1
  173. package/dist/components/fields/DateField.svelte +4 -3
  174. package/dist/components/fields/DateRangeField.svelte +2 -4
  175. package/dist/components/fields/ImageField.svelte +3 -1
  176. package/dist/components/fields/ImagesField.svelte +23 -0
  177. package/dist/components/fields/ImagesField.svelte.d.ts +6 -0
  178. package/dist/components/fields/JsonField.svelte +19 -13
  179. package/dist/components/fields/PasswordField.svelte +5 -0
  180. package/dist/components/fields/PasswordField.svelte.d.ts +6 -0
  181. package/dist/components/fields/date-field-value.d.ts +2 -0
  182. package/dist/components/fields/date-field-value.js +13 -0
  183. package/dist/components/fields/json-value.d.ts +11 -0
  184. package/dist/components/fields/json-value.js +28 -0
  185. package/dist/components/json-schema-form-state.d.ts +37 -0
  186. package/dist/components/json-schema-form-state.js +168 -0
  187. package/dist/components/profile/ActivityTimeline.svelte +2 -2
  188. package/dist/components/record-detail.svelte.d.ts +19 -0
  189. package/dist/components/record-detail.svelte.js +34 -0
  190. package/dist/components/saved-list-views.js +29 -29
  191. package/dist/components/svar-grid-cells.d.ts +14 -0
  192. package/dist/components/svar-grid-cells.js +2 -0
  193. package/dist/components/svar-grid-contract.d.ts +80 -0
  194. package/dist/components/svar-grid-contract.js +159 -0
  195. package/dist/components/svar-grid-interactions.d.ts +54 -0
  196. package/dist/components/svar-grid-interactions.js +174 -0
  197. package/dist/components/svar-grid-loading.d.ts +40 -0
  198. package/dist/components/svar-grid-loading.js +180 -0
  199. package/dist/components/svar-grid-operations.d.ts +37 -0
  200. package/dist/components/svar-grid-operations.js +186 -0
  201. package/dist/components/svar-grid-panes.d.ts +34 -0
  202. package/dist/components/svar-grid-panes.js +66 -0
  203. package/dist/components/svar-grid-resource-loading.d.ts +18 -0
  204. package/dist/components/svar-grid-resource-loading.js +68 -0
  205. package/dist/components/svar-grid-resource-session.svelte.d.ts +29 -0
  206. package/dist/components/svar-grid-resource-session.svelte.js +61 -0
  207. package/dist/components/table-contract.d.ts +13 -0
  208. package/dist/components/table-contract.js +42 -0
  209. package/dist/components/task-utils.js +4 -2
  210. package/dist/components/ui/alert/alert-variants.d.ts +2 -3
  211. package/dist/components/ui/alert/alert-variants.js +1 -2
  212. package/dist/components/ui/alert/alert.svelte +4 -5
  213. package/dist/components/ui/alert/alert.svelte.d.ts +3 -8
  214. package/dist/components/ui/alert/index.js +0 -2
  215. package/dist/components/ui/avatar/avatar-variants.d.ts +2 -3
  216. package/dist/components/ui/avatar/avatar-variants.js +1 -2
  217. package/dist/components/ui/avatar/avatar.svelte +5 -6
  218. package/dist/components/ui/avatar/avatar.svelte.d.ts +3 -8
  219. package/dist/components/ui/badge/badge-variants.d.ts +2 -3
  220. package/dist/components/ui/badge/badge-variants.js +3 -2
  221. package/dist/components/ui/badge/badge.svelte +4 -5
  222. package/dist/components/ui/badge/badge.svelte.d.ts +3 -8
  223. package/dist/components/ui/badge/index.js +0 -2
  224. package/dist/components/ui/button/button-variants.d.ts +2 -3
  225. package/dist/components/ui/button/button-variants.js +5 -3
  226. package/dist/components/ui/button/button.svelte +100 -44
  227. package/dist/components/ui/button/button.svelte.d.ts +8 -12
  228. package/dist/components/ui/button/index.js +0 -2
  229. package/dist/components/ui/command/command-dialog.svelte +3 -1
  230. package/dist/components/ui/command/command-dialog.svelte.d.ts +1 -1
  231. package/dist/components/ui/command/command-group.svelte +4 -2
  232. package/dist/components/ui/command/command-item.svelte +4 -2
  233. package/dist/components/ui/command/command-separator.svelte +3 -1
  234. package/dist/components/ui/command/index.d.ts +5 -5
  235. package/dist/components/ui/input/input.svelte +41 -24
  236. package/dist/components/ui/input/input.svelte.d.ts +5 -4
  237. package/dist/components/ui/sheet/sheet.svelte +9 -3
  238. package/dist/components/ui/sheet/sheet.svelte.d.ts +1 -0
  239. package/dist/components/ui/textarea/textarea.svelte +2 -1
  240. package/dist/components/ui/tooltip/tooltip.svelte +4 -2
  241. package/dist/components.css +3079 -0
  242. package/dist/design-contract.d.ts +13 -0
  243. package/dist/design-contract.js +11 -0
  244. package/dist/design-system.d.ts +15 -0
  245. package/dist/design-system.js +7 -0
  246. package/dist/index.d.ts +15 -1
  247. package/dist/index.js +9 -0
  248. package/dist/inline-value.d.ts +5 -0
  249. package/dist/inline-value.js +24 -0
  250. package/dist/numeric-input.d.ts +2 -0
  251. package/dist/numeric-input.js +9 -0
  252. package/dist/page-chrome.css +12 -49
  253. package/dist/recipes.d.ts +4 -0
  254. package/dist/recipes.js +4 -0
  255. package/dist/rendering/index.d.ts +87 -0
  256. package/dist/rendering/index.js +117 -0
  257. package/dist/styled-system/css/conditions.js +36 -0
  258. package/dist/styled-system/css/css.d.ts +22 -0
  259. package/dist/styled-system/css/css.js +45 -0
  260. package/dist/styled-system/css/cva.d.ts +6 -0
  261. package/dist/styled-system/css/cva.js +87 -0
  262. package/dist/styled-system/css/cx.d.ts +5 -0
  263. package/dist/styled-system/css/cx.js +15 -0
  264. package/dist/styled-system/css/index.d.ts +5 -0
  265. package/dist/styled-system/css/index.js +4 -0
  266. package/dist/styled-system/css/sva.d.ts +4 -0
  267. package/dist/styled-system/css/sva.js +46 -0
  268. package/dist/styled-system/helpers.js +316 -0
  269. package/dist/styled-system/patterns/aspect-ratio.d.ts +20 -0
  270. package/dist/styled-system/patterns/aspect-ratio.js +38 -0
  271. package/dist/styled-system/patterns/bleed.d.ts +21 -0
  272. package/dist/styled-system/patterns/bleed.js +24 -0
  273. package/dist/styled-system/patterns/box.d.ts +20 -0
  274. package/dist/styled-system/patterns/box.js +15 -0
  275. package/dist/styled-system/patterns/center.d.ts +20 -0
  276. package/dist/styled-system/patterns/center.js +21 -0
  277. package/dist/styled-system/patterns/circle.d.ts +20 -0
  278. package/dist/styled-system/patterns/circle.js +25 -0
  279. package/dist/styled-system/patterns/container.d.ts +20 -0
  280. package/dist/styled-system/patterns/container.js +21 -0
  281. package/dist/styled-system/patterns/cq.d.ts +21 -0
  282. package/dist/styled-system/patterns/cq.js +21 -0
  283. package/dist/styled-system/patterns/divider.d.ts +22 -0
  284. package/dist/styled-system/patterns/divider.js +25 -0
  285. package/dist/styled-system/patterns/flex.d.ts +26 -0
  286. package/dist/styled-system/patterns/flex.js +26 -0
  287. package/dist/styled-system/patterns/float.d.ts +23 -0
  288. package/dist/styled-system/patterns/float.js +52 -0
  289. package/dist/styled-system/patterns/grid-item.d.ts +25 -0
  290. package/dist/styled-system/patterns/grid-item.js +25 -0
  291. package/dist/styled-system/patterns/grid.d.ts +24 -0
  292. package/dist/styled-system/patterns/grid.js +27 -0
  293. package/dist/styled-system/patterns/hstack.d.ts +21 -0
  294. package/dist/styled-system/patterns/hstack.js +24 -0
  295. package/dist/styled-system/patterns/index.d.ts +21 -0
  296. package/dist/styled-system/patterns/index.js +20 -0
  297. package/dist/styled-system/patterns/link-overlay.d.ts +20 -0
  298. package/dist/styled-system/patterns/link-overlay.js +24 -0
  299. package/dist/styled-system/patterns/spacer.d.ts +20 -0
  300. package/dist/styled-system/patterns/spacer.js +25 -0
  301. package/dist/styled-system/patterns/square.d.ts +20 -0
  302. package/dist/styled-system/patterns/square.js +24 -0
  303. package/dist/styled-system/patterns/stack.d.ts +23 -0
  304. package/dist/styled-system/patterns/stack.js +24 -0
  305. package/dist/styled-system/patterns/visually-hidden.d.ts +20 -0
  306. package/dist/styled-system/patterns/visually-hidden.js +18 -0
  307. package/dist/styled-system/patterns/vstack.d.ts +21 -0
  308. package/dist/styled-system/patterns/vstack.js +24 -0
  309. package/dist/styled-system/patterns/wrap.d.ts +24 -0
  310. package/dist/styled-system/patterns/wrap.js +25 -0
  311. package/dist/styled-system/recipes/content-header.d.ts +31 -0
  312. package/dist/styled-system/recipes/content-header.js +65 -0
  313. package/dist/styled-system/recipes/content-page.d.ts +34 -0
  314. package/dist/styled-system/recipes/content-page.js +43 -0
  315. package/dist/styled-system/recipes/create-recipe.js +82 -0
  316. package/dist/styled-system/recipes/index.d.ts +17 -0
  317. package/dist/styled-system/recipes/index.js +16 -0
  318. package/dist/styled-system/recipes/metric-block.d.ts +34 -0
  319. package/dist/styled-system/recipes/metric-block.js +76 -0
  320. package/dist/styled-system/recipes/product-list.d.ts +31 -0
  321. package/dist/styled-system/recipes/product-list.js +73 -0
  322. package/dist/styled-system/recipes/product-section.d.ts +31 -0
  323. package/dist/styled-system/recipes/product-section.js +49 -0
  324. package/dist/styled-system/recipes/product-settings-row.d.ts +34 -0
  325. package/dist/styled-system/recipes/product-settings-row.js +58 -0
  326. package/dist/styled-system/recipes/product-settings.d.ts +31 -0
  327. package/dist/styled-system/recipes/product-settings.js +57 -0
  328. package/dist/styled-system/recipes/product-status.d.ts +34 -0
  329. package/dist/styled-system/recipes/product-status.js +45 -0
  330. package/dist/styled-system/recipes/product-toolbar.d.ts +31 -0
  331. package/dist/styled-system/recipes/product-toolbar.js +41 -0
  332. package/dist/styled-system/recipes/product-workspace.d.ts +34 -0
  333. package/dist/styled-system/recipes/product-workspace.js +58 -0
  334. package/dist/styled-system/recipes/surface-metric.d.ts +38 -0
  335. package/dist/styled-system/recipes/surface-metric.js +63 -0
  336. package/dist/styled-system/recipes/surface-table.d.ts +34 -0
  337. package/dist/styled-system/recipes/surface-table.js +62 -0
  338. package/dist/styled-system/recipes/ui-badge.d.ts +31 -0
  339. package/dist/styled-system/recipes/ui-badge.js +38 -0
  340. package/dist/styled-system/recipes/ui-button.d.ts +32 -0
  341. package/dist/styled-system/recipes/ui-button.js +43 -0
  342. package/dist/styled-system/recipes/ui-input.d.ts +31 -0
  343. package/dist/styled-system/recipes/ui-input.js +49 -0
  344. package/dist/styled-system/recipes/ui-textarea.d.ts +31 -0
  345. package/dist/styled-system/recipes/ui-textarea.js +24 -0
  346. package/dist/styled-system/styles.css +1257 -0
  347. package/dist/styled-system/tokens/index.d.ts +9 -0
  348. package/dist/styled-system/tokens/index.js +268 -0
  349. package/dist/styled-system/tokens/tokens.d.ts +36 -0
  350. package/dist/styled-system/types/composition.d.ts +227 -0
  351. package/dist/styled-system/types/conditions.d.ts +236 -0
  352. package/dist/styled-system/types/csstype.d.ts +22570 -0
  353. package/dist/styled-system/types/index.d.ts +6 -0
  354. package/dist/styled-system/types/parts.d.ts +8 -0
  355. package/dist/styled-system/types/pattern.d.ts +78 -0
  356. package/dist/styled-system/types/prop-type.d.ts +223 -0
  357. package/dist/styled-system/types/recipe.d.ts +181 -0
  358. package/dist/styled-system/types/selectors.d.ts +59 -0
  359. package/dist/styled-system/types/static-css.d.ts +56 -0
  360. package/dist/styled-system/types/style-props.d.ts +8088 -0
  361. package/dist/styled-system/types/system-types.d.ts +151 -0
  362. package/dist/styles/aliases.css +49 -0
  363. package/dist/styles/compatibility.epilogue.css +384 -0
  364. package/dist/styles/compatibility.prelude.css +5513 -0
  365. package/dist/styles/conditional-states.css +28 -0
  366. package/dist/styles/conditional-utilities.css +22 -0
  367. package/dist/styles/recipes.css +1262 -0
  368. package/dist/types.d.ts +3 -3
  369. package/dist/utils.d.ts +1 -1
  370. package/dist/utils.js +1 -1
  371. package/package.json +38 -14
  372. package/styles-compatibility.json +12 -0
@@ -1,76 +1,118 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
- import { useImport, useCan, useTranslation } from '@svadmin/core';
3
+ import { captureAdminContext, captureAuthSession, useCan, useTranslation, useImport, useResourceContract,
4
+ type ImportResult, type ContractSchemas } from '@svadmin/core';
5
+ import { definedOptions, definedReactiveOptions } from '@svadmin/core/options';
4
6
  import { Button } from '../ui/button/index.js';
5
7
  import { Upload } from '@lucide/svelte';
6
8
  import type { ButtonAccessControl } from './access-control';
7
9
 
8
10
  const i18n = useTranslation();
9
11
 
10
- let {
11
- resource,
12
- label,
13
- children,
14
- hideText = false,
15
- onFinish,
16
- accessControl = { enabled: true, hideIfUnauthorized: true },
17
- class: className = '',
18
- } = $props<{
12
+ interface Props {
19
13
  resource: string;
20
14
  label?: string;
21
15
  children?: Snippet;
22
16
  hideText?: boolean;
23
- onFinish?: (result: { succeeded: unknown[]; errored: { request: unknown; error: unknown }[] }) => void;
17
+ onFinish?: (result: ImportResult<ContractSchemas>) => void | Promise<void>;
18
+ mapData?: (row: Record<string, unknown>) => unknown;
24
19
  accessControl?: ButtonAccessControl;
25
20
  class?: string;
26
- }>();
21
+ }
22
+ let {
23
+ resource, label, children, hideText = false, onFinish, mapData,
24
+ accessControl = { enabled: true, hideIfUnauthorized: true }, class: className = '',
25
+ }: Props = $props();
27
26
 
28
27
  let fileInput: HTMLInputElement | undefined = $state();
29
28
 
30
- const importHook = useImport({
31
- get resource() { return resource; },
32
- onFinish: (result) => onFinish?.(result),
33
- });
34
-
35
- const can = useCan(() => ({
29
+ const context = captureAdminContext();
30
+ const binding = useResourceContract(() => resource);
31
+ const can = useCan(() => definedOptions({
36
32
  resource,
37
33
  action: 'import',
38
34
  params: accessControl?.params,
39
35
  meta: accessControl?.meta,
40
36
  queryOptions: { enabled: accessControl?.enabled ?? true },
41
37
  }));
42
- const hidden = $derived(accessControl?.hideIfUnauthorized && !can.allowed);
38
+ const session = $derived(captureAuthSession(context.authProvider));
39
+ const policyAllowed = $derived(accessControl.enabled === false || can.allowed === true);
40
+ const allowed = $derived(policyAllowed && session.available);
41
+ const canCreate = $derived(context.getResource(resource).canCreate !== false);
42
+ const hidden = $derived(!canCreate ||
43
+ (accessControl.hideIfUnauthorized && !allowed));
44
+ const importHook = useImport(definedReactiveOptions({
45
+ get resource() { return binding.resource; },
46
+ get dataProviderName() { return binding.dataProviderName; },
47
+ get enabled() { return policyAllowed && canCreate; },
48
+ get onFinish() { return onFinish; },
49
+ get mapData() { return mapData; },
50
+ }));
51
+ const scope = $derived({
52
+ contract: binding.resource, provider: context.providers?.[binding.dataProviderName],
53
+ tenant: context.tenantCacheKey?.__svadminTenant, meta: binding.meta, allowed, hidden,
54
+ auth: context.authProvider, router: context.routerProvider, session,
55
+ });
56
+ let mounted = true;
57
+ let picker: { scope: typeof scope; input: HTMLInputElement } | undefined;
58
+ let selection: object | undefined;
59
+ const currentScope = (origin: typeof scope) => mounted && scope === origin && origin.session.isCurrent();
60
+ $effect.pre(() => { void scope; picker = undefined; selection = undefined; });
61
+ $effect(() => () => { mounted = false; picker = undefined; selection = undefined; });
43
62
 
44
- function triggerImport() {
45
- fileInput?.click();
46
- }
63
+ const triggerImport = $derived.by(() => {
64
+ const origin = scope;
65
+ return () => {
66
+ if (!currentScope(origin) || !allowed || hidden || importHook.isLoading || !fileInput) return;
67
+ picker = { scope: origin, input: fileInput };
68
+ fileInput.click();
69
+ };
70
+ });
47
71
 
48
- function handleFileChange(e: Event) {
49
- const input = e.target as HTMLInputElement;
50
- const file = input.files?.[0];
51
- if (file) {
52
- importHook.handleChange({ file });
53
- input.value = ''; // reset for re-import
54
- }
55
- }
72
+ const handleFileChange = $derived.by(() => {
73
+ const origin = scope;
74
+ return async (event: Event) => {
75
+ const input = event.currentTarget;
76
+ if (!(input instanceof HTMLInputElement) || !currentScope(origin) || picker?.scope !== origin ||
77
+ picker.input !== input || !allowed || hidden || importHook.isLoading) return;
78
+ const token = {};
79
+ selection = token;
80
+ picker = undefined;
81
+ try {
82
+ const file = input.files?.[0];
83
+ if (file) await importHook.handleChange({ file });
84
+ } catch {
85
+ // The hook exposes a sanitized error; event handlers must not reject globally.
86
+ } finally {
87
+ if (currentScope(origin) && selection === token && fileInput === input) {
88
+ input.value = '';
89
+ selection = undefined;
90
+ }
91
+ }
92
+ };
93
+ });
56
94
 
57
95
  const displayText = $derived(label ?? i18n.t('common.import'));
58
96
  </script>
59
97
 
60
98
  {#if !hidden}
61
- <input
62
- type="file"
63
- accept={importHook.inputProps.accept}
64
- class="svadmin-u-99d72c7fc3e2"
65
- bind:this={fileInput}
66
- onchange={handleFileChange}
67
- />
99
+ {#key scope}
100
+ <input
101
+ type="file"
102
+ accept={importHook.inputProps.accept}
103
+ class="svadmin-u-99d72c7fc3e2"
104
+ bind:this={fileInput}
105
+ onchange={handleFileChange}
106
+ />
107
+ {/key}
68
108
  <Button
109
+ type="button"
69
110
  variant="outline"
70
111
  size={hideText ? 'icon' : 'sm'}
71
112
  class={className}
72
113
  aria-label={hideText ? displayText : undefined}
73
- disabled={importHook.isLoading || !can.allowed}
114
+ disabled={importHook.isLoading || !allowed}
115
+ aria-busy={importHook.isLoading}
74
116
  onclick={triggerImport}
75
117
  >
76
118
  <Upload class="svadmin-u-11e59c6d5f6b svadmin-u-dc7972ebf3f3" />
@@ -84,4 +126,7 @@
84
126
  </span>
85
127
  {/if}
86
128
  </Button>
129
+ {#if importHook.error}
130
+ <p role="alert">{i18n.t('common.operationFailed')}</p>
131
+ {/if}
87
132
  {/if}
@@ -1,20 +1,16 @@
1
1
  import type { Snippet } from 'svelte';
2
+ import { type ImportResult, type ContractSchemas } from '@svadmin/core';
2
3
  import type { ButtonAccessControl } from './access-control';
3
- type $$ComponentProps = {
4
+ interface Props {
4
5
  resource: string;
5
6
  label?: string;
6
7
  children?: Snippet;
7
8
  hideText?: boolean;
8
- onFinish?: (result: {
9
- succeeded: unknown[];
10
- errored: {
11
- request: unknown;
12
- error: unknown;
13
- }[];
14
- }) => void;
9
+ onFinish?: (result: ImportResult<ContractSchemas>) => void | Promise<void>;
10
+ mapData?: (row: Record<string, unknown>) => unknown;
15
11
  accessControl?: ButtonAccessControl;
16
12
  class?: string;
17
- };
18
- declare const ImportButton: import("svelte").Component<$$ComponentProps, {}, "">;
13
+ }
14
+ declare const ImportButton: import("svelte").Component<Props, {}, "">;
19
15
  type ImportButton = ReturnType<typeof ImportButton>;
20
16
  export default ImportButton;
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
- import { useInvalidate, useTranslation } from '@svadmin/core';
3
+ import { useTranslation, useInvalidate, useResourceContract, captureAdminContext } from '@svadmin/core';
4
+ import { definedReactiveOptions } from '@svadmin/core/options';
4
5
  import { Button } from '../ui/button/index.js';
5
6
  import { RefreshCw } from '@lucide/svelte';
6
7
 
@@ -20,19 +21,53 @@
20
21
  class?: string;
21
22
  }>();
22
23
 
23
- const invalidate = useInvalidate();
24
+ const binding = useResourceContract(() => resource);
25
+ const context = captureAdminContext();
26
+ const invalidate = useInvalidate(definedReactiveOptions({
27
+ get resource() { return binding.resource; },
28
+ get dataProviderName() { return binding.dataProviderName; },
29
+ }));
30
+ const scope = $derived({
31
+ contract: binding.resource,
32
+ provider: context.providers?.[binding.dataProviderName],
33
+ tenant: context.tenantCacheKey?.__svadminTenant,
34
+ meta: binding.meta,
35
+ });
24
36
  let spinning = $state(false);
25
- let spinTimer: ReturnType<typeof setTimeout> | undefined;
37
+ let failed = $state(false);
38
+ let active: object | undefined;
39
+ let previousScope: typeof scope | undefined;
26
40
 
27
41
  $effect(() => {
28
- return () => { if (spinTimer) clearTimeout(spinTimer); };
42
+ if (previousScope !== scope) {
43
+ active = undefined;
44
+ spinning = false;
45
+ failed = false;
46
+ previousScope = scope;
47
+ }
48
+ });
49
+ $effect(() => () => {
50
+ active = undefined;
29
51
  });
30
52
 
31
- function refresh() {
53
+ async function refresh() {
54
+ if (spinning) return;
55
+ const token = {};
56
+ const capturedScope = scope;
57
+ previousScope = capturedScope;
58
+ active = token;
32
59
  spinning = true;
33
- invalidate({ resource, invalidates: ['list', 'many'] });
34
- if (spinTimer) clearTimeout(spinTimer);
35
- spinTimer = setTimeout(() => { spinning = false; }, 600);
60
+ failed = false;
61
+ try {
62
+ await invalidate({ invalidates: ['list', 'many'] });
63
+ } catch {
64
+ if (active === token && scope === capturedScope) failed = true;
65
+ } finally {
66
+ if (active === token && scope === capturedScope) {
67
+ active = undefined;
68
+ spinning = false;
69
+ }
70
+ }
36
71
  }
37
72
 
38
73
  const displayText = $derived(label ?? i18n.t('common.refresh'));
@@ -43,6 +78,8 @@
43
78
  size={hideText ? 'icon' : 'sm'}
44
79
  class={className}
45
80
  aria-label={hideText ? displayText : undefined}
81
+ aria-busy={spinning}
82
+ disabled={spinning}
46
83
  onclick={refresh}
47
84
  >
48
85
  <RefreshCw class="svadmin-u-11e59c6d5f6b svadmin-u-dc7972ebf3f3 {spinning ? 'svadmin-u-afbdd13a380e' : ''}" />
@@ -56,3 +93,6 @@
56
93
  </span>
57
94
  {/if}
58
95
  </Button>
96
+ {#if failed}
97
+ <p role="alert">{i18n.t('common.error')}</p>
98
+ {/if}
@@ -1,4 +1,6 @@
1
1
  <script lang="ts">
2
+ import { definedOptions } from '@svadmin/core/options';
3
+
2
4
  import type { Snippet } from 'svelte';
3
5
  import { getResource, useNavigation, useCan, useTranslation } from '@svadmin/core';
4
6
  import { Button } from '../ui/button/index.js';
@@ -17,7 +19,7 @@
17
19
  accessControl = { enabled: true, hideIfUnauthorized: true },
18
20
  onBeforeNavigate,
19
21
  class: className = '',
20
- } = $props<{
22
+ }: {
21
23
  resource: string;
22
24
  recordItemId: string | number;
23
25
  label?: string;
@@ -26,7 +28,7 @@
26
28
  accessControl?: ButtonAccessControl;
27
29
  onBeforeNavigate?: (navigate: () => void) => void;
28
30
  class?: string;
29
- }>();
31
+ } = $props();
30
32
 
31
33
  const nav = useNavigation();
32
34
  const resourceDefinition = $derived.by(() => {
@@ -36,13 +38,13 @@
36
38
  return null;
37
39
  }
38
40
  });
39
- const can = useCan(() => ({
41
+ const can = useCan(() => (definedOptions({
40
42
  resource,
41
43
  action: 'show',
42
44
  params: withRecordId(accessControl?.params, recordItemId),
43
45
  meta: accessControl?.meta,
44
46
  queryOptions: { enabled: accessControl?.enabled ?? true }
45
- }));
47
+ })));
46
48
  const hidden = $derived(resourceDefinition?.canShow === false || (accessControl?.hideIfUnauthorized && !can.allowed));
47
49
  const displayText = $derived(label ?? i18n.t('common.detail'));
48
50
 
@@ -1,4 +1,6 @@
1
1
  <script lang="ts">
2
+ import { definedOptions } from '@svadmin/core/options';
3
+
2
4
  import { Check, Copy, KeyRound, Trash2 } from '@lucide/svelte';
3
5
  import { useTranslation } from '@svadmin/core/i18n';
4
6
  import { Badge } from '../ui/badge/index.js';
@@ -21,7 +23,7 @@
21
23
  const isZh = $derived(i18n.locale === 'zh-CN');
22
24
  </script>
23
25
  {#if resolvedState}
24
- <DataState state={resolvedState} title={stateTitle} description={stateDescription} {retry} {retryLabel} {loadingLabel} class={className} />
26
+ <DataState state={resolvedState} {...definedOptions({ title: stateTitle, description: stateDescription, retry, retryLabel, loadingLabel })} class={className} />
25
27
  {:else}
26
28
  <div class={'svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 ' + className}>
27
29
  {#each keys as apiKey (apiKey.id)}
@@ -1,5 +1,7 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
+ import { contentHeader } from '../../styled-system/recipes/index.js';
4
+
3
5
  interface Props {
4
6
  title: string;
5
7
  eyebrow?: string;
@@ -9,23 +11,24 @@
9
11
  class?: string;
10
12
  }
11
13
  let { title, eyebrow, description, breadcrumbs = [], actions, class: className = '' }: Props = $props();
14
+ const styles = contentHeader();
12
15
  </script>
13
16
 
14
- <header class={'svadmin-u-6ed543e2fbbb ' + className} data-svadmin-page-header>
17
+ <header class={styles.root + ' ' + className} data-svadmin-page-header>
15
18
  {#if breadcrumbs.length > 0}
16
- <nav aria-label="Breadcrumb" class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4 svadmin-u-359090c2d529 svadmin-u-bfa603190748">
19
+ <nav aria-label="Breadcrumb" class={styles.breadcrumbs}>
17
20
  {#each breadcrumbs as crumb, index (crumb)}
18
21
  {#if index > 0}<span aria-hidden="true">/</span>{/if}
19
- <span class={index === breadcrumbs.length - 1 ? 'svadmin-u-d4108abe6359' : ''}>{crumb}</span>
22
+ <span class={index === breadcrumbs.length - 1 ? styles.currentCrumb : ''}>{crumb}</span>
20
23
  {/each}
21
24
  </nav>
22
25
  {/if}
23
- <div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-0c3bc98565dd svadmin-u-020ba687fa12 svadmin-u-64cac80d2e9a svadmin-u-3b9871a0bf93">
24
- <div class="svadmin-u-7e0b7cdf1a94 svadmin-u-da7c36cd8867">
25
- {#if eyebrow}<p class="svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-bfa603190748">{eyebrow}</p>{/if}
26
- <h1 class="svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-e9fadafbd4a2 svadmin-u-d9256981a032 svadmin-u-d4108abe6359">{title}</h1>
27
- {#if description}<p class="svadmin-u-2cc8041eca99 svadmin-u-fc7473ca09eb svadmin-u-18550d5945ae svadmin-u-bfa603190748">{description}</p>{/if}
26
+ <div class={styles.row}>
27
+ <div class={styles.heading}>
28
+ {#if eyebrow}<p class={styles.eyebrow}>{eyebrow}</p>{/if}
29
+ <h1 class={styles.title}>{title}</h1>
30
+ {#if description}<p class={styles.description}>{description}</p>{/if}
28
31
  </div>
29
- {#if actions}<div class="svadmin-u-60fbb7713999 svadmin-u-012fbd121f37 svadmin-u-1eb5c6df38c1 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{@render actions()}</div>{/if}
32
+ {#if actions}<div class={styles.actions}>{@render actions()}</div>{/if}
30
33
  </div>
31
34
  </header>
@@ -1,5 +1,7 @@
1
1
  <script lang="ts">
2
+ import { definedOptions } from '@svadmin/core/options';
2
3
  import type { Snippet } from 'svelte';
4
+ import { contentPage } from '../../styled-system/recipes/index.js';
3
5
  import ContentPageHeader from './ContentPageHeader.svelte';
4
6
 
5
7
  interface Props {
@@ -24,16 +26,13 @@
24
26
  class: className = '',
25
27
  }: Props = $props();
26
28
 
27
- const widthClass = $derived(
28
- width === 'narrow'
29
- ? 'svadmin-u-fa3f7111e53b'
30
- : width === 'wide'
31
- ? 'max-w-[92rem]'
32
- : 'max-w-[74rem]',
33
- );
29
+ // 保留旧组件对非窄屏/宽屏输入的默认宽度回退。
30
+ const styles = $derived(contentPage({
31
+ width: width === 'narrow' || width === 'wide' ? width : 'default',
32
+ }));
34
33
  </script>
35
34
 
36
- <div data-svadmin-content-page={pageId} class={'svadmin-u-0e12dc7de920 svadmin-u-6da6a3c3f741 ' + widthClass + ' svadmin-u-b3542e058833 ' + className}>
37
- {#if title}<ContentPageHeader {title} {eyebrow} {description} {actions} />{/if}
35
+ <div data-svadmin-content-page={pageId} class={styles.root + ' ' + className}>
36
+ {#if title}<ContentPageHeader {title} {...definedOptions({ "eyebrow": eyebrow })} {...definedOptions({ "description": description })} {...definedOptions({ "actions": actions })} />{/if}
38
37
  {@render children()}
39
38
  </div>
@@ -0,0 +1,35 @@
1
+ <script module lang="ts">
2
+ import type { ComponentProps } from 'svelte';
3
+ import { Filemanager, Willow } from '@svar-ui/svelte-filemanager';
4
+ import { Locale } from '@svar-ui/svelte-core';
5
+
6
+ export type FileBrowserData = ComponentProps<typeof Filemanager>['data'];
7
+ export type FileBrowserInit = ComponentProps<typeof Filemanager>['init'];
8
+ export type FileBrowserMenuOptions = ComponentProps<typeof Filemanager>['menuOptions'];
9
+ export type FileBrowserProps = ComponentProps<typeof Filemanager> & {
10
+ words?: ComponentProps<typeof Locale>['words'];
11
+ fonts?: boolean;
12
+ class?: string;
13
+ };
14
+ </script>
15
+
16
+ <script lang="ts">
17
+ let {
18
+ words, fonts = false, class: className = '',
19
+ mode = 'table', icons = 'simple', readonly = true,
20
+ ...managerProps
21
+ }: FileBrowserProps = $props();
22
+ </script>
23
+
24
+ <div class={'svadmin-file-browser ' + className} data-slot="file-browser">
25
+ <Willow {fonts}>
26
+ <Locale words={words ?? {}}>
27
+ <Filemanager {...managerProps} {mode} {icons} {readonly} />
28
+ </Locale>
29
+ </Willow>
30
+ </div>
31
+
32
+ <style>
33
+ .svadmin-file-browser { height: 32rem; min-width: 0; max-width: 100%; overflow: hidden; }
34
+ .svadmin-file-browser :global(.wx-willow-theme) { --wx-font-family: inherit; --wx-fm-box-shadow: none; }
35
+ </style>
@@ -0,0 +1,14 @@
1
+ import type { ComponentProps } from 'svelte';
2
+ import { Filemanager } from '@svar-ui/svelte-filemanager';
3
+ import { Locale } from '@svar-ui/svelte-core';
4
+ export type FileBrowserData = ComponentProps<typeof Filemanager>['data'];
5
+ export type FileBrowserInit = ComponentProps<typeof Filemanager>['init'];
6
+ export type FileBrowserMenuOptions = ComponentProps<typeof Filemanager>['menuOptions'];
7
+ export type FileBrowserProps = ComponentProps<typeof Filemanager> & {
8
+ words?: ComponentProps<typeof Locale>['words'];
9
+ fonts?: boolean;
10
+ class?: string;
11
+ };
12
+ declare const FileBrowser: import("svelte").Component<FileBrowserProps, {}, "">;
13
+ type FileBrowser = ReturnType<typeof FileBrowser>;
14
+ export default FileBrowser;
@@ -1,4 +1,6 @@
1
1
  <script lang="ts">
2
+ import { definedOptions } from '@svadmin/core/options';
3
+
2
4
  import { Download, File, Trash2 } from '@lucide/svelte';
3
5
  import { useTranslation } from '@svadmin/core/i18n';
4
6
  import { Button } from '../ui/button/index.js';
@@ -11,7 +13,7 @@
11
13
  const resolvedState = $derived(state ?? (files.length === 0 ? 'empty' : undefined));
12
14
  </script>
13
15
  {#if resolvedState}
14
- <DataState state={resolvedState} title={stateTitle ?? emptyTitle} description={stateDescription ?? emptyDescription} {retry} {retryLabel} {loadingLabel} class={className} />
16
+ <DataState state={resolvedState} {...definedOptions({ title: stateTitle ?? emptyTitle, description: stateDescription ?? emptyDescription, retry, retryLabel, loadingLabel })} class={className} />
15
17
  {:else}
16
18
  <div class={'svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 ' + className}>
17
19
  {#each files as file, index (file.id ?? file.name + '-' + index)}
@@ -1,4 +1,6 @@
1
1
  <script lang="ts">
2
+ import { definedOptions } from '@svadmin/core/options';
3
+
2
4
  import { MoreHorizontal } from '@lucide/svelte';
3
5
  import { useTranslation } from '@svadmin/core/i18n';
4
6
  import { Avatar } from '../ui/avatar/index.js';
@@ -14,7 +16,7 @@
14
16
  const initials = (name: string) => name.split(' ').map((part) => part[0]).join('').slice(0, 2).toUpperCase();
15
17
  </script>
16
18
  {#if resolvedState}
17
- <DataState state={resolvedState} title={stateTitle ?? emptyTitle} description={stateDescription ?? emptyDescription} {retry} {retryLabel} {loadingLabel} class={className} />
19
+ <DataState state={resolvedState} {...definedOptions({ title: stateTitle ?? emptyTitle, description: stateDescription ?? emptyDescription, retry, retryLabel, loadingLabel })} class={className} />
18
20
  {:else}
19
21
  <div class={'svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 ' + className}>
20
22
  {#each members as member (member.id)}
@@ -1,6 +1,8 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
+ import { metricBlock } from '../../styled-system/recipes/index.js';
3
4
  import { Skeleton } from '../ui/skeleton/index.js';
5
+
4
6
  export type MetricTrendTone = 'positive' | 'negative' | 'warning' | 'neutral';
5
7
  interface Props {
6
8
  label: string;
@@ -22,23 +24,18 @@
22
24
  loading = false,
23
25
  class: className = '',
24
26
  }: Props = $props();
25
- const trendClass: Record<MetricTrendTone, string> = {
26
- positive: 'text-success',
27
- negative: 'text-destructive',
28
- warning: 'text-warning-foreground',
29
- neutral: 'text-muted-foreground',
30
- };
27
+ const styles = $derived(metricBlock({ trendTone }));
31
28
  </script>
32
29
 
33
- <div data-svadmin-metric-card role="region" aria-label={label} class={'svadmin-u-7e0b7cdf1a94 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb svadmin-u-438b2237b8d6 ' + className}>
34
- <div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c">
35
- <p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{label}</p>
36
- {#if icon}<span class="svadmin-u-bfa603190748" aria-hidden="true">{@render icon()}</span>{/if}
30
+ <div data-svadmin-metric-card role="region" aria-label={label} class={styles.root + ' ' + className}>
31
+ <div class={styles.header}>
32
+ <p class={styles.label}>{label}</p>
33
+ {#if icon}<span class={styles.icon} aria-hidden="true">{@render icon()}</span>{/if}
37
34
  </div>
38
35
  {#if loading}
39
- <Skeleton class="svadmin-u-eccd13ef4f2f svadmin-u-ed8a5df7b2fb svadmin-u-69da7e4ff95d" />
36
+ <Skeleton class={styles.skeleton} />
40
37
  {:else}
41
- <p class="svadmin-u-50d0d216a2f8 svadmin-u-f283ea9bea0e svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d9256981a032 svadmin-u-d4108abe6359 svadmin-u-3032cae0badb">{value}</p>
42
- {#if detail || trend}<div class="svadmin-u-50d0d216a2f8 svadmin-u-60fbb7713999 svadmin-u-1eb5c6df38c1 svadmin-u-77a2a20e90d4 svadmin-u-359090c2d529">{#if trend}<span class={'svadmin-u-2689f3958069 svadmin-u-3032cae0badb ' + trendClass[trendTone]}>{trend}</span>{/if}{#if detail}<span class="svadmin-u-bfa603190748">{detail}</span>{/if}</div>{/if}
38
+ <p class={styles.value}>{value}</p>
39
+ {#if detail || trend}<div class={styles.meta}>{#if trend}<span class={styles.trend}>{trend}</span>{/if}{#if detail}<span class={styles.detail}>{detail}</span>{/if}</div>{/if}
43
40
  {/if}
44
41
  </div>
@@ -1,18 +1,20 @@
1
1
  <script lang="ts" generics="T extends object">
2
+ import { definedOptions } from '@svadmin/core/options';
3
+
2
4
  import type { Snippet } from 'svelte';
3
5
  import * as Table from '../ui/table/index.js';
4
6
  import DataState from './DataState.svelte';
5
7
  import type { DataStateKind } from './DataState.svelte';
6
8
  import type { NetworkColumn } from './NetworkTable.types.js';
7
- interface Props { rows?: T[]; columns: NetworkColumn<T>[]; row?: Snippet<[T]>; state?: DataStateKind; stateTitle?: string; stateDescription?: string; emptyTitle?: string; emptyDescription?: string; retry?: () => void; retryLabel?: string; loadingLabel?: string; class?: string; }
8
- let { rows = [], columns, row, state, stateTitle, stateDescription, emptyTitle, emptyDescription, retry, retryLabel, loadingLabel, class: className = '' }: Props = $props();
9
+ interface Props { rows?: T[]; columns: NetworkColumn<T>[]; row?: Snippet<[T]>; state?: DataStateKind; stateTitle?: string; stateDescription?: string; emptyTitle?: string; emptyDescription?: string; retry?: () => void; retryLabel?: string; loadingLabel?: string; class?: string; density?: 'comfortable' | 'compact'; }
10
+ let { rows = [], columns, row, state, stateTitle, stateDescription, emptyTitle, emptyDescription, retry, retryLabel, loadingLabel, class: className = '', density = 'comfortable' }: Props = $props();
9
11
  const resolvedState = $derived(state ?? (rows.length === 0 ? 'empty' : undefined));
10
12
  </script>
11
13
  {#if resolvedState}
12
- <DataState state={resolvedState} title={stateTitle ?? emptyTitle} description={stateDescription ?? emptyDescription} {retry} {retryLabel} {loadingLabel} class={className} />
14
+ <DataState state={resolvedState} {...definedOptions({ title: stateTitle ?? emptyTitle, description: stateDescription ?? emptyDescription, retry, retryLabel, loadingLabel })} class={className} />
13
15
  {:else}
14
16
  <div class={'svadmin-u-1384f66f41d0 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 ' + className}>
15
- <Table.Root data-svadmin-datatable>
17
+ <Table.Root {density} data-svadmin-datatable>
16
18
  <Table.Header data-svadmin-table-head><Table.Row>{#each columns as column (String(column.key))}<Table.Head>{column.label}</Table.Head>{/each}</Table.Row></Table.Header>
17
19
  <Table.Body>
18
20
  {#each rows as item, index (String('id' in item ? item.id : index))}
@@ -15,6 +15,7 @@ declare function $$render<T extends object>(): {
15
15
  retryLabel?: string;
16
16
  loadingLabel?: string;
17
17
  class?: string;
18
+ density?: "comfortable" | "compact";
18
19
  };
19
20
  exports: {};
20
21
  bindings: "";
@@ -1,18 +1,14 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
- interface Props {
4
- leading?: Snippet;
5
- trailing?: Snippet;
6
- children?: Snippet;
7
- class?: string;
8
- }
3
+ import { productToolbar } from '../../styled-system/recipes/index.js';
4
+ interface Props { leading?: Snippet; trailing?: Snippet; children?: Snippet; class?: string; }
9
5
  let { leading, trailing, children, class: className = '' }: Props = $props();
6
+ const styles = productToolbar();
10
7
  </script>
11
-
12
- <div data-svadmin-table-toolbar class={'svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-1004c0c3954c svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-eb6e8b881acd svadmin-u-438b2237b8d6 svadmin-u-020ba687fa12 svadmin-u-9f76a62f4f44 svadmin-u-3b9871a0bf93 ' + className}>
13
- <div class="svadmin-u-60fbb7713999 svadmin-u-7e0b7cdf1a94 svadmin-u-36e579c0b41c svadmin-u-1eb5c6df38c1 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">
8
+ <div data-svadmin-table-toolbar class={styles.root + ' ' + className}>
9
+ <div class={styles.leading}>
14
10
  {#if leading}{@render leading()}{/if}
15
11
  {#if children}{@render children()}{/if}
16
12
  </div>
17
- {#if trailing}<div class="svadmin-u-60fbb7713999 svadmin-u-012fbd121f37 svadmin-u-1eb5c6df38c1 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{@render trailing()}</div>{/if}
13
+ {#if trailing}<div class={styles.trailing}>{@render trailing()}</div>{/if}
18
14
  </div>
@@ -1,19 +1,14 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
- interface Props {
4
- title: string;
5
- description?: string;
6
- actions?: Snippet;
7
- id?: string;
8
- class?: string;
9
- }
3
+ import { productSection } from '../../styled-system/recipes/index.js';
4
+ interface Props { title: string; description?: string; actions?: Snippet; id?: string; class?: string; }
10
5
  let { title, description, actions, id, class: className = '' }: Props = $props();
6
+ const styles = productSection();
11
7
  </script>
12
-
13
- <div class={'svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-1004c0c3954c svadmin-u-020ba687fa12 svadmin-u-64cac80d2e9a svadmin-u-3b9871a0bf93 ' + className}>
14
- <div class="svadmin-u-7e0b7cdf1a94 svadmin-u-da7c36cd8867">
15
- <h2 {id} class="svadmin-u-4ee734926ff6 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{title}</h2>
16
- {#if description}<p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{description}</p>{/if}
8
+ <div class={styles.root + ' ' + className} data-svadmin-section-header>
9
+ <div class={styles.heading}>
10
+ <h2 {id} class={styles.title}>{title}</h2>
11
+ {#if description}<p class={styles.description}>{description}</p>{/if}
17
12
  </div>
18
- {#if actions}<div class="svadmin-u-60fbb7713999 svadmin-u-012fbd121f37 svadmin-u-1eb5c6df38c1 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{@render actions()}</div>{/if}
13
+ {#if actions}<div class={styles.actions}>{@render actions()}</div>{/if}
19
14
  </div>
@@ -1,4 +1,6 @@
1
1
  <script lang="ts">
2
+ import { definedOptions } from '@svadmin/core/options';
3
+
2
4
  import * as Table from '../ui/table/index.js';
3
5
  import { useTranslation } from '@svadmin/core/i18n';
4
6
  import StatusBadge from './StatusBadge.svelte';
@@ -12,7 +14,7 @@
12
14
  const isZh = $derived(i18n.locale === 'zh-CN');
13
15
  </script>
14
16
  {#if resolvedState}
15
- <DataState state={resolvedState} title={stateTitle ?? emptyTitle} description={stateDescription ?? emptyDescription} {retry} {retryLabel} {loadingLabel} class={className} />
17
+ <DataState state={resolvedState} {...definedOptions({ title: stateTitle ?? emptyTitle, description: stateDescription ?? emptyDescription, retry, retryLabel, loadingLabel })} class={className} />
16
18
  {:else}
17
19
  <div class={'svadmin-u-1384f66f41d0 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 ' + className}>
18
20
  <Table.Root data-svadmin-datatable>