@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,192 @@
1
+ <script lang="ts">
2
+ import { getDataProvider, getResources, inferResource } from '@svadmin/core';
3
+ import type { InferResult } from '@svadmin/core';
4
+ import { Button } from './ui/button/index.js';
5
+ import { Input } from './ui/input/index.js';
6
+ import { Badge } from './ui/badge/index.js';
7
+ import * as Card from './ui/card/index.js';
8
+ import * as Table from './ui/table/index.js';
9
+ import * as Alert from './ui/alert/index.js';
10
+ import { Skeleton } from './ui/skeleton/index.js';
11
+ import { ScrollArea } from './ui/scroll-area/index.js';
12
+ import { Select } from './ui/select/index.js';
13
+ import { Wand2, Copy, Check, RefreshCw, Loader2, AlertCircle } from '@lucide/svelte';
14
+
15
+ const dataProvider = getDataProvider();
16
+ const resources = getResources();
17
+
18
+ let selectedResource = $state('');
19
+ let inferResult = $state<InferResult | null>(null);
20
+ let loading = $state(false);
21
+ let error = $state<string | null>(null);
22
+ let copied = $state(false);
23
+ let customEndpoint = $state('');
24
+ let copyTimer: ReturnType<typeof setTimeout> | undefined;
25
+
26
+ $effect(() => {
27
+ return () => { if (copyTimer) clearTimeout(copyTimer); };
28
+ });
29
+
30
+ async function runInference() {
31
+ const resourceName = customEndpoint.trim() || selectedResource;
32
+ if (!resourceName) return;
33
+
34
+ loading = true;
35
+ error = null;
36
+ inferResult = null;
37
+
38
+ try {
39
+ const response = await dataProvider.getList({
40
+ resource: resourceName,
41
+ pagination: { current: 1, pageSize: 25 },
42
+ });
43
+
44
+ if (!response.data || response.data.length === 0) {
45
+ error = `No data returned from "${resourceName}". The API must return at least one record to infer fields.`;
46
+ return;
47
+ }
48
+
49
+ inferResult = inferResource(
50
+ resourceName,
51
+ response.data as Record<string, unknown>[],
52
+ );
53
+ } catch (e: unknown) {
54
+ error = e instanceof Error ? e.message : 'Failed to fetch data for inference.';
55
+ } finally {
56
+ loading = false;
57
+ }
58
+ }
59
+
60
+ function copyCode() {
61
+ if (!inferResult) return;
62
+ navigator.clipboard.writeText(inferResult.code);
63
+ copied = true;
64
+ if (copyTimer) clearTimeout(copyTimer);
65
+ copyTimer = setTimeout(() => { copied = false; }, 2000);
66
+ }
67
+
68
+ const typeVariants: Record<string, 'default' | 'secondary' | 'outline' | 'destructive'> = {
69
+ text: 'secondary',
70
+ number: 'default',
71
+ boolean: 'outline',
72
+ date: 'secondary',
73
+ email: 'default',
74
+ url: 'outline',
75
+ image: 'secondary',
76
+ images: 'secondary',
77
+ textarea: 'outline',
78
+ json: 'secondary',
79
+ tags: 'default',
80
+ select: 'outline',
81
+ relation: 'destructive',
82
+ color: 'secondary',
83
+ phone: 'default',
84
+ };
85
+ </script>
86
+
87
+ <Card.Root>
88
+ <Card.CardHeader class="pb-3">
89
+ <Card.CardTitle class="flex items-center gap-2 text-base">
90
+ <Wand2 class="h-4 w-4" />
91
+ Resource Inferencer
92
+ </Card.CardTitle>
93
+ </Card.CardHeader>
94
+ <Card.CardContent class="space-y-4">
95
+ <!-- Resource selector -->
96
+ <div class="flex gap-2">
97
+ <Select
98
+ class="flex-1"
99
+ bind:value={selectedResource}
100
+ placeholder="— Select a resource —"
101
+ >
102
+ {#each resources as res}
103
+ <option value={res.name}>{res.label} ({res.name})</option>
104
+ {/each}
105
+ </Select>
106
+ <span class="flex items-center text-xs text-muted-foreground">or</span>
107
+ <Input
108
+ type="text"
109
+ class="w-36"
110
+ placeholder="custom endpoint"
111
+ bind:value={customEndpoint}
112
+ />
113
+ </div>
114
+
115
+ <Button size="sm" onclick={runInference} disabled={loading || (!selectedResource && !customEndpoint.trim())}>
116
+ {#if loading}
117
+ <Loader2 class="h-3 w-3 animate-spin" data-icon="inline-start" />
118
+ Inferring...
119
+ {:else}
120
+ <RefreshCw class="h-3 w-3" data-icon="inline-start" />
121
+ Infer Fields
122
+ {/if}
123
+ </Button>
124
+
125
+ {#if error}
126
+ <Alert.Root variant="destructive">
127
+ <AlertCircle class="h-4 w-4" />
128
+ <Alert.Description>{error}</Alert.Description>
129
+ </Alert.Root>
130
+ {/if}
131
+
132
+ {#if loading}
133
+ <div class="space-y-2">
134
+ {#each Array(4) as _}
135
+ <Skeleton class="h-8 w-full" />
136
+ {/each}
137
+ </div>
138
+ {/if}
139
+
140
+ {#if inferResult}
141
+ <!-- Field table -->
142
+ <ScrollArea class="max-h-80">
143
+ <Table.Root>
144
+ <Table.Header>
145
+ <Table.Row class="bg-muted/50">
146
+ <Table.Head>Field</Table.Head>
147
+ <Table.Head>Type</Table.Head>
148
+ <Table.Head class="text-center">List</Table.Head>
149
+ <Table.Head class="text-center">Form</Table.Head>
150
+ </Table.Row>
151
+ </Table.Header>
152
+ <Table.Body>
153
+ {#each inferResult.fields as field}
154
+ <Table.Row>
155
+ <Table.Cell class="font-mono text-xs">{field.key}</Table.Cell>
156
+ <Table.Cell>
157
+ <Badge variant={typeVariants[field.type] ?? 'secondary'}>
158
+ {field.type}
159
+ {#if field.resource}→ {field.resource}{/if}
160
+ </Badge>
161
+ </Table.Cell>
162
+ <Table.Cell class="text-center">{field.showInList ? '✓' : '—'}</Table.Cell>
163
+ <Table.Cell class="text-center">{field.showInForm ? '✓' : '—'}</Table.Cell>
164
+ </Table.Row>
165
+ {/each}
166
+ </Table.Body>
167
+ </Table.Root>
168
+ </ScrollArea>
169
+
170
+ <!-- Generated code -->
171
+ <div class="rounded-lg border overflow-hidden">
172
+ <div class="flex items-center justify-between bg-muted px-3 py-1.5 text-xs text-muted-foreground">
173
+ <span>Generated ResourceDefinition</span>
174
+ <Button variant="ghost" size="sm" class="h-6 text-xs gap-1" onclick={copyCode}>
175
+ {#if copied}
176
+ <Check class="h-3 w-3 text-emerald-500" />
177
+ <span class="text-emerald-500">Copied!</span>
178
+ {:else}
179
+ <Copy class="h-3 w-3" />
180
+ Copy
181
+ {/if}
182
+ </Button>
183
+ </div>
184
+ <pre class="max-h-64 overflow-auto bg-muted/30 p-3 text-xs text-foreground font-mono">{inferResult.code}</pre>
185
+ </div>
186
+
187
+ <p class="text-xs text-muted-foreground">
188
+ Inferred {inferResult.fields.length} fields from sample data. Copy the code above into your <code class="bg-muted px-1 rounded text-foreground">resources.ts</code> file.
189
+ </p>
190
+ {/if}
191
+ </Card.CardContent>
192
+ </Card.Root>
@@ -0,0 +1,3 @@
1
+ declare const InferencerPanel: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type InferencerPanel = ReturnType<typeof InferencerPanel>;
3
+ export default InferencerPanel;
@@ -0,0 +1,93 @@
1
+ <script lang="ts">
2
+ import { fade, fly } from 'svelte/transition';
3
+ import { useInfiniteList } from '@svadmin/core';
4
+ import type { BaseRecord, Sort, Filter } from '@svadmin/core';
5
+ import type { Snippet } from 'svelte';
6
+ import { t } from '@svadmin/core/i18n';
7
+ import { Skeleton } from './ui/skeleton/index.js';
8
+ import { Button } from './ui/button/index.js';
9
+ import { Loader2 } from '@lucide/svelte';
10
+ import { intersect } from '../actions.js';
11
+
12
+ interface Props<T extends BaseRecord = BaseRecord> {
13
+ resource: string;
14
+ pageSize?: number;
15
+ sorters?: Sort[];
16
+ filters?: Filter[];
17
+ /** Render each item */
18
+ children: Snippet<[{ item: T; index: number }]>;
19
+ /** Custom empty state */
20
+ empty?: Snippet;
21
+ /** Custom loading skeleton */
22
+ loadingSkeleton?: Snippet;
23
+ }
24
+
25
+ let {
26
+ resource,
27
+ pageSize = 20,
28
+ sorters,
29
+ filters,
30
+ children,
31
+ empty,
32
+ loadingSkeleton,
33
+ }: Props = $props();
34
+
35
+ const { query } = useInfiniteList({
36
+ get resource() { return resource; },
37
+ get pagination() { return { pageSize }; },
38
+ get sorters() { return sorters; },
39
+ get filters() { return filters; },
40
+ });
41
+
42
+ const allItems = $derived(
43
+ (query.data as { pages?: { data: BaseRecord[] }[] })?.pages?.flatMap(p => p.data) ?? []
44
+ );
45
+
46
+ const hasNextPage = $derived(query.hasNextPage ?? false);
47
+ const isFetchingNextPage = $derived(query.isFetchingNextPage ?? false);
48
+
49
+ function loadMore() {
50
+ if (hasNextPage && !isFetchingNextPage) {
51
+ query.fetchNextPage();
52
+ }
53
+ }
54
+ </script>
55
+
56
+ <div class="space-y-2">
57
+ {#if query.isLoading}
58
+ {#if loadingSkeleton}
59
+ {@render loadingSkeleton()}
60
+ {:else}
61
+ <div class="space-y-3">
62
+ {#each Array(5) as _}
63
+ <Skeleton class="h-16 w-full rounded-lg" />
64
+ {/each}
65
+ </div>
66
+ {/if}
67
+ {:else if allItems.length === 0}
68
+ {#if empty}
69
+ {@render empty()}
70
+ {:else}
71
+ <p class="text-center text-sm text-muted-foreground py-8">{t('empty.title')}</p>
72
+ {/if}
73
+ {:else}
74
+ {#each allItems as item, index}
75
+ <div in:fade={{ duration: 200, delay: index < 20 ? index * 30 : 0 }}>
76
+ {@render children({ item, index })}
77
+ </div>
78
+ {/each}
79
+
80
+ {#if isFetchingNextPage}
81
+ <div class="flex justify-center py-4">
82
+ <Loader2 class="h-5 w-5 animate-spin text-muted-foreground" />
83
+ </div>
84
+ {/if}
85
+
86
+ {#if hasNextPage}
87
+ <!-- Sentinel for infinite scroll -->
88
+ <div use:intersect={loadMore} class="h-1"></div>
89
+ {:else}
90
+ <p class="text-center text-xs text-muted-foreground py-2">{t('empty.noMore')}</p>
91
+ {/if}
92
+ {/if}
93
+ </div>
@@ -0,0 +1,20 @@
1
+ import type { BaseRecord, Sort, Filter } from '@svadmin/core';
2
+ import type { Snippet } from 'svelte';
3
+ interface Props<T extends BaseRecord = BaseRecord> {
4
+ resource: string;
5
+ pageSize?: number;
6
+ sorters?: Sort[];
7
+ filters?: Filter[];
8
+ /** Render each item */
9
+ children: Snippet<[{
10
+ item: T;
11
+ index: number;
12
+ }]>;
13
+ /** Custom empty state */
14
+ empty?: Snippet;
15
+ /** Custom loading skeleton */
16
+ loadingSkeleton?: Snippet;
17
+ }
18
+ declare const InfiniteList: import("svelte").Component<Props<BaseRecord>, {}, "">;
19
+ type InfiniteList = ReturnType<typeof InfiniteList>;
20
+ export default InfiniteList;
@@ -0,0 +1,88 @@
1
+ <script lang="ts">
2
+ import { useUpdate } from '@svadmin/core';
3
+ import type { FieldDefinition } from '@svadmin/core';
4
+
5
+ interface Props {
6
+ resourceName: string;
7
+ recordId: string | number;
8
+ field: FieldDefinition;
9
+ value: unknown;
10
+ /** Callback after successful save */
11
+ onSave?: (newValue: unknown) => void;
12
+ }
13
+
14
+ let { resourceName, recordId, field, value, onSave }: Props = $props();
15
+
16
+ let editing = $state(false);
17
+ let editValue = $state('');
18
+ let inputRef = $state<HTMLInputElement | null>(null);
19
+ let saving = $state(false);
20
+ const displayValue = $derived(String(value ?? ''));
21
+
22
+ const { mutation } = useUpdate({ get resource() { return resourceName; } });
23
+
24
+ function startEdit() {
25
+ if (field.type === 'number' || field.type === 'text' || field.type === 'url' || field.type === 'email') {
26
+ editing = true;
27
+ editValue = displayValue;
28
+ // Focus input on next tick
29
+ setTimeout(() => inputRef?.focus(), 0);
30
+ }
31
+ }
32
+
33
+ async function save() {
34
+ if (!editing || saving) return;
35
+ const newValue = field.type === 'number' ? Number(editValue) : editValue;
36
+ if (newValue === value) {
37
+ editing = false;
38
+ return;
39
+ }
40
+ saving = true;
41
+ try {
42
+ await mutation.mutateAsync({
43
+ id: recordId,
44
+ resource: resourceName,
45
+ variables: { [field.key]: newValue },
46
+ });
47
+ editing = false;
48
+ onSave?.(newValue);
49
+ } catch {
50
+ // Keep editing on error
51
+ } finally {
52
+ saving = false;
53
+ }
54
+ }
55
+
56
+ function cancel() {
57
+ editing = false;
58
+ editValue = displayValue;
59
+ }
60
+
61
+ function handleKeydown(e: KeyboardEvent) {
62
+ if (e.key === 'Enter') save();
63
+ if (e.key === 'Escape') cancel();
64
+ }
65
+ </script>
66
+
67
+ {#if editing}
68
+ <input
69
+ bind:this={inputRef}
70
+ type={field.type === 'number' ? 'number' : 'text'}
71
+ bind:value={editValue}
72
+ onkeydown={handleKeydown}
73
+ onblur={save}
74
+ disabled={saving}
75
+ class="h-7 w-full rounded border bg-background px-2 text-sm outline-none ring-1 ring-primary/50 focus:ring-2 focus:ring-primary transition-all"
76
+ />
77
+ {:else}
78
+ <span
79
+ class="inline-block cursor-pointer rounded px-1 py-0.5 -mx-1 hover:bg-accent/50 transition-colors"
80
+ ondblclick={startEdit}
81
+ title="Double-click to edit"
82
+ role="button"
83
+ tabindex="0"
84
+ onkeydown={(e) => { if (e.key === 'Enter' || e.key === 'F2') startEdit(); }}
85
+ >
86
+ {value ?? '—'}
87
+ </span>
88
+ {/if}
@@ -0,0 +1,12 @@
1
+ import type { FieldDefinition } from '@svadmin/core';
2
+ interface Props {
3
+ resourceName: string;
4
+ recordId: string | number;
5
+ field: FieldDefinition;
6
+ value: unknown;
7
+ /** Callback after successful save */
8
+ onSave?: (newValue: unknown) => void;
9
+ }
10
+ declare const InlineEdit: import("svelte").Component<Props, {}, "">;
11
+ type InlineEdit = ReturnType<typeof InlineEdit>;
12
+ export default InlineEdit;
@@ -0,0 +1,98 @@
1
+ <script lang="ts">
2
+ import { getChatProvider } from '@svadmin/core';
3
+ import { Sparkles, RefreshCcw, Loader2 } from '@lucide/svelte';
4
+ import { Button } from './ui/button/index.js';
5
+ import MarkdownRenderer from './MarkdownRenderer.svelte';
6
+
7
+ interface Props {
8
+ title?: string;
9
+ context: string;
10
+ autoFetch?: boolean;
11
+ class?: string;
12
+ }
13
+
14
+ let { title = 'AI Insights', context, autoFetch = true, class: className = '' }: Props = $props();
15
+
16
+ const provider = $derived(getChatProvider());
17
+
18
+ let isPredicting = $state(false);
19
+ let insightText = $state('');
20
+ let abortController: AbortController | null = null;
21
+ let hasFetchedForContext = $state('');
22
+
23
+ $effect(() => {
24
+ if (autoFetch && context && provider && hasFetchedForContext !== context) {
25
+ hasFetchedForContext = context;
26
+ getInsights();
27
+ }
28
+ });
29
+
30
+ export async function getInsights() {
31
+ if (!provider || !context) return;
32
+
33
+ isPredicting = true;
34
+ insightText = '';
35
+
36
+ if (abortController) abortController.abort();
37
+ abortController = new AbortController();
38
+
39
+ const prompt = `Based on the following data/context, generate 3 concise, highly professional insights.
40
+ Use bullet points. Do not include introductory text like "Here are the insights".
41
+
42
+ Data Context:
43
+ ${context}`;
44
+
45
+ try {
46
+ const result = provider.sendMessage(
47
+ [{ id: 'insights', role: 'user', content: prompt, timestamp: Date.now() }],
48
+ { signal: abortController.signal }
49
+ );
50
+
51
+ if (Symbol.asyncIterator in result) {
52
+ for await (const chunk of result as AsyncIterable<string>) {
53
+ insightText += chunk;
54
+ }
55
+ } else {
56
+ insightText = await result;
57
+ }
58
+ } catch (err: unknown) {
59
+ if (err instanceof Error && err.name !== 'AbortError') {
60
+ insightText = 'Failed to generate insights.';
61
+ }
62
+ } finally {
63
+ isPredicting = false;
64
+ }
65
+ }
66
+ </script>
67
+
68
+ <div class="rounded-xl border bg-card text-card-foreground shadow-sm flex flex-col {className}">
69
+ <div class="flex items-center justify-between p-4 border-b">
70
+ <div class="flex items-center gap-2 font-medium">
71
+ <Sparkles class="h-4 w-4 text-amber-500" />
72
+ {title}
73
+ </div>
74
+ <Button variant="ghost" size="icon-sm" class="h-6 w-6" onclick={getInsights} disabled={isPredicting || !provider}>
75
+ <RefreshCcw class="h-3 w-3 {isPredicting ? 'animate-spin' : ''}" />
76
+ </Button>
77
+ </div>
78
+
79
+ <div class="p-4 flex-1">
80
+ {#if !provider}
81
+ <div class="text-sm text-muted-foreground italic flex items-center justify-center h-full">
82
+ ChatProvider not configured.
83
+ </div>
84
+ {:else if isPredicting && !insightText}
85
+ <div class="flex items-center justify-center gap-2 text-sm text-muted-foreground h-full py-4">
86
+ <Loader2 class="h-4 w-4 animate-spin" /> Analyzing data...
87
+ </div>
88
+ {:else if !insightText}
89
+ <div class="text-sm text-muted-foreground italic flex items-center justify-center h-full">
90
+ No insights available. Click refresh to analyze.
91
+ </div>
92
+ {:else}
93
+ <div class="text-sm prose prose-sm dark:prose-invert prose-p:my-1 prose-ul:my-1 prose-li:my-0.5">
94
+ <MarkdownRenderer content={insightText} streaming={isPredicting} />
95
+ </div>
96
+ {/if}
97
+ </div>
98
+ </div>
@@ -0,0 +1,11 @@
1
+ interface Props {
2
+ title?: string;
3
+ context: string;
4
+ autoFetch?: boolean;
5
+ class?: string;
6
+ }
7
+ declare const InsightCard: import("svelte").Component<Props, {
8
+ getInsights: () => Promise<void>;
9
+ }, "">;
10
+ type InsightCard = ReturnType<typeof InsightCard>;
11
+ export default InsightCard;
@@ -0,0 +1,61 @@
1
+ <script lang="ts">
2
+ import { t } from '@svadmin/core/i18n';
3
+ import * as Dialog from './ui/dialog/index.js';
4
+
5
+ let { open = $bindable(false) }: { open?: boolean } = $props();
6
+
7
+ interface Shortcut {
8
+ keys: string[];
9
+ label: string;
10
+ }
11
+
12
+ const shortcuts: { group: string; items: Shortcut[] }[] = [
13
+ {
14
+ group: 'Navigation',
15
+ items: [
16
+ { keys: ['⌘', 'K'], label: 'Open command palette' },
17
+ { keys: ['?'], label: 'Show keyboard shortcuts' },
18
+ ],
19
+ },
20
+ {
21
+ group: 'Table',
22
+ items: [
23
+ { keys: ['⌘', 'F'], label: 'Focus search' },
24
+ { keys: ['Esc'], label: 'Close dialog / cancel' },
25
+ ],
26
+ },
27
+ {
28
+ group: 'Theme',
29
+ items: [
30
+ { keys: ['⌘', 'D'], label: 'Toggle dark mode' },
31
+ ],
32
+ },
33
+ ];
34
+ </script>
35
+
36
+ <Dialog.Root bind:open>
37
+ <Dialog.Content class="max-w-md">
38
+ <Dialog.Header>
39
+ <Dialog.Title>{t('common.keyboardShortcuts') || 'Keyboard Shortcuts'}</Dialog.Title>
40
+ </Dialog.Header>
41
+ <div class="space-y-4 py-2">
42
+ {#each shortcuts as group}
43
+ <div>
44
+ <h4 class="text-xs font-semibold uppercase tracking-wider text-muted-foreground mb-2">{group.group}</h4>
45
+ <div class="space-y-1.5">
46
+ {#each group.items as shortcut}
47
+ <div class="flex items-center justify-between py-1">
48
+ <span class="text-sm text-foreground">{shortcut.label}</span>
49
+ <div class="flex items-center gap-1">
50
+ {#each shortcut.keys as key}
51
+ <kbd class="inline-flex h-5 min-w-5 items-center justify-center rounded border bg-muted px-1.5 text-[10px] font-medium font-mono text-muted-foreground">{key}</kbd>
52
+ {/each}
53
+ </div>
54
+ </div>
55
+ {/each}
56
+ </div>
57
+ </div>
58
+ {/each}
59
+ </div>
60
+ </Dialog.Content>
61
+ </Dialog.Root>
@@ -0,0 +1,6 @@
1
+ type $$ComponentProps = {
2
+ open?: boolean;
3
+ };
4
+ declare const KeyboardShortcuts: import("svelte").Component<$$ComponentProps, {}, "open">;
5
+ type KeyboardShortcuts = ReturnType<typeof KeyboardShortcuts>;
6
+ export default KeyboardShortcuts;