@svadmin/ui 0.29.2 → 0.29.4

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 (444) hide show
  1. package/dist/README.md +18 -0
  2. package/dist/actions.d.ts +35 -0
  3. package/dist/actions.js +84 -0
  4. package/dist/app.css +673 -0
  5. package/dist/component-registry.svelte.d.ts +36 -0
  6. package/dist/component-registry.svelte.js +20 -0
  7. package/dist/components/AICommandBar.svelte +180 -0
  8. package/dist/components/AICommandBar.svelte.d.ts +6 -0
  9. package/dist/components/AboutSettings.svelte +106 -0
  10. package/dist/components/AboutSettings.svelte.d.ts +18 -0
  11. package/dist/components/AdminApp.svelte +199 -0
  12. package/dist/components/AdminApp.svelte.d.ts +26 -0
  13. package/dist/components/AnimatedCounter.svelte +46 -0
  14. package/dist/components/AnimatedCounter.svelte.d.ts +11 -0
  15. package/dist/components/AnomalyBadge.svelte +65 -0
  16. package/dist/components/AnomalyBadge.svelte.d.ts +16 -0
  17. package/dist/components/AppearanceSettings.svelte +183 -0
  18. package/dist/components/AppearanceSettings.svelte.d.ts +3 -0
  19. package/dist/components/AuditLogDrawer.svelte +93 -0
  20. package/dist/components/AuditLogDrawer.svelte.d.ts +8 -0
  21. package/dist/components/AuditLogViewer.svelte +226 -0
  22. package/dist/components/AuditLogViewer.svelte.d.ts +3 -0
  23. package/dist/components/Authenticated.svelte +51 -0
  24. package/dist/components/Authenticated.svelte.d.ts +11 -0
  25. package/dist/components/AutoForm.svelte +242 -0
  26. package/dist/components/AutoForm.svelte.d.ts +20 -0
  27. package/dist/components/AutoSaveIndicator.svelte +35 -0
  28. package/dist/components/AutoSaveIndicator.svelte.d.ts +9 -0
  29. package/dist/components/AutoTable.svelte +839 -0
  30. package/dist/components/AutoTable.svelte.d.ts +44 -0
  31. package/dist/components/Breadcrumbs.svelte +58 -0
  32. package/dist/components/Breadcrumbs.svelte.d.ts +3 -0
  33. package/dist/components/CanAccess.svelte +23 -0
  34. package/dist/components/CanAccess.svelte.d.ts +12 -0
  35. package/dist/components/CatchAllNavigate.svelte +21 -0
  36. package/dist/components/CatchAllNavigate.svelte.d.ts +3 -0
  37. package/dist/components/ChatDialog.svelte +535 -0
  38. package/dist/components/ChatDialog.svelte.d.ts +14 -0
  39. package/dist/components/ComboboxField.svelte +129 -0
  40. package/dist/components/ComboboxField.svelte.d.ts +17 -0
  41. package/dist/components/CommandPalette.svelte +135 -0
  42. package/dist/components/CommandPalette.svelte.d.ts +8 -0
  43. package/dist/components/ConfigErrorScreen.svelte +126 -0
  44. package/dist/components/ConfigErrorScreen.svelte.d.ts +11 -0
  45. package/dist/components/ConfirmDialog.svelte +53 -0
  46. package/dist/components/ConfirmDialog.svelte.d.ts +13 -0
  47. package/dist/components/CopilotPanel.svelte +163 -0
  48. package/dist/components/CopilotPanel.svelte.d.ts +6 -0
  49. package/dist/components/CreatePage.svelte +39 -0
  50. package/dist/components/CreatePage.svelte.d.ts +10 -0
  51. package/dist/components/DevTools.svelte +149 -0
  52. package/dist/components/DevTools.svelte.d.ts +3 -0
  53. package/dist/components/DraggableGrid.svelte +86 -0
  54. package/dist/components/DraggableGrid.svelte.d.ts +17 -0
  55. package/dist/components/DraggableHeader.svelte +112 -0
  56. package/dist/components/DraggableHeader.svelte.d.ts +25 -0
  57. package/dist/components/DrawerForm.svelte +35 -0
  58. package/dist/components/DrawerForm.svelte.d.ts +11 -0
  59. package/dist/components/EditPage.svelte +52 -0
  60. package/dist/components/EditPage.svelte.d.ts +12 -0
  61. package/dist/components/EmptyState.svelte +31 -0
  62. package/dist/components/EmptyState.svelte.d.ts +8 -0
  63. package/dist/components/ErrorBoundary.svelte +49 -0
  64. package/dist/components/ErrorBoundary.svelte.d.ts +12 -0
  65. package/dist/components/ErrorComponent.svelte +36 -0
  66. package/dist/components/ErrorComponent.svelte.d.ts +9 -0
  67. package/dist/components/FieldRenderer.svelte +357 -0
  68. package/dist/components/FieldRenderer.svelte.d.ts +13 -0
  69. package/dist/components/ForgotPasswordPage.svelte +112 -0
  70. package/dist/components/ForgotPasswordPage.svelte.d.ts +6 -0
  71. package/dist/components/Header.svelte +94 -0
  72. package/dist/components/Header.svelte.d.ts +12 -0
  73. package/dist/components/InferencerPanel.svelte +192 -0
  74. package/dist/components/InferencerPanel.svelte.d.ts +3 -0
  75. package/dist/components/InfiniteList.svelte +93 -0
  76. package/dist/components/InfiniteList.svelte.d.ts +20 -0
  77. package/dist/components/InlineEdit.svelte +88 -0
  78. package/dist/components/InlineEdit.svelte.d.ts +12 -0
  79. package/dist/components/InsightCard.svelte +98 -0
  80. package/dist/components/InsightCard.svelte.d.ts +11 -0
  81. package/dist/components/KeyboardShortcuts.svelte +61 -0
  82. package/dist/components/KeyboardShortcuts.svelte.d.ts +6 -0
  83. package/dist/components/Layout.svelte +167 -0
  84. package/dist/components/Layout.svelte.d.ts +11 -0
  85. package/dist/components/ListPage.svelte +71 -0
  86. package/dist/components/ListPage.svelte.d.ts +32 -0
  87. package/dist/components/LiveIndicator.svelte +58 -0
  88. package/dist/components/LiveIndicator.svelte.d.ts +12 -0
  89. package/dist/components/LoginPage.svelte +163 -0
  90. package/dist/components/LoginPage.svelte.d.ts +28 -0
  91. package/dist/components/MarkdownRenderer.svelte +127 -0
  92. package/dist/components/MarkdownRenderer.svelte.d.ts +11 -0
  93. package/dist/components/ModalForm.svelte +38 -0
  94. package/dist/components/ModalForm.svelte.d.ts +10 -0
  95. package/dist/components/NavigateToResource.svelte +20 -0
  96. package/dist/components/NavigateToResource.svelte.d.ts +3 -0
  97. package/dist/components/PageHeader.svelte +39 -0
  98. package/dist/components/PageHeader.svelte.d.ts +11 -0
  99. package/dist/components/PageSkeleton.svelte +71 -0
  100. package/dist/components/PageSkeleton.svelte.d.ts +7 -0
  101. package/dist/components/PasswordInput.svelte +96 -0
  102. package/dist/components/PasswordInput.svelte.d.ts +12 -0
  103. package/dist/components/PermissionMatrix.svelte +185 -0
  104. package/dist/components/PermissionMatrix.svelte.d.ts +19 -0
  105. package/dist/components/ProfilePage.svelte +284 -0
  106. package/dist/components/ProfilePage.svelte.d.ts +3 -0
  107. package/dist/components/RegisterPage.svelte +112 -0
  108. package/dist/components/RegisterPage.svelte.d.ts +7 -0
  109. package/dist/components/RolesSettings.svelte +146 -0
  110. package/dist/components/RolesSettings.svelte.d.ts +3 -0
  111. package/dist/components/SettingsPage.svelte +113 -0
  112. package/dist/components/SettingsPage.svelte.d.ts +3 -0
  113. package/dist/components/ShowPage.svelte +73 -0
  114. package/dist/components/ShowPage.svelte.d.ts +7 -0
  115. package/dist/components/Sidebar.svelte +417 -0
  116. package/dist/components/Sidebar.svelte.d.ts +14 -0
  117. package/dist/components/SidebarItem.svelte +129 -0
  118. package/dist/components/SidebarItem.svelte.d.ts +11 -0
  119. package/dist/components/SmartSuggest.svelte +158 -0
  120. package/dist/components/SmartSuggest.svelte.d.ts +19 -0
  121. package/dist/components/StatsCard.svelte +79 -0
  122. package/dist/components/StatsCard.svelte.d.ts +23 -0
  123. package/dist/components/StepsForm.svelte +192 -0
  124. package/dist/components/StepsForm.svelte.d.ts +13 -0
  125. package/dist/components/TaskQueueDrawer.svelte +158 -0
  126. package/dist/components/TaskQueueDrawer.svelte.d.ts +11 -0
  127. package/dist/components/TenantSwitcher.svelte +84 -0
  128. package/dist/components/TenantSwitcher.svelte.d.ts +12 -0
  129. package/dist/components/ThemedTitle.svelte +32 -0
  130. package/dist/components/ThemedTitle.svelte.d.ts +9 -0
  131. package/dist/components/Toast.svelte +46 -0
  132. package/dist/components/Toast.svelte.d.ts +3 -0
  133. package/dist/components/TooltipButton.svelte +42 -0
  134. package/dist/components/TooltipButton.svelte.d.ts +14 -0
  135. package/dist/components/UndoableNotification.svelte +69 -0
  136. package/dist/components/UndoableNotification.svelte.d.ts +9 -0
  137. package/dist/components/UpdatePasswordPage.svelte +89 -0
  138. package/dist/components/UpdatePasswordPage.svelte.d.ts +6 -0
  139. package/dist/components/VirtualTable.svelte +76 -0
  140. package/dist/components/VirtualTable.svelte.d.ts +27 -0
  141. package/dist/components/VoiceInput.svelte +120 -0
  142. package/dist/components/VoiceInput.svelte.d.ts +15 -0
  143. package/dist/components/buttons/CloneButton.svelte +30 -0
  144. package/dist/components/buttons/CloneButton.svelte.d.ts +13 -0
  145. package/dist/components/buttons/CreateButton.svelte +29 -0
  146. package/dist/components/buttons/CreateButton.svelte.d.ts +12 -0
  147. package/dist/components/buttons/DeleteButton.svelte +59 -0
  148. package/dist/components/buttons/DeleteButton.svelte.d.ts +15 -0
  149. package/dist/components/buttons/EditButton.svelte +30 -0
  150. package/dist/components/buttons/EditButton.svelte.d.ts +13 -0
  151. package/dist/components/buttons/ExportButton.svelte +30 -0
  152. package/dist/components/buttons/ExportButton.svelte.d.ts +12 -0
  153. package/dist/components/buttons/ImportButton.svelte +56 -0
  154. package/dist/components/buttons/ImportButton.svelte.d.ts +19 -0
  155. package/dist/components/buttons/ListButton.svelte +23 -0
  156. package/dist/components/buttons/ListButton.svelte.d.ts +8 -0
  157. package/dist/components/buttons/RefreshButton.svelte +36 -0
  158. package/dist/components/buttons/RefreshButton.svelte.d.ts +8 -0
  159. package/dist/components/buttons/SaveButton.svelte +27 -0
  160. package/dist/components/buttons/SaveButton.svelte.d.ts +9 -0
  161. package/dist/components/buttons/ShowButton.svelte +31 -0
  162. package/dist/components/buttons/ShowButton.svelte.d.ts +13 -0
  163. package/dist/components/buttons/index.d.ts +10 -0
  164. package/dist/components/buttons/index.js +10 -0
  165. package/dist/components/charts/BarChart.svelte +69 -0
  166. package/dist/components/charts/BarChart.svelte.d.ts +15 -0
  167. package/dist/components/charts/LineChart.svelte +115 -0
  168. package/dist/components/charts/LineChart.svelte.d.ts +17 -0
  169. package/dist/components/charts/PieChart.svelte +95 -0
  170. package/dist/components/charts/PieChart.svelte.d.ts +15 -0
  171. package/dist/components/charts/index.d.ts +3 -0
  172. package/dist/components/charts/index.js +3 -0
  173. package/dist/components/fieldComponentMap.d.ts +24 -0
  174. package/dist/components/fieldComponentMap.js +65 -0
  175. package/dist/components/fields/ArrayField.svelte +86 -0
  176. package/dist/components/fields/ArrayField.svelte.d.ts +9 -0
  177. package/dist/components/fields/BooleanField.svelte +13 -0
  178. package/dist/components/fields/BooleanField.svelte.d.ts +8 -0
  179. package/dist/components/fields/DateField.svelte +6 -0
  180. package/dist/components/fields/DateField.svelte.d.ts +8 -0
  181. package/dist/components/fields/EmailField.svelte +9 -0
  182. package/dist/components/fields/EmailField.svelte.d.ts +6 -0
  183. package/dist/components/fields/FileField.svelte +14 -0
  184. package/dist/components/fields/FileField.svelte.d.ts +7 -0
  185. package/dist/components/fields/ImageField.svelte +9 -0
  186. package/dist/components/fields/ImageField.svelte.d.ts +9 -0
  187. package/dist/components/fields/JsonField.svelte +72 -0
  188. package/dist/components/fields/JsonField.svelte.d.ts +6 -0
  189. package/dist/components/fields/MarkdownField.svelte +9 -0
  190. package/dist/components/fields/MarkdownField.svelte.d.ts +6 -0
  191. package/dist/components/fields/MultiSelectField.svelte +21 -0
  192. package/dist/components/fields/MultiSelectField.svelte.d.ts +10 -0
  193. package/dist/components/fields/NumberField.svelte +6 -0
  194. package/dist/components/fields/NumberField.svelte.d.ts +8 -0
  195. package/dist/components/fields/RelationField.svelte +24 -0
  196. package/dist/components/fields/RelationField.svelte.d.ts +8 -0
  197. package/dist/components/fields/RichTextField.svelte +35 -0
  198. package/dist/components/fields/RichTextField.svelte.d.ts +7 -0
  199. package/dist/components/fields/SelectField.svelte +14 -0
  200. package/dist/components/fields/SelectField.svelte.d.ts +10 -0
  201. package/dist/components/fields/TagField.svelte +12 -0
  202. package/dist/components/fields/TagField.svelte.d.ts +6 -0
  203. package/dist/components/fields/TextField.svelte +11 -0
  204. package/dist/components/fields/TextField.svelte.d.ts +7 -0
  205. package/dist/components/fields/UrlField.svelte +14 -0
  206. package/dist/components/fields/UrlField.svelte.d.ts +7 -0
  207. package/dist/components/ui/alert/alert-description.svelte +17 -0
  208. package/dist/components/ui/alert/alert-description.svelte.d.ts +6 -0
  209. package/dist/components/ui/alert/alert-title.svelte +17 -0
  210. package/dist/components/ui/alert/alert-title.svelte.d.ts +6 -0
  211. package/dist/components/ui/alert/alert.svelte +44 -0
  212. package/dist/components/ui/alert/alert.svelte.d.ts +32 -0
  213. package/dist/components/ui/alert/index.d.ts +4 -0
  214. package/dist/components/ui/alert/index.js +5 -0
  215. package/dist/components/ui/alert-dialog/alert-dialog-content.svelte +29 -0
  216. package/dist/components/ui/alert-dialog/alert-dialog-content.svelte.d.ts +10 -0
  217. package/dist/components/ui/alert-dialog/alert-dialog-description.svelte +16 -0
  218. package/dist/components/ui/alert-dialog/alert-dialog-description.svelte.d.ts +7 -0
  219. package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte +11 -0
  220. package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte.d.ts +8 -0
  221. package/dist/components/ui/alert-dialog/alert-dialog-header.svelte +11 -0
  222. package/dist/components/ui/alert-dialog/alert-dialog-header.svelte.d.ts +8 -0
  223. package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte +16 -0
  224. package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte.d.ts +7 -0
  225. package/dist/components/ui/alert-dialog/alert-dialog-portal.svelte +6 -0
  226. package/dist/components/ui/alert-dialog/alert-dialog-portal.svelte.d.ts +3 -0
  227. package/dist/components/ui/alert-dialog/alert-dialog-title.svelte +16 -0
  228. package/dist/components/ui/alert-dialog/alert-dialog-title.svelte.d.ts +7 -0
  229. package/dist/components/ui/alert-dialog/index.d.ts +13 -0
  230. package/dist/components/ui/alert-dialog/index.js +13 -0
  231. package/dist/components/ui/avatar/avatar.svelte +63 -0
  232. package/dist/components/ui/avatar/avatar.svelte.d.ts +32 -0
  233. package/dist/components/ui/avatar/index.d.ts +2 -0
  234. package/dist/components/ui/avatar/index.js +2 -0
  235. package/dist/components/ui/badge/badge.svelte +49 -0
  236. package/dist/components/ui/badge/badge.svelte.d.ts +38 -0
  237. package/dist/components/ui/badge/index.d.ts +2 -0
  238. package/dist/components/ui/badge/index.js +3 -0
  239. package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +18 -0
  240. package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte.d.ts +4 -0
  241. package/dist/components/ui/breadcrumb/breadcrumb-item.svelte +15 -0
  242. package/dist/components/ui/breadcrumb/breadcrumb-item.svelte.d.ts +8 -0
  243. package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +15 -0
  244. package/dist/components/ui/breadcrumb/breadcrumb-link.svelte.d.ts +8 -0
  245. package/dist/components/ui/breadcrumb/breadcrumb-list.svelte +15 -0
  246. package/dist/components/ui/breadcrumb/breadcrumb-list.svelte.d.ts +8 -0
  247. package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +18 -0
  248. package/dist/components/ui/breadcrumb/breadcrumb-page.svelte.d.ts +8 -0
  249. package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +22 -0
  250. package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte.d.ts +8 -0
  251. package/dist/components/ui/breadcrumb/breadcrumb.svelte +11 -0
  252. package/dist/components/ui/breadcrumb/breadcrumb.svelte.d.ts +8 -0
  253. package/dist/components/ui/breadcrumb/index.d.ts +7 -0
  254. package/dist/components/ui/breadcrumb/index.js +7 -0
  255. package/dist/components/ui/button/button.svelte +90 -0
  256. package/dist/components/ui/button/button.svelte.d.ts +70 -0
  257. package/dist/components/ui/button/index.d.ts +2 -0
  258. package/dist/components/ui/button/index.js +5 -0
  259. package/dist/components/ui/card/card-action.svelte +23 -0
  260. package/dist/components/ui/card/card-action.svelte.d.ts +5 -0
  261. package/dist/components/ui/card/card-content.svelte +20 -0
  262. package/dist/components/ui/card/card-content.svelte.d.ts +5 -0
  263. package/dist/components/ui/card/card-description.svelte +20 -0
  264. package/dist/components/ui/card/card-description.svelte.d.ts +5 -0
  265. package/dist/components/ui/card/card-footer.svelte +20 -0
  266. package/dist/components/ui/card/card-footer.svelte.d.ts +5 -0
  267. package/dist/components/ui/card/card-header.svelte +23 -0
  268. package/dist/components/ui/card/card-header.svelte.d.ts +5 -0
  269. package/dist/components/ui/card/card-title.svelte +15 -0
  270. package/dist/components/ui/card/card-title.svelte.d.ts +5 -0
  271. package/dist/components/ui/card/card.svelte +22 -0
  272. package/dist/components/ui/card/card.svelte.d.ts +8 -0
  273. package/dist/components/ui/card/index.d.ts +8 -0
  274. package/dist/components/ui/card/index.js +10 -0
  275. package/dist/components/ui/checkbox/checkbox.svelte +39 -0
  276. package/dist/components/ui/checkbox/checkbox.svelte.d.ts +4 -0
  277. package/dist/components/ui/checkbox/index.d.ts +2 -0
  278. package/dist/components/ui/checkbox/index.js +4 -0
  279. package/dist/components/ui/collapsible/index.d.ts +5 -0
  280. package/dist/components/ui/collapsible/index.js +5 -0
  281. package/dist/components/ui/command/command-dialog.svelte +31 -0
  282. package/dist/components/ui/command/command-dialog.svelte.d.ts +10 -0
  283. package/dist/components/ui/command/index.d.ts +2 -0
  284. package/dist/components/ui/command/index.js +2 -0
  285. package/dist/components/ui/context-menu/index.d.ts +9 -0
  286. package/dist/components/ui/context-menu/index.js +9 -0
  287. package/dist/components/ui/dialog/dialog-close.svelte +11 -0
  288. package/dist/components/ui/dialog/dialog-close.svelte.d.ts +4 -0
  289. package/dist/components/ui/dialog/dialog-content.svelte +48 -0
  290. package/dist/components/ui/dialog/dialog-content.svelte.d.ts +13 -0
  291. package/dist/components/ui/dialog/dialog-description.svelte +17 -0
  292. package/dist/components/ui/dialog/dialog-description.svelte.d.ts +4 -0
  293. package/dist/components/ui/dialog/dialog-footer.svelte +32 -0
  294. package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +8 -0
  295. package/dist/components/ui/dialog/dialog-header.svelte +20 -0
  296. package/dist/components/ui/dialog/dialog-header.svelte.d.ts +5 -0
  297. package/dist/components/ui/dialog/dialog-overlay.svelte +17 -0
  298. package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
  299. package/dist/components/ui/dialog/dialog-portal.svelte +7 -0
  300. package/dist/components/ui/dialog/dialog-portal.svelte.d.ts +3 -0
  301. package/dist/components/ui/dialog/dialog-title.svelte +17 -0
  302. package/dist/components/ui/dialog/dialog-title.svelte.d.ts +4 -0
  303. package/dist/components/ui/dialog/dialog-trigger.svelte +11 -0
  304. package/dist/components/ui/dialog/dialog-trigger.svelte.d.ts +4 -0
  305. package/dist/components/ui/dialog/dialog.svelte +7 -0
  306. package/dist/components/ui/dialog/dialog.svelte.d.ts +3 -0
  307. package/dist/components/ui/dialog/index.d.ts +11 -0
  308. package/dist/components/ui/dialog/index.js +13 -0
  309. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +43 -0
  310. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
  311. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +35 -0
  312. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +8 -0
  313. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +36 -0
  314. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +9 -0
  315. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +10 -0
  316. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +6 -0
  317. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +27 -0
  318. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +11 -0
  319. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +45 -0
  320. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte.d.ts +9 -0
  321. package/dist/components/ui/dropdown-menu/index.d.ts +7 -0
  322. package/dist/components/ui/dropdown-menu/index.js +7 -0
  323. package/dist/components/ui/input/index.d.ts +2 -0
  324. package/dist/components/ui/input/index.js +4 -0
  325. package/dist/components/ui/input/input.svelte +48 -0
  326. package/dist/components/ui/input/input.svelte.d.ts +13 -0
  327. package/dist/components/ui/label/index.d.ts +1 -0
  328. package/dist/components/ui/label/index.js +1 -0
  329. package/dist/components/ui/label/label.svelte +18 -0
  330. package/dist/components/ui/label/label.svelte.d.ts +5 -0
  331. package/dist/components/ui/pagination/index.d.ts +7 -0
  332. package/dist/components/ui/pagination/index.js +7 -0
  333. package/dist/components/ui/pagination/pagination-content.svelte +11 -0
  334. package/dist/components/ui/pagination/pagination-content.svelte.d.ts +8 -0
  335. package/dist/components/ui/pagination/pagination-ellipsis.svelte +12 -0
  336. package/dist/components/ui/pagination/pagination-ellipsis.svelte.d.ts +4 -0
  337. package/dist/components/ui/pagination/pagination-item.svelte +11 -0
  338. package/dist/components/ui/pagination/pagination-item.svelte.d.ts +8 -0
  339. package/dist/components/ui/pagination/pagination-link.svelte +26 -0
  340. package/dist/components/ui/pagination/pagination-link.svelte.d.ts +9 -0
  341. package/dist/components/ui/pagination/pagination-next.svelte +22 -0
  342. package/dist/components/ui/pagination/pagination-next.svelte.d.ts +8 -0
  343. package/dist/components/ui/pagination/pagination-previous.svelte +22 -0
  344. package/dist/components/ui/pagination/pagination-previous.svelte.d.ts +8 -0
  345. package/dist/components/ui/pagination/pagination.svelte +11 -0
  346. package/dist/components/ui/pagination/pagination.svelte.d.ts +8 -0
  347. package/dist/components/ui/popover/index.d.ts +6 -0
  348. package/dist/components/ui/popover/index.js +6 -0
  349. package/dist/components/ui/popover/popover-content.svelte +25 -0
  350. package/dist/components/ui/popover/popover-content.svelte.d.ts +7 -0
  351. package/dist/components/ui/progress/index.d.ts +1 -0
  352. package/dist/components/ui/progress/index.js +1 -0
  353. package/dist/components/ui/progress/progress.svelte +22 -0
  354. package/dist/components/ui/progress/progress.svelte.d.ts +8 -0
  355. package/dist/components/ui/scroll-area/index.d.ts +1 -0
  356. package/dist/components/ui/scroll-area/index.js +1 -0
  357. package/dist/components/ui/scroll-area/scroll-area.svelte +20 -0
  358. package/dist/components/ui/scroll-area/scroll-area.svelte.d.ts +9 -0
  359. package/dist/components/ui/select/index.d.ts +2 -0
  360. package/dist/components/ui/select/index.js +2 -0
  361. package/dist/components/ui/select/select.svelte +36 -0
  362. package/dist/components/ui/select/select.svelte.d.ts +8 -0
  363. package/dist/components/ui/separator/index.d.ts +2 -0
  364. package/dist/components/ui/separator/index.js +4 -0
  365. package/dist/components/ui/separator/separator.svelte +23 -0
  366. package/dist/components/ui/separator/separator.svelte.d.ts +4 -0
  367. package/dist/components/ui/sheet/index.d.ts +7 -0
  368. package/dist/components/ui/sheet/index.js +7 -0
  369. package/dist/components/ui/sheet/sheet-content.svelte +28 -0
  370. package/dist/components/ui/sheet/sheet-content.svelte.d.ts +8 -0
  371. package/dist/components/ui/sheet/sheet-description.svelte +22 -0
  372. package/dist/components/ui/sheet/sheet-description.svelte.d.ts +6 -0
  373. package/dist/components/ui/sheet/sheet-footer.svelte +22 -0
  374. package/dist/components/ui/sheet/sheet-footer.svelte.d.ts +6 -0
  375. package/dist/components/ui/sheet/sheet-header.svelte +22 -0
  376. package/dist/components/ui/sheet/sheet-header.svelte.d.ts +6 -0
  377. package/dist/components/ui/sheet/sheet-title.svelte +22 -0
  378. package/dist/components/ui/sheet/sheet-title.svelte.d.ts +6 -0
  379. package/dist/components/ui/sheet/sheet.svelte +78 -0
  380. package/dist/components/ui/sheet/sheet.svelte.d.ts +10 -0
  381. package/dist/components/ui/skeleton/index.d.ts +2 -0
  382. package/dist/components/ui/skeleton/index.js +2 -0
  383. package/dist/components/ui/skeleton/skeleton.svelte +21 -0
  384. package/dist/components/ui/skeleton/skeleton.svelte.d.ts +8 -0
  385. package/dist/components/ui/switch/index.d.ts +2 -0
  386. package/dist/components/ui/switch/index.js +2 -0
  387. package/dist/components/ui/switch/switch.svelte +49 -0
  388. package/dist/components/ui/switch/switch.svelte.d.ts +10 -0
  389. package/dist/components/ui/table/index.d.ts +9 -0
  390. package/dist/components/ui/table/index.js +11 -0
  391. package/dist/components/ui/table/table-body.svelte +15 -0
  392. package/dist/components/ui/table/table-body.svelte.d.ts +5 -0
  393. package/dist/components/ui/table/table-caption.svelte +20 -0
  394. package/dist/components/ui/table/table-caption.svelte.d.ts +5 -0
  395. package/dist/components/ui/table/table-cell.svelte +15 -0
  396. package/dist/components/ui/table/table-cell.svelte.d.ts +5 -0
  397. package/dist/components/ui/table/table-footer.svelte +20 -0
  398. package/dist/components/ui/table/table-footer.svelte.d.ts +5 -0
  399. package/dist/components/ui/table/table-head.svelte +15 -0
  400. package/dist/components/ui/table/table-head.svelte.d.ts +5 -0
  401. package/dist/components/ui/table/table-header.svelte +20 -0
  402. package/dist/components/ui/table/table-header.svelte.d.ts +5 -0
  403. package/dist/components/ui/table/table-row.svelte +15 -0
  404. package/dist/components/ui/table/table-row.svelte.d.ts +5 -0
  405. package/dist/components/ui/table/table.svelte +17 -0
  406. package/dist/components/ui/table/table.svelte.d.ts +5 -0
  407. package/dist/components/ui/tabs/index.d.ts +5 -0
  408. package/dist/components/ui/tabs/index.js +5 -0
  409. package/dist/components/ui/tabs/tabs-content.svelte +30 -0
  410. package/dist/components/ui/tabs/tabs-content.svelte.d.ts +9 -0
  411. package/dist/components/ui/tabs/tabs-list.svelte +26 -0
  412. package/dist/components/ui/tabs/tabs-list.svelte.d.ts +6 -0
  413. package/dist/components/ui/tabs/tabs-trigger.svelte +37 -0
  414. package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +9 -0
  415. package/dist/components/ui/tabs/tabs.svelte +27 -0
  416. package/dist/components/ui/tabs/tabs.svelte.d.ts +9 -0
  417. package/dist/components/ui/textarea/index.d.ts +2 -0
  418. package/dist/components/ui/textarea/index.js +2 -0
  419. package/dist/components/ui/textarea/textarea.svelte +24 -0
  420. package/dist/components/ui/textarea/textarea.svelte.d.ts +6 -0
  421. package/dist/components/ui/tooltip/index.d.ts +6 -0
  422. package/dist/components/ui/tooltip/index.js +8 -0
  423. package/dist/components/ui/tooltip/tooltip-content.svelte +52 -0
  424. package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +11 -0
  425. package/dist/components/ui/tooltip/tooltip-portal.svelte +7 -0
  426. package/dist/components/ui/tooltip/tooltip-portal.svelte.d.ts +4 -0
  427. package/dist/components/ui/tooltip/tooltip-provider.svelte +7 -0
  428. package/dist/components/ui/tooltip/tooltip-provider.svelte.d.ts +4 -0
  429. package/dist/components/ui/tooltip/tooltip-trigger.svelte +7 -0
  430. package/dist/components/ui/tooltip/tooltip-trigger.svelte.d.ts +4 -0
  431. package/dist/components/ui/tooltip/tooltip.svelte +10 -0
  432. package/dist/components/ui/tooltip/tooltip.svelte.d.ts +4 -0
  433. package/dist/editor-config.svelte.d.ts +15 -0
  434. package/dist/editor-config.svelte.js +19 -0
  435. package/dist/index.d.ts +117 -0
  436. package/dist/index.js +127 -0
  437. package/dist/markdown-deps.d.ts +21 -0
  438. package/dist/router-state.svelte.d.ts +5 -0
  439. package/dist/router-state.svelte.js +58 -0
  440. package/dist/types.d.ts +42 -0
  441. package/dist/types.js +1 -0
  442. package/dist/utils.d.ts +16 -0
  443. package/dist/utils.js +5 -0
  444. package/package.json +3 -3
@@ -0,0 +1,115 @@
1
+ <script lang="ts">
2
+ interface DataPoint {
3
+ label: string;
4
+ value: number;
5
+ }
6
+
7
+ interface Props {
8
+ data: DataPoint[];
9
+ height?: number;
10
+ color?: string;
11
+ /** Show dots at data points */
12
+ showDots?: boolean;
13
+ /** Fill area under the line */
14
+ fill?: boolean;
15
+ class?: string;
16
+ }
17
+
18
+ let { data, height = 200, color = 'var(--primary)', showDots = true, fill = true, class: className = '' }: Props = $props();
19
+
20
+ const padding = { top: 20, right: 20, bottom: 30, left: 40 };
21
+ const chartWidth = $derived(Math.max(data.length * 60, 300));
22
+ const chartHeight = $derived(height - padding.top - padding.bottom);
23
+
24
+ const maxValue = $derived(Math.max(...data.map(d => d.value), 1));
25
+ const minValue = $derived(Math.min(...data.map(d => d.value), 0));
26
+ const range = $derived(maxValue - minValue || 1);
27
+
28
+ function getX(i: number): number {
29
+ if (data.length <= 1) return padding.left + chartWidth / 2;
30
+ return padding.left + (i / (data.length - 1)) * (chartWidth - padding.left - padding.right);
31
+ }
32
+
33
+ function getY(value: number): number {
34
+ return padding.top + chartHeight - ((value - minValue) / range) * chartHeight;
35
+ }
36
+
37
+ const linePath = $derived(
38
+ data.map((d, i) => `${i === 0 ? 'M' : 'L'} ${getX(i)} ${getY(d.value)}`).join(' ')
39
+ );
40
+
41
+ const areaPath = $derived(
42
+ linePath + ` L ${getX(data.length - 1)} ${padding.top + chartHeight} L ${getX(0)} ${padding.top + chartHeight} Z`
43
+ );
44
+ </script>
45
+
46
+ <div class="w-full overflow-x-auto {className}">
47
+ <svg viewBox="0 0 {chartWidth} {height}" class="w-full" style="min-width: {Math.min(chartWidth, 300)}px;">
48
+ <!-- Grid lines -->
49
+ {#each [0, 0.25, 0.5, 0.75, 1] as ratio}
50
+ {@const y = padding.top + chartHeight * (1 - ratio)}
51
+ <line
52
+ x1={padding.left}
53
+ y1={y}
54
+ x2={chartWidth - padding.right}
55
+ y2={y}
56
+ stroke="var(--border)"
57
+ stroke-width="1"
58
+ stroke-dasharray={ratio === 0 ? 'none' : '4 4'}
59
+ opacity="0.5"
60
+ />
61
+ <text x={padding.left - 8} y={y + 4} text-anchor="end" fill="var(--muted-foreground)" font-size="10">
62
+ {Math.round(minValue + range * ratio)}
63
+ </text>
64
+ {/each}
65
+
66
+ <!-- Area fill -->
67
+ {#if fill && data.length > 1}
68
+ <path
69
+ d={areaPath}
70
+ fill={color}
71
+ opacity="0.08"
72
+ />
73
+ {/if}
74
+
75
+ <!-- Line -->
76
+ {#if data.length > 1}
77
+ <path
78
+ d={linePath}
79
+ fill="none"
80
+ stroke={color}
81
+ stroke-width="2"
82
+ stroke-linecap="round"
83
+ stroke-linejoin="round"
84
+ >
85
+ <animate attributeName="stroke-dashoffset" from="2000" to="0" dur="1s" fill="freeze" />
86
+ </path>
87
+ {/if}
88
+
89
+ <!-- Dots -->
90
+ {#if showDots}
91
+ {#each data as point, i}
92
+ <circle
93
+ cx={getX(i)}
94
+ cy={getY(point.value)}
95
+ r="4"
96
+ fill="var(--background)"
97
+ stroke={color}
98
+ stroke-width="2"
99
+ class="transition-all duration-200 hover:r-[6]"
100
+ />
101
+ {/each}
102
+ {/if}
103
+
104
+ <!-- X-axis labels -->
105
+ {#each data as point, i}
106
+ <text
107
+ x={getX(i)}
108
+ y={height - 4}
109
+ text-anchor="middle"
110
+ fill="var(--muted-foreground)"
111
+ font-size="10"
112
+ >{point.label}</text>
113
+ {/each}
114
+ </svg>
115
+ </div>
@@ -0,0 +1,17 @@
1
+ interface DataPoint {
2
+ label: string;
3
+ value: number;
4
+ }
5
+ interface Props {
6
+ data: DataPoint[];
7
+ height?: number;
8
+ color?: string;
9
+ /** Show dots at data points */
10
+ showDots?: boolean;
11
+ /** Fill area under the line */
12
+ fill?: boolean;
13
+ class?: string;
14
+ }
15
+ declare const LineChart: import("svelte").Component<Props, {}, "">;
16
+ type LineChart = ReturnType<typeof LineChart>;
17
+ export default LineChart;
@@ -0,0 +1,95 @@
1
+ <script lang="ts">
2
+ interface Slice {
3
+ label: string;
4
+ value: number;
5
+ color: string;
6
+ }
7
+
8
+ interface Props {
9
+ data: Slice[];
10
+ size?: number;
11
+ /** Donut hole ratio (0 = pie, 0.6 = donut) */
12
+ donut?: number;
13
+ class?: string;
14
+ }
15
+
16
+ let { data, size = 200, donut = 0.6, class: className = '' }: Props = $props();
17
+
18
+ const total = $derived(data.reduce((sum, d) => sum + d.value, 0) || 1);
19
+ const center = $derived(size / 2);
20
+ const radius = $derived(size / 2 - 8);
21
+ const innerRadius = $derived(radius * donut);
22
+
23
+ function getArcPath(startAngle: number, endAngle: number, outer: number, inner: number): string {
24
+ const startOuter = polarToCartesian(center, center, outer, endAngle);
25
+ const endOuter = polarToCartesian(center, center, outer, startAngle);
26
+ const startInner = polarToCartesian(center, center, inner, startAngle);
27
+ const endInner = polarToCartesian(center, center, inner, endAngle);
28
+ const largeArc = endAngle - startAngle > 180 ? 1 : 0;
29
+
30
+ return [
31
+ `M ${startOuter.x} ${startOuter.y}`,
32
+ `A ${outer} ${outer} 0 ${largeArc} 0 ${endOuter.x} ${endOuter.y}`,
33
+ inner > 0 ? `L ${startInner.x} ${startInner.y}` : `L ${center} ${center}`,
34
+ inner > 0 ? `A ${inner} ${inner} 0 ${largeArc} 1 ${endInner.x} ${endInner.y}` : '',
35
+ 'Z',
36
+ ].join(' ');
37
+ }
38
+
39
+ function polarToCartesian(cx: number, cy: number, r: number, angleDeg: number) {
40
+ const rad = ((angleDeg - 90) * Math.PI) / 180;
41
+ return { x: cx + r * Math.cos(rad), y: cy + r * Math.sin(rad) };
42
+ }
43
+
44
+ const slices = $derived.by(() => {
45
+ let currentAngle = 0;
46
+ return data.map(d => {
47
+ const angle = (d.value / total) * 360;
48
+ const slice = {
49
+ ...d,
50
+ startAngle: currentAngle,
51
+ endAngle: currentAngle + angle,
52
+ percentage: ((d.value / total) * 100).toFixed(1),
53
+ };
54
+ currentAngle += angle;
55
+ return slice;
56
+ });
57
+ });
58
+ </script>
59
+
60
+ <div class="inline-flex flex-col items-center gap-3 {className}">
61
+ <svg viewBox="0 0 {size} {size}" width={size} height={size}>
62
+ {#each slices as slice, i}
63
+ <path
64
+ d={getArcPath(slice.startAngle, slice.endAngle, radius, innerRadius)}
65
+ fill={slice.color}
66
+ class="transition-all duration-200 hover:opacity-80"
67
+ stroke="var(--background)"
68
+ stroke-width="2"
69
+ >
70
+ <animate attributeName="opacity" from="0" to="1" dur="0.4s" begin="{i * 0.1}s" fill="freeze" />
71
+ </path>
72
+ {/each}
73
+
74
+ <!-- Center label (donut only) -->
75
+ {#if donut > 0}
76
+ <text x={center} y={center - 6} text-anchor="middle" fill="var(--foreground)" font-size="20" font-weight="600">
77
+ {total.toLocaleString()}
78
+ </text>
79
+ <text x={center} y={center + 12} text-anchor="middle" fill="var(--muted-foreground)" font-size="11">
80
+ Total
81
+ </text>
82
+ {/if}
83
+ </svg>
84
+
85
+ <!-- Legend -->
86
+ <div class="flex flex-wrap justify-center gap-x-4 gap-y-1">
87
+ {#each slices as slice}
88
+ <div class="flex items-center gap-1.5 text-xs">
89
+ <span class="h-2.5 w-2.5 rounded-full" style="background-color: {slice.color};"></span>
90
+ <span class="text-muted-foreground">{slice.label}</span>
91
+ <span class="font-medium text-foreground">{slice.percentage}%</span>
92
+ </div>
93
+ {/each}
94
+ </div>
95
+ </div>
@@ -0,0 +1,15 @@
1
+ interface Slice {
2
+ label: string;
3
+ value: number;
4
+ color: string;
5
+ }
6
+ interface Props {
7
+ data: Slice[];
8
+ size?: number;
9
+ /** Donut hole ratio (0 = pie, 0.6 = donut) */
10
+ donut?: number;
11
+ class?: string;
12
+ }
13
+ declare const PieChart: import("svelte").Component<Props, {}, "">;
14
+ type PieChart = ReturnType<typeof PieChart>;
15
+ export default PieChart;
@@ -0,0 +1,3 @@
1
+ export { default as BarChart } from './BarChart.svelte';
2
+ export { default as LineChart } from './LineChart.svelte';
3
+ export { default as PieChart } from './PieChart.svelte';
@@ -0,0 +1,3 @@
1
+ export { default as BarChart } from './BarChart.svelte';
2
+ export { default as LineChart } from './LineChart.svelte';
3
+ export { default as PieChart } from './PieChart.svelte';
@@ -0,0 +1,24 @@
1
+ import type { Component } from 'svelte';
2
+ export interface FieldComponentMap {
3
+ [fieldType: string]: Component<any>;
4
+ }
5
+ /**
6
+ * Built-in display components for show/detail pages.
7
+ * Keys match FieldDefinition.type values.
8
+ */
9
+ export declare const builtinDisplayComponents: FieldComponentMap;
10
+ /**
11
+ * Register a custom field display component for a given field type.
12
+ * The component will be used by ShowPage and any other display contexts.
13
+ */
14
+ export declare function registerDisplayComponent(fieldType: string, component: Component<any>): void;
15
+ /**
16
+ * Get the display component for a field type.
17
+ * Custom components take precedence over built-in ones.
18
+ * Returns undefined if no component is registered for the type.
19
+ */
20
+ export declare function getDisplayComponent(fieldType: string): Component<any> | undefined;
21
+ /**
22
+ * Check if a field type has a display component (custom or built-in).
23
+ */
24
+ export declare function hasDisplayComponent(fieldType: string): boolean;
@@ -0,0 +1,65 @@
1
+ // Shared field type → display component mapping
2
+ // Used by both ShowPage and FieldRenderer to avoid duplicate if/else chains.
3
+ // Components are lazily resolved by field type at runtime.
4
+ // Default display component map (read-only field display)
5
+ // Dynamically imports components only when first used
6
+ const displayCache = new Map();
7
+ // Pre-import all field display components (tree-shaken by bundler)
8
+ import BooleanField from './fields/BooleanField.svelte';
9
+ import ImageField from './fields/ImageField.svelte';
10
+ import TagField from './fields/TagField.svelte';
11
+ import DateField from './fields/DateField.svelte';
12
+ import EmailField from './fields/EmailField.svelte';
13
+ import UrlField from './fields/UrlField.svelte';
14
+ import SelectField from './fields/SelectField.svelte';
15
+ import MultiSelectField from './fields/MultiSelectField.svelte';
16
+ import RelationField from './fields/RelationField.svelte';
17
+ import JsonField from './fields/JsonField.svelte';
18
+ import RichTextField from './fields/RichTextField.svelte';
19
+ import NumberField from './fields/NumberField.svelte';
20
+ import FileField from './fields/FileField.svelte';
21
+ /**
22
+ * Built-in display components for show/detail pages.
23
+ * Keys match FieldDefinition.type values.
24
+ */
25
+ export const builtinDisplayComponents = {
26
+ boolean: BooleanField,
27
+ image: ImageField,
28
+ images: ImageField,
29
+ tags: TagField,
30
+ date: DateField,
31
+ email: EmailField,
32
+ url: UrlField,
33
+ select: SelectField,
34
+ multiselect: MultiSelectField,
35
+ relation: RelationField,
36
+ json: JsonField,
37
+ richtext: RichTextField,
38
+ textarea: RichTextField,
39
+ number: NumberField,
40
+ file: FileField,
41
+ };
42
+ // ─── Custom component registry ─────────────────────────────────
43
+ // Users can register custom field display components at runtime
44
+ const customDisplayComponents = new Map();
45
+ /**
46
+ * Register a custom field display component for a given field type.
47
+ * The component will be used by ShowPage and any other display contexts.
48
+ */
49
+ export function registerDisplayComponent(fieldType, component) {
50
+ customDisplayComponents.set(fieldType, component);
51
+ }
52
+ /**
53
+ * Get the display component for a field type.
54
+ * Custom components take precedence over built-in ones.
55
+ * Returns undefined if no component is registered for the type.
56
+ */
57
+ export function getDisplayComponent(fieldType) {
58
+ return customDisplayComponents.get(fieldType) ?? builtinDisplayComponents[fieldType];
59
+ }
60
+ /**
61
+ * Check if a field type has a display component (custom or built-in).
62
+ */
63
+ export function hasDisplayComponent(fieldType) {
64
+ return customDisplayComponents.has(fieldType) || fieldType in builtinDisplayComponents;
65
+ }
@@ -0,0 +1,86 @@
1
+ <script lang="ts">
2
+ import type { FieldDefinition } from '@svadmin/core';
3
+ import { t } from '@svadmin/core/i18n';
4
+ import { Button } from '../ui/button/index.js';
5
+ import { Plus, Trash2 } from '@lucide/svelte';
6
+ import TooltipButton from '../TooltipButton.svelte';
7
+ import FieldRenderer from '../FieldRenderer.svelte';
8
+
9
+ let { field, value, onchange } = $props<{
10
+ field: FieldDefinition;
11
+ value: unknown;
12
+ onchange: (val: unknown) => void;
13
+ }>();
14
+
15
+ const arrayVal = $derived(Array.isArray(value) ? value : []);
16
+ const subFields = $derived(field.subFields || []);
17
+
18
+ function getDefaultForType(type: string): unknown {
19
+ switch (type) {
20
+ case 'text': case 'textarea': case 'richtext': case 'image': return '';
21
+ case 'number': return 0;
22
+ case 'boolean': return false;
23
+ case 'tags': case 'images': case 'multiselect': case 'array': return [];
24
+ case 'json': return {};
25
+ default: return '';
26
+ }
27
+ }
28
+
29
+ function handleAdd() {
30
+ const newItem: Record<string, unknown> = {};
31
+ for (const f of subFields) {
32
+ newItem[f.key] = f.defaultValue ?? getDefaultForType(f.type);
33
+ }
34
+ onchange([...arrayVal, newItem]);
35
+ }
36
+
37
+ function handleRemove(index: number) {
38
+ onchange(arrayVal.filter((_, i) => i !== index));
39
+ }
40
+
41
+ function handleChange(index: number, key: string, val: unknown) {
42
+ const next = [...arrayVal];
43
+ next[index] = { ...next[index], [key]: val };
44
+ onchange(next);
45
+ }
46
+ </script>
47
+
48
+ <div class="space-y-4 rounded-lg border border-dashed p-4">
49
+ <div class="flex items-center justify-between">
50
+ <div class="text-sm font-medium text-foreground">
51
+ {field.label}
52
+ {#if field.required}
53
+ <span class="text-destructive">*</span>
54
+ {/if}
55
+ </div>
56
+ <Button variant="outline" size="sm" type="button" onclick={handleAdd}>
57
+ <Plus class="h-3.5 w-3.5 mr-1" /> {t('common.add') || 'Add'}
58
+ </Button>
59
+ </div>
60
+
61
+ <div class="space-y-4 pt-2">
62
+ {#each arrayVal as item, i}
63
+ <div class="relative rounded-md border bg-card p-4 pt-6 shadow-sm">
64
+ <div class="absolute right-2 top-2">
65
+ <TooltipButton tooltip={t('common.remove') || 'Remove'} variant="ghost" size="icon" class="h-8 w-8 text-muted-foreground hover:text-destructive transition-colors" onclick={() => handleRemove(i)}>
66
+ <Trash2 class="h-4 w-4" />
67
+ </TooltipButton>
68
+ </div>
69
+ <div class="grid gap-5">
70
+ {#each subFields as subField (subField.key)}
71
+ <FieldRenderer
72
+ field={subField}
73
+ value={item[subField.key]}
74
+ onchange={(val) => handleChange(i, subField.key, val)}
75
+ />
76
+ {/each}
77
+ </div>
78
+ </div>
79
+ {/each}
80
+ {#if arrayVal.length === 0}
81
+ <div class="flex flex-col items-center justify-center py-6 text-sm text-muted-foreground bg-muted/10 rounded-md">
82
+ <span>{t('common.noData') || 'No items added yet.'}</span>
83
+ </div>
84
+ {/if}
85
+ </div>
86
+ </div>
@@ -0,0 +1,9 @@
1
+ import type { FieldDefinition } from '@svadmin/core';
2
+ type $$ComponentProps = {
3
+ field: FieldDefinition;
4
+ value: unknown;
5
+ onchange: (val: unknown) => void;
6
+ };
7
+ declare const ArrayField: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type ArrayField = ReturnType<typeof ArrayField>;
9
+ export default ArrayField;
@@ -0,0 +1,13 @@
1
+ <script lang="ts">
2
+ interface Props { value: boolean | null | undefined; trueIcon?: string; falseIcon?: string }
3
+ let { value, trueIcon = '✓', falseIcon = '✗' }: Props = $props();
4
+ </script>
5
+ {#if value}
6
+ <span class="inline-flex items-center justify-center w-6 h-6 rounded-full text-sm bg-success/10 text-success">
7
+ {trueIcon}
8
+ </span>
9
+ {:else}
10
+ <span class="inline-flex items-center justify-center w-6 h-6 rounded-full text-sm bg-destructive/10 text-destructive">
11
+ {falseIcon}
12
+ </span>
13
+ {/if}
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ value: boolean | null | undefined;
3
+ trueIcon?: string;
4
+ falseIcon?: string;
5
+ }
6
+ declare const BooleanField: import("svelte").Component<Props, {}, "">;
7
+ type BooleanField = ReturnType<typeof BooleanField>;
8
+ export default BooleanField;
@@ -0,0 +1,6 @@
1
+ <script lang="ts">
2
+ interface Props { value: string | number | Date | null | undefined; locale?: string; options?: Intl.DateTimeFormatOptions }
3
+ let { value, locale = 'en-US', options = { dateStyle: 'medium' } }: Props = $props();
4
+ const formatted = $derived(value != null ? new Intl.DateTimeFormat(locale, options).format(new Date(value as string | number | Date)) : '—');
5
+ </script>
6
+ <span class="field-date">{formatted}</span>
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ value: string | number | Date | null | undefined;
3
+ locale?: string;
4
+ options?: Intl.DateTimeFormatOptions;
5
+ }
6
+ declare const DateField: import("svelte").Component<Props, {}, "">;
7
+ type DateField = ReturnType<typeof DateField>;
8
+ export default DateField;
@@ -0,0 +1,9 @@
1
+ <script lang="ts">
2
+ interface Props { value: string | null | undefined }
3
+ let { value }: Props = $props();
4
+ </script>
5
+ {#if value}
6
+ <a href="mailto:{value}" class="text-primary hover:underline no-underline">{value}</a>
7
+ {:else}
8
+ <span class="text-muted-foreground">—</span>
9
+ {/if}
@@ -0,0 +1,6 @@
1
+ interface Props {
2
+ value: string | null | undefined;
3
+ }
4
+ declare const EmailField: import("svelte").Component<Props, {}, "">;
5
+ type EmailField = ReturnType<typeof EmailField>;
6
+ export default EmailField;
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import { Download } from '@lucide/svelte';
3
+ interface Props { value: string | null | undefined; title?: string }
4
+ let { value, title }: Props = $props();
5
+ const fileName = $derived(value ? value.split('/').pop() ?? value : null);
6
+ </script>
7
+ {#if value}
8
+ <a href={value} download class="text-primary hover:underline no-underline inline-flex items-center gap-1" title={title ?? fileName ?? ''}>
9
+ <Download class="h-3.5 w-3.5 opacity-60" />
10
+ {fileName}
11
+ </a>
12
+ {:else}
13
+ <span class="text-muted-foreground">—</span>
14
+ {/if}
@@ -0,0 +1,7 @@
1
+ interface Props {
2
+ value: string | null | undefined;
3
+ title?: string;
4
+ }
5
+ declare const FileField: import("svelte").Component<Props, {}, "">;
6
+ type FileField = ReturnType<typeof FileField>;
7
+ export default FileField;
@@ -0,0 +1,9 @@
1
+ <script lang="ts">
2
+ interface Props { value: string | null | undefined; alt?: string; width?: number; height?: number }
3
+ let { value, alt = '', width = 80, height = 80 }: Props = $props();
4
+ </script>
5
+ {#if value}
6
+ <img src={value} {alt} {width} {height} class="rounded-lg object-cover border border-border" />
7
+ {:else}
8
+ <span class="inline-flex items-center justify-center w-20 h-20 bg-muted rounded-lg text-muted-foreground">—</span>
9
+ {/if}
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ value: string | null | undefined;
3
+ alt?: string;
4
+ width?: number;
5
+ height?: number;
6
+ }
7
+ declare const ImageField: import("svelte").Component<Props, {}, "">;
8
+ type ImageField = ReturnType<typeof ImageField>;
9
+ export default ImageField;
@@ -0,0 +1,72 @@
1
+ <script lang="ts">
2
+ import { t } from '@svadmin/core/i18n';
3
+ import { Button } from '../ui/button/index.js';
4
+ import { Copy, Check, ChevronDown, ChevronRight } from '@lucide/svelte';
5
+
6
+ let { value } = $props<{
7
+ value: unknown;
8
+ }>();
9
+
10
+ let expanded = $state(false);
11
+ let copied = $state(false);
12
+ let copyTimer: ReturnType<typeof setTimeout> | undefined;
13
+
14
+ $effect(() => {
15
+ return () => { if (copyTimer) clearTimeout(copyTimer); };
16
+ });
17
+
18
+ const formatted = $derived(
19
+ value != null ? JSON.stringify(value, null, 2) : '—'
20
+ );
21
+
22
+ const preview = $derived(
23
+ value != null ? JSON.stringify(value).slice(0, 80) + (JSON.stringify(value).length > 80 ? '...' : '') : '—'
24
+ );
25
+
26
+ function copyJson() {
27
+ navigator.clipboard.writeText(formatted);
28
+ copied = true;
29
+ if (copyTimer) clearTimeout(copyTimer);
30
+ copyTimer = setTimeout(() => { copied = false; }, 2000);
31
+ }
32
+ </script>
33
+
34
+ {#if value == null}
35
+ <span class="text-muted-foreground">—</span>
36
+ {:else}
37
+ <div class="space-y-1">
38
+ <div class="flex items-center gap-2">
39
+ <Button
40
+ variant="ghost"
41
+ size="sm"
42
+ class="flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground h-auto py-0.5 px-1"
43
+ onclick={() => { expanded = !expanded; }}
44
+ >
45
+ {#if expanded}
46
+ <ChevronDown class="h-3 w-3" />
47
+ {:else}
48
+ <ChevronRight class="h-3 w-3" />
49
+ {/if}
50
+ {expanded ? t('common.collapse') : t('common.expand')}
51
+ </Button>
52
+ <Button
53
+ variant="ghost"
54
+ size="sm"
55
+ class="flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground h-auto py-0.5 px-1"
56
+ onclick={copyJson}
57
+ aria-label={t('common.copy')}
58
+ >
59
+ {#if copied}
60
+ <Check class="h-3 w-3 text-emerald-500" />
61
+ {:else}
62
+ <Copy class="h-3 w-3" />
63
+ {/if}
64
+ </Button>
65
+ </div>
66
+ {#if expanded}
67
+ <pre class="rounded-lg bg-muted p-3 text-xs overflow-auto max-h-64 font-mono">{formatted}</pre>
68
+ {:else}
69
+ <code class="text-xs font-mono bg-muted px-1.5 py-0.5 rounded">{preview}</code>
70
+ {/if}
71
+ </div>
72
+ {/if}
@@ -0,0 +1,6 @@
1
+ type $$ComponentProps = {
2
+ value: unknown;
3
+ };
4
+ declare const JsonField: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type JsonField = ReturnType<typeof JsonField>;
6
+ export default JsonField;
@@ -0,0 +1,9 @@
1
+ <script lang="ts">
2
+ interface Props { value: string | null | undefined }
3
+ let { value }: Props = $props();
4
+ </script>
5
+ {#if value}
6
+ <div class="prose prose-sm dark:prose-invert max-w-none leading-relaxed [&_code]:bg-muted [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:rounded [&_code]:text-[0.875em] [&_pre]:bg-muted [&_pre]:p-3 [&_pre]:rounded-lg [&_pre]:overflow-x-auto [&_a]:text-primary">{@html value}</div>
7
+ {:else}
8
+ <span class="text-muted-foreground">—</span>
9
+ {/if}
@@ -0,0 +1,6 @@
1
+ interface Props {
2
+ value: string | null | undefined;
3
+ }
4
+ declare const MarkdownField: import("svelte").Component<Props, {}, "">;
5
+ type MarkdownField = ReturnType<typeof MarkdownField>;
6
+ export default MarkdownField;