@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
@@ -4,6 +4,8 @@
4
4
  </script>
5
5
 
6
6
  <script lang="ts">
7
+ import { definedOptions } from '@svadmin/core/options';
8
+
7
9
  import type { FieldDefinition } from '@svadmin/core';
8
10
  import { useTranslation } from '@svadmin/core/i18n';
9
11
  import { Input } from './ui/input/index.js';
@@ -16,6 +18,12 @@
16
18
  import { Button } from './ui/button/index.js';
17
19
  import TooltipButton from './TooltipButton.svelte';
18
20
  import ComboboxField from './ComboboxField.svelte';
21
+ import NumberInput from './NumberInput.svelte';
22
+ import MoneyInput from './MoneyInput.svelte';
23
+ import PercentInput from './PercentInput.svelte';
24
+ import DateTimeInput from './DateTimeInput.svelte';
25
+ import DateRangeInput, { type DateRangeInputValue } from './DateRangeInput.svelte';
26
+ import FileUpload from './FileUpload.svelte';
19
27
  import TreeSelect, { type TreeSelectOption } from './TreeSelect.svelte';
20
28
  import Cascader, { type CascaderOption } from './Cascader.svelte';
21
29
  import Transfer, { type TransferItem } from './Transfer.svelte';
@@ -25,6 +33,7 @@
25
33
  import type { Snippet } from 'svelte';
26
34
  import { getRichTextEditor } from '../editor-config.svelte.js';
27
35
  import { cn } from '../utils.js';
36
+ import { numericInputValue } from '../numeric-input.js';
28
37
 
29
38
  const i18n = useTranslation();
30
39
 
@@ -43,7 +52,7 @@
43
52
 
44
53
  // Typed accessors
45
54
  const strVal = $derived((value as string) ?? '');
46
- const numVal = $derived(value as number | null | undefined);
55
+ const numVal = $derived(numericInputValue(value));
47
56
  const boolVal = $derived((value as boolean) ?? false);
48
57
  const tagsVal = $derived((value as string[]) ?? []);
49
58
  const multiVal = $derived((value as (string | number)[]) ?? []);
@@ -206,18 +215,52 @@
206
215
  </div>
207
216
 
208
217
  {:else if field.type === 'number'}
209
- <Input
218
+ <NumberInput
210
219
  id={field.key}
211
220
  name={field.key}
212
- type="number"
213
- value={numVal == null ? '' : String(numVal)}
214
- oninput={(e) => {
215
- const v = (e.target as HTMLInputElement).value;
216
- onchange(v === '' ? null : Number(v));
217
- }}
221
+ value={numVal}
222
+ min={field.min}
223
+ max={field.max}
224
+ step={field.step}
225
+ precision={field.precision}
226
+ onchange={onchange}
218
227
  required={field.required}
219
- aria-invalid={invalid || undefined}
220
- aria-describedby={errorId}
228
+ invalid={invalid}
229
+ describedby={errorId}
230
+ {disabled}
231
+ />
232
+
233
+ {:else if field.type === 'currency'}
234
+ <MoneyInput
235
+ id={field.key}
236
+ name={field.key}
237
+ value={numVal}
238
+ currency={field.currency ?? 'USD'}
239
+ min={field.min}
240
+ max={field.max}
241
+ step={field.step}
242
+ precision={field.precision ?? 2}
243
+ onchange={onchange}
244
+ required={field.required}
245
+ invalid={invalid}
246
+ describedby={errorId}
247
+ {disabled}
248
+ />
249
+
250
+ {:else if field.type === 'percent'}
251
+ <PercentInput
252
+ id={field.key}
253
+ name={field.key}
254
+ value={numVal}
255
+ scale={field.scale ?? '100'}
256
+ min={field.min}
257
+ max={field.max}
258
+ step={field.step}
259
+ precision={field.precision ?? 1}
260
+ onchange={onchange}
261
+ required={field.required}
262
+ invalid={invalid}
263
+ describedby={errorId}
221
264
  {disabled}
222
265
  />
223
266
 
@@ -269,7 +312,7 @@
269
312
  {:else if field.type === 'tree-select' || field.type === 'treeselect'}
270
313
  <TreeSelect
271
314
  options={(field.treeOptions ?? field.options ?? []) as TreeSelectOption[]}
272
- value={value as string | number | (string | number)[] | undefined}
315
+ {...definedOptions({ "value": value as string | number | (string | number)[] | undefined })}
273
316
  multiple={field.multiple}
274
317
  disabled={disabled}
275
318
  placeholder={i18n.t('field.selectPlaceholder')}
@@ -296,14 +339,21 @@
296
339
  />
297
340
 
298
341
  {:else if field.type === 'relation' && field.resource}
299
- <input type="hidden" name={field.key} value={value == null ? '' : String(value)} />
342
+ {#if field.multiple}
343
+ {#each multiVal as selectedValue, _i (selectedValue)}
344
+ <input type="hidden" name={field.key} value={String(selectedValue)} />
345
+ {/each}
346
+ {:else}
347
+ <input type="hidden" name={field.key} value={value == null ? '' : String(value)} />
348
+ {/if}
300
349
  <ComboboxField
301
350
  id={field.key}
302
351
  resource={field.resource}
303
- value={value as string | number | null}
352
+ value={field.multiple ? multiVal : value as string | number | null}
304
353
  onchange={(v) => onchange(v)}
305
354
  optionLabel={field.optionLabel ?? 'title'}
306
355
  optionValue={field.optionValue ?? 'id'}
356
+ multiple={field.multiple}
307
357
  placeholder={i18n.t('field.selectPlaceholder')}
308
358
  aria-invalid={invalid || undefined}
309
359
  aria-describedby={errorId}
@@ -430,19 +480,45 @@
430
480
  />
431
481
  </div>
432
482
 
433
- {:else if field.type === 'date'}
434
- <Input
483
+ {:else if field.type === 'date' || field.type === 'time' || field.type === 'datetime'}
484
+ <DateTimeInput
435
485
  id={field.key}
436
486
  name={field.key}
437
- type="date"
438
- value={strVal}
439
- oninput={(e) => onchange((e.target as HTMLInputElement).value)}
487
+ mode={field.type}
488
+ value={strVal || null}
489
+ onchange={(next) => onchange(next)}
440
490
  required={field.required}
441
- aria-invalid={invalid || undefined}
442
- aria-describedby={errorId}
491
+ invalid={invalid}
492
+ describedby={errorId}
443
493
  {disabled}
444
494
  />
445
495
 
496
+ {:else if field.type === 'daterange'}
497
+ <DateRangeInput
498
+ startId={`${field.key}-start`}
499
+ endId={`${field.key}-end`}
500
+ startName={`${field.key}.start`}
501
+ endName={`${field.key}.end`}
502
+ value={value as DateRangeInputValue | null}
503
+ onchange={(next) => onchange(next)}
504
+ required={field.required}
505
+ invalid={invalid}
506
+ describedby={errorId}
507
+ {disabled}
508
+ />
509
+
510
+ {:else if field.type === 'file'}
511
+ <FileUpload
512
+ id={field.key}
513
+ name={field.key}
514
+ multiple={field.multiple}
515
+ required={field.required && !value}
516
+ disabled={disabled}
517
+ accept={field.accept}
518
+ maxSize={field.maxSize}
519
+ onChange={(items) => onchange(field.multiple ? items.map(item => item.file) : items[0]?.file ?? null)}
520
+ />
521
+
446
522
  {:else if field.type === 'images'}
447
523
  {#each imagesVal as url, imageIndex (imageIndex)}
448
524
  <input type="hidden" name={`${field.key}[]`} value={url} />
@@ -0,0 +1,250 @@
1
+ <script lang="ts">
2
+ import { onDestroy } from 'svelte';
3
+ import { X, Upload, RotateCw, Ban } from '@lucide/svelte';
4
+ import { Button } from './ui/button/index.js';
5
+
6
+ export type UploadItemStatus = 'queued' | 'uploading' | 'success' | 'error' | 'cancelled';
7
+
8
+ export interface UploadItem {
9
+ id: string;
10
+ file: File;
11
+ status: UploadItemStatus;
12
+ progress: number;
13
+ url?: string;
14
+ error?: string;
15
+ }
16
+
17
+ export interface UploadSession {
18
+ signal: AbortSignal;
19
+ onProgress: (progress: number) => void;
20
+ }
21
+
22
+ interface Props {
23
+ id?: string;
24
+ name?: string;
25
+ accept?: string;
26
+ multiple?: boolean;
27
+ maxFiles?: number;
28
+ maxSize?: number;
29
+ disabled?: boolean;
30
+ required?: boolean;
31
+ upload?: (file: File, session: UploadSession) => Promise<{ url?: string } | undefined> | Promise<void>;
32
+ onChange?: (items: UploadItem[]) => void;
33
+ onReject?: (file: File, reason: string) => void;
34
+ class?: string;
35
+ }
36
+
37
+ let {
38
+ id,
39
+ name,
40
+ accept = '',
41
+ multiple = false,
42
+ maxFiles = multiple ? 10 : 1,
43
+ maxSize,
44
+ disabled = false,
45
+ required = false,
46
+ upload,
47
+ onChange,
48
+ onReject,
49
+ class: className = '',
50
+ }: Props = $props();
51
+
52
+ let input: HTMLInputElement | undefined = $state();
53
+ let items = $state<UploadItem[]>([]);
54
+ let sequence = 0;
55
+ const controllers = new Map<string, AbortController>();
56
+ let disposed = false;
57
+ onDestroy(() => {
58
+ disposed = true;
59
+ for (const controller of controllers.values()) controller.abort();
60
+ controllers.clear();
61
+ });
62
+
63
+ function emitChange(): void {
64
+ onChange?.(items.map(item => ({ ...item })));
65
+ }
66
+
67
+ function nextId(): string {
68
+ sequence += 1;
69
+ return `upload-${sequence}`;
70
+ }
71
+
72
+ function accepts(file: File): boolean {
73
+ if (!accept.trim()) return true;
74
+ return accept.split(',').map(token => token.trim().toLowerCase()).some(token =>
75
+ token === file.type.toLowerCase() ||
76
+ (token.endsWith('/*') && file.type.toLowerCase().startsWith(token.slice(0, -1))) ||
77
+ (token.startsWith('.') && file.name.toLowerCase().endsWith(token)),
78
+ );
79
+ }
80
+
81
+ function validate(file: File): string | undefined {
82
+ if (!accepts(file)) return 'File type is not accepted.';
83
+ if (maxSize !== undefined && (!Number.isSafeInteger(maxSize) || maxSize < 0 || file.size > maxSize)) {
84
+ return 'File is too large.';
85
+ }
86
+ return undefined;
87
+ }
88
+
89
+ function updateItem(id: string, update: Partial<UploadItem>, clear: readonly ('url' | 'error')[] = []): void {
90
+ if (disposed || !items.some(item => item.id === id)) return;
91
+ items = items.map(item => {
92
+ if (item.id !== id) return item;
93
+ const next = { ...item, ...update };
94
+ if (clear.includes('error')) delete next.error;
95
+ if (clear.includes('url')) delete next.url;
96
+ return next;
97
+ });
98
+ emitChange();
99
+ }
100
+
101
+ async function process(item: UploadItem): Promise<void> {
102
+ if (!upload || disabled || disposed || controllers.has(item.id) || !items.some(candidate => candidate.id === item.id)) return;
103
+ const controller = new AbortController();
104
+ controllers.set(item.id, controller);
105
+ // 取消、替换、重试或卸载后,旧请求不再拥有更新状态的权限。
106
+ const current = () => !disposed && !controller.signal.aborted && controllers.get(item.id) === controller;
107
+ updateItem(item.id, { status: 'uploading', progress: 0 }, ['error', 'url']);
108
+ try {
109
+ // onChange may synchronously unmount the component or retire this attempt.
110
+ if (!current()) return;
111
+ const result = await upload(item.file, {
112
+ signal: controller.signal,
113
+ onProgress: progress => {
114
+ if (current()) updateItem(item.id, {
115
+ progress: Number.isFinite(progress) ? Math.max(0, Math.min(100, Math.round(progress))) : 0,
116
+ });
117
+ },
118
+ });
119
+ if (current()) updateItem(item.id, { status: 'success', progress: 100,
120
+ ...(result?.url === undefined ? {} : { url: result.url }) });
121
+ } catch (error) {
122
+ if (current()) updateItem(item.id, { status: 'error',
123
+ error: error instanceof Error ? error.message : 'Upload failed.' });
124
+ } finally {
125
+ if (controllers.get(item.id) === controller) controllers.delete(item.id);
126
+ }
127
+ }
128
+
129
+ function addFiles(selected: File[]): void {
130
+ if (disabled || disposed) return;
131
+ const available = Math.max(0, maxFiles - items.length);
132
+ for (const file of selected.slice(0, multiple ? available : 1)) {
133
+ // Host notifications may synchronously disable or unmount this batch.
134
+ if (disabled || disposed) return;
135
+ const reason = validate(file);
136
+ if (reason) {
137
+ onReject?.(file, reason);
138
+ continue;
139
+ }
140
+ const item: UploadItem = { id: nextId(), file, status: 'queued', progress: 0 };
141
+ if (!multiple) {
142
+ for (const controller of controllers.values()) controller.abort();
143
+ controllers.clear();
144
+ }
145
+ items = multiple ? [...items, item] : [item];
146
+ emitChange();
147
+ void process(item);
148
+ }
149
+ }
150
+
151
+ function handleInput(event: Event): void {
152
+ const target = event.currentTarget;
153
+ if (!(target instanceof HTMLInputElement)) return;
154
+ addFiles(Array.from(target.files ?? []));
155
+ }
156
+
157
+ function remove(id: string): void {
158
+ if (disabled || disposed) return;
159
+ controllers.get(id)?.abort();
160
+ controllers.delete(id);
161
+ items = items.filter(item => item.id !== id);
162
+ emitChange();
163
+ }
164
+
165
+ function cancel(id: string): void {
166
+ const controller = controllers.get(id);
167
+ if (!controller) return;
168
+ controller.abort();
169
+ controllers.delete(id);
170
+ updateItem(id, { status: 'cancelled', error: 'Upload cancelled.' });
171
+ }
172
+
173
+ function retry(item: UploadItem): void {
174
+ if (item.status === 'error' || item.status === 'cancelled') void process(item);
175
+ }
176
+
177
+ function handleKeydown(event: KeyboardEvent): void {
178
+ if (event.key === 'Enter' || event.key === ' ') {
179
+ event.preventDefault();
180
+ input?.click();
181
+ }
182
+ }
183
+ </script>
184
+
185
+ <div class={`svadmin-file-upload ${className}`}>
186
+ <input
187
+ bind:this={input}
188
+ type="file"
189
+ {id}
190
+ {name}
191
+ {accept}
192
+ {multiple}
193
+ disabled={disabled}
194
+ {required}
195
+ class="svadmin-file-upload-input"
196
+ onchange={handleInput}
197
+ />
198
+ <div
199
+ class="svadmin-file-upload-dropzone"
200
+ role="button"
201
+ tabindex={disabled ? -1 : 0}
202
+ aria-disabled={disabled}
203
+ onclick={() => input?.click()}
204
+ onkeydown={handleKeydown}
205
+ ondragover={(event) => event.preventDefault()}
206
+ ondrop={(event) => {
207
+ event.preventDefault();
208
+ addFiles(Array.from(event.dataTransfer?.files ?? []));
209
+ }}
210
+ >
211
+ <Upload aria-hidden="true" />
212
+ <span>Select or drop files</span>
213
+ </div>
214
+
215
+ {#if items.length}
216
+ <ul class="svadmin-file-upload-list" aria-label="Selected files">
217
+ {#each items as item (item.id)}
218
+ <li>
219
+ <span class="svadmin-file-upload-name">{item.file.name}</span>
220
+ <span class="svadmin-file-upload-status">
221
+ {#if item.status === 'uploading'}{item.progress}%{:else}{item.status}{/if}
222
+ </span>
223
+ {#if item.status === 'uploading'}
224
+ <Button type="button" variant="ghost" size="icon-sm" aria-label="Cancel upload" onclick={() => cancel(item.id)}>
225
+ <Ban aria-hidden="true" />
226
+ </Button>
227
+ {:else if item.status === 'error' || item.status === 'cancelled'}
228
+ <Button type="button" variant="ghost" size="icon-sm" aria-label="Retry upload" {disabled} onclick={() => retry(item)}>
229
+ <RotateCw aria-hidden="true" />
230
+ </Button>
231
+ {/if}
232
+ <Button type="button" variant="ghost" size="icon-sm" aria-label="Remove file" {disabled} onclick={() => remove(item.id)}>
233
+ <X aria-hidden="true" />
234
+ </Button>
235
+ {#if item.error}<span role="alert">{item.error}</span>{/if}
236
+ </li>
237
+ {/each}
238
+ </ul>
239
+ {/if}
240
+ </div>
241
+
242
+ <style>
243
+ .svadmin-file-upload-input { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
244
+ .svadmin-file-upload-dropzone { display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 88px; border: 1px dashed var(--border); border-radius: 6px; cursor: pointer; }
245
+ .svadmin-file-upload-dropzone[aria-disabled="true"] { cursor: not-allowed; opacity: 0.6; }
246
+ .svadmin-file-upload-list { display: grid; gap: 6px; margin: 8px 0 0; padding: 0; list-style: none; }
247
+ .svadmin-file-upload-list li { display: flex; align-items: center; gap: 8px; min-width: 0; }
248
+ .svadmin-file-upload-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
249
+ .svadmin-file-upload-status { color: var(--muted-foreground); font-size: 0.875rem; }
250
+ </style>
@@ -0,0 +1,32 @@
1
+ export type UploadItemStatus = 'queued' | 'uploading' | 'success' | 'error' | 'cancelled';
2
+ export interface UploadItem {
3
+ id: string;
4
+ file: File;
5
+ status: UploadItemStatus;
6
+ progress: number;
7
+ url?: string;
8
+ error?: string;
9
+ }
10
+ export interface UploadSession {
11
+ signal: AbortSignal;
12
+ onProgress: (progress: number) => void;
13
+ }
14
+ interface Props {
15
+ id?: string;
16
+ name?: string;
17
+ accept?: string;
18
+ multiple?: boolean;
19
+ maxFiles?: number;
20
+ maxSize?: number;
21
+ disabled?: boolean;
22
+ required?: boolean;
23
+ upload?: (file: File, session: UploadSession) => Promise<{
24
+ url?: string;
25
+ } | undefined> | Promise<void>;
26
+ onChange?: (items: UploadItem[]) => void;
27
+ onReject?: (file: File, reason: string) => void;
28
+ class?: string;
29
+ }
30
+ declare const FileUpload: import("svelte").Component<Props, {}, "">;
31
+ type FileUpload = ReturnType<typeof FileUpload>;
32
+ export default FileUpload;