@svadmin/ui 0.29.3 → 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 +2 -2
@@ -0,0 +1,149 @@
1
+ <script lang="ts">
2
+ import { fly, scale } from 'svelte/transition';
3
+ import { getResources } from '@svadmin/core';
4
+ import { getTheme, getColorTheme } from '@svadmin/core';
5
+ import { getLocale, t } from '@svadmin/core/i18n';
6
+ import { currentPath } from '@svadmin/core/router';
7
+ import { Button } from './ui/button/index.js';
8
+ import TooltipButton from './TooltipButton.svelte';
9
+ import * as Tabs from './ui/tabs/index.js';
10
+ import { Badge } from './ui/badge/index.js';
11
+ import { ScrollArea } from './ui/scroll-area/index.js';
12
+ import { Separator } from './ui/separator/index.js';
13
+ import { X, Bug, ChevronDown, ChevronUp, Wand2 } from '@lucide/svelte';
14
+ import InferencerPanel from './InferencerPanel.svelte';
15
+
16
+ let visible = $state(false);
17
+ let collapsed = $state(false);
18
+
19
+ function toggle() {
20
+ visible = !visible;
21
+ }
22
+
23
+ function handleKeydown(e: KeyboardEvent) {
24
+ if (e.ctrlKey && e.shiftKey && e.key === 'D') {
25
+ e.preventDefault();
26
+ toggle();
27
+ }
28
+ }
29
+
30
+ const resources = $derived.by(() => { try { return getResources(); } catch { return []; } });
31
+ const path = $derived(currentPath());
32
+ const theme = $derived(getTheme());
33
+ const colorTheme = $derived(getColorTheme());
34
+ const locale = $derived(getLocale());
35
+
36
+ // Auto-trace state changes in dev mode via Svelte 5 $inspect
37
+ if ((import.meta as any).env?.DEV) {
38
+ $inspect({ path, theme, colorTheme, locale, resourceCount: resources.length });
39
+ }
40
+ </script>
41
+
42
+ <svelte:window onkeydown={handleKeydown} />
43
+
44
+ {#if (import.meta as any).env?.DEV}
45
+ {#if visible}
46
+ <div
47
+ class="fixed bottom-0 right-4 z-[9999] w-[420px] max-w-[95vw] rounded-t-xl border border-b-0 bg-card shadow-2xl text-[0.8125rem] overflow-hidden"
48
+ class:w-auto={collapsed} class:min-w-[200px]={collapsed}
49
+ transition:fly={{ y: 400, duration: 300 }}
50
+ >
51
+ <!-- Header -->
52
+ <div class="flex items-center justify-between px-3 py-2 bg-muted border-b">
53
+ <div class="flex items-center gap-1.5 font-semibold text-xs uppercase tracking-wider text-foreground">
54
+ <Bug class="h-4 w-4" />
55
+ <span>svadmin DevTools</span>
56
+ </div>
57
+ <div class="flex gap-1">
58
+ <TooltipButton tooltip={collapsed ? t('common.expand') : t('common.collapse')} variant="ghost" size="icon" class="h-6 w-6" onclick={() => collapsed = !collapsed}>
59
+ {#if collapsed}
60
+ <ChevronUp class="h-3.5 w-3.5" />
61
+ {:else}
62
+ <ChevronDown class="h-3.5 w-3.5" />
63
+ {/if}
64
+ </TooltipButton>
65
+ <TooltipButton tooltip={t('common.close')} variant="ghost" size="icon" class="h-6 w-6" onclick={toggle}>
66
+ <X class="h-3.5 w-3.5" />
67
+ </TooltipButton>
68
+ </div>
69
+ </div>
70
+
71
+ {#if !collapsed}
72
+ <Tabs.Root value="state" class="w-full">
73
+ <Tabs.List class="grid w-full grid-cols-2 h-8 rounded-none border-b">
74
+ <Tabs.Trigger value="state" class="text-xs data-[state=active]:shadow-none rounded-none border-b-2 border-transparent data-[state=active]:border-primary">State</Tabs.Trigger>
75
+ <Tabs.Trigger value="inferencer" class="text-xs data-[state=active]:shadow-none rounded-none border-b-2 border-transparent data-[state=active]:border-primary">
76
+ <Wand2 class="h-3 w-3 mr-1" /> Inferencer
77
+ </Tabs.Trigger>
78
+ </Tabs.List>
79
+ <Tabs.Content value="state" class="p-0">
80
+ <ScrollArea class="max-h-[400px]">
81
+ <div class="p-2 space-y-1">
82
+ <!-- Router -->
83
+ <div class="py-1">
84
+ <h4 class="text-[0.6875rem] font-bold uppercase tracking-widest text-muted-foreground mb-1 px-1">Router</h4>
85
+ <div class="flex items-center justify-between px-1 py-0.5 rounded hover:bg-muted/50">
86
+ <span class="text-xs text-foreground">Path</span>
87
+ <Badge variant="secondary" class="font-mono text-[0.6875rem]">{path}</Badge>
88
+ </div>
89
+ </div>
90
+
91
+ <Separator />
92
+
93
+ <!-- Theme -->
94
+ <div class="py-1">
95
+ <h4 class="text-[0.6875rem] font-bold uppercase tracking-widest text-muted-foreground mb-1 px-1">Theme</h4>
96
+ <div class="flex items-center justify-between px-1 py-0.5 rounded hover:bg-muted/50">
97
+ <span class="text-xs text-foreground">Mode</span>
98
+ <Badge variant="secondary" class="font-mono text-[0.6875rem]">{theme}</Badge>
99
+ </div>
100
+ <div class="flex items-center justify-between px-1 py-0.5 rounded hover:bg-muted/50">
101
+ <span class="text-xs text-foreground">Color</span>
102
+ <Badge variant="secondary" class="font-mono text-[0.6875rem]">{colorTheme}</Badge>
103
+ </div>
104
+ </div>
105
+
106
+ <Separator />
107
+
108
+ <!-- i18n -->
109
+ <div class="py-1">
110
+ <h4 class="text-[0.6875rem] font-bold uppercase tracking-widest text-muted-foreground mb-1 px-1">i18n</h4>
111
+ <div class="flex items-center justify-between px-1 py-0.5 rounded hover:bg-muted/50">
112
+ <span class="text-xs text-foreground">Locale</span>
113
+ <Badge variant="secondary" class="font-mono text-[0.6875rem]">{locale}</Badge>
114
+ </div>
115
+ </div>
116
+
117
+ <Separator />
118
+
119
+ <!-- Resources -->
120
+ <div class="py-1">
121
+ <h4 class="text-[0.6875rem] font-bold uppercase tracking-widest text-muted-foreground mb-1 px-1">Resources ({resources.length})</h4>
122
+ {#each resources as r}
123
+ <div class="flex items-center justify-between px-1 py-0.5 rounded hover:bg-muted/50">
124
+ <span class="text-xs text-foreground">{r.name}</span>
125
+ <Badge variant="outline" class="font-mono text-[0.6875rem]">{r.fields.length} fields</Badge>
126
+ </div>
127
+ {/each}
128
+ </div>
129
+ </div>
130
+ </ScrollArea>
131
+ </Tabs.Content>
132
+ <Tabs.Content value="inferencer" class="p-0">
133
+ <InferencerPanel />
134
+ </Tabs.Content>
135
+ </Tabs.Root>
136
+ {/if}
137
+ </div>
138
+ {:else}
139
+ <TooltipButton
140
+ tooltip={t('devtools.title')}
141
+ variant="default"
142
+ size="icon"
143
+ class="fixed bottom-4 right-4 z-[9999] h-9 w-9 rounded-full shadow-lg opacity-60 hover:opacity-100 hover:scale-110 transition-all"
144
+ onclick={toggle}
145
+ >
146
+ <Bug class="h-4 w-4" />
147
+ </TooltipButton>
148
+ {/if}
149
+ {/if}
@@ -0,0 +1,3 @@
1
+ declare const DevTools: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type DevTools = ReturnType<typeof DevTools>;
3
+ export default DevTools;
@@ -0,0 +1,86 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { GridModule } from '../types.js';
4
+
5
+ let {
6
+ modules = $bindable<GridModule[]>([]),
7
+ onOrderSave,
8
+ renderItem,
9
+ class: className = '',
10
+ columns = 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',
11
+ gap = 'gap-4',
12
+ }: {
13
+ modules?: GridModule[];
14
+ onOrderSave?: (orderedIds: string[]) => void;
15
+ renderItem: Snippet<[{ module: GridModule; index: number; dragging: boolean }]>;
16
+ class?: string;
17
+ columns?: string;
18
+ gap?: string;
19
+ } = $props();
20
+
21
+ let draggingId = $state<string | null>(null);
22
+ let dragOverId = $state<string | null>(null);
23
+
24
+ function handleDragStart(e: DragEvent, id: string) {
25
+ draggingId = id;
26
+ if (e.dataTransfer) {
27
+ e.dataTransfer.effectAllowed = 'move';
28
+ e.dataTransfer.setData('text/plain', id);
29
+ }
30
+ }
31
+
32
+ function handleDragOver(e: DragEvent, id: string) {
33
+ e.preventDefault();
34
+ if (draggingId && draggingId !== id) {
35
+ dragOverId = id;
36
+ }
37
+ }
38
+
39
+ function handleDrop(e: DragEvent, targetId: string) {
40
+ e.preventDefault();
41
+ if (!draggingId || draggingId === targetId) {
42
+ dragOverId = null;
43
+ return;
44
+ }
45
+
46
+ const sourceIdx = modules.findIndex(m => m.id === draggingId);
47
+ const targetIdx = modules.findIndex(m => m.id === targetId);
48
+
49
+ if (sourceIdx === -1 || targetIdx === -1) {
50
+ dragOverId = null;
51
+ return;
52
+ }
53
+
54
+ const newModules = [...modules];
55
+ const [dragged] = newModules.splice(sourceIdx, 1);
56
+ newModules.splice(targetIdx, 0, dragged);
57
+
58
+ modules = newModules;
59
+ dragOverId = null;
60
+ onOrderSave?.(modules.map(m => m.id));
61
+ }
62
+
63
+ function handleDragEnd() {
64
+ draggingId = null;
65
+ dragOverId = null;
66
+ }
67
+ </script>
68
+
69
+ <div class="grid {columns} {gap} {className}">
70
+ {#each modules as mod, i (mod.id)}
71
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
72
+ <div
73
+ draggable="true"
74
+ ondragstart={(e) => handleDragStart(e, mod.id)}
75
+ ondragover={(e) => handleDragOver(e, mod.id)}
76
+ ondrop={(e) => handleDrop(e, mod.id)}
77
+ ondragend={handleDragEnd}
78
+ ondragleave={() => { if (dragOverId === mod.id) dragOverId = null; }}
79
+ class="transition-all duration-200
80
+ {draggingId === mod.id ? 'opacity-40 scale-[0.97] cursor-grabbing' : 'cursor-grab'}
81
+ {dragOverId === mod.id ? 'ring-2 ring-primary/40 ring-offset-2 ring-offset-background rounded-lg scale-[1.02]' : ''}"
82
+ >
83
+ {@render renderItem({ module: mod, index: i, dragging: draggingId === mod.id })}
84
+ </div>
85
+ {/each}
86
+ </div>
@@ -0,0 +1,17 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { GridModule } from '../types.js';
3
+ type $$ComponentProps = {
4
+ modules?: GridModule[];
5
+ onOrderSave?: (orderedIds: string[]) => void;
6
+ renderItem: Snippet<[{
7
+ module: GridModule;
8
+ index: number;
9
+ dragging: boolean;
10
+ }]>;
11
+ class?: string;
12
+ columns?: string;
13
+ gap?: string;
14
+ };
15
+ declare const DraggableGrid: import("svelte").Component<$$ComponentProps, {}, "modules">;
16
+ type DraggableGrid = ReturnType<typeof DraggableGrid>;
17
+ export default DraggableGrid;
@@ -0,0 +1,112 @@
1
+ <script lang="ts">
2
+ /**
3
+ * DraggableHeader — Wraps table header cells with HTML5 Drag and Drop
4
+ * to enable column reorder. Persists order to localStorage.
5
+ *
6
+ * Usage:
7
+ * <DraggableHeader columns={columns} resourceName="posts" onReorder={handleReorder}>
8
+ * {#snippet header(column, index)}
9
+ * <th>...</th>
10
+ * {/snippet}
11
+ * </DraggableHeader>
12
+ */
13
+ import type { Snippet } from 'svelte';
14
+
15
+ interface Column {
16
+ id: string;
17
+ [key: string]: unknown;
18
+ }
19
+
20
+ interface Props {
21
+ columns: Column[];
22
+ resourceName: string;
23
+ onReorder: (newOrder: Column[]) => void;
24
+ header: Snippet<[Column, number, Record<string, any>]>;
25
+ }
26
+
27
+ let { columns, resourceName, onReorder, header }: Props = $props();
28
+
29
+ let dragIndex = $state<number | null>(null);
30
+ let dropIndex = $state<number | null>(null);
31
+
32
+ // Restore saved order from localStorage
33
+ $effect(() => {
34
+ const storageKey = `svadmin-colorder-${resourceName}`;
35
+ if (typeof localStorage === 'undefined') return;
36
+ try {
37
+ const saved = localStorage.getItem(storageKey);
38
+ if (saved) {
39
+ const savedOrder: string[] = JSON.parse(saved);
40
+ const reordered = savedOrder
41
+ .map(id => columns.find(c => c.id === id))
42
+ .filter((c): c is Column => c !== undefined);
43
+ // Add any new columns not in saved order
44
+ const remaining = columns.filter(c => !savedOrder.includes(c.id));
45
+ if (reordered.length > 0) {
46
+ onReorder([...reordered, ...remaining]);
47
+ }
48
+ }
49
+ } catch { /* ignore */ }
50
+ });
51
+
52
+ function handleDragStart(e: DragEvent, index: number) {
53
+ dragIndex = index;
54
+ if (e.dataTransfer) {
55
+ e.dataTransfer.effectAllowed = 'move';
56
+ e.dataTransfer.setData('text/plain', String(index));
57
+ }
58
+ }
59
+
60
+ function handleDragOver(e: DragEvent, index: number) {
61
+ e.preventDefault();
62
+ dropIndex = index;
63
+ if (e.dataTransfer) {
64
+ e.dataTransfer.dropEffect = 'move';
65
+ }
66
+ }
67
+
68
+ function handleDrop(e: DragEvent, index: number) {
69
+ e.preventDefault();
70
+ if (dragIndex === null || dragIndex === index) {
71
+ dragIndex = null;
72
+ dropIndex = null;
73
+ return;
74
+ }
75
+
76
+ const newColumns = [...columns];
77
+ const [moved] = newColumns.splice(dragIndex, 1);
78
+ newColumns.splice(index, 0, moved);
79
+
80
+ // Persist to localStorage
81
+ const storageKey = `svadmin-colorder-${resourceName}`;
82
+ if (typeof localStorage !== 'undefined') {
83
+ try {
84
+ localStorage.setItem(storageKey, JSON.stringify(newColumns.map(c => c.id)));
85
+ } catch { /* ignore */ }
86
+ }
87
+
88
+ onReorder(newColumns);
89
+ dragIndex = null;
90
+ dropIndex = null;
91
+ }
92
+
93
+ function handleDragEnd() {
94
+ dragIndex = null;
95
+ dropIndex = null;
96
+ }
97
+ </script>
98
+
99
+ <tr class="hover:bg-muted/50 data-[state=selected]:bg-muted transition-colors bg-muted/50">
100
+ {#each columns as column, index}
101
+ {@render header(column, index, {
102
+ draggable: true,
103
+ ondragstart: (e: DragEvent) => handleDragStart(e, index),
104
+ ondragover: (e: DragEvent) => handleDragOver(e, index),
105
+ ondrop: (e: DragEvent) => handleDrop(e, index),
106
+ ondragend: handleDragEnd,
107
+ 'data-dragging': dragIndex === index,
108
+ 'data-drop-target': dropIndex === index && dropIndex !== dragIndex,
109
+ class: `cursor-grab active:cursor-grabbing select-none transition-opacity ${dragIndex === index ? 'opacity-50' : ''} ${dropIndex === index && dropIndex !== dragIndex ? 'border-l-2 border-primary' : ''}`
110
+ })}
111
+ {/each}
112
+ </tr>
@@ -0,0 +1,25 @@
1
+ /**
2
+ * DraggableHeader — Wraps table header cells with HTML5 Drag and Drop
3
+ * to enable column reorder. Persists order to localStorage.
4
+ *
5
+ * Usage:
6
+ * <DraggableHeader columns={columns} resourceName="posts" onReorder={handleReorder}>
7
+ * {#snippet header(column, index)}
8
+ * <th>...</th>
9
+ * {/snippet}
10
+ * </DraggableHeader>
11
+ */
12
+ import type { Snippet } from 'svelte';
13
+ interface Column {
14
+ id: string;
15
+ [key: string]: unknown;
16
+ }
17
+ interface Props {
18
+ columns: Column[];
19
+ resourceName: string;
20
+ onReorder: (newOrder: Column[]) => void;
21
+ header: Snippet<[Column, number, Record<string, any>]>;
22
+ }
23
+ declare const DraggableHeader: import("svelte").Component<Props, {}, "">;
24
+ type DraggableHeader = ReturnType<typeof DraggableHeader>;
25
+ export default DraggableHeader;
@@ -0,0 +1,35 @@
1
+ <script lang="ts">
2
+ import { getResource } from '@svadmin/core';
3
+ import { t } from '@svadmin/core/i18n';
4
+ import * as Sheet from './ui/sheet/index.js';
5
+ import AutoForm from './AutoForm.svelte';
6
+
7
+ let { resourceName, mode = 'create', id, open = $bindable(false), side = 'right', onSuccess } = $props<{
8
+ resourceName: string;
9
+ mode?: 'create' | 'edit';
10
+ id?: string | number;
11
+ open: boolean;
12
+ side?: 'left' | 'right';
13
+ onSuccess?: () => void;
14
+ }>();
15
+
16
+ const resource = $derived(getResource(resourceName));
17
+
18
+ function handleClose() {
19
+ open = false;
20
+ onSuccess?.();
21
+ }
22
+ </script>
23
+
24
+ <Sheet.Root bind:open {side}>
25
+ <Sheet.Content>
26
+ <Sheet.Header>
27
+ <Sheet.Title>
28
+ {mode === 'create' ? `${t('common.create')}${resource.label}` : `${t('common.edit')}${resource.label}`}
29
+ </Sheet.Title>
30
+ </Sheet.Header>
31
+ <div class="flex-1 overflow-y-auto">
32
+ <AutoForm {resourceName} {mode} {id} />
33
+ </div>
34
+ </Sheet.Content>
35
+ </Sheet.Root>
@@ -0,0 +1,11 @@
1
+ type $$ComponentProps = {
2
+ resourceName: string;
3
+ mode?: 'create' | 'edit';
4
+ id?: string | number;
5
+ open: boolean;
6
+ side?: 'left' | 'right';
7
+ onSuccess?: () => void;
8
+ };
9
+ declare const DrawerForm: import("svelte").Component<$$ComponentProps, {}, "open">;
10
+ type DrawerForm = ReturnType<typeof DrawerForm>;
11
+ export default DrawerForm;
@@ -0,0 +1,52 @@
1
+ <script lang="ts">
2
+ import { getResource, useDelete } from '@svadmin/core';
3
+ import { navigate } from '@svadmin/core/router';
4
+ import { t } from '@svadmin/core/i18n';
5
+ import type { Snippet } from 'svelte';
6
+ import PageHeader from './PageHeader.svelte';
7
+ import AutoForm from './AutoForm.svelte';
8
+ import ListButton from './buttons/ListButton.svelte';
9
+ import ShowButton from './buttons/ShowButton.svelte';
10
+ import RefreshButton from './buttons/RefreshButton.svelte';
11
+ import DeleteButton from './buttons/DeleteButton.svelte';
12
+
13
+ interface Props {
14
+ resourceName: string;
15
+ id: string | number;
16
+ title?: string;
17
+ canDelete?: boolean;
18
+ headerActions?: Snippet;
19
+ class?: string;
20
+ }
21
+
22
+ let {
23
+ resourceName,
24
+ id,
25
+ title,
26
+ canDelete,
27
+ headerActions,
28
+ class: className = '',
29
+ }: Props = $props();
30
+
31
+ const resource = $derived(getResource(resourceName));
32
+ const pageTitle = $derived(title ?? `${t('common.edit')} ${resource.label} #${id}`);
33
+ const showDelete = $derived(canDelete ?? resource.canDelete !== false);
34
+ </script>
35
+
36
+ <div class="space-y-6 {className}">
37
+ <PageHeader title={pageTitle}>
38
+ {#snippet actions()}
39
+ <ListButton resource={resourceName} hideText />
40
+ <ShowButton resource={resourceName} recordItemId={id} hideText />
41
+ <RefreshButton resource={resourceName} hideText />
42
+ {#if showDelete !== false}
43
+ <DeleteButton resource={resourceName} recordItemId={id} hideText onSuccess={() => navigate(`/${resourceName}`)} />
44
+ {/if}
45
+ {#if headerActions}
46
+ {@render headerActions()}
47
+ {/if}
48
+ {/snippet}
49
+ </PageHeader>
50
+
51
+ <AutoForm {resourceName} mode="edit" {id} />
52
+ </div>
@@ -0,0 +1,12 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ resourceName: string;
4
+ id: string | number;
5
+ title?: string;
6
+ canDelete?: boolean;
7
+ headerActions?: Snippet;
8
+ class?: string;
9
+ }
10
+ declare const EditPage: import("svelte").Component<Props, {}, "">;
11
+ type EditPage = ReturnType<typeof EditPage>;
12
+ export default EditPage;
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ import { fade, scale } from 'svelte/transition';
3
+ import { PackageOpen } from '@lucide/svelte';
4
+ import { t } from '@svadmin/core';
5
+
6
+ let {
7
+ title = t('empty.title'),
8
+ description = t('empty.description'),
9
+ children,
10
+ } = $props<{
11
+ title?: string;
12
+ description?: string;
13
+ children?: import('svelte').Snippet;
14
+ }>();
15
+ </script>
16
+
17
+ <div
18
+ class="flex flex-col items-center justify-center p-8 text-center min-h-[300px] bg-card/50 rounded-lg shadow-sm"
19
+ in:scale={{ start: 0.95, duration: 250, opacity: 0 }}
20
+ >
21
+ <div class="h-20 w-20 rounded-full bg-muted flex items-center justify-center mb-4">
22
+ <PackageOpen class="h-10 w-10 text-muted-foreground" />
23
+ </div>
24
+ <h3 class="text-lg font-semibold tracking-tight">{title}</h3>
25
+ <p class="text-sm text-muted-foreground mt-2 max-w-sm">{description}</p>
26
+ {#if children}
27
+ <div class="mt-6">
28
+ {@render children()}
29
+ </div>
30
+ {/if}
31
+ </div>
@@ -0,0 +1,8 @@
1
+ type $$ComponentProps = {
2
+ title?: string;
3
+ description?: string;
4
+ children?: import('svelte').Snippet;
5
+ };
6
+ declare const EmptyState: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type EmptyState = ReturnType<typeof EmptyState>;
8
+ export default EmptyState;
@@ -0,0 +1,49 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { AlertTriangle } from '@lucide/svelte';
4
+ import { Button } from './ui/button/index.js';
5
+ import * as Alert from './ui/alert/index.js';
6
+ import { t } from '@svadmin/core/i18n';
7
+
8
+ let {
9
+ children,
10
+ fallback,
11
+ }: {
12
+ children: Snippet;
13
+ /** Optional custom error UI snippet */
14
+ fallback?: Snippet<[{ error: Error; reset: () => void }]>;
15
+ } = $props();
16
+
17
+ function handleError(error: unknown) {
18
+ console.error('[svadmin] Uncaught error:', error);
19
+ }
20
+ </script>
21
+
22
+ <svelte:boundary onerror={handleError}>
23
+ {@render children()}
24
+
25
+ {#snippet failed(error, reset)}
26
+ {#if fallback}
27
+ {@render fallback({ error: error instanceof Error ? error : new Error(String(error)), reset })}
28
+ {:else}
29
+ <div class="flex h-screen items-center justify-center bg-background">
30
+ <div class="max-w-md w-full px-4">
31
+ <Alert.Root variant="destructive" class="space-y-4">
32
+ <div class="flex items-start gap-3">
33
+ <AlertTriangle class="h-5 w-5 mt-0.5 shrink-0" />
34
+ <div class="space-y-2">
35
+ <Alert.Title>{t('common.error')}</Alert.Title>
36
+ <Alert.Description class="text-sm">
37
+ {error instanceof Error ? error.message : String(error)}
38
+ </Alert.Description>
39
+ </div>
40
+ </div>
41
+ <Button variant="outline" size="sm" onclick={reset} class="w-full">
42
+ {t('common.retry')}
43
+ </Button>
44
+ </Alert.Root>
45
+ </div>
46
+ </div>
47
+ {/if}
48
+ {/snippet}
49
+ </svelte:boundary>
@@ -0,0 +1,12 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ children: Snippet;
4
+ /** Optional custom error UI snippet */
5
+ fallback?: Snippet<[{
6
+ error: Error;
7
+ reset: () => void;
8
+ }]>;
9
+ };
10
+ declare const ErrorBoundary: import("svelte").Component<$$ComponentProps, {}, "">;
11
+ type ErrorBoundary = ReturnType<typeof ErrorBoundary>;
12
+ export default ErrorBoundary;
@@ -0,0 +1,36 @@
1
+ <script lang="ts">
2
+ import { AlertTriangle, RefreshCw } from '@lucide/svelte';
3
+ import { t } from '@svadmin/core';
4
+ import { Button } from './ui/button';
5
+ import * as Alert from './ui/alert/index.js';
6
+
7
+ let {
8
+ error,
9
+ title = t('error.title'),
10
+ description = t('error.description'),
11
+ retry,
12
+ } = $props<{
13
+ error?: Error | null;
14
+ title?: string;
15
+ description?: string;
16
+ retry?: () => void;
17
+ }>();
18
+ </script>
19
+
20
+ <div class="flex flex-col items-center justify-center p-8 text-center min-h-[300px]">
21
+ <Alert.Root variant="destructive" class="max-w-md text-left">
22
+ <AlertTriangle class="h-5 w-5" />
23
+ <Alert.Title>{title}</Alert.Title>
24
+ <Alert.Description>
25
+ {error?.message || description}
26
+ </Alert.Description>
27
+ {#if retry}
28
+ <div class="mt-4">
29
+ <Button variant="outline" size="sm" onclick={retry}>
30
+ <RefreshCw class="h-3 w-3" data-icon="inline-start" />
31
+ {t('buttons.retry')}
32
+ </Button>
33
+ </div>
34
+ {/if}
35
+ </Alert.Root>
36
+ </div>
@@ -0,0 +1,9 @@
1
+ type $$ComponentProps = {
2
+ error?: Error | null;
3
+ title?: string;
4
+ description?: string;
5
+ retry?: () => void;
6
+ };
7
+ declare const ErrorComponent: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type ErrorComponent = ReturnType<typeof ErrorComponent>;
9
+ export default ErrorComponent;