@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,8 +1,10 @@
1
1
  <script lang="ts">
2
+ import { definedOptions, definedReactiveOptions } from '@svadmin/core/options';
3
+
2
4
  import { fly } from 'svelte/transition';
3
- import { captureAdminContext, useStepsForm, deriveValidator } from '@svadmin/core';
5
+ import { tick } from 'svelte';
6
+ import { captureAdminContext, captureAuthSession, deriveValidator, useStepsForm, useResourceContract, getContractFormFields, useCan } from '@svadmin/core';
4
7
  import type { FieldDefinition } from '@svadmin/core';
5
- import { getResource } from '@svadmin/core';
6
8
  import { useTranslation } from '@svadmin/core/i18n';
7
9
 
8
10
  import { Button } from './ui/button/index.js';
@@ -11,6 +13,8 @@
11
13
  import { Progress } from './ui/progress/index.js';
12
14
  import { Save, ArrowLeft, ArrowRight, Check, Loader2 } from '@lucide/svelte';
13
15
  import FieldRenderer from './FieldRenderer.svelte';
16
+ import ConfirmDialog from './ConfirmDialog.svelte';
17
+ import { Skeleton } from './ui/skeleton/index.js';
14
18
 
15
19
  const i18n = useTranslation();
16
20
 
@@ -24,18 +28,26 @@
24
28
  id?: string | number;
25
29
  mode?: 'create' | 'edit';
26
30
  steps: StepDef[];
31
+ onSuccess?: () => void;
27
32
  }
28
33
 
29
- let { resourceName, id, mode = 'create', steps }: Props = $props();
34
+ let { resourceName, id, mode = 'create', steps, onSuccess }: Props = $props();
30
35
  const adminContext = captureAdminContext();
36
+ const binding = useResourceContract(() => resourceName);
31
37
 
32
- const resource = $derived(getResource(resourceName));
38
+ const resource = $derived(adminContext.getResource(resourceName));
33
39
  const primaryKey = $derived(resource.primaryKey ?? 'id');
40
+ const writableFields = $derived(getContractFormFields(binding.resource, mode));
41
+ const permission = useCan(() => definedOptions({ resource: resourceName, action: mode, id }));
42
+ const allowed = $derived(permission.allowed && (mode === 'create' ? resource.canCreate !== false : resource.canEdit !== false));
34
43
 
35
44
  // All fields used across all steps
36
45
  const flatStepsFields = $derived(steps.flatMap(s => s.fields)
37
46
  .map(key => resource.fields.find(f => f.key === key))
38
- .filter((f): f is FieldDefinition => f != null));
47
+ .filter((f): f is FieldDefinition => f != null && writableFields.includes(f.key)));
48
+ const configurationValid = $derived(steps.every(step => step.fields.every(key =>
49
+ flatStepsFields.some(field => field.key === key && key !== primaryKey && field.showInForm !== false &&
50
+ (mode === 'create' ? field.showInCreate !== false : field.showInEdit !== false)))));
39
51
 
40
52
  // Default values from field metadata
41
53
  function getDefaultForType(field: FieldDefinition): unknown {
@@ -57,61 +69,152 @@
57
69
  })());
58
70
 
59
71
  const validator = $derived(deriveValidator(flatStepsFields, { translate: i18n.t }));
60
- const stepsCount = $derived(steps.length);
61
72
 
62
73
  // ─── useStepsForm: form state + step navigation ──────────────────
63
- const form = useStepsForm({
64
- get resource() { return resourceName; },
74
+ const form = useStepsForm(definedReactiveOptions({
75
+ get resource() { return binding.resource; },
65
76
  get action() { return mode; },
66
77
  get id() { return id; },
67
78
  get defaultValues() { return defaults; },
68
- get stepsCount() { return stepsCount; },
79
+ get steps() { return steps.map(step => ({ fields: step.fields })); },
80
+ get enabled() { return allowed && configurationValid; },
81
+ get dataProviderName() { return binding.dataProviderName; },
69
82
  redirect: 'list',
70
83
  warnWhenUnsavedChanges: true,
71
84
  get validate() { return validator; },
72
- });
85
+ get onMutationSuccess() {
86
+ const callback = onSuccess;
87
+ return callback ? () => callback() : undefined;
88
+ },
89
+ }));
73
90
 
74
- const totalSteps = $derived(steps.length);
75
- const progressValue = $derived(((form.steps.currentStep + 1) / totalSteps) * 100);
91
+ const totalSteps = $derived(form.steps.totalSteps);
92
+ const progressValue = $derived(totalSteps > 0 ? ((form.steps.currentStep + 1) / totalSteps) * 100 : 0);
76
93
  const isLastStep = $derived(form.steps.currentStep >= totalSteps - 1);
77
94
 
78
95
  // Fields for the current step
79
96
  const currentFields = $derived(
80
97
  steps[form.steps.currentStep]?.fields
81
98
  .map(key => resource.fields.find(f => f.key === key))
82
- .filter((f): f is FieldDefinition => f != null && f.key !== primaryKey) ?? []
99
+ .filter((f): f is FieldDefinition => f != null && f.key !== primaryKey && writableFields.includes(f.key)) ?? []
83
100
  );
84
101
 
85
- // Validate only fields in the current step
86
- function validateCurrentStep(): boolean {
87
- let valid = true;
88
- form.clearErrors();
89
- const errors = validator(form.values);
90
- if (errors) {
91
- for (const field of currentFields) {
92
- if (errors[field.key]) {
93
- form.setFieldError(field.key, errors[field.key]);
94
- valid = false;
95
- }
96
- }
102
+ let element = $state.raw<HTMLFormElement>();
103
+ let submitError = $state<string | null>(null);
104
+ let submission = $state.raw<object>();
105
+ const scope = $derived({
106
+ contract: binding.resource, id, mode, allowed, configurationValid,
107
+ steps: JSON.stringify(steps), provider: adminContext.providers?.[binding.dataProviderName],
108
+ meta: binding.meta, tenant: adminContext.tenantCacheKey?.__svadminTenant,
109
+ auth: adminContext.authProvider, router: adminContext.routerProvider,
110
+ session: captureAuthSession(adminContext.authProvider),
111
+ });
112
+ const rendered = $derived({ scope, step: form.steps.currentStep });
113
+ let mounted = true;
114
+ let confirmation = $state.raw<typeof rendered>();
115
+ const currentRendered = (origin: typeof rendered) => mounted && origin === rendered &&
116
+ origin.scope.session.isCurrent() && form.ready;
117
+ const confirmOpen = $derived(confirmation !== undefined && currentRendered(confirmation));
118
+ $effect(() => {
119
+ void scope;
120
+ submitError = null;
121
+ submission = undefined;
122
+ confirmation = undefined;
123
+ });
124
+ $effect(() => () => { mounted = false; submission = undefined; confirmation = undefined; });
125
+ function errorId(field: string): string { return `${resourceName}-step-${field}-error`; }
126
+ async function focusInvalid(origin: typeof scope) {
127
+ await tick();
128
+ if (mounted && scope === origin && origin.session.isCurrent() && element?.isConnected) {
129
+ element.querySelector<HTMLElement>('[aria-invalid="true"]')?.focus();
97
130
  }
98
- return valid;
99
131
  }
100
-
101
- async function handleSubmit() {
102
- if (!validateCurrentStep()) return;
103
-
104
- if (!isLastStep) {
105
- form.steps.nextStep();
106
- return;
107
- }
108
-
109
- // Last step — submit the full form
110
- await form.submit({ redirect: 'list' });
132
+ const changeStep = $derived.by(() => {
133
+ const origin = rendered;
134
+ return (step: number) => () => {
135
+ if (!currentRendered(origin) || !allowed || form.submitting) return;
136
+ submitError = null;
137
+ if (!form.steps.gotoStep(step)) void focusInvalid(origin.scope);
138
+ };
139
+ });
140
+ const fieldChange = $derived.by(() => {
141
+ const origin = rendered;
142
+ return (key: string) => (value: unknown) => {
143
+ if (currentRendered(origin)) form.setFieldValue(key, value);
144
+ };
145
+ });
146
+ function leave(origin: typeof rendered) {
147
+ if (!currentRendered(origin)) return;
148
+ confirmation = undefined;
149
+ void adminContext.navigate(`/${encodeURIComponent(resourceName)}`).catch(() => {
150
+ if (currentRendered(origin) && element?.isConnected) submitError = i18n.t('common.operationFailed');
151
+ });
111
152
  }
153
+ const back = $derived.by(() => {
154
+ const origin = rendered;
155
+ const previous = changeStep(origin.step - 1);
156
+ return () => {
157
+ if (!currentRendered(origin) || form.submitting) return;
158
+ if (origin.step > 0) previous();
159
+ else if (form.isDirty) confirmation = origin;
160
+ else leave(origin);
161
+ };
162
+ });
163
+ const confirmLeave = $derived.by(() => {
164
+ const origin = confirmation;
165
+ return () => { if (origin && confirmation === origin) leave(origin); };
166
+ });
167
+ const cancelLeave = $derived.by(() => {
168
+ const origin = confirmation;
169
+ return () => { if (origin && confirmation === origin) confirmation = undefined; };
170
+ });
171
+ const retry = $derived.by(() => {
172
+ const origin = scope;
173
+ const refetch = form.query.refetch;
174
+ return () => {
175
+ if (mounted && scope === origin && origin.session.isCurrent()) void refetch().catch(() => {});
176
+ };
177
+ });
178
+
179
+ const handleSubmit = $derived.by(() => {
180
+ const origin = rendered;
181
+ return async () => {
182
+ if (!currentRendered(origin) || !allowed || form.submitting || submission) return;
183
+ submitError = null;
184
+ if (!isLastStep) {
185
+ if (!form.steps.nextStep()) void focusInvalid(origin.scope);
186
+ return;
187
+ }
188
+ const token = {};
189
+ submission = token;
190
+ try { await form.submit(); }
191
+ catch {
192
+ if (submission === token && mounted && scope === origin.scope && origin.scope.session.isCurrent()) {
193
+ submitError = i18n.t('common.operationFailed');
194
+ void focusInvalid(origin.scope);
195
+ }
196
+ } finally {
197
+ if (submission === token) submission = undefined;
198
+ }
199
+ };
200
+ });
201
+ const submitEvent = $derived.by(() => {
202
+ const submit = handleSubmit;
203
+ return (event: Event) => { event.preventDefault(); void submit(); };
204
+ });
112
205
  </script>
113
206
 
114
207
  <div class="svadmin-u-b3542e058833">
208
+ {#if permission.isLoading || form.loading}
209
+ <Skeleton class="svadmin-u-426b8b75185b svadmin-u-6da6a3c3f741" />
210
+ {:else if !allowed || !configurationValid || (!form.ready && form.error)}
211
+ <p role="alert">{i18n.t('common.operationFailed')}</p>
212
+ {#if allowed && configurationValid && form.query.isError}
213
+ <Button type="button" variant="outline" onclick={retry}>
214
+ {i18n.t('common.retry')}
215
+ </Button>
216
+ {/if}
217
+ {:else if form.ready}
115
218
  <!-- Step indicators -->
116
219
  <div class="svadmin-u-6ed543e2fbbb">
117
220
  <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-fc7473ca09eb">
@@ -120,14 +223,16 @@
120
223
  variant="ghost"
121
224
  type="button"
122
225
  class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4 svadmin-u-ceb69a6b0e5f svadmin-u-b8f0a08ece1e svadmin-u-660d2effb880 svadmin-u-d5eab218aa34 {i === form.steps.currentStep ? 'svadmin-u-20aaf08a7ed1 svadmin-u-e83a7042bc91' : 'svadmin-u-bfa603190748'}"
123
- onclick={() => form.steps.gotoStep(i)}
226
+ aria-current={i === form.steps.currentStep ? 'step' : undefined}
227
+ disabled={form.submitting || !!submission}
228
+ onclick={changeStep(i)}
124
229
  >
125
230
  <span
126
231
  class="svadmin-u-60fbb7713999 svadmin-u-d0a52b312f7d svadmin-u-cbbf90f9a828 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-ac204c108886 svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-ceb69a6b0e5f"
127
- class:bg-primary={i <= form.steps.currentStep}
128
- class:text-primary-foreground={i <= form.steps.currentStep}
129
- class:bg-muted={i > form.steps.currentStep}
130
- class:text-muted-foreground={i > form.steps.currentStep}
232
+ class:svadmin-u-75b1bec3ea0e={i <= form.steps.currentStep}
233
+ class:svadmin-u-30ca335ae9c2={i <= form.steps.currentStep}
234
+ class:svadmin-u-2ef11f1cb219={i > form.steps.currentStep}
235
+ class:svadmin-u-bfa603190748={i > form.steps.currentStep}
131
236
  >
132
237
  {#if i < form.steps.currentStep}
133
238
  <Check class="svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
@@ -138,7 +243,7 @@
138
243
  <span class="svadmin-u-99d72c7fc3e2 svadmin-u-ee3c1259a368">{step.title}</span>
139
244
  </Button>
140
245
  {#if i < steps.length - 1}
141
- <div class="svadmin-u-36e579c0b41c svadmin-u-9e10c04e17bb svadmin-u-aea6160836e7 svadmin-u-a59afa8d9b9d" class:bg-primary={i < form.steps.currentStep}></div>
246
+ <div class="svadmin-u-36e579c0b41c svadmin-u-9e10c04e17bb svadmin-u-aea6160836e7 svadmin-u-a59afa8d9b9d" class:svadmin-u-75b1bec3ea0e={i < form.steps.currentStep}></div>
142
247
  {/if}
143
248
  {/each}
144
249
  </div>
@@ -154,16 +259,21 @@
154
259
  </Badge>
155
260
  </Card.CardHeader>
156
261
  <Card.CardContent>
157
- {#key form.steps.currentStep}
158
- <form class="svadmin-u-b43b4c086d9a" onsubmit={(e) => { e.preventDefault(); handleSubmit(); }} in:fly={{ x: 30, duration: 250 }}>
262
+ {#key rendered}
263
+ <form bind:this={element} class="svadmin-u-b43b4c086d9a" novalidate onsubmit={submitEvent} in:fly={{ x: 30, duration: 250 }}>
264
+ {#if submitError || form.error}
265
+ <p role="alert">{submitError ?? i18n.t('common.operationFailed')}</p>
266
+ {/if}
159
267
  {#each currentFields as field (field.key)}
160
268
  <FieldRenderer
161
269
  {field}
162
270
  value={form.values[field.key]}
163
- onchange={(v) => form.setFieldValue(field.key, v)}
271
+ onchange={fieldChange(field.key)}
272
+ invalid={!!form.errors[field.key]}
273
+ {...definedOptions({ errorId: form.errors[field.key] ? errorId(field.key) : undefined })}
164
274
  />
165
275
  {#if form.errors[field.key]}
166
- <p class="svadmin-u-811148b13d1e svadmin-u-1d5904e7e755 svadmin-u-b6b02c0ebef6">{form.errors[field.key]}</p>
276
+ <p id={errorId(field.key)} role="alert" aria-live="polite" class="svadmin-u-811148b13d1e svadmin-u-1d5904e7e755 svadmin-u-b6b02c0ebef6">{form.errors[field.key]}</p>
167
277
  {/if}
168
278
  {/each}
169
279
 
@@ -171,13 +281,14 @@
171
281
  <Button
172
282
  type="button"
173
283
  variant="outline"
174
- onclick={() => form.steps.currentStep === 0 ? adminContext.navigate(`/${resourceName}`) : form.steps.prevStep()}
284
+ disabled={form.submitting || !!submission}
285
+ onclick={back}
175
286
  >
176
287
  <ArrowLeft class="svadmin-u-11e59c6d5f6b svadmin-u-dc7972ebf3f3" data-icon="inline-start" />
177
288
  {form.steps.currentStep === 0 ? i18n.t('common.cancel') : i18n.t('common.back')}
178
289
  </Button>
179
290
 
180
- <Button type="submit" disabled={form.submitting}>
291
+ <Button type="submit" disabled={form.submitting || !!submission}>
181
292
  {#if form.submitting}
182
293
  <Loader2 class="svadmin-u-11e59c6d5f6b svadmin-u-dc7972ebf3f3 svadmin-u-afbdd13a380e" data-icon="inline-start" />
183
294
  {:else if isLastStep}
@@ -192,4 +303,10 @@
192
303
  {/key}
193
304
  </Card.CardContent>
194
305
  </Card.Root>
306
+ {/if}
195
307
  </div>
308
+
309
+ {#key confirmation}
310
+ <ConfirmDialog open={confirmOpen} message={i18n.t('common.unsavedChanges')}
311
+ onconfirm={confirmLeave} oncancel={cancelLeave} />
312
+ {/key}
@@ -7,6 +7,7 @@ interface Props {
7
7
  id?: string | number;
8
8
  mode?: 'create' | 'edit';
9
9
  steps: StepDef[];
10
+ onSuccess?: () => void;
10
11
  }
11
12
  declare const StepsForm: import("svelte").Component<Props, {}, "">;
12
13
  type StepsForm = ReturnType<typeof StepsForm>;
@@ -0,0 +1,39 @@
1
+ <script lang="ts">
2
+ import type { ComponentProps } from 'svelte';
3
+ import { captureAdminContext, captureAuthSession } from '@svadmin/core';
4
+ import AutoTable from './AutoTable.svelte';
5
+ import SvarDataGrid from './SvarDataGrid.svelte';
6
+ export type SvarAutoTableProps = Omit<ComponentProps<typeof AutoTable>, 'gridBody'> & {
7
+ Grid: ComponentProps<typeof SvarDataGrid>['Grid'];
8
+ Theme: ComponentProps<typeof SvarDataGrid>['Theme'];
9
+ height?: number;
10
+ freezeLeft?: number;
11
+ freezeRight?: number;
12
+ };
13
+ let { Grid, Theme, height = 420, freezeLeft = 0, freezeRight = 0, ...props }: SvarAutoTableProps = $props();
14
+ const context = captureAdminContext();
15
+ const owner = $derived.by(() => {
16
+ const auth = captureAuthSession(context.authProvider);
17
+ return { resource: props.resourceName, contract: context.getResource(props.resourceName).contract,
18
+ provider: context.getDataProviderForResource(props.resourceName), access: context.accessControlProvider,
19
+ tenant: context.tenantCacheKey?.__svadminTenant, authKey: auth.cacheKey, available: auth.available };
20
+ });
21
+ </script>
22
+
23
+ {#key owner}
24
+ {#if owner.available}
25
+ <AutoTable {...props}>
26
+ {#snippet gridBody(state)}
27
+ <details><summary>{state.locale.startsWith('zh') ? '表格选择与列顺序' : 'Selection and column order'}</summary>{@render state.controls()}</details>
28
+ <SvarDataGrid {Grid} {Theme} items={state.records} columns={state.columns} primaryKey={state.primaryKey}
29
+ {height} freezeLeft={Math.min(freezeLeft, state.columns.length - Math.min(freezeRight, state.columns.length - 1))}
30
+ freezeRight={Math.min(freezeRight, state.columns.length - 1)} density={state.density}
31
+ queryMode="server" sorters={state.sorters} onSortChange={state.onSortChange}
32
+ disabled={state.disabled} scopeKey={state.scopeKey} locale={state.locale} label={state.label}>
33
+ {#snippet cellContent({ id, field })}{@render state.cell({ id, field })}{/snippet}
34
+ </SvarDataGrid>
35
+ {@render state.after()}
36
+ {/snippet}
37
+ </AutoTable>
38
+ {/if}
39
+ {/key}
@@ -0,0 +1,13 @@
1
+ import type { ComponentProps } from 'svelte';
2
+ import AutoTable from './AutoTable.svelte';
3
+ import SvarDataGrid from './SvarDataGrid.svelte';
4
+ export type SvarAutoTableProps = Omit<ComponentProps<typeof AutoTable>, 'gridBody'> & {
5
+ Grid: ComponentProps<typeof SvarDataGrid>['Grid'];
6
+ Theme: ComponentProps<typeof SvarDataGrid>['Theme'];
7
+ height?: number;
8
+ freezeLeft?: number;
9
+ freezeRight?: number;
10
+ };
11
+ declare const SvarAutoTable: import("svelte").Component<SvarAutoTableProps, {}, "">;
12
+ type SvarAutoTable = ReturnType<typeof SvarAutoTable>;
13
+ export default SvarAutoTable;