@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,232 @@
|
|
|
1
|
+
import { extractRootContent, isPuckItem, toPuckItemArray } from './outline-data.js';
|
|
2
|
+
/** Parent component id from a Puck zone compound id (`{parentId}:{slotName}`). */
|
|
3
|
+
export function zoneParentId(zone) {
|
|
4
|
+
return zone.split(':')[0] ?? zone;
|
|
5
|
+
}
|
|
6
|
+
/** Slot prop name from a Puck zone compound id. */
|
|
7
|
+
export function zoneSlotName(zone) {
|
|
8
|
+
const parts = zone.split(':');
|
|
9
|
+
return parts.length > 1 ? parts.slice(1).join(':') : 'content';
|
|
10
|
+
}
|
|
11
|
+
function findItemById(data, id) {
|
|
12
|
+
const visit = (items) => {
|
|
13
|
+
for (const item of items) {
|
|
14
|
+
if (item.props.id === id)
|
|
15
|
+
return item;
|
|
16
|
+
for (const value of Object.values(item.props)) {
|
|
17
|
+
const nested = toPuckItemArray(value);
|
|
18
|
+
if (nested.length > 0) {
|
|
19
|
+
const found = visit(nested);
|
|
20
|
+
if (found)
|
|
21
|
+
return found;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
};
|
|
27
|
+
const root = visit(toPuckItemArray(data.content));
|
|
28
|
+
if (root)
|
|
29
|
+
return root;
|
|
30
|
+
const zones = data.zones ?? {};
|
|
31
|
+
for (const zoneItems of Object.values(zones)) {
|
|
32
|
+
const found = visit(toPuckItemArray(zoneItems));
|
|
33
|
+
if (found)
|
|
34
|
+
return found;
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
/** Resolve the parent component type for a zone, or `'root'` for the page root. */
|
|
39
|
+
export function getZoneParentComponentType(zone, data) {
|
|
40
|
+
const parentId = zoneParentId(zone);
|
|
41
|
+
if (parentId === 'root')
|
|
42
|
+
return 'root';
|
|
43
|
+
const parent = findItemById(data, parentId);
|
|
44
|
+
return parent?.type ?? 'unknown';
|
|
45
|
+
}
|
|
46
|
+
/** True when the zone is a Row's `content` slot (valid Column parent). */
|
|
47
|
+
export function isRowContentZone(zone, data) {
|
|
48
|
+
const parent = getZoneParentComponentType(zone, data);
|
|
49
|
+
return (parent === 'cms.Row' || parent === 'transactional_emails.EmailRow') && zoneSlotName(zone) === 'content';
|
|
50
|
+
}
|
|
51
|
+
/** True when the zone is a Column's `content` slot. */
|
|
52
|
+
export function isColumnContentZone(zone, data) {
|
|
53
|
+
const parent = getZoneParentComponentType(zone, data);
|
|
54
|
+
return (parent === 'cms.Column' || parent === 'transactional_emails.EmailColumn') && zoneSlotName(zone) === 'content';
|
|
55
|
+
}
|
|
56
|
+
/** True when the zone is a Content slider's `slides` slot. */
|
|
57
|
+
export function isContentSliderSlidesZone(zone, data) {
|
|
58
|
+
return getZoneParentComponentType(zone, data) === 'cms.ContentSlider' && zoneSlotName(zone) === 'slides';
|
|
59
|
+
}
|
|
60
|
+
/** Content slider id when the item is a slide or nested inside a slide. */
|
|
61
|
+
export function resolveContentSliderIdForItem(itemId, getSelectorForId, getItemById) {
|
|
62
|
+
const selector = getSelectorForId(itemId);
|
|
63
|
+
if (!selector?.zone)
|
|
64
|
+
return null;
|
|
65
|
+
if (selector.zone.endsWith(':slides')) {
|
|
66
|
+
const sliderId = zoneParentId(selector.zone);
|
|
67
|
+
const slider = getItemById(sliderId);
|
|
68
|
+
return slider?.type === 'cms.ContentSlider' ? sliderId : null;
|
|
69
|
+
}
|
|
70
|
+
if (selector.zone.endsWith(':content')) {
|
|
71
|
+
const parentId = zoneParentId(selector.zone);
|
|
72
|
+
const parent = getItemById(parentId);
|
|
73
|
+
if (parent?.type !== 'cms.Slide')
|
|
74
|
+
return null;
|
|
75
|
+
const slideSelector = getSelectorForId(parentId);
|
|
76
|
+
if (!slideSelector?.zone?.endsWith(':slides'))
|
|
77
|
+
return null;
|
|
78
|
+
const sliderId = zoneParentId(slideSelector.zone);
|
|
79
|
+
const slider = getItemById(sliderId);
|
|
80
|
+
return slider?.type === 'cms.ContentSlider' ? sliderId : null;
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
/** Slide index in a content slider's `slides` zone, or null when unrelated. */
|
|
85
|
+
export function resolveContentSliderSlideIndex(itemId, sliderId, getSelectorForId, getItemById) {
|
|
86
|
+
const slidesZone = `${sliderId}:slides`;
|
|
87
|
+
const selector = getSelectorForId(itemId);
|
|
88
|
+
if (!selector?.zone)
|
|
89
|
+
return null;
|
|
90
|
+
if (selector.zone === slidesZone) {
|
|
91
|
+
return selector.index;
|
|
92
|
+
}
|
|
93
|
+
if (selector.zone.endsWith(':content')) {
|
|
94
|
+
const parentId = zoneParentId(selector.zone);
|
|
95
|
+
const parent = getItemById(parentId);
|
|
96
|
+
if (parent?.type !== 'cms.Slide')
|
|
97
|
+
return null;
|
|
98
|
+
const slideSelector = getSelectorForId(parentId);
|
|
99
|
+
if (slideSelector?.zone !== slidesZone)
|
|
100
|
+
return null;
|
|
101
|
+
return slideSelector.index;
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
export function getZoneItems(data, zone) {
|
|
106
|
+
const fromZone = toPuckItemArray(data.zones?.[zone]);
|
|
107
|
+
if (fromZone.length > 0)
|
|
108
|
+
return fromZone;
|
|
109
|
+
if (zone.startsWith('root:'))
|
|
110
|
+
return extractRootContent(data);
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
/** Count items in a Puck slot/dropzone from persisted editor data, with live DOM fallback. */
|
|
114
|
+
export function getSlotZoneItemCount(data, zone) {
|
|
115
|
+
const fromData = getZoneItems(data, zone);
|
|
116
|
+
if (fromData.length > 0)
|
|
117
|
+
return fromData.length;
|
|
118
|
+
if (typeof document !== 'undefined') {
|
|
119
|
+
const preview = document.querySelector('[data-puck-preview]');
|
|
120
|
+
const roots = [];
|
|
121
|
+
const iframe = preview?.querySelector('iframe');
|
|
122
|
+
if (iframe?.contentDocument)
|
|
123
|
+
roots.push(iframe.contentDocument);
|
|
124
|
+
if (preview)
|
|
125
|
+
roots.push(preview);
|
|
126
|
+
roots.push(document);
|
|
127
|
+
for (const root of roots) {
|
|
128
|
+
const dropzone = root.querySelector(`[data-puck-dropzone="${CSS.escape(zone)}"]`);
|
|
129
|
+
if (dropzone)
|
|
130
|
+
return dropzone.children.length;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return 0;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* @deprecated Puck's public API does not expose live zone indexes — use {@link getSlotZoneItemCount}.
|
|
137
|
+
*/
|
|
138
|
+
export function readPuckZoneIndexes(_getPuck) {
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
function getItemTypeAtZoneIndex(data, zone, index) {
|
|
142
|
+
const items = getZoneItems(data, zone);
|
|
143
|
+
return items[index]?.type ?? null;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Returns true when a Puck action should be reverted — Column may only live in a
|
|
147
|
+
* Row `content` slot.
|
|
148
|
+
*/
|
|
149
|
+
export function shouldRevertPuckAction(action, data, prevData) {
|
|
150
|
+
const sourceData = prevData ?? data;
|
|
151
|
+
if (action.type === 'insert') {
|
|
152
|
+
if ((action.componentType === 'cms.Column' || action.componentType === 'transactional_emails.EmailColumn') &&
|
|
153
|
+
!isRowContentZone(action.destinationZone, data)) {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
if (isContentSliderSlidesZone(action.destinationZone, data) &&
|
|
157
|
+
action.componentType !== 'cms.Slide' &&
|
|
158
|
+
// Row is wrapped into a Slide in the page-builder onAction handler.
|
|
159
|
+
action.componentType !== 'cms.Row') {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
if (action.type === 'move') {
|
|
165
|
+
const type = getItemTypeAtZoneIndex(sourceData, action.sourceZone, action.sourceIndex);
|
|
166
|
+
if ((type === 'cms.Column' || type === 'transactional_emails.EmailColumn') &&
|
|
167
|
+
!isRowContentZone(action.destinationZone, data)) {
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
if (isContentSliderSlidesZone(action.destinationZone, data) &&
|
|
171
|
+
type !== 'cms.Slide') {
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
if (action.type === 'reorder') {
|
|
177
|
+
const type = getItemTypeAtZoneIndex(sourceData, action.destinationZone, action.sourceIndex);
|
|
178
|
+
if ((type === 'cms.Column' || type === 'transactional_emails.EmailColumn') &&
|
|
179
|
+
!isRowContentZone(action.destinationZone, data)) {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
if (isContentSliderSlidesZone(action.destinationZone, data) &&
|
|
183
|
+
type !== 'cms.Slide') {
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
function visitItemsForColumnPlacement(items, parentType) {
|
|
191
|
+
for (const item of toPuckItemArray(items)) {
|
|
192
|
+
if ((item.type === 'cms.Column' || item.type === 'transactional_emails.EmailColumn') &&
|
|
193
|
+
parentType !== 'cms.Row' &&
|
|
194
|
+
parentType !== 'transactional_emails.EmailRow') {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
for (const [key, value] of Object.entries(item.props)) {
|
|
198
|
+
if (!Array.isArray(value))
|
|
199
|
+
continue;
|
|
200
|
+
const childParent = (item.type === 'cms.Row' || item.type === 'transactional_emails.EmailRow') && key === 'content'
|
|
201
|
+
? item.type
|
|
202
|
+
: (item.type === 'cms.Column' || item.type === 'transactional_emails.EmailColumn') && key === 'content'
|
|
203
|
+
? item.type
|
|
204
|
+
: item.type;
|
|
205
|
+
if (visitItemsForColumnPlacement(value, childParent)) {
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
/** True when any Column sits outside a Row `content` slot (e.g. dropped on page root). */
|
|
213
|
+
export function hasInvalidColumnPlacement(data) {
|
|
214
|
+
if (visitItemsForColumnPlacement(data.content, 'root')) {
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
const zones = data.zones ?? {};
|
|
218
|
+
for (const [zone, zoneItems] of Object.entries(zones)) {
|
|
219
|
+
const parentType = getZoneParentComponentType(zone, data);
|
|
220
|
+
const slotParent = (parentType === 'cms.Row' || parentType === 'transactional_emails.EmailRow') && zoneSlotName(zone) === 'content'
|
|
221
|
+
? parentType
|
|
222
|
+
: parentType;
|
|
223
|
+
if (visitItemsForColumnPlacement(zoneItems, slotParent === 'root' ? 'root' : slotParent)) {
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
export function isColumnItem(value) {
|
|
230
|
+
return isPuckItem(value) && value.type === 'cms.Column';
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=puck-action-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"puck-action-guards.js","sourceRoot":"","sources":["../../src/editor/puck-action-guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"puck-dnd-element.d.ts","sourceRoot":"","sources":["../../src/editor/puck-dnd-element.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAiB7E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Resolve Puck's sortable wrapper for a component id (`data-puck-dnd`). */
|
|
2
|
+
export function resolvePuckDndElement(componentId) {
|
|
3
|
+
const preview = document.querySelector('[data-puck-preview]');
|
|
4
|
+
const iframe = preview?.querySelector('iframe');
|
|
5
|
+
const roots = [];
|
|
6
|
+
if (iframe?.contentDocument?.body) {
|
|
7
|
+
roots.push(iframe.contentDocument);
|
|
8
|
+
}
|
|
9
|
+
if (preview)
|
|
10
|
+
roots.push(preview);
|
|
11
|
+
roots.push(document);
|
|
12
|
+
for (const root of roots) {
|
|
13
|
+
const el = root.querySelector(`[data-puck-dnd="${CSS.escape(componentId)}"]`);
|
|
14
|
+
if (el instanceof HTMLElement && !el.hasAttribute('data-puck-disabled')) {
|
|
15
|
+
return el;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=puck-dnd-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"puck-dnd-element.js","sourceRoot":"","sources":["../../src/editor/puck-dnd-element.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,IAAI,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,EAAE,YAAY,WAAW,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACxE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode } from 'react';
|
|
2
|
+
import { type SettingsScope } from '../types/responsive.js';
|
|
3
|
+
/** @deprecated Scope is stored in settings-scope-store; provider no longer required for field transforms. */
|
|
4
|
+
export declare function SettingsScopeProvider({ children, componentId, }: {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
componentId?: string;
|
|
7
|
+
}): ReactElement;
|
|
8
|
+
export declare function useSettingsScope(): {
|
|
9
|
+
scope: SettingsScope;
|
|
10
|
+
setScope: (scope: SettingsScope) => void;
|
|
11
|
+
};
|
|
12
|
+
export declare function SettingsScopeSelector(): ReactElement;
|
|
13
|
+
//# sourceMappingURL=settings-scope-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-scope-context.d.ts","sourceRoot":"","sources":["../../src/editor/settings-scope-context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAErF,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAUnF,6GAA6G;AAC7G,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,YAAY,CAYf;AAED,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;CAAE,CAMrG;AAID,wBAAgB,qBAAqB,IAAI,YAAY,CAsBpD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
|
+
import { FieldLabel } from '@measured/puck';
|
|
4
|
+
import { SETTINGS_SCOPE_LABELS } from '../types/responsive.js';
|
|
5
|
+
import { setStoredScope } from './settings-scope-store.js';
|
|
6
|
+
import { useComponentScope } from './use-component-scope.js';
|
|
7
|
+
import { usePageBuilderPuck } from './use-page-builder-puck.js';
|
|
8
|
+
const SettingsScopeContext = createContext(null);
|
|
9
|
+
/** @deprecated Scope is stored in settings-scope-store; provider no longer required for field transforms. */
|
|
10
|
+
export function SettingsScopeProvider({ children, componentId, }) {
|
|
11
|
+
const scope = useComponentScope(componentId);
|
|
12
|
+
const setScope = (next) => {
|
|
13
|
+
setStoredScope(componentId, next);
|
|
14
|
+
};
|
|
15
|
+
return (_jsx(SettingsScopeContext.Provider, { value: { scope, setScope }, children: children }));
|
|
16
|
+
}
|
|
17
|
+
export function useSettingsScope() {
|
|
18
|
+
const ctx = useContext(SettingsScopeContext);
|
|
19
|
+
if (!ctx) {
|
|
20
|
+
return { scope: 'base', setScope: () => undefined };
|
|
21
|
+
}
|
|
22
|
+
return ctx;
|
|
23
|
+
}
|
|
24
|
+
const SCOPE_OPTIONS = ['base', 'tablet', 'desktop'];
|
|
25
|
+
export function SettingsScopeSelector() {
|
|
26
|
+
const componentId = usePageBuilderPuck((s) => s.selectedItem?.props.id);
|
|
27
|
+
const scope = useComponentScope(componentId);
|
|
28
|
+
return (_jsxs("div", { children: [_jsx(FieldLabel, { label: "Scope settings" }), _jsx("select", { "aria-label": "Scope settings", className: "_Input-input_bsxfo_26", style: { width: '100%', boxSizing: 'border-box' }, value: scope, onChange: (e) => setStoredScope(componentId, e.target.value), children: SCOPE_OPTIONS.map((option) => (_jsx("option", { value: option, children: SETTINGS_SCOPE_LABELS[option] }, option))) })] }));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=settings-scope-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-scope-context.js","sourceRoot":"","sources":["../../src/editor/settings-scope-context.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAqC,MAAM,OAAO,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAsB,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,oBAAoB,GAAG,aAAa,CAGhC,IAAI,CAAC,CAAC;AAEhB,6GAA6G;AAC7G,MAAM,UAAU,qBAAqB,CAAC,EACpC,QAAQ,EACR,WAAW,GAIZ;IACC,MAAM,KAAK,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAG,CAAC,IAAmB,EAAQ,EAAE;QAC7C,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,YACtD,QAAQ,GACqB,CACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,aAAa,GAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAErE,MAAM,UAAU,qBAAqB;IACnC,MAAM,WAAW,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,EAAwB,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE7C,OAAO,CACL,0BACE,KAAC,UAAU,IAAC,KAAK,EAAC,gBAAgB,GAAG,EACrC,+BACa,gBAAgB,EAC3B,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EACjD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAQ,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAsB,CAAC,YAElF,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC7B,iBAAqB,KAAK,EAAE,MAAM,YAC/B,qBAAqB,CAAC,MAAM,CAAC,IADnB,MAAM,CAEV,CACV,CAAC,GACK,IACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SettingsScope } from '../types/responsive.js';
|
|
2
|
+
export declare function getStoredScope(componentId: string | undefined): SettingsScope;
|
|
3
|
+
export declare function setStoredScope(componentId: string | undefined, scope: SettingsScope): void;
|
|
4
|
+
export declare function subscribeScope(listener: () => void): () => void;
|
|
5
|
+
//# sourceMappingURL=settings-scope-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-scope-store.d.ts","sourceRoot":"","sources":["../../src/editor/settings-scope-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAK5D,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAG7E;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAM1F;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAK/D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const scopeByComponentId = new Map();
|
|
2
|
+
const listeners = new Set();
|
|
3
|
+
export function getStoredScope(componentId) {
|
|
4
|
+
if (!componentId)
|
|
5
|
+
return 'base';
|
|
6
|
+
return scopeByComponentId.get(componentId) ?? 'base';
|
|
7
|
+
}
|
|
8
|
+
export function setStoredScope(componentId, scope) {
|
|
9
|
+
if (!componentId)
|
|
10
|
+
return;
|
|
11
|
+
scopeByComponentId.set(componentId, scope);
|
|
12
|
+
for (const listener of listeners) {
|
|
13
|
+
listener();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function subscribeScope(listener) {
|
|
17
|
+
listeners.add(listener);
|
|
18
|
+
return () => {
|
|
19
|
+
listeners.delete(listener);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=settings-scope-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-scope-store.js","sourceRoot":"","sources":["../../src/editor/settings-scope-store.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAyB,CAAC;AAC5D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AAExC,MAAM,UAAU,cAAc,CAAC,WAA+B;IAC5D,IAAI,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC;IAChC,OAAO,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAA+B,EAAE,KAAoB;IAClF,IAAI,CAAC,WAAW;QAAE,OAAO;IACzB,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,QAAQ,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAoB;IACjD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type SettingsTab = 'general' | 'data' | 'items' | 'responsive';
|
|
2
|
+
export declare function getStoredSettingsTab(componentId: string | undefined): SettingsTab;
|
|
3
|
+
export declare function setStoredSettingsTab(componentId: string | undefined, tab: SettingsTab): void;
|
|
4
|
+
export declare function subscribeSettingsTab(listener: () => void): () => void;
|
|
5
|
+
//# sourceMappingURL=settings-tab-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-tab-store.d.ts","sourceRoot":"","sources":["../../src/editor/settings-tab-store.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,CAAC;AAKtE,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAGjF;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAM5F;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAKrE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const tabByComponentId = new Map();
|
|
2
|
+
const listeners = new Set();
|
|
3
|
+
export function getStoredSettingsTab(componentId) {
|
|
4
|
+
if (!componentId)
|
|
5
|
+
return 'general';
|
|
6
|
+
return tabByComponentId.get(componentId) ?? 'general';
|
|
7
|
+
}
|
|
8
|
+
export function setStoredSettingsTab(componentId, tab) {
|
|
9
|
+
if (!componentId)
|
|
10
|
+
return;
|
|
11
|
+
tabByComponentId.set(componentId, tab);
|
|
12
|
+
for (const listener of listeners) {
|
|
13
|
+
listener();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function subscribeSettingsTab(listener) {
|
|
17
|
+
listeners.add(listener);
|
|
18
|
+
return () => {
|
|
19
|
+
listeners.delete(listener);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=settings-tab-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-tab-store.js","sourceRoot":"","sources":["../../src/editor/settings-tab-store.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAuB,CAAC;AACxD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AAExC,MAAM,UAAU,oBAAoB,CAAC,WAA+B;IAClE,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACnC,OAAO,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAA+B,EAAE,GAAgB;IACpF,IAAI,CAAC,WAAW;QAAE,OAAO;IACzB,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACvC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,QAAQ,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAoB;IACvD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SettingsScope } from '../types/responsive.js';
|
|
2
|
+
/** Reactive scope for a component — reads from the module store (not React context). */
|
|
3
|
+
export declare function useComponentScope(componentId: string | undefined): SettingsScope;
|
|
4
|
+
//# sourceMappingURL=use-component-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-component-scope.d.ts","sourceRoot":"","sources":["../../src/editor/use-component-scope.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAWhF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { getStoredScope, subscribeScope } from './settings-scope-store.js';
|
|
4
|
+
/** Reactive scope for a component — reads from the module store (not React context). */
|
|
5
|
+
export function useComponentScope(componentId) {
|
|
6
|
+
const [scope, setScope] = useState(() => getStoredScope(componentId));
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
setScope(getStoredScope(componentId));
|
|
9
|
+
return subscribeScope(() => {
|
|
10
|
+
setScope(getStoredScope(componentId));
|
|
11
|
+
});
|
|
12
|
+
}, [componentId]);
|
|
13
|
+
return scope;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=use-component-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-component-scope.js","sourceRoot":"","sources":["../../src/editor/use-component-scope.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3E,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,WAA+B;IAC/D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,GAAG,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;IAErF,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QACtC,OAAO,cAAc,CAAC,GAAG,EAAE;YACzB,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Config, type PuckApi } from '@measured/puck';
|
|
2
|
+
/** Typed Puck store selector — use instead of `usePuck(fn)` (selector is ignored on that API). */
|
|
3
|
+
export declare const usePageBuilderPuck: <T = PuckApi<Config>>(selector: (state: PuckApi<Config>) => T) => T;
|
|
4
|
+
//# sourceMappingURL=use-page-builder-puck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-page-builder-puck.d.ts","sourceRoot":"","sources":["../../src/editor/use-page-builder-puck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE1E,kGAAkG;AAClG,eAAO,MAAM,kBAAkB,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAC1E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-page-builder-puck.js","sourceRoot":"","sources":["../../src/editor/use-page-builder-puck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA6B,MAAM,gBAAgB,CAAC;AAE1E,kGAAkG;AAClG,MAAM,CAAC,MAAM,kBAAkB,GAC7B,aAAa,EAAU,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type BreakpointTier } from '../types/responsive.js';
|
|
2
|
+
/**
|
|
3
|
+
* Breakpoint tier for responsive editor preview and published renders.
|
|
4
|
+
*
|
|
5
|
+
* Prefer Puck's selected Mobile / Tablet / Desktop frame width when a
|
|
6
|
+
* `PreviewViewportBridge` is mounted; otherwise use `window.innerWidth`
|
|
7
|
+
* (storefront `Render`, SSR).
|
|
8
|
+
*/
|
|
9
|
+
export declare function usePreviewBreakpointTier(): BreakpointTier;
|
|
10
|
+
//# sourceMappingURL=use-preview-breakpoint-tier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-preview-breakpoint-tier.d.ts","sourceRoot":"","sources":["../../src/editor/use-preview-breakpoint-tier.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAkCpF;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAGzD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useSyncExternalStore } from 'react';
|
|
3
|
+
import { tierFromViewportWidth } from '../types/responsive.js';
|
|
4
|
+
import { getPreviewViewportWidth, subscribePreviewViewportWidth, } from './preview-viewport-store.js';
|
|
5
|
+
function subscribeWindow(onStoreChange) {
|
|
6
|
+
if (typeof window === 'undefined')
|
|
7
|
+
return () => undefined;
|
|
8
|
+
window.addEventListener('resize', onStoreChange);
|
|
9
|
+
return () => window.removeEventListener('resize', onStoreChange);
|
|
10
|
+
}
|
|
11
|
+
function getWindowWidth() {
|
|
12
|
+
return typeof window !== 'undefined' ? window.innerWidth : 1024;
|
|
13
|
+
}
|
|
14
|
+
function getServerSnapshot() {
|
|
15
|
+
// Prefer desktop SSR so published CSS media queries (not JS tier) drive layout after hydrate.
|
|
16
|
+
return 1024;
|
|
17
|
+
}
|
|
18
|
+
function subscribe(onStoreChange) {
|
|
19
|
+
const unsubStore = subscribePreviewViewportWidth(onStoreChange);
|
|
20
|
+
const unsubWindow = subscribeWindow(onStoreChange);
|
|
21
|
+
return () => {
|
|
22
|
+
unsubStore();
|
|
23
|
+
unsubWindow();
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function getSnapshot() {
|
|
27
|
+
return getPreviewViewportWidth() ?? getWindowWidth();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Breakpoint tier for responsive editor preview and published renders.
|
|
31
|
+
*
|
|
32
|
+
* Prefer Puck's selected Mobile / Tablet / Desktop frame width when a
|
|
33
|
+
* `PreviewViewportBridge` is mounted; otherwise use `window.innerWidth`
|
|
34
|
+
* (storefront `Render`, SSR).
|
|
35
|
+
*/
|
|
36
|
+
export function usePreviewBreakpointTier() {
|
|
37
|
+
const width = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
38
|
+
return tierFromViewportWidth(width);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=use-preview-breakpoint-tier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-preview-breakpoint-tier.js","sourceRoot":"","sources":["../../src/editor/use-preview-breakpoint-tier.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAuB,MAAM,wBAAwB,CAAC;AACpF,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,6BAA6B,CAAC;AAErC,SAAS,eAAe,CAAC,aAAyB;IAChD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IAC1D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED,SAAS,iBAAiB;IACxB,8FAA8F;IAC9F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,aAAyB;IAC1C,MAAM,UAAU,GAAG,6BAA6B,CAAC,aAAa,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IACnD,OAAO,GAAS,EAAE;QAChB,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,uBAAuB,EAAE,IAAI,cAAc,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAC9E,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC"}
|
package/dist/editor.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { createPageBuilderEditorPlugin } from './editor/page-builder-plugin.js';
|
|
2
|
+
export { PageBuilderOutline } from './editor/page-builder-outline.js';
|
|
3
|
+
export { PageBuilderComponentOverlay } from './editor/page-builder-component-overlay.js';
|
|
4
|
+
export { SettingsScopeProvider, SettingsScopeSelector, useSettingsScope, } from './editor/settings-scope-context.js';
|
|
5
|
+
export { formatOutlineLabel } from './editor/format-outline-label.js';
|
|
6
|
+
export { toPuckItemArray, isPuckItem, type PuckItem } from './editor/outline-data.js';
|
|
7
|
+
export { enhancePageBuilderComponent } from './editor/enhance-component-config.js';
|
|
8
|
+
export { usePageBuilderPuck } from './editor/use-page-builder-puck.js';
|
|
9
|
+
export { createHideOnField } from './fields/hide-on-field.js';
|
|
10
|
+
export { createEditorNameField } from './fields/editor-name-field.js';
|
|
11
|
+
export { getZoneItems, getSlotZoneItemCount, readPuckZoneIndexes, getZoneParentComponentType, isColumnContentZone, isContentSliderSlidesZone, isRowContentZone, shouldRevertPuckAction, hasInvalidColumnPlacement, zoneParentId, zoneSlotName, resolveContentSliderIdForItem, resolveContentSliderSlideIndex, } from './editor/puck-action-guards.js';
|
|
12
|
+
export { resolvePuckDndElement } from './editor/puck-dnd-element.js';
|
|
13
|
+
export { carouselEditorPageCount, clampEditorCarouselPage, clearEditorCarouselPreviewLock, EditorCarouselPreviewBridge, getEditorCarouselLastSeenSelectedId, getEditorCarouselPage, getEditorCarouselPreviewFrozenSelectedId, getEditorCarouselSlideCount, isEditorCarouselPreviewLocked, registerEditorCarouselPageWriter, rememberEditorCarouselSelectedId, setEditorCarouselPage, setEditorCarouselSlideCount, subscribeEditorCarouselPreview, useEditorCarouselPage, } from './editor/editor-carousel-preview.js';
|
|
14
|
+
export { canOutlineDrop, outlineDropBeforeTarget, outlineSiblingCount, outlineStepReorder, outlineReorderAction, type OutlineDropPayload, } from './editor/outline-dnd.js';
|
|
15
|
+
//# sourceMappingURL=editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,YAAY,EACZ,YAAY,EACZ,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,8BAA8B,EAC9B,2BAA2B,EAC3B,mCAAmC,EACnC,qBAAqB,EACrB,wCAAwC,EACxC,2BAA2B,EAC3B,6BAA6B,EAC7B,gCAAgC,EAChC,gCAAgC,EAChC,qBAAqB,EACrB,2BAA2B,EAC3B,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,MAAM,yBAAyB,CAAC"}
|
package/dist/editor.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
export { createPageBuilderEditorPlugin } from './editor/page-builder-plugin.js';
|
|
3
|
+
export { PageBuilderOutline } from './editor/page-builder-outline.js';
|
|
4
|
+
export { PageBuilderComponentOverlay } from './editor/page-builder-component-overlay.js';
|
|
5
|
+
export { SettingsScopeProvider, SettingsScopeSelector, useSettingsScope, } from './editor/settings-scope-context.js';
|
|
6
|
+
export { formatOutlineLabel } from './editor/format-outline-label.js';
|
|
7
|
+
export { toPuckItemArray, isPuckItem } from './editor/outline-data.js';
|
|
8
|
+
export { enhancePageBuilderComponent } from './editor/enhance-component-config.js';
|
|
9
|
+
export { usePageBuilderPuck } from './editor/use-page-builder-puck.js';
|
|
10
|
+
export { createHideOnField } from './fields/hide-on-field.js';
|
|
11
|
+
export { createEditorNameField } from './fields/editor-name-field.js';
|
|
12
|
+
export { getZoneItems, getSlotZoneItemCount, readPuckZoneIndexes, getZoneParentComponentType, isColumnContentZone, isContentSliderSlidesZone, isRowContentZone, shouldRevertPuckAction, hasInvalidColumnPlacement, zoneParentId, zoneSlotName, resolveContentSliderIdForItem, resolveContentSliderSlideIndex, } from './editor/puck-action-guards.js';
|
|
13
|
+
export { resolvePuckDndElement } from './editor/puck-dnd-element.js';
|
|
14
|
+
export { carouselEditorPageCount, clampEditorCarouselPage, clearEditorCarouselPreviewLock, EditorCarouselPreviewBridge, getEditorCarouselLastSeenSelectedId, getEditorCarouselPage, getEditorCarouselPreviewFrozenSelectedId, getEditorCarouselSlideCount, isEditorCarouselPreviewLocked, registerEditorCarouselPageWriter, rememberEditorCarouselSelectedId, setEditorCarouselPage, setEditorCarouselSlideCount, subscribeEditorCarouselPreview, useEditorCarouselPage, } from './editor/editor-carousel-preview.js';
|
|
15
|
+
export { canOutlineDrop, outlineDropBeforeTarget, outlineSiblingCount, outlineStepReorder, outlineReorderAction, } from './editor/outline-dnd.js';
|
|
16
|
+
//# sourceMappingURL=editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAiB,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,YAAY,EACZ,YAAY,EACZ,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,8BAA8B,EAC9B,2BAA2B,EAC3B,mCAAmC,EACnC,qBAAqB,EACrB,wCAAwC,EACxC,2BAA2B,EAC3B,6BAA6B,EAC7B,gCAAgC,EAChC,gCAAgC,EAChC,qBAAqB,EACrB,2BAA2B,EAC3B,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,GAErB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ReactElement } from 'react';
|
|
2
|
+
import type { Field } from '@measured/puck';
|
|
3
|
+
import { type BackgroundProp, type BackgroundValue } from '../types/background.js';
|
|
4
|
+
declare function BackgroundFieldControl({ value, onChange, readOnly, label, }: {
|
|
5
|
+
value: BackgroundValue | undefined;
|
|
6
|
+
onChange: (value: BackgroundValue) => void;
|
|
7
|
+
readOnly?: boolean;
|
|
8
|
+
label: string;
|
|
9
|
+
}): ReactElement;
|
|
10
|
+
export declare function createBackgroundField(options?: {
|
|
11
|
+
label?: string;
|
|
12
|
+
}): Field<BackgroundProp>;
|
|
13
|
+
export { BackgroundFieldControl };
|
|
14
|
+
//# sourceMappingURL=background-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-field.d.ts","sourceRoot":"","sources":["../../src/fields/background-field.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAA4C,KAAK,cAAc,EAAE,KAAK,eAAe,EAAwB,MAAM,wBAAwB,CAAC;AAyBnJ,iBAAS,sBAAsB,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,KAAK,GACN,EAAE;IACD,KAAK,EAAE,eAAe,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,YAAY,CAsIf;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAc7F;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|