@svadmin/ui 0.29.3 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/README.md +18 -0
- package/dist/actions.d.ts +35 -0
- package/dist/actions.js +84 -0
- package/dist/app.css +673 -0
- package/dist/component-registry.svelte.d.ts +36 -0
- package/dist/component-registry.svelte.js +20 -0
- package/dist/components/AICommandBar.svelte +180 -0
- package/dist/components/AICommandBar.svelte.d.ts +6 -0
- package/dist/components/AboutSettings.svelte +106 -0
- package/dist/components/AboutSettings.svelte.d.ts +18 -0
- package/dist/components/AdminApp.svelte +205 -0
- package/dist/components/AdminApp.svelte.d.ts +28 -0
- package/dist/components/AnimatedCounter.svelte +46 -0
- package/dist/components/AnimatedCounter.svelte.d.ts +11 -0
- package/dist/components/AnomalyBadge.svelte +65 -0
- package/dist/components/AnomalyBadge.svelte.d.ts +16 -0
- package/dist/components/AppearanceSettings.svelte +183 -0
- package/dist/components/AppearanceSettings.svelte.d.ts +3 -0
- package/dist/components/AuditLogDrawer.svelte +93 -0
- package/dist/components/AuditLogDrawer.svelte.d.ts +8 -0
- package/dist/components/AuditLogViewer.svelte +226 -0
- package/dist/components/AuditLogViewer.svelte.d.ts +3 -0
- package/dist/components/Authenticated.svelte +51 -0
- package/dist/components/Authenticated.svelte.d.ts +11 -0
- package/dist/components/AutoForm.svelte +244 -0
- package/dist/components/AutoForm.svelte.d.ts +20 -0
- package/dist/components/AutoSaveIndicator.svelte +35 -0
- package/dist/components/AutoSaveIndicator.svelte.d.ts +9 -0
- package/dist/components/AutoTable.svelte +839 -0
- package/dist/components/AutoTable.svelte.d.ts +44 -0
- package/dist/components/Breadcrumbs.svelte +58 -0
- package/dist/components/Breadcrumbs.svelte.d.ts +3 -0
- package/dist/components/CanAccess.svelte +23 -0
- package/dist/components/CanAccess.svelte.d.ts +12 -0
- package/dist/components/CatchAllNavigate.svelte +21 -0
- package/dist/components/CatchAllNavigate.svelte.d.ts +3 -0
- package/dist/components/ChatDialog.svelte +535 -0
- package/dist/components/ChatDialog.svelte.d.ts +14 -0
- package/dist/components/ComboboxField.svelte +129 -0
- package/dist/components/ComboboxField.svelte.d.ts +17 -0
- package/dist/components/CommandPalette.svelte +135 -0
- package/dist/components/CommandPalette.svelte.d.ts +8 -0
- package/dist/components/ConfigErrorScreen.svelte +126 -0
- package/dist/components/ConfigErrorScreen.svelte.d.ts +11 -0
- package/dist/components/ConfirmDialog.svelte +53 -0
- package/dist/components/ConfirmDialog.svelte.d.ts +13 -0
- package/dist/components/CopilotPanel.svelte +163 -0
- package/dist/components/CopilotPanel.svelte.d.ts +6 -0
- package/dist/components/CreatePage.svelte +39 -0
- package/dist/components/CreatePage.svelte.d.ts +10 -0
- package/dist/components/DevTools.svelte +149 -0
- package/dist/components/DevTools.svelte.d.ts +3 -0
- package/dist/components/DraggableGrid.svelte +86 -0
- package/dist/components/DraggableGrid.svelte.d.ts +17 -0
- package/dist/components/DraggableHeader.svelte +112 -0
- package/dist/components/DraggableHeader.svelte.d.ts +25 -0
- package/dist/components/DrawerForm.svelte +35 -0
- package/dist/components/DrawerForm.svelte.d.ts +11 -0
- package/dist/components/EditPage.svelte +52 -0
- package/dist/components/EditPage.svelte.d.ts +12 -0
- package/dist/components/EmptyState.svelte +31 -0
- package/dist/components/EmptyState.svelte.d.ts +8 -0
- package/dist/components/ErrorBoundary.svelte +49 -0
- package/dist/components/ErrorBoundary.svelte.d.ts +12 -0
- package/dist/components/ErrorComponent.svelte +36 -0
- package/dist/components/ErrorComponent.svelte.d.ts +9 -0
- package/dist/components/FieldRenderer.svelte +357 -0
- package/dist/components/FieldRenderer.svelte.d.ts +13 -0
- package/dist/components/ForgotPasswordPage.svelte +112 -0
- package/dist/components/ForgotPasswordPage.svelte.d.ts +6 -0
- package/dist/components/Header.svelte +94 -0
- package/dist/components/Header.svelte.d.ts +12 -0
- package/dist/components/InferencerPanel.svelte +192 -0
- package/dist/components/InferencerPanel.svelte.d.ts +3 -0
- package/dist/components/InfiniteList.svelte +93 -0
- package/dist/components/InfiniteList.svelte.d.ts +20 -0
- package/dist/components/InlineEdit.svelte +88 -0
- package/dist/components/InlineEdit.svelte.d.ts +12 -0
- package/dist/components/InsightCard.svelte +98 -0
- package/dist/components/InsightCard.svelte.d.ts +11 -0
- package/dist/components/KeyboardShortcuts.svelte +61 -0
- package/dist/components/KeyboardShortcuts.svelte.d.ts +6 -0
- package/dist/components/Layout.svelte +167 -0
- package/dist/components/Layout.svelte.d.ts +12 -0
- package/dist/components/ListPage.svelte +71 -0
- package/dist/components/ListPage.svelte.d.ts +32 -0
- package/dist/components/LiveIndicator.svelte +58 -0
- package/dist/components/LiveIndicator.svelte.d.ts +12 -0
- package/dist/components/LoginPage.svelte +163 -0
- package/dist/components/LoginPage.svelte.d.ts +28 -0
- package/dist/components/MarkdownRenderer.svelte +127 -0
- package/dist/components/MarkdownRenderer.svelte.d.ts +11 -0
- package/dist/components/ModalForm.svelte +38 -0
- package/dist/components/ModalForm.svelte.d.ts +10 -0
- package/dist/components/NavigateToResource.svelte +20 -0
- package/dist/components/NavigateToResource.svelte.d.ts +3 -0
- package/dist/components/PageHeader.svelte +39 -0
- package/dist/components/PageHeader.svelte.d.ts +11 -0
- package/dist/components/PageSkeleton.svelte +71 -0
- package/dist/components/PageSkeleton.svelte.d.ts +7 -0
- package/dist/components/PasswordInput.svelte +96 -0
- package/dist/components/PasswordInput.svelte.d.ts +12 -0
- package/dist/components/PermissionMatrix.svelte +185 -0
- package/dist/components/PermissionMatrix.svelte.d.ts +19 -0
- package/dist/components/ProfilePage.svelte +284 -0
- package/dist/components/ProfilePage.svelte.d.ts +3 -0
- package/dist/components/RegisterPage.svelte +112 -0
- package/dist/components/RegisterPage.svelte.d.ts +7 -0
- package/dist/components/RolesSettings.svelte +146 -0
- package/dist/components/RolesSettings.svelte.d.ts +3 -0
- package/dist/components/SettingsPage.svelte +113 -0
- package/dist/components/SettingsPage.svelte.d.ts +3 -0
- package/dist/components/ShowPage.svelte +73 -0
- package/dist/components/ShowPage.svelte.d.ts +7 -0
- package/dist/components/Sidebar.svelte +417 -0
- package/dist/components/Sidebar.svelte.d.ts +14 -0
- package/dist/components/SidebarItem.svelte +129 -0
- package/dist/components/SidebarItem.svelte.d.ts +11 -0
- package/dist/components/SmartSuggest.svelte +158 -0
- package/dist/components/SmartSuggest.svelte.d.ts +19 -0
- package/dist/components/StatsCard.svelte +79 -0
- package/dist/components/StatsCard.svelte.d.ts +23 -0
- package/dist/components/StepsForm.svelte +194 -0
- package/dist/components/StepsForm.svelte.d.ts +13 -0
- package/dist/components/TaskQueueDrawer.svelte +158 -0
- package/dist/components/TaskQueueDrawer.svelte.d.ts +11 -0
- package/dist/components/TenantSwitcher.svelte +84 -0
- package/dist/components/TenantSwitcher.svelte.d.ts +12 -0
- package/dist/components/ThemedTitle.svelte +32 -0
- package/dist/components/ThemedTitle.svelte.d.ts +9 -0
- package/dist/components/Toast.svelte +46 -0
- package/dist/components/Toast.svelte.d.ts +3 -0
- package/dist/components/TooltipButton.svelte +42 -0
- package/dist/components/TooltipButton.svelte.d.ts +14 -0
- package/dist/components/UndoableNotification.svelte +69 -0
- package/dist/components/UndoableNotification.svelte.d.ts +9 -0
- package/dist/components/UpdatePasswordPage.svelte +89 -0
- package/dist/components/UpdatePasswordPage.svelte.d.ts +6 -0
- package/dist/components/VirtualTable.svelte +76 -0
- package/dist/components/VirtualTable.svelte.d.ts +27 -0
- package/dist/components/VoiceInput.svelte +120 -0
- package/dist/components/VoiceInput.svelte.d.ts +15 -0
- package/dist/components/buttons/CloneButton.svelte +30 -0
- package/dist/components/buttons/CloneButton.svelte.d.ts +13 -0
- package/dist/components/buttons/CreateButton.svelte +29 -0
- package/dist/components/buttons/CreateButton.svelte.d.ts +12 -0
- package/dist/components/buttons/DeleteButton.svelte +59 -0
- package/dist/components/buttons/DeleteButton.svelte.d.ts +15 -0
- package/dist/components/buttons/EditButton.svelte +30 -0
- package/dist/components/buttons/EditButton.svelte.d.ts +13 -0
- package/dist/components/buttons/ExportButton.svelte +30 -0
- package/dist/components/buttons/ExportButton.svelte.d.ts +12 -0
- package/dist/components/buttons/ImportButton.svelte +56 -0
- package/dist/components/buttons/ImportButton.svelte.d.ts +19 -0
- package/dist/components/buttons/ListButton.svelte +23 -0
- package/dist/components/buttons/ListButton.svelte.d.ts +8 -0
- package/dist/components/buttons/RefreshButton.svelte +36 -0
- package/dist/components/buttons/RefreshButton.svelte.d.ts +8 -0
- package/dist/components/buttons/SaveButton.svelte +27 -0
- package/dist/components/buttons/SaveButton.svelte.d.ts +9 -0
- package/dist/components/buttons/ShowButton.svelte +31 -0
- package/dist/components/buttons/ShowButton.svelte.d.ts +13 -0
- package/dist/components/buttons/index.d.ts +10 -0
- package/dist/components/buttons/index.js +10 -0
- package/dist/components/charts/BarChart.svelte +69 -0
- package/dist/components/charts/BarChart.svelte.d.ts +15 -0
- package/dist/components/charts/LineChart.svelte +115 -0
- package/dist/components/charts/LineChart.svelte.d.ts +17 -0
- package/dist/components/charts/PieChart.svelte +95 -0
- package/dist/components/charts/PieChart.svelte.d.ts +15 -0
- package/dist/components/charts/index.d.ts +3 -0
- package/dist/components/charts/index.js +3 -0
- package/dist/components/fieldComponentMap.d.ts +24 -0
- package/dist/components/fieldComponentMap.js +65 -0
- package/dist/components/fields/ArrayField.svelte +86 -0
- package/dist/components/fields/ArrayField.svelte.d.ts +9 -0
- package/dist/components/fields/BooleanField.svelte +13 -0
- package/dist/components/fields/BooleanField.svelte.d.ts +8 -0
- package/dist/components/fields/DateField.svelte +6 -0
- package/dist/components/fields/DateField.svelte.d.ts +8 -0
- package/dist/components/fields/EmailField.svelte +9 -0
- package/dist/components/fields/EmailField.svelte.d.ts +6 -0
- package/dist/components/fields/FileField.svelte +14 -0
- package/dist/components/fields/FileField.svelte.d.ts +7 -0
- package/dist/components/fields/ImageField.svelte +9 -0
- package/dist/components/fields/ImageField.svelte.d.ts +9 -0
- package/dist/components/fields/JsonField.svelte +72 -0
- package/dist/components/fields/JsonField.svelte.d.ts +6 -0
- package/dist/components/fields/MarkdownField.svelte +9 -0
- package/dist/components/fields/MarkdownField.svelte.d.ts +6 -0
- package/dist/components/fields/MultiSelectField.svelte +21 -0
- package/dist/components/fields/MultiSelectField.svelte.d.ts +10 -0
- package/dist/components/fields/NumberField.svelte +6 -0
- package/dist/components/fields/NumberField.svelte.d.ts +8 -0
- package/dist/components/fields/RelationField.svelte +24 -0
- package/dist/components/fields/RelationField.svelte.d.ts +8 -0
- package/dist/components/fields/RichTextField.svelte +35 -0
- package/dist/components/fields/RichTextField.svelte.d.ts +7 -0
- package/dist/components/fields/SelectField.svelte +14 -0
- package/dist/components/fields/SelectField.svelte.d.ts +10 -0
- package/dist/components/fields/TagField.svelte +12 -0
- package/dist/components/fields/TagField.svelte.d.ts +6 -0
- package/dist/components/fields/TextField.svelte +11 -0
- package/dist/components/fields/TextField.svelte.d.ts +7 -0
- package/dist/components/fields/UrlField.svelte +14 -0
- package/dist/components/fields/UrlField.svelte.d.ts +7 -0
- package/dist/components/ui/alert/alert-description.svelte +17 -0
- package/dist/components/ui/alert/alert-description.svelte.d.ts +6 -0
- package/dist/components/ui/alert/alert-title.svelte +17 -0
- package/dist/components/ui/alert/alert-title.svelte.d.ts +6 -0
- package/dist/components/ui/alert/alert.svelte +44 -0
- package/dist/components/ui/alert/alert.svelte.d.ts +32 -0
- package/dist/components/ui/alert/index.d.ts +4 -0
- package/dist/components/ui/alert/index.js +5 -0
- package/dist/components/ui/alert-dialog/alert-dialog-content.svelte +29 -0
- package/dist/components/ui/alert-dialog/alert-dialog-content.svelte.d.ts +10 -0
- package/dist/components/ui/alert-dialog/alert-dialog-description.svelte +16 -0
- package/dist/components/ui/alert-dialog/alert-dialog-description.svelte.d.ts +7 -0
- package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte +11 -0
- package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte.d.ts +8 -0
- package/dist/components/ui/alert-dialog/alert-dialog-header.svelte +11 -0
- package/dist/components/ui/alert-dialog/alert-dialog-header.svelte.d.ts +8 -0
- package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte +16 -0
- package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte.d.ts +7 -0
- package/dist/components/ui/alert-dialog/alert-dialog-portal.svelte +6 -0
- package/dist/components/ui/alert-dialog/alert-dialog-portal.svelte.d.ts +3 -0
- package/dist/components/ui/alert-dialog/alert-dialog-title.svelte +16 -0
- package/dist/components/ui/alert-dialog/alert-dialog-title.svelte.d.ts +7 -0
- package/dist/components/ui/alert-dialog/index.d.ts +13 -0
- package/dist/components/ui/alert-dialog/index.js +13 -0
- package/dist/components/ui/avatar/avatar.svelte +63 -0
- package/dist/components/ui/avatar/avatar.svelte.d.ts +32 -0
- package/dist/components/ui/avatar/index.d.ts +2 -0
- package/dist/components/ui/avatar/index.js +2 -0
- package/dist/components/ui/badge/badge.svelte +49 -0
- package/dist/components/ui/badge/badge.svelte.d.ts +38 -0
- package/dist/components/ui/badge/index.d.ts +2 -0
- package/dist/components/ui/badge/index.js +3 -0
- package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +18 -0
- package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte.d.ts +4 -0
- package/dist/components/ui/breadcrumb/breadcrumb-item.svelte +15 -0
- package/dist/components/ui/breadcrumb/breadcrumb-item.svelte.d.ts +8 -0
- package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +15 -0
- package/dist/components/ui/breadcrumb/breadcrumb-link.svelte.d.ts +8 -0
- package/dist/components/ui/breadcrumb/breadcrumb-list.svelte +15 -0
- package/dist/components/ui/breadcrumb/breadcrumb-list.svelte.d.ts +8 -0
- package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +18 -0
- package/dist/components/ui/breadcrumb/breadcrumb-page.svelte.d.ts +8 -0
- package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +22 -0
- package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte.d.ts +8 -0
- package/dist/components/ui/breadcrumb/breadcrumb.svelte +11 -0
- package/dist/components/ui/breadcrumb/breadcrumb.svelte.d.ts +8 -0
- package/dist/components/ui/breadcrumb/index.d.ts +7 -0
- package/dist/components/ui/breadcrumb/index.js +7 -0
- package/dist/components/ui/button/button.svelte +90 -0
- package/dist/components/ui/button/button.svelte.d.ts +70 -0
- package/dist/components/ui/button/index.d.ts +2 -0
- package/dist/components/ui/button/index.js +5 -0
- package/dist/components/ui/card/card-action.svelte +23 -0
- package/dist/components/ui/card/card-action.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-content.svelte +20 -0
- package/dist/components/ui/card/card-content.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-description.svelte +20 -0
- package/dist/components/ui/card/card-description.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-footer.svelte +20 -0
- package/dist/components/ui/card/card-footer.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-header.svelte +23 -0
- package/dist/components/ui/card/card-header.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-title.svelte +15 -0
- package/dist/components/ui/card/card-title.svelte.d.ts +5 -0
- package/dist/components/ui/card/card.svelte +22 -0
- package/dist/components/ui/card/card.svelte.d.ts +8 -0
- package/dist/components/ui/card/index.d.ts +8 -0
- package/dist/components/ui/card/index.js +10 -0
- package/dist/components/ui/checkbox/checkbox.svelte +39 -0
- package/dist/components/ui/checkbox/checkbox.svelte.d.ts +4 -0
- package/dist/components/ui/checkbox/index.d.ts +2 -0
- package/dist/components/ui/checkbox/index.js +4 -0
- package/dist/components/ui/collapsible/index.d.ts +5 -0
- package/dist/components/ui/collapsible/index.js +5 -0
- package/dist/components/ui/command/command-dialog.svelte +31 -0
- package/dist/components/ui/command/command-dialog.svelte.d.ts +10 -0
- package/dist/components/ui/command/index.d.ts +2 -0
- package/dist/components/ui/command/index.js +2 -0
- package/dist/components/ui/context-menu/index.d.ts +9 -0
- package/dist/components/ui/context-menu/index.js +9 -0
- package/dist/components/ui/dialog/dialog-close.svelte +11 -0
- package/dist/components/ui/dialog/dialog-close.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-content.svelte +48 -0
- package/dist/components/ui/dialog/dialog-content.svelte.d.ts +13 -0
- package/dist/components/ui/dialog/dialog-description.svelte +17 -0
- package/dist/components/ui/dialog/dialog-description.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-footer.svelte +32 -0
- package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +8 -0
- package/dist/components/ui/dialog/dialog-header.svelte +20 -0
- package/dist/components/ui/dialog/dialog-header.svelte.d.ts +5 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte +17 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-portal.svelte +7 -0
- package/dist/components/ui/dialog/dialog-portal.svelte.d.ts +3 -0
- package/dist/components/ui/dialog/dialog-title.svelte +17 -0
- package/dist/components/ui/dialog/dialog-title.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-trigger.svelte +11 -0
- package/dist/components/ui/dialog/dialog-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog.svelte +7 -0
- package/dist/components/ui/dialog/dialog.svelte.d.ts +3 -0
- package/dist/components/ui/dialog/index.d.ts +11 -0
- package/dist/components/ui/dialog/index.js +13 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +43 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +35 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +36 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +9 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +10 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +6 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +27 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +11 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +45 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.svelte.d.ts +9 -0
- package/dist/components/ui/dropdown-menu/index.d.ts +7 -0
- package/dist/components/ui/dropdown-menu/index.js +7 -0
- package/dist/components/ui/input/index.d.ts +2 -0
- package/dist/components/ui/input/index.js +4 -0
- package/dist/components/ui/input/input.svelte +48 -0
- package/dist/components/ui/input/input.svelte.d.ts +13 -0
- package/dist/components/ui/label/index.d.ts +1 -0
- package/dist/components/ui/label/index.js +1 -0
- package/dist/components/ui/label/label.svelte +18 -0
- package/dist/components/ui/label/label.svelte.d.ts +5 -0
- package/dist/components/ui/pagination/index.d.ts +7 -0
- package/dist/components/ui/pagination/index.js +7 -0
- package/dist/components/ui/pagination/pagination-content.svelte +11 -0
- package/dist/components/ui/pagination/pagination-content.svelte.d.ts +8 -0
- package/dist/components/ui/pagination/pagination-ellipsis.svelte +12 -0
- package/dist/components/ui/pagination/pagination-ellipsis.svelte.d.ts +4 -0
- package/dist/components/ui/pagination/pagination-item.svelte +11 -0
- package/dist/components/ui/pagination/pagination-item.svelte.d.ts +8 -0
- package/dist/components/ui/pagination/pagination-link.svelte +26 -0
- package/dist/components/ui/pagination/pagination-link.svelte.d.ts +9 -0
- package/dist/components/ui/pagination/pagination-next.svelte +22 -0
- package/dist/components/ui/pagination/pagination-next.svelte.d.ts +8 -0
- package/dist/components/ui/pagination/pagination-previous.svelte +22 -0
- package/dist/components/ui/pagination/pagination-previous.svelte.d.ts +8 -0
- package/dist/components/ui/pagination/pagination.svelte +11 -0
- package/dist/components/ui/pagination/pagination.svelte.d.ts +8 -0
- package/dist/components/ui/popover/index.d.ts +6 -0
- package/dist/components/ui/popover/index.js +6 -0
- package/dist/components/ui/popover/popover-content.svelte +25 -0
- package/dist/components/ui/popover/popover-content.svelte.d.ts +7 -0
- package/dist/components/ui/progress/index.d.ts +1 -0
- package/dist/components/ui/progress/index.js +1 -0
- package/dist/components/ui/progress/progress.svelte +22 -0
- package/dist/components/ui/progress/progress.svelte.d.ts +8 -0
- package/dist/components/ui/scroll-area/index.d.ts +1 -0
- package/dist/components/ui/scroll-area/index.js +1 -0
- package/dist/components/ui/scroll-area/scroll-area.svelte +20 -0
- package/dist/components/ui/scroll-area/scroll-area.svelte.d.ts +9 -0
- package/dist/components/ui/select/index.d.ts +2 -0
- package/dist/components/ui/select/index.js +2 -0
- package/dist/components/ui/select/select.svelte +36 -0
- package/dist/components/ui/select/select.svelte.d.ts +8 -0
- package/dist/components/ui/separator/index.d.ts +2 -0
- package/dist/components/ui/separator/index.js +4 -0
- package/dist/components/ui/separator/separator.svelte +23 -0
- package/dist/components/ui/separator/separator.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/index.d.ts +7 -0
- package/dist/components/ui/sheet/index.js +7 -0
- package/dist/components/ui/sheet/sheet-content.svelte +28 -0
- package/dist/components/ui/sheet/sheet-content.svelte.d.ts +8 -0
- package/dist/components/ui/sheet/sheet-description.svelte +22 -0
- package/dist/components/ui/sheet/sheet-description.svelte.d.ts +6 -0
- package/dist/components/ui/sheet/sheet-footer.svelte +22 -0
- package/dist/components/ui/sheet/sheet-footer.svelte.d.ts +6 -0
- package/dist/components/ui/sheet/sheet-header.svelte +22 -0
- package/dist/components/ui/sheet/sheet-header.svelte.d.ts +6 -0
- package/dist/components/ui/sheet/sheet-title.svelte +22 -0
- package/dist/components/ui/sheet/sheet-title.svelte.d.ts +6 -0
- package/dist/components/ui/sheet/sheet.svelte +78 -0
- package/dist/components/ui/sheet/sheet.svelte.d.ts +10 -0
- package/dist/components/ui/skeleton/index.d.ts +2 -0
- package/dist/components/ui/skeleton/index.js +2 -0
- package/dist/components/ui/skeleton/skeleton.svelte +21 -0
- package/dist/components/ui/skeleton/skeleton.svelte.d.ts +8 -0
- package/dist/components/ui/switch/index.d.ts +2 -0
- package/dist/components/ui/switch/index.js +2 -0
- package/dist/components/ui/switch/switch.svelte +49 -0
- package/dist/components/ui/switch/switch.svelte.d.ts +10 -0
- package/dist/components/ui/table/index.d.ts +9 -0
- package/dist/components/ui/table/index.js +11 -0
- package/dist/components/ui/table/table-body.svelte +15 -0
- package/dist/components/ui/table/table-body.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-caption.svelte +20 -0
- package/dist/components/ui/table/table-caption.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-cell.svelte +15 -0
- package/dist/components/ui/table/table-cell.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-footer.svelte +20 -0
- package/dist/components/ui/table/table-footer.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-head.svelte +15 -0
- package/dist/components/ui/table/table-head.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-header.svelte +20 -0
- package/dist/components/ui/table/table-header.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-row.svelte +15 -0
- package/dist/components/ui/table/table-row.svelte.d.ts +5 -0
- package/dist/components/ui/table/table.svelte +17 -0
- package/dist/components/ui/table/table.svelte.d.ts +5 -0
- package/dist/components/ui/tabs/index.d.ts +5 -0
- package/dist/components/ui/tabs/index.js +5 -0
- package/dist/components/ui/tabs/tabs-content.svelte +30 -0
- package/dist/components/ui/tabs/tabs-content.svelte.d.ts +9 -0
- package/dist/components/ui/tabs/tabs-list.svelte +26 -0
- package/dist/components/ui/tabs/tabs-list.svelte.d.ts +6 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte +37 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +9 -0
- package/dist/components/ui/tabs/tabs.svelte +27 -0
- package/dist/components/ui/tabs/tabs.svelte.d.ts +9 -0
- package/dist/components/ui/textarea/index.d.ts +2 -0
- package/dist/components/ui/textarea/index.js +2 -0
- package/dist/components/ui/textarea/textarea.svelte +24 -0
- package/dist/components/ui/textarea/textarea.svelte.d.ts +6 -0
- package/dist/components/ui/tooltip/index.d.ts +6 -0
- package/dist/components/ui/tooltip/index.js +8 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte +52 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +11 -0
- package/dist/components/ui/tooltip/tooltip-portal.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip-portal.svelte.d.ts +4 -0
- package/dist/components/ui/tooltip/tooltip-provider.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip-provider.svelte.d.ts +4 -0
- package/dist/components/ui/tooltip/tooltip-trigger.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/tooltip/tooltip.svelte +10 -0
- package/dist/components/ui/tooltip/tooltip.svelte.d.ts +4 -0
- package/dist/editor-config.svelte.d.ts +15 -0
- package/dist/editor-config.svelte.js +19 -0
- package/dist/index.d.ts +117 -0
- package/dist/index.js +127 -0
- package/dist/markdown-deps.d.ts +21 -0
- package/dist/router-state.svelte.d.ts +5 -0
- package/dist/router-state.svelte.js +58 -0
- package/dist/types.d.ts +42 -0
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +16 -0
- package/dist/utils.js +5 -0
- package/package.json +2 -2
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getResources, getAgentProvider, getChatProvider } from '@svadmin/core';
|
|
3
|
+
import { navigate } from '@svadmin/core/router';
|
|
4
|
+
import { t } from '@svadmin/core/i18n';
|
|
5
|
+
import { toggleTheme } from '@svadmin/core';
|
|
6
|
+
import { Command } from 'cmdk-sv';
|
|
7
|
+
import * as Dialog from './ui/dialog/index.js';
|
|
8
|
+
import { Search, LayoutDashboard, Plus, Sun, FileText, Bot, Sparkles } from '@lucide/svelte';
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
open?: boolean;
|
|
12
|
+
/** Callback fired when user selects "Ask AI" with a query string */
|
|
13
|
+
onAskAI?: (query: string) => void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let { open = $bindable(false), onAskAI }: Props = $props();
|
|
17
|
+
let searchValue = $state('');
|
|
18
|
+
|
|
19
|
+
const resources = getResources();
|
|
20
|
+
const hasAI = $derived(!!(getAgentProvider() || getChatProvider()));
|
|
21
|
+
|
|
22
|
+
function close() {
|
|
23
|
+
open = false;
|
|
24
|
+
searchValue = '';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function act(fn: () => void) {
|
|
28
|
+
fn();
|
|
29
|
+
close();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function askAI() {
|
|
33
|
+
const query = searchValue.trim();
|
|
34
|
+
if (onAskAI && query) {
|
|
35
|
+
onAskAI(query);
|
|
36
|
+
}
|
|
37
|
+
close();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const itemClass = 'relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50';
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<Dialog.Dialog bind:open>
|
|
44
|
+
<Dialog.DialogContent class="overflow-hidden p-0 sm:max-w-[560px]">
|
|
45
|
+
<Command.Root class="flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground [&_[data-cmdk-group-heading]]:text-muted-foreground [&_[data-cmdk-group-heading]]:px-2 [&_[data-cmdk-group-heading]]:py-1.5 [&_[data-cmdk-group-heading]]:text-xs [&_[data-cmdk-group-heading]]:font-semibold [&_[data-cmdk-group-heading]]:uppercase [&_[data-cmdk-group-heading]]:tracking-wider">
|
|
46
|
+
<div class="flex items-center border-b px-3" data-cmdk-input-wrapper="">
|
|
47
|
+
<Search class="mr-2 h-4 w-4 shrink-0 opacity-50" />
|
|
48
|
+
<Command.Input
|
|
49
|
+
bind:value={searchValue}
|
|
50
|
+
placeholder={hasAI ? (t('commandPalette.searchOrAsk') || 'Search or ask AI...') : t('common.search')}
|
|
51
|
+
class="flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50"
|
|
52
|
+
/>
|
|
53
|
+
<kbd class="ml-2 text-[10px] font-mono font-medium text-muted-foreground bg-muted px-1.5 py-0.5 rounded border border-border">ESC</kbd>
|
|
54
|
+
</div>
|
|
55
|
+
<Command.List class="max-h-[320px] overflow-y-auto overflow-x-hidden p-1">
|
|
56
|
+
<Command.Empty class="py-6 text-center text-sm text-muted-foreground">
|
|
57
|
+
{#if hasAI && searchValue.trim()}
|
|
58
|
+
<button
|
|
59
|
+
class="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-primary/10 text-primary hover:bg-primary/20 transition-colors cursor-pointer text-sm font-medium"
|
|
60
|
+
onclick={askAI}
|
|
61
|
+
>
|
|
62
|
+
<Sparkles class="h-3.5 w-3.5" />
|
|
63
|
+
{t('commandPalette.askAI') || 'Ask AI'}: "{searchValue.trim()}"
|
|
64
|
+
</button>
|
|
65
|
+
{:else}
|
|
66
|
+
{t('common.noData')}
|
|
67
|
+
{/if}
|
|
68
|
+
</Command.Empty>
|
|
69
|
+
|
|
70
|
+
<!-- AI -->
|
|
71
|
+
{#if hasAI && searchValue.trim()}
|
|
72
|
+
<Command.Group heading="AI">
|
|
73
|
+
<Command.Item
|
|
74
|
+
value="ask-ai-{searchValue}"
|
|
75
|
+
onSelect={askAI}
|
|
76
|
+
class={itemClass}
|
|
77
|
+
>
|
|
78
|
+
<Sparkles class="h-4 w-4 text-primary" />
|
|
79
|
+
<span class="text-primary font-medium">{t('commandPalette.askAI') || 'Ask AI'}</span>
|
|
80
|
+
<span class="text-muted-foreground truncate ml-1">"{searchValue.trim()}"</span>
|
|
81
|
+
</Command.Item>
|
|
82
|
+
</Command.Group>
|
|
83
|
+
<Command.Separator class="mx-1 my-1 h-px bg-border" />
|
|
84
|
+
{/if}
|
|
85
|
+
|
|
86
|
+
<!-- Navigation -->
|
|
87
|
+
<Command.Group heading={t('common.home')}>
|
|
88
|
+
<Command.Item
|
|
89
|
+
value="home"
|
|
90
|
+
onSelect={() => act(() => navigate('/'))}
|
|
91
|
+
class={itemClass}
|
|
92
|
+
>
|
|
93
|
+
<LayoutDashboard class="h-4 w-4 text-muted-foreground" />
|
|
94
|
+
{t('common.home')}
|
|
95
|
+
</Command.Item>
|
|
96
|
+
{#each resources as r}
|
|
97
|
+
<Command.Item
|
|
98
|
+
value={r.name}
|
|
99
|
+
onSelect={() => act(() => navigate(`/${r.name}`))}
|
|
100
|
+
class={itemClass}
|
|
101
|
+
>
|
|
102
|
+
<FileText class="h-4 w-4 text-muted-foreground" />
|
|
103
|
+
{r.label}
|
|
104
|
+
</Command.Item>
|
|
105
|
+
{/each}
|
|
106
|
+
</Command.Group>
|
|
107
|
+
|
|
108
|
+
<Command.Separator class="mx-1 my-1 h-px bg-border" />
|
|
109
|
+
|
|
110
|
+
<!-- Actions -->
|
|
111
|
+
<Command.Group heading={t('common.actions')}>
|
|
112
|
+
{#each resources as r}
|
|
113
|
+
<Command.Item
|
|
114
|
+
value="create-{r.name}"
|
|
115
|
+
onSelect={() => act(() => navigate(`/${r.name}/create`))}
|
|
116
|
+
class={itemClass}
|
|
117
|
+
>
|
|
118
|
+
<Plus class="h-4 w-4 text-muted-foreground" />
|
|
119
|
+
{t('common.create')} {r.label}
|
|
120
|
+
</Command.Item>
|
|
121
|
+
{/each}
|
|
122
|
+
<Command.Item
|
|
123
|
+
value="toggle-theme"
|
|
124
|
+
onSelect={() => act(() => toggleTheme())}
|
|
125
|
+
class={itemClass}
|
|
126
|
+
>
|
|
127
|
+
<Sun class="h-4 w-4 text-muted-foreground" />
|
|
128
|
+
{t('common.toggleTheme')}
|
|
129
|
+
</Command.Item>
|
|
130
|
+
</Command.Group>
|
|
131
|
+
</Command.List>
|
|
132
|
+
</Command.Root>
|
|
133
|
+
</Dialog.DialogContent>
|
|
134
|
+
</Dialog.Dialog>
|
|
135
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
open?: boolean;
|
|
3
|
+
/** Callback fired when user selects "Ask AI" with a query string */
|
|
4
|
+
onAskAI?: (query: string) => void;
|
|
5
|
+
}
|
|
6
|
+
declare const CommandPalette: import("svelte").Component<Props, {}, "open">;
|
|
7
|
+
type CommandPalette = ReturnType<typeof CommandPalette>;
|
|
8
|
+
export default CommandPalette;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { t } from '@svadmin/core/i18n';
|
|
3
|
+
import { AlertTriangle, Copy, CheckCircle } from '@lucide/svelte';
|
|
4
|
+
import { Button } from './ui/button/index.js';
|
|
5
|
+
import TooltipButton from './TooltipButton.svelte';
|
|
6
|
+
import * as Card from './ui/card/index.js';
|
|
7
|
+
|
|
8
|
+
let { title, missingVars = [], envTemplate = '' } = $props<{
|
|
9
|
+
title?: string;
|
|
10
|
+
missingVars?: { key: string; description?: string }[];
|
|
11
|
+
envTemplate?: string;
|
|
12
|
+
}>();
|
|
13
|
+
|
|
14
|
+
const displayTitle = $derived(title ?? t('config.missingEnvTitle'));
|
|
15
|
+
|
|
16
|
+
let copied = $state<Record<string, boolean>>({});
|
|
17
|
+
let copyTimers = $state<Record<string, ReturnType<typeof setTimeout>>>({});
|
|
18
|
+
|
|
19
|
+
function setCopied(key: string) {
|
|
20
|
+
copied = { ...copied, [key]: true };
|
|
21
|
+
// Clear previous timer for this key if any
|
|
22
|
+
if (copyTimers[key]) clearTimeout(copyTimers[key]);
|
|
23
|
+
const timer = setTimeout(() => {
|
|
24
|
+
copied = { ...copied, [key]: false };
|
|
25
|
+
}, 2000);
|
|
26
|
+
copyTimers = { ...copyTimers, [key]: timer };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Cleanup all timers on destroy
|
|
30
|
+
$effect(() => {
|
|
31
|
+
return () => {
|
|
32
|
+
Object.values(copyTimers).forEach(clearTimeout);
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
async function copyToClipboard(text: string, key: string) {
|
|
37
|
+
try {
|
|
38
|
+
await navigator.clipboard.writeText(text);
|
|
39
|
+
setCopied(key);
|
|
40
|
+
} catch {
|
|
41
|
+
console.warn('[svadmin] clipboard API unavailable');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async function copyAll() {
|
|
46
|
+
const text = envTemplate || missingVars.map((v: { key: string }) => `${v.key}=`).join('\n');
|
|
47
|
+
await copyToClipboard(text, '__all__');
|
|
48
|
+
}
|
|
49
|
+
</script>
|
|
50
|
+
|
|
51
|
+
<div class="min-h-screen flex items-center justify-center bg-background p-4">
|
|
52
|
+
<div class="w-full max-w-[480px]">
|
|
53
|
+
<Card.Card>
|
|
54
|
+
<Card.CardHeader class="text-center pb-2">
|
|
55
|
+
<div class="inline-flex items-center justify-center w-12 h-12 rounded-lg bg-destructive/10 text-destructive mx-auto mb-3">
|
|
56
|
+
<AlertTriangle class="h-6 w-6" />
|
|
57
|
+
</div>
|
|
58
|
+
<Card.CardTitle class="text-xl">{displayTitle}</Card.CardTitle>
|
|
59
|
+
<p class="text-sm text-muted-foreground">
|
|
60
|
+
{t('config.missingEnvDescription')}
|
|
61
|
+
</p>
|
|
62
|
+
</Card.CardHeader>
|
|
63
|
+
<Card.CardContent class="space-y-4">
|
|
64
|
+
{#if missingVars.length > 0}
|
|
65
|
+
<div class="rounded-lg border overflow-hidden">
|
|
66
|
+
{#each missingVars as v, i (v.key)}
|
|
67
|
+
<div class="flex items-center justify-between px-3 py-2.5 gap-2 {i < missingVars.length - 1 ? 'border-b border-border/50' : ''}">
|
|
68
|
+
<div class="flex flex-col gap-0.5 min-w-0">
|
|
69
|
+
<code class="text-[0.8125rem] font-semibold text-foreground font-mono">{v.key}</code>
|
|
70
|
+
{#if v.description}
|
|
71
|
+
<span class="text-[0.6875rem] text-muted-foreground">{v.description}</span>
|
|
72
|
+
{/if}
|
|
73
|
+
</div>
|
|
74
|
+
<TooltipButton
|
|
75
|
+
tooltip={t('common.copy')}
|
|
76
|
+
variant="ghost"
|
|
77
|
+
size="icon"
|
|
78
|
+
class="h-7 w-7 shrink-0"
|
|
79
|
+
onclick={() => copyToClipboard(`${v.key}=`, v.key)}
|
|
80
|
+
>
|
|
81
|
+
{#if copied[v.key]}
|
|
82
|
+
<CheckCircle class="h-3.5 w-3.5 text-green-500" />
|
|
83
|
+
{:else}
|
|
84
|
+
<Copy class="h-3.5 w-3.5" />
|
|
85
|
+
{/if}
|
|
86
|
+
</TooltipButton>
|
|
87
|
+
</div>
|
|
88
|
+
{/each}
|
|
89
|
+
</div>
|
|
90
|
+
{/if}
|
|
91
|
+
|
|
92
|
+
{#if envTemplate}
|
|
93
|
+
<div class="rounded-lg border overflow-hidden">
|
|
94
|
+
<div class="flex items-center justify-between px-3 py-2 bg-muted/50 border-b border-border/50">
|
|
95
|
+
<span class="text-xs font-medium text-muted-foreground">{t('config.envFilePath')}</span>
|
|
96
|
+
<TooltipButton
|
|
97
|
+
tooltip={t('common.copyAll')}
|
|
98
|
+
variant="ghost"
|
|
99
|
+
size="sm"
|
|
100
|
+
class="h-7 gap-1"
|
|
101
|
+
onclick={copyAll}
|
|
102
|
+
>
|
|
103
|
+
{#if copied['__all__']}
|
|
104
|
+
<CheckCircle class="h-3.5 w-3.5 text-green-500" />
|
|
105
|
+
<span class="text-xs">{t('common.copied')}</span>
|
|
106
|
+
{:else}
|
|
107
|
+
<Copy class="h-3.5 w-3.5" />
|
|
108
|
+
<span class="text-xs">{t('common.copyAll')}</span>
|
|
109
|
+
{/if}
|
|
110
|
+
</TooltipButton>
|
|
111
|
+
</div>
|
|
112
|
+
<pre class="px-3 py-3 text-xs font-mono leading-relaxed text-foreground bg-muted/20 m-0 whitespace-pre-wrap break-all">{envTemplate}</pre>
|
|
113
|
+
</div>
|
|
114
|
+
{/if}
|
|
115
|
+
|
|
116
|
+
<p class="text-xs text-muted-foreground text-center mt-4">
|
|
117
|
+
{t('config.reload')}
|
|
118
|
+
</p>
|
|
119
|
+
|
|
120
|
+
<Button variant="outline" class="w-full" onclick={() => window.location.reload()}>
|
|
121
|
+
{t('config.reloadButton')}
|
|
122
|
+
</Button>
|
|
123
|
+
</Card.CardContent>
|
|
124
|
+
</Card.Card>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type $$ComponentProps = {
|
|
2
|
+
title?: string;
|
|
3
|
+
missingVars?: {
|
|
4
|
+
key: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
}[];
|
|
7
|
+
envTemplate?: string;
|
|
8
|
+
};
|
|
9
|
+
declare const ConfigErrorScreen: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
10
|
+
type ConfigErrorScreen = ReturnType<typeof ConfigErrorScreen>;
|
|
11
|
+
export default ConfigErrorScreen;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import * as AlertDialog from './ui/alert-dialog/index.js';
|
|
3
|
+
import { Button } from './ui/button/index.js';
|
|
4
|
+
import { t } from '@svadmin/core/i18n';
|
|
5
|
+
|
|
6
|
+
let { open = $bindable(false), title, message = '',
|
|
7
|
+
confirmText, cancelText, variant = 'danger',
|
|
8
|
+
onconfirm, oncancel } = $props<{
|
|
9
|
+
open?: boolean;
|
|
10
|
+
title?: string;
|
|
11
|
+
message?: string;
|
|
12
|
+
confirmText?: string;
|
|
13
|
+
cancelText?: string;
|
|
14
|
+
variant?: 'danger' | 'warning' | 'info';
|
|
15
|
+
onconfirm: () => void;
|
|
16
|
+
oncancel: () => void;
|
|
17
|
+
}>();
|
|
18
|
+
|
|
19
|
+
const variantMap = {
|
|
20
|
+
danger: 'destructive' as const,
|
|
21
|
+
warning: 'destructive' as const,
|
|
22
|
+
info: 'default' as const,
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const resolvedTitle = $derived(title ?? t('common.confirmAction'));
|
|
26
|
+
const resolvedConfirmText = $derived(confirmText ?? t('common.confirm'));
|
|
27
|
+
const resolvedCancelText = $derived(cancelText ?? t('common.cancel'));
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<AlertDialog.Root bind:open onOpenChange={(v: boolean) => { if (!v) oncancel(); }}>
|
|
31
|
+
<AlertDialog.Content>
|
|
32
|
+
<AlertDialog.Header>
|
|
33
|
+
<AlertDialog.Title>{resolvedTitle}</AlertDialog.Title>
|
|
34
|
+
<AlertDialog.Description>{message}</AlertDialog.Description>
|
|
35
|
+
</AlertDialog.Header>
|
|
36
|
+
<AlertDialog.Footer>
|
|
37
|
+
<AlertDialog.Cancel>
|
|
38
|
+
{#snippet child({ props })}
|
|
39
|
+
<Button variant="outline" {...props} onclick={oncancel}>
|
|
40
|
+
{resolvedCancelText}
|
|
41
|
+
</Button>
|
|
42
|
+
{/snippet}
|
|
43
|
+
</AlertDialog.Cancel>
|
|
44
|
+
<AlertDialog.Action>
|
|
45
|
+
{#snippet child({ props })}
|
|
46
|
+
<Button variant={variantMap[variant as keyof typeof variantMap]} {...props} onclick={onconfirm}>
|
|
47
|
+
{resolvedConfirmText}
|
|
48
|
+
</Button>
|
|
49
|
+
{/snippet}
|
|
50
|
+
</AlertDialog.Action>
|
|
51
|
+
</AlertDialog.Footer>
|
|
52
|
+
</AlertDialog.Content>
|
|
53
|
+
</AlertDialog.Root>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type $$ComponentProps = {
|
|
2
|
+
open?: boolean;
|
|
3
|
+
title?: string;
|
|
4
|
+
message?: string;
|
|
5
|
+
confirmText?: string;
|
|
6
|
+
cancelText?: string;
|
|
7
|
+
variant?: 'danger' | 'warning' | 'info';
|
|
8
|
+
onconfirm: () => void;
|
|
9
|
+
oncancel: () => void;
|
|
10
|
+
};
|
|
11
|
+
declare const ConfirmDialog: import("svelte").Component<$$ComponentProps, {}, "open">;
|
|
12
|
+
type ConfirmDialog = ReturnType<typeof ConfirmDialog>;
|
|
13
|
+
export default ConfirmDialog;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getChatProvider, getChatContext } from '@svadmin/core';
|
|
3
|
+
import { Sparkles, X, ChevronRight, Check, RefreshCcw } from '@lucide/svelte';
|
|
4
|
+
import { fade, slide } from 'svelte/transition';
|
|
5
|
+
import { Button } from './ui/button/index.js';
|
|
6
|
+
import MarkdownRenderer from './MarkdownRenderer.svelte';
|
|
7
|
+
import TooltipButton from './TooltipButton.svelte';
|
|
8
|
+
|
|
9
|
+
let { open = $bindable(false) } = $props<{ open?: boolean }>();
|
|
10
|
+
|
|
11
|
+
const provider = $derived(getChatProvider());
|
|
12
|
+
const ctx = $derived(getChatContext());
|
|
13
|
+
|
|
14
|
+
let isPredicting = $state(false);
|
|
15
|
+
let insightText = $state('');
|
|
16
|
+
let abortController: AbortController | null = null;
|
|
17
|
+
let hasFetchedForContext = $state('');
|
|
18
|
+
|
|
19
|
+
// Automatically request insights when the context changes
|
|
20
|
+
$effect(() => {
|
|
21
|
+
if (!open || !provider) return;
|
|
22
|
+
|
|
23
|
+
// Create a context hash to avoid refetching for the same page
|
|
24
|
+
const currentHash = `${ctx.currentResource}-${ctx.currentView}-${ctx.selectedRecordId}`;
|
|
25
|
+
if (hasFetchedForContext === currentHash) return;
|
|
26
|
+
|
|
27
|
+
hasFetchedForContext = currentHash;
|
|
28
|
+
getInsights();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
async function getInsights() {
|
|
32
|
+
if (!provider) return;
|
|
33
|
+
|
|
34
|
+
isPredicting = true;
|
|
35
|
+
insightText = '';
|
|
36
|
+
|
|
37
|
+
if (abortController) abortController.abort();
|
|
38
|
+
abortController = new AbortController();
|
|
39
|
+
|
|
40
|
+
const prompt = `Analyze the current context and provide 3 quick insights or context-aware suggestions for the admin user.
|
|
41
|
+
Resource: ${ctx.currentResource}
|
|
42
|
+
View: ${ctx.currentView}
|
|
43
|
+
Record ID: ${ctx.selectedRecordId || 'None'}
|
|
44
|
+
Keep it concise, professional, and use bullet points.`;
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
const result = provider.sendMessage(
|
|
48
|
+
[{ id: 'insights', role: 'system', content: prompt, timestamp: Date.now() }],
|
|
49
|
+
{ signal: abortController.signal }
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
if (Symbol.asyncIterator in result) {
|
|
53
|
+
for await (const chunk of result as AsyncIterable<string>) {
|
|
54
|
+
insightText += chunk;
|
|
55
|
+
}
|
|
56
|
+
} else {
|
|
57
|
+
insightText = await result;
|
|
58
|
+
}
|
|
59
|
+
} catch (err: unknown) {
|
|
60
|
+
if (err instanceof Error && err.name !== 'AbortError') {
|
|
61
|
+
insightText = 'Failed to generate insights for this context.';
|
|
62
|
+
}
|
|
63
|
+
} finally {
|
|
64
|
+
isPredicting = false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
</script>
|
|
68
|
+
|
|
69
|
+
{#if open}
|
|
70
|
+
<div
|
|
71
|
+
class="fixed right-0 top-14 bottom-0 w-80 bg-card border-l shadow-2xl z-40 flex flex-col"
|
|
72
|
+
transition:slide={{ axis: 'x', duration: 300 }}
|
|
73
|
+
>
|
|
74
|
+
<!-- Header -->
|
|
75
|
+
<div class="h-14 flex items-center justify-between px-4 border-b bg-muted/20">
|
|
76
|
+
<div class="flex items-center gap-2 font-medium">
|
|
77
|
+
<Sparkles class="h-4 w-4 text-primary" />
|
|
78
|
+
Copilot Sidebar
|
|
79
|
+
</div>
|
|
80
|
+
<TooltipButton tooltip="Close panel" variant="ghost" size="icon-sm" onclick={() => open = false}>
|
|
81
|
+
<X class="h-4 w-4" />
|
|
82
|
+
</TooltipButton>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<!-- Context Meta -->
|
|
86
|
+
<div class="px-4 py-3 border-b bg-muted/10 text-xs text-muted-foreground flex flex-col gap-1">
|
|
87
|
+
<div class="flex items-center gap-2">
|
|
88
|
+
<span class="w-16">Resource:</span>
|
|
89
|
+
<span class="font-mono text-foreground">{ctx.currentResource || 'Dashboard'}</span>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="flex items-center gap-2">
|
|
92
|
+
<span class="w-16">View:</span>
|
|
93
|
+
<span class="font-mono text-foreground capitalize">{ctx.currentView || 'List'}</span>
|
|
94
|
+
</div>
|
|
95
|
+
{#if ctx.selectedRecordId}
|
|
96
|
+
<div class="flex items-center gap-2">
|
|
97
|
+
<span class="w-16">Record ID:</span>
|
|
98
|
+
<span class="font-mono text-foreground">{ctx.selectedRecordId}</span>
|
|
99
|
+
</div>
|
|
100
|
+
{/if}
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
<!-- Content Area -->
|
|
104
|
+
<div class="flex-1 overflow-y-auto p-4 space-y-6">
|
|
105
|
+
|
|
106
|
+
<!-- Smart Insights Section -->
|
|
107
|
+
<div>
|
|
108
|
+
<h4 class="text-xs font-semibold uppercase tracking-wider text-muted-foreground mb-3 flex items-center justify-between">
|
|
109
|
+
Smart Insights
|
|
110
|
+
{#if isPredicting}
|
|
111
|
+
<span class="flex items-center gap-1 text-[10px] text-primary normal-case font-medium">
|
|
112
|
+
<div class="h-1 w-1 bg-primary rounded-full animate-bounce delay-75"></div>
|
|
113
|
+
<div class="h-1 w-1 bg-primary rounded-full animate-bounce delay-150"></div>
|
|
114
|
+
<div class="h-1 w-1 bg-primary rounded-full animate-bounce delay-300"></div>
|
|
115
|
+
</span>
|
|
116
|
+
{:else}
|
|
117
|
+
<Button variant="ghost" size="icon-sm" class="h-5 w-5 hover:bg-muted" onclick={getInsights}>
|
|
118
|
+
<RefreshCcw class="h-3 w-3" />
|
|
119
|
+
</Button>
|
|
120
|
+
{/if}
|
|
121
|
+
</h4>
|
|
122
|
+
|
|
123
|
+
<div class="text-sm">
|
|
124
|
+
{#if !insightText && !isPredicting}
|
|
125
|
+
<div class="text-muted-foreground italic text-center py-4 bg-muted/30 rounded-lg border border-dashed">
|
|
126
|
+
No insights loaded.
|
|
127
|
+
</div>
|
|
128
|
+
{:else}
|
|
129
|
+
<div class="bg-primary/5 p-3 rounded-xl border border-primary/10 prose prose-sm dark:prose-invert prose-p:my-1 prose-ul:my-1 prose-li:my-0.5">
|
|
130
|
+
<MarkdownRenderer content={insightText} streaming={isPredicting} />
|
|
131
|
+
</div>
|
|
132
|
+
{/if}
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<!-- Quick Actions (Example static definitions for the copilot) -->
|
|
137
|
+
<div>
|
|
138
|
+
<h4 class="text-xs font-semibold uppercase tracking-wider text-muted-foreground mb-3">
|
|
139
|
+
Suggested Actions
|
|
140
|
+
</h4>
|
|
141
|
+
<div class="space-y-2">
|
|
142
|
+
{#if ctx.currentView === 'list'}
|
|
143
|
+
<button class="w-full flex items-center gap-2 text-left p-2 rounded-lg hover:bg-muted border border-transparent hover:border-border transition-colors text-sm">
|
|
144
|
+
<div class="bg-background rounded shadow-sm p-1"><Check class="h-3.5 w-3.5 text-muted-foreground" /></div>
|
|
145
|
+
<span>Generate monthly report</span>
|
|
146
|
+
</button>
|
|
147
|
+
<button class="w-full flex items-center gap-2 text-left p-2 rounded-lg hover:bg-muted border border-transparent hover:border-border transition-colors text-sm">
|
|
148
|
+
<div class="bg-background rounded shadow-sm p-1"><Check class="h-3.5 w-3.5 text-muted-foreground" /></div>
|
|
149
|
+
<span>Find anomalies in {ctx.currentResource}</span>
|
|
150
|
+
</button>
|
|
151
|
+
{:else if ctx.currentView === 'edit' || ctx.currentView === 'create'}
|
|
152
|
+
<button class="w-full flex items-center gap-2 text-left p-2 rounded-lg hover:bg-muted border border-transparent hover:border-border transition-colors text-sm">
|
|
153
|
+
<div class="bg-background rounded shadow-sm p-1"><Check class="h-3.5 w-3.5 text-muted-foreground" /></div>
|
|
154
|
+
<span>Auto-fill form from context</span>
|
|
155
|
+
</button>
|
|
156
|
+
{:else}
|
|
157
|
+
<div class="text-muted-foreground text-sm py-2 text-center">No precise actions for this view</div>
|
|
158
|
+
{/if}
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
{/if}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getResource } from '@svadmin/core';
|
|
3
|
+
import { navigate } from '@svadmin/core/router';
|
|
4
|
+
import { t } from '@svadmin/core/i18n';
|
|
5
|
+
import type { Snippet } from 'svelte';
|
|
6
|
+
import PageHeader from './PageHeader.svelte';
|
|
7
|
+
import AutoForm from './AutoForm.svelte';
|
|
8
|
+
import ListButton from './buttons/ListButton.svelte';
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
resourceName: string;
|
|
12
|
+
title?: string;
|
|
13
|
+
headerActions?: Snippet;
|
|
14
|
+
class?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let {
|
|
18
|
+
resourceName,
|
|
19
|
+
title,
|
|
20
|
+
headerActions,
|
|
21
|
+
class: className = '',
|
|
22
|
+
}: Props = $props();
|
|
23
|
+
|
|
24
|
+
const resource = $derived(getResource(resourceName));
|
|
25
|
+
const pageTitle = $derived(title ?? `${t('common.create')}${resource.label}`);
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<div class="space-y-6 {className}">
|
|
29
|
+
<PageHeader title={pageTitle}>
|
|
30
|
+
{#snippet actions()}
|
|
31
|
+
<ListButton resource={resourceName} hideText />
|
|
32
|
+
{#if headerActions}
|
|
33
|
+
{@render headerActions()}
|
|
34
|
+
{/if}
|
|
35
|
+
{/snippet}
|
|
36
|
+
</PageHeader>
|
|
37
|
+
|
|
38
|
+
<AutoForm {resourceName} mode="create" />
|
|
39
|
+
</div>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
interface Props {
|
|
3
|
+
resourceName: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
headerActions?: Snippet;
|
|
6
|
+
class?: string;
|
|
7
|
+
}
|
|
8
|
+
declare const CreatePage: import("svelte").Component<Props, {}, "">;
|
|
9
|
+
type CreatePage = ReturnType<typeof CreatePage>;
|
|
10
|
+
export default CreatePage;
|