@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,5 +1,10 @@
1
1
  <script lang="ts">
2
- import { useForm, getResource, deriveValidator, useNavigation } from '@svadmin/core';
2
+ import { bindResourceRendering, type ResourceRendering } from '../rendering/index.js';
3
+ import { definedReactiveOptions } from '@svadmin/core/options';
4
+
5
+ import { definedOptions } from '@svadmin/core/options';
6
+
7
+ import { captureAdminContext, captureAuthSession, useResourceContract, getContractFormFields, deriveValidator, useNavigation, useCan, useForm } from '@svadmin/core';
3
8
  import { slide } from 'svelte/transition';
4
9
  import type { FieldDefinition } from '@svadmin/core';
5
10
  import { useTranslation } from '@svadmin/core/i18n';
@@ -20,6 +25,7 @@
20
25
 
21
26
  interface Props {
22
27
  resourceName: string;
28
+ rendering?: ResourceRendering | undefined;
23
29
  id?: string | number;
24
30
  mode?: 'create' | 'edit' | 'clone' | 'show';
25
31
  density?: 'compact' | 'comfortable';
@@ -29,11 +35,14 @@
29
35
  formActions?: Snippet<[{ isLoading: boolean; onSubmit: () => void }]>;
30
36
  headerContent?: Snippet;
31
37
  onSuccess?: () => void;
38
+ redirect?: 'list' | false;
39
+ onCancel?: () => void;
32
40
  onNavigationGuardReady?: (guard: (fn: () => void) => void) => void;
33
41
  }
34
42
 
35
43
  let {
36
44
  resourceName,
45
+ rendering,
37
46
  id,
38
47
  mode = 'create',
39
48
  density = 'comfortable',
@@ -43,20 +52,40 @@
43
52
  formActions,
44
53
  headerContent,
45
54
  onSuccess,
55
+ redirect = 'list',
56
+ onCancel,
46
57
  onNavigationGuardReady,
47
58
  }: Props = $props();
48
59
  const navigation = useNavigation();
60
+ const context = captureAdminContext();
61
+ const binding = useResourceContract(() => resourceName);
62
+ const activeRendering = $derived(bindResourceRendering(rendering, binding.resource));
49
63
  const isReadonly = $derived(mode === 'show');
50
64
  const isCompact = $derived(density === 'compact');
51
65
 
52
66
  // ─── Resource metadata ────────────────────────────────────────────
53
- const resource = $derived(getResource(resourceName));
67
+ const resource = $derived(context.getResource(resourceName));
54
68
  const primaryKey = $derived(resource.primaryKey ?? 'id');
69
+ const contractFields = $derived(getContractFormFields(binding.resource, mode));
70
+ const readPermission = useCan(() => definedOptions({
71
+ resource: resourceName, action: mode === 'edit' ? 'edit' : 'show', id,
72
+ queryOptions: { enabled: mode !== 'create' },
73
+ }));
74
+ const createPermission = useCan(() => ({
75
+ resource: resourceName, action: 'create', queryOptions: { enabled: mode === 'create' || mode === 'clone' },
76
+ }));
77
+ const permissionPending = $derived(mode === 'create' ? createPermission.isLoading
78
+ : readPermission.isLoading || (mode === 'clone' && createPermission.isLoading));
79
+ const allowed = $derived(mode === 'create' ? resource.canCreate !== false && createPermission.allowed
80
+ : mode === 'edit' ? resource.canEdit !== false && readPermission.allowed
81
+ : mode === 'show' ? resource.canShow !== false && readPermission.allowed
82
+ : resource.canCreate !== false && resource.canShow !== false && readPermission.allowed && createPermission.allowed);
55
83
 
56
84
  const formFields = $derived(resource.fields.filter(f => {
57
85
  if (f.key === primaryKey) return false;
86
+ if (!contractFields.includes(f.key)) return false;
58
87
  if (f.showInForm === false) return false;
59
- if (mode === 'create' && f.showInCreate === false) return false;
88
+ if ((mode === 'create' || mode === 'clone') && f.showInCreate === false) return false;
60
89
  if (mode === 'edit' && f.showInEdit === false) return false;
61
90
  if (mode === 'show' && f.showInShow === false) return false;
62
91
  return true;
@@ -117,19 +146,50 @@
117
146
  const validator = $derived(deriveValidator(formFields, { translate: i18n.t }));
118
147
 
119
148
  // ─── useForm: single source of truth for values, errors, tainted ──
120
- const form = useForm({
121
- get resource() { return resourceName; },
149
+ const form = useForm(definedReactiveOptions({
150
+ get resource() { void activeRendering; return binding.resource; },
122
151
  get action() { return mode; },
123
152
  get id() { return id; },
124
153
  get defaultValues() { return defaults; },
125
- redirect: 'list',
154
+ get enabled() { return allowed; },
155
+ get dataProviderName() { return binding.dataProviderName; },
156
+ get redirect() { return redirect; },
126
157
  warnWhenUnsavedChanges: true,
127
158
  get validate() { return validator; },
159
+ get onMutationSuccess() {
160
+ const callback = onSuccess;
161
+ return callback ? () => callback() : undefined;
162
+ },
163
+ }));
164
+
165
+ const renderedDraft = $derived.by(() => {
166
+ try {
167
+ return { ok: true, values: form.ready && activeRendering ? activeRendering.draft(mode, form.values) : form.values };
168
+ } catch {
169
+ return { ok: false, values: {} };
170
+ }
128
171
  });
129
172
 
130
173
  // ─── Submission error (non-field, e.g. network error) ─────────────
131
174
  let submitError = $state<string | null>(null);
132
175
  let formElement = $state.raw<HTMLFormElement>();
176
+ const scope = $derived({
177
+ contract: binding.resource, id, mode, allowed,
178
+ provider: context.providers?.[binding.dataProviderName], meta: binding.meta,
179
+ tenant: context.tenantCacheKey?.__svadminTenant, auth: context.authProvider,
180
+ session: captureAuthSession(context.authProvider),
181
+ });
182
+ let mounted = true;
183
+ const currentScope = (origin: typeof scope) => mounted && scope === origin && origin.session.isCurrent();
184
+ let submission: object | undefined;
185
+ $effect(() => {
186
+ void scope;
187
+ submission = undefined;
188
+ submitError = null;
189
+ confirmOpen = false;
190
+ pendingNavigation = null;
191
+ });
192
+ $effect(() => () => { mounted = false; submission = undefined; });
133
193
 
134
194
  function fieldErrorId(fieldKey: string): string {
135
195
  return `${resourceName}-${fieldKey}-error`;
@@ -140,19 +200,42 @@
140
200
  firstInvalid?.focus();
141
201
  }
142
202
 
143
- async function handleSubmit() {
144
- submitError = null;
145
- try {
146
- await form.submit();
147
- if (Object.keys(form.errors).length > 0) {
148
- queueMicrotask(focusFirstInvalidField);
149
- return;
203
+ const handleSubmit = $derived.by(() => {
204
+ const current = scope;
205
+ return async () => {
206
+ if (!currentScope(current) || !allowed || isReadonly || !form.ready || form.submitting || submission) return;
207
+ const token = {};
208
+ submission = token;
209
+ submitError = null;
210
+ try {
211
+ await form.submit();
212
+ } catch {
213
+ if (submission === token && currentScope(current)) {
214
+ submitError = i18n.t('common.operationFailed');
215
+ queueMicrotask(() => {
216
+ if (currentScope(current)) focusFirstInvalidField();
217
+ });
218
+ }
219
+ } finally {
220
+ if (submission === token) submission = undefined;
150
221
  }
151
- onSuccess?.();
152
- } catch (e) {
153
- submitError = e instanceof Error ? e.message : i18n.t('common.operationFailed');
154
- }
155
- }
222
+ };
223
+ });
224
+ const submitEvent = $derived.by(() => {
225
+ const submit = handleSubmit;
226
+ return (event: Event) => { event.preventDefault(); void submit(); };
227
+ });
228
+ const fieldChange = $derived.by(() => {
229
+ const origin = scope;
230
+ return (key: string) => (value: unknown) => {
231
+ if (currentScope(origin)) form.setFieldValue(key, value);
232
+ };
233
+ });
234
+ const retry = $derived.by(() => {
235
+ const origin = scope;
236
+ const refetch = form.query.refetch;
237
+ return () => { if (currentScope(origin)) void refetch().catch(() => {}); };
238
+ });
156
239
 
157
240
  const pageTitle = $derived(
158
241
  mode === 'create'
@@ -166,37 +249,57 @@
166
249
  let confirmOpen = $state(false);
167
250
  let pendingNavigation: (() => void) | null = null;
168
251
 
169
- function guardNavigate(fn: () => void) {
170
- if (form.isTainted()) {
171
- pendingNavigation = fn;
172
- confirmOpen = true;
173
- } else {
174
- fn();
175
- }
176
- }
252
+ const guardNavigate = $derived.by(() => {
253
+ const origin = scope;
254
+ return (fn: () => void) => {
255
+ if (!currentScope(origin)) return;
256
+ if (form.submitting) return;
257
+ if (form.isTainted()) {
258
+ pendingNavigation = () => { if (currentScope(origin)) fn(); };
259
+ confirmOpen = true;
260
+ } else {
261
+ fn();
262
+ }
263
+ };
264
+ });
265
+ const back = $derived.by(() => {
266
+ const guard = guardNavigate;
267
+ const name = resourceName;
268
+ const cancel = onCancel;
269
+ return () => guard(() => cancel ? cancel() : navigation.list(name));
270
+ });
177
271
 
178
272
  $effect(() => {
179
273
  onNavigationGuardReady?.(guardNavigate);
180
274
  });
181
275
 
182
- function confirmNavigate() {
183
- confirmOpen = false;
184
- pendingNavigation?.();
185
- pendingNavigation = null;
186
- }
276
+ const confirmNavigate = $derived.by(() => {
277
+ const origin = scope;
278
+ return () => {
279
+ if (!currentScope(origin)) return;
280
+ confirmOpen = false;
281
+ const navigate = pendingNavigation;
282
+ pendingNavigation = null;
283
+ navigate?.();
284
+ };
285
+ });
187
286
 
188
- function cancelNavigate() {
189
- confirmOpen = false;
190
- pendingNavigation = null;
191
- }
287
+ const cancelNavigate = $derived.by(() => {
288
+ const origin = scope;
289
+ return () => {
290
+ if (!currentScope(origin)) return;
291
+ confirmOpen = false;
292
+ pendingNavigation = null;
293
+ };
294
+ });
192
295
  </script>
193
296
 
194
- <div class={isCompact ? 'svadmin-u-3e7ce58d64fa' : 'svadmin-u-b3542e058833'}>
297
+ <div class={isCompact ? 'svadmin-u-3e7ce58d64fa' : 'svadmin-u-b3542e058833'} data-svadmin-rendering-resource={activeRendering?.resource.name} data-svadmin-rendering-kind={activeRendering ? 'form' : undefined}>
195
298
  {#if showHeader}
196
299
  <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-0c3bc98565dd">
197
300
  <TooltipButton
198
301
  tooltip={i18n.t('common.back')}
199
- onclick={() => guardNavigate(() => navigation.list(resourceName))}
302
+ onclick={back}
200
303
  >
201
304
  <ArrowLeft class="svadmin-u-cd0d9c512cdc svadmin-u-72470489ff4e" aria-hidden="true" />
202
305
  </TooltipButton>
@@ -210,7 +313,7 @@
210
313
  </div>
211
314
  {/if}
212
315
 
213
- {#if form.loading}
316
+ {#if form.loading || permissionPending}
214
317
  <div class="svadmin-u-cf3893e36c22 svadmin-u-b3542e058833">
215
318
  <div class="svadmin-u-5f22e64f2282 svadmin-u-438b2237b8d6 svadmin-u-3daca9af0861 svadmin-u-a10fdd7667ee svadmin-u-0478c89a150f svadmin-u-b43b4c086d9a">
216
319
  {#each Array(4) as _, _i (_i)}
@@ -221,8 +324,17 @@
221
324
  {/each}
222
325
  </div>
223
326
  </div>
224
- {:else}
225
- <form bind:this={formElement} onsubmit={(e: Event) => { e.preventDefault(); handleSubmit(); }} class="svadmin-u-cf3893e36c22 svadmin-u-b3542e058833" novalidate>
327
+ {:else if !allowed}
328
+ <p role="alert">{i18n.t('common.operationFailed')}</p>
329
+ {:else if !form.ready && form.error}
330
+ <p role="alert">{i18n.t('common.operationFailed')}</p>
331
+ <Button type="button" variant="outline" onclick={retry}>
332
+ {i18n.t('common.retry')}
333
+ </Button>
334
+ {:else if !renderedDraft.ok}
335
+ <p role="alert">{i18n.t('common.operationFailed')}</p>
336
+ {:else if form.ready}
337
+ <form bind:this={formElement} onsubmit={submitEvent} class="svadmin-u-cf3893e36c22 svadmin-u-b3542e058833" novalidate>
226
338
  {#if submitError}
227
339
  <div transition:slide={{ duration: 300, axis: 'y' }} class="svadmin-shake">
228
340
  <Alert.Root variant="destructive">
@@ -245,15 +357,15 @@
245
357
  {#each group.fields as field (field.key)}
246
358
  <div class={cn(columns > 1 && isFullWidthField(field) && 'svadmin-u-2c955d1b45df', !!form.errors[field.key] && 'svadmin-u-ee1a5af3aa10')}>
247
359
  {#if fieldRenderer}
248
- {@render fieldRenderer({ field, value: form.values[field.key], onchange: (val: unknown) => form.setFieldValue(field.key, val) })}
360
+ {@render fieldRenderer({ field, value: renderedDraft.values[field.key], onchange: fieldChange(field.key) })}
249
361
  {:else}
250
362
  <FieldRenderer
251
363
  {field}
252
- value={form.values[field.key]}
253
- onchange={(val: unknown) => form.setFieldValue(field.key, val)}
364
+ value={renderedDraft.values[field.key]}
365
+ onchange={fieldChange(field.key)}
254
366
  {density}
255
367
  invalid={!!form.errors[field.key]}
256
- errorId={form.errors[field.key] ? fieldErrorId(field.key) : undefined}
368
+ {...definedOptions({ "errorId": form.errors[field.key] ? fieldErrorId(field.key) : undefined })}
257
369
  disabled={isReadonly}
258
370
  />
259
371
  {/if}
@@ -273,15 +385,15 @@
273
385
  {#each formFields as field (field.key)}
274
386
  <div class={cn(columns > 1 && isFullWidthField(field) && 'svadmin-u-2c955d1b45df', !!form.errors[field.key] && 'svadmin-u-ee1a5af3aa10')}>
275
387
  {#if fieldRenderer}
276
- {@render fieldRenderer({ field, value: form.values[field.key], onchange: (val: unknown) => form.setFieldValue(field.key, val) })}
388
+ {@render fieldRenderer({ field, value: renderedDraft.values[field.key], onchange: fieldChange(field.key) })}
277
389
  {:else}
278
390
  <FieldRenderer
279
391
  {field}
280
- value={form.values[field.key]}
281
- onchange={(val: unknown) => form.setFieldValue(field.key, val)}
392
+ value={renderedDraft.values[field.key]}
393
+ onchange={fieldChange(field.key)}
282
394
  {density}
283
395
  invalid={!!form.errors[field.key]}
284
- errorId={form.errors[field.key] ? fieldErrorId(field.key) : undefined}
396
+ {...definedOptions({ "errorId": form.errors[field.key] ? fieldErrorId(field.key) : undefined })}
285
397
  disabled={isReadonly}
286
398
  />
287
399
  {/if}
@@ -296,7 +408,7 @@
296
408
  {/if}
297
409
 
298
410
  <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-1004c0c3954c">
299
- {#if formActions}
411
+ {#if formActions && !isReadonly}
300
412
  {@render formActions({ isLoading: form.submitting, onSubmit: handleSubmit })}
301
413
  {:else if !isReadonly}
302
414
  <Button type="submit" size={isCompact ? 'sm' : 'default'} disabled={form.submitting}>
@@ -311,7 +423,7 @@
311
423
  type="button"
312
424
  variant="outline"
313
425
  size={isCompact ? 'sm' : 'default'}
314
- onclick={() => guardNavigate(() => navigation.list(resourceName))}
426
+ onclick={back}
315
427
  >
316
428
  {i18n.t('common.cancel')}
317
429
  </Button>
@@ -1,7 +1,9 @@
1
+ import { type ResourceRendering } from '../rendering/index.js';
1
2
  import type { FieldDefinition } from '@svadmin/core';
2
3
  import type { Snippet } from 'svelte';
3
4
  interface Props {
4
5
  resourceName: string;
6
+ rendering?: ResourceRendering | undefined;
5
7
  id?: string | number;
6
8
  mode?: 'create' | 'edit' | 'clone' | 'show';
7
9
  density?: 'compact' | 'comfortable';
@@ -18,6 +20,8 @@ interface Props {
18
20
  }]>;
19
21
  headerContent?: Snippet;
20
22
  onSuccess?: () => void;
23
+ redirect?: 'list' | false;
24
+ onCancel?: () => void;
21
25
  onNavigationGuardReady?: (guard: (fn: () => void) => void) => void;
22
26
  }
23
27
  declare const AutoForm: import("svelte").Component<Props, {}, "">;