includio-cms 0.1.4 → 0.5.1
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/CHANGELOG.md +83 -0
- package/ROADMAP.md +26 -13
- package/dist/admin/api/accept-invite.js +1 -5
- package/dist/admin/api/invite.js +7 -16
- package/dist/admin/client/account/account-page.svelte +20 -50
- package/dist/admin/client/account/lang.d.ts +15 -23
- package/dist/admin/client/account/lang.js +51 -67
- package/dist/admin/client/account/preferences-section.svelte +26 -84
- package/dist/admin/client/account/profile-section.svelte +60 -40
- package/dist/admin/client/account/schema.d.ts +11 -3
- package/dist/admin/client/account/schema.js +25 -16
- package/dist/admin/client/account/security-section.svelte +139 -105
- package/dist/admin/client/account/sessions-section.svelte +35 -34
- package/dist/admin/client/admin/admin-after-login-layout-content.svelte +3 -5
- package/dist/admin/client/admin/admin-layout.svelte +3 -2
- package/dist/admin/client/admin/admin-preloader.svelte +36 -0
- package/dist/admin/client/admin/admin-preloader.svelte.d.ts +18 -0
- package/dist/admin/client/admin/dashboard-page.svelte +35 -67
- package/dist/admin/client/collection/a11y-score-cell.svelte +45 -0
- package/dist/admin/client/collection/a11y-score-cell.svelte.d.ts +6 -0
- package/dist/admin/client/collection/bulk-actions-bar.svelte +100 -0
- package/dist/admin/client/collection/bulk-actions-bar.svelte.d.ts +10 -0
- package/dist/admin/client/collection/collection-entries.svelte +277 -258
- package/dist/admin/client/collection/collection-view.svelte.d.ts +4 -3
- package/dist/admin/client/collection/collection-view.svelte.js +9 -5
- package/dist/admin/client/collection/collection.svelte +22 -12
- package/dist/admin/client/collection/data-table.svelte +50 -39
- package/dist/admin/client/collection/data-table.svelte.d.ts +1 -0
- package/dist/admin/client/collection/date-cell.svelte +7 -5
- package/dist/admin/client/collection/date-cell.svelte.d.ts +1 -1
- package/dist/admin/client/collection/empty-state.svelte +28 -0
- package/dist/admin/client/collection/empty-state.svelte.d.ts +9 -0
- package/dist/admin/client/collection/entry-link.svelte +10 -4
- package/dist/admin/client/collection/entry-link.svelte.d.ts +1 -0
- package/dist/admin/client/collection/grid-view.svelte +21 -23
- package/dist/admin/client/collection/grid-view.svelte.d.ts +1 -2
- package/dist/admin/client/collection/row-actions.svelte +69 -0
- package/dist/admin/client/collection/row-actions.svelte.d.ts +10 -0
- package/dist/admin/client/collection/status-badge.svelte +7 -8
- package/dist/admin/client/collection/table-pagination.svelte +122 -79
- package/dist/admin/client/collection/table-pagination.svelte.d.ts +1 -0
- package/dist/admin/client/collection/table-toolbar.svelte +108 -88
- package/dist/admin/client/collection/table-toolbar.svelte.d.ts +8 -9
- package/dist/admin/client/entry/entry-form.svelte +109 -1
- package/dist/admin/client/entry/entry-header.svelte +143 -37
- package/dist/admin/client/entry/entry-header.svelte.d.ts +8 -0
- package/dist/admin/client/entry/entry.svelte +272 -61
- package/dist/admin/client/entry/header/a11y-validator.d.ts +47 -0
- package/dist/admin/client/entry/header/a11y-validator.js +352 -0
- package/dist/admin/client/entry/header/publish-panel.svelte +531 -129
- package/dist/admin/client/entry/header/publish-panel.svelte.d.ts +4 -0
- package/dist/admin/client/entry/header/save-indicator.svelte +33 -23
- package/dist/admin/client/entry/header/schedule-popover.svelte +1 -1
- package/dist/admin/client/entry/header/status-badge.svelte +25 -118
- package/dist/admin/client/entry/header/version-history-sheet.svelte +322 -98
- package/dist/admin/client/form/form-submission/form-submission.svelte +271 -83
- package/dist/admin/client/form/form-submission/submission-field.svelte +12 -12
- package/dist/admin/client/form/form-submissions.svelte +421 -139
- package/dist/admin/client/form/submission-link.svelte +8 -2
- package/dist/admin/client/form/submission-link.svelte.d.ts +1 -0
- package/dist/admin/client/form/submission-status-badge.svelte +18 -4
- package/dist/admin/client/form/submission-status-badge.svelte.d.ts +1 -0
- package/dist/admin/client/login/lang.d.ts +32 -0
- package/dist/admin/client/login/lang.js +66 -2
- package/dist/admin/client/login/login-form.svelte +237 -95
- package/dist/admin/client/login/login-form.svelte.d.ts +2 -17
- package/dist/admin/client/login/login-page.svelte +34 -98
- package/dist/admin/client/login/reset-password-page.svelte +235 -0
- package/dist/admin/client/login/reset-password-page.svelte.d.ts +4 -0
- package/dist/admin/client/login/schema.d.ts +15 -0
- package/dist/admin/client/login/schema.js +21 -0
- package/dist/admin/client/users/accept-invite-page.svelte +166 -37
- package/dist/admin/client/users/create-user-dialog.svelte +15 -7
- package/dist/admin/client/users/delete-user-dialog.svelte +81 -16
- package/dist/admin/client/users/delete-user-dialog.svelte.d.ts +4 -1
- package/dist/admin/client/users/edit-user-dialog.svelte +3 -0
- package/dist/admin/client/users/invite-user-dialog.svelte +16 -3
- package/dist/admin/client/users/lang.d.ts +27 -0
- package/dist/admin/client/users/lang.js +64 -10
- package/dist/admin/client/users/pending-invitations.svelte +59 -23
- package/dist/admin/client/users/users-page.svelte +471 -72
- package/dist/admin/components/accessibility/accessibility-overview.svelte +2 -7
- package/dist/admin/components/dashboard/a11y-gauge.svelte +90 -0
- package/dist/admin/components/dashboard/a11y-gauge.svelte.d.ts +18 -0
- package/dist/admin/components/dashboard/accessibility-hub.svelte +13 -12
- package/dist/admin/components/dashboard/changelog-dialog.svelte +157 -0
- package/dist/admin/components/dashboard/changelog-dialog.svelte.d.ts +6 -0
- package/dist/admin/components/dashboard/form-submissions-widget.svelte +71 -113
- package/dist/admin/components/dashboard/index.d.ts +4 -2
- package/dist/admin/components/dashboard/index.js +4 -2
- package/dist/admin/components/dashboard/orphaned-entries-notice.svelte +240 -0
- package/dist/admin/components/dashboard/orphaned-entries-notice.svelte.d.ts +13 -0
- package/dist/admin/components/dashboard/recent-activity.svelte +53 -75
- package/dist/admin/components/dashboard/recent-entries.svelte +94 -0
- package/dist/admin/components/dashboard/recent-entries.svelte.d.ts +18 -0
- package/dist/admin/components/dashboard/stat-card.svelte +2 -2
- package/dist/admin/components/dashboard/tip-of-the-day.svelte +109 -0
- package/dist/admin/components/dashboard/tip-of-the-day.svelte.d.ts +3 -0
- package/dist/admin/components/dashboard/welcome-header.svelte +45 -0
- package/dist/admin/components/dashboard/welcome-header.svelte.d.ts +3 -0
- package/dist/admin/components/fields/{array-field.svelte → blocks-field.svelte} +4 -4
- package/dist/admin/components/fields/{array-field.svelte.d.ts → blocks-field.svelte.d.ts} +5 -5
- package/dist/admin/components/fields/content-field.svelte +27 -0
- package/dist/admin/components/fields/content-field.svelte.d.ts +31 -0
- package/dist/admin/components/fields/field-renderer.svelte +9 -7
- package/dist/admin/components/fields/image-field.svelte +2 -2
- package/dist/admin/components/fields/media-field.svelte +2 -2
- package/dist/admin/components/fields/seo-field.svelte +205 -25
- package/dist/admin/components/fields/simple-array-field.svelte +289 -0
- package/dist/admin/components/fields/simple-array-field.svelte.d.ts +30 -0
- package/dist/admin/components/fields/slug-field.svelte +3 -2
- package/dist/admin/components/fields/standalone-field-renderer.svelte +148 -0
- package/dist/admin/components/fields/standalone-field-renderer.svelte.d.ts +9 -0
- package/dist/admin/components/fields/text-field-wrapper.svelte +147 -3
- package/dist/admin/components/fields/text-field-wrapper.svelte.d.ts +2 -2
- package/dist/admin/components/fields/url-field.svelte +5 -4
- package/dist/admin/components/layout/app-sidebar.svelte +27 -24
- package/dist/admin/components/layout/lang.d.ts +6 -0
- package/dist/admin/components/layout/lang.js +13 -1
- package/dist/admin/components/layout/layout-renderer.svelte +352 -0
- package/dist/admin/components/layout/layout-renderer.svelte.d.ts +14 -0
- package/dist/admin/components/layout/nav-breadcrumbs.svelte +4 -4
- package/dist/admin/components/layout/nav-collections.svelte +65 -36
- package/dist/admin/components/layout/nav-footer.svelte +38 -0
- package/dist/admin/components/layout/nav-footer.svelte.d.ts +3 -0
- package/dist/admin/components/layout/nav-forms.svelte +55 -30
- package/dist/admin/components/layout/nav-main.svelte +14 -52
- package/dist/admin/components/layout/nav-search.svelte +4 -3
- package/dist/admin/components/layout/nav-singletons.svelte +59 -17
- package/dist/admin/components/layout/nav-singletons.svelte.d.ts +17 -8
- package/dist/admin/components/layout/site-header.svelte +74 -13
- package/dist/admin/components/media/alt-input.svelte +32 -22
- package/dist/admin/components/media/bulk-action-bar.svelte +139 -150
- package/dist/admin/components/media/file/file-details.svelte +299 -217
- package/dist/admin/components/media/file/file-miniature.svelte +54 -41
- package/dist/admin/components/media/file/file-miniature.svelte.d.ts +1 -0
- package/dist/admin/components/media/file/file-preview.svelte +1 -1
- package/dist/admin/components/media/file-upload.svelte +24 -26
- package/dist/admin/components/media/files-list.svelte +112 -40
- package/dist/admin/components/media/files-list.svelte.d.ts +2 -0
- package/dist/admin/components/media/focal-point-input.svelte +122 -26
- package/dist/admin/components/media/media-library.svelte +127 -70
- package/dist/admin/components/media/media-search.svelte +6 -6
- package/dist/admin/components/media/media-sort.svelte +3 -1
- package/dist/admin/components/media/multi-file-summary.svelte +88 -68
- package/dist/admin/components/media/tag-combobox.svelte +141 -66
- package/dist/admin/components/media/tag-combobox.svelte.d.ts +1 -0
- package/dist/admin/components/media/tag-sidebar.svelte +139 -121
- package/dist/admin/components/tiptap/FigureNodeView.svelte +144 -15
- package/dist/admin/components/tiptap/InlineBlockNodeView.svelte +254 -0
- package/dist/admin/components/tiptap/InlineBlockNodeView.svelte.d.ts +4 -0
- package/dist/admin/components/tiptap/SlashCommandPopup.svelte +212 -0
- package/dist/admin/components/tiptap/SlashCommandPopup.svelte.d.ts +8 -0
- package/dist/admin/components/tiptap/content-editor.svelte +280 -0
- package/dist/admin/components/tiptap/content-editor.svelte.d.ts +9 -0
- package/dist/admin/components/tiptap/editor-toolbar.svelte +230 -0
- package/dist/admin/components/tiptap/editor-toolbar.svelte.d.ts +16 -0
- package/dist/admin/components/tiptap/heading-a11y-plugin.d.ts +2 -0
- package/dist/admin/components/tiptap/heading-a11y-plugin.js +67 -0
- package/dist/admin/components/tiptap/image-dialog.svelte +172 -11
- package/dist/admin/components/tiptap/inline-block-node.d.ts +19 -0
- package/dist/admin/components/tiptap/inline-block-node.js +98 -0
- package/dist/admin/components/tiptap/link-dialog.svelte +9 -4
- package/dist/admin/components/tiptap/slash-command.d.ts +17 -0
- package/dist/admin/components/tiptap/slash-command.js +181 -0
- package/dist/admin/components/tiptap/structured-content-utils.d.ts +21 -0
- package/dist/admin/components/tiptap/structured-content-utils.js +150 -0
- package/dist/admin/components/tiptap/tiptap-editor.svelte +18 -190
- package/dist/admin/email/invite-template.d.ts +8 -0
- package/dist/admin/email/invite-template.js +99 -0
- package/dist/admin/email/reset-password-template.d.ts +7 -0
- package/dist/admin/email/reset-password-template.js +96 -0
- package/dist/admin/remote/ai.remote.d.ts +1 -0
- package/dist/admin/remote/ai.remote.js +4 -1
- package/dist/admin/remote/entry.remote.d.ts +9 -0
- package/dist/admin/remote/entry.remote.js +58 -8
- package/dist/admin/remote/preview.remote.js +2 -1
- package/dist/admin/shared/password-schema.d.ts +5 -0
- package/dist/admin/shared/password-schema.js +10 -0
- package/dist/admin/state/content-language.svelte.d.ts +3 -0
- package/dist/admin/state/content-language.svelte.js +8 -0
- package/dist/admin/styles/admin.css +1530 -151
- package/dist/admin/utils/formatDate.d.ts +1 -0
- package/dist/admin/utils/formatDate.js +8 -0
- package/dist/admin/utils/roleLabel.d.ts +2 -0
- package/dist/admin/utils/roleLabel.js +13 -0
- package/dist/admin/utils/translationStatus.d.ts +17 -0
- package/dist/admin/utils/translationStatus.js +134 -0
- package/dist/ai-claude/index.d.ts +2 -0
- package/dist/ai-claude/index.js +56 -0
- package/dist/cms/runtime/api.d.ts +6 -1
- package/dist/cms/runtime/api.js +3 -0
- package/dist/cms/runtime/schemas.d.ts +9 -1
- package/dist/cms/runtime/schemas.js +8 -0
- package/dist/cms/runtime/types.d.ts +82 -10
- package/dist/cms/runtime/types.js +4 -0
- package/dist/components/ui/accordion/accordion.stories.svelte +39 -0
- package/dist/components/ui/accordion/accordion.stories.svelte.d.ts +27 -0
- package/dist/components/ui/alert/alert.stories.svelte +53 -0
- package/dist/components/ui/alert/alert.stories.svelte.d.ts +27 -0
- package/dist/components/ui/alert/alert.svelte +5 -0
- package/dist/components/ui/alert/alert.svelte.d.ts +9 -0
- package/dist/components/ui/avatar/avatar.stories.svelte +16 -0
- package/dist/components/ui/avatar/avatar.stories.svelte.d.ts +27 -0
- package/dist/components/ui/badge/badge.stories.svelte +33 -0
- package/dist/components/ui/badge/badge.stories.svelte.d.ts +27 -0
- package/dist/components/ui/breadcrumb/breadcrumb.stories.svelte +33 -0
- package/dist/components/ui/breadcrumb/breadcrumb.stories.svelte.d.ts +27 -0
- package/dist/components/ui/button/button.stories.svelte +43 -0
- package/dist/components/ui/button/button.stories.svelte.d.ts +27 -0
- package/dist/components/ui/button/button.svelte +1 -2
- package/dist/components/ui/button/button.svelte.d.ts +0 -3
- package/dist/components/ui/button-group/button-group-separator.svelte.d.ts +1 -1
- package/dist/components/ui/card/card.stories.svelte +42 -0
- package/dist/components/ui/card/card.stories.svelte.d.ts +27 -0
- package/dist/components/ui/command/command.stories.svelte +51 -0
- package/dist/components/ui/command/command.stories.svelte.d.ts +27 -0
- package/dist/components/ui/dialog/dialog.stories.svelte +29 -0
- package/dist/components/ui/dialog/dialog.stories.svelte.d.ts +27 -0
- package/dist/components/ui/field/field-label.svelte.d.ts +1 -1
- package/dist/components/ui/field/field.stories.svelte +21 -0
- package/dist/components/ui/field/field.stories.svelte.d.ts +27 -0
- package/dist/components/ui/input/input.stories.svelte +40 -0
- package/dist/components/ui/input/input.stories.svelte.d.ts +27 -0
- package/dist/components/ui/input/input.svelte +2 -4
- package/dist/components/ui/item/item-separator.svelte.d.ts +1 -1
- package/dist/components/ui/label/label.stories.svelte +20 -0
- package/dist/components/ui/label/label.stories.svelte.d.ts +27 -0
- package/dist/components/ui/popover/popover.stories.svelte +29 -0
- package/dist/components/ui/popover/popover.stories.svelte.d.ts +27 -0
- package/dist/components/ui/select/select-group-heading.svelte.d.ts +1 -1
- package/dist/components/ui/select/select.stories.svelte +23 -0
- package/dist/components/ui/select/select.stories.svelte.d.ts +27 -0
- package/dist/components/ui/separator/separator.stories.svelte +24 -0
- package/dist/components/ui/separator/separator.stories.svelte.d.ts +27 -0
- package/dist/components/ui/sheet/sheet.stories.svelte +29 -0
- package/dist/components/ui/sheet/sheet.stories.svelte.d.ts +27 -0
- package/dist/components/ui/sidebar/sidebar-group.svelte +3 -3
- package/dist/components/ui/sidebar/sidebar-group.svelte.d.ts +2 -2
- package/dist/components/ui/sidebar/sidebar-menu-button.svelte +28 -30
- package/dist/components/ui/sidebar/sidebar-menu-button.svelte.d.ts +7 -7
- package/dist/components/ui/sidebar/sidebar-separator.svelte.d.ts +1 -1
- package/dist/components/ui/sidebar/sidebar-trigger.svelte +4 -4
- package/dist/components/ui/sonner/sonner.stories.svelte +22 -0
- package/dist/components/ui/sonner/sonner.stories.svelte.d.ts +26 -0
- package/dist/components/ui/sonner/sonner.svelte +8 -2
- package/dist/components/ui/sonner/toast-demo.svelte +29 -0
- package/dist/components/ui/sonner/toast-demo.svelte.d.ts +6 -0
- package/dist/components/ui/textarea/textarea.stories.svelte +22 -0
- package/dist/components/ui/textarea/textarea.stories.svelte.d.ts +27 -0
- package/dist/components/ui/textarea/textarea.svelte +0 -2
- package/dist/components/ui/toggle/toggle.stories.svelte +22 -0
- package/dist/components/ui/toggle/toggle.stories.svelte.d.ts +27 -0
- package/dist/components/ui/toggle-group/toggle-group.stories.svelte +17 -0
- package/dist/components/ui/toggle-group/toggle-group.stories.svelte.d.ts +27 -0
- package/dist/components/ui/tooltip/tooltip.stories.svelte +26 -0
- package/dist/components/ui/tooltip/tooltip.stories.svelte.d.ts +27 -0
- package/dist/core/fields/fieldSchemaToTs.d.ts +1 -0
- package/dist/core/fields/fieldSchemaToTs.js +133 -1
- package/dist/core/fields/layoutUtils.d.ts +17 -0
- package/dist/core/fields/layoutUtils.js +149 -0
- package/dist/core/fields/structuredToHtml.d.ts +9 -0
- package/dist/core/fields/structuredToHtml.js +161 -0
- package/dist/core/server/entries/operations/create.js +2 -1
- package/dist/core/server/entries/operations/get.js +10 -7
- package/dist/core/server/entries/operations/update.d.ts +3 -0
- package/dist/core/server/entries/operations/update.js +30 -2
- package/dist/core/server/fields/queryStructuredContent.d.ts +15 -0
- package/dist/core/server/fields/queryStructuredContent.js +65 -0
- package/dist/core/server/fields/resolveImageFields.js +51 -2
- package/dist/core/server/fields/resolveRelationFields.js +2 -2
- package/dist/core/server/fields/resolveRichtextLinks.js +80 -13
- package/dist/core/server/fields/resolveUrlFields.js +57 -6
- package/dist/core/server/fields/slugResolver.d.ts +10 -0
- package/dist/core/server/fields/slugResolver.js +34 -0
- package/dist/core/server/generator/fields.js +15 -4
- package/dist/core/server/generator/generator.js +3 -2
- package/dist/db-postgres/index.js +10 -6
- package/dist/files-local/index.js +126 -64
- package/dist/server/auth.d.ts +5 -0
- package/dist/server/auth.js +12 -1
- package/dist/sveltekit/components/structured-content.svelte +204 -0
- package/dist/sveltekit/components/structured-content.svelte.d.ts +21 -0
- package/dist/sveltekit/config.d.ts +13 -3
- package/dist/sveltekit/index.d.ts +3 -0
- package/dist/sveltekit/index.js +3 -0
- package/dist/sveltekit/server/handle.js +1 -0
- package/dist/types/config.d.ts +3 -0
- package/dist/types/entries.d.ts +3 -0
- package/dist/types/fields.d.ts +19 -2
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/layout.d.ts +54 -0
- package/dist/types/layout.js +6 -0
- package/dist/types/structured-content.d.ts +63 -0
- package/dist/types/structured-content.js +1 -0
- package/dist/updates/0.1.5/index.d.ts +2 -0
- package/dist/updates/0.1.5/index.js +18 -0
- package/dist/updates/0.2.0/index.d.ts +2 -0
- package/dist/updates/0.2.0/index.js +11 -0
- package/dist/updates/0.2.2/index.d.ts +2 -0
- package/dist/updates/0.2.2/index.js +13 -0
- package/dist/updates/0.5.0/index.d.ts +2 -0
- package/dist/updates/0.5.0/index.js +14 -0
- package/dist/updates/0.5.1/index.d.ts +2 -0
- package/dist/updates/0.5.1/index.js +17 -0
- package/dist/updates/index.js +6 -1
- package/package.json +16 -9
- package/dist/admin/components/dashboard/updates-banner.svelte +0 -170
- package/dist/admin/components/dashboard/updates-banner.svelte.d.ts +0 -3
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import * as Card from '../../../components/ui/card/index.js';
|
|
3
|
-
import { Badge } from '../../../components/ui/badge/index.js';
|
|
4
3
|
import { accountLang } from './lang.js';
|
|
5
4
|
import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
|
|
6
5
|
import { toLocaleCode } from '../../utils/formatDate.js';
|
|
7
6
|
import { authClient } from '../../auth-client.js';
|
|
8
7
|
import { toast } from 'svelte-sonner';
|
|
9
|
-
import DeviceDesktop from '@tabler/icons-svelte/icons/device-desktop';
|
|
10
|
-
import DeviceMobile from '@tabler/icons-svelte/icons/device-mobile';
|
|
11
|
-
import Loader2 from '@tabler/icons-svelte/icons/loader-2';
|
|
12
8
|
import Button from '../../../components/ui/button/button.svelte';
|
|
13
9
|
import { parseUserAgent } from '../../utils/parseUserAgent.js';
|
|
14
10
|
|
|
@@ -75,6 +71,10 @@
|
|
|
75
71
|
minute: '2-digit'
|
|
76
72
|
});
|
|
77
73
|
}
|
|
74
|
+
|
|
75
|
+
function getDeviceLabel(ua: { browser: string; os: string }): string {
|
|
76
|
+
return `${ua.os} — ${ua.browser}`;
|
|
77
|
+
}
|
|
78
78
|
</script>
|
|
79
79
|
|
|
80
80
|
<Card.Root>
|
|
@@ -84,41 +84,43 @@
|
|
|
84
84
|
<Card.Content>
|
|
85
85
|
{#if loading}
|
|
86
86
|
<div class="flex items-center justify-center py-8">
|
|
87
|
-
<
|
|
87
|
+
<svg class="text-muted-foreground size-5 animate-spin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 12a9 9 0 1 1-6.219-8.56"/></svg>
|
|
88
88
|
</div>
|
|
89
89
|
{:else}
|
|
90
|
-
<div
|
|
90
|
+
<div>
|
|
91
91
|
{#each sessions as session}
|
|
92
92
|
{@const ua = parseUserAgent(session.userAgent)}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
93
|
+
{@const isCurrent = session.token === currentSessionToken}
|
|
94
|
+
<div class="acct-session-item">
|
|
95
|
+
<div class="acct-session-icon">
|
|
96
|
+
{#if ua.isMobile}
|
|
97
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></svg>
|
|
98
|
+
{:else}
|
|
99
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>
|
|
100
|
+
{/if}
|
|
101
|
+
</div>
|
|
102
|
+
<div class="min-w-0 flex-1">
|
|
103
|
+
<div class="flex items-center gap-2">
|
|
104
|
+
<span class="text-sm font-semibold">{getDeviceLabel(ua)}</span>
|
|
105
|
+
{#if isCurrent}
|
|
106
|
+
<span class="acct-session-badge">{lang.sessions.currentSession}</span>
|
|
105
107
|
{/if}
|
|
106
108
|
</div>
|
|
107
|
-
<div>
|
|
108
|
-
|
|
109
|
-
<span class="
|
|
110
|
-
{
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
</
|
|
109
|
+
<div class="text-muted-foreground mt-0.5 flex items-center gap-1.5 text-xs">
|
|
110
|
+
{#if isCurrent}
|
|
111
|
+
<span class="acct-dot-online" aria-hidden="true"></span>
|
|
112
|
+
<span>{lang.sessions.online}</span>
|
|
113
|
+
<span aria-hidden="true">·</span>
|
|
114
|
+
{/if}
|
|
115
|
+
{#if session.ipAddress}
|
|
116
|
+
<span>{session.ipAddress}</span>
|
|
117
|
+
<span aria-hidden="true">·</span>
|
|
118
|
+
{/if}
|
|
119
|
+
<span>{formatDate(session.updatedAt)}</span>
|
|
118
120
|
</div>
|
|
119
121
|
</div>
|
|
120
|
-
{#if
|
|
121
|
-
<Button variant="ghost" size="sm" class="text-destructive" onclick={() => revokeSession(session.token)}>
|
|
122
|
+
{#if !isCurrent}
|
|
123
|
+
<Button variant="ghost" size="sm" class="text-destructive shrink-0" onclick={() => revokeSession(session.token)}>
|
|
122
124
|
{lang.sessions.revoke}
|
|
123
125
|
</Button>
|
|
124
126
|
{/if}
|
|
@@ -126,11 +128,10 @@
|
|
|
126
128
|
{/each}
|
|
127
129
|
|
|
128
130
|
{#if sessions.length > 1}
|
|
129
|
-
<div class="
|
|
130
|
-
<Button variant="
|
|
131
|
+
<div class="acct-sessions-footer">
|
|
132
|
+
<Button variant="outline" class="border-destructive text-destructive hover:bg-error-bg" onclick={revokeAllSessions}>
|
|
131
133
|
{lang.sessions.signOutEverywhere}
|
|
132
134
|
</Button>
|
|
133
|
-
<p class="text-muted-foreground mt-1 text-sm">{lang.sessions.signOutEverywhereDesc}</p>
|
|
134
135
|
</div>
|
|
135
136
|
{/if}
|
|
136
137
|
</div>
|
|
@@ -12,12 +12,10 @@
|
|
|
12
12
|
setContentLanguage(new ContentLanguage(languages, languages[0]));
|
|
13
13
|
</script>
|
|
14
14
|
|
|
15
|
-
<Sidebar.Provider
|
|
16
|
-
|
|
17
|
-
>
|
|
18
|
-
<AppSidebar variant="inset" />
|
|
15
|
+
<Sidebar.Provider style="--sidebar-width: 16rem; --header-height: calc(var(--spacing) * 13);">
|
|
16
|
+
<AppSidebar />
|
|
19
17
|
|
|
20
|
-
<Sidebar.Inset class="h-
|
|
18
|
+
<Sidebar.Inset class="h-screen overflow-hidden">
|
|
21
19
|
<SiteHeader />
|
|
22
20
|
<div class="flex grow flex-col overflow-auto">
|
|
23
21
|
{@render children()}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { ModeWatcher } from 'mode-watcher';
|
|
5
5
|
import { Toaster } from '../../../components/ui/sonner/index.js';
|
|
6
6
|
import { MediaSort, setMediaSort } from '../../state/media-sort.svelte.js';
|
|
7
|
+
import AdminPreloader from './admin-preloader.svelte';
|
|
7
8
|
|
|
8
9
|
setMediaSort(new MediaSort());
|
|
9
10
|
|
|
@@ -11,10 +12,10 @@
|
|
|
11
12
|
</script>
|
|
12
13
|
|
|
13
14
|
<ModeWatcher />
|
|
14
|
-
<Toaster />
|
|
15
|
+
<Toaster richColors />
|
|
15
16
|
|
|
16
17
|
<svelte:boundary>
|
|
17
|
-
{#snippet pending()}
|
|
18
|
+
{#snippet pending()}<AdminPreloader />{/snippet}
|
|
18
19
|
|
|
19
20
|
{@render children()}
|
|
20
21
|
</svelte:boundary>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fade } from 'svelte/transition';
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<!-- Fullscreen preloader shown while admin shell loads -->
|
|
6
|
+
<div class="fixed inset-0 z-50 flex items-center justify-center bg-background" role="status" aria-live="polite" out:fade={{ duration: 300 }}>
|
|
7
|
+
<!-- Background orbs (reuse login orb classes) -->
|
|
8
|
+
<div class="fixed inset-0 overflow-hidden pointer-events-none" aria-hidden="true">
|
|
9
|
+
<div class="login-orb login-orb--1"></div>
|
|
10
|
+
<div class="login-orb login-orb--2"></div>
|
|
11
|
+
<div class="login-orb login-orb--3"></div>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
<!-- Content -->
|
|
15
|
+
<div class="preloader-fade-in relative z-[1] flex flex-col items-center gap-8">
|
|
16
|
+
<!-- Logo -->
|
|
17
|
+
<div class="flex items-baseline gap-0.5" aria-label="AriaCMS">
|
|
18
|
+
<span class="text-primary text-[36px] leading-none font-extrabold max-[480px]:text-[28px]" aria-hidden="true">
|
|
19
|
+
Aria
|
|
20
|
+
</span>
|
|
21
|
+
<span class="text-primary text-[20px] leading-none font-light tracking-[0.15em] uppercase max-[480px]:text-[16px]" aria-hidden="true">
|
|
22
|
+
CMS
|
|
23
|
+
</span>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<!-- Spinner + text -->
|
|
27
|
+
<div class="flex flex-col items-center gap-5">
|
|
28
|
+
<div class="h-10 w-10 max-[480px]:h-8 max-[480px]:w-8" aria-hidden="true">
|
|
29
|
+
<div class="preloader-ring"></div>
|
|
30
|
+
</div>
|
|
31
|
+
<p class="text-muted-foreground text-[14px] font-medium tracking-[0.01em]">
|
|
32
|
+
Ładowanie…
|
|
33
|
+
</p>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
declare const AdminPreloader: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
}, {}, {}, string>;
|
|
17
|
+
type AdminPreloader = InstanceType<typeof AdminPreloader>;
|
|
18
|
+
export default AdminPreloader;
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import
|
|
2
|
+
import OrphanedEntriesNotice from '../../components/dashboard/orphaned-entries-notice.svelte';
|
|
3
|
+
import WelcomeHeader from '../../components/dashboard/welcome-header.svelte';
|
|
4
|
+
import RecentEntries from '../../components/dashboard/recent-entries.svelte';
|
|
3
5
|
import FormSubmissionsWidget from '../../components/dashboard/form-submissions-widget.svelte';
|
|
4
6
|
import RecentActivity from '../../components/dashboard/recent-activity.svelte';
|
|
5
|
-
import
|
|
7
|
+
import A11yGauge from '../../components/dashboard/a11y-gauge.svelte';
|
|
8
|
+
import TipOfTheDay from '../../components/dashboard/tip-of-the-day.svelte';
|
|
6
9
|
import { sidebarLang } from '../../components/layout/lang.js';
|
|
7
10
|
import { getBreadcrumbs } from '../../state/breadcrumbs.svelte.js';
|
|
8
11
|
import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
|
|
9
|
-
import * as Alert from '../../../components/ui/alert/index.js';
|
|
10
|
-
import { Button } from '../../../components/ui/button/index.js';
|
|
11
12
|
|
|
12
13
|
import type { InterfaceLanguage } from '../../../types/languages.js';
|
|
13
|
-
import AlertTriangleIcon from '@tabler/icons-svelte/icons/alert-triangle';
|
|
14
|
-
import TrashIcon from '@tabler/icons-svelte/icons/trash';
|
|
15
14
|
|
|
16
15
|
type OrphanedEntry = { id: string; slug: string; createdAt: string };
|
|
17
16
|
|
|
@@ -36,7 +35,11 @@
|
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
async function deleteOrphaned() {
|
|
39
|
-
|
|
38
|
+
const msg: Record<InterfaceLanguage, string> = {
|
|
39
|
+
pl: 'Czy na pewno chcesz usunąć te wpisy? Tej operacji nie można cofnąć.',
|
|
40
|
+
en: 'Are you sure you want to delete these entries? This cannot be undone.'
|
|
41
|
+
};
|
|
42
|
+
if (!confirm(msg[interfaceLanguage.current])) return;
|
|
40
43
|
|
|
41
44
|
deletingOrphaned = true;
|
|
42
45
|
try {
|
|
@@ -62,69 +65,34 @@
|
|
|
62
65
|
}
|
|
63
66
|
];
|
|
64
67
|
});
|
|
65
|
-
|
|
66
|
-
const orphanedLang: Record<
|
|
67
|
-
InterfaceLanguage,
|
|
68
|
-
{ title: string; description: string; deleteBtn: string; confirmDelete: string }
|
|
69
|
-
> = {
|
|
70
|
-
pl: {
|
|
71
|
-
title: 'Znaleziono osirocone wpisy',
|
|
72
|
-
description:
|
|
73
|
-
'W bazie danych znajdują się wpisy, których konfiguracja została usunięta. Zalecane jest ich usunięcie.',
|
|
74
|
-
deleteBtn: 'Usuń osirocone wpisy',
|
|
75
|
-
confirmDelete: 'Czy na pewno chcesz usunąć wszystkie osirocone wpisy? Ta operacja jest nieodwracalna.'
|
|
76
|
-
},
|
|
77
|
-
en: {
|
|
78
|
-
title: 'Orphaned entries found',
|
|
79
|
-
description:
|
|
80
|
-
'The database contains entries whose configuration has been removed. It is recommended to delete them.',
|
|
81
|
-
deleteBtn: 'Delete orphaned entries',
|
|
82
|
-
confirmDelete: 'Are you sure you want to delete all orphaned entries? This operation is irreversible.'
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
68
|
</script>
|
|
86
69
|
|
|
87
|
-
<
|
|
88
|
-
|
|
89
|
-
<
|
|
70
|
+
<main class="dash-main">
|
|
71
|
+
{#if !loadingOrphaned}
|
|
72
|
+
<OrphanedEntriesNotice
|
|
73
|
+
entries={orphanedEntries}
|
|
74
|
+
deleting={deletingOrphaned}
|
|
75
|
+
ondelete={deleteOrphaned}
|
|
76
|
+
/>
|
|
77
|
+
{/if}
|
|
90
78
|
|
|
91
|
-
|
|
92
|
-
<Alert.Root
|
|
93
|
-
variant="destructive"
|
|
94
|
-
class="rounded-2xl border-orange-300/50 bg-orange-50 dark:border-orange-500/30 dark:bg-orange-950/60"
|
|
95
|
-
>
|
|
96
|
-
<AlertTriangleIcon class="text-orange-600 dark:text-orange-400" />
|
|
97
|
-
<Alert.Title class="text-orange-800 dark:text-orange-200">
|
|
98
|
-
{orphanedLang[interfaceLanguage.current].title} ({orphanedEntries.length})
|
|
99
|
-
</Alert.Title>
|
|
100
|
-
<Alert.Description class="text-orange-700 dark:text-orange-300">
|
|
101
|
-
<p class="mb-3">{orphanedLang[interfaceLanguage.current].description}</p>
|
|
102
|
-
<details class="mb-3">
|
|
103
|
-
<summary class="cursor-pointer text-sm font-medium">Slugs</summary>
|
|
104
|
-
<ul class="mt-2 list-inside list-disc text-sm">
|
|
105
|
-
{#each orphanedEntries as entry}
|
|
106
|
-
<li><code class="rounded bg-orange-200/50 px-1 dark:bg-orange-800/50">{entry.slug}</code></li>
|
|
107
|
-
{/each}
|
|
108
|
-
</ul>
|
|
109
|
-
</details>
|
|
110
|
-
<Button
|
|
111
|
-
variant="destructive"
|
|
112
|
-
size="sm"
|
|
113
|
-
onclick={deleteOrphaned}
|
|
114
|
-
disabled={deletingOrphaned}
|
|
115
|
-
>
|
|
116
|
-
<TrashIcon class="mr-1 h-4 w-4" />
|
|
117
|
-
{orphanedLang[interfaceLanguage.current].deleteBtn}
|
|
118
|
-
</Button>
|
|
119
|
-
</Alert.Description>
|
|
120
|
-
</Alert.Root>
|
|
121
|
-
{/if}
|
|
79
|
+
<WelcomeHeader />
|
|
122
80
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
81
|
+
<div class="flex gap-5">
|
|
82
|
+
<div class="flex-1">
|
|
83
|
+
<div class="grid grid-cols-2 gap-5">
|
|
84
|
+
<RecentEntries />
|
|
85
|
+
<FormSubmissionsWidget />
|
|
86
|
+
</div>
|
|
87
|
+
<div class="mt-5">
|
|
88
|
+
<RecentActivity />
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="max-w-80 flex-1 shrink-0">
|
|
92
|
+
<A11yGauge />
|
|
93
|
+
<div class="mt-5">
|
|
94
|
+
<TipOfTheDay />
|
|
95
|
+
</div>
|
|
128
96
|
</div>
|
|
129
97
|
</div>
|
|
130
|
-
</
|
|
98
|
+
</main>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
|
|
3
|
+
import type { InterfaceLanguage } from '../../../types/languages.js';
|
|
4
|
+
|
|
5
|
+
type Props = {
|
|
6
|
+
warningCount: number;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
let { warningCount }: Props = $props();
|
|
10
|
+
|
|
11
|
+
const interfaceLanguage = useInterfaceLanguage();
|
|
12
|
+
|
|
13
|
+
const lang: Record<InterfaceLanguage, {
|
|
14
|
+
ok: string;
|
|
15
|
+
warnings: (n: number) => string;
|
|
16
|
+
problems: (n: number) => string;
|
|
17
|
+
}> = {
|
|
18
|
+
en: {
|
|
19
|
+
ok: 'Compliant',
|
|
20
|
+
warnings: (n) => `${n} note${n === 1 ? '' : 's'}`,
|
|
21
|
+
problems: (n) => `${n} issue${n === 1 ? '' : 's'}`
|
|
22
|
+
},
|
|
23
|
+
pl: {
|
|
24
|
+
ok: 'Zgodny',
|
|
25
|
+
warnings: (n) => `${n} ${n === 1 ? 'uwaga' : n < 5 ? 'uwagi' : 'uwag'}`,
|
|
26
|
+
problems: (n) => `${n} ${n === 1 ? 'problem' : n < 5 ? 'problemy' : 'problemów'}`
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const t = $derived(lang[interfaceLanguage.current]);
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
{#if warningCount === 0}
|
|
34
|
+
<span class="inline-flex items-center gap-1 text-xs text-success font-medium whitespace-nowrap">
|
|
35
|
+
<span aria-hidden="true">✓</span> {t.ok}
|
|
36
|
+
</span>
|
|
37
|
+
{:else if warningCount <= 2}
|
|
38
|
+
<span class="inline-flex items-center gap-1 text-xs text-warning font-medium whitespace-nowrap">
|
|
39
|
+
<span aria-hidden="true">⚠</span> {t.warnings(warningCount)}
|
|
40
|
+
</span>
|
|
41
|
+
{:else}
|
|
42
|
+
<span class="inline-flex items-center gap-1 text-xs text-destructive font-medium whitespace-nowrap">
|
|
43
|
+
<span aria-hidden="true">✗</span> {t.problems(warningCount)}
|
|
44
|
+
</span>
|
|
45
|
+
{/if}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Archive from '@tabler/icons-svelte/icons/archive';
|
|
3
|
+
import ArchiveOff from '@tabler/icons-svelte/icons/archive-off';
|
|
4
|
+
import Trash from '@tabler/icons-svelte/icons/trash';
|
|
5
|
+
import X from '@tabler/icons-svelte/icons/x';
|
|
6
|
+
import Button from '../../../components/ui/button/button.svelte';
|
|
7
|
+
import { fly } from 'svelte/transition';
|
|
8
|
+
import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
|
|
9
|
+
import type { InterfaceLanguage } from '../../../types/languages.js';
|
|
10
|
+
|
|
11
|
+
type Props = {
|
|
12
|
+
selectedCount: number;
|
|
13
|
+
onArchive: () => void;
|
|
14
|
+
onDelete: () => void;
|
|
15
|
+
onClear: () => void;
|
|
16
|
+
onRestore?: () => void;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
let { selectedCount, onArchive, onDelete, onClear, onRestore }: Props = $props();
|
|
20
|
+
|
|
21
|
+
const interfaceLanguage = useInterfaceLanguage();
|
|
22
|
+
|
|
23
|
+
const lang: Record<InterfaceLanguage, {
|
|
24
|
+
selected: (n: number) => string;
|
|
25
|
+
archive: string;
|
|
26
|
+
restore: string;
|
|
27
|
+
delete: string;
|
|
28
|
+
}> = {
|
|
29
|
+
en: {
|
|
30
|
+
selected: (n) => `${n} selected`,
|
|
31
|
+
archive: 'Archive',
|
|
32
|
+
restore: 'Restore',
|
|
33
|
+
delete: 'Delete'
|
|
34
|
+
},
|
|
35
|
+
pl: {
|
|
36
|
+
selected: (n) => `Zaznaczono: ${n}`,
|
|
37
|
+
archive: 'Archiwizuj',
|
|
38
|
+
restore: 'Przywróć',
|
|
39
|
+
delete: 'Usuń'
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const t = $derived(lang[interfaceLanguage.current]);
|
|
44
|
+
</script>
|
|
45
|
+
|
|
46
|
+
{#if selectedCount > 0}
|
|
47
|
+
<div
|
|
48
|
+
class="fixed bottom-6 left-1/2 z-50 -translate-x-1/2"
|
|
49
|
+
transition:fly={{ y: 40, duration: 200 }}
|
|
50
|
+
role="status"
|
|
51
|
+
aria-live="polite"
|
|
52
|
+
>
|
|
53
|
+
<div
|
|
54
|
+
class="flex items-center gap-3 rounded-xl bg-plum-darker px-5 py-3 text-white shadow-xl"
|
|
55
|
+
>
|
|
56
|
+
<span class="text-sm font-medium">{t.selected(selectedCount)}</span>
|
|
57
|
+
|
|
58
|
+
<div class="h-5 w-px bg-white/20"></div>
|
|
59
|
+
|
|
60
|
+
{#if onRestore}
|
|
61
|
+
<Button
|
|
62
|
+
variant="ghost"
|
|
63
|
+
size="sm"
|
|
64
|
+
class="text-white hover:bg-white/10 hover:text-white"
|
|
65
|
+
onclick={onRestore}
|
|
66
|
+
>
|
|
67
|
+
<ArchiveOff class="mr-1.5 size-3.5" />
|
|
68
|
+
{t.restore}
|
|
69
|
+
</Button>
|
|
70
|
+
{:else}
|
|
71
|
+
<Button
|
|
72
|
+
variant="ghost"
|
|
73
|
+
size="sm"
|
|
74
|
+
class="text-white hover:bg-white/10 hover:text-white"
|
|
75
|
+
onclick={onArchive}
|
|
76
|
+
>
|
|
77
|
+
<Archive class="mr-1.5 size-3.5" />
|
|
78
|
+
{t.archive}
|
|
79
|
+
</Button>
|
|
80
|
+
{/if}
|
|
81
|
+
<Button
|
|
82
|
+
variant="ghost"
|
|
83
|
+
size="sm"
|
|
84
|
+
class="text-white border border-white/20 hover:bg-white/10 hover:text-white"
|
|
85
|
+
onclick={onDelete}
|
|
86
|
+
>
|
|
87
|
+
<Trash class="mr-1.5 size-3.5" />
|
|
88
|
+
{t.delete}
|
|
89
|
+
</Button>
|
|
90
|
+
|
|
91
|
+
<button
|
|
92
|
+
class="ml-1 rounded-md p-1 text-white/60 hover:bg-white/10 hover:text-white"
|
|
93
|
+
onclick={onClear}
|
|
94
|
+
aria-label="Clear selection"
|
|
95
|
+
>
|
|
96
|
+
<X class="size-4" />
|
|
97
|
+
</button>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
{/if}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type Props = {
|
|
2
|
+
selectedCount: number;
|
|
3
|
+
onArchive: () => void;
|
|
4
|
+
onDelete: () => void;
|
|
5
|
+
onClear: () => void;
|
|
6
|
+
onRestore?: () => void;
|
|
7
|
+
};
|
|
8
|
+
declare const BulkActionsBar: import("svelte").Component<Props, {}, "">;
|
|
9
|
+
type BulkActionsBar = ReturnType<typeof BulkActionsBar>;
|
|
10
|
+
export default BulkActionsBar;
|