@svadmin/ui 0.73.0 → 0.75.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 (303) hide show
  1. package/README.md +53 -28
  2. package/dist/app.css +3733 -4119
  3. package/dist/app.theme.css +3733 -4119
  4. package/dist/component-registry.d.ts +14977 -0
  5. package/dist/component-registry.js +216 -0
  6. package/dist/components/AboutSettings.svelte +7 -1
  7. package/dist/components/AboutSettings.svelte.d.ts +4 -1
  8. package/dist/components/ActivityFeed.svelte +9 -3
  9. package/dist/components/ActivityFeed.svelte.d.ts +3 -0
  10. package/dist/components/AdminApp.svelte +24 -15
  11. package/dist/components/AdminApp.svelte.d.ts +6 -0
  12. package/dist/components/ApiSettings.svelte +41 -5
  13. package/dist/components/ApprovalCenter.svelte +283 -0
  14. package/dist/components/ApprovalCenter.svelte.d.ts +10 -0
  15. package/dist/components/AuditLogViewer.svelte +3 -1
  16. package/dist/components/AutoForm.svelte +33 -3
  17. package/dist/components/AutoForm.svelte.d.ts +1 -0
  18. package/dist/components/AutoTable.svelte +610 -47
  19. package/dist/components/AutoTable.svelte.d.ts +17 -1
  20. package/dist/components/BoundRecordDetailDrawer.svelte +9 -0
  21. package/dist/components/BoundRecordDetailDrawer.svelte.d.ts +2 -0
  22. package/dist/components/Breadcrumbs.svelte +11 -1
  23. package/dist/components/CancelTaskButton.svelte +12 -42
  24. package/dist/components/ColorPicker.svelte +73 -0
  25. package/dist/components/ColorPicker.svelte.d.ts +15 -0
  26. package/dist/components/ComboboxField.svelte +114 -27
  27. package/dist/components/ComboboxField.svelte.d.ts +1 -0
  28. package/dist/components/DashboardView.svelte +99 -0
  29. package/dist/components/DashboardView.svelte.d.ts +14 -0
  30. package/dist/components/DatePicker.svelte +10 -0
  31. package/dist/components/DatePicker.svelte.d.ts +6 -0
  32. package/dist/components/DateRangeInput.svelte +85 -5
  33. package/dist/components/DateRangeInput.svelte.d.ts +10 -0
  34. package/dist/components/DateRangePicker.svelte +10 -0
  35. package/dist/components/DateRangePicker.svelte.d.ts +6 -0
  36. package/dist/components/DateTimeInput.svelte +85 -16
  37. package/dist/components/DateTimeInput.svelte.d.ts +19 -11
  38. package/dist/components/DateTimePicker.svelte +10 -0
  39. package/dist/components/DateTimePicker.svelte.d.ts +6 -0
  40. package/dist/components/DevTools.svelte +34 -26
  41. package/dist/components/DevframePanel.svelte +123 -0
  42. package/dist/components/DevframePanel.svelte.d.ts +3 -0
  43. package/dist/components/ErrorSummary.svelte +52 -0
  44. package/dist/components/ErrorSummary.svelte.d.ts +14 -0
  45. package/dist/components/FieldRenderer.svelte +82 -81
  46. package/dist/components/FileUpload.svelte +214 -52
  47. package/dist/components/FileUpload.svelte.d.ts +11 -0
  48. package/dist/components/FilterBuilder.svelte +88 -66
  49. package/dist/components/FilterCollectionInput.svelte +80 -0
  50. package/dist/components/FilterCollectionInput.svelte.d.ts +10 -0
  51. package/dist/components/GanttChart.svelte +66 -14
  52. package/dist/components/GanttChart.svelte.d.ts +6 -0
  53. package/dist/components/Header.svelte +18 -2
  54. package/dist/components/ImportWizard.svelte +339 -17
  55. package/dist/components/ImportWizard.svelte.d.ts +11 -0
  56. package/dist/components/JsonSchemaForm.svelte +120 -52
  57. package/dist/components/JsonSchemaForm.svelte.d.ts +7 -1
  58. package/dist/components/KanbanBoard.svelte +195 -40
  59. package/dist/components/KanbanBoard.svelte.d.ts +9 -2
  60. package/dist/components/Layout.svelte +4 -2
  61. package/dist/components/LazyAutoForm.svelte +28 -0
  62. package/dist/components/LazyAutoForm.svelte.d.ts +8 -0
  63. package/dist/components/LazyAutoTable.svelte +28 -0
  64. package/dist/components/LazyAutoTable.svelte.d.ts +8 -0
  65. package/dist/components/LazyPage.svelte +3 -3
  66. package/dist/components/LazyPage.svelte.d.ts +2 -2
  67. package/dist/components/LazySettingsPage.svelte +28 -0
  68. package/dist/components/LazySettingsPage.svelte.d.ts +8 -0
  69. package/dist/components/LazyShowPage.svelte +28 -0
  70. package/dist/components/LazyShowPage.svelte.d.ts +8 -0
  71. package/dist/components/ListPage.svelte +5 -1
  72. package/dist/components/ListPage.svelte.d.ts +3 -0
  73. package/dist/components/LoginPage.svelte +1 -1
  74. package/dist/components/MultiTabKeepAlive.svelte +11 -6
  75. package/dist/components/NotificationsSettings.svelte +69 -2
  76. package/dist/components/NotificationsSettings.svelte.d.ts +25 -1
  77. package/dist/components/PasswordInput.svelte +3 -3
  78. package/dist/components/PasswordInput.svelte.d.ts +2 -1
  79. package/dist/components/PermissionMatrix.svelte +20 -1
  80. package/dist/components/PivotExportButton.svelte +157 -0
  81. package/dist/components/PivotExportButton.svelte.d.ts +16 -0
  82. package/dist/components/PivotTable.svelte +229 -74
  83. package/dist/components/PivotTable.svelte.d.ts +19 -2
  84. package/dist/components/RadioGroup.svelte +121 -0
  85. package/dist/components/RadioGroup.svelte.d.ts +43 -0
  86. package/dist/components/RangeSlider.svelte +127 -0
  87. package/dist/components/RangeSlider.svelte.d.ts +22 -0
  88. package/dist/components/Rate.svelte +121 -0
  89. package/dist/components/Rate.svelte.d.ts +16 -0
  90. package/dist/components/RecordDetailDrawer.svelte +4 -2
  91. package/dist/components/RecordDetailDrawer.svelte.d.ts +2 -0
  92. package/dist/components/RelationPicker.svelte +341 -0
  93. package/dist/components/RelationPicker.svelte.d.ts +26 -0
  94. package/dist/components/ResourceOperationsPage.svelte +23 -19
  95. package/dist/components/ResourceOperationsPage.svelte.d.ts +2 -2
  96. package/dist/components/RetryTaskButton.svelte +12 -42
  97. package/dist/components/SecuritySettings.svelte +29 -5
  98. package/dist/components/SegmentedControl.svelte +145 -0
  99. package/dist/components/SegmentedControl.svelte.d.ts +38 -0
  100. package/dist/components/SettingsPage.svelte +3 -1
  101. package/dist/components/SettingsPage.svelte.d.ts +1 -0
  102. package/dist/components/ShowPage.svelte +18 -3
  103. package/dist/components/ShowPage.svelte.d.ts +3 -0
  104. package/dist/components/Sidebar.svelte +2 -2
  105. package/dist/components/Slider.svelte +100 -0
  106. package/dist/components/Slider.svelte.d.ts +19 -0
  107. package/dist/components/SpreadsheetView.svelte +1213 -95
  108. package/dist/components/SpreadsheetView.svelte.d.ts +19 -0
  109. package/dist/components/TagsInput.svelte +178 -0
  110. package/dist/components/TagsInput.svelte.d.ts +17 -0
  111. package/dist/components/TimePicker.svelte +10 -0
  112. package/dist/components/TimePicker.svelte.d.ts +6 -0
  113. package/dist/components/TooltipButton.svelte +3 -4
  114. package/dist/components/TreeSelect.svelte +267 -53
  115. package/dist/components/TreeSelect.svelte.d.ts +3 -0
  116. package/dist/components/TreeTable.svelte +484 -82
  117. package/dist/components/TreeTable.svelte.d.ts +24 -1
  118. package/dist/components/TwoFactorAuthPage.svelte +85 -48
  119. package/dist/components/TwoFactorAuthPage.svelte.d.ts +12 -1
  120. package/dist/components/VirtualTable.svelte +116 -20
  121. package/dist/components/VirtualTable.svelte.d.ts +5 -0
  122. package/dist/components/account/CompanyProfilePage.svelte +74 -38
  123. package/dist/components/account/GetStartedPage.svelte +2 -1
  124. package/dist/components/account/ImportMembersPage.svelte +22 -167
  125. package/dist/components/account/ImportMembersPage.svelte.d.ts +4 -1
  126. package/dist/components/account/MemberDirectory.svelte +156 -0
  127. package/dist/components/account/MemberDirectory.svelte.d.ts +19 -0
  128. package/dist/components/account/MembersStarterPage.svelte +9 -55
  129. package/dist/components/account/MembersStarterPage.svelte.d.ts +5 -1
  130. package/dist/components/account/SecurityLogPage.svelte +4 -1
  131. package/dist/components/account/SettingsPlainPage.svelte +7 -38
  132. package/dist/components/account/SettingsPlainPage.svelte.d.ts +4 -1
  133. package/dist/components/account/SettingsSidebarPage.svelte +7 -20
  134. package/dist/components/account/TeamMembersPage.svelte +4 -20
  135. package/dist/components/account/TeamMembersPage.svelte.d.ts +5 -1
  136. package/dist/components/account/UserProfilePage.svelte +3 -25
  137. package/dist/components/account/UserProfilePage.svelte.d.ts +17 -2
  138. package/dist/components/buttons/ExportButton.svelte +56 -12
  139. package/dist/components/buttons/ExportButton.svelte.d.ts +11 -0
  140. package/dist/components/content/ContentPageHeader.svelte +1 -1
  141. package/dist/components/content/ContentPageShell.svelte +1 -1
  142. package/dist/components/content/MetricBlock.svelte +1 -1
  143. package/dist/components/content/PageToolbar.svelte +1 -1
  144. package/dist/components/content/ReferenceNotice.svelte +5 -0
  145. package/dist/components/content/ReferenceNotice.svelte.d.ts +18 -0
  146. package/dist/components/content/SectionHeader.svelte +1 -1
  147. package/dist/components/content/SettingsFieldRow.svelte +1 -1
  148. package/dist/components/content/SettingsGroup.svelte +1 -1
  149. package/dist/components/content/StatusBadge.svelte +1 -1
  150. package/dist/components/content/WorkspaceLayout.svelte +1 -1
  151. package/dist/components/export-reference.d.ts +2 -0
  152. package/dist/components/export-reference.js +9 -0
  153. package/dist/components/fieldComponentMap.js +2 -5
  154. package/dist/components/fields/DateField.svelte +12 -13
  155. package/dist/components/fields/MarkdownField.svelte +14 -5
  156. package/dist/components/fields/date-display.d.ts +6 -0
  157. package/dist/components/fields/date-display.js +24 -0
  158. package/dist/components/network/TeamCrewTablePage.svelte +6 -1
  159. package/dist/components/network/UserCardsNFTPage.svelte +2 -0
  160. package/dist/components/profile/PublicProfilePage.svelte +2 -0
  161. package/dist/components/saved-list-views.d.ts +74 -1
  162. package/dist/components/saved-list-views.js +191 -3
  163. package/dist/components/table-contract.d.ts +12 -1
  164. package/dist/components/task-action.svelte.d.ts +13 -0
  165. package/dist/components/task-action.svelte.js +73 -0
  166. package/dist/components/ui/DesignSystemShowcase.svelte +164 -0
  167. package/dist/components/ui/DesignSystemShowcase.svelte.d.ts +3 -0
  168. package/dist/components/ui/badge/badge-variants.d.ts +3 -2
  169. package/dist/components/ui/badge/badge-variants.js +2 -3
  170. package/dist/components/ui/badge/badge.svelte +3 -0
  171. package/dist/components/ui/badge/badge.svelte.d.ts +1 -0
  172. package/dist/components/ui/button/button-variants.d.ts +5 -4
  173. package/dist/components/ui/button/button-variants.js +7 -5
  174. package/dist/components/ui/checkbox/checkbox.svelte +5 -1
  175. package/dist/components/ui/checkbox/checkbox.svelte.d.ts +5 -1
  176. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +1 -2
  177. package/dist/components/ui/input/input.svelte +7 -2
  178. package/dist/components/ui/input/input.svelte.d.ts +4 -1
  179. package/dist/components/ui/select/select.svelte +4 -1
  180. package/dist/components/ui/select/select.svelte.d.ts +2 -1
  181. package/dist/components/ui/textarea/textarea.svelte +2 -2
  182. package/dist/components.css +33 -2
  183. package/dist/date-input-policy.d.ts +4 -0
  184. package/dist/date-input-policy.js +35 -0
  185. package/dist/design-system-components.d.ts +100 -0
  186. package/dist/design-system-components.js +101 -0
  187. package/dist/design-system.js +1 -1
  188. package/dist/devtools-bridge.d.ts +80 -0
  189. package/dist/devtools-bridge.js +92 -0
  190. package/dist/editor-config.svelte.d.ts +4 -2
  191. package/dist/index.d.ts +37 -2
  192. package/dist/index.js +23 -2
  193. package/dist/recipes.d.ts +960 -4
  194. package/dist/recipes.js +264 -4
  195. package/dist/tree-table-model.d.ts +24 -0
  196. package/dist/tree-table-model.js +111 -0
  197. package/dist/types.d.ts +4 -4
  198. package/package.json +22 -10
  199. package/dist/styled-system/css/conditions.js +0 -36
  200. package/dist/styled-system/css/css.d.ts +0 -22
  201. package/dist/styled-system/css/css.js +0 -45
  202. package/dist/styled-system/css/cva.d.ts +0 -6
  203. package/dist/styled-system/css/cva.js +0 -87
  204. package/dist/styled-system/css/cx.d.ts +0 -5
  205. package/dist/styled-system/css/cx.js +0 -15
  206. package/dist/styled-system/css/index.d.ts +0 -5
  207. package/dist/styled-system/css/index.js +0 -4
  208. package/dist/styled-system/css/sva.d.ts +0 -4
  209. package/dist/styled-system/css/sva.js +0 -46
  210. package/dist/styled-system/helpers.js +0 -316
  211. package/dist/styled-system/patterns/aspect-ratio.d.ts +0 -20
  212. package/dist/styled-system/patterns/aspect-ratio.js +0 -38
  213. package/dist/styled-system/patterns/bleed.d.ts +0 -21
  214. package/dist/styled-system/patterns/bleed.js +0 -24
  215. package/dist/styled-system/patterns/box.d.ts +0 -20
  216. package/dist/styled-system/patterns/box.js +0 -15
  217. package/dist/styled-system/patterns/center.d.ts +0 -20
  218. package/dist/styled-system/patterns/center.js +0 -21
  219. package/dist/styled-system/patterns/circle.d.ts +0 -20
  220. package/dist/styled-system/patterns/circle.js +0 -25
  221. package/dist/styled-system/patterns/container.d.ts +0 -20
  222. package/dist/styled-system/patterns/container.js +0 -21
  223. package/dist/styled-system/patterns/cq.d.ts +0 -21
  224. package/dist/styled-system/patterns/cq.js +0 -21
  225. package/dist/styled-system/patterns/divider.d.ts +0 -22
  226. package/dist/styled-system/patterns/divider.js +0 -25
  227. package/dist/styled-system/patterns/flex.d.ts +0 -26
  228. package/dist/styled-system/patterns/flex.js +0 -26
  229. package/dist/styled-system/patterns/float.d.ts +0 -23
  230. package/dist/styled-system/patterns/float.js +0 -52
  231. package/dist/styled-system/patterns/grid-item.d.ts +0 -25
  232. package/dist/styled-system/patterns/grid-item.js +0 -25
  233. package/dist/styled-system/patterns/grid.d.ts +0 -24
  234. package/dist/styled-system/patterns/grid.js +0 -27
  235. package/dist/styled-system/patterns/hstack.d.ts +0 -21
  236. package/dist/styled-system/patterns/hstack.js +0 -24
  237. package/dist/styled-system/patterns/index.d.ts +0 -21
  238. package/dist/styled-system/patterns/index.js +0 -20
  239. package/dist/styled-system/patterns/link-overlay.d.ts +0 -20
  240. package/dist/styled-system/patterns/link-overlay.js +0 -24
  241. package/dist/styled-system/patterns/spacer.d.ts +0 -20
  242. package/dist/styled-system/patterns/spacer.js +0 -25
  243. package/dist/styled-system/patterns/square.d.ts +0 -20
  244. package/dist/styled-system/patterns/square.js +0 -24
  245. package/dist/styled-system/patterns/stack.d.ts +0 -23
  246. package/dist/styled-system/patterns/stack.js +0 -24
  247. package/dist/styled-system/patterns/visually-hidden.d.ts +0 -20
  248. package/dist/styled-system/patterns/visually-hidden.js +0 -18
  249. package/dist/styled-system/patterns/vstack.d.ts +0 -21
  250. package/dist/styled-system/patterns/vstack.js +0 -24
  251. package/dist/styled-system/patterns/wrap.d.ts +0 -24
  252. package/dist/styled-system/patterns/wrap.js +0 -25
  253. package/dist/styled-system/recipes/content-header.d.ts +0 -31
  254. package/dist/styled-system/recipes/content-header.js +0 -65
  255. package/dist/styled-system/recipes/content-page.d.ts +0 -34
  256. package/dist/styled-system/recipes/content-page.js +0 -43
  257. package/dist/styled-system/recipes/create-recipe.js +0 -82
  258. package/dist/styled-system/recipes/index.d.ts +0 -17
  259. package/dist/styled-system/recipes/index.js +0 -16
  260. package/dist/styled-system/recipes/metric-block.d.ts +0 -34
  261. package/dist/styled-system/recipes/metric-block.js +0 -76
  262. package/dist/styled-system/recipes/product-list.d.ts +0 -31
  263. package/dist/styled-system/recipes/product-list.js +0 -73
  264. package/dist/styled-system/recipes/product-section.d.ts +0 -31
  265. package/dist/styled-system/recipes/product-section.js +0 -49
  266. package/dist/styled-system/recipes/product-settings-row.d.ts +0 -34
  267. package/dist/styled-system/recipes/product-settings-row.js +0 -58
  268. package/dist/styled-system/recipes/product-settings.d.ts +0 -31
  269. package/dist/styled-system/recipes/product-settings.js +0 -57
  270. package/dist/styled-system/recipes/product-status.d.ts +0 -34
  271. package/dist/styled-system/recipes/product-status.js +0 -45
  272. package/dist/styled-system/recipes/product-toolbar.d.ts +0 -31
  273. package/dist/styled-system/recipes/product-toolbar.js +0 -41
  274. package/dist/styled-system/recipes/product-workspace.d.ts +0 -34
  275. package/dist/styled-system/recipes/product-workspace.js +0 -58
  276. package/dist/styled-system/recipes/surface-metric.d.ts +0 -38
  277. package/dist/styled-system/recipes/surface-metric.js +0 -63
  278. package/dist/styled-system/recipes/surface-table.d.ts +0 -34
  279. package/dist/styled-system/recipes/surface-table.js +0 -62
  280. package/dist/styled-system/recipes/ui-badge.d.ts +0 -31
  281. package/dist/styled-system/recipes/ui-badge.js +0 -38
  282. package/dist/styled-system/recipes/ui-button.d.ts +0 -32
  283. package/dist/styled-system/recipes/ui-button.js +0 -43
  284. package/dist/styled-system/recipes/ui-input.d.ts +0 -31
  285. package/dist/styled-system/recipes/ui-input.js +0 -49
  286. package/dist/styled-system/recipes/ui-textarea.d.ts +0 -31
  287. package/dist/styled-system/recipes/ui-textarea.js +0 -24
  288. package/dist/styled-system/styles.css +0 -1257
  289. package/dist/styled-system/tokens/index.d.ts +0 -9
  290. package/dist/styled-system/tokens/index.js +0 -268
  291. package/dist/styled-system/tokens/tokens.d.ts +0 -36
  292. package/dist/styled-system/types/composition.d.ts +0 -227
  293. package/dist/styled-system/types/conditions.d.ts +0 -236
  294. package/dist/styled-system/types/csstype.d.ts +0 -22570
  295. package/dist/styled-system/types/index.d.ts +0 -6
  296. package/dist/styled-system/types/parts.d.ts +0 -8
  297. package/dist/styled-system/types/pattern.d.ts +0 -78
  298. package/dist/styled-system/types/prop-type.d.ts +0 -223
  299. package/dist/styled-system/types/recipe.d.ts +0 -181
  300. package/dist/styled-system/types/selectors.d.ts +0 -59
  301. package/dist/styled-system/types/static-css.d.ts +0 -56
  302. package/dist/styled-system/types/style-props.d.ts +0 -8088
  303. package/dist/styled-system/types/system-types.d.ts +0 -151
@@ -14,13 +14,86 @@ export interface SavedListView {
14
14
  id: string;
15
15
  name: string;
16
16
  state: SavedListViewState;
17
+ version?: number;
18
+ source?: 'local' | 'team' | 'system';
19
+ readOnly?: boolean;
20
+ default?: boolean;
21
+ access?: SavedListViewAccess;
22
+ }
23
+ export type SavedListViewAccessMode = 'team' | 'organization' | 'restricted';
24
+ export interface SavedListViewAccess {
25
+ mode: SavedListViewAccessMode;
26
+ subjectIds: string[];
27
+ }
28
+ export interface SavedListViewSubject {
29
+ id: string;
30
+ label: string;
31
+ description?: string;
32
+ }
33
+ export interface SavedListViewMutation {
34
+ id: string;
35
+ name: string;
36
+ state: SavedListViewState;
37
+ /** null 仅允许创建;更新必须提供读取到的版本。 */
38
+ expectedVersion: number | null;
39
+ source: 'team' | 'system';
40
+ }
41
+ export interface SavedListViewMutationSuccess {
42
+ ok: true;
43
+ view: SavedListView;
44
+ version: number;
45
+ }
46
+ export interface SavedListViewMutationConflict {
47
+ ok: false;
48
+ code: 'VERSION_CONFLICT';
49
+ current: SavedListView;
50
+ version: number;
51
+ }
52
+ export interface SavedListViewRemoveSuccess {
53
+ ok: true;
54
+ id: string;
55
+ version: number;
56
+ }
57
+ export interface SavedListViewProvider {
58
+ list: (scope: ListPreferenceScope) => Promise<unknown>;
59
+ /** 可选的成员目录查询;授权仍由宿主服务端负责。 */
60
+ listAccessSubjects?: (scope: ListPreferenceScope, input: {
61
+ query?: string;
62
+ limit?: number;
63
+ }) => Promise<unknown>;
64
+ save?: (scope: ListPreferenceScope, mutation: SavedListViewMutation) => Promise<unknown>;
65
+ remove?: (scope: ListPreferenceScope, input: {
66
+ id: string;
67
+ expectedVersion: number;
68
+ }) => Promise<unknown>;
69
+ setDefault?: (scope: ListPreferenceScope, input: {
70
+ id: string;
71
+ source: 'team' | 'system';
72
+ expectedVersion: number;
73
+ default: boolean;
74
+ }) => Promise<unknown>;
75
+ updateAccess?: (scope: ListPreferenceScope, input: {
76
+ id: string;
77
+ source: 'team' | 'system';
78
+ expectedVersion: number;
79
+ access: SavedListViewAccess;
80
+ }) => Promise<unknown>;
17
81
  }
18
82
  export interface ListPreferenceScope {
19
83
  resourceName: string;
20
84
  providerName: string;
21
85
  tenantIdentity?: string | number;
86
+ identityKey?: string;
22
87
  }
23
- export declare function readSavedListViews(raw: string | null, allowedColumnIds: Set<string>): SavedListView[];
88
+ export declare function decodeSavedListViewAccess(value: unknown): SavedListViewAccess | undefined;
89
+ export declare function decodeSavedListViewSubjects(value: unknown): SavedListViewSubject[] | undefined;
90
+ export declare function readSavedListViews(raw: string | null, allowedColumnIds: Set<string>, source?: SavedListView['source']): SavedListView[];
91
+ export declare function decodeSavedListViewMutationResult(value: unknown, allowedColumnIds: Set<string>, expected?: Pick<SavedListViewMutation, 'id' | 'source' | 'expectedVersion'>): SavedListViewMutationSuccess | SavedListViewMutationConflict | undefined;
92
+ export declare function decodeSavedListViewRemoveResult(value: unknown, expected: {
93
+ id: string;
94
+ expectedVersion: number;
95
+ }): SavedListViewRemoveSuccess | undefined;
96
+ export declare function decodeRemoteSavedListViews(value: unknown, allowedColumnIds: Set<string>, writable?: boolean): SavedListView[];
24
97
  export declare function serializeSavedListViews(views: SavedListView[]): string;
25
98
  export declare function cloneSavedListViewState(state: SavedListViewState): SavedListViewState;
26
99
  export declare function listPreferenceScopeId(scope: ListPreferenceScope): string;
@@ -1,3 +1,4 @@
1
+ import { snapshotPlainData } from '@svadmin/core/schema';
1
2
  const STORAGE_VERSION = 1;
2
3
  const MAX_SAVED_VIEWS = 25;
3
4
  const MAX_FILTER_NODES = 200;
@@ -91,7 +92,63 @@ function parseState(value, allowedColumnIds) {
91
92
  columnOrder,
92
93
  };
93
94
  }
94
- export function readSavedListViews(raw, allowedColumnIds) {
95
+ function parseAccess(value) {
96
+ if (!isRecord(value) || Object.keys(value).some(key => key !== 'mode' && key !== 'subjectIds'))
97
+ return;
98
+ const mode = value['mode'];
99
+ const ids = value['subjectIds'];
100
+ if ((mode !== 'team' && mode !== 'organization' && mode !== 'restricted')
101
+ || !Array.isArray(ids) || ids.length > 200)
102
+ return;
103
+ const subjectIds = [];
104
+ for (const id of ids) {
105
+ if (typeof id !== 'string' || !id.trim() || id !== id.trim() || id.length > 200
106
+ || subjectIds.includes(id))
107
+ return;
108
+ subjectIds.push(id);
109
+ }
110
+ if ((mode === 'restricted') !== (subjectIds.length > 0))
111
+ return;
112
+ return { mode, subjectIds };
113
+ }
114
+ export function decodeSavedListViewAccess(value) {
115
+ try {
116
+ return parseAccess(snapshotPlainData(value));
117
+ }
118
+ catch {
119
+ return;
120
+ }
121
+ }
122
+ export function decodeSavedListViewSubjects(value) {
123
+ try {
124
+ const snapshot = snapshotPlainData(value);
125
+ if (!Array.isArray(snapshot) || snapshot.length > 200)
126
+ return;
127
+ const seen = new Set();
128
+ const subjects = [];
129
+ for (const entry of snapshot) {
130
+ if (!isRecord(entry)
131
+ || Object.keys(entry).some(key => !['id', 'label', 'description'].includes(key))
132
+ || typeof entry['id'] !== 'string' || !entry['id'].trim() || entry['id'] !== entry['id'].trim()
133
+ || entry['id'].length > 200 || seen.has(entry['id'])
134
+ || typeof entry['label'] !== 'string' || !entry['label'].trim() || entry['label'].length > 200
135
+ || (entry['description'] !== undefined
136
+ && (typeof entry['description'] !== 'string' || entry['description'].length > 500)))
137
+ return;
138
+ seen.add(entry['id']);
139
+ subjects.push({
140
+ id: entry['id'],
141
+ label: entry['label'].trim(),
142
+ ...(entry['description'] === undefined ? {} : { description: entry['description'] }),
143
+ });
144
+ }
145
+ return subjects;
146
+ }
147
+ catch {
148
+ return;
149
+ }
150
+ }
151
+ export function readSavedListViews(raw, allowedColumnIds, source = 'local') {
95
152
  if (!raw)
96
153
  return [];
97
154
  try {
@@ -110,8 +167,20 @@ export function readSavedListViews(raw, allowedColumnIds) {
110
167
  const state = parseState(entry['state'], allowedColumnIds);
111
168
  if (!state)
112
169
  continue;
170
+ const access = entry['access'] === undefined ? undefined : parseAccess(entry['access']);
171
+ if (entry['access'] !== undefined && !access)
172
+ continue;
113
173
  seenIds.add(entry['id']);
114
- views.push({ id: entry['id'], name: entry['name'].trim(), state });
174
+ views.push({
175
+ id: entry['id'], name: entry['name'].trim(), state,
176
+ ...(isPositiveInteger(entry['version'], Number.MAX_SAFE_INTEGER) ? { version: entry['version'] } : {}),
177
+ ...(source !== 'local' ? {
178
+ source: entry['source'] === 'system' ? 'system' : 'team',
179
+ readOnly: true,
180
+ ...(entry['default'] === true ? { default: true } : {}),
181
+ ...(access === undefined ? {} : { access }),
182
+ } : {}),
183
+ });
115
184
  }
116
185
  return views;
117
186
  }
@@ -121,6 +190,124 @@ export function readSavedListViews(raw, allowedColumnIds) {
121
190
  throw error;
122
191
  }
123
192
  }
193
+ export function decodeSavedListViewMutationResult(value, allowedColumnIds, expected) {
194
+ try {
195
+ if (expected && (!expected.id.trim()
196
+ || !['team', 'system'].includes(expected.source)
197
+ || (expected.expectedVersion !== null
198
+ && !isPositiveInteger(expected.expectedVersion, Number.MAX_SAFE_INTEGER))))
199
+ return;
200
+ const snapshot = snapshotPlainData(value);
201
+ if (!isRecord(snapshot) || typeof snapshot['ok'] !== 'boolean')
202
+ return;
203
+ const keys = snapshot['ok'] ? ['ok', 'version', 'view'] : ['ok', 'code', 'version', 'current'];
204
+ if (Object.keys(snapshot).some(key => !keys.includes(key)))
205
+ return;
206
+ const parseReceiptView = (candidate, version) => {
207
+ if (!isRecord(candidate)
208
+ || Object.keys(candidate).some(key => !['id', 'name', 'state', 'version', 'source', 'readOnly', 'default', 'access'].includes(key))
209
+ || candidate['version'] !== version
210
+ || (candidate['readOnly'] !== undefined && typeof candidate['readOnly'] !== 'boolean')
211
+ || (candidate['default'] !== undefined && typeof candidate['default'] !== 'boolean')
212
+ || (candidate['source'] !== undefined && candidate['source'] !== 'team' && candidate['source'] !== 'system'))
213
+ return;
214
+ const access = candidate['access'] === undefined ? undefined : parseAccess(candidate['access']);
215
+ if (candidate['access'] !== undefined && !access)
216
+ return;
217
+ const state = candidate['state'];
218
+ if (!isRecord(state) || Object.keys(state).some(key => !['search', 'filters', 'sorters', 'pagination', 'columnVisibility', 'columnOrder'].includes(key)))
219
+ return;
220
+ if (!isRecord(state['pagination']) || Object.keys(state['pagination']).some(key => !['current', 'pageSize'].includes(key)))
221
+ return;
222
+ if (!isRecord(state['columnVisibility']) || Object.entries(state['columnVisibility'])
223
+ .some(([key, visible]) => !allowedColumnIds.has(key) || typeof visible !== 'boolean'))
224
+ return;
225
+ if (!Array.isArray(state['columnOrder']) || state['columnOrder'].some(key => typeof key !== 'string' || !allowedColumnIds.has(key))
226
+ || new Set(state['columnOrder']).size !== state['columnOrder'].length)
227
+ return;
228
+ if (!Array.isArray(state['sorters']) || state['sorters'].some(sorter => !isRecord(sorter) || Object.keys(sorter).some(key => !['field', 'order'].includes(key))))
229
+ return;
230
+ const exactFilter = (filter, depth = 0) => {
231
+ if (!isRecord(filter) || depth > 20)
232
+ return false;
233
+ if ('field' in filter)
234
+ return Object.keys(filter).every(key => ['field', 'operator', 'value'].includes(key));
235
+ return Object.keys(filter).every(key => ['operator', 'value'].includes(key))
236
+ && Array.isArray(filter['value']) && filter['value'].every(child => exactFilter(child, depth + 1));
237
+ };
238
+ if (!Array.isArray(state['filters']) || !state['filters'].every(filter => exactFilter(filter)))
239
+ return;
240
+ const views = readSavedListViews(JSON.stringify({ version: STORAGE_VERSION, views: [candidate] }), allowedColumnIds);
241
+ const view = views[0];
242
+ if (!view || view.name !== candidate['name'])
243
+ return;
244
+ if (expected && (view.id !== expected.id || candidate['source'] !== expected.source))
245
+ return;
246
+ return {
247
+ ...view,
248
+ ...(candidate['source'] === undefined ? {} : { source: candidate['source'] }),
249
+ ...(candidate['readOnly'] === undefined ? {} : { readOnly: candidate['readOnly'] }),
250
+ ...(candidate['default'] === undefined ? {} : { default: candidate['default'] }),
251
+ ...(access === undefined ? {} : { access }),
252
+ };
253
+ };
254
+ if (snapshot['ok'] === true) {
255
+ if (!isPositiveInteger(snapshot['version'], Number.MAX_SAFE_INTEGER))
256
+ return;
257
+ if (expected?.expectedVersion !== undefined && expected.expectedVersion !== null
258
+ && snapshot['version'] <= expected.expectedVersion)
259
+ return;
260
+ const view = parseReceiptView(snapshot['view'], snapshot['version']);
261
+ if (!view)
262
+ return;
263
+ return { ok: true, view, version: snapshot['version'] };
264
+ }
265
+ if (snapshot['code'] !== 'VERSION_CONFLICT' || !isPositiveInteger(snapshot['version'], Number.MAX_SAFE_INTEGER))
266
+ return;
267
+ const current = parseReceiptView(snapshot['current'], snapshot['version']);
268
+ if (!current)
269
+ return;
270
+ return { ok: false, code: 'VERSION_CONFLICT', current, version: snapshot['version'] };
271
+ }
272
+ catch {
273
+ return;
274
+ }
275
+ }
276
+ export function decodeSavedListViewRemoveResult(value, expected) {
277
+ try {
278
+ const snapshot = snapshotPlainData(value);
279
+ if (!isRecord(snapshot) || snapshot['ok'] !== true
280
+ || Object.keys(snapshot).some(key => !['ok', 'id', 'version'].includes(key))
281
+ || snapshot['id'] !== expected.id
282
+ || !isPositiveInteger(expected.expectedVersion, Number.MAX_SAFE_INTEGER)
283
+ || !isPositiveInteger(snapshot['version'], Number.MAX_SAFE_INTEGER)
284
+ || snapshot['version'] <= expected.expectedVersion)
285
+ return;
286
+ return { ok: true, id: expected.id, version: snapshot['version'] };
287
+ }
288
+ catch {
289
+ return;
290
+ }
291
+ }
292
+ export function decodeRemoteSavedListViews(value, allowedColumnIds, writable = false) {
293
+ try {
294
+ const snapshot = snapshotPlainData(value);
295
+ if (!Array.isArray(snapshot))
296
+ return [];
297
+ return readSavedListViews(JSON.stringify({ version: STORAGE_VERSION, views: snapshot }), allowedColumnIds, 'team')
298
+ .map(view => {
299
+ const entry = snapshot.find(entry => isRecord(entry) && entry['id'] === view.id);
300
+ return {
301
+ ...view,
302
+ readOnly: !writable || !view.version || !isRecord(entry) || entry['readOnly'] !== false,
303
+ ...(isRecord(entry) && entry['default'] === true ? { default: true } : {}),
304
+ };
305
+ });
306
+ }
307
+ catch {
308
+ return [];
309
+ }
310
+ }
124
311
  export function serializeSavedListViews(views) {
125
312
  return JSON.stringify({ version: STORAGE_VERSION, views: views.slice(0, MAX_SAVED_VIEWS) });
126
313
  }
@@ -137,10 +324,11 @@ export function listPreferenceScopeId(scope) {
137
324
  `r:${encodeURIComponent(scope.resourceName)}`,
138
325
  `p:${encodeURIComponent(scope.providerName)}`,
139
326
  `t:${encodeScopeValue(scope.tenantIdentity)}`,
327
+ ...(scope.identityKey === undefined ? [] : [`u:${encodeScopeValue(scope.identityKey)}`]),
140
328
  ].join('|');
141
329
  }
142
330
  export function canMigrateLegacyListPreferences(scope) {
143
- return scope.providerName === 'default' && scope.tenantIdentity === undefined;
331
+ return scope.providerName === 'default' && scope.tenantIdentity === undefined && scope.identityKey === undefined;
144
332
  }
145
333
  export function savedListViewsStorageKey(scope) {
146
334
  return `svadmin-list-views-v2-${listPreferenceScopeId(scope)}`;
@@ -1,7 +1,18 @@
1
- import type { BaseRecord } from '@svadmin/core';
1
+ import type { BaseRecord, Filter, Sort } from '@svadmin/core';
2
2
  export type TableRecord = BaseRecord & {
3
3
  id: string | number;
4
4
  };
5
+ export type BatchSelection = {
6
+ scope: 'selected';
7
+ ids: (string | number)[];
8
+ currentPageIds: (string | number)[];
9
+ } | {
10
+ scope: 'all';
11
+ filters: Filter[];
12
+ sorters: Sort[];
13
+ total: number;
14
+ excludedIds: (string | number)[];
15
+ };
5
16
  /** The list hook validates business fields; this adapter proves table identity and detaches UI reads. */
6
17
  export declare function copyTableRecord(value: unknown): TableRecord;
7
18
  export declare function tableRowKey(id: string | number): string;
@@ -0,0 +1,13 @@
1
+ import type { TaskProvider } from '@svadmin/core';
2
+ export declare function createTaskAction(options: {
3
+ action: 'cancel' | 'retry';
4
+ taskId: string;
5
+ provider?: TaskProvider | undefined;
6
+ disabled: boolean;
7
+ onSuccess?: (() => void) | undefined;
8
+ onError?: ((error: unknown) => void) | undefined;
9
+ }): {
10
+ run: () => Promise<void>;
11
+ readonly pending: boolean;
12
+ readonly available: boolean;
13
+ };
@@ -0,0 +1,73 @@
1
+ import { onDestroy } from 'svelte';
2
+ import { captureAdminContext, captureAuthSession, queryKeyMatches, TaskError, withValidatedTaskProvider } from '@svadmin/core';
3
+ import { useQueryClient } from '@tanstack/svelte-query';
4
+ export function createTaskAction(options) {
5
+ const context = captureAdminContext();
6
+ const client = useQueryClient();
7
+ const provider = $derived(options.provider ?? context.taskProvider);
8
+ const scope = $derived({
9
+ provider, id: options.taskId, tenant: context.tenantCacheKey?.__svadminTenant,
10
+ auth: context.authProvider, session: captureAuthSession(context.authProvider),
11
+ router: context.routerProvider, access: context.accessControlProvider,
12
+ });
13
+ let mounted = true;
14
+ let attempt = $state.raw();
15
+ function current(origin) {
16
+ return mounted && origin.provider === scope.provider && origin.id === scope.id
17
+ && origin.tenant === scope.tenant && origin.auth === scope.auth
18
+ && origin.router === scope.router && origin.access === scope.access
19
+ && origin.session.isCurrent();
20
+ }
21
+ onDestroy(() => { mounted = false; attempt = undefined; });
22
+ $effect.pre(() => {
23
+ if (attempt && !current(attempt.scope))
24
+ attempt = undefined;
25
+ });
26
+ const pending = $derived(!!attempt && current(attempt.scope));
27
+ const available = $derived(!options.disabled && scope.session.available && !!provider?.[options.action]);
28
+ async function run() {
29
+ if (!available || pending || !mounted || !provider)
30
+ return;
31
+ const origin = scope;
32
+ const token = { scope: origin };
33
+ const matcher = context.queryKeyMatcher();
34
+ const success = options.onSuccess;
35
+ const failure = options.onError;
36
+ attempt = token;
37
+ let error;
38
+ let failed = false;
39
+ let deliver;
40
+ try {
41
+ const operation = withValidatedTaskProvider(provider)[options.action];
42
+ if (!operation)
43
+ return;
44
+ await operation(origin.id);
45
+ if (!current(origin) || attempt !== token)
46
+ return;
47
+ await Promise.allSettled([client.invalidateQueries({
48
+ predicate: query => queryKeyMatches(query.queryKey, { ...matcher, kind: 'task', action: 'list' })
49
+ || queryKeyMatches(query.queryKey, { ...matcher, kind: 'task', action: 'one', id: origin.id }),
50
+ })]);
51
+ }
52
+ catch (cause) {
53
+ failed = true;
54
+ error = cause instanceof TaskError ? cause : new TaskError('TASK_PROVIDER_FAILED');
55
+ }
56
+ finally {
57
+ deliver = current(origin) && attempt === token;
58
+ if (attempt === token)
59
+ attempt = undefined;
60
+ }
61
+ if (!deliver || !current(origin))
62
+ return;
63
+ // 观察者异常不能被误报为服务端操作失败,也不能形成未处理的 Promise。
64
+ try {
65
+ if (failed)
66
+ await failure?.(error);
67
+ else
68
+ await success?.();
69
+ }
70
+ catch { /* 回调由宿主管理,不重试已发出的写入。 */ }
71
+ }
72
+ return { run, get pending() { return pending; }, get available() { return available; } };
73
+ }
@@ -0,0 +1,164 @@
1
+ <script lang="ts">
2
+ import { Button } from "./button/index.js";
3
+ import Badge from "./badge/badge.svelte";
4
+ import Checkbox from "./checkbox/checkbox.svelte";
5
+ import Input from "./input/input.svelte";
6
+ import Select from "./select/select.svelte";
7
+ import * as Tabs from "./tabs/index.js";
8
+ import * as DropdownMenu from "./dropdown-menu/index.js";
9
+ import * as Dialog from "./dialog/index.js";
10
+ import * as Tooltip from "./tooltip/index.js";
11
+ import * as Table from "./table/index.js";
12
+ import StatusBadge from "../content/StatusBadge.svelte";
13
+
14
+ let dialogOpen = $state(false);
15
+ </script>
16
+
17
+ <div class="svadmin-design-system-showcase">
18
+ <section aria-labelledby="buttons-heading">
19
+ <h2 id="buttons-heading">Button states / 按钮状态</h2>
20
+ <div class="svadmin-design-system-showcase__row">
21
+ <Button>Default</Button>
22
+ <Button variant="outline">Outline</Button>
23
+ <Button variant="secondary" size="sm">Compact</Button>
24
+ <Button disabled>Disabled</Button>
25
+ </div>
26
+ </section>
27
+
28
+ <section aria-labelledby="fields-heading">
29
+ <h2 id="fields-heading">Fields and selection / 字段与选择</h2>
30
+ <div class="svadmin-design-system-showcase__grid">
31
+ <Input aria-label="Default input" placeholder="Default" />
32
+ <Input aria-label="Compact input" data-size="compact" placeholder="Compact" />
33
+ <Select aria-label="Status" size="compact" placeholder="Choose a status" />
34
+ <label class="svadmin-design-system-showcase__checkbox">
35
+ <Checkbox aria-label="Enabled" size="compact" />
36
+ Enabled
37
+ </label>
38
+ </div>
39
+ </section>
40
+
41
+ <section aria-labelledby="status-heading">
42
+ <h2 id="status-heading">Semantic status / 语义状态</h2>
43
+ <div class="svadmin-design-system-showcase__row">
44
+ <Badge variant="subtle-success">Success</Badge>
45
+ <Badge variant="subtle-warning">Warning</Badge>
46
+ <Badge variant="subtle-destructive">Danger</Badge>
47
+ <Badge variant="outline" size="compact">Compact</Badge>
48
+ </div>
49
+ </section>
50
+
51
+ <section aria-labelledby="tabs-heading">
52
+ <h2 id="tabs-heading">Tabs interaction / 标签页交互</h2>
53
+ <Tabs.Root value="overview">
54
+ <Tabs.List aria-label="Design system sections">
55
+ <Tabs.Trigger value="overview">Overview</Tabs.Trigger>
56
+ <Tabs.Trigger value="states">States</Tabs.Trigger>
57
+ <Tabs.Trigger value="disabled" disabled>Disabled</Tabs.Trigger>
58
+ </Tabs.List>
59
+ <Tabs.Content value="overview">Overview content</Tabs.Content>
60
+ <Tabs.Content value="states">State content</Tabs.Content>
61
+ </Tabs.Root>
62
+ </section>
63
+
64
+ <section aria-labelledby="overlay-heading">
65
+ <h2 id="overlay-heading">Menus and overlays / 菜单与浮层</h2>
66
+ <div class="svadmin-design-system-showcase__row">
67
+ <DropdownMenu.Root>
68
+ <DropdownMenu.Trigger class="svadmin-design-system-showcase__trigger">Menu</DropdownMenu.Trigger>
69
+ <DropdownMenu.Content>
70
+ <DropdownMenu.Item>View details</DropdownMenu.Item>
71
+ <DropdownMenu.Item disabled>Disabled action</DropdownMenu.Item>
72
+ </DropdownMenu.Content>
73
+ </DropdownMenu.Root>
74
+ <Dialog.Root bind:open={dialogOpen}>
75
+ <Dialog.Trigger class="svadmin-design-system-showcase__trigger">Open dialog</Dialog.Trigger>
76
+ <Dialog.Content>
77
+ <Dialog.Header>
78
+ <Dialog.Title>Component dialog</Dialog.Title>
79
+ <Dialog.Description>Dialog focus and close behavior.</Dialog.Description>
80
+ </Dialog.Header>
81
+ <Dialog.Footer>
82
+ <Dialog.Close class="svadmin-design-system-showcase__trigger">Close</Dialog.Close>
83
+ </Dialog.Footer>
84
+ </Dialog.Content>
85
+ </Dialog.Root>
86
+ <Tooltip.Root>
87
+ <Tooltip.Trigger class="svadmin-design-system-showcase__trigger">Hover hint</Tooltip.Trigger>
88
+ <Tooltip.Content>Tooltip content</Tooltip.Content>
89
+ </Tooltip.Root>
90
+ </div>
91
+ </section>
92
+
93
+ <section aria-labelledby="table-heading">
94
+ <h2 id="table-heading">Table and status / 表格与状态</h2>
95
+ <div class="svadmin-design-system-showcase__row">
96
+ <StatusBadge status="success" label="Ready" />
97
+ <StatusBadge status="warning" label="Review" />
98
+ <StatusBadge status="danger" label="Blocked" />
99
+ </div>
100
+ <Table.Root>
101
+ <Table.Header>
102
+ <Table.Row>
103
+ <Table.Head>Component</Table.Head>
104
+ <Table.Head>State</Table.Head>
105
+ </Table.Row>
106
+ </Table.Header>
107
+ <Table.Body>
108
+ <Table.Row>
109
+ <Table.Cell>Table</Table.Cell>
110
+ <Table.Cell>Ready</Table.Cell>
111
+ </Table.Row>
112
+ </Table.Body>
113
+ </Table.Root>
114
+ </section>
115
+ </div>
116
+
117
+ <style>
118
+ .svadmin-design-system-showcase {
119
+ display: grid;
120
+ gap: 1.5rem;
121
+ max-width: 64rem;
122
+ padding: 1.5rem;
123
+ color: var(--foreground);
124
+ background: var(--background);
125
+ }
126
+
127
+ .svadmin-design-system-showcase section {
128
+ display: grid;
129
+ gap: 0.75rem;
130
+ }
131
+
132
+ .svadmin-design-system-showcase h2 {
133
+ margin: 0;
134
+ font-size: 0.875rem;
135
+ font-weight: 600;
136
+ }
137
+
138
+ .svadmin-design-system-showcase__row,
139
+ .svadmin-design-system-showcase__grid {
140
+ display: flex;
141
+ flex-wrap: wrap;
142
+ align-items: center;
143
+ gap: 0.75rem;
144
+ }
145
+
146
+ .svadmin-design-system-showcase__grid > :global(*) {
147
+ min-width: 12rem;
148
+ flex: 1 1 12rem;
149
+ }
150
+
151
+ .svadmin-design-system-showcase__checkbox {
152
+ display: flex;
153
+ align-items: center;
154
+ gap: 0.5rem;
155
+ }
156
+
157
+ :global(.svadmin-design-system-showcase__trigger) {
158
+ border: 1px solid var(--border);
159
+ border-radius: 0.375rem;
160
+ background: var(--background);
161
+ padding: 0.375rem 0.625rem;
162
+ color: var(--foreground);
163
+ }
164
+ </style>
@@ -0,0 +1,3 @@
1
+ declare const DesignSystemShowcase: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type DesignSystemShowcase = ReturnType<typeof DesignSystemShowcase>;
3
+ export default DesignSystemShowcase;
@@ -1,6 +1,7 @@
1
- export type BadgeVariant = "default" | "secondary" | "destructive" | "subtle" | "subtle-success" | "subtle-warning" | "subtle-destructive" | "subtle-pill" | "outline" | "ghost" | "link";
1
+ import { type BadgeRecipeProps } from '../../../recipes.js';
2
+ export type BadgeVariant = NonNullable<BadgeRecipeProps["variant"]>;
2
3
  export declare const badgeVariants: ({ variant, class: className, className: extraClassName, }?: {
3
- variant?: BadgeVariant | null;
4
+ variant?: BadgeVariant | null | undefined;
4
5
  class?: string;
5
6
  className?: string;
6
7
  }) => string;
@@ -1,3 +1,2 @@
1
- import { uiBadge } from '../../../styled-system/recipes/index.js';
2
- export const badgeVariants = ({ variant = "default", class: className = "", className: extraClassName = "", } = {}) => ["svadmin-badge", variant && `svadmin-badge--${variant}`,
3
- uiBadge(variant ? { variant } : {}), className, extraClassName].filter(Boolean).join(" ");
1
+ import { badgeRecipe as uiBadge } from '../../../recipes.js';
2
+ export const badgeVariants = ({ variant, class: className = "", className: extraClassName = "", } = {}) => uiBadge({ variant, class: [className, extraClassName].filter(Boolean).join(" ") }).root;
@@ -13,10 +13,12 @@
13
13
  href,
14
14
  class: className,
15
15
  variant = "default",
16
+ size = "default",
16
17
  children,
17
18
  ...restProps
18
19
  }: WithElementRef<HTMLAnchorAttributes> & {
19
20
  variant?: BadgeVariantValue;
21
+ size?: "default" | "compact";
20
22
  } = $props();
21
23
  </script>
22
24
 
@@ -25,6 +27,7 @@
25
27
  bind:this={ref}
26
28
  data-slot="badge"
27
29
  data-variant={variant}
30
+ data-size={size}
28
31
  {href}
29
32
  class={cn(resolveBadgeVariants({ variant }), className)}
30
33
  {...restProps}
@@ -4,6 +4,7 @@ import type { HTMLAnchorAttributes } from "svelte/elements";
4
4
  import { type WithElementRef } from "../../../utils.js";
5
5
  type $$ComponentProps = WithElementRef<HTMLAnchorAttributes> & {
6
6
  variant?: BadgeVariantValue;
7
+ size?: "default" | "compact";
7
8
  };
8
9
  declare const Badge: import("svelte").Component<$$ComponentProps, {}, "ref">;
9
10
  type Badge = ReturnType<typeof Badge>;
@@ -1,8 +1,9 @@
1
- export type ButtonVariant = "default" | "outline" | "secondary" | "ghost" | "destructive" | "link";
2
- export type ButtonSize = "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg";
1
+ import { type ButtonRecipeProps } from '../../../recipes.js';
2
+ export type ButtonVariant = NonNullable<ButtonRecipeProps["variant"]>;
3
+ export type ButtonSize = NonNullable<ButtonRecipeProps["size"]>;
3
4
  export declare const buttonVariants: ({ variant, size, class: className, className: extraClassName, }?: {
4
- variant?: ButtonVariant | null;
5
- size?: ButtonSize | null;
5
+ variant?: ButtonVariant | null | undefined;
6
+ size?: ButtonSize | null | undefined;
6
7
  class?: string;
7
8
  className?: string;
8
9
  }) => string;