@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
@@ -1,16 +1,35 @@
1
+ import { type SpreadsheetCellFormat, type SpreadsheetWorkbook } from '@svadmin/core';
1
2
  export interface SheetData {
2
3
  id: string;
3
4
  name: string;
4
5
  rows: number;
5
6
  cols: number;
6
7
  cells: Record<string, string>;
8
+ formats?: Record<string, SpreadsheetCellFormat>;
9
+ }
10
+ export interface SpreadsheetLimits {
11
+ maxRows: number;
12
+ maxCols: number;
13
+ maxCells: number;
14
+ maxSheets: number;
15
+ maxCellLength: number;
16
+ maxFormulaLength: number;
17
+ maxFormulaDepth: number;
18
+ maxRangeCells: number;
19
+ maxFormulaSteps: number;
7
20
  }
8
21
  interface Props {
9
22
  sheets?: SheetData[];
10
23
  activeSheetId?: string;
24
+ scopeKey?: string;
11
25
  readonly?: boolean;
12
26
  onchange?: (sheets: SheetData[]) => void;
13
27
  onexport?: (csv: string) => void;
28
+ onworkbookexport?: (json: string) => void;
29
+ onxlsxexport?: (bytes: Uint8Array) => void | Promise<void>;
30
+ xlsxexporter?: (workbook: SpreadsheetWorkbook) => Promise<Uint8Array | undefined>;
31
+ xlsximporter?: (bytes: Uint8Array, limits: SpreadsheetLimits, signal: AbortSignal) => Promise<unknown>;
32
+ limits?: Partial<SpreadsheetLimits>;
14
33
  class?: string;
15
34
  }
16
35
  declare const SpreadsheetView: import("svelte").Component<Props, {}, "sheets" | "activeSheetId">;
@@ -0,0 +1,178 @@
1
+ <script lang="ts">
2
+ import { X } from '@lucide/svelte';
3
+ import { cn } from '../utils.js';
4
+
5
+ interface Props {
6
+ value?: string[];
7
+ name?: string;
8
+ placeholder?: string;
9
+ separator?: string;
10
+ maxItems?: number;
11
+ disabled?: boolean;
12
+ required?: boolean;
13
+ invalid?: boolean;
14
+ describedby?: string;
15
+ ariaLabel?: string;
16
+ class?: string;
17
+ onchange?: (value: string[]) => void;
18
+ }
19
+
20
+ let {
21
+ value = $bindable([]),
22
+ name,
23
+ placeholder = 'Add a tag',
24
+ separator = ',',
25
+ maxItems,
26
+ disabled = false,
27
+ required = false,
28
+ invalid = false,
29
+ describedby,
30
+ ariaLabel,
31
+ class: className = '',
32
+ onchange,
33
+ }: Props = $props();
34
+
35
+ let draft = $state('');
36
+ let composing = $state(false);
37
+
38
+ function normalized(values: readonly string[]): string[] {
39
+ return [...new Set(values.map(item => item.trim()).filter(Boolean))];
40
+ }
41
+
42
+ function update(next: string[]): void {
43
+ const result = normalized(next);
44
+ value = result;
45
+ onchange?.(result);
46
+ }
47
+
48
+ function add(raw: string): void {
49
+ if (disabled) return;
50
+ const candidates = raw.split(separator).map(item => item.trim()).filter(Boolean);
51
+ if (candidates.length === 0) return;
52
+ const available = maxItems === undefined ? candidates : candidates.slice(0, Math.max(0, maxItems - value.length));
53
+ update([...value, ...available]);
54
+ draft = '';
55
+ }
56
+
57
+ function remove(index: number): void {
58
+ if (disabled) return;
59
+ update(value.filter((_, itemIndex) => itemIndex !== index));
60
+ }
61
+
62
+ function handleKeydown(event: KeyboardEvent): void {
63
+ if (disabled || composing) return;
64
+ if (event.key === 'Enter' || event.key === separator) {
65
+ event.preventDefault();
66
+ add(draft);
67
+ } else if (event.key === 'Backspace' && draft === '' && value.length > 0) {
68
+ event.preventDefault();
69
+ remove(value.length - 1);
70
+ }
71
+ }
72
+ </script>
73
+
74
+ <div
75
+ class={cn('svadmin-tags-input', className)}
76
+ data-invalid={invalid ? 'true' : undefined}
77
+ data-disabled={disabled ? 'true' : undefined}
78
+ >
79
+ {#if name}
80
+ {#each value as tag (tag)}
81
+ <input type="hidden" {name} value={tag} />
82
+ {/each}
83
+ {/if}
84
+ {#each value as tag, index (tag)}
85
+ <span class="svadmin-tags-input__tag">
86
+ <span>{tag}</span>
87
+ <button
88
+ type="button"
89
+ aria-label={`Remove ${tag}`}
90
+ disabled={disabled}
91
+ onclick={() => remove(index)}
92
+ >
93
+ <X size={14} aria-hidden="true" />
94
+ </button>
95
+ </span>
96
+ {/each}
97
+ <input
98
+ value={draft}
99
+ {placeholder}
100
+ disabled={disabled || (maxItems !== undefined && value.length >= maxItems)}
101
+ required={required && value.length === 0}
102
+ aria-label={ariaLabel}
103
+ aria-invalid={invalid || undefined}
104
+ aria-describedby={describedby}
105
+ oninput={(event) => { draft = (event.currentTarget as HTMLInputElement).value; }}
106
+ onkeydown={handleKeydown}
107
+ oncompositionstart={() => { composing = true; }}
108
+ oncompositionend={(event) => { composing = false; draft = (event.currentTarget as HTMLInputElement).value; }}
109
+ />
110
+ </div>
111
+
112
+ <style>
113
+ .svadmin-tags-input {
114
+ display: flex;
115
+ flex-wrap: wrap;
116
+ align-items: center;
117
+ gap: 4px;
118
+ min-block-size: 36px;
119
+ padding: 4px 8px;
120
+ border: 1px solid var(--border);
121
+ border-radius: 6px;
122
+ background: var(--background);
123
+ }
124
+
125
+ .svadmin-tags-input:focus-within {
126
+ outline: 2px solid var(--ring);
127
+ outline-offset: 1px;
128
+ }
129
+
130
+ .svadmin-tags-input[data-invalid='true'] {
131
+ border-color: var(--destructive);
132
+ }
133
+
134
+ .svadmin-tags-input__tag {
135
+ display: inline-flex;
136
+ align-items: center;
137
+ gap: 4px;
138
+ max-inline-size: 100%;
139
+ padding: 2px 4px 2px 8px;
140
+ border: 1px solid var(--border);
141
+ border-radius: 4px;
142
+ background: var(--muted);
143
+ color: var(--foreground);
144
+ }
145
+
146
+ .svadmin-tags-input__tag span {
147
+ overflow-wrap: anywhere;
148
+ }
149
+
150
+ .svadmin-tags-input__tag button {
151
+ display: inline-grid;
152
+ place-items: center;
153
+ min-block-size: 24px;
154
+ min-inline-size: 24px;
155
+ border: 0;
156
+ border-radius: 4px;
157
+ background: transparent;
158
+ color: var(--muted-foreground);
159
+ cursor: pointer;
160
+ }
161
+
162
+ .svadmin-tags-input__tag button:hover,
163
+ .svadmin-tags-input__tag button:focus-visible {
164
+ background: var(--accent);
165
+ color: var(--accent-foreground);
166
+ }
167
+
168
+ .svadmin-tags-input input {
169
+ min-inline-size: 8rem;
170
+ flex: 1 1 8rem;
171
+ min-block-size: 28px;
172
+ border: 0;
173
+ outline: 0;
174
+ background: transparent;
175
+ color: var(--foreground);
176
+ font: inherit;
177
+ }
178
+ </style>
@@ -0,0 +1,17 @@
1
+ interface Props {
2
+ value?: string[];
3
+ name?: string;
4
+ placeholder?: string;
5
+ separator?: string;
6
+ maxItems?: number;
7
+ disabled?: boolean;
8
+ required?: boolean;
9
+ invalid?: boolean;
10
+ describedby?: string;
11
+ ariaLabel?: string;
12
+ class?: string;
13
+ onchange?: (value: string[]) => void;
14
+ }
15
+ declare const TagsInput: import("svelte").Component<Props, {}, "value">;
16
+ type TagsInput = ReturnType<typeof TagsInput>;
17
+ export default TagsInput;
@@ -0,0 +1,10 @@
1
+ <script lang="ts">
2
+ import type { ComponentProps } from 'svelte';
3
+ import DateTimeInput from './DateTimeInput.svelte';
4
+
5
+ export type TimePickerProps = Omit<ComponentProps<typeof DateTimeInput>, 'mode'>;
6
+
7
+ let { value = $bindable(null), ...props }: TimePickerProps = $props();
8
+ </script>
9
+
10
+ <DateTimeInput {...props} bind:value mode="time" />
@@ -0,0 +1,6 @@
1
+ import type { ComponentProps } from 'svelte';
2
+ import DateTimeInput from './DateTimeInput.svelte';
3
+ export type TimePickerProps = Omit<ComponentProps<typeof DateTimeInput>, 'mode'>;
4
+ declare const TimePicker: import("svelte").Component<TimePickerProps, {}, "value">;
5
+ type TimePicker = ReturnType<typeof TimePicker>;
6
+ export default TimePicker;
@@ -1,5 +1,4 @@
1
1
  <script lang="ts">
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
2
  import * as Tooltip from './ui/tooltip/index.js';
4
3
  import { Button } from './ui/button/index.js';
5
4
  import type { Snippet } from 'svelte';
@@ -43,8 +42,8 @@
43
42
  onclick?.(event);
44
43
  }
45
44
 
46
- function mergeButtonProps(primitiveProps: Record<string, any>) {
47
- const merged: Record<string, any> = { ...primitiveProps, ...restProps };
45
+ function mergeButtonProps(primitiveProps: Record<string, unknown>) {
46
+ const merged: Record<string, unknown> = { ...primitiveProps, ...restProps };
48
47
  for (const [key, userHandler] of Object.entries(restProps)) {
49
48
  const primitiveHandler = primitiveProps[key];
50
49
  if (!key.startsWith('on') || typeof userHandler !== 'function' || typeof primitiveHandler !== 'function') continue;
@@ -61,7 +60,7 @@
61
60
  <Tooltip.Trigger aria-describedby={restProps['aria-describedby']}>
62
61
  {#snippet child({ props })}
63
62
  {@const primitiveOnclick = props['onclick'] as ((event: MouseEvent) => void) | undefined}
64
- {@const buttonProps = { ...mergeButtonProps(props), href, target, rel, variant, size, type, class: className, 'aria-label': restProps['aria-label'] ?? tooltip, 'aria-describedby': props['aria-describedby'], onclick: (event: MouseEvent) => handleClick(event, primitiveOnclick), disabled, tabindex } as any}
63
+ {@const buttonProps = { ...mergeButtonProps(props), href, target, rel, variant, size, type, class: className, 'aria-label': typeof restProps['aria-label'] === 'string' ? restProps['aria-label'] : tooltip, 'aria-describedby': typeof props['aria-describedby'] === 'string' ? props['aria-describedby'] : undefined, onclick: (event: MouseEvent) => handleClick(event, primitiveOnclick), disabled, tabindex }}
65
64
  <Button {...buttonProps}>
66
65
  {@render children()}
67
66
  </Button>