@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,84 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { ChevronsUpDown, Building2, Check } from '@lucide/svelte';
4
+ import { Button } from './ui/button/index.js';
5
+ import * as DropdownMenu from './ui/dropdown-menu/index.js';
6
+ import type { Tenant } from '../types.js';
7
+
8
+ let {
9
+ tenants = [],
10
+ currentTenantId = $bindable(''),
11
+ collapsed = false,
12
+ onSwitch,
13
+ headerSnippet,
14
+ }: {
15
+ tenants: Tenant[];
16
+ currentTenantId?: string;
17
+ collapsed?: boolean;
18
+ onSwitch?: (tenantId: string) => void;
19
+ headerSnippet?: Snippet;
20
+ } = $props();
21
+
22
+ let currentTenant = $derived(tenants.find(t => t.id === currentTenantId) ?? tenants[0]);
23
+
24
+ function selectTenant(id: string) {
25
+ currentTenantId = id;
26
+ onSwitch?.(id);
27
+ }
28
+ </script>
29
+
30
+ {#if tenants.length > 0}
31
+ <DropdownMenu.Root>
32
+ <DropdownMenu.Trigger>
33
+ {#snippet child({ props }: { props: Record<string, unknown> })}
34
+ <button
35
+ {...props}
36
+ class="flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left transition-colors hover:bg-sidebar-accent/50
37
+ {collapsed ? 'justify-center' : ''}"
38
+ >
39
+ <div class="flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary text-sm font-bold">
40
+ {#if currentTenant?.logo}
41
+ <img src={currentTenant.logo} alt={currentTenant.name} class="h-full w-full rounded-lg object-cover" />
42
+ {:else}
43
+ <Building2 class="h-4 w-4" />
44
+ {/if}
45
+ </div>
46
+ {#if !collapsed}
47
+ <div class="flex-1 min-w-0">
48
+ <p class="truncate text-sm font-semibold text-sidebar-foreground">{currentTenant?.name ?? 'Select'}</p>
49
+ <p class="truncate text-[10px] text-sidebar-foreground/50">Workspace</p>
50
+ </div>
51
+ <ChevronsUpDown class="h-4 w-4 shrink-0 text-sidebar-foreground/40" />
52
+ {/if}
53
+ </button>
54
+ {/snippet}
55
+ </DropdownMenu.Trigger>
56
+ <DropdownMenu.Content class="w-56">
57
+ {#if headerSnippet}
58
+ <div class="px-2 py-1.5">
59
+ {@render headerSnippet()}
60
+ </div>
61
+ <DropdownMenu.Separator />
62
+ {/if}
63
+ <div class="px-2 py-1.5 text-xs text-muted-foreground">Workspaces</div>
64
+ {#each tenants as tenant}
65
+ <DropdownMenu.Item
66
+ class="flex items-center gap-3 cursor-pointer"
67
+ onclick={() => selectTenant(tenant.id)}
68
+ >
69
+ <div class="flex h-6 w-6 shrink-0 items-center justify-center rounded bg-primary/10 text-primary text-xs font-bold">
70
+ {#if tenant.logo}
71
+ <img src={tenant.logo} alt={tenant.name} class="h-full w-full rounded object-cover" />
72
+ {:else}
73
+ {tenant.name.charAt(0).toUpperCase()}
74
+ {/if}
75
+ </div>
76
+ <span class="flex-1 truncate">{tenant.name}</span>
77
+ {#if tenant.id === currentTenantId}
78
+ <Check class="h-4 w-4 text-primary" />
79
+ {/if}
80
+ </DropdownMenu.Item>
81
+ {/each}
82
+ </DropdownMenu.Content>
83
+ </DropdownMenu.Root>
84
+ {/if}
@@ -0,0 +1,12 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { Tenant } from '../types.js';
3
+ type $$ComponentProps = {
4
+ tenants: Tenant[];
5
+ currentTenantId?: string;
6
+ collapsed?: boolean;
7
+ onSwitch?: (tenantId: string) => void;
8
+ headerSnippet?: Snippet;
9
+ };
10
+ declare const TenantSwitcher: import("svelte").Component<$$ComponentProps, {}, "currentTenantId">;
11
+ type TenantSwitcher = ReturnType<typeof TenantSwitcher>;
12
+ export default TenantSwitcher;
@@ -0,0 +1,32 @@
1
+ <script lang="ts">
2
+ import { getAdminOptions } from '@svadmin/core';
3
+
4
+ let {
5
+ collapsed = false,
6
+ icon,
7
+ text,
8
+ wrapperStyles = '',
9
+ } = $props<{
10
+ collapsed?: boolean;
11
+ icon?: string;
12
+ text?: string;
13
+ wrapperStyles?: string;
14
+ }>();
15
+
16
+ const adminOptions = getAdminOptions();
17
+ const titleText = $derived(text ?? adminOptions.title?.text ?? 'Admin');
18
+ const titleIcon = $derived(icon ?? adminOptions.title?.icon);
19
+ </script>
20
+
21
+ <div class="flex items-center gap-2 {wrapperStyles}">
22
+ {#if titleIcon}
23
+ <img src={titleIcon} alt="" class="h-6 w-6 shrink-0" />
24
+ {:else}
25
+ <div class="flex h-7 w-7 items-center justify-center rounded-lg bg-primary text-primary-foreground text-sm font-bold">
26
+ {titleText.charAt(0).toUpperCase()}
27
+ </div>
28
+ {/if}
29
+ {#if !collapsed}
30
+ <span class="text-lg font-semibold text-foreground truncate">{titleText}</span>
31
+ {/if}
32
+ </div>
@@ -0,0 +1,9 @@
1
+ type $$ComponentProps = {
2
+ collapsed?: boolean;
3
+ icon?: string;
4
+ text?: string;
5
+ wrapperStyles?: string;
6
+ };
7
+ declare const ThemedTitle: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type ThemedTitle = ReturnType<typeof ThemedTitle>;
9
+ export default ThemedTitle;
@@ -0,0 +1,46 @@
1
+ <script lang="ts">
2
+ import { Toaster, toast as sonner } from 'sonner-svelte';
3
+ import { getResolvedTheme, getToastQueue, consumeToastQueue, getPromiseQueue, consumePromiseQueue } from '@svadmin/core';
4
+
5
+ const theme = $derived(getResolvedTheme() === 'dark' ? 'dark' : 'light');
6
+
7
+ $effect(() => {
8
+ const queue = getToastQueue();
9
+ if (queue.length > 0) {
10
+ for (const t of queue) {
11
+ switch (t.type) {
12
+ case 'success': sonner.success(t.message, { duration: t.duration }); break;
13
+ case 'error': sonner.error(t.message, { duration: t.duration }); break;
14
+ case 'warning': sonner.warning(t.message, { duration: t.duration }); break;
15
+ case 'info': sonner.info(t.message, { duration: t.duration }); break;
16
+ }
17
+ }
18
+ consumeToastQueue();
19
+ }
20
+ });
21
+
22
+ $effect(() => {
23
+ const pQueue = getPromiseQueue();
24
+ if (pQueue.length > 0) {
25
+ for (const p of pQueue) {
26
+ sonner.promise(p.promise, p.opts);
27
+ }
28
+ consumePromiseQueue();
29
+ }
30
+ });
31
+
32
+ const toasterProps = $derived({
33
+ position: "top-right",
34
+ richColors: true,
35
+ closeButton: true,
36
+ expand: true,
37
+ theme,
38
+ toastOptions: {
39
+ classes: {
40
+ toast: 'font-sans',
41
+ },
42
+ }
43
+ } as any);
44
+ </script>
45
+
46
+ <Toaster {...toasterProps} />
@@ -0,0 +1,3 @@
1
+ declare const Toast: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type Toast = ReturnType<typeof Toast>;
3
+ export default Toast;
@@ -0,0 +1,42 @@
1
+ <script lang="ts">
2
+ import * as Tooltip from './ui/tooltip/index.js';
3
+ import { Button } from './ui/button/index.js';
4
+ import type { Snippet } from 'svelte';
5
+ import type { HTMLButtonAttributes } from 'svelte/elements';
6
+
7
+ interface Props extends Omit<HTMLButtonAttributes, 'class' | 'children'> {
8
+ tooltip: string;
9
+ variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';
10
+ size?: 'default' | 'sm' | 'lg' | 'icon' | 'icon-sm';
11
+ side?: 'top' | 'right' | 'bottom' | 'left';
12
+ class?: string;
13
+ onclick?: (e: MouseEvent) => void;
14
+ children: Snippet;
15
+ }
16
+
17
+ let {
18
+ tooltip,
19
+ variant = 'ghost',
20
+ size = 'icon',
21
+ side = 'top',
22
+ class: className = '',
23
+ onclick,
24
+ disabled = false,
25
+ type = 'button',
26
+ tabindex,
27
+ children,
28
+ ...restProps
29
+ }: Props = $props();
30
+ </script>
31
+
32
+ <Tooltip.Root>
33
+ <Tooltip.Trigger>
34
+ {#snippet child({ props })}
35
+ {@const buttonProps = { ...props, ...restProps, variant, size, type, class: className, 'aria-label': restProps['aria-label'] ?? tooltip, onclick, disabled, tabindex } as any}
36
+ <Button {...buttonProps}>
37
+ {@render children()}
38
+ </Button>
39
+ {/snippet}
40
+ </Tooltip.Trigger>
41
+ <Tooltip.Content {side}>{tooltip}</Tooltip.Content>
42
+ </Tooltip.Root>
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLButtonAttributes } from 'svelte/elements';
3
+ interface Props extends Omit<HTMLButtonAttributes, 'class' | 'children'> {
4
+ tooltip: string;
5
+ variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';
6
+ size?: 'default' | 'sm' | 'lg' | 'icon' | 'icon-sm';
7
+ side?: 'top' | 'right' | 'bottom' | 'left';
8
+ class?: string;
9
+ onclick?: (e: MouseEvent) => void;
10
+ children: Snippet;
11
+ }
12
+ declare const TooltipButton: import("svelte").Component<Props, {}, "">;
13
+ type TooltipButton = ReturnType<typeof TooltipButton>;
14
+ export default TooltipButton;
@@ -0,0 +1,69 @@
1
+ <script lang="ts">
2
+ import { Button } from './ui/button/index.js';
3
+ import { Progress } from './ui/progress/index.js';
4
+ import { t } from '@svadmin/core/i18n';
5
+ import { slide } from 'svelte/transition';
6
+ import { X, Undo2 } from '@lucide/svelte';
7
+
8
+ let { message, duration = 5000, onUndo, onTimeout } = $props<{
9
+ message: string;
10
+ duration?: number;
11
+ onUndo: () => void;
12
+ onTimeout: () => void;
13
+ }>();
14
+
15
+ let remaining = $state(0);
16
+ let dismissed = $state(false);
17
+
18
+ // Initialize remaining from prop
19
+ $effect.pre(() => {
20
+ remaining = duration;
21
+ });
22
+
23
+ $effect(() => {
24
+ const interval = setInterval(() => {
25
+ remaining -= 100;
26
+ if (remaining <= 0) {
27
+ clearInterval(interval);
28
+ if (!dismissed) {
29
+ dismissed = true;
30
+ onTimeout();
31
+ }
32
+ }
33
+ }, 100);
34
+ return () => clearInterval(interval);
35
+ });
36
+
37
+ function handleUndo() {
38
+ dismissed = true;
39
+ onUndo();
40
+ }
41
+
42
+ function handleDismiss() {
43
+ dismissed = true;
44
+ onTimeout();
45
+ }
46
+
47
+ const progressValue = $derived(remaining / duration * 100);
48
+ </script>
49
+
50
+ {#if !dismissed}
51
+ <div
52
+ class="fixed bottom-6 left-1/2 -translate-x-1/2 z-[100] min-w-80 max-w-lg rounded-lg border bg-card shadow-lg overflow-hidden"
53
+ transition:slide={{ duration: 250 }}
54
+ >
55
+ <div class="flex items-center justify-between px-4 py-3 gap-3">
56
+ <p class="text-sm text-foreground">{message}</p>
57
+ <div class="flex items-center gap-1 flex-shrink-0">
58
+ <Button variant="ghost" size="sm" onclick={handleUndo} class="font-semibold text-primary">
59
+ <Undo2 class="h-3.5 w-3.5 mr-1" />
60
+ {t('common.undo')}
61
+ </Button>
62
+ <Button variant="ghost" size="icon" class="h-7 w-7" onclick={handleDismiss}>
63
+ <X class="h-3.5 w-3.5" />
64
+ </Button>
65
+ </div>
66
+ </div>
67
+ <Progress value={progressValue} class="h-1 rounded-none" />
68
+ </div>
69
+ {/if}
@@ -0,0 +1,9 @@
1
+ type $$ComponentProps = {
2
+ message: string;
3
+ duration?: number;
4
+ onUndo: () => void;
5
+ onTimeout: () => void;
6
+ };
7
+ declare const UndoableNotification: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type UndoableNotification = ReturnType<typeof UndoableNotification>;
9
+ export default UndoableNotification;
@@ -0,0 +1,89 @@
1
+ <script lang="ts">
2
+ import { useUpdatePassword } from '@svadmin/core';
3
+ import { t } from '@svadmin/core/i18n';
4
+ import { navigate } from '@svadmin/core/router';
5
+ import { Button } from './ui/button/index.js';
6
+ import * as Card from './ui/card/index.js';
7
+ import * as Alert from './ui/alert/index.js';
8
+ import PasswordInput from './PasswordInput.svelte';
9
+ import { ShieldCheck, Loader2, AlertCircle } from '@lucide/svelte';
10
+
11
+ let { title = 'Admin' } = $props<{
12
+ title?: string;
13
+ }>();
14
+
15
+ const updatePw = useUpdatePassword();
16
+
17
+ let password = $state('');
18
+ let confirmPassword = $state('');
19
+ let error = $state('');
20
+
21
+ async function handleSubmit(e: SubmitEvent) {
22
+ e.preventDefault();
23
+ error = '';
24
+
25
+ if (!password) { error = t('auth.passwordRequired'); return; }
26
+ if (password !== confirmPassword) { error = t('auth.passwordMismatch'); return; }
27
+
28
+ const result = await updatePw.mutate({ password, confirmPassword });
29
+ if (!result.success) {
30
+ error = result.error?.message ?? t('common.operationFailed');
31
+ }
32
+ }
33
+ </script>
34
+
35
+ <div class="min-h-screen flex items-center justify-center bg-background p-4">
36
+ <div class="w-full max-w-[380px]">
37
+ <Card.Card>
38
+ <Card.CardHeader class="text-center pb-2">
39
+ <div class="inline-flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10 text-primary mx-auto mb-3">
40
+ <ShieldCheck class="h-5 w-5" />
41
+ </div>
42
+ <Card.CardTitle class="text-xl">{t('auth.resetPassword')}</Card.CardTitle>
43
+ <p class="text-sm text-muted-foreground">{t('auth.resetPasswordDescription')}</p>
44
+ </Card.CardHeader>
45
+ <Card.CardContent>
46
+ <form onsubmit={handleSubmit} class="space-y-4">
47
+ {#if error}
48
+ <Alert.Root variant="destructive">
49
+ <AlertCircle class="h-4 w-4" />
50
+ <Alert.Description>{error}</Alert.Description>
51
+ </Alert.Root>
52
+ {/if}
53
+
54
+ <PasswordInput
55
+ id="new-password"
56
+ label={t('auth.password')}
57
+ bind:value={password}
58
+ autocomplete="new-password"
59
+ showStrength
60
+ />
61
+
62
+ <PasswordInput
63
+ id="confirm-password"
64
+ label={t('auth.confirmPassword')}
65
+ bind:value={confirmPassword}
66
+ autocomplete="new-password"
67
+ />
68
+
69
+ <Button type="submit" class="w-full" disabled={updatePw.isLoading}>
70
+ {#if updatePw.isLoading}
71
+ <Loader2 class="h-4 w-4 animate-spin mr-2" />
72
+ {/if}
73
+ {t('auth.resetPassword')}
74
+ </Button>
75
+
76
+ <div class="flex items-center justify-center mt-2">
77
+ <Button variant="link" class="text-sm h-auto p-0 font-medium" onclick={() => navigate('/login')}>
78
+ {t('auth.backToLogin')}
79
+ </Button>
80
+ </div>
81
+ </form>
82
+ </Card.CardContent>
83
+ </Card.Card>
84
+
85
+ <p class="text-xs text-muted-foreground mt-4 text-center opacity-60">
86
+ Powered by {title}
87
+ </p>
88
+ </div>
89
+ </div>
@@ -0,0 +1,6 @@
1
+ type $$ComponentProps = {
2
+ title?: string;
3
+ };
4
+ declare const UpdatePasswordPage: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type UpdatePasswordPage = ReturnType<typeof UpdatePasswordPage>;
6
+ export default UpdatePasswordPage;
@@ -0,0 +1,76 @@
1
+ <script lang="ts">
2
+ /**
3
+ * VirtualTable — A lightweight virtual scrolling wrapper for large datasets.
4
+ * Uses IntersectionObserver-based approach instead of a heavy dependency.
5
+ *
6
+ * Usage:
7
+ * <VirtualTable items={rows} rowHeight={40} containerHeight={500}>
8
+ * {#snippet row(item, index)}
9
+ * <tr>...</tr>
10
+ * {/snippet}
11
+ * </VirtualTable>
12
+ */
13
+ import type { Snippet } from 'svelte';
14
+
15
+ interface Props<T> {
16
+ items: T[];
17
+ /** Estimated row height in pixels */
18
+ rowHeight?: number;
19
+ /** Container height in pixels */
20
+ containerHeight?: number;
21
+ /** Number of extra rows to render above/below visible area */
22
+ overscan?: number;
23
+ /** Row rendering snippet */
24
+ row: Snippet<[T, number]>;
25
+ class?: string;
26
+ }
27
+
28
+ let {
29
+ items,
30
+ rowHeight = 40,
31
+ containerHeight = 500,
32
+ overscan = 5,
33
+ row,
34
+ class: className = '',
35
+ }: Props<unknown> = $props();
36
+
37
+ let scrollTop = $state(0);
38
+ let containerRef = $state<HTMLDivElement | null>(null);
39
+
40
+ const totalHeight = $derived(items.length * rowHeight);
41
+
42
+ const visibleRange = $derived.by(() => {
43
+ const start = Math.max(0, Math.floor(scrollTop / rowHeight) - overscan);
44
+ const visibleCount = Math.ceil(containerHeight / rowHeight);
45
+ const end = Math.min(items.length - 1, start + visibleCount + overscan * 2);
46
+ return { start, end };
47
+ });
48
+
49
+ const visibleItems = $derived(
50
+ items.slice(visibleRange.start, visibleRange.end + 1).map((item, i) => ({
51
+ item,
52
+ index: visibleRange.start + i,
53
+ offsetY: (visibleRange.start + i) * rowHeight,
54
+ }))
55
+ );
56
+
57
+ function handleScroll(e: Event) {
58
+ const target = e.target as HTMLDivElement;
59
+ scrollTop = target.scrollTop;
60
+ }
61
+ </script>
62
+
63
+ <div
64
+ bind:this={containerRef}
65
+ class="overflow-auto {className}"
66
+ style="height: {containerHeight}px;"
67
+ onscroll={handleScroll}
68
+ >
69
+ <div style="position: relative; height: {totalHeight}px; width: 100%;">
70
+ {#each visibleItems as { item, index, offsetY } (index)}
71
+ <div style="position: absolute; top: {offsetY}px; left: 0; right: 0; height: {rowHeight}px;">
72
+ {@render row(item, index)}
73
+ </div>
74
+ {/each}
75
+ </div>
76
+ </div>
@@ -0,0 +1,27 @@
1
+ /**
2
+ * VirtualTable — A lightweight virtual scrolling wrapper for large datasets.
3
+ * Uses IntersectionObserver-based approach instead of a heavy dependency.
4
+ *
5
+ * Usage:
6
+ * <VirtualTable items={rows} rowHeight={40} containerHeight={500}>
7
+ * {#snippet row(item, index)}
8
+ * <tr>...</tr>
9
+ * {/snippet}
10
+ * </VirtualTable>
11
+ */
12
+ import type { Snippet } from 'svelte';
13
+ interface Props<T> {
14
+ items: T[];
15
+ /** Estimated row height in pixels */
16
+ rowHeight?: number;
17
+ /** Container height in pixels */
18
+ containerHeight?: number;
19
+ /** Number of extra rows to render above/below visible area */
20
+ overscan?: number;
21
+ /** Row rendering snippet */
22
+ row: Snippet<[T, number]>;
23
+ class?: string;
24
+ }
25
+ declare const VirtualTable: import("svelte").Component<Props<unknown>, {}, "">;
26
+ type VirtualTable = ReturnType<typeof VirtualTable>;
27
+ export default VirtualTable;
@@ -0,0 +1,120 @@
1
+ <script lang="ts">
2
+ import { Mic, MicOff, Loader2 } from '@lucide/svelte';
3
+ import TooltipButton from './TooltipButton.svelte';
4
+
5
+ // Web Speech API type declarations
6
+ interface SpeechRecognitionEvent extends Event {
7
+ results: SpeechRecognitionResultList;
8
+ }
9
+ interface SpeechRecognitionErrorEvent extends Event {
10
+ error: string;
11
+ }
12
+ interface SpeechRecognitionInstance extends EventTarget {
13
+ continuous: boolean;
14
+ interimResults: boolean;
15
+ lang: string;
16
+ onstart: (() => void) | null;
17
+ onresult: ((event: SpeechRecognitionEvent) => void) | null;
18
+ onerror: ((event: SpeechRecognitionErrorEvent) => void) | null;
19
+ onend: (() => void) | null;
20
+ start(): void;
21
+ stop(): void;
22
+ }
23
+
24
+ interface Props {
25
+ /** Called when a speech recognition result is finalized */
26
+ onresult?: (text: string) => void;
27
+ /** Called when the engine starts listening */
28
+ onstart?: () => void;
29
+ /** Called when the engine stops listening */
30
+ onend?: () => void;
31
+ /** Standard button size */
32
+ size?: 'default' | 'sm' | 'lg' | 'icon' | 'icon-sm';
33
+ /** Custom class for the button */
34
+ class?: string;
35
+ }
36
+
37
+ let {
38
+ onresult,
39
+ onstart,
40
+ onend,
41
+ size = 'icon',
42
+ class: className = ''
43
+ }: Props = $props();
44
+
45
+ let isListening = $state(false);
46
+ let notSupported = $state(false);
47
+ let recognition: SpeechRecognitionInstance | null = null;
48
+
49
+ // Initialize SpeechRecognition on mount
50
+ $effect(() => {
51
+ const SpeechRecognitionCtor = (
52
+ (globalThis as Record<string, unknown>).SpeechRecognition ||
53
+ (globalThis as Record<string, unknown>).webkitSpeechRecognition
54
+ ) as (new () => SpeechRecognitionInstance) | undefined;
55
+
56
+ if (!SpeechRecognitionCtor) {
57
+ notSupported = true;
58
+ return;
59
+ }
60
+
61
+ recognition = new SpeechRecognitionCtor();
62
+ recognition.continuous = false;
63
+ recognition.interimResults = false;
64
+ recognition.lang = navigator.language || 'en-US';
65
+
66
+ recognition.onstart = () => {
67
+ isListening = true;
68
+ if (onstart) onstart();
69
+ };
70
+
71
+ recognition.onresult = (event: SpeechRecognitionEvent) => {
72
+ const transcript = Array.from(event.results)
73
+ .map((result: SpeechRecognitionResult) => result[0])
74
+ .map((result: SpeechRecognitionAlternative) => result.transcript)
75
+ .join('');
76
+
77
+ if (onresult && transcript) {
78
+ onresult(transcript);
79
+ }
80
+ };
81
+
82
+ recognition.onerror = (event: SpeechRecognitionErrorEvent) => {
83
+ console.warn('SpeechRecognition error:', event.error);
84
+ isListening = false;
85
+ if (onend) onend();
86
+ };
87
+
88
+ recognition.onend = () => {
89
+ isListening = false;
90
+ if (onend) onend();
91
+ };
92
+ });
93
+
94
+ function toggleListening(e?: MouseEvent) {
95
+ if (e) e.preventDefault();
96
+ if (!recognition) return;
97
+
98
+ if (isListening) {
99
+ recognition.stop();
100
+ } else {
101
+ recognition.start();
102
+ }
103
+ }
104
+ </script>
105
+
106
+ <TooltipButton
107
+ tooltip={notSupported ? "Voice input not supported in this browser" : (isListening ? "Stop listening" : "Start voice input")}
108
+ variant={isListening ? "destructive" : "ghost"}
109
+ {size}
110
+ class="{isListening ? 'animate-pulse' : ''} {className}"
111
+ onclick={toggleListening}
112
+ disabled={notSupported}
113
+ >
114
+ {#if isListening}
115
+ <Loader2 class="h-4 w-4 animate-spin -ml-1 mr-1.5 inline-block sm:hidden" />
116
+ <MicOff class="h-4 w-4" />
117
+ {:else}
118
+ <Mic class="h-4 w-4" />
119
+ {/if}
120
+ </TooltipButton>
@@ -0,0 +1,15 @@
1
+ interface Props {
2
+ /** Called when a speech recognition result is finalized */
3
+ onresult?: (text: string) => void;
4
+ /** Called when the engine starts listening */
5
+ onstart?: () => void;
6
+ /** Called when the engine stops listening */
7
+ onend?: () => void;
8
+ /** Standard button size */
9
+ size?: 'default' | 'sm' | 'lg' | 'icon' | 'icon-sm';
10
+ /** Custom class for the button */
11
+ class?: string;
12
+ }
13
+ declare const VoiceInput: import("svelte").Component<Props, {}, "">;
14
+ type VoiceInput = ReturnType<typeof VoiceInput>;
15
+ export default VoiceInput;