@endora-commerce/page-builder-core 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 +51 -0
- package/dist/block-name.d.ts +48 -0
- package/dist/block-name.d.ts.map +1 -0
- package/dist/block-name.js +79 -0
- package/dist/block-name.js.map +1 -0
- package/dist/block-tree.d.ts +44 -0
- package/dist/block-tree.d.ts.map +1 -0
- package/dist/block-tree.js +120 -0
- package/dist/block-tree.js.map +1 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +4 -0
- package/dist/client.js.map +1 -0
- package/dist/color-palette/context.d.ts +18 -0
- package/dist/color-palette/context.d.ts.map +1 -0
- package/dist/color-palette/context.js +11 -0
- package/dist/color-palette/context.js.map +1 -0
- package/dist/define-component.d.ts +47 -0
- package/dist/define-component.d.ts.map +1 -0
- package/dist/define-component.js +74 -0
- package/dist/define-component.js.map +1 -0
- package/dist/editor/editor-carousel-preview-ui.d.ts +7 -0
- package/dist/editor/editor-carousel-preview-ui.d.ts.map +1 -0
- package/dist/editor/editor-carousel-preview-ui.js +11 -0
- package/dist/editor/editor-carousel-preview-ui.js.map +1 -0
- package/dist/editor/editor-carousel-preview.d.ts +31 -0
- package/dist/editor/editor-carousel-preview.d.ts.map +1 -0
- package/dist/editor/editor-carousel-preview.js +109 -0
- package/dist/editor/editor-carousel-preview.js.map +1 -0
- package/dist/editor/enhance-component-config.d.ts +7 -0
- package/dist/editor/enhance-component-config.d.ts.map +1 -0
- package/dist/editor/enhance-component-config.js +55 -0
- package/dist/editor/enhance-component-config.js.map +1 -0
- package/dist/editor/field-tabs.d.ts +7 -0
- package/dist/editor/field-tabs.d.ts.map +1 -0
- package/dist/editor/field-tabs.js +29 -0
- package/dist/editor/field-tabs.js.map +1 -0
- package/dist/editor/fields-tab-panel.d.ts +9 -0
- package/dist/editor/fields-tab-panel.d.ts.map +1 -0
- package/dist/editor/fields-tab-panel.js +132 -0
- package/dist/editor/fields-tab-panel.js.map +1 -0
- package/dist/editor/format-outline-label.d.ts +2 -0
- package/dist/editor/format-outline-label.d.ts.map +1 -0
- package/dist/editor/format-outline-label.js +10 -0
- package/dist/editor/format-outline-label.js.map +1 -0
- package/dist/editor/outline-data.d.ts +13 -0
- package/dist/editor/outline-data.d.ts.map +1 -0
- package/dist/editor/outline-data.js +73 -0
- package/dist/editor/outline-data.js.map +1 -0
- package/dist/editor/outline-dnd.d.ts +15 -0
- package/dist/editor/outline-dnd.d.ts.map +1 -0
- package/dist/editor/outline-dnd.js +55 -0
- package/dist/editor/outline-dnd.js.map +1 -0
- package/dist/editor/page-builder-component-overlay.d.ts +13 -0
- package/dist/editor/page-builder-component-overlay.d.ts.map +1 -0
- package/dist/editor/page-builder-component-overlay.js +14 -0
- package/dist/editor/page-builder-component-overlay.js.map +1 -0
- package/dist/editor/page-builder-outline.d.ts +10 -0
- package/dist/editor/page-builder-outline.d.ts.map +1 -0
- package/dist/editor/page-builder-outline.js +133 -0
- package/dist/editor/page-builder-outline.js.map +1 -0
- package/dist/editor/page-builder-plugin.d.ts +6 -0
- package/dist/editor/page-builder-plugin.d.ts.map +1 -0
- package/dist/editor/page-builder-plugin.js +31 -0
- package/dist/editor/page-builder-plugin.js.map +1 -0
- package/dist/editor/preview-viewport-bridge.d.ts +9 -0
- package/dist/editor/preview-viewport-bridge.d.ts.map +1 -0
- package/dist/editor/preview-viewport-bridge.js +19 -0
- package/dist/editor/preview-viewport-bridge.js.map +1 -0
- package/dist/editor/preview-viewport-store.d.ts +4 -0
- package/dist/editor/preview-viewport-store.d.ts.map +1 -0
- package/dist/editor/preview-viewport-store.js +24 -0
- package/dist/editor/preview-viewport-store.js.map +1 -0
- package/dist/editor/puck-action-guards.d.ts +46 -0
- package/dist/editor/puck-action-guards.d.ts.map +1 -0
- package/dist/editor/puck-action-guards.js +232 -0
- package/dist/editor/puck-action-guards.js.map +1 -0
- package/dist/editor/puck-dnd-element.d.ts +3 -0
- package/dist/editor/puck-dnd-element.d.ts.map +1 -0
- package/dist/editor/puck-dnd-element.js +20 -0
- package/dist/editor/puck-dnd-element.js.map +1 -0
- package/dist/editor/settings-scope-context.d.ts +13 -0
- package/dist/editor/settings-scope-context.d.ts.map +1 -0
- package/dist/editor/settings-scope-context.js +30 -0
- package/dist/editor/settings-scope-context.js.map +1 -0
- package/dist/editor/settings-scope-store.d.ts +5 -0
- package/dist/editor/settings-scope-store.d.ts.map +1 -0
- package/dist/editor/settings-scope-store.js +22 -0
- package/dist/editor/settings-scope-store.js.map +1 -0
- package/dist/editor/settings-tab-store.d.ts +5 -0
- package/dist/editor/settings-tab-store.d.ts.map +1 -0
- package/dist/editor/settings-tab-store.js +22 -0
- package/dist/editor/settings-tab-store.js.map +1 -0
- package/dist/editor/use-component-scope.d.ts +4 -0
- package/dist/editor/use-component-scope.d.ts.map +1 -0
- package/dist/editor/use-component-scope.js +15 -0
- package/dist/editor/use-component-scope.js.map +1 -0
- package/dist/editor/use-page-builder-puck.d.ts +4 -0
- package/dist/editor/use-page-builder-puck.d.ts.map +1 -0
- package/dist/editor/use-page-builder-puck.js +4 -0
- package/dist/editor/use-page-builder-puck.js.map +1 -0
- package/dist/editor/use-preview-breakpoint-tier.d.ts +10 -0
- package/dist/editor/use-preview-breakpoint-tier.d.ts.map +1 -0
- package/dist/editor/use-preview-breakpoint-tier.js +40 -0
- package/dist/editor/use-preview-breakpoint-tier.js.map +1 -0
- package/dist/editor.d.ts +15 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +16 -0
- package/dist/editor.js.map +1 -0
- package/dist/fields/background-field.d.ts +14 -0
- package/dist/fields/background-field.d.ts.map +1 -0
- package/dist/fields/background-field.js +38 -0
- package/dist/fields/background-field.js.map +1 -0
- package/dist/fields/border-field.d.ts +5 -0
- package/dist/fields/border-field.d.ts.map +1 -0
- package/dist/fields/border-field.js +85 -0
- package/dist/fields/border-field.js.map +1 -0
- package/dist/fields/color-field-utils.d.ts +16 -0
- package/dist/fields/color-field-utils.d.ts.map +1 -0
- package/dist/fields/color-field-utils.js +45 -0
- package/dist/fields/color-field-utils.js.map +1 -0
- package/dist/fields/color-field.d.ts +5 -0
- package/dist/fields/color-field.d.ts.map +1 -0
- package/dist/fields/color-field.js +74 -0
- package/dist/fields/color-field.js.map +1 -0
- package/dist/fields/color-input-debounce.d.ts +6 -0
- package/dist/fields/color-input-debounce.d.ts.map +1 -0
- package/dist/fields/color-input-debounce.js +24 -0
- package/dist/fields/color-input-debounce.js.map +1 -0
- package/dist/fields/editor-name-field.d.ts +3 -0
- package/dist/fields/editor-name-field.d.ts.map +1 -0
- package/dist/fields/editor-name-field.js +12 -0
- package/dist/fields/editor-name-field.js.map +1 -0
- package/dist/fields/hide-on-field.d.ts +4 -0
- package/dist/fields/hide-on-field.d.ts.map +1 -0
- package/dist/fields/hide-on-field.js +26 -0
- package/dist/fields/hide-on-field.js.map +1 -0
- package/dist/fields/native-color-input.d.ts +12 -0
- package/dist/fields/native-color-input.d.ts.map +1 -0
- package/dist/fields/native-color-input.js +51 -0
- package/dist/fields/native-color-input.js.map +1 -0
- package/dist/fields/puck-field-label.d.ts +8 -0
- package/dist/fields/puck-field-label.d.ts.map +1 -0
- package/dist/fields/puck-field-label.js +8 -0
- package/dist/fields/puck-field-label.js.map +1 -0
- package/dist/fields/responsive-field-types.d.ts +21 -0
- package/dist/fields/responsive-field-types.d.ts.map +1 -0
- package/dist/fields/responsive-field-types.js +97 -0
- package/dist/fields/responsive-field-types.js.map +1 -0
- package/dist/fields/scoped-field.d.ts +19 -0
- package/dist/fields/scoped-field.d.ts.map +1 -0
- package/dist/fields/scoped-field.js +67 -0
- package/dist/fields/scoped-field.js.map +1 -0
- package/dist/fields/spacing-field.d.ts +14 -0
- package/dist/fields/spacing-field.d.ts.map +1 -0
- package/dist/fields/spacing-field.js +71 -0
- package/dist/fields/spacing-field.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/migration/frozen-block-renames.d.ts +14 -0
- package/dist/migration/frozen-block-renames.d.ts.map +1 -0
- package/dist/migration/frozen-block-renames.js +132 -0
- package/dist/migration/frozen-block-renames.js.map +1 -0
- package/dist/migration/index.d.ts +4 -0
- package/dist/migration/index.d.ts.map +1 -0
- package/dist/migration/index.js +22 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/migration/rename-block-names-sql.d.ts +28 -0
- package/dist/migration/rename-block-names-sql.d.ts.map +1 -0
- package/dist/migration/rename-block-names-sql.js +117 -0
- package/dist/migration/rename-block-names-sql.js.map +1 -0
- package/dist/palette.d.ts +47 -0
- package/dist/palette.d.ts.map +1 -0
- package/dist/palette.js +84 -0
- package/dist/palette.js.map +1 -0
- package/dist/render/responsive-styles.d.ts +19 -0
- package/dist/render/responsive-styles.d.ts.map +1 -0
- package/dist/render/responsive-styles.js +91 -0
- package/dist/render/responsive-styles.js.map +1 -0
- package/dist/types/background.d.ts +26 -0
- package/dist/types/background.d.ts.map +1 -0
- package/dist/types/background.js +76 -0
- package/dist/types/background.js.map +1 -0
- package/dist/types/box-styles.d.ts +67 -0
- package/dist/types/box-styles.d.ts.map +1 -0
- package/dist/types/box-styles.js +217 -0
- package/dist/types/box-styles.js.map +1 -0
- package/dist/types/editor-chrome.d.ts +15 -0
- package/dist/types/editor-chrome.d.ts.map +1 -0
- package/dist/types/editor-chrome.js +8 -0
- package/dist/types/editor-chrome.js.map +1 -0
- package/dist/types/hide-on.d.ts +6 -0
- package/dist/types/hide-on.d.ts.map +1 -0
- package/dist/types/hide-on.js +2 -0
- package/dist/types/hide-on.js.map +1 -0
- package/dist/types/responsive.d.ts +70 -0
- package/dist/types/responsive.d.ts.map +1 -0
- package/dist/types/responsive.js +91 -0
- package/dist/types/responsive.js.map +1 -0
- package/dist/visibility/with-hide-on.d.ts +12 -0
- package/dist/visibility/with-hide-on.d.ts.map +1 -0
- package/dist/visibility/with-hide-on.js +28 -0
- package/dist/visibility/with-hide-on.js.map +1 -0
- package/package.json +96 -0
- package/tailwind.css +14 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { getZoneItems, shouldRevertPuckAction } from './puck-action-guards.js';
|
|
2
|
+
export function canOutlineDrop(payload, targetItemId, targetZone, targetIndex, data) {
|
|
3
|
+
if (payload.itemId === targetItemId)
|
|
4
|
+
return false;
|
|
5
|
+
const moveAction = {
|
|
6
|
+
type: 'move',
|
|
7
|
+
sourceZone: payload.sourceZone,
|
|
8
|
+
sourceIndex: payload.sourceIndex,
|
|
9
|
+
destinationZone: targetZone,
|
|
10
|
+
destinationIndex: targetIndex,
|
|
11
|
+
};
|
|
12
|
+
return !shouldRevertPuckAction(moveAction, data);
|
|
13
|
+
}
|
|
14
|
+
/** Move one position up/down within the same zone (outline arrow buttons). */
|
|
15
|
+
export function outlineStepReorder(payload, zone, direction, siblingCount) {
|
|
16
|
+
const destinationIndex = payload.sourceIndex + direction;
|
|
17
|
+
if (destinationIndex < 0 || destinationIndex >= siblingCount)
|
|
18
|
+
return null;
|
|
19
|
+
return {
|
|
20
|
+
type: 'reorder',
|
|
21
|
+
sourceIndex: payload.sourceIndex,
|
|
22
|
+
destinationIndex,
|
|
23
|
+
destinationZone: zone,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** Drop dragged outline item before the target row (HTML5 DnD). */
|
|
27
|
+
export function outlineDropBeforeTarget(payload, targetZone, targetIndex) {
|
|
28
|
+
if (payload.sourceZone === targetZone) {
|
|
29
|
+
let destinationIndex = targetIndex;
|
|
30
|
+
if (payload.sourceIndex < targetIndex) {
|
|
31
|
+
destinationIndex -= 1;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
type: 'reorder',
|
|
35
|
+
sourceIndex: payload.sourceIndex,
|
|
36
|
+
destinationIndex,
|
|
37
|
+
destinationZone: targetZone,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
type: 'move',
|
|
42
|
+
sourceZone: payload.sourceZone,
|
|
43
|
+
sourceIndex: payload.sourceIndex,
|
|
44
|
+
destinationZone: targetZone,
|
|
45
|
+
destinationIndex: targetIndex,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** @deprecated Use outlineDropBeforeTarget or outlineStepReorder */
|
|
49
|
+
export function outlineReorderAction(payload, targetZone, targetIndex) {
|
|
50
|
+
return outlineDropBeforeTarget(payload, targetZone, targetIndex);
|
|
51
|
+
}
|
|
52
|
+
export function outlineSiblingCount(data, zone) {
|
|
53
|
+
return getZoneItems(data, zone).length;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=outline-dnd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outline-dnd.js","sourceRoot":"","sources":["../../src/editor/outline-dnd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAQ/E,MAAM,UAAU,cAAc,CAC5B,OAA2B,EAC3B,YAAoB,EACpB,UAAkB,EAClB,WAAmB,EACnB,IAAU;IAEV,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IAElD,MAAM,UAAU,GAAe;QAC7B,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,eAAe,EAAE,UAAU;QAC3B,gBAAgB,EAAE,WAAW;KAC9B,CAAC;IAEF,OAAO,CAAC,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB,CAChC,OAA2B,EAC3B,IAAY,EACZ,SAAiB,EACjB,YAAoB;IAEpB,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IACzD,IAAI,gBAAgB,GAAG,CAAC,IAAI,gBAAgB,IAAI,YAAY;QAAE,OAAO,IAAI,CAAC;IAE1E,OAAO;QACL,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB;QAChB,eAAe,EAAE,IAAI;KACtB,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,uBAAuB,CACrC,OAA2B,EAC3B,UAAkB,EAClB,WAAmB;IAEnB,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACtC,IAAI,gBAAgB,GAAG,WAAW,CAAC;QACnC,IAAI,OAAO,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC;YACtC,gBAAgB,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,gBAAgB;YAChB,eAAe,EAAE,UAAU;SAC5B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,eAAe,EAAE,UAAU;QAC3B,gBAAgB,EAAE,WAAW;KAC9B,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,oBAAoB,CAClC,OAA2B,EAC3B,UAAkB,EAClB,WAAmB;IAEnB,OAAO,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAU,EAAE,IAAY;IAC1D,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactElement, ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Puck component overlay — shows a small type badge on hover/selection so
|
|
4
|
+
* adjacent blocks are easier to distinguish while dragging.
|
|
5
|
+
*/
|
|
6
|
+
export declare function PageBuilderComponentOverlay({ children, hover, isSelected, componentType, }: {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
hover: boolean;
|
|
9
|
+
isSelected: boolean;
|
|
10
|
+
componentId: string;
|
|
11
|
+
componentType: string;
|
|
12
|
+
}): ReactElement;
|
|
13
|
+
//# sourceMappingURL=page-builder-component-overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-builder-component-overlay.d.ts","sourceRoot":"","sources":["../../src/editor/page-builder-component-overlay.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMrD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,QAAQ,EACR,KAAK,EACL,UAAU,EACV,aAAa,GACd,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,YAAY,CAWf"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
function humanizeComponentType(type) {
|
|
4
|
+
return type.replace(/([a-z])([A-Z])/g, '$1 $2');
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Puck component overlay — shows a small type badge on hover/selection so
|
|
8
|
+
* adjacent blocks are easier to distinguish while dragging.
|
|
9
|
+
*/
|
|
10
|
+
export function PageBuilderComponentOverlay({ children, hover, isSelected, componentType, }) {
|
|
11
|
+
const showLabel = hover || isSelected;
|
|
12
|
+
return (_jsxs("div", { className: "pb-component-overlay", children: [children, showLabel ? (_jsx("span", { className: "pb-component-overlay__label", children: humanizeComponentType(componentType) })) : null] }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=page-builder-component-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-builder-component-overlay.js","sourceRoot":"","sources":["../../src/editor/page-builder-component-overlay.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,EAC1C,QAAQ,EACR,KAAK,EACL,UAAU,EACV,aAAa,GAOd;IACC,MAAM,SAAS,GAAG,KAAK,IAAI,UAAU,CAAC;IAEtC,OAAO,CACL,eAAK,SAAS,EAAC,sBAAsB,aAClC,QAAQ,EACR,SAAS,CAAC,CAAC,CAAC,CACX,eAAM,SAAS,EAAC,6BAA6B,YAAE,qBAAqB,CAAC,aAAa,CAAC,GAAQ,CAC5F,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ReactElement } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Custom Puck outline — labels include the editor-only `editorName` prop.
|
|
4
|
+
* Puck uses this as an outline wrapper and passes default LayerTree nodes as
|
|
5
|
+
* `children`; we render our own tree from `appState.data` when possible.
|
|
6
|
+
*/
|
|
7
|
+
export declare function PageBuilderOutline({ children }: {
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}): ReactElement;
|
|
10
|
+
//# sourceMappingURL=page-builder-outline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-builder-outline.d.ts","sourceRoot":"","sources":["../../src/editor/page-builder-outline.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAmM7E;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,GAAG,YAAY,CAS7F"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from 'react';
|
|
3
|
+
import { formatOutlineLabel } from './format-outline-label.js';
|
|
4
|
+
import { collectChildItems, extractRootContent } from './outline-data.js';
|
|
5
|
+
import { canOutlineDrop, outlineDropBeforeTarget, outlineSiblingCount, outlineStepReorder, } from './outline-dnd.js';
|
|
6
|
+
import { usePageBuilderPuck } from './use-page-builder-puck.js';
|
|
7
|
+
const DRAG_MIME = 'application/x-pb-outline-item';
|
|
8
|
+
let activeOutlineDrag = null;
|
|
9
|
+
function outlineTypeIcon(type) {
|
|
10
|
+
if (type === 'cms.Row')
|
|
11
|
+
return '▦';
|
|
12
|
+
if (type === 'cms.Column' || type === 'transactional_emails.EmailColumn')
|
|
13
|
+
return '▥';
|
|
14
|
+
return '▪';
|
|
15
|
+
}
|
|
16
|
+
function OutlineItem({ item, depth }) {
|
|
17
|
+
const config = usePageBuilderPuck((s) => s.config);
|
|
18
|
+
const dispatch = usePageBuilderPuck((s) => s.dispatch);
|
|
19
|
+
const getSelectorForId = usePageBuilderPuck((s) => s.getSelectorForId);
|
|
20
|
+
const data = usePageBuilderPuck((s) => s.appState.data);
|
|
21
|
+
const selectedId = usePageBuilderPuck((s) => s.selectedItem?.props.id);
|
|
22
|
+
const [isDragging, setIsDragging] = useState(false);
|
|
23
|
+
const [dropBefore, setDropBefore] = useState(false);
|
|
24
|
+
const itemId = item.props.id;
|
|
25
|
+
if (typeof itemId !== 'string')
|
|
26
|
+
return null;
|
|
27
|
+
const selector = getSelectorForId(itemId);
|
|
28
|
+
const componentConfig = config.components[item.type];
|
|
29
|
+
const label = formatOutlineLabel(item.type, item.props, typeof componentConfig?.label === 'string' ? componentConfig.label : undefined);
|
|
30
|
+
const isSelected = selectedId === itemId;
|
|
31
|
+
const nested = collectChildItems(item.props);
|
|
32
|
+
const columnSpan = item.type === 'cms.Column' || item.type === 'transactional_emails.EmailColumn'
|
|
33
|
+
? typeof item.props.span === 'number'
|
|
34
|
+
? ` · ${item.props.span}/12`
|
|
35
|
+
: ''
|
|
36
|
+
: '';
|
|
37
|
+
const selectItem = () => {
|
|
38
|
+
if (isSelected) {
|
|
39
|
+
dispatch({ type: 'setUi', ui: { itemSelector: null } });
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const nextSelector = getSelectorForId(itemId);
|
|
43
|
+
if (nextSelector) {
|
|
44
|
+
dispatch({ type: 'setUi', ui: { itemSelector: nextSelector } });
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const payload = () => {
|
|
48
|
+
if (!selector)
|
|
49
|
+
return null;
|
|
50
|
+
return { itemId, sourceZone: selector.zone, sourceIndex: selector.index };
|
|
51
|
+
};
|
|
52
|
+
const moveWithinZone = (direction) => {
|
|
53
|
+
const drag = payload();
|
|
54
|
+
if (!drag || !selector)
|
|
55
|
+
return;
|
|
56
|
+
const action = outlineStepReorder(drag, selector.zone, direction, outlineSiblingCount(data, selector.zone));
|
|
57
|
+
if (action)
|
|
58
|
+
dispatch(action);
|
|
59
|
+
};
|
|
60
|
+
const onDragStart = (event) => {
|
|
61
|
+
const drag = payload();
|
|
62
|
+
if (!drag)
|
|
63
|
+
return;
|
|
64
|
+
activeOutlineDrag = drag;
|
|
65
|
+
setIsDragging(true);
|
|
66
|
+
event.dataTransfer.setData(DRAG_MIME, JSON.stringify(drag));
|
|
67
|
+
event.dataTransfer.effectAllowed = 'move';
|
|
68
|
+
if (event.currentTarget) {
|
|
69
|
+
event.dataTransfer.setDragImage(event.currentTarget, 16, 16);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const onDragEnd = () => {
|
|
73
|
+
activeOutlineDrag = null;
|
|
74
|
+
setIsDragging(false);
|
|
75
|
+
setDropBefore(false);
|
|
76
|
+
};
|
|
77
|
+
const onDragOver = (event) => {
|
|
78
|
+
if (!selector || !activeOutlineDrag)
|
|
79
|
+
return;
|
|
80
|
+
if (!canOutlineDrop(activeOutlineDrag, itemId, selector.zone, selector.index, data))
|
|
81
|
+
return;
|
|
82
|
+
event.preventDefault();
|
|
83
|
+
event.dataTransfer.dropEffect = 'move';
|
|
84
|
+
const bounds = event.currentTarget.getBoundingClientRect();
|
|
85
|
+
setDropBefore(event.clientY < bounds.top + bounds.height / 2);
|
|
86
|
+
};
|
|
87
|
+
const onDragLeave = () => {
|
|
88
|
+
setDropBefore(false);
|
|
89
|
+
};
|
|
90
|
+
const onDrop = (event) => {
|
|
91
|
+
event.preventDefault();
|
|
92
|
+
if (!selector || !activeOutlineDrag)
|
|
93
|
+
return;
|
|
94
|
+
const bounds = event.currentTarget.getBoundingClientRect();
|
|
95
|
+
const insertBefore = event.clientY < bounds.top + bounds.height / 2;
|
|
96
|
+
const targetIndex = insertBefore ? selector.index : selector.index + 1;
|
|
97
|
+
if (!canOutlineDrop(activeOutlineDrag, itemId, selector.zone, targetIndex, data))
|
|
98
|
+
return;
|
|
99
|
+
dispatch(outlineDropBeforeTarget(activeOutlineDrag, selector.zone, targetIndex));
|
|
100
|
+
activeOutlineDrag = null;
|
|
101
|
+
setIsDragging(false);
|
|
102
|
+
setDropBefore(false);
|
|
103
|
+
};
|
|
104
|
+
return (_jsxs("li", { className: `pb-outline-item ${item.type === 'cms.Column' || item.type === 'transactional_emails.EmailColumn' ? 'pb-outline-item--column' : ''} ${isSelected ? 'pb-outline-item--selected' : ''} ${isDragging ? 'pb-outline-item--dragging' : ''} ${dropBefore ? 'pb-outline-item--drop-before' : ''}`, style: { '--pb-outline-depth': depth }, onDragOver: onDragOver, onDragLeave: onDragLeave, onDrop: onDrop, children: [_jsxs("div", { className: "pb-outline-item__row", draggable: true, onDragStart: onDragStart, onDragEnd: onDragEnd, children: [_jsx("span", { className: "pb-outline-item__drag", "aria-hidden": true, children: "\u22EE\u22EE" }), _jsxs("button", { type: "button", className: "pb-outline-item__label", onClick: selectItem, children: [_jsx("span", { className: "pb-outline-item__icon", "aria-hidden": true, children: outlineTypeIcon(item.type) }), _jsxs("span", { className: "pb-outline-item__text", children: [label, columnSpan] })] }), _jsxs("div", { className: "pb-outline-item__actions", children: [_jsx("button", { type: "button", className: "pb-outline-item__action", "aria-label": "Move up", onClick: () => moveWithinZone(-1), children: "\u2191" }), _jsx("button", { type: "button", className: "pb-outline-item__action", "aria-label": "Move down", onClick: () => moveWithinZone(1), children: "\u2193" })] })] }), nested.length > 0 ? (_jsx("ul", { className: "pb-outline-list", children: nested.map((child) => {
|
|
105
|
+
const childId = child.props.id;
|
|
106
|
+
if (typeof childId !== 'string')
|
|
107
|
+
return null;
|
|
108
|
+
return _jsx(OutlineItem, { item: child, depth: depth + 1 }, childId);
|
|
109
|
+
}) })) : null] }));
|
|
110
|
+
}
|
|
111
|
+
function CustomOutlineTree({ items }) {
|
|
112
|
+
const list = Array.isArray(items) ? items : [];
|
|
113
|
+
return (_jsxs("ul", { className: "pb-outline-list pb-outline-list--root", children: [list.length === 0 ? _jsx("li", { className: "pb-outline-empty", children: "No items" }) : null, list.map((item) => {
|
|
114
|
+
const itemId = item.props.id;
|
|
115
|
+
if (typeof itemId !== 'string')
|
|
116
|
+
return null;
|
|
117
|
+
return _jsx(OutlineItem, { item: item, depth: 0 }, itemId);
|
|
118
|
+
})] }));
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Custom Puck outline — labels include the editor-only `editorName` prop.
|
|
122
|
+
* Puck uses this as an outline wrapper and passes default LayerTree nodes as
|
|
123
|
+
* `children`; we render our own tree from `appState.data` when possible.
|
|
124
|
+
*/
|
|
125
|
+
export function PageBuilderOutline({ children }) {
|
|
126
|
+
const data = usePageBuilderPuck((s) => s.appState.data);
|
|
127
|
+
const items = useMemo(() => extractRootContent(data), [data]);
|
|
128
|
+
if (items.length === 0 && children) {
|
|
129
|
+
return _jsx(_Fragment, { children: children });
|
|
130
|
+
}
|
|
131
|
+
return _jsx(CustomOutlineTree, { items: items });
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=page-builder-outline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-builder-outline.js","sourceRoot":"","sources":["../../src/editor/page-builder-outline.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Plugin } from '@measured/puck';
|
|
2
|
+
/**
|
|
3
|
+
* Puck plugin: tabbed fields panel, responsive field types, viewport-aware preview, outline labels.
|
|
4
|
+
*/
|
|
5
|
+
export declare function createPageBuilderEditorPlugin(): Plugin;
|
|
6
|
+
//# sourceMappingURL=page-builder-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-builder-plugin.d.ts","sourceRoot":"","sources":["../../src/editor/page-builder-plugin.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAsC7C;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CAUtD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { FieldsTabPanel } from './fields-tab-panel.js';
|
|
4
|
+
import { PageBuilderComponentOverlay } from './page-builder-component-overlay.js';
|
|
5
|
+
import { PageBuilderOutline } from './page-builder-outline.js';
|
|
6
|
+
import { PreviewViewportBridge } from './preview-viewport-bridge.js';
|
|
7
|
+
import { renderResponsiveNumberField, renderResponsiveSelectField } from '../fields/responsive-field-types.js';
|
|
8
|
+
/** Stable references — recreating these remounts Puck fields and drops input focus. */
|
|
9
|
+
const STABLE_FIELD_TYPES = {
|
|
10
|
+
number: (props) => renderResponsiveNumberField(props),
|
|
11
|
+
select: (props) => renderResponsiveSelectField(props),
|
|
12
|
+
};
|
|
13
|
+
const STABLE_FIELDS_OVERRIDE = ({ children, isLoading, }) => _jsx(FieldsTabPanel, { isLoading: isLoading, children: children });
|
|
14
|
+
const STABLE_OUTLINE_OVERRIDE = ({ children }) => (_jsx(PageBuilderOutline, { children: children }));
|
|
15
|
+
const STABLE_COMPONENT_OVERLAY_OVERRIDE = (props) => _jsx(PageBuilderComponentOverlay, { ...props });
|
|
16
|
+
const STABLE_PUCK_OVERRIDE = ({ children }) => (_jsx(PreviewViewportBridge, { children: children }));
|
|
17
|
+
/**
|
|
18
|
+
* Puck plugin: tabbed fields panel, responsive field types, viewport-aware preview, outline labels.
|
|
19
|
+
*/
|
|
20
|
+
export function createPageBuilderEditorPlugin() {
|
|
21
|
+
return {
|
|
22
|
+
overrides: {
|
|
23
|
+
puck: STABLE_PUCK_OVERRIDE,
|
|
24
|
+
fields: STABLE_FIELDS_OVERRIDE,
|
|
25
|
+
outline: STABLE_OUTLINE_OVERRIDE,
|
|
26
|
+
componentOverlay: STABLE_COMPONENT_OVERLAY_OVERRIDE,
|
|
27
|
+
fieldTypes: STABLE_FIELD_TYPES,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=page-builder-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-builder-plugin.js","sourceRoot":"","sources":["../../src/editor/page-builder-plugin.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAE/G,uFAAuF;AACvF,MAAM,kBAAkB,GAAG;IACzB,MAAM,EAAE,CAAC,KAAwD,EAAE,EAAE,CAAC,2BAA2B,CAAC,KAAK,CAAC;IACxG,MAAM,EAAE,CAAC,KAAwD,EAAE,EAAE,CAAC,2BAA2B,CAAC,KAAK,CAAC;CAC1C,CAAC;AAEjE,MAAM,sBAAsB,GAAG,CAAC,EAC9B,QAAQ,EACR,SAAS,GAKV,EAAgB,EAAE,CAAC,KAAC,cAAc,IAAC,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAkB,CAAC;AAEtF,MAAM,uBAAuB,GAAG,CAAC,EAAE,QAAQ,EAA2B,EAAgB,EAAE,CAAC,CACvF,KAAC,kBAAkB,cAAE,QAAQ,GAAsB,CACpD,CAAC;AAEF,MAAM,iCAAiC,GAAG,CAAC,KAM1C,EAAgB,EAAE,CAAC,KAAC,2BAA2B,OAAK,KAAK,GAAI,CAAC;AAE/D,MAAM,oBAAoB,GAAG,CAAC,EAAE,QAAQ,EAA2B,EAAgB,EAAE,CAAC,CACpF,KAAC,qBAAqB,cAAE,QAAQ,GAAyB,CAC1D,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,SAAS,EAAE;YACT,IAAI,EAAE,oBAAoB;YAC1B,MAAM,EAAE,sBAAsB;YAC9B,OAAO,EAAE,uBAAuB;YAChC,gBAAgB,EAAE,iCAAiC;YACnD,UAAU,EAAE,kBAAkB;SAC/B;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Syncs Puck's Mobile / Tablet / Desktop frame width into the preview viewport store
|
|
4
|
+
* so `usePreviewBreakpointTier` matches the selected canvas, not the admin window.
|
|
5
|
+
*/
|
|
6
|
+
export declare function PreviewViewportBridge({ children }: {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}): ReactElement;
|
|
9
|
+
//# sourceMappingURL=preview-viewport-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-viewport-bridge.d.ts","sourceRoot":"","sources":["../../src/editor/preview-viewport-bridge.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3E;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,GAAG,YAAY,CAUzF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useLayoutEffect } from 'react';
|
|
4
|
+
import { usePageBuilderPuck } from './use-page-builder-puck.js';
|
|
5
|
+
import { setPreviewViewportWidth } from './preview-viewport-store.js';
|
|
6
|
+
/**
|
|
7
|
+
* Syncs Puck's Mobile / Tablet / Desktop frame width into the preview viewport store
|
|
8
|
+
* so `usePreviewBreakpointTier` matches the selected canvas, not the admin window.
|
|
9
|
+
*/
|
|
10
|
+
export function PreviewViewportBridge({ children }) {
|
|
11
|
+
const viewportWidth = usePageBuilderPuck((s) => s.appState.ui.viewports.current.width);
|
|
12
|
+
useLayoutEffect(() => {
|
|
13
|
+
const width = typeof viewportWidth === 'number' && Number.isFinite(viewportWidth) ? viewportWidth : null;
|
|
14
|
+
setPreviewViewportWidth(width);
|
|
15
|
+
return () => setPreviewViewportWidth(null);
|
|
16
|
+
}, [viewportWidth]);
|
|
17
|
+
return _jsx(_Fragment, { children: children });
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=preview-viewport-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-viewport-bridge.js","sourceRoot":"","sources":["../../src/editor/preview-viewport-bridge.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,eAAe,EAAqC,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAE,QAAQ,EAA2B;IACzE,MAAM,aAAa,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAEvF,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,KAAK,GAAG,OAAO,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QACzG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO,GAAS,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function setPreviewViewportWidth(width: number | null): void;
|
|
2
|
+
export declare function getPreviewViewportWidth(): number | null;
|
|
3
|
+
export declare function subscribePreviewViewportWidth(onStoreChange: () => void): () => void;
|
|
4
|
+
//# sourceMappingURL=preview-viewport-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-viewport-store.d.ts","sourceRoot":"","sources":["../../src/editor/preview-viewport-store.ts"],"names":[],"mappings":"AAUA,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAIlE;AAED,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAEvD;AAED,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAKnF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
/**
|
|
3
|
+
* Publishes Puck's selected preview viewport width for editing-tier resolution.
|
|
4
|
+
* Components on the storefront leave this unset and fall back to `window.innerWidth`.
|
|
5
|
+
*/
|
|
6
|
+
let previewViewportWidth = null;
|
|
7
|
+
const listeners = new Set();
|
|
8
|
+
export function setPreviewViewportWidth(width) {
|
|
9
|
+
if (previewViewportWidth === width)
|
|
10
|
+
return;
|
|
11
|
+
previewViewportWidth = width;
|
|
12
|
+
for (const listener of listeners)
|
|
13
|
+
listener();
|
|
14
|
+
}
|
|
15
|
+
export function getPreviewViewportWidth() {
|
|
16
|
+
return previewViewportWidth;
|
|
17
|
+
}
|
|
18
|
+
export function subscribePreviewViewportWidth(onStoreChange) {
|
|
19
|
+
listeners.add(onStoreChange);
|
|
20
|
+
return () => {
|
|
21
|
+
listeners.delete(onStoreChange);
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=preview-viewport-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-viewport-store.js","sourceRoot":"","sources":["../../src/editor/preview-viewport-store.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;GAGG;AAEH,IAAI,oBAAoB,GAAkB,IAAI,CAAC;AAC/C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AAExC,MAAM,UAAU,uBAAuB,CAAC,KAAoB;IAC1D,IAAI,oBAAoB,KAAK,KAAK;QAAE,OAAO;IAC3C,oBAAoB,GAAG,KAAK,CAAC;IAC7B,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,aAAyB;IACrE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7B,OAAO,GAAS,EAAE;QAChB,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Data, PuckAction } from '@measured/puck';
|
|
2
|
+
import { type PuckItem } from './outline-data.js';
|
|
3
|
+
/** Parent component id from a Puck zone compound id (`{parentId}:{slotName}`). */
|
|
4
|
+
export declare function zoneParentId(zone: string): string;
|
|
5
|
+
/** Slot prop name from a Puck zone compound id. */
|
|
6
|
+
export declare function zoneSlotName(zone: string): string;
|
|
7
|
+
/** Resolve the parent component type for a zone, or `'root'` for the page root. */
|
|
8
|
+
export declare function getZoneParentComponentType(zone: string, data: Data): string;
|
|
9
|
+
/** True when the zone is a Row's `content` slot (valid Column parent). */
|
|
10
|
+
export declare function isRowContentZone(zone: string, data: Data): boolean;
|
|
11
|
+
/** True when the zone is a Column's `content` slot. */
|
|
12
|
+
export declare function isColumnContentZone(zone: string, data: Data): boolean;
|
|
13
|
+
/** True when the zone is a Content slider's `slides` slot. */
|
|
14
|
+
export declare function isContentSliderSlidesZone(zone: string, data: Data): boolean;
|
|
15
|
+
export type PuckItemSelector = {
|
|
16
|
+
zone?: string;
|
|
17
|
+
index: number;
|
|
18
|
+
};
|
|
19
|
+
/** Content slider id when the item is a slide or nested inside a slide. */
|
|
20
|
+
export declare function resolveContentSliderIdForItem(itemId: string, getSelectorForId: (id: string) => PuckItemSelector | undefined, getItemById: (id: string) => PuckItem | undefined): string | null;
|
|
21
|
+
/** Slide index in a content slider's `slides` zone, or null when unrelated. */
|
|
22
|
+
export declare function resolveContentSliderSlideIndex(itemId: string, sliderId: string, getSelectorForId: (id: string) => PuckItemSelector | undefined, getItemById: (id: string) => PuckItem | undefined): number | null;
|
|
23
|
+
export declare function getZoneItems(data: Data, zone: string): PuckItem[];
|
|
24
|
+
/** Count items in a Puck slot/dropzone from persisted editor data, with live DOM fallback. */
|
|
25
|
+
export declare function getSlotZoneItemCount(data: Data, zone: string): number;
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Puck's public API does not expose live zone indexes — use {@link getSlotZoneItemCount}.
|
|
28
|
+
*/
|
|
29
|
+
export declare function readPuckZoneIndexes(_getPuck: () => {
|
|
30
|
+
appState: {
|
|
31
|
+
data: Data;
|
|
32
|
+
};
|
|
33
|
+
}): {
|
|
34
|
+
zones?: Record<string, {
|
|
35
|
+
contentIds?: string[];
|
|
36
|
+
}>;
|
|
37
|
+
} | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Returns true when a Puck action should be reverted — Column may only live in a
|
|
40
|
+
* Row `content` slot.
|
|
41
|
+
*/
|
|
42
|
+
export declare function shouldRevertPuckAction(action: PuckAction, data: Data, prevData?: Data): boolean;
|
|
43
|
+
/** True when any Column sits outside a Row `content` slot (e.g. dropped on page root). */
|
|
44
|
+
export declare function hasInvalidColumnPlacement(data: Data): boolean;
|
|
45
|
+
export declare function isColumnItem(value: unknown): value is PuckItem;
|
|
46
|
+
//# sourceMappingURL=puck-action-guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"puck-action-guards.d.ts","sourceRoot":"","sources":["../../src/editor/puck-action-guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAmD,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEnG,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AA6BD,mFAAmF;AACnF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAK3E;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAGlE;AAED,uDAAuD;AACvD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAGrE;AAED,8DAA8D;AAC9D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAE3E;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,2EAA2E;AAC3E,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,EAC9D,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,QAAQ,GAAG,SAAS,GAChD,MAAM,GAAG,IAAI,CAsBf;AAED,+EAA+E;AAC/E,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,EAC9D,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,QAAQ,GAAG,SAAS,GAChD,MAAM,GAAG,IAAI,CAmBf;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAKjE;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBrE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM;IAAE,QAAQ,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,CAAA;CAAE,GAC3C;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,SAAS,CAEnE;AAOD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,IAAI,EACV,QAAQ,CAAC,EAAE,IAAI,GACd,OAAO,CAwDT;AA6BD,0FAA0F;AAC1F,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAkB7D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE9D"}
|