@aphexcms/cms-core 8.1.0 → 9.1.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/api/api-keys.d.ts +8 -3
- package/dist/api/api-keys.d.ts.map +1 -1
- package/dist/api/schemas/assets.js +1 -1
- package/dist/api/schemas/documents.d.ts +0 -2
- package/dist/api/schemas/documents.d.ts.map +1 -1
- package/dist/api/schemas/documents.js +2 -8
- package/dist/api/schemas/instance.d.ts +6 -0
- package/dist/api/schemas/instance.d.ts.map +1 -0
- package/dist/api/schemas/instance.js +7 -0
- package/dist/api/schemas/user.js +1 -1
- package/dist/auth/auth-hooks.d.ts.map +1 -1
- package/dist/auth/auth-hooks.js +9 -3
- package/dist/cli/generate-types.d.ts.map +1 -1
- package/dist/cli/generate-types.js +198 -11
- package/dist/cli/generate-types.js.map +1 -1
- package/dist/components/AdminApp.svelte +55 -149
- package/dist/components/AdminApp.svelte.d.ts.map +1 -1
- package/dist/components/admin/DocumentEditor.svelte +282 -253
- package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
- package/dist/components/admin/DocumentVersionPanel.svelte +3 -2
- package/dist/components/admin/DocumentVersionPanel.svelte.d.ts.map +1 -1
- package/dist/components/admin/MediaBrowser.svelte +29 -11
- package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
- package/dist/components/admin/ObjectModal.svelte +62 -75
- package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -1
- package/dist/components/admin/SchemaField.svelte +2 -2
- package/dist/components/admin/fields/ArrayField.svelte +13 -3
- package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/FileField.svelte +1 -1
- package/dist/components/admin/fields/ImageField.svelte +1 -1
- package/dist/components/admin/fields/ReferenceField.svelte +42 -11
- package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/richtext/PortableTextImageView.svelte +116 -0
- package/dist/components/admin/fields/richtext/PortableTextImageView.svelte.d.ts +12 -0
- package/dist/components/admin/fields/richtext/PortableTextImageView.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/PortableTextInlineView.svelte +111 -0
- package/dist/components/admin/fields/richtext/PortableTextInlineView.svelte.d.ts +12 -0
- package/dist/components/admin/fields/richtext/PortableTextInlineView.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte +67 -0
- package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte.d.ts +12 -0
- package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/RichtextField.svelte +1296 -0
- package/dist/components/admin/fields/richtext/RichtextField.svelte.d.ts +15 -0
- package/dist/components/admin/fields/richtext/RichtextField.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/custom-annotation-mark.d.ts +7 -0
- package/dist/components/admin/fields/richtext/custom-annotation-mark.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/custom-annotation-mark.js +33 -0
- package/dist/components/admin/fields/richtext/portable-text-inline-object.d.ts +11 -0
- package/dist/components/admin/fields/richtext/portable-text-inline-object.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/portable-text-inline-object.js +31 -0
- package/dist/components/admin/fields/richtext/portable-text-object-node.d.ts +11 -0
- package/dist/components/admin/fields/richtext/portable-text-object-node.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/portable-text-object-node.js +31 -0
- package/dist/components/admin/fields/richtext/portable-text-serializer.d.ts +38 -0
- package/dist/components/admin/fields/richtext/portable-text-serializer.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/portable-text-serializer.js +297 -0
- package/dist/components/admin/fields/richtext/svelte-inline-node-view.d.ts +8 -0
- package/dist/components/admin/fields/richtext/svelte-inline-node-view.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/svelte-inline-node-view.js +67 -0
- package/dist/components/admin/fields/richtext/svelte-node-view.d.ts +8 -0
- package/dist/components/admin/fields/richtext/svelte-node-view.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/svelte-node-view.js +63 -0
- package/dist/components/layout/OrganizationSwitcher.svelte +1 -1
- package/dist/components/layout/sidebar/NavMain.svelte +9 -1
- package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -1
- package/dist/db/interfaces/asset.d.ts +2 -4
- package/dist/db/interfaces/asset.d.ts.map +1 -1
- package/dist/db/interfaces/document.d.ts +8 -2
- package/dist/db/interfaces/document.d.ts.map +1 -1
- package/dist/db/interfaces/organization.d.ts +1 -1
- package/dist/db/interfaces/organization.d.ts.map +1 -1
- package/dist/field-access.d.ts.map +1 -1
- package/dist/field-access.js +5 -1
- package/dist/graphql/depth-limit.d.ts +8 -0
- package/dist/graphql/depth-limit.d.ts.map +1 -0
- package/dist/graphql/depth-limit.js +79 -0
- package/dist/graphql/index.d.ts.map +1 -1
- package/dist/graphql/index.js +12 -1
- package/dist/graphql/resolvers.d.ts.map +1 -1
- package/dist/graphql/resolvers.js +22 -22
- package/dist/graphql/schema.d.ts.map +1 -1
- package/dist/graphql/schema.js +7 -3
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +5 -2
- package/dist/lib/api/api-keys.d.ts +8 -3
- package/dist/lib/api/api-keys.d.ts.map +1 -1
- package/dist/lib/api/api-keys.js.map +1 -1
- package/dist/lib/api/schemas/assets.js +1 -1
- package/dist/lib/api/schemas/assets.js.map +1 -1
- package/dist/lib/api/schemas/documents.d.ts +0 -2
- package/dist/lib/api/schemas/documents.d.ts.map +1 -1
- package/dist/lib/api/schemas/documents.js +2 -8
- package/dist/lib/api/schemas/documents.js.map +1 -1
- package/dist/lib/api/schemas/instance.d.ts +6 -0
- package/dist/lib/api/schemas/instance.d.ts.map +1 -0
- package/dist/lib/api/schemas/instance.js +8 -0
- package/dist/lib/api/schemas/instance.js.map +1 -0
- package/dist/lib/api/schemas/user.js +1 -1
- package/dist/lib/auth/auth-hooks.d.ts.map +1 -1
- package/dist/lib/auth/auth-hooks.js +9 -3
- package/dist/lib/auth/auth-hooks.js.map +1 -1
- package/dist/lib/components/admin/fields/richtext/custom-annotation-mark.d.ts +7 -0
- package/dist/lib/components/admin/fields/richtext/custom-annotation-mark.d.ts.map +1 -0
- package/dist/lib/components/admin/fields/richtext/custom-annotation-mark.js +34 -0
- package/dist/lib/components/admin/fields/richtext/custom-annotation-mark.js.map +1 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-inline-object.d.ts +11 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-inline-object.d.ts.map +1 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-inline-object.js +32 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-inline-object.js.map +1 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-object-node.d.ts +11 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-object-node.d.ts.map +1 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-object-node.js +32 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-object-node.js.map +1 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-serializer.d.ts +38 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-serializer.d.ts.map +1 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-serializer.js +298 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-serializer.js.map +1 -0
- package/dist/lib/components/admin/fields/richtext/svelte-inline-node-view.d.ts +8 -0
- package/dist/lib/components/admin/fields/richtext/svelte-inline-node-view.d.ts.map +1 -0
- package/dist/lib/components/admin/fields/richtext/svelte-inline-node-view.js +68 -0
- package/dist/lib/components/admin/fields/richtext/svelte-inline-node-view.js.map +1 -0
- package/dist/lib/components/admin/fields/richtext/svelte-node-view.d.ts +8 -0
- package/dist/lib/components/admin/fields/richtext/svelte-node-view.d.ts.map +1 -0
- package/dist/lib/components/admin/fields/richtext/svelte-node-view.js +64 -0
- package/dist/lib/components/admin/fields/richtext/svelte-node-view.js.map +1 -0
- package/dist/lib/db/interfaces/asset.d.ts +2 -4
- package/dist/lib/db/interfaces/asset.d.ts.map +1 -1
- package/dist/lib/db/interfaces/document.d.ts +8 -2
- package/dist/lib/db/interfaces/document.d.ts.map +1 -1
- package/dist/lib/db/interfaces/organization.d.ts +1 -1
- package/dist/lib/db/interfaces/organization.d.ts.map +1 -1
- package/dist/lib/field-access.d.ts.map +1 -1
- package/dist/lib/field-access.js +5 -1
- package/dist/lib/field-access.js.map +1 -1
- package/dist/lib/graphql/depth-limit.d.ts +8 -0
- package/dist/lib/graphql/depth-limit.d.ts.map +1 -0
- package/dist/lib/graphql/depth-limit.js +80 -0
- package/dist/lib/graphql/depth-limit.js.map +1 -0
- package/dist/lib/graphql/index.d.ts.map +1 -1
- package/dist/lib/graphql/index.js +12 -1
- package/dist/lib/graphql/index.js.map +1 -1
- package/dist/lib/graphql/resolvers.d.ts.map +1 -1
- package/dist/lib/graphql/resolvers.js +22 -22
- package/dist/lib/graphql/resolvers.js.map +1 -1
- package/dist/lib/graphql/schema.d.ts.map +1 -1
- package/dist/lib/graphql/schema.js +7 -3
- package/dist/lib/graphql/schema.js.map +1 -1
- package/dist/lib/hooks.d.ts +2 -0
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +5 -2
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/local-api/collection-api.d.ts.map +1 -1
- package/dist/lib/local-api/collection-api.js +14 -9
- package/dist/lib/local-api/collection-api.js.map +1 -1
- package/dist/lib/local-api/index.d.ts +5 -1
- package/dist/lib/local-api/index.d.ts.map +1 -1
- package/dist/lib/local-api/index.js +12 -4
- package/dist/lib/local-api/index.js.map +1 -1
- package/dist/lib/routes/assets-cdn.d.ts.map +1 -1
- package/dist/lib/routes/assets-cdn.js +8 -3
- package/dist/lib/routes/assets-cdn.js.map +1 -1
- package/dist/lib/schema-utils/validator.d.ts.map +1 -1
- package/dist/lib/schema-utils/validator.js +5 -1
- package/dist/lib/schema-utils/validator.js.map +1 -1
- package/dist/lib/server/api/index.d.ts.map +1 -1
- package/dist/lib/server/api/index.js +18 -0
- package/dist/lib/server/api/index.js.map +1 -1
- package/dist/lib/server/api/routes/assets-bulk.d.ts.map +1 -1
- package/dist/lib/server/api/routes/assets-bulk.js +4 -0
- package/dist/lib/server/api/routes/assets-bulk.js.map +1 -1
- package/dist/lib/server/api/routes/assets-by-id.d.ts.map +1 -1
- package/dist/lib/server/api/routes/assets-by-id.js +17 -2
- package/dist/lib/server/api/routes/assets-by-id.js.map +1 -1
- package/dist/lib/server/api/routes/assets-references.d.ts.map +1 -1
- package/dist/lib/server/api/routes/assets-references.js +6 -4
- package/dist/lib/server/api/routes/assets-references.js.map +1 -1
- package/dist/lib/server/api/routes/assets.d.ts.map +1 -1
- package/dist/lib/server/api/routes/assets.js +18 -9
- package/dist/lib/server/api/routes/assets.js.map +1 -1
- package/dist/lib/server/api/routes/document-versions.d.ts.map +1 -1
- package/dist/lib/server/api/routes/document-versions.js +8 -0
- package/dist/lib/server/api/routes/document-versions.js.map +1 -1
- package/dist/lib/server/api/routes/documents-by-id.d.ts.map +1 -1
- package/dist/lib/server/api/routes/documents-by-id.js +3 -3
- package/dist/lib/server/api/routes/documents-by-id.js.map +1 -1
- package/dist/lib/server/api/routes/documents-publish.d.ts.map +1 -1
- package/dist/lib/server/api/routes/documents-publish.js +2 -2
- package/dist/lib/server/api/routes/documents-publish.js.map +1 -1
- package/dist/lib/server/api/routes/documents-query.d.ts.map +1 -1
- package/dist/lib/server/api/routes/documents-query.js +2 -3
- package/dist/lib/server/api/routes/documents-query.js.map +1 -1
- package/dist/lib/server/api/routes/documents.d.ts.map +1 -1
- package/dist/lib/server/api/routes/documents.js +3 -5
- package/dist/lib/server/api/routes/documents.js.map +1 -1
- package/dist/lib/server/api/routes/organizations-invitations.d.ts.map +1 -1
- package/dist/lib/server/api/routes/organizations-invitations.js +1 -1
- package/dist/lib/server/api/routes/organizations-invitations.js.map +1 -1
- package/dist/lib/server/api/routes/organizations-members.d.ts.map +1 -1
- package/dist/lib/server/api/routes/organizations-members.js.map +1 -1
- package/dist/lib/server/index.d.ts +1 -0
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +2 -0
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/services/asset-service.d.ts.map +1 -1
- package/dist/lib/services/asset-service.js +4 -2
- package/dist/lib/services/asset-service.js.map +1 -1
- package/dist/lib/services/references-service.d.ts.map +1 -1
- package/dist/lib/services/references-service.js.map +1 -1
- package/dist/lib/storage/adapters/local-storage-adapter.d.ts +4 -0
- package/dist/lib/storage/adapters/local-storage-adapter.d.ts.map +1 -1
- package/dist/lib/storage/adapters/local-storage-adapter.js +28 -6
- package/dist/lib/storage/adapters/local-storage-adapter.js.map +1 -1
- package/dist/lib/types/capabilities.d.ts +1 -0
- package/dist/lib/types/capabilities.d.ts.map +1 -1
- package/dist/lib/types/capabilities.js +3 -0
- package/dist/lib/types/capabilities.js.map +1 -1
- package/dist/lib/types/config.d.ts +16 -1
- package/dist/lib/types/config.d.ts.map +1 -1
- package/dist/lib/types/schemas.d.ts +27 -0
- package/dist/lib/types/schemas.d.ts.map +1 -1
- package/dist/lib/types/schemas.js +3 -1
- package/dist/lib/types/schemas.js.map +1 -1
- package/dist/lib/utils/logger.d.ts +8 -6
- package/dist/lib/utils/logger.d.ts.map +1 -1
- package/dist/lib/utils/logger.js +11 -2
- package/dist/lib/utils/logger.js.map +1 -1
- package/dist/lib/utils/mime-detect.d.ts.map +1 -1
- package/dist/lib/utils/mime-detect.js +21 -6
- package/dist/lib/utils/mime-detect.js.map +1 -1
- package/dist/lib/vite/index.d.ts.map +1 -1
- package/dist/lib/vite/index.js +4 -5
- package/dist/lib/vite/index.js.map +1 -1
- package/dist/local-api/collection-api.d.ts.map +1 -1
- package/dist/local-api/collection-api.js +14 -9
- package/dist/local-api/index.d.ts +5 -1
- package/dist/local-api/index.d.ts.map +1 -1
- package/dist/local-api/index.js +12 -4
- package/dist/routes/assets-cdn.d.ts.map +1 -1
- package/dist/routes/assets-cdn.js +8 -3
- package/dist/schema-utils/validator.d.ts.map +1 -1
- package/dist/schema-utils/validator.js +5 -1
- package/dist/server/api/index.d.ts.map +1 -1
- package/dist/server/api/index.js +18 -0
- package/dist/server/api/routes/assets-bulk.d.ts.map +1 -1
- package/dist/server/api/routes/assets-bulk.js +4 -0
- package/dist/server/api/routes/assets-by-id.d.ts.map +1 -1
- package/dist/server/api/routes/assets-by-id.js +17 -2
- package/dist/server/api/routes/assets-references.d.ts.map +1 -1
- package/dist/server/api/routes/assets-references.js +6 -4
- package/dist/server/api/routes/assets.d.ts.map +1 -1
- package/dist/server/api/routes/assets.js +18 -9
- package/dist/server/api/routes/document-versions.d.ts.map +1 -1
- package/dist/server/api/routes/document-versions.js +8 -0
- package/dist/server/api/routes/documents-by-id.d.ts.map +1 -1
- package/dist/server/api/routes/documents-by-id.js +3 -3
- package/dist/server/api/routes/documents-publish.d.ts.map +1 -1
- package/dist/server/api/routes/documents-publish.js +2 -2
- package/dist/server/api/routes/documents-query.d.ts.map +1 -1
- package/dist/server/api/routes/documents-query.js +2 -3
- package/dist/server/api/routes/documents.d.ts.map +1 -1
- package/dist/server/api/routes/documents.js +3 -5
- package/dist/server/api/routes/organizations-invitations.d.ts.map +1 -1
- package/dist/server/api/routes/organizations-invitations.js +1 -1
- package/dist/server/api/routes/organizations-members.d.ts.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/services/asset-service.d.ts.map +1 -1
- package/dist/services/asset-service.js +4 -2
- package/dist/services/references-service.d.ts.map +1 -1
- package/dist/storage/adapters/local-storage-adapter.d.ts +4 -0
- package/dist/storage/adapters/local-storage-adapter.d.ts.map +1 -1
- package/dist/storage/adapters/local-storage-adapter.js +28 -6
- package/dist/types/capabilities.d.ts +1 -0
- package/dist/types/capabilities.d.ts.map +1 -1
- package/dist/types/capabilities.js +3 -0
- package/dist/types/config.d.ts +16 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/schemas.d.ts +27 -0
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/schemas.js +3 -1
- package/dist/utils/logger.d.ts +8 -6
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +11 -2
- package/dist/utils/mime-detect.d.ts.map +1 -1
- package/dist/utils/mime-detect.js +21 -6
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +4 -5
- package/package.json +9 -5
|
@@ -68,6 +68,7 @@
|
|
|
68
68
|
}: Props = $props();
|
|
69
69
|
|
|
70
70
|
// Set schema context for child components (ArrayField, etc.)
|
|
71
|
+
// svelte-ignore state_referenced_locally
|
|
71
72
|
setSchemaContext(schemas);
|
|
72
73
|
|
|
73
74
|
// Read permissions from the AdminApp context for per-action gating.
|
|
@@ -181,6 +182,7 @@
|
|
|
181
182
|
return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
182
183
|
}
|
|
183
184
|
let inspectTab = $state<'parsed' | 'raw'>('parsed');
|
|
185
|
+
let inspectPerspective = $state<'draft' | 'published'>('draft');
|
|
184
186
|
|
|
185
187
|
// Header options dropdown
|
|
186
188
|
let showHeaderMenu = $state(false);
|
|
@@ -476,7 +478,7 @@
|
|
|
476
478
|
if (typeof field.initialValue === 'function') {
|
|
477
479
|
try {
|
|
478
480
|
initialData[field.name] = await field.initialValue();
|
|
479
|
-
} catch
|
|
481
|
+
} catch {
|
|
480
482
|
toast.error(`Failed to resolve initial value for "${field.name}"`);
|
|
481
483
|
// Fall back to default value for the field type
|
|
482
484
|
initialData[field.name] = getDefaultValueForFieldType(field.type);
|
|
@@ -516,7 +518,7 @@
|
|
|
516
518
|
function hasChangesFromSaved(): boolean {
|
|
517
519
|
const baseline = fullDocument
|
|
518
520
|
? (() => {
|
|
519
|
-
const { id, _meta, ...savedData } = fullDocument;
|
|
521
|
+
const { id: _id, _meta, ...savedData } = fullDocument;
|
|
520
522
|
return savedData;
|
|
521
523
|
})()
|
|
522
524
|
: initialDocumentData;
|
|
@@ -734,9 +736,7 @@
|
|
|
734
736
|
}
|
|
735
737
|
const fetchedById = new Map(fetched.map((d) => [d.id, d]));
|
|
736
738
|
const checks = refIds.map((id) => ({ id, doc: fetchedById.get(id) ?? null }));
|
|
737
|
-
const blockers = checks.filter(
|
|
738
|
-
(c) => !c.doc || (c.doc as any)._meta?.status !== 'published'
|
|
739
|
-
);
|
|
739
|
+
const blockers = checks.filter((c) => !c.doc || (c.doc as any)._meta?.status !== 'published');
|
|
740
740
|
if (blockers.length > 0) {
|
|
741
741
|
const titles = blockers
|
|
742
742
|
.slice(0, 3)
|
|
@@ -921,7 +921,7 @@
|
|
|
921
921
|
messages
|
|
922
922
|
);
|
|
923
923
|
}
|
|
924
|
-
} catch
|
|
924
|
+
} catch {
|
|
925
925
|
invalid.push({
|
|
926
926
|
name: field.name,
|
|
927
927
|
title: field.title ?? field.name,
|
|
@@ -1029,7 +1029,7 @@
|
|
|
1029
1029
|
<div class="relative flex h-full w-full min-w-0 flex-col overflow-hidden">
|
|
1030
1030
|
<!-- Hero Header -->
|
|
1031
1031
|
<div class="bg-background w-full min-w-0 overflow-x-clip px-4 pt-4 pb-5 lg:px-6 lg:pt-5">
|
|
1032
|
-
<div class="
|
|
1032
|
+
<div class="w-full">
|
|
1033
1033
|
<!-- Top row: breadcrumb + actions -->
|
|
1034
1034
|
<div class="mb-4 flex items-center justify-between gap-3">
|
|
1035
1035
|
<div
|
|
@@ -1123,7 +1123,7 @@
|
|
|
1123
1123
|
</Button>
|
|
1124
1124
|
{#if showHeaderMenu}
|
|
1125
1125
|
<div
|
|
1126
|
-
class="bg-background border-rule absolute top-full right-0 z-
|
|
1126
|
+
class="bg-background border-rule absolute top-full right-0 z-[60] mt-1 min-w-[160px] rounded-md border py-1 shadow-lg"
|
|
1127
1127
|
>
|
|
1128
1128
|
<button
|
|
1129
1129
|
onclick={() => {
|
|
@@ -1148,7 +1148,9 @@
|
|
|
1148
1148
|
<Code class="h-3.5 w-3.5" /> Inspect
|
|
1149
1149
|
</button>
|
|
1150
1150
|
</div>
|
|
1151
|
-
|
|
1151
|
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
1152
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
1153
|
+
<div class="fixed inset-0 z-[55]" onclick={() => (showHeaderMenu = false)}></div>
|
|
1152
1154
|
{/if}
|
|
1153
1155
|
</div>
|
|
1154
1156
|
{/if}
|
|
@@ -1233,181 +1235,184 @@
|
|
|
1233
1235
|
</div>
|
|
1234
1236
|
|
|
1235
1237
|
<!-- Content Form -->
|
|
1236
|
-
<div class="flex
|
|
1237
|
-
<div class="
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
<
|
|
1241
|
-
|
|
1242
|
-
|
|
1238
|
+
<div data-document-editor class="relative flex min-h-0 flex-1 flex-col">
|
|
1239
|
+
<div class="flex flex-1 flex-col overflow-auto p-4 lg:p-6">
|
|
1240
|
+
<div class="flex w-full flex-1 flex-col gap-4 lg:gap-6">
|
|
1241
|
+
{#if saveError}
|
|
1242
|
+
<div class="bg-destructive/10 border-destructive/20 rounded-md border p-3">
|
|
1243
|
+
<p class="text-destructive text-sm">{saveError}</p>
|
|
1244
|
+
</div>
|
|
1245
|
+
{/if}
|
|
1243
1246
|
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1247
|
+
{#if schemaError}
|
|
1248
|
+
<div class="bg-destructive/10 border-destructive/20 rounded-md border p-3">
|
|
1249
|
+
<p class="text-destructive text-sm">Schema Error: {schemaError}</p>
|
|
1250
|
+
</div>
|
|
1251
|
+
{:else if schemaLoading}
|
|
1252
|
+
<div class="p-6 text-center">
|
|
1253
|
+
<div class="text-muted-foreground text-sm">Loading schema...</div>
|
|
1254
|
+
</div>
|
|
1255
|
+
{:else if schema}
|
|
1256
|
+
<!-- Orphaned Fields Warning -->
|
|
1257
|
+
{#if showOrphanedFields && orphanedFields.length > 0}
|
|
1258
|
+
<div class="space-y-3 rounded-md border border-orange-200 bg-orange-50 p-4">
|
|
1259
|
+
<div class="flex items-center gap-2">
|
|
1260
|
+
<svg
|
|
1261
|
+
class="h-5 w-5 text-orange-600"
|
|
1262
|
+
fill="none"
|
|
1263
|
+
viewBox="0 0 24 24"
|
|
1264
|
+
stroke="currentColor"
|
|
1265
|
+
>
|
|
1266
|
+
<path
|
|
1267
|
+
stroke-linecap="round"
|
|
1268
|
+
stroke-linejoin="round"
|
|
1269
|
+
stroke-width="2"
|
|
1270
|
+
d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L5.081 16.5c-.77.833.192 2.5 1.732 2.5z"
|
|
1271
|
+
/>
|
|
1272
|
+
</svg>
|
|
1273
|
+
<h4 class="text-sm font-medium text-orange-800">
|
|
1274
|
+
{orphanedFields.length} orphaned field{orphanedFields.length === 1 ? '' : 's'} detected
|
|
1275
|
+
</h4>
|
|
1276
|
+
</div>
|
|
1274
1277
|
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
+
<p class="text-sm text-orange-700">
|
|
1279
|
+
These fields exist in your document but are no longer defined in the schema:
|
|
1280
|
+
</p>
|
|
1278
1281
|
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1282
|
+
<div class="space-y-2">
|
|
1283
|
+
{#each orphanedFields as field, index (index)}
|
|
1284
|
+
<div
|
|
1285
|
+
class="flex items-center justify-between rounded border border-orange-200 bg-white p-3"
|
|
1286
|
+
>
|
|
1287
|
+
<div class="flex-1">
|
|
1288
|
+
<div class="font-mono text-sm font-medium text-orange-800">
|
|
1289
|
+
{field.path || field.key}
|
|
1290
|
+
</div>
|
|
1291
|
+
<div class="mt-1 text-xs text-orange-600">
|
|
1292
|
+
<code class="rounded bg-orange-100 px-1">{JSON.stringify(field.value)}</code
|
|
1293
|
+
>
|
|
1294
|
+
</div>
|
|
1290
1295
|
</div>
|
|
1296
|
+
<Button
|
|
1297
|
+
size="sm"
|
|
1298
|
+
variant="outline"
|
|
1299
|
+
onclick={() => removeOrphanedField(field)}
|
|
1300
|
+
class="ml-3 h-8 border-red-200 px-3 text-red-600 hover:border-red-300 hover:bg-red-50"
|
|
1301
|
+
>
|
|
1302
|
+
Remove
|
|
1303
|
+
</Button>
|
|
1291
1304
|
</div>
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
variant="outline"
|
|
1295
|
-
onclick={() => removeOrphanedField(field)}
|
|
1296
|
-
class="ml-3 h-8 border-red-200 px-3 text-red-600 hover:border-red-300 hover:bg-red-50"
|
|
1297
|
-
>
|
|
1298
|
-
Remove
|
|
1299
|
-
</Button>
|
|
1300
|
-
</div>
|
|
1301
|
-
{/each}
|
|
1302
|
-
</div>
|
|
1305
|
+
{/each}
|
|
1306
|
+
</div>
|
|
1303
1307
|
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1308
|
+
<div class="flex gap-2 border-t border-orange-200 pt-2">
|
|
1309
|
+
<Button
|
|
1310
|
+
size="sm"
|
|
1311
|
+
variant="outline"
|
|
1312
|
+
onclick={cleanupAllOrphanedFields}
|
|
1313
|
+
class="border-orange-600 bg-orange-600 text-white hover:bg-orange-700"
|
|
1314
|
+
>
|
|
1315
|
+
Remove All
|
|
1316
|
+
</Button>
|
|
1317
|
+
<Button
|
|
1318
|
+
size="sm"
|
|
1319
|
+
variant="ghost"
|
|
1320
|
+
onclick={dismissOrphanedFields}
|
|
1321
|
+
class="text-orange-700 hover:text-orange-800"
|
|
1322
|
+
>
|
|
1323
|
+
Dismiss
|
|
1324
|
+
</Button>
|
|
1325
|
+
</div>
|
|
1321
1326
|
</div>
|
|
1322
|
-
|
|
1323
|
-
{/if}
|
|
1327
|
+
{/if}
|
|
1324
1328
|
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
<button
|
|
1330
|
-
type="button"
|
|
1331
|
-
onclick={() => (activeGroup = 'all')}
|
|
1332
|
-
class="cursor-pointer rounded-md px-3 py-1.5 text-sm font-medium whitespace-nowrap transition-colors {activeGroup ===
|
|
1333
|
-
'all'
|
|
1334
|
-
? 'bg-muted text-foreground'
|
|
1335
|
-
: 'text-muted-foreground hover:text-foreground'}"
|
|
1336
|
-
>
|
|
1337
|
-
All fields
|
|
1338
|
-
</button>
|
|
1339
|
-
{#each visibleGroups as group (group.name)}
|
|
1329
|
+
<!-- Field Group Tabs -->
|
|
1330
|
+
{#if schema.groups && schema.groups.length > 0}
|
|
1331
|
+
{@const visibleGroups = schema.groups.filter((g) => !g.hidden)}
|
|
1332
|
+
<div class="mb-4 flex items-center gap-1 overflow-x-auto py-1">
|
|
1340
1333
|
<button
|
|
1341
1334
|
type="button"
|
|
1342
|
-
onclick={() => (activeGroup =
|
|
1343
|
-
class="
|
|
1344
|
-
|
|
1335
|
+
onclick={() => (activeGroup = 'all')}
|
|
1336
|
+
class="cursor-pointer rounded-md px-3 py-1.5 text-sm font-medium whitespace-nowrap transition-colors {activeGroup ===
|
|
1337
|
+
'all'
|
|
1345
1338
|
? 'bg-muted text-foreground'
|
|
1346
1339
|
: 'text-muted-foreground hover:text-foreground'}"
|
|
1347
1340
|
>
|
|
1348
|
-
|
|
1349
|
-
{@const Icon = group.icon}
|
|
1350
|
-
<Icon class="h-4 w-4" />
|
|
1351
|
-
{/if}
|
|
1352
|
-
{group.title}
|
|
1341
|
+
All fields
|
|
1353
1342
|
</button>
|
|
1343
|
+
{#each visibleGroups as group (group.name)}
|
|
1344
|
+
<button
|
|
1345
|
+
type="button"
|
|
1346
|
+
onclick={() => (activeGroup = group.name)}
|
|
1347
|
+
class="flex cursor-pointer items-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium whitespace-nowrap transition-colors {activeGroup ===
|
|
1348
|
+
group.name
|
|
1349
|
+
? 'bg-muted text-foreground'
|
|
1350
|
+
: 'text-muted-foreground hover:text-foreground'}"
|
|
1351
|
+
>
|
|
1352
|
+
{#if group.icon}
|
|
1353
|
+
{@const Icon = group.icon}
|
|
1354
|
+
<Icon class="h-4 w-4" />
|
|
1355
|
+
{/if}
|
|
1356
|
+
{group.title}
|
|
1357
|
+
</button>
|
|
1358
|
+
{/each}
|
|
1359
|
+
</div>
|
|
1360
|
+
{/if}
|
|
1361
|
+
|
|
1362
|
+
<!-- Dynamic Schema Fields -->
|
|
1363
|
+
<svelte:boundary
|
|
1364
|
+
onerror={(error) =>
|
|
1365
|
+
cmsLogger.error('[DocumentEditor]', 'Error in editor content:', error)}
|
|
1366
|
+
>
|
|
1367
|
+
{#each schema.fields.filter((f) => fieldInGroup(f, activeGroup) && !hiddenFieldNames.has(f.name)) as field (field.name)}
|
|
1368
|
+
{@const viewData =
|
|
1369
|
+
isPreviewingVersion && activePreview
|
|
1370
|
+
? activePreview.data
|
|
1371
|
+
: isViewingPublished && publishedData
|
|
1372
|
+
? publishedData
|
|
1373
|
+
: documentData}
|
|
1374
|
+
<SchemaField
|
|
1375
|
+
{field}
|
|
1376
|
+
value={viewData[field.name]}
|
|
1377
|
+
documentData={viewData}
|
|
1378
|
+
onUpdate={(newValue) => {
|
|
1379
|
+
if (isViewingPublished) return;
|
|
1380
|
+
documentData = { ...documentData, [field.name]: newValue };
|
|
1381
|
+
hasUnsavedChanges = true;
|
|
1382
|
+
}}
|
|
1383
|
+
{onOpenReference}
|
|
1384
|
+
schemaType={documentType}
|
|
1385
|
+
readonly={isReadOnly ||
|
|
1386
|
+
isViewingPublished ||
|
|
1387
|
+
isPreviewingVersion ||
|
|
1388
|
+
isFieldReadonly(field.name)}
|
|
1389
|
+
organizationId={fullDocument?._meta?.organizationId}
|
|
1390
|
+
/>
|
|
1354
1391
|
{/each}
|
|
1392
|
+
|
|
1393
|
+
{#snippet failed(error, reset)}
|
|
1394
|
+
<div class="border-destructive/30 bg-destructive/5 rounded-md border p-4 text-center">
|
|
1395
|
+
<p class="text-destructive font-medium">Document editor encountered an error</p>
|
|
1396
|
+
<p class="text-muted-foreground mt-1 text-sm">
|
|
1397
|
+
{error instanceof Error ? error.message : 'Unknown error'}
|
|
1398
|
+
</p>
|
|
1399
|
+
<button
|
|
1400
|
+
class="bg-primary text-primary-foreground mt-3 rounded px-4 py-2 text-sm"
|
|
1401
|
+
onclick={reset}
|
|
1402
|
+
>
|
|
1403
|
+
Reload editor
|
|
1404
|
+
</button>
|
|
1405
|
+
</div>
|
|
1406
|
+
{/snippet}
|
|
1407
|
+
</svelte:boundary>
|
|
1408
|
+
{:else}
|
|
1409
|
+
<div class="border-muted-foreground/30 rounded-md border border-dashed p-4">
|
|
1410
|
+
<p class="text-muted-foreground text-center text-sm">
|
|
1411
|
+
No schema found for document type: {documentType}
|
|
1412
|
+
</p>
|
|
1355
1413
|
</div>
|
|
1356
1414
|
{/if}
|
|
1357
|
-
|
|
1358
|
-
<!-- Dynamic Schema Fields -->
|
|
1359
|
-
<svelte:boundary
|
|
1360
|
-
onerror={(error) =>
|
|
1361
|
-
cmsLogger.error('[DocumentEditor]', 'Error in editor content:', error)}
|
|
1362
|
-
>
|
|
1363
|
-
{#each schema.fields.filter((f) => fieldInGroup(f, activeGroup) && !hiddenFieldNames.has(f.name)) as field (field.name)}
|
|
1364
|
-
{@const viewData =
|
|
1365
|
-
isPreviewingVersion && activePreview
|
|
1366
|
-
? activePreview.data
|
|
1367
|
-
: isViewingPublished && publishedData
|
|
1368
|
-
? publishedData
|
|
1369
|
-
: documentData}
|
|
1370
|
-
<SchemaField
|
|
1371
|
-
{field}
|
|
1372
|
-
value={viewData[field.name]}
|
|
1373
|
-
documentData={viewData}
|
|
1374
|
-
onUpdate={(newValue) => {
|
|
1375
|
-
if (isViewingPublished) return;
|
|
1376
|
-
documentData = { ...documentData, [field.name]: newValue };
|
|
1377
|
-
hasUnsavedChanges = true;
|
|
1378
|
-
}}
|
|
1379
|
-
{onOpenReference}
|
|
1380
|
-
schemaType={documentType}
|
|
1381
|
-
readonly={isReadOnly ||
|
|
1382
|
-
isViewingPublished ||
|
|
1383
|
-
isPreviewingVersion ||
|
|
1384
|
-
isFieldReadonly(field.name)}
|
|
1385
|
-
organizationId={fullDocument?._meta?.organizationId}
|
|
1386
|
-
/>
|
|
1387
|
-
{/each}
|
|
1388
|
-
|
|
1389
|
-
{#snippet failed(error, reset)}
|
|
1390
|
-
<div class="border-destructive/30 bg-destructive/5 rounded-md border p-4 text-center">
|
|
1391
|
-
<p class="text-destructive font-medium">Document editor encountered an error</p>
|
|
1392
|
-
<p class="text-muted-foreground mt-1 text-sm">
|
|
1393
|
-
{error instanceof Error ? error.message : 'Unknown error'}
|
|
1394
|
-
</p>
|
|
1395
|
-
<button
|
|
1396
|
-
class="bg-primary text-primary-foreground mt-3 rounded px-4 py-2 text-sm"
|
|
1397
|
-
onclick={reset}
|
|
1398
|
-
>
|
|
1399
|
-
Reload editor
|
|
1400
|
-
</button>
|
|
1401
|
-
</div>
|
|
1402
|
-
{/snippet}
|
|
1403
|
-
</svelte:boundary>
|
|
1404
|
-
{:else}
|
|
1405
|
-
<div class="border-muted-foreground/30 rounded-md border border-dashed p-4">
|
|
1406
|
-
<p class="text-muted-foreground text-center text-sm">
|
|
1407
|
-
No schema found for document type: {documentType}
|
|
1408
|
-
</p>
|
|
1409
|
-
</div>
|
|
1410
|
-
{/if}
|
|
1415
|
+
</div>
|
|
1411
1416
|
</div>
|
|
1412
1417
|
</div>
|
|
1413
1418
|
|
|
@@ -1549,6 +1554,7 @@
|
|
|
1549
1554
|
showVersionHistory = false;
|
|
1550
1555
|
previewingVersion = null;
|
|
1551
1556
|
}}
|
|
1557
|
+
aria-label="Close version history"
|
|
1552
1558
|
></button>
|
|
1553
1559
|
<!-- Panel -->
|
|
1554
1560
|
<div class="bg-background border-rule flex w-80 flex-col border-l shadow-lg">
|
|
@@ -1560,6 +1566,7 @@
|
|
|
1560
1566
|
showVersionHistory = false;
|
|
1561
1567
|
previewingVersion = null;
|
|
1562
1568
|
}}
|
|
1569
|
+
aria-label="Close version history"
|
|
1563
1570
|
>
|
|
1564
1571
|
<svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
1565
1572
|
<path
|
|
@@ -1583,50 +1590,50 @@
|
|
|
1583
1590
|
{:else if versionsList.length > 0}
|
|
1584
1591
|
<div class="divide-y">
|
|
1585
1592
|
{#each versionsList as version}
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
}
|
|
1601
|
-
} catch {
|
|
1602
|
-
toast.error('Failed to load version');
|
|
1593
|
+
<button
|
|
1594
|
+
class="hover:bg-muted w-full space-y-1 px-4 py-3 text-left transition-colors {previewingVersion?.versionNumber ===
|
|
1595
|
+
version.versionNumber
|
|
1596
|
+
? 'bg-muted border-l-primary border-l-2'
|
|
1597
|
+
: ''}"
|
|
1598
|
+
onclick={async () => {
|
|
1599
|
+
try {
|
|
1600
|
+
const res = await documents.getVersion(documentId, version.versionNumber);
|
|
1601
|
+
if (res.success && res.data) {
|
|
1602
|
+
previewingVersion = {
|
|
1603
|
+
versionNumber: version.versionNumber,
|
|
1604
|
+
data: res.data.data ?? {},
|
|
1605
|
+
eventType: version.eventType
|
|
1606
|
+
};
|
|
1603
1607
|
}
|
|
1604
|
-
}
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1608
|
+
} catch {
|
|
1609
|
+
toast.error('Failed to load version');
|
|
1610
|
+
}
|
|
1611
|
+
}}
|
|
1612
|
+
>
|
|
1613
|
+
<div class="flex items-center gap-2">
|
|
1614
|
+
<span class="text-xs font-medium">v{version.versionNumber}</span>
|
|
1615
|
+
<Badge
|
|
1616
|
+
variant={version.eventType === 'publish'
|
|
1617
|
+
? 'default'
|
|
1618
|
+
: version.eventType === 'restore'
|
|
1619
|
+
? 'outline'
|
|
1620
|
+
: 'secondary'}
|
|
1621
|
+
class="text-[10px]"
|
|
1622
|
+
>
|
|
1623
|
+
{version.eventType}
|
|
1624
|
+
</Badge>
|
|
1625
|
+
</div>
|
|
1626
|
+
<p class="text-muted-foreground text-[11px]">
|
|
1627
|
+
{version.createdAt ? new Date(version.createdAt).toLocaleString() : ''}
|
|
1628
|
+
</p>
|
|
1629
|
+
</button>
|
|
1630
|
+
{/each}
|
|
1631
|
+
</div>
|
|
1632
|
+
{:else}
|
|
1633
|
+
<div class="p-4 text-center">
|
|
1634
|
+
<span class="text-muted-foreground text-sm">No versions yet</span>
|
|
1635
|
+
</div>
|
|
1636
|
+
{/if}
|
|
1630
1637
|
</div>
|
|
1631
1638
|
</div>
|
|
1632
1639
|
</div>
|
|
@@ -1660,54 +1667,76 @@
|
|
|
1660
1667
|
</div>
|
|
1661
1668
|
|
|
1662
1669
|
<!-- Tabs -->
|
|
1663
|
-
<div class="flex border-b">
|
|
1664
|
-
<
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1670
|
+
<div class="flex items-center justify-between border-b">
|
|
1671
|
+
<div class="flex">
|
|
1672
|
+
<button
|
|
1673
|
+
class="px-4 py-2 text-sm font-medium transition-colors {inspectTab === 'parsed'
|
|
1674
|
+
? 'border-primary text-foreground border-b-2'
|
|
1675
|
+
: 'text-muted-foreground hover:text-foreground'}"
|
|
1676
|
+
onclick={() => (inspectTab = 'parsed')}
|
|
1677
|
+
>
|
|
1678
|
+
Parsed
|
|
1679
|
+
</button>
|
|
1680
|
+
<button
|
|
1681
|
+
class="px-4 py-2 text-sm font-medium transition-colors {inspectTab === 'raw'
|
|
1682
|
+
? 'border-primary text-foreground border-b-2'
|
|
1683
|
+
: 'text-muted-foreground hover:text-foreground'}"
|
|
1684
|
+
onclick={() => (inspectTab = 'raw')}
|
|
1685
|
+
>
|
|
1686
|
+
Raw JSON
|
|
1687
|
+
</button>
|
|
1688
|
+
</div>
|
|
1689
|
+
<div class="flex gap-1 pr-2">
|
|
1690
|
+
<button
|
|
1691
|
+
class="rounded px-2 py-1 text-xs font-medium transition-colors {inspectPerspective ===
|
|
1692
|
+
'draft'
|
|
1693
|
+
? 'bg-muted text-foreground'
|
|
1694
|
+
: 'text-muted-foreground hover:text-foreground'}"
|
|
1695
|
+
onclick={() => (inspectPerspective = 'draft')}
|
|
1696
|
+
>
|
|
1697
|
+
Draft
|
|
1698
|
+
</button>
|
|
1699
|
+
<button
|
|
1700
|
+
class="rounded px-2 py-1 text-xs font-medium transition-colors {inspectPerspective ===
|
|
1701
|
+
'published'
|
|
1702
|
+
? 'bg-muted text-foreground'
|
|
1703
|
+
: 'text-muted-foreground hover:text-foreground'}"
|
|
1704
|
+
onclick={() => (inspectPerspective = 'published')}
|
|
1705
|
+
>
|
|
1706
|
+
Published
|
|
1707
|
+
</button>
|
|
1708
|
+
</div>
|
|
1680
1709
|
</div>
|
|
1681
1710
|
|
|
1682
1711
|
<!-- Content -->
|
|
1683
1712
|
<div class="flex-1 overflow-auto p-4 font-mono text-sm">
|
|
1684
|
-
{#if
|
|
1685
|
-
<
|
|
1686
|
-
class="text-xs break-all whitespace-pre-wrap select-text"
|
|
1687
|
-
tabindex="0"
|
|
1688
|
-
onkeydown={(e) => {
|
|
1689
|
-
if ((e.metaKey || e.ctrlKey) && e.key === 'a') {
|
|
1690
|
-
e.preventDefault();
|
|
1691
|
-
e.stopPropagation();
|
|
1692
|
-
const sel = window.getSelection();
|
|
1693
|
-
const range = document.createRange();
|
|
1694
|
-
range.selectNodeContents(e.currentTarget);
|
|
1695
|
-
sel?.removeAllRanges();
|
|
1696
|
-
sel?.addRange(range);
|
|
1697
|
-
}
|
|
1698
|
-
}}>{@html syntaxHighlightJson(
|
|
1699
|
-
JSON.stringify(
|
|
1700
|
-
{ id: documentId, _meta: fullDocument?._meta, ...documentData },
|
|
1701
|
-
null,
|
|
1702
|
-
2
|
|
1703
|
-
)
|
|
1704
|
-
)}</pre>
|
|
1713
|
+
{#if inspectPerspective === 'published' && !publishedData}
|
|
1714
|
+
<p class="text-muted-foreground text-sm">No published data available.</p>
|
|
1705
1715
|
{:else}
|
|
1706
|
-
{@
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1716
|
+
{@const inspectData =
|
|
1717
|
+
inspectPerspective === 'published' && publishedData
|
|
1718
|
+
? { id: documentId, _meta: fullDocument?._meta, ...publishedData }
|
|
1719
|
+
: { id: documentId, _meta: fullDocument?._meta, ...documentData }}
|
|
1720
|
+
{#if inspectTab === 'raw'}
|
|
1721
|
+
<!-- svelte-ignore a11y_no_noninteractive_tabindex -->
|
|
1722
|
+
<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
|
|
1723
|
+
<pre
|
|
1724
|
+
class="text-xs break-all whitespace-pre-wrap select-text"
|
|
1725
|
+
tabindex="0"
|
|
1726
|
+
onkeydown={(e) => {
|
|
1727
|
+
if ((e.metaKey || e.ctrlKey) && e.key === 'a') {
|
|
1728
|
+
e.preventDefault();
|
|
1729
|
+
e.stopPropagation();
|
|
1730
|
+
const sel = window.getSelection();
|
|
1731
|
+
const range = document.createRange();
|
|
1732
|
+
range.selectNodeContents(e.currentTarget);
|
|
1733
|
+
sel?.removeAllRanges();
|
|
1734
|
+
sel?.addRange(range);
|
|
1735
|
+
}
|
|
1736
|
+
}}>{@html syntaxHighlightJson(JSON.stringify(inspectData, null, 2))}</pre>
|
|
1737
|
+
{:else}
|
|
1738
|
+
{@render parsedValue(null, inspectData, 0)}
|
|
1739
|
+
{/if}
|
|
1711
1740
|
{/if}
|
|
1712
1741
|
</div>
|
|
1713
1742
|
</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentEditor.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/DocumentEditor.svelte.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAexD,UAAU,KAAK;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,sBAAsB,CAAC,EAAE;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC;IACT,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"DocumentEditor.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/DocumentEditor.svelte.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAexD,UAAU,KAAK;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,sBAAsB,CAAC,EAAE;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC;IACT,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAsjDF,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|