includio-cms 0.0.47 → 0.0.49
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/admin/client/admin/admin-after-login-layout-content.svelte +2 -0
- package/dist/admin/client/admin/admin-layout.svelte +3 -6
- package/dist/admin/client/admin/dashboard-page.svelte +2 -2
- package/dist/admin/client/collection/collection-entries.svelte +8 -7
- package/dist/admin/client/collection/collection.svelte +3 -3
- package/dist/admin/client/entry/entry-form.svelte +16 -24
- package/dist/admin/client/entry/entry-form.svelte.d.ts +4 -2
- package/dist/admin/client/entry/entry-header.svelte +136 -72
- package/dist/admin/client/entry/entry-header.svelte.d.ts +6 -4
- package/dist/admin/client/entry/entry-page.svelte +3 -3
- package/dist/admin/client/entry/entry-version.svelte +21 -0
- package/dist/admin/client/entry/entry-version.svelte.d.ts +7 -0
- package/dist/admin/client/entry/entry.svelte +192 -29
- package/dist/admin/client/entry/entry.svelte.d.ts +3 -2
- package/dist/admin/client/entry/header/visibility.svelte +75 -0
- package/dist/admin/client/entry/header/visibility.svelte.d.ts +7 -0
- package/dist/admin/client/entry/utils.d.ts +3 -0
- package/dist/admin/client/entry/utils.js +18 -0
- package/dist/admin/client/form/form-page.svelte +2 -2
- package/dist/admin/client/form/form-submission/form-submission.svelte +2 -2
- package/dist/admin/client/form/form-submissions.svelte +2 -2
- package/dist/admin/client/login/login-form.svelte +2 -2
- package/dist/admin/client/media/media-page.svelte +2 -2
- package/dist/admin/components/accessibility/accessibility-overview.svelte +2 -2
- package/dist/admin/components/fields/image-field.svelte +52 -29
- package/dist/admin/components/fields/relation-field.svelte +25 -28
- package/dist/admin/components/fields/relation-field.svelte.d.ts +6 -6
- package/dist/admin/components/fields/url-field.svelte +20 -15
- package/dist/admin/components/layout/nav-collections.svelte +2 -2
- package/dist/admin/components/layout/nav-forms.svelte +2 -2
- package/dist/admin/components/layout/nav-main.svelte +2 -2
- package/dist/admin/components/layout/nav-user.svelte +2 -2
- package/dist/admin/components/layout/site-header.svelte +2 -2
- package/dist/admin/components/media/alt-input.svelte +2 -2
- package/dist/admin/components/media/field/preview-carousel.svelte +57 -0
- package/dist/admin/components/media/field/preview-carousel.svelte.d.ts +7 -0
- package/dist/admin/components/media/file/file-details.svelte +191 -0
- package/dist/admin/components/media/file/file-details.svelte.d.ts +15 -0
- package/dist/admin/components/media/file/file-miniature.svelte +41 -0
- package/dist/admin/components/media/file/file-miniature.svelte.d.ts +7 -0
- package/dist/admin/components/media/file/file-name-input.svelte +79 -0
- package/dist/admin/components/media/file/file-name-input.svelte.d.ts +12 -0
- package/dist/admin/components/media/file/file-preview.svelte +46 -0
- package/dist/admin/components/media/file/file-preview.svelte.d.ts +8 -0
- package/dist/admin/components/media/file-upload.svelte +2 -2
- package/dist/admin/components/media/files-list.svelte +48 -0
- package/dist/admin/components/media/files-list.svelte.d.ts +9 -0
- package/dist/admin/components/media/media-library.svelte +42 -94
- package/dist/admin/components/media/media-selector.svelte +216 -0
- package/dist/admin/components/media/media-selector.svelte.d.ts +8 -0
- package/dist/admin/components/media/media-sort.svelte +53 -0
- package/dist/admin/components/media/media-sort.svelte.d.ts +3 -0
- package/dist/admin/components/media/tag-combobox.svelte +2 -2
- package/dist/admin/remote/entry.remote.d.ts +39 -26
- package/dist/admin/remote/entry.remote.js +81 -45
- package/dist/admin/remote/media.remote.d.ts +12 -0
- package/dist/admin/remote/media.remote.js +9 -1
- package/dist/admin/state/interface-language.svelte.d.ts +1 -1
- package/dist/admin/state/interface-language.svelte.js +10 -1
- package/dist/admin/state/media-sort.svelte.d.ts +9 -0
- package/dist/admin/state/media-sort.svelte.js +17 -0
- package/dist/admin/state/preview-svelte.d.ts +9 -0
- package/dist/admin/state/preview-svelte.js +16 -0
- package/dist/admin/utils/entryLabel.d.ts +3 -2
- package/dist/admin/utils/entryLabel.js +15 -2
- package/dist/components/hooks/use-clipboard.svelte.d.ts +56 -0
- package/dist/components/hooks/use-clipboard.svelte.js +85 -0
- package/dist/components/ui/button/button.svelte +2 -0
- package/dist/components/ui/button/button.svelte.d.ts +6 -0
- package/dist/components/ui/button-group/button-group-separator.svelte +2 -0
- package/dist/components/ui/button-group/button-group-separator.svelte.d.ts +1 -1
- package/dist/components/ui/button-group/button-group-text.svelte +8 -11
- package/dist/components/ui/button-group/button-group-text.svelte.d.ts +3 -2
- package/dist/components/ui/button-group/button-group.svelte +7 -5
- package/dist/components/ui/button-group/button-group.svelte.d.ts +6 -5
- package/dist/components/ui/calendar/calendar-caption.svelte +76 -0
- package/dist/components/ui/calendar/calendar-caption.svelte.d.ts +19 -0
- package/dist/components/ui/calendar/calendar-cell.svelte +19 -0
- package/dist/components/ui/calendar/calendar-cell.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-day.svelte +35 -0
- package/dist/components/ui/calendar/calendar-day.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-grid-body.svelte +12 -0
- package/dist/components/ui/calendar/calendar-grid-body.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-grid-head.svelte +12 -0
- package/dist/components/ui/calendar/calendar-grid-head.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-grid-row.svelte +12 -0
- package/dist/components/ui/calendar/calendar-grid-row.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-grid.svelte +16 -0
- package/dist/components/ui/calendar/calendar-grid.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-head-cell.svelte +19 -0
- package/dist/components/ui/calendar/calendar-head-cell.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-header.svelte +19 -0
- package/dist/components/ui/calendar/calendar-header.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-heading.svelte +16 -0
- package/dist/components/ui/calendar/calendar-heading.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-month-select.svelte +44 -0
- package/dist/components/ui/calendar/calendar-month-select.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-month.svelte +15 -0
- package/dist/components/ui/calendar/calendar-month.svelte.d.ts +5 -0
- package/dist/components/ui/calendar/calendar-months.svelte +19 -0
- package/dist/components/ui/calendar/calendar-months.svelte.d.ts +5 -0
- package/dist/components/ui/calendar/calendar-nav.svelte +19 -0
- package/dist/components/ui/calendar/calendar-nav.svelte.d.ts +5 -0
- package/dist/components/ui/calendar/calendar-next-button.svelte +31 -0
- package/dist/components/ui/calendar/calendar-next-button.svelte.d.ts +8 -0
- package/dist/components/ui/calendar/calendar-prev-button.svelte +31 -0
- package/dist/components/ui/calendar/calendar-prev-button.svelte.d.ts +8 -0
- package/dist/components/ui/calendar/calendar-year-select.svelte +43 -0
- package/dist/components/ui/calendar/calendar-year-select.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar.svelte +115 -0
- package/dist/components/ui/calendar/calendar.svelte.d.ts +21 -0
- package/dist/components/ui/calendar/index.d.ts +19 -0
- package/dist/components/ui/calendar/index.js +21 -0
- package/dist/components/ui/carousel/carousel-content.svelte +43 -0
- package/dist/components/ui/carousel/carousel-content.svelte.d.ts +5 -0
- package/dist/components/ui/carousel/carousel-item.svelte +30 -0
- package/dist/components/ui/carousel/carousel-item.svelte.d.ts +5 -0
- package/dist/components/ui/carousel/carousel-next.svelte +38 -0
- package/dist/components/ui/carousel/carousel-next.svelte.d.ts +4 -0
- package/dist/components/ui/carousel/carousel-previous.svelte +38 -0
- package/dist/components/ui/carousel/carousel-previous.svelte.d.ts +4 -0
- package/dist/components/ui/carousel/carousel.svelte +93 -0
- package/dist/components/ui/carousel/carousel.svelte.d.ts +5 -0
- package/dist/components/ui/carousel/context.d.ts +31 -0
- package/dist/components/ui/carousel/context.js +12 -0
- package/dist/components/ui/carousel/index.d.ts +6 -0
- package/dist/components/ui/carousel/index.js +8 -0
- package/dist/components/ui/field/field-content.svelte +20 -0
- package/dist/components/ui/field/field-content.svelte.d.ts +5 -0
- package/dist/components/ui/field/field-description.svelte +25 -0
- package/dist/components/ui/field/field-description.svelte.d.ts +5 -0
- package/dist/components/ui/field/field-error.svelte +58 -0
- package/dist/components/ui/field/field-error.svelte.d.ts +12 -0
- package/dist/components/ui/field/field-group.svelte +23 -0
- package/dist/components/ui/field/field-group.svelte.d.ts +5 -0
- package/dist/components/ui/field/field-label.svelte +26 -0
- package/dist/components/ui/field/field-label.svelte.d.ts +10 -0
- package/dist/components/ui/field/field-legend.svelte +29 -0
- package/dist/components/ui/field/field-legend.svelte.d.ts +8 -0
- package/dist/components/ui/field/field-separator.svelte +38 -0
- package/dist/components/ui/field/field-separator.svelte.d.ts +9 -0
- package/dist/components/ui/field/field-set.svelte +24 -0
- package/dist/components/ui/field/field-set.svelte.d.ts +5 -0
- package/dist/components/ui/field/field-title.svelte +23 -0
- package/dist/components/ui/field/field-title.svelte.d.ts +5 -0
- package/dist/components/ui/field/field.svelte +53 -0
- package/dist/components/ui/field/field.svelte.d.ts +29 -0
- package/dist/components/ui/field/index.d.ts +11 -0
- package/dist/components/ui/field/index.js +13 -0
- package/dist/components/ui/input/input.svelte +4 -3
- package/dist/components/ui/input-group/index.d.ts +7 -0
- package/dist/components/ui/input-group/index.js +9 -0
- package/dist/components/ui/input-group/input-group-addon.svelte +55 -0
- package/dist/components/ui/input-group/input-group-addon.svelte.d.ts +32 -0
- package/dist/components/ui/input-group/input-group-button.svelte +49 -0
- package/dist/components/ui/input-group/input-group-button.svelte.d.ts +32 -0
- package/dist/components/ui/input-group/input-group-input.svelte +23 -0
- package/dist/components/ui/input-group/input-group-input.svelte.d.ts +11 -0
- package/dist/components/ui/input-group/input-group-text.svelte +22 -0
- package/dist/components/ui/input-group/input-group-text.svelte.d.ts +5 -0
- package/dist/components/ui/input-group/input-group-textarea.svelte +23 -0
- package/dist/components/ui/input-group/input-group-textarea.svelte.d.ts +3 -0
- package/dist/components/ui/input-group/input-group.svelte +38 -0
- package/dist/components/ui/input-group/input-group.svelte.d.ts +5 -0
- package/dist/components/ui/select/index.d.ts +12 -0
- package/dist/components/ui/select/index.js +14 -0
- package/dist/components/ui/select/select-content.svelte +45 -0
- package/dist/components/ui/select/select-content.svelte.d.ts +11 -0
- package/dist/components/ui/select/select-group-heading.svelte +21 -0
- package/dist/components/ui/select/select-group-heading.svelte.d.ts +10 -0
- package/dist/components/ui/select/select-group.svelte +7 -0
- package/dist/components/ui/select/select-group.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-item.svelte +38 -0
- package/dist/components/ui/select/select-item.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-label.svelte +20 -0
- package/dist/components/ui/select/select-label.svelte.d.ts +6 -0
- package/dist/components/ui/select/select-portal.svelte +7 -0
- package/dist/components/ui/select/select-portal.svelte.d.ts +3 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte +20 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte +20 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-separator.svelte +18 -0
- package/dist/components/ui/select/select-separator.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-trigger.svelte +29 -0
- package/dist/components/ui/select/select-trigger.svelte.d.ts +8 -0
- package/dist/components/ui/select/select.svelte +11 -0
- package/dist/components/ui/select/select.svelte.d.ts +3 -0
- package/dist/components/ui/sidebar/sidebar-input.svelte.d.ts +1 -1
- package/dist/components/ui/spinner/index.d.ts +1 -0
- package/dist/components/ui/spinner/index.js +1 -0
- package/dist/components/ui/spinner/spinner.svelte +14 -0
- package/dist/components/ui/textarea/textarea.svelte +2 -1
- package/dist/components/ui/toggle-group/toggle-group-item.svelte +1 -1
- package/dist/core/cms.d.ts +3 -1
- package/dist/core/cms.js +12 -2
- package/dist/core/server/entries/operations/create.d.ts +14 -4
- package/dist/core/server/entries/operations/create.js +34 -25
- package/dist/core/server/entries/operations/get.d.ts +16 -14
- package/dist/core/server/entries/operations/get.js +138 -129
- package/dist/core/server/entries/operations/update.d.ts +30 -2
- package/dist/core/server/entries/operations/update.js +78 -17
- package/dist/core/server/fields/populateEntry.js +1 -1
- package/dist/core/server/fields/resolveImageFields.js +1 -1
- package/dist/core/server/fields/resolveRelationFields.d.ts +1 -1
- package/dist/core/server/fields/resolveRelationFields.js +9 -8
- package/dist/core/server/fields/resolveUrlFields.js +2 -6
- package/dist/core/server/forms/submissions/operations/create.js +9 -0
- package/dist/core/server/generator/generator.js +8 -10
- package/dist/core/server/media/operations/getFiles.d.ts +1 -1
- package/dist/core/server/media/operations/updateFile.d.ts +8 -0
- package/dist/core/server/media/operations/updateFile.js +26 -0
- package/dist/db-postgres/index.d.ts +1 -1
- package/dist/db-postgres/index.js +116 -88
- package/dist/db-postgres/schema/entry.d.ts +39 -62
- package/dist/db-postgres/schema/entry.js +5 -7
- package/dist/db-postgres/schema/entryVersion.d.ts +146 -0
- package/dist/db-postgres/schema/entryVersion.js +15 -0
- package/dist/db-postgres/schema/index.d.ts +1 -0
- package/dist/db-postgres/schema/index.js +1 -0
- package/dist/email-nodemailer/index.d.ts +15 -0
- package/dist/email-nodemailer/index.js +17 -0
- package/dist/files-local/index.js +45 -7
- package/dist/sveltekit/components/preview.svelte +250 -0
- package/dist/sveltekit/components/preview.svelte.d.ts +11 -0
- package/dist/sveltekit/server/index.d.ts +2 -1
- package/dist/sveltekit/server/index.js +2 -1
- package/dist/sveltekit/server/preview.d.ts +5 -0
- package/dist/sveltekit/server/preview.js +16 -0
- package/dist/types/{adapters.d.ts → adapters/db.d.ts} +30 -39
- package/dist/types/adapters/email.d.ts +12 -0
- package/dist/types/adapters/files.d.ts +9 -0
- package/dist/types/cms.d.ts +4 -1
- package/dist/types/entries.d.ts +92 -12
- package/dist/types/entries.js +3 -1
- package/dist/types/forms.d.ts +1 -0
- package/package.json +9 -1
- package/dist/core/server/sessions/operations/create.d.ts +0 -2
- package/dist/core/server/sessions/operations/create.js +0 -4
- package/dist/core/server/users/operations/create.js +0 -1
- package/dist/core/server/users/operations/get.d.ts +0 -4
- package/dist/core/server/users/operations/get.js +0 -13
- package/dist/core/server/users/operations/update.d.ts +0 -2
- package/dist/core/server/users/operations/update.js +0 -4
- /package/dist/{core/server/users/operations/create.d.ts → types/adapters/db.js} +0 -0
- /package/dist/types/{adapters.js → adapters/email.js} +0 -0
|
@@ -5,11 +5,13 @@
|
|
|
5
5
|
import SiteHeader from '../../components/layout/site-header.svelte';
|
|
6
6
|
import { Breadcrumbs, setBreadcrumbs } from '../../state/breadcrumbs.svelte.js';
|
|
7
7
|
import { ContentLanguage, setContentLanguage } from '../../state/content-language.svelte.js';
|
|
8
|
+
import { Preview, setPreviewStatus } from '../../state/preview-svelte.js';
|
|
8
9
|
|
|
9
10
|
let { languages, children }: { languages: string[]; children: Snippet } = $props();
|
|
10
11
|
|
|
11
12
|
setBreadcrumbs(new Breadcrumbs());
|
|
12
13
|
setContentLanguage(new ContentLanguage(languages, languages[0]));
|
|
14
|
+
setPreviewStatus(new Preview());
|
|
13
15
|
</script>
|
|
14
16
|
|
|
15
17
|
<Sidebar.Provider
|
|
@@ -3,14 +3,11 @@
|
|
|
3
3
|
import '../../styles/admin.css';
|
|
4
4
|
import { ModeWatcher } from 'mode-watcher';
|
|
5
5
|
import { Toaster } from '../../../components/ui/sonner/index.js';
|
|
6
|
-
import {
|
|
7
|
-
InterfaceLanguage,
|
|
8
|
-
setInterfaceLanguage
|
|
9
|
-
} from '../../state/interface-language.svelte.js';
|
|
6
|
+
import { MediaSort, setMediaSort } from '../../state/media-sort.svelte.js';
|
|
10
7
|
|
|
11
|
-
|
|
8
|
+
setMediaSort(new MediaSort());
|
|
12
9
|
|
|
13
|
-
|
|
10
|
+
let { children }: { children: Snippet } = $props();
|
|
14
11
|
</script>
|
|
15
12
|
|
|
16
13
|
<ModeWatcher />
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
import AccessibilityOverview from '../../components/accessibility/accessibility-overview.svelte';
|
|
3
3
|
import { sidebarLang } from '../../components/layout/lang.js';
|
|
4
4
|
import { getBreadcrumbs } from '../../state/breadcrumbs.svelte.js';
|
|
5
|
-
import {
|
|
5
|
+
import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
|
|
6
6
|
import * as Alert from '../../../components/ui/alert/index.js';
|
|
7
7
|
|
|
8
8
|
import type { InterfaceLanguage } from '../../../types/languages.js';
|
|
9
9
|
import InfoCircleIcon from '@tabler/icons-svelte/icons/info-circle';
|
|
10
10
|
|
|
11
11
|
const breadcrumbs = getBreadcrumbs();
|
|
12
|
-
const interfaceLanguage =
|
|
12
|
+
const interfaceLanguage = useInterfaceLanguage();
|
|
13
13
|
|
|
14
14
|
$effect(() => {
|
|
15
15
|
breadcrumbs.state = [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import { getRawCollectionEntryLabel } from '../../utils/entryLabel.js';
|
|
3
3
|
import { getRemotes } from '../../../sveltekit/index.js';
|
|
4
4
|
import type { CollectionConfigWithType } from '../../../types/collections.js';
|
|
5
5
|
import DataTable from './data-table.svelte';
|
|
@@ -8,11 +8,12 @@
|
|
|
8
8
|
import { renderComponent } from '../../../components/ui/data-table/render-helpers.js';
|
|
9
9
|
import EntryLink from './entry-link.svelte';
|
|
10
10
|
import type { InterfaceLanguage } from '../../../types/languages.js';
|
|
11
|
-
import {
|
|
11
|
+
import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
|
|
12
|
+
import { getEntryStatus } from '../entry/utils.js';
|
|
12
13
|
|
|
13
14
|
const remotes = getRemotes();
|
|
14
15
|
const contentLanguage = getContentLanguage();
|
|
15
|
-
const interfaceLanguage =
|
|
16
|
+
const interfaceLanguage = useInterfaceLanguage();
|
|
16
17
|
|
|
17
18
|
const lang: Record<InterfaceLanguage, { name: string; createdAt: string; updatedAt: string }> = {
|
|
18
19
|
en: {
|
|
@@ -74,15 +75,15 @@
|
|
|
74
75
|
let { collection }: Props = $props();
|
|
75
76
|
</script>
|
|
76
77
|
|
|
77
|
-
{#await remotes.
|
|
78
|
+
{#await remotes.getRawEntries({ slug: collection.slug }) then entries}
|
|
78
79
|
{@const items = entries
|
|
79
|
-
.filter((entry) => entry.
|
|
80
|
+
.filter((entry) => entry.archivedAt === null)
|
|
80
81
|
.map((entry) => ({
|
|
81
82
|
id: entry.id,
|
|
82
83
|
collection: entry.slug,
|
|
83
|
-
name:
|
|
84
|
+
name: getRawCollectionEntryLabel(entry, collection, contentLanguage.current),
|
|
84
85
|
url: `/admin/entries/${entry.id}`,
|
|
85
|
-
status: entry
|
|
86
|
+
status: getEntryStatus(entry),
|
|
86
87
|
createdAt: entry.createdAt,
|
|
87
88
|
updatedAt: entry.updatedAt
|
|
88
89
|
}))}
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
import type { CollectionConfigWithType } from '../../../types/collections.js';
|
|
8
8
|
import { getBreadcrumbs } from '../../state/breadcrumbs.svelte.js';
|
|
9
9
|
import { getLocalizedLabel } from '../../utils/collectionLabel.js';
|
|
10
|
-
import {
|
|
10
|
+
import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
|
|
11
11
|
import type { InterfaceLanguage } from '../../../types/languages.js';
|
|
12
12
|
|
|
13
13
|
const remotes = getRemotes();
|
|
14
|
-
const interfaceLanguage =
|
|
14
|
+
const interfaceLanguage = useInterfaceLanguage();
|
|
15
15
|
|
|
16
16
|
const lang: Record<InterfaceLanguage, { add: string }> = {
|
|
17
17
|
en: { add: 'Create new' },
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
let { collection }: Props = $props();
|
|
26
26
|
|
|
27
27
|
async function onCreateEntry() {
|
|
28
|
-
const newEntry = await remotes.
|
|
28
|
+
const newEntry = await remotes.createEntry({ type: 'collection', slug: collection.slug });
|
|
29
29
|
goto(`/admin/entries/${newEntry.id}`);
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -3,11 +3,8 @@
|
|
|
3
3
|
import { getContentLanguage } from '../../state/content-language.svelte.js';
|
|
4
4
|
import { generateZodSchemaFromFields } from '../../../core/fields/fieldSchemaToTs.js';
|
|
5
5
|
import { getRemotes } from '../../../sveltekit/index.js';
|
|
6
|
-
import type {
|
|
7
|
-
import type { RawEntry, RawEntryWithCollection } from '../../../types/entries.js';
|
|
8
|
-
import type { SingleConfigWithType } from '../../../types/singles.js';
|
|
6
|
+
import type { DbEntryVersion, RawEntry } from '../../../types/entries.js';
|
|
9
7
|
import { onMount } from 'svelte';
|
|
10
|
-
import { toast } from 'svelte-sonner';
|
|
11
8
|
import { defaults, superForm, type SuperForm } from 'sveltekit-superforms';
|
|
12
9
|
import { zod, zodClient } from 'sveltekit-superforms/adapters';
|
|
13
10
|
|
|
@@ -16,39 +13,34 @@
|
|
|
16
13
|
|
|
17
14
|
type Props = {
|
|
18
15
|
form: SuperForm<any> | undefined;
|
|
19
|
-
entry:
|
|
16
|
+
entry: RawEntry;
|
|
17
|
+
version: DbEntryVersion;
|
|
18
|
+
onUpdate?: () => void;
|
|
20
19
|
};
|
|
21
20
|
|
|
22
|
-
let { form = $bindable(), entry }: Props = $props();
|
|
21
|
+
let { form = $bindable(), entry, version, onUpdate }: Props = $props();
|
|
23
22
|
let { collection } = entry;
|
|
24
23
|
|
|
25
24
|
onMount(() => {
|
|
26
25
|
let collectionSchema = generateZodSchemaFromFields(collection.fields, contentLanguage.all);
|
|
27
26
|
|
|
28
|
-
form = superForm(defaults(
|
|
27
|
+
form = superForm(defaults(version.data, zod(collectionSchema)), {
|
|
29
28
|
validators: zodClient(collectionSchema),
|
|
30
29
|
SPA: true,
|
|
31
30
|
dataType: 'json',
|
|
32
|
-
resetForm: false
|
|
33
|
-
onUpdate: async ({ form }) => {
|
|
34
|
-
if (form.valid) {
|
|
35
|
-
await remotes.updateEntryCommand({
|
|
36
|
-
id: entry.id,
|
|
37
|
-
data: {
|
|
38
|
-
data: form.data
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
toast.success('Entry saved!');
|
|
42
|
-
}
|
|
43
|
-
}
|
|
31
|
+
resetForm: false
|
|
44
32
|
});
|
|
33
|
+
|
|
34
|
+
const unsub = form.form.subscribe((currentForm) => {
|
|
35
|
+
onUpdate?.();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
() => {
|
|
39
|
+
unsub();
|
|
40
|
+
};
|
|
45
41
|
});
|
|
46
42
|
</script>
|
|
47
43
|
|
|
48
44
|
{#if form}
|
|
49
|
-
<
|
|
50
|
-
<div class="grow p-4 lg:p-6">
|
|
51
|
-
<FieldsForm {form} fields={collection.fields} />
|
|
52
|
-
</div>
|
|
53
|
-
</div>
|
|
45
|
+
<FieldsForm {form} fields={collection.fields} />
|
|
54
46
|
{/if}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DbEntryVersion, RawEntry } from '../../../types/entries.js';
|
|
2
2
|
import { type SuperForm } from 'sveltekit-superforms';
|
|
3
3
|
type Props = {
|
|
4
4
|
form: SuperForm<any> | undefined;
|
|
5
|
-
entry:
|
|
5
|
+
entry: RawEntry;
|
|
6
|
+
version: DbEntryVersion;
|
|
7
|
+
onUpdate?: () => void;
|
|
6
8
|
};
|
|
7
9
|
declare const EntryForm: import("svelte").Component<Props, {}, "form">;
|
|
8
10
|
type EntryForm = ReturnType<typeof EntryForm>;
|
|
@@ -1,116 +1,103 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { getContentLanguage } from '../../state/content-language.svelte.js';
|
|
3
|
-
import {
|
|
4
|
-
import type { RawEntryWithCollection } from '../../../types/entries.js';
|
|
3
|
+
import type { DbEntryVersion, EntryStatus, RawEntry } from '../../../types/entries.js';
|
|
5
4
|
import * as ToggleGroup from '../../../components/ui/toggle-group/index.js';
|
|
6
5
|
import * as DropdownMenu from '../../../components/ui/dropdown-menu/index.js';
|
|
7
6
|
import Button from '../../../components/ui/button/button.svelte';
|
|
8
7
|
import DotsVerticalIcon from '@tabler/icons-svelte/icons/dots-vertical';
|
|
9
|
-
import {
|
|
8
|
+
import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
|
|
10
9
|
import type { InterfaceLanguage } from '../../../types/languages.js';
|
|
10
|
+
import HistoryIcon from '@tabler/icons-svelte/icons/history';
|
|
11
|
+
import { goto } from '$app/navigation';
|
|
12
|
+
import { getPreviewStatus } from '../../state/preview-svelte.js';
|
|
13
|
+
import Check from '@tabler/icons-svelte/icons/check';
|
|
14
|
+
import Visibility from './header/visibility.svelte';
|
|
15
|
+
import ChevronRight from '@tabler/icons-svelte/icons/chevron-right';
|
|
16
|
+
import X from '@tabler/icons-svelte/icons/x';
|
|
17
|
+
import type { UpdateEntryVersionCommandType } from '../../../core/server/entries/operations/update.js';
|
|
18
|
+
import ChevronDown from '@tabler/icons-svelte/icons/chevron-down';
|
|
11
19
|
|
|
12
|
-
const remotes = getRemotes();
|
|
13
20
|
const contentLanguage = getContentLanguage();
|
|
14
|
-
const interfaceLanguage =
|
|
21
|
+
const interfaceLanguage = useInterfaceLanguage();
|
|
22
|
+
const previewStatus = getPreviewStatus();
|
|
15
23
|
|
|
16
24
|
const lang: Record<
|
|
17
25
|
InterfaceLanguage,
|
|
18
26
|
{
|
|
27
|
+
visibility: string;
|
|
19
28
|
publish: string;
|
|
20
29
|
unpublish: string;
|
|
21
|
-
status: Record<
|
|
22
|
-
|
|
23
|
-
|
|
30
|
+
status: Record<EntryStatus, string>;
|
|
31
|
+
publishDate: string;
|
|
32
|
+
planPublish: string;
|
|
24
33
|
save: string;
|
|
25
|
-
|
|
34
|
+
publishNow: string;
|
|
35
|
+
cancelPublish: string;
|
|
36
|
+
saveAndPublish: string;
|
|
37
|
+
saveDraft: string;
|
|
38
|
+
archive: string;
|
|
39
|
+
togglePreview: string;
|
|
40
|
+
versions: string;
|
|
26
41
|
}
|
|
27
42
|
> = {
|
|
28
43
|
en: {
|
|
44
|
+
visibility: 'Visibility',
|
|
29
45
|
publish: 'Publish',
|
|
46
|
+
planPublish: 'Schedule Publish',
|
|
30
47
|
unpublish: 'Unpublish',
|
|
31
48
|
status: {
|
|
32
49
|
draft: 'Draft',
|
|
33
50
|
published: 'Published',
|
|
34
51
|
archived: 'Archived'
|
|
35
52
|
},
|
|
36
|
-
|
|
37
|
-
created: 'Created',
|
|
53
|
+
publishDate: 'Publish Date',
|
|
38
54
|
save: 'Save',
|
|
39
|
-
|
|
55
|
+
publishNow: 'Publish Now',
|
|
56
|
+
cancelPublish: 'Cancel Publish',
|
|
57
|
+
saveAndPublish: 'Save and Publish',
|
|
58
|
+
saveDraft: 'Save Draft',
|
|
59
|
+
archive: 'Archive',
|
|
60
|
+
togglePreview: 'Live Preview',
|
|
61
|
+
versions: 'Versions'
|
|
40
62
|
},
|
|
41
63
|
pl: {
|
|
42
|
-
|
|
43
|
-
|
|
64
|
+
planPublish: 'Zaplanuj publikację',
|
|
65
|
+
visibility: 'Widoczność',
|
|
66
|
+
publish: 'Publikuj',
|
|
67
|
+
unpublish: 'Ukryj',
|
|
44
68
|
status: {
|
|
45
|
-
draft: '
|
|
46
|
-
published: '
|
|
69
|
+
draft: 'Ukryty',
|
|
70
|
+
published: 'Publiczny',
|
|
47
71
|
archived: 'Zarchiwizowany'
|
|
48
72
|
},
|
|
49
|
-
|
|
50
|
-
created: 'Utworzony',
|
|
73
|
+
publishDate: 'Data publikacji',
|
|
51
74
|
save: 'Zapisz',
|
|
52
|
-
|
|
75
|
+
publishNow: 'Opublikuj teraz',
|
|
76
|
+
cancelPublish: 'Cofnij publikację',
|
|
77
|
+
saveAndPublish: 'Zapisz i opublikuj',
|
|
78
|
+
saveDraft: 'Zapisz szkic',
|
|
79
|
+
archive: 'Zarchiwizuj',
|
|
80
|
+
togglePreview: 'Podgląd zmian na żywo',
|
|
81
|
+
versions: 'Wersje'
|
|
53
82
|
}
|
|
54
83
|
};
|
|
55
84
|
|
|
56
85
|
type Props = {
|
|
57
|
-
entry:
|
|
58
|
-
|
|
59
|
-
|
|
86
|
+
entry: RawEntry;
|
|
87
|
+
version: DbEntryVersion;
|
|
88
|
+
onSave: (type: UpdateEntryVersionCommandType) => void;
|
|
89
|
+
onArchive: () => void;
|
|
60
90
|
};
|
|
61
91
|
|
|
62
|
-
let { entry, onSave,
|
|
92
|
+
let { entry, onSave, onArchive, version }: Props = $props();
|
|
93
|
+
let { collection } = entry;
|
|
63
94
|
</script>
|
|
64
95
|
|
|
65
96
|
<div
|
|
66
97
|
class="bg-background sticky top-0 z-50 flex items-center justify-between gap-4 border-b px-4 py-3 md:px-6"
|
|
67
98
|
>
|
|
68
99
|
<div class="flex items-center gap-4">
|
|
69
|
-
<
|
|
70
|
-
<p class="text-sm whitespace-nowrap">
|
|
71
|
-
<span class="text-muted-foreground">Status:</span>
|
|
72
|
-
<span class="font-medium capitalize"
|
|
73
|
-
>{lang[interfaceLanguage.current].status[entry.status]}</span
|
|
74
|
-
> -
|
|
75
|
-
</p>
|
|
76
|
-
|
|
77
|
-
{#if entry.status === 'draft'}
|
|
78
|
-
<button
|
|
79
|
-
onclick={async () => {
|
|
80
|
-
entry.status = 'published';
|
|
81
|
-
const updatedEntry = await remotes.updateEntryCommand({
|
|
82
|
-
id: entry.id,
|
|
83
|
-
data: { status: 'published' }
|
|
84
|
-
});
|
|
85
|
-
entry = updatedEntry;
|
|
86
|
-
}}
|
|
87
|
-
type="button"
|
|
88
|
-
class="text-sm underline">{lang[interfaceLanguage.current].publish}</button
|
|
89
|
-
>
|
|
90
|
-
{:else}
|
|
91
|
-
<button
|
|
92
|
-
type="button"
|
|
93
|
-
class="text-sm underline"
|
|
94
|
-
onclick={async () => {
|
|
95
|
-
entry.status = 'draft';
|
|
96
|
-
const updatedEntry = await remotes.updateEntryCommand({
|
|
97
|
-
id: entry.id,
|
|
98
|
-
data: { status: 'draft' }
|
|
99
|
-
});
|
|
100
|
-
entry = updatedEntry;
|
|
101
|
-
}}>{lang[interfaceLanguage.current].unpublish}</button
|
|
102
|
-
>
|
|
103
|
-
{/if}
|
|
104
|
-
</div>
|
|
105
|
-
|
|
106
|
-
<p class="text-sm whitespace-nowrap">
|
|
107
|
-
<span class="text-muted-foreground">{lang[interfaceLanguage.current].modified}:</span>
|
|
108
|
-
{entry.updatedAt.toLocaleString('pl')}
|
|
109
|
-
</p>
|
|
110
|
-
<p class="text-sm whitespace-nowrap">
|
|
111
|
-
<span class="text-muted-foreground">{lang[interfaceLanguage.current].created}:</span>
|
|
112
|
-
{entry.createdAt.toLocaleString('pl')}
|
|
113
|
-
</p>
|
|
100
|
+
<Visibility {entry} />
|
|
114
101
|
</div>
|
|
115
102
|
|
|
116
103
|
<div class="flex items-center gap-2">
|
|
@@ -134,7 +121,73 @@
|
|
|
134
121
|
</ToggleGroup.Root>
|
|
135
122
|
{/if}
|
|
136
123
|
|
|
137
|
-
<Button type="
|
|
124
|
+
<Button size="sm" type="button" variant="ghost" onclick={() => onSave('draft')}
|
|
125
|
+
>{lang[interfaceLanguage.current].saveDraft}</Button
|
|
126
|
+
>
|
|
127
|
+
|
|
128
|
+
<DropdownMenu.Root>
|
|
129
|
+
<DropdownMenu.Trigger>
|
|
130
|
+
{#snippet child({ props })}
|
|
131
|
+
<Button {...props} size="sm" type="button">
|
|
132
|
+
{lang[interfaceLanguage.current].publish}
|
|
133
|
+
<ChevronDown />
|
|
134
|
+
</Button>
|
|
135
|
+
{/snippet}
|
|
136
|
+
</DropdownMenu.Trigger>
|
|
137
|
+
<DropdownMenu.Content align="end" class="[--radius:1rem]">
|
|
138
|
+
<DropdownMenu.Group>
|
|
139
|
+
<DropdownMenu.Item onclick={() => onSave('published-now')}>
|
|
140
|
+
{lang[interfaceLanguage.current].publishNow}
|
|
141
|
+
<DropdownMenu.Shortcut>
|
|
142
|
+
<ChevronRight />
|
|
143
|
+
</DropdownMenu.Shortcut>
|
|
144
|
+
</DropdownMenu.Item>
|
|
145
|
+
|
|
146
|
+
<!-- <DropdownMenu.Item>
|
|
147
|
+
{lang[interfaceLanguage.current].schedulePublish}
|
|
148
|
+
<ChevronDown />
|
|
149
|
+
</DropdownMenu.Item> -->
|
|
150
|
+
|
|
151
|
+
<DropdownMenu.Item onclick={() => onSave('cancel-published')}>
|
|
152
|
+
{lang[interfaceLanguage.current].cancelPublish}
|
|
153
|
+
<DropdownMenu.Shortcut>
|
|
154
|
+
<X />
|
|
155
|
+
</DropdownMenu.Shortcut>
|
|
156
|
+
</DropdownMenu.Item>
|
|
157
|
+
</DropdownMenu.Group>
|
|
158
|
+
</DropdownMenu.Content>
|
|
159
|
+
</DropdownMenu.Root>
|
|
160
|
+
|
|
161
|
+
<DropdownMenu.Root>
|
|
162
|
+
<DropdownMenu.Trigger class="data-[state=open]:bg-muted text-muted-foreground flex size-8">
|
|
163
|
+
{#snippet child({ props })}
|
|
164
|
+
<Button variant="outline" size="icon" {...props}>
|
|
165
|
+
<HistoryIcon />
|
|
166
|
+
<span class="sr-only">Open history menu</span>
|
|
167
|
+
</Button>
|
|
168
|
+
{/snippet}
|
|
169
|
+
</DropdownMenu.Trigger>
|
|
170
|
+
<DropdownMenu.Content align="end">
|
|
171
|
+
<DropdownMenu.Group>
|
|
172
|
+
<DropdownMenu.Label>{lang[interfaceLanguage.current].versions}</DropdownMenu.Label>
|
|
173
|
+
<DropdownMenu.Separator />
|
|
174
|
+
<DropdownMenu.RadioGroup value={version.id}>
|
|
175
|
+
{#each entry.versions.sort((a, b) => b.versionNumber - a.versionNumber) as ver}
|
|
176
|
+
<DropdownMenu.RadioItem
|
|
177
|
+
value={ver.id}
|
|
178
|
+
onclick={() => {
|
|
179
|
+
goto(`/admin/entries/${entry.id}?version=${ver.id}`);
|
|
180
|
+
}}
|
|
181
|
+
>({ver.versionNumber}) - {ver.createdAt.toLocaleString('pl')}
|
|
182
|
+
{#if ver.id === entry.publishedVersion?.id}
|
|
183
|
+
- {lang[interfaceLanguage.current].status.published}
|
|
184
|
+
{/if}
|
|
185
|
+
</DropdownMenu.RadioItem>
|
|
186
|
+
{/each}
|
|
187
|
+
</DropdownMenu.RadioGroup>
|
|
188
|
+
</DropdownMenu.Group>
|
|
189
|
+
</DropdownMenu.Content>
|
|
190
|
+
</DropdownMenu.Root>
|
|
138
191
|
|
|
139
192
|
<DropdownMenu.Root>
|
|
140
193
|
<DropdownMenu.Trigger class="data-[state=open]:bg-muted text-muted-foreground flex size-8">
|
|
@@ -145,9 +198,20 @@
|
|
|
145
198
|
</Button>
|
|
146
199
|
{/snippet}
|
|
147
200
|
</DropdownMenu.Trigger>
|
|
148
|
-
<DropdownMenu.Content align="end"
|
|
149
|
-
|
|
150
|
-
|
|
201
|
+
<DropdownMenu.Content align="end">
|
|
202
|
+
{#if collection.previewUrl}
|
|
203
|
+
<DropdownMenu.Item
|
|
204
|
+
onclick={() => {
|
|
205
|
+
previewStatus.current = previewStatus.current === 'on' ? 'off' : 'on';
|
|
206
|
+
}}
|
|
207
|
+
>{lang[interfaceLanguage.current].togglePreview}
|
|
208
|
+
{#if previewStatus.current === 'on'}
|
|
209
|
+
<Check />
|
|
210
|
+
{/if}
|
|
211
|
+
</DropdownMenu.Item>
|
|
212
|
+
{/if}
|
|
213
|
+
<DropdownMenu.Item variant="destructive" onclick={onArchive}
|
|
214
|
+
>{lang[interfaceLanguage.current].archive}</DropdownMenu.Item
|
|
151
215
|
>
|
|
152
216
|
</DropdownMenu.Content>
|
|
153
217
|
</DropdownMenu.Root>
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DbEntryVersion, RawEntry } from '../../../types/entries.js';
|
|
2
|
+
import type { UpdateEntryVersionCommandType } from '../../../core/server/entries/operations/update.js';
|
|
2
3
|
type Props = {
|
|
3
|
-
entry:
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
entry: RawEntry;
|
|
5
|
+
version: DbEntryVersion;
|
|
6
|
+
onSave: (type: UpdateEntryVersionCommandType) => void;
|
|
7
|
+
onArchive: () => void;
|
|
6
8
|
};
|
|
7
9
|
declare const EntryHeader: import("svelte").Component<Props, {}, "">;
|
|
8
10
|
type EntryHeader = ReturnType<typeof EntryHeader>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import Entry from './entry.svelte';
|
|
3
2
|
import { getRemotes } from '../../context/remotes.js';
|
|
3
|
+
import EntryVersion from './entry-version.svelte';
|
|
4
4
|
|
|
5
5
|
const remotes = getRemotes();
|
|
6
6
|
|
|
@@ -13,6 +13,6 @@
|
|
|
13
13
|
let { data }: Props = $props();
|
|
14
14
|
</script>
|
|
15
15
|
|
|
16
|
-
{#await remotes.
|
|
17
|
-
<
|
|
16
|
+
{#await remotes.getEntryForEntryPage(data.entryId) then entry}
|
|
17
|
+
<EntryVersion {entry} />
|
|
18
18
|
{/await}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { page } from '$app/state';
|
|
3
|
+
import type { RawEntry } from '../../../types/entries.js';
|
|
4
|
+
import Entry from './entry.svelte';
|
|
5
|
+
|
|
6
|
+
type Props = {
|
|
7
|
+
entry: RawEntry;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
let { entry }: Props = $props();
|
|
11
|
+
|
|
12
|
+
const version = $derived(page.url.searchParams.get('version') || '');
|
|
13
|
+
|
|
14
|
+
const editingEntry = $derived(
|
|
15
|
+
entry.versions.find((ver) => ver.id === version) || entry.versions[0]
|
|
16
|
+
);
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
{#key editingEntry.id}
|
|
20
|
+
<Entry {entry} {editingEntry} />
|
|
21
|
+
{/key}
|