@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,28 +1,14 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
- import { cn } from '../../utils.js';
4
-
5
- interface Props {
6
- label: string;
7
- description?: string;
8
- control: Snippet;
9
- separated?: boolean;
10
- class?: string;
11
- }
12
-
13
- let {
14
- label,
15
- description,
16
- control,
17
- separated = false,
18
- class: className = '',
19
- }: Props = $props();
3
+ import { productSettingsRow } from '../../styled-system/recipes/index.js';
4
+ interface Props { label: string; description?: string; control: Snippet; separated?: boolean; class?: string; }
5
+ let { label, description, control, separated = false, class: className = '' }: Props = $props();
6
+ const styles = $derived(productSettingsRow({ separated }));
20
7
  </script>
21
-
22
- <div class={cn('svadmin-u-60fbb7713999 svadmin-u-0e5b245b4ed1 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-0c3bc98565dd svadmin-u-1b2d54a3fd12', separated && 'svadmin-u-b950dda299d3 svadmin-u-18049387f0af', className)} data-svadmin-settings-field-row>
23
- <div class="svadmin-u-7e0b7cdf1a94">
24
- <p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{label}</p>
25
- {#if description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-2cc8041eca99 svadmin-u-fc7473ca09eb svadmin-u-7054e2767710 svadmin-u-bfa603190748">{description}</p>{/if}
8
+ <div class={styles.root + ' ' + className} data-svadmin-settings-field-row>
9
+ <div class={styles.heading}>
10
+ <p class={styles.label}>{label}</p>
11
+ {#if description}<p class={styles.description}>{description}</p>{/if}
26
12
  </div>
27
- <div class="svadmin-u-012fbd121f37">{@render control()}</div>
13
+ <div class={styles.control}>{@render control()}</div>
28
14
  </div>
@@ -1,33 +1,17 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
- import { cn } from '../../utils.js';
4
-
5
- interface Props {
6
- title: string;
7
- description?: string;
8
- actions?: Snippet;
9
- children: Snippet;
10
- class?: string;
11
- bodyClass?: string;
12
- }
13
-
14
- let {
15
- title,
16
- description,
17
- actions,
18
- children,
19
- class: className = '',
20
- bodyClass = '',
21
- }: Props = $props();
3
+ import { productSettings } from '../../styled-system/recipes/index.js';
4
+ interface Props { title: string; description?: string; actions?: Snippet; children: Snippet; class?: string; bodyClass?: string; }
5
+ let { title, description, actions, children, class: className = '', bodyClass = '' }: Props = $props();
6
+ const styles = productSettings();
22
7
  </script>
23
-
24
- <section class={cn('svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-438b2237b8d6', className)} data-svadmin-settings-group>
25
- <header class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-1004c0c3954c svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-d139dd09e38d svadmin-u-cb11fec3bb46 svadmin-u-020ba687fa12 svadmin-u-64cac80d2e9a svadmin-u-3b9871a0bf93">
26
- <div class="svadmin-u-7e0b7cdf1a94 svadmin-u-da7c36cd8867">
27
- <h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{title}</h2>
28
- {#if description}<p class="svadmin-u-2cc8041eca99 svadmin-u-fc7473ca09eb svadmin-u-18550d5945ae svadmin-u-bfa603190748">{description}</p>{/if}
8
+ <section class={styles.root + ' ' + className} data-svadmin-settings-group>
9
+ <header class={styles.header}>
10
+ <div class={styles.heading}>
11
+ <h2 class={styles.title}>{title}</h2>
12
+ {#if description}<p class={styles.description}>{description}</p>{/if}
29
13
  </div>
30
- {#if actions}<div class="svadmin-u-60fbb7713999 svadmin-u-012fbd121f37 svadmin-u-1eb5c6df38c1 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{@render actions()}</div>{/if}
14
+ {#if actions}<div class={styles.actions}>{@render actions()}</div>{/if}
31
15
  </header>
32
- <div class={cn('svadmin-u-c07e54fd1439', bodyClass)}>{@render children()}</div>
16
+ <div class={styles.body + ' ' + bodyClass}>{@render children()}</div>
33
17
  </section>
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { Badge } from '../ui/badge/index.js';
3
+ import { productStatus } from '../../styled-system/recipes/index.js';
3
4
  export type Status = 'success' | 'warning' | 'danger' | 'info' | 'neutral';
4
5
  interface Props {
5
6
  status: Status;
@@ -7,13 +8,7 @@
7
8
  class?: string;
8
9
  }
9
10
  let { status, label = status, class: className = '' }: Props = $props();
10
- const toneClass: Record<Status, string> = {
11
- success: 'svadmin-u-18a6e7a36f29 svadmin-u-17a9f7af2265 svadmin-u-76747e5e02ff',
12
- warning: 'svadmin-u-2f960aa0c478 svadmin-u-283481e780bb svadmin-u-3a4ff758c2ab',
13
- danger: 'svadmin-u-9d5d8b4711b4 svadmin-u-43928fcc832f svadmin-u-811148b13d1e',
14
- info: 'svadmin-u-05f954a846d6 svadmin-u-375dc44df6e9 svadmin-u-20aaf08a7ed1',
15
- neutral: 'svadmin-u-18049387f0af svadmin-u-2ef11f1cb219 svadmin-u-bfa603190748',
16
- };
11
+ const styles = $derived(productStatus({ status }));
17
12
  </script>
18
13
 
19
- <Badge variant="outline" class={'svadmin-u-2689f3958069 ' + toneClass[status] + ' ' + className}>{label}</Badge>
14
+ <Badge variant="outline" data-svadmin-status={status} class={styles.root + ' ' + className}>{label}</Badge>
@@ -63,7 +63,7 @@
63
63
 
64
64
  const isCompact = $derived(density === 'compact');
65
65
 
66
- const toneClasses: Record<string, { activeBadge: string; inactiveBadge: string }> = {
66
+ const toneClasses: Record<NonNullable<StatusTabItem['tone']>, { activeBadge: string; inactiveBadge: string }> = {
67
67
  default: {
68
68
  activeBadge: 'svadmin-u-6a1572b6bf5a svadmin-u-20aaf08a7ed1',
69
69
  inactiveBadge: 'svadmin-u-2ef11f1cb219 svadmin-u-bfa603190748',
@@ -107,7 +107,7 @@
107
107
  {#each items as item (item.key)}
108
108
  {@const active = value === item.key}
109
109
  {@const tone = item.tone ?? 'default'}
110
- {@const badgeTone = toneClasses[tone] ?? toneClasses.default}
110
+ {@const badgeTone = toneClasses[tone] ?? toneClasses['default']}
111
111
  <button
112
112
  type="button"
113
113
  role="tab"
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
- import { cn } from '../../utils.js';
3
+ import { productWorkspace } from '../../styled-system/recipes/index.js';
4
4
 
5
5
  interface Props {
6
6
  primary: Snippet;
@@ -24,19 +24,15 @@
24
24
  class: className = '',
25
25
  }: Props = $props();
26
26
 
27
+ const styles = $derived(productWorkspace({ hasSecondary: Boolean(secondary) }));
27
28
  const resolvedSecondaryWidth = $derived(secondaryCollapsed ? secondaryCollapsedWidth : secondaryWidth);
28
29
  </script>
29
30
 
30
- <div
31
- class={cn('svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-0d304f904cb0', className)}
32
- data-svadmin-workspace-layout
33
- data-secondary-collapsed={secondaryCollapsed}
34
- style:--workspace-secondary-width={resolvedSecondaryWidth}
35
- >
36
- {#if summary}<div data-svadmin-workspace-summary>{@render summary()}</div>{/if}
37
- <div class={cn('svadmin-u-f3c543ad5fe9 svadmin-u-7e0b7cdf1a94 svadmin-u-60541e1e26f8 svadmin-u-0d304f904cb0 svadmin-u-febbcd95bf06', mobileOrder === 'secondary-first' && 'svadmin-u-dfb5e722be57')}>
38
- {#if mobileOrder === 'secondary-first' && secondary}<aside class="svadmin-u-ea37b42b1c3b svadmin-u-7e0b7cdf1a94 svadmin-u-2c1f5e2b6a5b">{@render secondary()}</aside>{/if}
39
- <div class={cn('svadmin-u-7e0b7cdf1a94', mobileOrder === 'secondary-first' ? 'svadmin-u-ef72121aca75 svadmin-u-831f8770959d' : 'svadmin-u-ea37b42b1c3b')} data-svadmin-workspace-primary>{@render primary()}</div>
40
- {#if mobileOrder !== 'secondary-first' && secondary}<aside class="svadmin-u-ef72121aca75 svadmin-u-7e0b7cdf1a94 svadmin-u-2c1f5e2b6a5b">{@render secondary()}</aside>{/if}
31
+ <div class={styles.root + ' ' + className} data-svadmin-workspace-layout data-secondary-collapsed={secondaryCollapsed} style:--workspace-secondary-width={resolvedSecondaryWidth}>
32
+ {#if summary}<div class={styles.summary} data-svadmin-workspace-summary>{@render summary()}</div>{/if}
33
+ <div class={styles.columns}>
34
+ {#if mobileOrder === 'secondary-first' && secondary}<aside class={styles.secondary} data-svadmin-workspace-secondary>{@render secondary()}</aside>{/if}
35
+ <div class={styles.primary} data-svadmin-workspace-primary>{@render primary()}</div>
36
+ {#if mobileOrder !== 'secondary-first' && secondary}<aside class={styles.secondary} data-svadmin-workspace-secondary>{@render secondary()}</aside>{/if}
41
37
  </div>
42
38
  </div>
@@ -0,0 +1,48 @@
1
+ import type { CrudOperator, FieldDefinition, Filter } from '@svadmin/core';
2
+ export declare const FILTER_EDITOR_LIMITS: Readonly<{
3
+ depth: 12;
4
+ nodes: 256;
5
+ values: 1000;
6
+ }>;
7
+ export interface FilterRuleNode {
8
+ kind: 'rule';
9
+ id: string;
10
+ field: string;
11
+ operator: CrudOperator;
12
+ value: unknown;
13
+ readonly?: boolean;
14
+ }
15
+ export interface FilterGroupNode {
16
+ kind: 'group';
17
+ id: string;
18
+ operator: 'and' | 'or';
19
+ children: FilterNode[];
20
+ wrapped?: boolean;
21
+ }
22
+ export type FilterNode = FilterRuleNode | FilterGroupNode;
23
+ export type FilterIssueCode = 'invalid-filter' | 'limit' | 'unknown-field' | 'operator' | 'value' | 'empty-group';
24
+ export interface FilterEditorIssue {
25
+ path: string;
26
+ code: FilterIssueCode;
27
+ }
28
+ export type FilterTreeRead = {
29
+ ok: true;
30
+ root: FilterGroupNode;
31
+ } | {
32
+ ok: false;
33
+ issues: FilterEditorIssue[];
34
+ };
35
+ export type FilterTreeCompile = {
36
+ ok: true;
37
+ filters: Filter[];
38
+ } | {
39
+ ok: false;
40
+ issues: FilterEditorIssue[];
41
+ };
42
+ export declare const isCollectionOperator: (operator: CrudOperator) => boolean;
43
+ export declare const isNullOperator: (operator: CrudOperator) => boolean;
44
+ export declare function filterOperators(field: Pick<FieldDefinition, 'type'> | undefined): CrudOperator[];
45
+ /** Filter[] 的顶层是隐式 AND;只有单个显式组可以成为编辑器根组,且保留包装信息。 */
46
+ export declare function readFilterTree(input: unknown): FilterTreeRead;
47
+ export declare function compileFilterTree(root: FilterGroupNode, fields: readonly FieldDefinition[], preserved?: ReadonlyMap<string, Filter>): FilterTreeCompile;
48
+ export declare function parseFilterInput(raw: string, field: Pick<FieldDefinition, 'type'> | undefined, operator: CrudOperator): unknown;
@@ -0,0 +1,224 @@
1
+ export const FILTER_EDITOR_LIMITS = Object.freeze({ depth: 12, nodes: 256, values: 1000 });
2
+ const operators = ['eq', 'ne', 'lt', 'gt', 'lte', 'gte', 'contains', 'ncontains', 'startswith', 'endswith', 'in', 'nin', 'null', 'nnull', 'between', 'nbetween'];
3
+ const comparison = ['eq', 'ne', 'lt', 'gt', 'lte', 'gte', 'in', 'nin', 'between', 'nbetween', 'null', 'nnull'];
4
+ const selection = ['eq', 'ne', 'in', 'nin', 'null', 'nnull'];
5
+ const text = ['eq', 'ne', 'contains', 'ncontains', 'startswith', 'endswith', 'in', 'nin', 'null', 'nnull'];
6
+ const scalar = (value) => value === null || typeof value === 'string' || typeof value === 'boolean' || (typeof value === 'number' && Number.isFinite(value));
7
+ const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
8
+ export const isCollectionOperator = (operator) => ['in', 'nin', 'between', 'nbetween'].includes(operator);
9
+ export const isNullOperator = (operator) => operator === 'null' || operator === 'nnull';
10
+ export function filterOperators(field) {
11
+ if (!field)
12
+ return [];
13
+ if (field.type === 'number' || field.type === 'date')
14
+ return [...comparison];
15
+ if (field.type === 'boolean' || field.type === 'select' || field.type === 'multiselect')
16
+ return [...selection];
17
+ return [...text];
18
+ }
19
+ /** Filter[] 的顶层是隐式 AND;只有单个显式组可以成为编辑器根组,且保留包装信息。 */
20
+ export function readFilterTree(input) {
21
+ let count = 0;
22
+ const active = new Set();
23
+ const issues = [];
24
+ function read(raw, depth, path) {
25
+ if (++count > FILTER_EDITOR_LIMITS.nodes || depth > FILTER_EDITOR_LIMITS.depth) {
26
+ issues.push({ path, code: 'limit' });
27
+ return;
28
+ }
29
+ if (!object(raw) || active.has(raw)) {
30
+ issues.push({ path, code: 'invalid-filter' });
31
+ return;
32
+ }
33
+ active.add(raw);
34
+ try {
35
+ const id = `node-${count}`;
36
+ if ('field' in raw) {
37
+ if (typeof raw['field'] !== 'string' || !raw['field'] || !operators.includes(raw['operator'])
38
+ || Object.keys(raw).some((key) => !['field', 'operator', 'value'].includes(key))) {
39
+ issues.push({ path, code: 'invalid-filter' });
40
+ return;
41
+ }
42
+ const value = raw['value'];
43
+ if (!scalar(value) && !(Array.isArray(value) && value.length <= FILTER_EDITOR_LIMITS.values && Array.from(value).every(scalar))) {
44
+ issues.push({ path, code: 'value' });
45
+ return;
46
+ }
47
+ return { kind: 'rule', id, field: raw['field'], operator: raw['operator'], value: Array.isArray(value) ? [...value] : value };
48
+ }
49
+ if (!['and', 'or'].includes(String(raw['operator'])) || !Array.isArray(raw['value'])
50
+ || Object.keys(raw).some((key) => !['operator', 'value'].includes(key))) {
51
+ issues.push({ path, code: 'invalid-filter' });
52
+ return;
53
+ }
54
+ if (raw['value'].length > FILTER_EDITOR_LIMITS.nodes) {
55
+ issues.push({ path, code: 'limit' });
56
+ return;
57
+ }
58
+ const children = [];
59
+ for (const [index, child] of raw['value'].entries()) {
60
+ const node = read(child, depth + 1, `${path}/value/${index}`);
61
+ if (node)
62
+ children.push(node);
63
+ }
64
+ return { kind: 'group', id, operator: raw['operator'], children };
65
+ }
66
+ finally {
67
+ active.delete(raw);
68
+ }
69
+ }
70
+ if (!Array.isArray(input))
71
+ return { ok: false, issues: [{ path: '', code: 'invalid-filter' }] };
72
+ if (input.length > FILTER_EDITOR_LIMITS.nodes)
73
+ return { ok: false, issues: [{ path: '', code: 'limit' }] };
74
+ const children = [];
75
+ for (const [index, raw] of input.entries()) {
76
+ const node = read(raw, 1, `/${index}`);
77
+ if (node)
78
+ children.push(node);
79
+ }
80
+ if (issues.length)
81
+ return { ok: false, issues };
82
+ const only = children[0];
83
+ return { ok: true, root: children.length === 1 && only?.kind === 'group'
84
+ ? { ...only, wrapped: true }
85
+ : { kind: 'group', id: 'root', operator: 'and', children, wrapped: false } };
86
+ }
87
+ export function compileFilterTree(root, fields, preserved = new Map()) {
88
+ const issues = [];
89
+ const fieldMap = new Map(fields.map((field) => [field.key, field]));
90
+ const active = new Set();
91
+ let count = 0;
92
+ function visit(node, depth) {
93
+ const issue = (code) => { issues.push({ path: node.id, code }); };
94
+ if (++count > FILTER_EDITOR_LIMITS.nodes || depth > FILTER_EDITOR_LIMITS.depth) {
95
+ issue('limit');
96
+ return;
97
+ }
98
+ if (active.has(node)) {
99
+ issue('invalid-filter');
100
+ return;
101
+ }
102
+ active.add(node);
103
+ try {
104
+ // Only unchanged host-owned readonly leaves and originally empty groups may bypass
105
+ // editor capability checks. A forged readonly flag or edited payload is not sufficient.
106
+ const original = preserved.get(node.id);
107
+ if (original && node.kind === 'rule' && node.readonly && 'field' in original
108
+ && node.field === original.field && node.operator === original.operator
109
+ && JSON.stringify(node.value) === JSON.stringify(original.value)) {
110
+ return { ...original, value: Array.isArray(original.value) ? [...original.value] : original.value };
111
+ }
112
+ if (original && node.kind === 'group' && !('field' in original)
113
+ && !node.children.length && !original.value.length && node.operator === original.operator) {
114
+ return { operator: node.operator, value: [] };
115
+ }
116
+ if (node.kind === 'group') {
117
+ if (node.operator !== 'and' && node.operator !== 'or') {
118
+ issue('operator');
119
+ return;
120
+ }
121
+ if (!node.children.length)
122
+ issue('empty-group');
123
+ if (node.children.length > FILTER_EDITOR_LIMITS.nodes) {
124
+ issue('limit');
125
+ return;
126
+ }
127
+ const children = [];
128
+ for (const child of node.children) {
129
+ const filter = visit(child, depth + 1);
130
+ if (filter)
131
+ children.push(filter);
132
+ }
133
+ return { operator: node.operator, value: children };
134
+ }
135
+ const field = fieldMap.get(node.field);
136
+ if (!field || field.filterable === false) {
137
+ issue('unknown-field');
138
+ return;
139
+ }
140
+ if (!filterOperators(field).includes(node.operator)) {
141
+ issue('operator');
142
+ return;
143
+ }
144
+ const validScalar = (value) => {
145
+ if (!scalar(value) || value === null)
146
+ return false;
147
+ if (field.type === 'number')
148
+ return typeof value === 'number';
149
+ if (field.type === 'boolean')
150
+ return typeof value === 'boolean';
151
+ if (field.options?.length)
152
+ return field.options.some((option) => !option.disabled && option.value === value);
153
+ return typeof value === 'string';
154
+ };
155
+ if (isNullOperator(node.operator)) {
156
+ if (node.value !== null) {
157
+ issue('value');
158
+ return;
159
+ }
160
+ }
161
+ else if (isCollectionOperator(node.operator)) {
162
+ if (!Array.isArray(node.value) || node.value.length === 0 || node.value.length > FILTER_EDITOR_LIMITS.values || !Array.from(node.value).every(validScalar)
163
+ || ((node.operator === 'between' || node.operator === 'nbetween') && node.value.length !== 2)) {
164
+ issue('value');
165
+ return;
166
+ }
167
+ if ((node.operator === 'between' || node.operator === 'nbetween') && typeof node.value[0] === 'number' && typeof node.value[1] === 'number' && node.value[0] > node.value[1]) {
168
+ issue('value');
169
+ return;
170
+ }
171
+ }
172
+ else if (!validScalar(node.value)) {
173
+ issue('value');
174
+ return;
175
+ }
176
+ return { field: node.field, operator: node.operator, value: Array.isArray(node.value) ? [...node.value] : node.value };
177
+ }
178
+ finally {
179
+ active.delete(node);
180
+ }
181
+ }
182
+ if (root.children.length > FILTER_EDITOR_LIMITS.nodes)
183
+ return { ok: false, issues: [{ path: root.id, code: 'limit' }] };
184
+ if (!root.children.length && !root.wrapped)
185
+ return { ok: true, filters: [] };
186
+ // 隐式根不占公开 Filter 的深度或节点预算;显式根与读入时一致。
187
+ let filters = [];
188
+ if (root.operator === 'and' && !root.wrapped) {
189
+ for (const child of root.children) {
190
+ const filter = visit(child, 1);
191
+ if (filter)
192
+ filters.push(filter);
193
+ }
194
+ }
195
+ else {
196
+ const filter = visit(root, 1);
197
+ if (filter)
198
+ filters = [filter];
199
+ }
200
+ return issues.length ? { ok: false, issues } : { ok: true, filters };
201
+ }
202
+ export function parseFilterInput(raw, field, operator) {
203
+ if (raw.length > 1_048_576)
204
+ throw new Error('value');
205
+ if (isNullOperator(operator))
206
+ return null;
207
+ if (isCollectionOperator(operator))
208
+ return raw.trim() ? JSON.parse(raw) : undefined;
209
+ if (field?.type === 'number') {
210
+ if (!raw.trim())
211
+ return undefined;
212
+ if (!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i.test(raw.trim()) || !Number.isFinite(Number(raw)))
213
+ throw new Error('value');
214
+ return Number(raw);
215
+ }
216
+ if (field?.type === 'boolean') {
217
+ if (raw === '')
218
+ return undefined;
219
+ if (raw !== 'true' && raw !== 'false')
220
+ throw new Error('value');
221
+ return raw === 'true';
222
+ }
223
+ return raw;
224
+ }
@@ -0,0 +1,39 @@
1
+ /** JsonSchemaForm 当前支持的标量子集。未知断言必须显式拒绝,不能假装已校验。 */
2
+ export type JsonScalar = string | number | boolean | null;
3
+ export type SchemaIssueCode = 'unsupported-schema' | 'invalid-schema' | 'required' | 'type' | 'enum' | 'minimum' | 'maximum' | 'multipleOf' | 'minLength' | 'maxLength' | 'additionalProperties' | 'invalid-value' | 'minItems' | 'maxItems';
4
+ export interface SchemaFormIssue {
5
+ path: string;
6
+ code: SchemaIssueCode;
7
+ }
8
+ export interface SchemaFormField {
9
+ key: string;
10
+ title: string;
11
+ description: string;
12
+ type: 'string' | 'number' | 'integer' | 'boolean' | 'enum';
13
+ nullable: boolean;
14
+ required: boolean;
15
+ readonly: boolean;
16
+ choices: JsonScalar[] | undefined;
17
+ hasDefault: boolean;
18
+ defaultValue: JsonScalar | undefined;
19
+ minimum: number | undefined;
20
+ maximum: number | undefined;
21
+ exclusiveMinimum: number | undefined;
22
+ exclusiveMaximum: number | undefined;
23
+ multipleOf: number | undefined;
24
+ minLength: number | undefined;
25
+ maxLength: number | undefined;
26
+ }
27
+ export interface SchemaFormModel {
28
+ fields: SchemaFormField[];
29
+ issues: SchemaFormIssue[];
30
+ additionalProperties: boolean;
31
+ }
32
+ export declare function readSchemaForm(schema: Record<string, unknown>): SchemaFormModel;
33
+ /** 只为不存在的键补默认值;显式 undefined 表示用户已清空,不重新灌回默认值。 */
34
+ export declare function schemaFormValues(model: SchemaFormModel, value: Record<string, unknown>): Record<string, unknown>;
35
+ export declare function parseSchemaNumber(raw: string): number | undefined;
36
+ export declare function enumIndex(choices: readonly JsonScalar[], value: unknown): string;
37
+ export declare function enumValue(choices: readonly JsonScalar[], index: string): JsonScalar | undefined;
38
+ export declare function validateSchemaForm(model: SchemaFormModel, value: Record<string, unknown>): SchemaFormIssue[];
39
+ export { schemaFormSnapshot } from '../json-schema-form-state.js';