@endora-commerce/mod-cms 0.0.0-stage → 0.100.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/LICENSE +21 -0
- package/README.md +65 -2
- package/dist/admin/api/cms-client.d.ts +77 -0
- package/dist/admin/api/cms-client.d.ts.map +1 -0
- package/dist/admin/api/cms-client.js +162 -0
- package/dist/admin/api/cms-client.js.map +1 -0
- package/dist/admin/components/AdminCatalogPreviewProvider.d.ts +6 -0
- package/dist/admin/components/AdminCatalogPreviewProvider.d.ts.map +1 -0
- package/dist/admin/components/AdminCatalogPreviewProvider.js +74 -0
- package/dist/admin/components/AdminCatalogPreviewProvider.js.map +1 -0
- package/dist/admin/components/AdminCmsAssetProvider.d.ts +9 -0
- package/dist/admin/components/AdminCmsAssetProvider.d.ts.map +1 -0
- package/dist/admin/components/AdminCmsAssetProvider.js +50 -0
- package/dist/admin/components/AdminCmsAssetProvider.js.map +1 -0
- package/dist/admin/components/BackgroundFields.d.ts +4 -0
- package/dist/admin/components/BackgroundFields.d.ts.map +1 -0
- package/dist/admin/components/BackgroundFields.js +40 -0
- package/dist/admin/components/BackgroundFields.js.map +1 -0
- package/dist/admin/components/ButtonLinkFields.d.ts +6 -0
- package/dist/admin/components/ButtonLinkFields.d.ts.map +1 -0
- package/dist/admin/components/ButtonLinkFields.js +127 -0
- package/dist/admin/components/ButtonLinkFields.js.map +1 -0
- package/dist/admin/components/CarouselPreviewNav.d.ts +12 -0
- package/dist/admin/components/CarouselPreviewNav.d.ts.map +1 -0
- package/dist/admin/components/CarouselPreviewNav.js +31 -0
- package/dist/admin/components/CarouselPreviewNav.js.map +1 -0
- package/dist/admin/components/CmsContentEditorLayout.d.ts +12 -0
- package/dist/admin/components/CmsContentEditorLayout.d.ts.map +1 -0
- package/dist/admin/components/CmsContentEditorLayout.js +9 -0
- package/dist/admin/components/CmsContentEditorLayout.js.map +1 -0
- package/dist/admin/components/ComponentDragHandle.d.ts +6 -0
- package/dist/admin/components/ComponentDragHandle.d.ts.map +1 -0
- package/dist/admin/components/ComponentDragHandle.js +119 -0
- package/dist/admin/components/ComponentDragHandle.js.map +1 -0
- package/dist/admin/components/ContentSliderActionBarExtras.d.ts +6 -0
- package/dist/admin/components/ContentSliderActionBarExtras.d.ts.map +1 -0
- package/dist/admin/components/ContentSliderActionBarExtras.js +109 -0
- package/dist/admin/components/ContentSliderActionBarExtras.js.map +1 -0
- package/dist/admin/components/HookBlockAttachmentsPanel.d.ts +9 -0
- package/dist/admin/components/HookBlockAttachmentsPanel.d.ts.map +1 -0
- package/dist/admin/components/HookBlockAttachmentsPanel.js +137 -0
- package/dist/admin/components/HookBlockAttachmentsPanel.js.map +1 -0
- package/dist/admin/components/PageBuilderActionBar.d.ts +10 -0
- package/dist/admin/components/PageBuilderActionBar.d.ts.map +1 -0
- package/dist/admin/components/PageBuilderActionBar.js +118 -0
- package/dist/admin/components/PageBuilderActionBar.js.map +1 -0
- package/dist/admin/components/PageBuilderDrawer.d.ts +16 -0
- package/dist/admin/components/PageBuilderDrawer.d.ts.map +1 -0
- package/dist/admin/components/PageBuilderDrawer.js +53 -0
- package/dist/admin/components/PageBuilderDrawer.js.map +1 -0
- package/dist/admin/components/PageBuilderEditor.d.ts +45 -0
- package/dist/admin/components/PageBuilderEditor.d.ts.map +1 -0
- package/dist/admin/components/PageBuilderEditor.js +632 -0
- package/dist/admin/components/PageBuilderEditor.js.map +1 -0
- package/dist/admin/components/PuckActionGuard.d.ts +12 -0
- package/dist/admin/components/PuckActionGuard.d.ts.map +1 -0
- package/dist/admin/components/PuckActionGuard.js +30 -0
- package/dist/admin/components/PuckActionGuard.js.map +1 -0
- package/dist/admin/components/RowLayoutPicker.d.ts +8 -0
- package/dist/admin/components/RowLayoutPicker.d.ts.map +1 -0
- package/dist/admin/components/RowLayoutPicker.js +17 -0
- package/dist/admin/components/RowLayoutPicker.js.map +1 -0
- package/dist/admin/components/SliderPreviewActionBarExtras.d.ts +6 -0
- package/dist/admin/components/SliderPreviewActionBarExtras.d.ts.map +1 -0
- package/dist/admin/components/SliderPreviewActionBarExtras.js +32 -0
- package/dist/admin/components/SliderPreviewActionBarExtras.js.map +1 -0
- package/dist/admin/components/admin-catalog-preview-map.d.ts +17 -0
- package/dist/admin/components/admin-catalog-preview-map.d.ts.map +1 -0
- package/dist/admin/components/admin-catalog-preview-map.js +18 -0
- package/dist/admin/components/admin-catalog-preview-map.js.map +1 -0
- package/dist/admin/components/build-viewports.d.ts +23 -0
- package/dist/admin/components/build-viewports.d.ts.map +1 -0
- package/dist/admin/components/build-viewports.js +23 -0
- package/dist/admin/components/build-viewports.js.map +1 -0
- package/dist/admin/components/cms-template-layout.d.ts +16 -0
- package/dist/admin/components/cms-template-layout.d.ts.map +1 -0
- package/dist/admin/components/cms-template-layout.js +53 -0
- package/dist/admin/components/cms-template-layout.js.map +1 -0
- package/dist/admin/components/page-builder-i18n.d.ts +27 -0
- package/dist/admin/components/page-builder-i18n.d.ts.map +1 -0
- package/dist/admin/components/page-builder-i18n.js +34 -0
- package/dist/admin/components/page-builder-i18n.js.map +1 -0
- package/dist/admin/components/puck-safe.d.ts +10 -0
- package/dist/admin/components/puck-safe.d.ts.map +1 -0
- package/dist/admin/components/puck-safe.js +22 -0
- package/dist/admin/components/puck-safe.js.map +1 -0
- package/dist/admin/components/scope-utils.d.ts +4 -0
- package/dist/admin/components/scope-utils.d.ts.map +1 -0
- package/dist/admin/components/scope-utils.js +7 -0
- package/dist/admin/components/scope-utils.js.map +1 -0
- package/dist/admin/editors/BlockEditor.d.ts +9 -0
- package/dist/admin/editors/BlockEditor.d.ts.map +1 -0
- package/dist/admin/editors/BlockEditor.js +217 -0
- package/dist/admin/editors/BlockEditor.js.map +1 -0
- package/dist/admin/editors/PageEditor.d.ts +9 -0
- package/dist/admin/editors/PageEditor.d.ts.map +1 -0
- package/dist/admin/editors/PageEditor.js +316 -0
- package/dist/admin/editors/PageEditor.js.map +1 -0
- package/dist/admin/editors/TemplateEditor.d.ts +9 -0
- package/dist/admin/editors/TemplateEditor.d.ts.map +1 -0
- package/dist/admin/editors/TemplateEditor.js +180 -0
- package/dist/admin/editors/TemplateEditor.js.map +1 -0
- package/dist/admin/index.d.ts +38 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +144 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/pages/BlocksListPage.d.ts +9 -0
- package/dist/admin/pages/BlocksListPage.d.ts.map +1 -0
- package/dist/admin/pages/BlocksListPage.js +47 -0
- package/dist/admin/pages/BlocksListPage.js.map +1 -0
- package/dist/admin/pages/HooksPage.d.ts +9 -0
- package/dist/admin/pages/HooksPage.d.ts.map +1 -0
- package/dist/admin/pages/HooksPage.js +41 -0
- package/dist/admin/pages/HooksPage.js.map +1 -0
- package/dist/admin/pages/PagesListPage.d.ts +9 -0
- package/dist/admin/pages/PagesListPage.d.ts.map +1 -0
- package/dist/admin/pages/PagesListPage.js +51 -0
- package/dist/admin/pages/PagesListPage.js.map +1 -0
- package/dist/admin/pages/TemplatesListPage.d.ts +9 -0
- package/dist/admin/pages/TemplatesListPage.d.ts.map +1 -0
- package/dist/admin/pages/TemplatesListPage.js +47 -0
- package/dist/admin/pages/TemplatesListPage.js.map +1 -0
- package/dist/admin-ui/index.d.ts +90 -0
- package/dist/admin-ui/index.d.ts.map +1 -0
- package/dist/admin-ui/index.js +89 -0
- package/dist/admin-ui/index.js.map +1 -0
- package/dist/backend/cli/block-names.d.ts +92 -0
- package/dist/backend/cli/block-names.d.ts.map +1 -0
- package/dist/backend/cli/block-names.js +132 -0
- package/dist/backend/cli/block-names.js.map +1 -0
- package/dist/backend/entities/cms-block.entity.d.ts +20 -0
- package/dist/backend/entities/cms-block.entity.d.ts.map +1 -0
- package/dist/backend/entities/cms-block.entity.js +77 -0
- package/dist/backend/entities/cms-block.entity.js.map +1 -0
- package/dist/backend/entities/cms-hook-block-attachment.entity.d.ts +15 -0
- package/dist/backend/entities/cms-hook-block-attachment.entity.d.ts.map +1 -0
- package/dist/backend/entities/cms-hook-block-attachment.entity.js +46 -0
- package/dist/backend/entities/cms-hook-block-attachment.entity.js.map +1 -0
- package/dist/backend/entities/cms-hook.entity.d.ts +20 -0
- package/dist/backend/entities/cms-hook.entity.d.ts.map +1 -0
- package/dist/backend/entities/cms-hook.entity.js +73 -0
- package/dist/backend/entities/cms-hook.entity.js.map +1 -0
- package/dist/backend/entities/cms-page.entity.d.ts +43 -0
- package/dist/backend/entities/cms-page.entity.d.ts.map +1 -0
- package/dist/backend/entities/cms-page.entity.js +140 -0
- package/dist/backend/entities/cms-page.entity.js.map +1 -0
- package/dist/backend/entities/cms-template.entity.d.ts +20 -0
- package/dist/backend/entities/cms-template.entity.d.ts.map +1 -0
- package/dist/backend/entities/cms-template.entity.js +73 -0
- package/dist/backend/entities/cms-template.entity.js.map +1 -0
- package/dist/backend/index.d.ts +157 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +317 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/plugin.d.ts +81 -0
- package/dist/backend/plugin.d.ts.map +1 -0
- package/dist/backend/plugin.js +81 -0
- package/dist/backend/plugin.js.map +1 -0
- package/dist/backend/routes.admin.d.ts +19 -0
- package/dist/backend/routes.admin.d.ts.map +1 -0
- package/dist/backend/routes.admin.js +164 -0
- package/dist/backend/routes.admin.js.map +1 -0
- package/dist/backend/routes.storefront.d.ts +6 -0
- package/dist/backend/routes.storefront.d.ts.map +1 -0
- package/dist/backend/routes.storefront.js +89 -0
- package/dist/backend/routes.storefront.js.map +1 -0
- package/dist/backend/services/asset-embed-resolver.d.ts +17 -0
- package/dist/backend/services/asset-embed-resolver.d.ts.map +1 -0
- package/dist/backend/services/asset-embed-resolver.js +40 -0
- package/dist/backend/services/asset-embed-resolver.js.map +1 -0
- package/dist/backend/services/asset-references.d.ts +4 -0
- package/dist/backend/services/asset-references.d.ts.map +1 -0
- package/dist/backend/services/asset-references.js +55 -0
- package/dist/backend/services/asset-references.js.map +1 -0
- package/dist/backend/services/cms-block-read-port.d.ts +27 -0
- package/dist/backend/services/cms-block-read-port.d.ts.map +1 -0
- package/dist/backend/services/cms-block-read-port.js +50 -0
- package/dist/backend/services/cms-block-read-port.js.map +1 -0
- package/dist/backend/services/cms-block-seed-port.d.ts +31 -0
- package/dist/backend/services/cms-block-seed-port.d.ts.map +1 -0
- package/dist/backend/services/cms-block-seed-port.js +68 -0
- package/dist/backend/services/cms-block-seed-port.js.map +1 -0
- package/dist/backend/services/cms-block-service.d.ts +38 -0
- package/dist/backend/services/cms-block-service.d.ts.map +1 -0
- package/dist/backend/services/cms-block-service.js +218 -0
- package/dist/backend/services/cms-block-service.js.map +1 -0
- package/dist/backend/services/cms-cache.d.ts +54 -0
- package/dist/backend/services/cms-cache.d.ts.map +1 -0
- package/dist/backend/services/cms-cache.js +113 -0
- package/dist/backend/services/cms-cache.js.map +1 -0
- package/dist/backend/services/cms-hook-service.d.ts +35 -0
- package/dist/backend/services/cms-hook-service.d.ts.map +1 -0
- package/dist/backend/services/cms-hook-service.js +216 -0
- package/dist/backend/services/cms-hook-service.js.map +1 -0
- package/dist/backend/services/cms-language-reference.d.ts +11 -0
- package/dist/backend/services/cms-language-reference.d.ts.map +1 -0
- package/dist/backend/services/cms-language-reference.js +26 -0
- package/dist/backend/services/cms-language-reference.js.map +1 -0
- package/dist/backend/services/cms-page-read-port.d.ts +23 -0
- package/dist/backend/services/cms-page-read-port.d.ts.map +1 -0
- package/dist/backend/services/cms-page-read-port.js +54 -0
- package/dist/backend/services/cms-page-read-port.js.map +1 -0
- package/dist/backend/services/cms-page-service.d.ts +104 -0
- package/dist/backend/services/cms-page-service.d.ts.map +1 -0
- package/dist/backend/services/cms-page-service.js +468 -0
- package/dist/backend/services/cms-page-service.js.map +1 -0
- package/dist/backend/services/cms-reference-registry.d.ts +30 -0
- package/dist/backend/services/cms-reference-registry.d.ts.map +1 -0
- package/dist/backend/services/cms-reference-registry.js +98 -0
- package/dist/backend/services/cms-reference-registry.js.map +1 -0
- package/dist/backend/services/cms-template-service.d.ts +37 -0
- package/dist/backend/services/cms-template-service.d.ts.map +1 -0
- package/dist/backend/services/cms-template-service.js +205 -0
- package/dist/backend/services/cms-template-service.js.map +1 -0
- package/dist/backend/services/content-tree-walker.d.ts +7 -0
- package/dist/backend/services/content-tree-walker.d.ts.map +1 -0
- package/dist/backend/services/content-tree-walker.js +89 -0
- package/dist/backend/services/content-tree-walker.js.map +1 -0
- package/dist/backend/services/page-builder-registry.d.ts +120 -0
- package/dist/backend/services/page-builder-registry.d.ts.map +1 -0
- package/dist/backend/services/page-builder-registry.js +220 -0
- package/dist/backend/services/page-builder-registry.js.map +1 -0
- package/dist/backend/services/seed-hooks.d.ts +22 -0
- package/dist/backend/services/seed-hooks.d.ts.map +1 -0
- package/dist/backend/services/seed-hooks.js +94 -0
- package/dist/backend/services/seed-hooks.js.map +1 -0
- package/dist/backend/services/storefront-resolver.d.ts +71 -0
- package/dist/backend/services/storefront-resolver.d.ts.map +1 -0
- package/dist/backend/services/storefront-resolver.js +329 -0
- package/dist/backend/services/storefront-resolver.js.map +1 -0
- package/dist/manifest.d.ts +225 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +695 -0
- package/dist/manifest.js.map +1 -0
- package/dist/migrations/20260425T162418_cms_pages_init.d.ts +10 -0
- package/dist/migrations/20260425T162418_cms_pages_init.d.ts.map +1 -0
- package/dist/migrations/20260425T162418_cms_pages_init.js +30 -0
- package/dist/migrations/20260425T162418_cms_pages_init.js.map +1 -0
- package/dist/migrations/20260505T130214_cms_init.d.ts +28 -0
- package/dist/migrations/20260505T130214_cms_init.d.ts.map +1 -0
- package/dist/migrations/20260505T130214_cms_init.js +332 -0
- package/dist/migrations/20260505T130214_cms_init.js.map +1 -0
- package/dist/migrations/20260903T101741_cms_namespace_block_names.d.ts +6 -0
- package/dist/migrations/20260903T101741_cms_namespace_block_names.d.ts.map +1 -0
- package/dist/migrations/20260903T101741_cms_namespace_block_names.js +60 -0
- package/dist/migrations/20260903T101741_cms_namespace_block_names.js.map +1 -0
- package/dist/migrations/20260912T094733_cms_sales_channel_cms_pages.d.ts +27 -0
- package/dist/migrations/20260912T094733_cms_sales_channel_cms_pages.d.ts.map +1 -0
- package/dist/migrations/20260912T094733_cms_sales_channel_cms_pages.js +44 -0
- package/dist/migrations/20260912T094733_cms_sales_channel_cms_pages.js.map +1 -0
- package/dist/migrations/20260912T125709_cms_page_body_asset_ref_index.d.ts +32 -0
- package/dist/migrations/20260912T125709_cms_page_body_asset_ref_index.d.ts.map +1 -0
- package/dist/migrations/20260912T125709_cms_page_body_asset_ref_index.js +36 -0
- package/dist/migrations/20260912T125709_cms_page_body_asset_ref_index.js.map +1 -0
- package/dist/migrations/index.d.ts +31 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +37 -0
- package/dist/migrations/index.js.map +1 -0
- package/docs/cms/extending-page-builder.md +256 -0
- package/docs/cms/index.md +233 -0
- package/i18n/en.json +231 -0
- package/i18n/pl.json +231 -0
- package/package.json +125 -3
- package/tailwind.css +16 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
3
|
+
import { ArrowDown, ArrowUp, GripVertical, Plus, RefreshCw, Trash2 } from 'lucide-react';
|
|
4
|
+
import { TouchReorderButtons } from '@endora-commerce/admin-kit/components';
|
|
5
|
+
import { Alert, AlertDescription, Badge, Button, Card, CardContent, CardHeader, CardTitle, Input, Select } from '@endora-commerce/admin-kit/ui';
|
|
6
|
+
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@endora-commerce/admin-kit/ui';
|
|
7
|
+
import { useTranslation } from '@endora-commerce/admin-kit/i18n';
|
|
8
|
+
import { cmsClient } from '../api/cms-client.js';
|
|
9
|
+
function nextPosition(rows) {
|
|
10
|
+
const max = rows.reduce((out, row) => Math.max(out, row.position), -10);
|
|
11
|
+
return max + 10;
|
|
12
|
+
}
|
|
13
|
+
function move(items, from, to) {
|
|
14
|
+
const copy = [...items];
|
|
15
|
+
const [item] = copy.splice(from, 1);
|
|
16
|
+
if (item === undefined)
|
|
17
|
+
return items;
|
|
18
|
+
copy.splice(to, 0, item);
|
|
19
|
+
return copy;
|
|
20
|
+
}
|
|
21
|
+
export function HookBlockAttachmentsPanel({ hook, onChanged, }) {
|
|
22
|
+
const t = useTranslation('cms');
|
|
23
|
+
const [attachments, setAttachments] = useState([]);
|
|
24
|
+
const [blocks, setBlocks] = useState([]);
|
|
25
|
+
const [selectedBlockId, setSelectedBlockId] = useState('');
|
|
26
|
+
const [position, setPosition] = useState(0);
|
|
27
|
+
const [dragBlockId, setDragBlockId] = useState(null);
|
|
28
|
+
const [loading, setLoading] = useState(false);
|
|
29
|
+
const [saving, setSaving] = useState(false);
|
|
30
|
+
const [error, setError] = useState(null);
|
|
31
|
+
const attachedIds = useMemo(() => new Set(attachments.map((row) => row.blockId)), [attachments]);
|
|
32
|
+
const attachableBlocks = useMemo(() => blocks.filter((block) => !attachedIds.has(block.id)), [attachedIds, blocks]);
|
|
33
|
+
const load = useCallback(async () => {
|
|
34
|
+
if (!hook) {
|
|
35
|
+
setAttachments([]);
|
|
36
|
+
setBlocks([]);
|
|
37
|
+
setSelectedBlockId('');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
setLoading(true);
|
|
41
|
+
setError(null);
|
|
42
|
+
try {
|
|
43
|
+
const [hookDetail, blockList] = await Promise.all([
|
|
44
|
+
cmsClient.getHook(hook.id),
|
|
45
|
+
cmsClient.listBlocks(),
|
|
46
|
+
]);
|
|
47
|
+
setAttachments(hookDetail.attachments);
|
|
48
|
+
setBlocks(blockList.data);
|
|
49
|
+
setPosition(nextPosition(hookDetail.attachments));
|
|
50
|
+
setSelectedBlockId((current) => blockList.data.some((block) => block.id === current) ? current : '');
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
setLoading(false);
|
|
57
|
+
}
|
|
58
|
+
}, [hook]);
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
void load();
|
|
61
|
+
}, [load]);
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
if (!selectedBlockId && attachableBlocks[0])
|
|
64
|
+
setSelectedBlockId(attachableBlocks[0].id);
|
|
65
|
+
}, [attachableBlocks, selectedBlockId]);
|
|
66
|
+
async function addAttachment() {
|
|
67
|
+
if (!hook || !selectedBlockId)
|
|
68
|
+
return;
|
|
69
|
+
setSaving(true);
|
|
70
|
+
setError(null);
|
|
71
|
+
try {
|
|
72
|
+
const updated = await cmsClient.addHookAttachment(hook.id, {
|
|
73
|
+
blockId: selectedBlockId,
|
|
74
|
+
position,
|
|
75
|
+
});
|
|
76
|
+
setAttachments(updated);
|
|
77
|
+
setPosition(nextPosition(updated));
|
|
78
|
+
setSelectedBlockId('');
|
|
79
|
+
onChanged?.();
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
setSaving(false);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async function persistOrder(next) {
|
|
89
|
+
if (!hook)
|
|
90
|
+
return;
|
|
91
|
+
setSaving(true);
|
|
92
|
+
setError(null);
|
|
93
|
+
const normalized = next.map((row, index) => ({ ...row, position: index * 10 }));
|
|
94
|
+
setAttachments(normalized);
|
|
95
|
+
try {
|
|
96
|
+
await Promise.all(normalized.map((row) => cmsClient.reorderHookAttachment(hook.id, row.blockId, row.position)));
|
|
97
|
+
onChanged?.();
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
101
|
+
await load();
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
setSaving(false);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async function removeAttachment(blockId) {
|
|
108
|
+
if (!hook)
|
|
109
|
+
return;
|
|
110
|
+
setSaving(true);
|
|
111
|
+
setError(null);
|
|
112
|
+
try {
|
|
113
|
+
await cmsClient.removeHookAttachment(hook.id, blockId);
|
|
114
|
+
const updated = attachments.filter((row) => row.blockId !== blockId);
|
|
115
|
+
setAttachments(updated);
|
|
116
|
+
setPosition(nextPosition(updated));
|
|
117
|
+
onChanged?.();
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
setSaving(false);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (!hook) {
|
|
127
|
+
return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { className: "text-base", children: t('hookAttachments.title') }) }), _jsx(CardContent, { children: _jsx("p", { className: "text-sm text-muted-foreground", children: t('hookAttachments.selectHook') }) })] }));
|
|
128
|
+
}
|
|
129
|
+
return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between gap-2", children: [_jsx(CardTitle, { className: "min-w-0 text-base", children: _jsx("span", { className: "truncate", children: hook.name }) }), _jsx(Button, { type: "button", size: "icon", variant: "outline", title: t('hookAttachments.refresh'), onClick: () => void load(), disabled: loading || saving, children: _jsx(RefreshCw, { className: "h-4 w-4" }) })] }), _jsxs(CardContent, { className: "space-y-4", children: [error ? (_jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: error }) })) : null, _jsxs("div", { className: "grid grid-cols-[1fr_5rem_auto] gap-2", children: [_jsxs(Select, { value: selectedBlockId, onChange: (event) => setSelectedBlockId(event.target.value), disabled: saving || attachableBlocks.length === 0, children: [attachableBlocks.length === 0 ? (_jsx("option", { value: "", children: t('hookAttachments.noAvailableBlocks') })) : null, attachableBlocks.map((block) => (_jsxs("option", { value: block.id, children: [block.name, " (", block.code, ")"] }, block.id)))] }), _jsx(Input, { type: "number", min: 0, value: position, onChange: (event) => setPosition(Number(event.target.value)), disabled: saving }), _jsxs(Button, { type: "button", title: t('hookAttachments.addBlock'), onClick: () => void addAttachment(), disabled: saving || !selectedBlockId, children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), t('common.add')] })] }), loading ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('hookAttachments.loading') })) : attachments.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('hookAttachments.empty') })) : (_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { className: "w-10" }), _jsx(TableHead, { children: t('columns.block') }), _jsx(TableHead, { children: t('columns.code') }), _jsx(TableHead, { className: "w-24 text-right", children: t('columns.position') }), _jsx(TableHead, { className: "w-32 text-right", children: t('columns.order') })] }) }), _jsx(TableBody, { children: attachments.map((attachment, index) => (_jsxs(TableRow, { draggable: true, onDragStart: () => setDragBlockId(attachment.blockId), onDragOver: (event) => event.preventDefault(), onDrop: () => {
|
|
130
|
+
const from = attachments.findIndex((row) => row.blockId === dragBlockId);
|
|
131
|
+
if (from < 0 || from === index)
|
|
132
|
+
return;
|
|
133
|
+
void persistOrder(move(attachments, from, index));
|
|
134
|
+
}, onDragEnd: () => setDragBlockId(null), children: [_jsx(TableCell, { children: _jsx(GripVertical, { className: "h-4 w-4 text-muted-foreground" }) }), _jsx(TableCell, { children: _jsx("span", { className: "font-medium", children: blocks.find((block) => block.id === attachment.blockId)?.name ??
|
|
135
|
+
attachment.blockId }) }), _jsx(TableCell, { className: "font-mono text-xs", children: attachment.blockCode }), _jsx(TableCell, { className: "text-right", children: _jsx(Badge, { variant: "outline", children: attachment.position }) }), _jsx(TableCell, { className: "text-right", children: _jsxs("div", { className: "flex justify-end gap-1 items-center", children: [_jsx(TouchReorderButtons, { disabled: saving, onMoveUp: () => void persistOrder(move(attachments, index, index - 1)), onMoveDown: () => void persistOrder(move(attachments, index, index + 1)), disableUp: index === 0, disableDown: index === attachments.length - 1 }), _jsx(Button, { type: "button", size: "icon", variant: "ghost", className: "b2b-reorder-desktop-only", title: t('hookAttachments.moveUp'), disabled: saving || index === 0, onClick: () => void persistOrder(move(attachments, index, index - 1)), children: _jsx(ArrowUp, { className: "h-4 w-4" }) }), _jsx(Button, { type: "button", size: "icon", variant: "ghost", className: "b2b-reorder-desktop-only", title: t('hookAttachments.moveDown'), disabled: saving || index === attachments.length - 1, onClick: () => void persistOrder(move(attachments, index, index + 1)), children: _jsx(ArrowDown, { className: "h-4 w-4" }) }), _jsx(Button, { type: "button", size: "icon", variant: "ghost", title: t('common.remove'), disabled: saving, onClick: () => void removeAttachment(attachment.blockId), children: _jsx(Trash2, { className: "h-4 w-4" }) })] }) })] }, attachment.blockId))) })] }))] })] }));
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=HookBlockAttachmentsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HookBlockAttachmentsPanel.js","sourceRoot":"","sources":["../../../src/admin/components/HookBlockAttachmentsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode } from 'react';
|
|
2
|
+
import { type RowLayoutPresetId } from '@endora-commerce/cms-components/editor/row-layout-presets';
|
|
3
|
+
/** Puck action bar — default duplicate/delete plus Row layout controls when a Row is active. */
|
|
4
|
+
export declare function PageBuilderActionBar({ label, children, parentAction, }: {
|
|
5
|
+
label?: string;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
parentAction: ReactNode;
|
|
8
|
+
}): ReactElement;
|
|
9
|
+
export type { RowLayoutPresetId };
|
|
10
|
+
//# sourceMappingURL=PageBuilderActionBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageBuilderActionBar.d.ts","sourceRoot":"","sources":["../../../src/admin/components/PageBuilderActionBar.tsx"],"names":[],"mappings":"AAGA,OAAO,EAOL,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,2DAA2D,CAAC;AAqInE,gGAAgG;AAChG,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,EACR,YAAY,GACb,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,EAAE,SAAS,CAAC;CACzB,GAAG,YAAY,CAmEf;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import { Children, useEffect, useLayoutEffect, useRef, useState, } from 'react';
|
|
5
|
+
import { ActionBar } from '@measured/puck';
|
|
6
|
+
import { Columns2, LayoutGrid, Plus } from 'lucide-react';
|
|
7
|
+
import { ROW_LAYOUT_PRESETS, addColumnFitRow, addColumnFullWidth, applyRowLayoutPreset, } from '@endora-commerce/cms-components/editor/row-layout-presets';
|
|
8
|
+
import { usePageBuilderPuck, resolveContentSliderIdForItem } from '@endora-commerce/page-builder-core/editor';
|
|
9
|
+
import { useActionBarTarget, QuickTooltip, wrapQuickTooltip } from '@endora-commerce/page-builder-admin';
|
|
10
|
+
import { ContentSliderActionBarExtras } from './ContentSliderActionBarExtras.js';
|
|
11
|
+
import { SliderPreviewActionBarExtras } from './SliderPreviewActionBarExtras.js';
|
|
12
|
+
import { isPuckItemType, safeGetPuckItem } from './puck-safe.js';
|
|
13
|
+
function RowLayoutFlyout({ anchorRef, onClose, onSelect, }) {
|
|
14
|
+
const [style, setStyle] = useState({ visibility: 'hidden' });
|
|
15
|
+
const [portalRoot, setPortalRoot] = useState(null);
|
|
16
|
+
const menuRef = useRef(null);
|
|
17
|
+
useLayoutEffect(() => {
|
|
18
|
+
const anchor = anchorRef.current;
|
|
19
|
+
if (!anchor)
|
|
20
|
+
return;
|
|
21
|
+
const doc = anchor.ownerDocument;
|
|
22
|
+
setPortalRoot(doc.body);
|
|
23
|
+
const rect = anchor.getBoundingClientRect();
|
|
24
|
+
setStyle({
|
|
25
|
+
position: 'fixed',
|
|
26
|
+
top: rect.bottom + 6,
|
|
27
|
+
left: rect.left,
|
|
28
|
+
zIndex: 9999,
|
|
29
|
+
visibility: 'visible',
|
|
30
|
+
});
|
|
31
|
+
}, [anchorRef]);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
const anchor = anchorRef.current;
|
|
34
|
+
const doc = anchor?.ownerDocument ?? document;
|
|
35
|
+
const onPointerDown = (event) => {
|
|
36
|
+
const target = event.target;
|
|
37
|
+
if (menuRef.current?.contains(target) || anchorRef.current?.contains(target))
|
|
38
|
+
return;
|
|
39
|
+
onClose();
|
|
40
|
+
};
|
|
41
|
+
const onKeyDown = (event) => {
|
|
42
|
+
if (event.key === 'Escape')
|
|
43
|
+
onClose();
|
|
44
|
+
};
|
|
45
|
+
doc.addEventListener('pointerdown', onPointerDown);
|
|
46
|
+
doc.addEventListener('keydown', onKeyDown);
|
|
47
|
+
return () => {
|
|
48
|
+
doc.removeEventListener('pointerdown', onPointerDown);
|
|
49
|
+
doc.removeEventListener('keydown', onKeyDown);
|
|
50
|
+
};
|
|
51
|
+
}, [anchorRef, onClose]);
|
|
52
|
+
if (!portalRoot)
|
|
53
|
+
return null;
|
|
54
|
+
return createPortal(_jsxs("div", { ref: menuRef, className: "pb-row-action-flyout", style: style, role: "menu", children: [_jsx("p", { className: "pb-row-action-flyout__heading", children: "Layout" }), ROW_LAYOUT_PRESETS.map((preset) => (_jsx("button", { type: "button", className: "pb-row-action-flyout__item", onClick: () => onSelect(preset.id), children: preset.label }, preset.id)))] }), portalRoot);
|
|
55
|
+
}
|
|
56
|
+
function RowActionBarExtras({ rowId }) {
|
|
57
|
+
const dispatch = usePageBuilderPuck((s) => s.dispatch);
|
|
58
|
+
const getItemById = usePageBuilderPuck((s) => s.getItemById);
|
|
59
|
+
const getSelectorForId = usePageBuilderPuck((s) => s.getSelectorForId);
|
|
60
|
+
const [layoutOpen, setLayoutOpen] = useState(false);
|
|
61
|
+
const layoutAnchorRef = useRef(null);
|
|
62
|
+
const applyRow = (mutate) => {
|
|
63
|
+
const item = getItemById(rowId);
|
|
64
|
+
const selector = getSelectorForId(rowId);
|
|
65
|
+
if (!item || item.type !== 'cms.Row' || !selector)
|
|
66
|
+
return;
|
|
67
|
+
const nextProps = mutate(item.props);
|
|
68
|
+
dispatch({
|
|
69
|
+
type: 'replace',
|
|
70
|
+
destinationZone: selector.zone,
|
|
71
|
+
destinationIndex: selector.index,
|
|
72
|
+
data: { type: 'cms.Row', props: { ...nextProps, id: rowId } },
|
|
73
|
+
recordHistory: true,
|
|
74
|
+
});
|
|
75
|
+
setLayoutOpen(false);
|
|
76
|
+
};
|
|
77
|
+
return (_jsxs(_Fragment, { children: [_jsx("span", { ref: layoutAnchorRef, className: "pb-row-action-bar__layout-anchor", children: _jsx(QuickTooltip, { text: "Column layout", children: _jsx(ActionBar.Action, { label: "Column layout", onClick: () => setLayoutOpen((open) => !open), children: _jsx(LayoutGrid, { size: 16 }) }) }) }), layoutOpen ? (_jsx(RowLayoutFlyout, { anchorRef: layoutAnchorRef, onClose: () => setLayoutOpen(false), onSelect: (presetId) => applyRow((props) => applyRowLayoutPreset(props, presetId)) })) : null, _jsx(QuickTooltip, { text: "Add column and fit row", children: _jsx(ActionBar.Action, { label: "Add column and fit row", onClick: () => applyRow(addColumnFitRow), children: _jsx(Plus, { size: 16 }) }) }), _jsx(QuickTooltip, { text: "Add full-width column", children: _jsx(ActionBar.Action, { label: "Add full-width column", onClick: () => applyRow(addColumnFullWidth), children: _jsx(Columns2, { size: 16 }) }) })] }));
|
|
78
|
+
}
|
|
79
|
+
/** Puck action bar — default duplicate/delete plus Row layout controls when a Row is active. */
|
|
80
|
+
export function PageBuilderActionBar({ label, children, parentAction, }) {
|
|
81
|
+
const target = useActionBarTarget();
|
|
82
|
+
const selectedItem = usePageBuilderPuck((s) => s.selectedItem);
|
|
83
|
+
const selectedRowId = selectedItem?.type === 'cms.Row' && typeof selectedItem.props.id === 'string'
|
|
84
|
+
? selectedItem.props.id
|
|
85
|
+
: null;
|
|
86
|
+
const rowId = label === 'Row' ? (target?.type === 'cms.Row' ? target.id : selectedRowId) : null;
|
|
87
|
+
const showRowExtras = Boolean(rowId);
|
|
88
|
+
const getSelectorForId = usePageBuilderPuck((s) => s.getSelectorForId);
|
|
89
|
+
const getItemById = usePageBuilderPuck((s) => s.getItemById);
|
|
90
|
+
const resolveCarouselId = (type, id) => {
|
|
91
|
+
const item = safeGetPuckItem(getItemById, id);
|
|
92
|
+
return isPuckItemType(item, type) ? id : null;
|
|
93
|
+
};
|
|
94
|
+
const contentSliderId = (() => {
|
|
95
|
+
if (target?.type === 'cms.ContentSlider')
|
|
96
|
+
return resolveCarouselId('cms.ContentSlider', target.id);
|
|
97
|
+
if (selectedItem?.type === 'cms.ContentSlider' && typeof selectedItem.props.id === 'string') {
|
|
98
|
+
return resolveCarouselId('cms.ContentSlider', selectedItem.props.id);
|
|
99
|
+
}
|
|
100
|
+
const selectedId = selectedItem?.props.id;
|
|
101
|
+
if (typeof selectedId !== 'string')
|
|
102
|
+
return null;
|
|
103
|
+
const nestedSliderId = resolveContentSliderIdForItem(selectedId, getSelectorForId, getItemById);
|
|
104
|
+
return nestedSliderId ? resolveCarouselId('cms.ContentSlider', nestedSliderId) : null;
|
|
105
|
+
})();
|
|
106
|
+
const imageSliderId = target?.type === 'cms.ImageSlider'
|
|
107
|
+
? resolveCarouselId('cms.ImageSlider', target.id)
|
|
108
|
+
: selectedItem?.type === 'cms.ImageSlider' && typeof selectedItem.props.id === 'string'
|
|
109
|
+
? resolveCarouselId('cms.ImageSlider', selectedItem.props.id)
|
|
110
|
+
: null;
|
|
111
|
+
const productSliderId = target?.type === 'catalog.ProductSlider'
|
|
112
|
+
? resolveCarouselId('catalog.ProductSlider', target.id)
|
|
113
|
+
: selectedItem?.type === 'catalog.ProductSlider' && typeof selectedItem.props.id === 'string'
|
|
114
|
+
? resolveCarouselId('catalog.ProductSlider', selectedItem.props.id)
|
|
115
|
+
: null;
|
|
116
|
+
return (_jsxs(ActionBar, { children: [_jsxs(ActionBar.Group, { children: [wrapQuickTooltip(parentAction, 'parent'), label ? _jsx(ActionBar.Label, { label: label }) : null, showRowExtras ? _jsx(RowActionBarExtras, { rowId: rowId }) : null] }), contentSliderId || imageSliderId || productSliderId ? (_jsxs(ActionBar.Group, { children: [contentSliderId ? _jsx(ContentSliderActionBarExtras, { sliderId: contentSliderId }) : null, imageSliderId ? (_jsx(SliderPreviewActionBarExtras, { carouselId: imageSliderId, type: "cms.ImageSlider" })) : null, productSliderId ? (_jsx(SliderPreviewActionBarExtras, { carouselId: productSliderId, type: "catalog.ProductSlider" })) : null] })) : null, _jsx(ActionBar.Group, { children: Children.map(children, (child, index) => wrapQuickTooltip(child, `action-${index}`)) })] }));
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=PageBuilderActionBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageBuilderActionBar.js","sourceRoot":"","sources":["../../../src/admin/components/PageBuilderActionBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Puck `overrides.drawer` — search box above the component list.
|
|
4
|
+
*
|
|
5
|
+
* The fold is `lib/text-normalization.ts`, **imported, never re-implemented**.
|
|
6
|
+
* This file used to carry its own NFD-only copy, which cannot touch `ł` — so
|
|
7
|
+
* `naglowek` found nothing while `Nagłówek`, the shipped Polish label for the
|
|
8
|
+
* Heading block, sat in the list unmatched (issue #236). Both sides are folded:
|
|
9
|
+
* folding only the haystack breaks the operator who does type the diacritics.
|
|
10
|
+
*/
|
|
11
|
+
export declare function PageBuilderDrawer({ children, searchPlaceholder, emptyLabel, }: {
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
searchPlaceholder: string;
|
|
14
|
+
emptyLabel: string;
|
|
15
|
+
}): ReactElement;
|
|
16
|
+
//# sourceMappingURL=PageBuilderDrawer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageBuilderDrawer.d.ts","sourceRoot":"","sources":["../../../src/admin/components/PageBuilderDrawer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAqC,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK7F;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,iBAAiB,EACjB,UAAU,GACX,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,YAAY,CAoEf"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useLayoutEffect, useRef, useState } from 'react';
|
|
4
|
+
import { Search } from 'lucide-react';
|
|
5
|
+
import { Input } from '@endora-commerce/admin-kit/ui';
|
|
6
|
+
import { normalize } from '@endora-commerce/admin-kit/lib';
|
|
7
|
+
/**
|
|
8
|
+
* Puck `overrides.drawer` — search box above the component list.
|
|
9
|
+
*
|
|
10
|
+
* The fold is `lib/text-normalization.ts`, **imported, never re-implemented**.
|
|
11
|
+
* This file used to carry its own NFD-only copy, which cannot touch `ł` — so
|
|
12
|
+
* `naglowek` found nothing while `Nagłówek`, the shipped Polish label for the
|
|
13
|
+
* Heading block, sat in the list unmatched (issue #236). Both sides are folded:
|
|
14
|
+
* folding only the haystack breaks the operator who does type the diacritics.
|
|
15
|
+
*/
|
|
16
|
+
export function PageBuilderDrawer({ children, searchPlaceholder, emptyLabel, }) {
|
|
17
|
+
const [query, setQuery] = useState('');
|
|
18
|
+
const listRef = useRef(null);
|
|
19
|
+
const [matchCount, setMatchCount] = useState(null);
|
|
20
|
+
useLayoutEffect(() => {
|
|
21
|
+
const root = listRef.current;
|
|
22
|
+
if (!root)
|
|
23
|
+
return;
|
|
24
|
+
const q = normalize(query);
|
|
25
|
+
const items = root.querySelectorAll('[data-puck-drawer-item]');
|
|
26
|
+
let visible = 0;
|
|
27
|
+
items.forEach((el) => {
|
|
28
|
+
const testId = el.getAttribute('data-testid') ?? '';
|
|
29
|
+
const name = testId.startsWith('drawer-item:') ? testId.slice('drawer-item:'.length) : '';
|
|
30
|
+
const label = (el.textContent ?? '').trim();
|
|
31
|
+
const haystack = normalize(`${name} ${label}`);
|
|
32
|
+
const match = q.length === 0 || haystack.includes(q);
|
|
33
|
+
el.style.display = match ? '' : 'none';
|
|
34
|
+
if (match)
|
|
35
|
+
visible += 1;
|
|
36
|
+
});
|
|
37
|
+
// Hide category groups that have no matching items while filtering.
|
|
38
|
+
root.querySelectorAll('[class*="ComponentList_"]').forEach((list) => {
|
|
39
|
+
const className = list.className;
|
|
40
|
+
if (className.includes('ComponentList-content') || className.includes('ComponentList-title')) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (!list.querySelector('[class*="ComponentList-content"]'))
|
|
44
|
+
return;
|
|
45
|
+
const anyVisible = [...list.querySelectorAll('[data-puck-drawer-item]')].some((el) => el.style.display !== 'none');
|
|
46
|
+
list.style.display = q.length > 0 && !anyVisible ? 'none' : '';
|
|
47
|
+
});
|
|
48
|
+
setMatchCount(q.length > 0 ? visible : null);
|
|
49
|
+
}, [query, children]);
|
|
50
|
+
const filtering = query.trim().length > 0;
|
|
51
|
+
return (_jsxs("div", { className: "flex min-h-0 flex-col gap-2", children: [_jsxs("div", { className: "sticky top-0 z-[1] bg-background px-2 pt-2", children: [_jsxs("div", { className: "relative", children: [_jsx(Search, { className: "pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { type: "search", value: query, onChange: (e) => setQuery(e.target.value), placeholder: searchPlaceholder, className: "h-8 bg-white pl-8 text-xs", "aria-label": searchPlaceholder })] }), filtering && matchCount === 0 ? (_jsx("p", { className: "mt-2 px-0.5 text-xs text-muted-foreground", children: emptyLabel })) : null] }), _jsx("div", { ref: listRef, className: "min-h-0 flex-1 overflow-y-auto px-1 pb-2", ...(filtering ? { 'data-pb-drawer-filtering': '' } : {}), children: children })] }));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=PageBuilderDrawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageBuilderDrawer.js","sourceRoot":"","sources":["../../../src/admin/components/PageBuilderDrawer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAqC,MAAM,OAAO,CAAC;AAC7F,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,QAAQ,EACR,iBAAiB,EACjB,UAAU,GAKX;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAElE,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAc,yBAAyB,CAAC,CAAC;QAC5E,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACnB,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1F,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrD,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YACvC,IAAI,KAAK;gBAAE,OAAO,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,oEAAoE;QACpE,IAAI,CAAC,gBAAgB,CAAc,2BAA2B,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBAC7F,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,kCAAkC,CAAC;gBAAE,OAAO;YACpE,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAc,yBAAyB,CAAC,CAAC,CAAC,IAAI,CACxF,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CACpC,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,aAAa,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAE1C,OAAO,CACL,eAAK,SAAS,EAAC,6BAA6B,aAC1C,eAAK,SAAS,EAAC,4CAA4C,aACzD,eAAK,SAAS,EAAC,UAAU,aACvB,KAAC,MAAM,IAAC,SAAS,EAAC,kGAAkG,GAAG,EACvH,KAAC,KAAK,IACJ,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC/C,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAC,2BAA2B,gBACzB,iBAAiB,GAC7B,IACE,EACL,SAAS,IAAI,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAC/B,YAAG,SAAS,EAAC,2CAA2C,YAAE,UAAU,GAAK,CAC1E,CAAC,CAAC,CAAC,IAAI,IACJ,EACN,cACE,GAAG,EAAE,OAAO,EACZ,SAAS,EAAC,0CAA0C,KAChD,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,0BAA0B,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAExD,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type Data } from '@measured/puck';
|
|
3
|
+
import '@measured/puck/puck.css';
|
|
4
|
+
import '@endora-commerce/cms-components/styles.css';
|
|
5
|
+
import { type PageBuilderContext } from '@endora-commerce/page-builder-core';
|
|
6
|
+
export declare function PageBuilderEditor({ data, onChange, contentKey, pageContainer, context, languages, activeLanguage, onResolveLanguageContent, onSaveAsTemplate, onListTemplatesForApply, onResolveTemplateLayout, }: {
|
|
7
|
+
data: Data | null;
|
|
8
|
+
onChange: (data: Data) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Identity of the content currently loaded into the editor — typically
|
|
11
|
+
* `${resourceId}:${language}`. Puck seeds its internal editor state from
|
|
12
|
+
* `data` only on mount (the `data` prop is treated as *initial* data, not a
|
|
13
|
+
* controlled value), so when the surrounding editor finishes its async
|
|
14
|
+
* fetch and swaps `data` from the empty placeholder to the saved tree, Puck
|
|
15
|
+
* would otherwise keep showing the empty canvas. Threading this through as
|
|
16
|
+
* the Puck `key` forces a remount whenever a different resource/language is
|
|
17
|
+
* loaded, re-seeding from the freshly-loaded `data`. It deliberately does
|
|
18
|
+
* NOT change on every keystroke (which flows through `onChange`/draft
|
|
19
|
+
* state), so editing stays smooth and never loses focus.
|
|
20
|
+
*/
|
|
21
|
+
contentKey?: string;
|
|
22
|
+
/** Wrap the canvas in the CMS page max-width container (pages only). */
|
|
23
|
+
pageContainer?: boolean;
|
|
24
|
+
/** Page Builder palette context (default CMS content). */
|
|
25
|
+
context?: PageBuilderContext;
|
|
26
|
+
/** Content languages available for "copy from language". */
|
|
27
|
+
languages?: string[];
|
|
28
|
+
activeLanguage?: string | null;
|
|
29
|
+
/** Load another language's saved/draft content (used by Copy from language). */
|
|
30
|
+
onResolveLanguageContent?: (language: string) => Data | null | Promise<Data | null>;
|
|
31
|
+
/** Persist the current canvas as a new CMS content template. */
|
|
32
|
+
onSaveAsTemplate?: (meta: {
|
|
33
|
+
name: string;
|
|
34
|
+
code: string;
|
|
35
|
+
}, data: Data) => void | Promise<void>;
|
|
36
|
+
/** List CMS content templates for Apply template. */
|
|
37
|
+
onListTemplatesForApply?: () => Promise<Array<{
|
|
38
|
+
id: string;
|
|
39
|
+
label: string;
|
|
40
|
+
}>>;
|
|
41
|
+
/** Resolve a CMS content template layout to replace the canvas. */
|
|
42
|
+
onResolveTemplateLayout?: (templateId: string) => Data | Promise<Data>;
|
|
43
|
+
}): ReactNode;
|
|
44
|
+
export type { Data as PageBuilderData };
|
|
45
|
+
//# sourceMappingURL=PageBuilderEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageBuilderEditor.d.ts","sourceRoot":"","sources":["../../../src/admin/components/PageBuilderEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACxH,OAAO,EAAmD,KAAK,IAAI,EAAmB,MAAM,gBAAgB,CAAC;AAC7G,OAAO,yBAAyB,CAAC;AAIjC,OAAO,4CAA4C,CAAC;AAQpD,OAAO,EAKL,KAAK,kBAAkB,EACxB,MAAM,oCAAoC,CAAC;AAmY5C,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,aAAqB,EACrB,OAAe,EACf,SAAc,EACd,cAAqB,EACrB,wBAAwB,EACxB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,GACxB,EAAE;IACD,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gFAAgF;IAChF,wBAAwB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpF,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,qDAAqD;IACrD,uBAAuB,CAAC,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC9E,mEAAmE;IACnE,uBAAuB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE,GAAG,SAAS,CAidZ;AAED,YAAY,EAAE,IAAI,IAAI,eAAe,EAAE,CAAC"}
|