@kywi-software/core 0.11.0 → 0.12.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/AGENT-PATTERNS.md +96 -10
- package/dist/admin/content-form.d.ts.map +1 -1
- package/dist/admin/content-form.js +97 -10
- package/dist/admin/content-form.js.map +1 -1
- package/dist/admin/layout-editor/component-actions.d.ts +219 -22
- package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
- package/dist/admin/layout-editor/component-actions.js +356 -36
- package/dist/admin/layout-editor/component-actions.js.map +1 -1
- package/dist/admin/layout-editor/component-fork.d.ts +224 -0
- package/dist/admin/layout-editor/component-fork.d.ts.map +1 -0
- package/dist/admin/layout-editor/component-fork.js +342 -0
- package/dist/admin/layout-editor/component-fork.js.map +1 -0
- package/dist/admin/layout-editor/editor-canvas.d.ts +8 -0
- package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.js +120 -12
- package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
- package/dist/admin/layout-editor/editor-dialog.d.ts +164 -0
- package/dist/admin/layout-editor/editor-dialog.d.ts.map +1 -0
- package/dist/admin/layout-editor/editor-dialog.js +195 -0
- package/dist/admin/layout-editor/editor-dialog.js.map +1 -0
- package/dist/admin/layout-editor/editor-state.d.ts +76 -0
- package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-state.js +47 -1
- package/dist/admin/layout-editor/editor-state.js.map +1 -1
- package/dist/admin/layout-editor/editor.css +279 -2
- package/dist/admin/layout-editor/index.d.ts +10 -1
- package/dist/admin/layout-editor/index.d.ts.map +1 -1
- package/dist/admin/layout-editor/index.js +11 -1
- package/dist/admin/layout-editor/index.js.map +1 -1
- package/dist/admin/layout-editor/layout-editor.d.ts +58 -1
- package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
- package/dist/admin/layout-editor/layout-editor.js +160 -190
- package/dist/admin/layout-editor/layout-editor.js.map +1 -1
- package/dist/admin/layout-editor/linked-component.d.ts +39 -0
- package/dist/admin/layout-editor/linked-component.d.ts.map +1 -0
- package/dist/admin/layout-editor/linked-component.js +42 -0
- package/dist/admin/layout-editor/linked-component.js.map +1 -0
- package/dist/admin/layout-editor/module-overlay.d.ts +10 -1
- package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/module-overlay.js +33 -4
- package/dist/admin/layout-editor/module-overlay.js.map +1 -1
- package/dist/admin/layout-editor/node-lookup.d.ts +35 -0
- package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -1
- package/dist/admin/layout-editor/node-lookup.js +91 -0
- package/dist/admin/layout-editor/node-lookup.js.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.js +114 -23
- package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
- package/dist/admin/layout-editor/props-panel.d.ts +54 -1
- package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
- package/dist/admin/layout-editor/props-panel.js +118 -9
- package/dist/admin/layout-editor/props-panel.js.map +1 -1
- package/dist/admin/layout-editor/section-overlay.d.ts +9 -1
- package/dist/admin/layout-editor/section-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-overlay.js +14 -4
- package/dist/admin/layout-editor/section-overlay.js.map +1 -1
- package/dist/admin/layout-editor/section-template-picker.d.ts +27 -1
- package/dist/admin/layout-editor/section-template-picker.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-template-picker.js +71 -17
- package/dist/admin/layout-editor/section-template-picker.js.map +1 -1
- package/dist/admin/layout-editor/use-component-connect.d.ts +61 -0
- package/dist/admin/layout-editor/use-component-connect.d.ts.map +1 -0
- package/dist/admin/layout-editor/use-component-connect.js +292 -0
- package/dist/admin/layout-editor/use-component-connect.js.map +1 -0
- package/dist/admin/layout-editor/use-component-fork.d.ts +123 -0
- package/dist/admin/layout-editor/use-component-fork.d.ts.map +1 -0
- package/dist/admin/layout-editor/use-component-fork.js +346 -0
- package/dist/admin/layout-editor/use-component-fork.js.map +1 -0
- package/dist/admin/layout-editor/use-component-library.d.ts +94 -0
- package/dist/admin/layout-editor/use-component-library.d.ts.map +1 -0
- package/dist/admin/layout-editor/use-component-library.js +55 -0
- package/dist/admin/layout-editor/use-component-library.js.map +1 -0
- package/dist/admin/registry.d.ts +11 -2
- package/dist/admin/registry.d.ts.map +1 -1
- package/dist/admin/registry.js +40 -4
- package/dist/admin/registry.js.map +1 -1
- package/dist/admin/server.d.ts +1 -0
- package/dist/admin/server.d.ts.map +1 -1
- package/dist/admin/server.js +5 -0
- package/dist/admin/server.js.map +1 -1
- package/dist/admin/styles/admin.css +43 -0
- package/dist/admin/surfaces/components/component-edit.d.ts +3 -0
- package/dist/admin/surfaces/components/component-edit.d.ts.map +1 -0
- package/dist/admin/surfaces/components/component-edit.js +235 -0
- package/dist/admin/surfaces/components/component-edit.js.map +1 -0
- package/dist/admin/surfaces/components/components-data.d.ts +153 -0
- package/dist/admin/surfaces/components/components-data.d.ts.map +1 -0
- package/dist/admin/surfaces/components/components-data.js +154 -0
- package/dist/admin/surfaces/components/components-data.js.map +1 -0
- package/dist/admin/surfaces/components/components-list.d.ts +3 -0
- package/dist/admin/surfaces/components/components-list.d.ts.map +1 -0
- package/dist/admin/surfaces/components/components-list.js +196 -0
- package/dist/admin/surfaces/components/components-list.js.map +1 -0
- package/dist/admin/surfaces/components/definition-canvas.d.ts +73 -0
- package/dist/admin/surfaces/components/definition-canvas.d.ts.map +1 -0
- package/dist/admin/surfaces/components/definition-canvas.js +207 -0
- package/dist/admin/surfaces/components/definition-canvas.js.map +1 -0
- package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -1
- package/dist/admin/surfaces/layouts/layout-editor-client.js +14 -2
- package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -1
- package/dist/admin/surfaces/layouts/layouts-data.d.ts +3 -14
- package/dist/admin/surfaces/layouts/layouts-data.d.ts.map +1 -1
- package/dist/admin/surfaces/layouts/layouts-data.js +4 -7
- package/dist/admin/surfaces/layouts/layouts-data.js.map +1 -1
- package/dist/admin/surfaces/layouts/layouts-list.d.ts.map +1 -1
- package/dist/admin/surfaces/layouts/layouts-list.js +16 -22
- package/dist/admin/surfaces/layouts/layouts-list.js.map +1 -1
- package/dist/admin/surfaces/settings/admin-features.d.ts.map +1 -1
- package/dist/admin/surfaces/settings/admin-features.js +1 -0
- package/dist/admin/surfaces/settings/admin-features.js.map +1 -1
- package/dist/api/bulk-routes.d.ts.map +1 -1
- package/dist/api/bulk-routes.js +25 -0
- package/dist/api/bulk-routes.js.map +1 -1
- package/dist/api/changeset-routes.d.ts.map +1 -1
- package/dist/api/changeset-routes.js +17 -3
- package/dist/api/changeset-routes.js.map +1 -1
- package/dist/api/component-routes.d.ts.map +1 -1
- package/dist/api/component-routes.js +228 -8
- package/dist/api/component-routes.js.map +1 -1
- package/dist/api/content-routes.d.ts.map +1 -1
- package/dist/api/content-routes.js +64 -0
- package/dist/api/content-routes.js.map +1 -1
- package/dist/api/feed-routes.d.ts +6 -6
- package/dist/api/graphql/resolvers.d.ts +4 -4
- package/dist/api/layout-routes.d.ts.map +1 -1
- package/dist/api/layout-routes.js +4 -17
- package/dist/api/layout-routes.js.map +1 -1
- package/dist/api/layout-write-guard.d.ts +80 -0
- package/dist/api/layout-write-guard.d.ts.map +1 -0
- package/dist/api/layout-write-guard.js +88 -0
- package/dist/api/layout-write-guard.js.map +1 -0
- package/dist/api/section-template-routes.d.ts.map +1 -1
- package/dist/api/section-template-routes.js +11 -0
- package/dist/api/section-template-routes.js.map +1 -1
- package/dist/api/translation-routes.d.ts.map +1 -1
- package/dist/api/translation-routes.js +8 -0
- package/dist/api/translation-routes.js.map +1 -1
- package/dist/api/version-routes.d.ts.map +1 -1
- package/dist/api/version-routes.js +20 -8
- package/dist/api/version-routes.js.map +1 -1
- package/dist/api/workflow-routes.d.ts.map +1 -1
- package/dist/api/workflow-routes.js +53 -8
- package/dist/api/workflow-routes.js.map +1 -1
- package/dist/db/analytics-queries.d.ts +3 -3
- package/dist/db/apply-snapshot.d.ts +75 -8
- package/dist/db/apply-snapshot.d.ts.map +1 -1
- package/dist/db/apply-snapshot.js +104 -8
- package/dist/db/apply-snapshot.js.map +1 -1
- package/dist/db/audit-queries.d.ts +12 -12
- package/dist/db/category-queries.d.ts +3 -3
- package/dist/db/changeset-audit-queries.d.ts +4 -4
- package/dist/db/changeset-queries.d.ts +7 -7
- package/dist/db/comment-queries.d.ts +8 -8
- package/dist/db/comment-subscription-queries.d.ts +2 -2
- package/dist/db/component-instance-queries.d.ts +197 -0
- package/dist/db/component-instance-queries.d.ts.map +1 -0
- package/dist/db/component-instance-queries.js +405 -0
- package/dist/db/component-instance-queries.js.map +1 -0
- package/dist/db/content-queries.d.ts.map +1 -1
- package/dist/db/content-queries.js +39 -2
- package/dist/db/content-queries.js.map +1 -1
- package/dist/db/extension-queries.d.ts +7 -7
- package/dist/db/feed-queries.d.ts +3 -3
- package/dist/db/index.d.ts +1 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/layout-queries.d.ts +13 -1
- package/dist/db/layout-queries.d.ts.map +1 -1
- package/dist/db/layout-queries.js +52 -7
- package/dist/db/layout-queries.js.map +1 -1
- package/dist/db/locale-queries.d.ts.map +1 -1
- package/dist/db/locale-queries.js +0 -0
- package/dist/db/locale-queries.js.map +1 -1
- package/dist/db/media-queries.d.ts +12 -12
- package/dist/db/revision-queries.d.ts +3 -3
- package/dist/db/site-admin-queries.d.ts +2 -2
- package/dist/db/site-membership-queries.d.ts +3 -3
- package/dist/db/site-plugin-queries.d.ts +2 -2
- package/dist/db/site-queries.d.ts +6 -6
- package/dist/db/version-queries.d.ts +12 -12
- package/dist/db/webhook-queries.d.ts +11 -11
- package/dist/db/workflow-queries.d.ts +6 -6
- package/dist/db/workflow-queries.d.ts.map +1 -1
- package/dist/db/workflow-queries.js +11 -2
- package/dist/db/workflow-queries.js.map +1 -1
- package/dist/layout/component-refs.d.ts +465 -0
- package/dist/layout/component-refs.d.ts.map +1 -0
- package/dist/layout/component-refs.js +848 -0
- package/dist/layout/component-refs.js.map +1 -0
- package/dist/layout/index.d.ts +2 -1
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +1 -0
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/module-permissions.d.ts +49 -1
- package/dist/layout/module-permissions.d.ts.map +1 -1
- package/dist/layout/module-permissions.js +117 -6
- package/dist/layout/module-permissions.js.map +1 -1
- package/dist/layout/renderer.d.ts +51 -4
- package/dist/layout/renderer.d.ts.map +1 -1
- package/dist/layout/renderer.js +36 -38
- package/dist/layout/renderer.js.map +1 -1
- package/dist/layout/types.d.ts +42 -0
- package/dist/layout/types.d.ts.map +1 -1
- package/dist/layout/types.js +54 -11
- package/dist/layout/types.js.map +1 -1
- package/dist/schema/base.d.ts +1 -1
- package/dist/schema/components.d.ts +150 -0
- package/dist/schema/components.d.ts.map +1 -1
- package/dist/schema/components.js +50 -4
- package/dist/schema/components.js.map +1 -1
- package/dist/versioning/scheduler.d.ts +8 -0
- package/dist/versioning/scheduler.d.ts.map +1 -1
- package/dist/versioning/scheduler.js +21 -7
- package/dist/versioning/scheduler.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-overlay.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/module-overlay.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"module-overlay.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/module-overlay.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAI/E;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,MAAM,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,KAAK,uBAAuB,GAAG,IAAI,CAAA;IACzF,8EAA8E;IAC9E,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,uEAAuE;IACvE,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;IAC3D,uEAAuE;IACvE,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;sDAKkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iFAAiF;IACjF,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACrC;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC7B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,KAAK,EACL,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAS,EACT,OAAe,EACf,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,QAAQ,GACT,EAAE,kBAAkB,2CAqapB"}
|
|
@@ -4,7 +4,8 @@ import React from 'react';
|
|
|
4
4
|
import { useSortable } from '@dnd-kit/sortable';
|
|
5
5
|
import { CSS } from '@dnd-kit/utilities';
|
|
6
6
|
import { EditorIcon } from './editor-icons.js';
|
|
7
|
-
|
|
7
|
+
import { LinkedComponentPill } from './linked-component.js';
|
|
8
|
+
export function ModuleOverlay({ moduleId, instanceId, columnId, index, isSelected, onSelect, actions, typeLabel, inPlace = false, moduleType, inlineText, onInlineFallback, componentId, componentName, children, }) {
|
|
8
9
|
const { attributes, listeners, setNodeRef, transform, transition } = useSortable({
|
|
9
10
|
id: moduleId,
|
|
10
11
|
// `moduleType` (kywi-cms#139 review): without it, `useEditorDnd`'s
|
|
@@ -188,6 +189,21 @@ export function ModuleOverlay({ moduleId, instanceId, columnId, index, isSelecte
|
|
|
188
189
|
React.useEffect(() => {
|
|
189
190
|
if (!isEditing || abandonedRef.current)
|
|
190
191
|
return;
|
|
192
|
+
// …but only while this module is still IN the document. When the whole
|
|
193
|
+
// wrapper has been detached — the React tree is still mounted, its DOM is
|
|
194
|
+
// not: a host that removed the editor's container node, a test root whose
|
|
195
|
+
// container was taken out of `document.body` — then every element
|
|
196
|
+
// re-resolution could find lives inside that same detached wrapper, so it
|
|
197
|
+
// comes back disconnected too, this effect fires again on the render
|
|
198
|
+
// `reattach()` just caused, and the two effects ping-pong forever: an
|
|
199
|
+
// unbounded render loop that pins a core and exhausts the heap. Latent
|
|
200
|
+
// since kywi-cms#145 (it needs one render AFTER the detach to start, and
|
|
201
|
+
// nothing used to produce one); the component library loading in the shell
|
|
202
|
+
// is such a render, which is how kywi-cms#147 found it. There is nothing on
|
|
203
|
+
// screen to recover onto in that state anyway, and if the wrapper is
|
|
204
|
+
// re-attached the next render reaches the recovery again.
|
|
205
|
+
if (!hostRef.current?.isConnected)
|
|
206
|
+
return;
|
|
191
207
|
if (!isOrphanedEdit())
|
|
192
208
|
return;
|
|
193
209
|
reattach();
|
|
@@ -300,7 +316,13 @@ export function ModuleOverlay({ moduleId, instanceId, columnId, index, isSelecte
|
|
|
300
316
|
: onInlineFallback
|
|
301
317
|
? { onDoubleClick: handleDoubleClick }
|
|
302
318
|
: {};
|
|
303
|
-
const chrome = (_jsxs(_Fragment, { children: [typeLabel && (_jsx("span", { className: inPlace ? 'kywi-ip-chip' : 'kywi-editor-module-type-chip', "data-kywi-editor-chrome": "", contentEditable: false, children: typeLabel })),
|
|
319
|
+
const chrome = (_jsxs(_Fragment, { children: [typeLabel && (_jsx("span", { className: inPlace ? 'kywi-ip-chip' : 'kywi-editor-module-type-chip', "data-kywi-editor-chrome": "", contentEditable: false, children: typeLabel })), componentId && (
|
|
320
|
+
// Deliberately NOT `.kywi-ip-chrome`: that class is invisible and
|
|
321
|
+
// click-through until its owner is hovered or selected, and a linked
|
|
322
|
+
// instance must announce itself BEFORE anyone reaches for it. It takes
|
|
323
|
+
// the same z-tier through its own rule, exactly as `.kywi-ip-insert-btn`
|
|
324
|
+
// does (see the stacking contract in editor.css).
|
|
325
|
+
_jsx("span", { className: inPlace ? 'kywi-ip-module-linked-tag' : 'kywi-editor-module-linked-tag', "data-kywi-editor-chrome": "", contentEditable: false, children: _jsx(LinkedComponentPill, { name: componentName }) })), _jsxs("div", { className: inPlace ? 'kywi-ip-chrome kywi-ip-module-actions' : 'kywi-editor-module-actions', "data-kywi-editor-chrome": "", contentEditable: false, children: [_jsx("button", { type: "button", className: "kywi-editor-module-action-btn kywi-editor-module-drag-handle", "aria-label": "Drag to reorder", title: "Drag to reorder", ...listeners, children: _jsx(EditorIcon, { name: "grip", size: 14 }) }), actions?.map((action, i) => (_jsx("button", { type: "button", className: "kywi-editor-module-action-btn", onClick: (e) => {
|
|
304
326
|
e.stopPropagation();
|
|
305
327
|
action.onClick();
|
|
306
328
|
}, title: action.label, "aria-label": action.label, children: _jsx(EditorIcon, { name: action.icon, size: 14 }) }, i)))] })] }));
|
|
@@ -311,10 +333,17 @@ export function ModuleOverlay({ moduleId, instanceId, columnId, index, isSelecte
|
|
|
311
333
|
'kywi-ip-module',
|
|
312
334
|
isSelected ? 'kywi-ip-module--selected' : null,
|
|
313
335
|
isEditing ? 'kywi-ip-module--editing' : null,
|
|
336
|
+
componentId ? 'kywi-ip-module--linked' : null,
|
|
314
337
|
]
|
|
315
338
|
.filter(Boolean)
|
|
316
339
|
.join(' ')
|
|
317
|
-
:
|
|
318
|
-
|
|
340
|
+
: [
|
|
341
|
+
'kywi-editor-module',
|
|
342
|
+
isSelected ? 'kywi-editor-module--selected' : null,
|
|
343
|
+
componentId ? 'kywi-editor-module--linked' : null,
|
|
344
|
+
]
|
|
345
|
+
.filter(Boolean)
|
|
346
|
+
.join(' ');
|
|
347
|
+
return (_jsxs("div", { ref: setRefs, className: className, style: style, onClick: handleClick, "data-module-id": moduleId, "data-kywi-module-slot": "", ...(componentId ? { 'data-component-id': componentId } : {}), ...(inPlace ? { 'data-instance-id': instanceId } : {}), ...(inPlace && moduleType ? { 'data-kywi-module': moduleType } : {}), ...attributes, ...editingProps, children: [chrome, children] }));
|
|
319
348
|
}
|
|
320
349
|
//# sourceMappingURL=module-overlay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-overlay.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/module-overlay.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"module-overlay.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/module-overlay.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAoF3D,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,KAAK,EACL,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAS,EACT,OAAO,GAAG,KAAK,EACf,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,QAAQ,GACW;IACnB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC;QAC/E,EAAE,EAAE,QAAQ;QACZ,mEAAmE;QACnE,qEAAqE;QACrE,iEAAiE;QACjE,wEAAwE;QACxE,kBAAkB;QAClB,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE;KAC9E,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAwB,IAAI,CAAC,CAAA;IACzD,8EAA8E;IAC9E,4EAA4E;IAC5E,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACzC,sEAAsE;IACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAiC,IAAI,CAAC,CAAA;IACnE,4EAA4E;IAC5E,+EAA+E;IAC/E,8DAA8D;IAC9D,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC9C,aAAa,CAAC,OAAO,GAAG,UAAU,CAAA;IAElC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAC/B,CAAC,IAA2B,EAAE,EAAE;QAC9B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;QACtB,UAAU,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAA;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAE7C;;;;OAIG;IACH,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACxE;;;;OAIG;IACH,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAExC;;;;;;;;;OASG;IACH,SAAS,cAAc;QACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAA;IAC7C,CAAC;IAED,gEAAgE;IAChE,SAAS,IAAI,CAAC,MAAsB;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;QAC/B,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAA;QACrC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC9C,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAA;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;;;;;;OAWG;IACH,SAAS,mBAAmB,CAAC,MAAsB;QACjD,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjB,QAAQ,EAAE,CAAA;YACV,OAAO,IAAI,CAAA;QACb,CAAC;QACD,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAA;QACjC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,sEAAsE;IACtE,6EAA6E;IAC7E,YAAY;IACZ,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,SAAS;YAAE,YAAY,CAAC,OAAO,GAAG,KAAK,CAAA;IAC7C,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,8EAA8E;IAC9E,+EAA+E;IAC/E,yEAAyE;IACzE,yEAAyE;IACzE,8EAA8E;IAC9E,mBAAmB;IACnB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,yEAAyE;YACzE,sEAAsE;YACtE,wEAAwE;YACxE,yEAAyE;YACzE,sEAAsE;YACtE,0EAA0E;YAC1E,yEAAyE;YACzE,uEAAuE;YACvE,uEAAuE;YACvE,oBAAoB;YACpB,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;YACvB,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;QAC/B,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,yEAAyE;QACzE,0EAA0E;QAC1E,wEAAwE;QACxE,qEAAqE;QACrE,4EAA4E;QAC5E,kDAAkD;QAClD,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC5B,IACE,CAAC,KAAK;YACN,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW;YAC1B,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAC/D,CAAC;YACD,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,CAAA;YAC7D,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAA;QAC1B,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,0EAA0E;YAC1E,yEAAyE;YACzE,uDAAuD;YACvD,YAAY,CAAC,OAAO,GAAG,IAAI,CAAA;YAC3B,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAA;YACjC,OAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAA;QAC1B,aAAa,CAAC,OAAO,GAAG,KAAK,CAAA;QAC7B,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAC5C,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QACvC,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,CAAA;QACzC,IAAI,SAAS,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;YACpC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;YAC9B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACrB,SAAS,CAAC,eAAe,EAAE,CAAA;YAC3B,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;QACD,2EAA2E;QAC3E,2EAA2E;QAC3E,uEAAuE;QACvE,uEAAuE;QACvE,0EAA0E;QAC1E,4EAA4E;QAC5E,2EAA2E;QAC3E,sEAAsE;QACtE,0EAA0E;QAC1E,uEAAuE;QACvE,4EAA4E;QAC5E,mDAAmD;QACnD,MAAM,kBAAkB,GACtB,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QAC9E,IAAI,kBAAkB;YAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;QAC1E,OAAO,GAAG,EAAE;YACV,mEAAmE;YACnE,0EAA0E;YAC1E,kEAAkE;YAClE,yEAAyE;YACzE,2EAA2E;YAC3E,oDAAoD;YACpD,IAAI,kBAAkB;gBAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;YAC7E,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAA;YACvC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QACpC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAA;IAE5B,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,6EAA6E;IAC7E,sCAAsC;IACtC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,SAAS,IAAI,YAAY,CAAC,OAAO;YAAE,OAAM;QAC9C,uEAAuE;QACvE,0EAA0E;QAC1E,0EAA0E;QAC1E,kEAAkE;QAClE,0EAA0E;QAC1E,qEAAqE;QACrE,sEAAsE;QACtE,uEAAuE;QACvE,yEAAyE;QACzE,2EAA2E;QAC3E,4EAA4E;QAC5E,qEAAqE;QACrE,0DAA0D;QAC1D,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW;YAAE,OAAM;QACzC,IAAI,CAAC,cAAc,EAAE;YAAE,OAAM;QAC7B,QAAQ,EAAE,CAAA;IACZ,CAAC,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5C,UAAU;KACX,CAAA;IAED,SAAS,WAAW,CAAC,CAAmB;QACtC,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,2EAA2E;QAC3E,wEAAwE;QACxE,+CAA+C;QAC/C,IAAI,OAAO;YAAE,CAAC,CAAC,cAAc,EAAE,CAAA;QAC/B,yEAAyE;QACzE,2EAA2E;QAC3E,+BAA+B;QAC/B,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,cAAc,EAAE;gBAAE,OAAM;YAC7B,IAAI,mBAAmB,CAAC,CAAC,CAAC,MAAiB,CAAC;gBAAE,OAAM;YACpD,QAAQ,EAAE,CAAA;YACV,OAAM;QACR,CAAC;QACD,sEAAsE;QACtE,2EAA2E;QAC3E,yEAAyE;QACzE,qEAAqE;QACrE,gDAAgD;QAChD,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,CAAC,CAAC,MAAiB,CAAC;gBAAE,UAAU,CAAC,UAAU,EAAE,CAAA;YACtD,OAAM;QACR,CAAC;QACD,QAAQ,EAAE,CAAA;IACZ,CAAC;IAED,SAAS,iBAAiB,CAAC,CAAmB;QAC5C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,cAAc,EAAE;gBAAE,OAAM;YAC7B,IAAI,mBAAmB,CAAC,CAAC,CAAC,MAAiB,CAAC,EAAE,CAAC;gBAC7C,CAAC,CAAC,eAAe,EAAE,CAAA;gBACnB,OAAM;YACR,CAAC;YACD,0EAA0E;YAC1E,+DAA+D;QACjE,CAAC;QACD,IAAI,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,MAAiB,CAAC,EAAE,CAAC;YAC5C,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,UAAU,CAAC,UAAU,EAAE,CAAA;YACvB,OAAM;QACR,CAAC;QACD,2EAA2E;QAC3E,wEAAwE;QACxE,iDAAiD;QACjD,IAAI,gBAAgB,EAAE,CAAC;YACrB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,gBAAgB,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;IAED,SAAS,aAAa,CAAC,CAAsC;QAC3D,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU;YAAE,OAAM;QACrC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACvB,yEAAyE;YACzE,yEAAyE;YACzE,0EAA0E;YAC1E,+CAA+C;YAC/C,CAAC,CAAC,cAAc,EAAE,CAAA;YAClB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,aAAa,CAAC,OAAO,GAAG,IAAI,CAAA;YAC5B,UAAU,CAAC,QAAQ,EAAE,CAAA;YACrB,OAAM;QACR,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACzD,0EAA0E;YAC1E,CAAC,CAAC,cAAc,EAAE,CAAA;YAClB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;IAED,SAAS,UAAU,CAAC,CAAmC;QACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK;YAAE,OAAM;QAC/C,sEAAsE;QACtE,6EAA6E;QAC7E,0EAA0E;QAC1E,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAqB,CAAC;YAAE,OAAM;QAChF,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1B,aAAa,CAAC,OAAO,GAAG,KAAK,CAAA;YAC7B,OAAM;QACR,CAAC;QACD,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;IAED,6EAA6E;IAC7E,4DAA4D;IAC5D,MAAM,YAAY,GAAG,UAAU;QAC7B,CAAC,CAAC;YACE,aAAa,EAAE,iBAAiB;YAChC,SAAS,EAAE,aAAa;YACxB,MAAM,EAAE,UAAU;SACnB;QACH,CAAC,CAAC,gBAAgB;YAChB,CAAC,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE;YACtC,CAAC,CAAC,EAAE,CAAA;IAER,MAAM,MAAM,GAAG,CACb,8BACG,SAAS,IAAI,CACZ,eACE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,8BAA8B,6BAC5C,EAAE,EAC1B,eAAe,EAAE,KAAK,YAErB,SAAS,GACL,CACR,EACA,WAAW,IAAI;YACd,kEAAkE;YAClE,qEAAqE;YACrE,uEAAuE;YACvE,yEAAyE;YACzE,kDAAkD;YAClD,eACE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,+BAA+B,6BAC1D,EAAE,EAC1B,eAAe,EAAE,KAAK,YAEtB,KAAC,mBAAmB,IAAC,IAAI,EAAE,aAAa,GAAI,GACvC,CACR,EACD,eACE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,4BAA4B,6BACnE,EAAE,EAC1B,eAAe,EAAE,KAAK,aAKtB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,8DAA8D,gBAC7D,iBAAiB,EAC5B,KAAK,EAAC,iBAAiB,KACnB,SAAS,YAEb,KAAC,UAAU,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAE,EAAE,GAAI,GAC7B,EACR,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAC3B,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+BAA+B,EACzC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4BACb,CAAC,CAAC,eAAe,EAAE,CAAA;4BACnB,MAAM,CAAC,OAAO,EAAE,CAAA;wBAClB,CAAC,EACD,KAAK,EAAE,MAAM,CAAC,KAAK,gBACP,MAAM,CAAC,KAAK,YAKxB,KAAC,UAAU,IAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAI,IAbtC,CAAC,CAcC,CACV,CAAC,IACE,IACL,CACJ,CAAA;IAED,MAAM,SAAS,GAAG,OAAO;QACvB,CAAC,CAAC;YACE,qBAAqB;YACrB,UAAU,CAAC,CAAC,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI;YAChD,gBAAgB;YAChB,UAAU,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI;YAC9C,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI;YAC5C,WAAW,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI;SAC9C;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC;QACd,CAAC,CAAC;YACE,oBAAoB;YACpB,UAAU,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI;YAClD,WAAW,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI;SAClD;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAA;IAEhB,OAAO,CACL,eACE,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,oBACJ,QAAQ,2BAIF,EAAE,KACpB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACzD,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACnD,CAAC,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACjE,UAAU,KACV,YAAY,aAEf,MAAM,EACN,QAAQ,IACL,CACP,CAAA;AACH,CAAC"}
|
|
@@ -88,6 +88,41 @@ export declare function findColumnIn(regions: Record<string, RegionNode[]>, colu
|
|
|
88
88
|
export declare function findModuleIn(regions: Record<string, RegionNode[]>, moduleId: string): ModuleLocation | null;
|
|
89
89
|
/** Find a variant container by id. Containers only ever live at region level. */
|
|
90
90
|
export declare function findVariantContainerIn(regions: Record<string, RegionNode[]>, containerId: string): VariantContainerLocation | null;
|
|
91
|
+
/**
|
|
92
|
+
* The `componentId` of the nearest ANCESTOR of `nodeId` that is itself a linked
|
|
93
|
+
* component instance, or null when every ancestor is ordinary content.
|
|
94
|
+
*
|
|
95
|
+
* WHY THIS EXISTS (kywi-cms#147 T3 review, I1). Connecting a node that lives
|
|
96
|
+
* inside an already-linked ancestor silently destroys data:
|
|
97
|
+
*
|
|
98
|
+
* - the connect writes the node as a CLEAN instance (`props: { componentId }`),
|
|
99
|
+
* replacing the content stored for it in the page's document — but that
|
|
100
|
+
* document is the ancestor's inline FALLBACK copy, so what was overwritten is
|
|
101
|
+
* the only thing the page can render when the ancestor's component cannot be
|
|
102
|
+
* resolved;
|
|
103
|
+
* - `collectComponentRefs` deliberately stops at a connected node, so the new
|
|
104
|
+
* link is invisible to the instance index, the usage counts and the delete
|
|
105
|
+
* gate, and the render-side placement pass strips it structurally;
|
|
106
|
+
* - so the moment the outer component becomes unresolvable, the inner node
|
|
107
|
+
* renders EMPTY, with nothing left to recover it from.
|
|
108
|
+
*
|
|
109
|
+
* A node's OWN `componentId` is deliberately not considered: this answers "is
|
|
110
|
+
* this node inside somebody ELSE's component?", which is the question both the
|
|
111
|
+
* chrome gating and the hard refusal in `useComponentConnect` ask. A linked
|
|
112
|
+
* SIBLING is not an ancestor and must not block anything.
|
|
113
|
+
*/
|
|
114
|
+
export declare function findLinkedAncestor(regions: Record<string, RegionNode[]>, nodeId: string): string | null;
|
|
115
|
+
/**
|
|
116
|
+
* {@link findLinkedAncestor} as a yes/no, over a document's own regions.
|
|
117
|
+
*
|
|
118
|
+
* Regions only, exactly like the document readers below and for the same reason:
|
|
119
|
+
* the shells resolve their selection from `layout.regions` too, so a node living
|
|
120
|
+
* in a `pageVariants` / `abExperiments` region cannot be saved or linked through
|
|
121
|
+
* them at all (the lookup fails first). The canvas's own gating does not depend on
|
|
122
|
+
* this function — it threads `linkedAncestor` structurally, from where it is
|
|
123
|
+
* rendering — so variant regions are gated in the UI regardless.
|
|
124
|
+
*/
|
|
125
|
+
export declare function hasLinkedAncestor(layout: LayoutDocument, nodeId: string): boolean;
|
|
91
126
|
export declare function findModuleInDocument(layout: LayoutDocument, moduleId: string): ModuleNode | null;
|
|
92
127
|
export declare function findSectionInDocument(layout: LayoutDocument, sectionId: string): LayoutSection | null;
|
|
93
128
|
export declare function findVariantContainerInDocument(layout: LayoutDocument, containerId: string): VariantContainer | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-lookup.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/node-lookup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"node-lookup.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/node-lookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,6 +125,97 @@ export function findVariantContainerIn(regions, containerId) {
|
|
|
125
125
|
}
|
|
126
126
|
return null;
|
|
127
127
|
}
|
|
128
|
+
// ── Linked ancestry (kywi-cms#147) ───────────────────────────────────────────
|
|
129
|
+
/**
|
|
130
|
+
* Search one array of sections for `nodeId`, carrying the link inherited from
|
|
131
|
+
* whatever holds those sections. Returns a WRAPPER so "found, no linked
|
|
132
|
+
* ancestor" (`{ value: null }`) stays distinguishable from "not here" (`null`).
|
|
133
|
+
*/
|
|
134
|
+
function linkedAncestorInSections(sections, nodeId, inherited) {
|
|
135
|
+
for (const section of sections) {
|
|
136
|
+
if (!isLayoutSection(section))
|
|
137
|
+
continue;
|
|
138
|
+
// The section itself: its own componentId is not an ANCESTOR's.
|
|
139
|
+
if (section.id === nodeId)
|
|
140
|
+
return { value: inherited };
|
|
141
|
+
// Nearest first — a module inside a linked section reports that section,
|
|
142
|
+
// not the linked container two levels up.
|
|
143
|
+
const nearest = section.componentId ?? inherited ?? null;
|
|
144
|
+
for (const column of section.columns) {
|
|
145
|
+
if (column.id === nodeId)
|
|
146
|
+
return { value: nearest };
|
|
147
|
+
for (const module of column.nodes) {
|
|
148
|
+
if (module.id === nodeId)
|
|
149
|
+
return { value: nearest };
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* The `componentId` of the nearest ANCESTOR of `nodeId` that is itself a linked
|
|
157
|
+
* component instance, or null when every ancestor is ordinary content.
|
|
158
|
+
*
|
|
159
|
+
* WHY THIS EXISTS (kywi-cms#147 T3 review, I1). Connecting a node that lives
|
|
160
|
+
* inside an already-linked ancestor silently destroys data:
|
|
161
|
+
*
|
|
162
|
+
* - the connect writes the node as a CLEAN instance (`props: { componentId }`),
|
|
163
|
+
* replacing the content stored for it in the page's document — but that
|
|
164
|
+
* document is the ancestor's inline FALLBACK copy, so what was overwritten is
|
|
165
|
+
* the only thing the page can render when the ancestor's component cannot be
|
|
166
|
+
* resolved;
|
|
167
|
+
* - `collectComponentRefs` deliberately stops at a connected node, so the new
|
|
168
|
+
* link is invisible to the instance index, the usage counts and the delete
|
|
169
|
+
* gate, and the render-side placement pass strips it structurally;
|
|
170
|
+
* - so the moment the outer component becomes unresolvable, the inner node
|
|
171
|
+
* renders EMPTY, with nothing left to recover it from.
|
|
172
|
+
*
|
|
173
|
+
* A node's OWN `componentId` is deliberately not considered: this answers "is
|
|
174
|
+
* this node inside somebody ELSE's component?", which is the question both the
|
|
175
|
+
* chrome gating and the hard refusal in `useComponentConnect` ask. A linked
|
|
176
|
+
* SIBLING is not an ancestor and must not block anything.
|
|
177
|
+
*/
|
|
178
|
+
export function findLinkedAncestor(regions, nodeId) {
|
|
179
|
+
for (const nodes of Object.values(regions)) {
|
|
180
|
+
for (const node of nodes) {
|
|
181
|
+
// Region level: a section or container sitting here has no ancestor at all.
|
|
182
|
+
if (node.id === nodeId)
|
|
183
|
+
return null;
|
|
184
|
+
if (isVariantContainer(node)) {
|
|
185
|
+
const containerLink = node.componentId ?? null;
|
|
186
|
+
const arms = [
|
|
187
|
+
node.defaultSections,
|
|
188
|
+
...node.variants.map(variant => variant.sections),
|
|
189
|
+
];
|
|
190
|
+
for (const arm of arms) {
|
|
191
|
+
const hit = linkedAncestorInSections(arm, nodeId, containerLink);
|
|
192
|
+
if (hit)
|
|
193
|
+
return hit.value;
|
|
194
|
+
}
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
if (isLayoutSection(node)) {
|
|
198
|
+
const hit = linkedAncestorInSections([node], nodeId, null);
|
|
199
|
+
if (hit)
|
|
200
|
+
return hit.value;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* {@link findLinkedAncestor} as a yes/no, over a document's own regions.
|
|
208
|
+
*
|
|
209
|
+
* Regions only, exactly like the document readers below and for the same reason:
|
|
210
|
+
* the shells resolve their selection from `layout.regions` too, so a node living
|
|
211
|
+
* in a `pageVariants` / `abExperiments` region cannot be saved or linked through
|
|
212
|
+
* them at all (the lookup fails first). The canvas's own gating does not depend on
|
|
213
|
+
* this function — it threads `linkedAncestor` structurally, from where it is
|
|
214
|
+
* rendering — so variant regions are gated in the UI regardless.
|
|
215
|
+
*/
|
|
216
|
+
export function hasLinkedAncestor(layout, nodeId) {
|
|
217
|
+
return findLinkedAncestor(layout.regions, nodeId) !== null;
|
|
218
|
+
}
|
|
128
219
|
// ── Document-level readers ───────────────────────────────────────────────────
|
|
129
220
|
//
|
|
130
221
|
// Read-only convenience for the editor shells, which resolve the current
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-lookup.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/node-lookup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"node-lookup.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/node-lookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay-shell.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/overlay-shell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAwE,MAAM,OAAO,CAAA;AAE5F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"overlay-shell.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/overlay-shell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAwE,MAAM,OAAO,CAAA;AAE5F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAwBvE,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;AAClE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE/D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,aAAa,EAAE,cAAc,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,aAAa,CAAA;IAC5B,cAAc,EAAE,cAAc,CAAA;IAC9B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC,CAAA;IACzH;;;;;;;OAOG;IACH,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAChG,SAAS,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACnG,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACtG,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChD;AA0BD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,aAAa,EACb,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,EAC7B,cAAc,EACd,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,UAAU,EACV,QAAQ,EACR,aAAa,EACb,SAAS,GACV,EAAE,iBAAiB,kDA+qBnB"}
|
|
@@ -12,6 +12,9 @@ import { PropsPanel } from './props-panel.js';
|
|
|
12
12
|
import { SectionTemplatePicker } from './section-template-picker.js';
|
|
13
13
|
import { EditorIcon } from './editor-icons.js';
|
|
14
14
|
import { ConfirmDialog } from '../primitives.js';
|
|
15
|
+
import { useComponentLibrary } from './use-component-library.js';
|
|
16
|
+
import { useComponentConnect } from './use-component-connect.js';
|
|
17
|
+
import { useComponentFork } from './use-component-fork.js';
|
|
15
18
|
import { resolveInlineBinding, listInlineTextProps, readInlineTextValue } from './inline-text.js';
|
|
16
19
|
import { applyStickyOffset, EDIT_BAR_HEIGHT_VAR, EDIT_BAR_HEIGHT_PX } from '../../scope/sticky-offset.js';
|
|
17
20
|
import { adminFetch } from '../../host-client/index.js';
|
|
@@ -126,6 +129,31 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
|
|
|
126
129
|
return () => { cancelled = true; };
|
|
127
130
|
}, [audiences]);
|
|
128
131
|
const audienceList = audiences ?? fetchedAudiences;
|
|
132
|
+
// ── Reusable components (kywi-cms#147) ─────────────────────────────────────
|
|
133
|
+
//
|
|
134
|
+
// The front editor is the PRIMARY editing surface (kywi-cms#94) but had no
|
|
135
|
+
// component affordances at all: no way to save a band as a component, no way to
|
|
136
|
+
// tell a linked instance from ordinary content, and no Detach — all of which
|
|
137
|
+
// existed only in the admin Layout tab. Both shells now share one library and
|
|
138
|
+
// one connect/detach implementation.
|
|
139
|
+
const library = useComponentLibrary();
|
|
140
|
+
const connect = useComponentConnect({ layout: state.layout, dispatch, library });
|
|
141
|
+
// The save fork (kywi-cms#147 T4). Every save path below goes through it: an
|
|
142
|
+
// edited linked instance is a decision the owner has to make, and Save Draft
|
|
143
|
+
// writes the same layout Save does, so exempting one would let the fork be
|
|
144
|
+
// skipped by pressing the other button.
|
|
145
|
+
const fork = useComponentFork({
|
|
146
|
+
layout: state.layout,
|
|
147
|
+
originalLayout: state.originalLayout,
|
|
148
|
+
dispatch,
|
|
149
|
+
library,
|
|
150
|
+
// kywi-cms#147 T4 review round 2 — see `inlineEditActive`'s doc on the hook:
|
|
151
|
+
// a live inline-text session's keystrokes never reach `state.isDirty` until
|
|
152
|
+
// commit, so a library-driven fallback-copy refresh landing mid-session
|
|
153
|
+
// would silently overwrite them. `textEdit.id` is exactly OverlayShell's own
|
|
154
|
+
// "is one open right now" state.
|
|
155
|
+
inlineEditActive: textEdit.id !== null,
|
|
156
|
+
});
|
|
129
157
|
// ── Handlers ───────────────────────────────────────────────────────────────
|
|
130
158
|
// One set of drag wiring — sensors, collision detection and drop handling —
|
|
131
159
|
// shared with the admin editor (kywi-cms#134, see use-editor-dnd.ts). The
|
|
@@ -148,6 +176,10 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
|
|
|
148
176
|
// while a save is in flight, so baselining `state.layout` at resolve time
|
|
149
177
|
// would adopt a mid-save edit as saved and let Done exit without a confirm
|
|
150
178
|
// (see the MARK_SAVED action doc in editor-state.ts).
|
|
179
|
+
//
|
|
180
|
+
// The result is also returned to the caller, so the save fork can tell a page
|
|
181
|
+
// save that failed from one that landed: by then it may already have written a
|
|
182
|
+
// component definition, and closing as if all was well would hide that.
|
|
151
183
|
const markSavedIfOk = useCallback((saved, result) => {
|
|
152
184
|
void Promise.resolve(result)
|
|
153
185
|
.then(ok => {
|
|
@@ -155,29 +187,33 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
|
|
|
155
187
|
dispatch({ type: 'MARK_SAVED', layout: saved });
|
|
156
188
|
})
|
|
157
189
|
.catch(() => { });
|
|
190
|
+
return result;
|
|
158
191
|
}, []);
|
|
192
|
+
// Each of these hands the fork a persist step over the document the fork ends
|
|
193
|
+
// up with — the edited one when nothing is linked, the resolved one when the
|
|
194
|
+
// owner has answered.
|
|
159
195
|
const handleSave = useCallback(() => {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}, [onSave, state.layout, markSavedIfOk]);
|
|
196
|
+
fork.guardSave(saved => markSavedIfOk(saved, onSave(saved, 'save')));
|
|
197
|
+
}, [fork, onSave, markSavedIfOk]);
|
|
163
198
|
const handlePublish = useCallback(() => {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}, [onPublish, state.layout, markSavedIfOk]);
|
|
199
|
+
fork.guardSave(saved => markSavedIfOk(saved, onPublish(saved, 'publish')));
|
|
200
|
+
}, [fork, onPublish, markSavedIfOk]);
|
|
167
201
|
const handleSchedule = useCallback(() => {
|
|
168
202
|
// kywi-cms#135 review: the Schedule button renders on `editMode.canPublish`
|
|
169
203
|
// alone, and the shipped scaffold never passes `onSchedule` — a click with
|
|
170
|
-
// no handler wired must do NOTHING (not persist, not mark saved
|
|
171
|
-
// would silently clear `isDirty` for edits nothing
|
|
204
|
+
// no handler wired must do NOTHING (not persist, not mark saved, and not
|
|
205
|
+
// open the fork), or it would silently clear `isDirty` for edits nothing
|
|
206
|
+
// actually captured.
|
|
172
207
|
if (!onSchedule)
|
|
173
208
|
return;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
209
|
+
fork.guardSave(saved => markSavedIfOk(saved, onSchedule(saved, new Date().toISOString())), 'schedule');
|
|
210
|
+
}, [fork, onSchedule, markSavedIfOk]);
|
|
211
|
+
// Save Draft goes through the fork like every other save — and says so, because
|
|
212
|
+
// "draft" is exactly the word that implies nothing has gone live yet, which for a
|
|
213
|
+
// component is not true (see SAVE_MODE_NOTICE in editor-dialog.tsx).
|
|
177
214
|
const handleDraft = useCallback(() => {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}, [onSave, state.layout, markSavedIfOk]);
|
|
215
|
+
fork.guardSave(saved => markSavedIfOk(saved, onSave(saved, 'draft')), 'draft');
|
|
216
|
+
}, [fork, onSave, markSavedIfOk]);
|
|
181
217
|
const handleInsertSection = useCallback((regionName) => {
|
|
182
218
|
setTemplateRegion(regionName);
|
|
183
219
|
setShowTemplatePicker(true);
|
|
@@ -218,14 +254,20 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
|
|
|
218
254
|
: undefined;
|
|
219
255
|
if (node && editable) {
|
|
220
256
|
const next = readInlineTextValue(host, editable.html);
|
|
257
|
+
// Compared against what the module RENDERS, not against its own props
|
|
258
|
+
// (kywi-cms#147 T4): a clean linked instance has no props of its own, so
|
|
259
|
+
// comparing there would report every no-op click on a linked module as an
|
|
260
|
+
// edit — and an edit of a linked instance opens the save fork. Same
|
|
261
|
+
// projection the rail and the canvas preview use.
|
|
262
|
+
const current = library.renderedModule(node).props[prop.name];
|
|
221
263
|
// Same prop, same action, same history the props panel writes — typing
|
|
222
264
|
// on the page and typing in the rail are one save path.
|
|
223
|
-
if (next !== String(
|
|
265
|
+
if (next !== String(current ?? '')) {
|
|
224
266
|
dispatch({ type: 'UPDATE_PROPS', moduleId, props: { [prop.name]: next } });
|
|
225
267
|
}
|
|
226
268
|
}
|
|
227
269
|
endTextEdit(moduleId);
|
|
228
|
-
}, [state.layout, moduleRegistry, endTextEdit]);
|
|
270
|
+
}, [state.layout, moduleRegistry, endTextEdit, library]);
|
|
229
271
|
const handleInlineCancel = useCallback(() => {
|
|
230
272
|
endTextEdit(null);
|
|
231
273
|
}, [endTextEdit]);
|
|
@@ -297,9 +339,12 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
|
|
|
297
339
|
const selectedModule = state.selectedId
|
|
298
340
|
? findModuleById(state.layout, state.selectedId)
|
|
299
341
|
: null;
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
342
|
+
// Which registry entry describes this node's FIELDS: for a linked instance the
|
|
343
|
+
// component's own moduleType, not the placeholder node's `type` (kywi-cms#147 T4
|
|
344
|
+
// review, I2 — see `fieldModuleType`). Null means there is nothing honest to show,
|
|
345
|
+
// and the rail renders no content fields at all.
|
|
346
|
+
const selectedFieldType = selectedModule ? library.fieldModuleType(selectedModule) : null;
|
|
347
|
+
const selectedConfig = selectedFieldType ? moduleRegistry.get(selectedFieldType) : null;
|
|
303
348
|
const selectedSection = state.selectedType === 'section' && state.selectedId
|
|
304
349
|
? findSectionById(state.layout, state.selectedId)
|
|
305
350
|
: null;
|
|
@@ -307,6 +352,12 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
|
|
|
307
352
|
const selectedVariantContainer = state.selectedType === 'variantContainer' && state.selectedId
|
|
308
353
|
? findVariantContainerInDocument(state.layout, state.selectedId)
|
|
309
354
|
: null;
|
|
355
|
+
// Inside another node's linked component instance every component action is
|
|
356
|
+
// refused (see `useComponentConnect`), so the rail withdraws them — exactly as
|
|
357
|
+
// the canvas chrome does via its own `linkedAncestor` threading.
|
|
358
|
+
const selectionInsideLinkedComponent = state.selectedId
|
|
359
|
+
? connect.isInsideLinkedComponent(state.selectedId)
|
|
360
|
+
: false;
|
|
310
361
|
// The props rail opens itself the moment something is selected, and closes
|
|
311
362
|
// (deselect) from its own × — that IS its collapse control.
|
|
312
363
|
const propsRailOpen = Boolean(selectedModule || selectedSection || selectedVariantContainer);
|
|
@@ -321,16 +372,48 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
|
|
|
321
372
|
// section's controls render underneath it. Telling the canvas
|
|
322
373
|
// whether the rail is out is what lets the chrome step aside
|
|
323
374
|
// (kywi-cms#132).
|
|
324
|
-
paletteOpen: paletteOpen, inlineEdit: inlineEdit }) }) }), _jsx("aside", { className: `kywi-overlay-chrome kywi-overlay-rail kywi-overlay-rail--left${paletteOpen ? '' : ' kywi-overlay-rail--collapsed'}`, "aria-label": "Modules", "aria-hidden": !paletteOpen, children: _jsx(ModulePalette, { modules: moduleRegistry.list(), ...(userRole ? { userRole } : {}) }) }), _jsx("aside", { className: `kywi-overlay-chrome kywi-overlay-rail kywi-overlay-rail--right${propsRailOpen ? '' : ' kywi-overlay-rail--collapsed'}`, "aria-label": "Properties", "aria-hidden": !propsRailOpen, children: _jsx(PropsPanel, { module: selectedModule, moduleConfig: selectedConfig, onUpdateProps: (props) => dispatch({ type: 'UPDATE_PROPS', moduleId: state.selectedId, props }), onUpdateStyle: (style) => dispatch({ type: 'UPDATE_STYLE', moduleId: state.selectedId, style }), onDelete: () => dispatch({ type: 'REMOVE_MODULE', moduleId: state.selectedId }),
|
|
375
|
+
paletteOpen: paletteOpen, inlineEdit: inlineEdit, resolveComponent: library.resolveModule, componentAffordances: connect.affordances }) }) }), _jsx("aside", { className: `kywi-overlay-chrome kywi-overlay-rail kywi-overlay-rail--left${paletteOpen ? '' : ' kywi-overlay-rail--collapsed'}`, "aria-label": "Modules", "aria-hidden": !paletteOpen, children: _jsx(ModulePalette, { modules: moduleRegistry.list(), ...(userRole ? { userRole } : {}) }) }), _jsx("aside", { className: `kywi-overlay-chrome kywi-overlay-rail kywi-overlay-rail--right${propsRailOpen ? '' : ' kywi-overlay-rail--collapsed'}`, "aria-label": "Properties", "aria-hidden": !propsRailOpen, children: _jsx(PropsPanel, { module: selectedModule, moduleConfig: selectedConfig, onUpdateProps: (props) => dispatch({ type: 'UPDATE_PROPS', moduleId: state.selectedId, props }), onUpdateStyle: (style) => dispatch({ type: 'UPDATE_STYLE', moduleId: state.selectedId, style }), onDelete: () => dispatch({ type: 'REMOVE_MODULE', moduleId: state.selectedId }), components: library.optionsFor('module'),
|
|
376
|
+
// What a linked module renders, so its fields show the component's
|
|
377
|
+
// content rather than an empty form (kywi-cms#147 T4).
|
|
378
|
+
linkedModuleRender: selectedModule ? library.renderedModule(selectedModule) : null, onSaveAsComponent: () => {
|
|
379
|
+
if (state.selectedId)
|
|
380
|
+
connect.saveModule(state.selectedId);
|
|
381
|
+
}, onLinkComponent: (componentId) => {
|
|
382
|
+
if (state.selectedId)
|
|
383
|
+
connect.linkModule(state.selectedId, componentId);
|
|
384
|
+
}, onDetach: () => {
|
|
385
|
+
if (state.selectedId)
|
|
386
|
+
connect.detachModule(state.selectedId);
|
|
387
|
+
}, insideLinkedComponent: selectionInsideLinkedComponent, section: selectedSection, sectionComponents: library.optionsFor('section'), onSaveSectionAsComponent: () => {
|
|
388
|
+
if (state.selectedId)
|
|
389
|
+
connect.saveSection(state.selectedId);
|
|
390
|
+
}, onDetachSection: () => {
|
|
391
|
+
if (state.selectedId)
|
|
392
|
+
connect.detachSection(state.selectedId);
|
|
393
|
+
}, onDeleteSection: () => {
|
|
325
394
|
dispatch({ type: 'REMOVE_SECTION', sectionId: state.selectedId });
|
|
326
395
|
dispatch({ type: 'DESELECT' });
|
|
327
|
-
}, variantContainer: selectedVariantContainer,
|
|
396
|
+
}, variantContainer: selectedVariantContainer, variantContainerComponents: library.optionsFor('variantContainer'), onSaveVariantContainerAsComponent: () => {
|
|
397
|
+
if (state.selectedId)
|
|
398
|
+
connect.saveVariantContainer(state.selectedId);
|
|
399
|
+
}, onDetachVariantContainer: () => {
|
|
400
|
+
if (state.selectedId)
|
|
401
|
+
connect.detachVariantContainer(state.selectedId);
|
|
402
|
+
}, onUpdateVariantContainer: (patch) => dispatch({ type: 'UPDATE_VARIANT_CONTAINER', containerId: state.selectedId, patch }), onDeleteVariantContainer: () => {
|
|
328
403
|
dispatch({ type: 'REMOVE_VARIANT_CONTAINER', containerId: state.selectedId });
|
|
329
404
|
dispatch({ type: 'DESELECT' });
|
|
330
405
|
}, onUnwrapVariantContainer: (containerId) => {
|
|
331
406
|
dispatch({ type: 'UNWRAP_VARIANT_CONTAINER', containerId });
|
|
332
407
|
dispatch({ type: 'DESELECT' });
|
|
333
|
-
}, onClose: () => dispatch({ type: 'DESELECT' }), ...(audienceList ? { audiences: audienceList } : {}) }) }), _jsxs("div", { className: "kywi-admin-shell kywi-overlay-dialog-host", children: [showTemplatePicker && (_jsx(SectionTemplatePicker
|
|
408
|
+
}, onClose: () => dispatch({ type: 'DESELECT' }), ...(audienceList ? { audiences: audienceList } : {}) }) }), _jsxs("div", { className: "kywi-admin-shell kywi-overlay-dialog-host", children: [showTemplatePicker && (_jsx(SectionTemplatePicker
|
|
409
|
+
// Already loaded by this shell — the picker fetching its own
|
|
410
|
+
// `?type=` copies made three requests of one library
|
|
411
|
+
// (kywi-cms#147 T3 review, I3).
|
|
412
|
+
, {
|
|
413
|
+
// Already loaded by this shell — the picker fetching its own
|
|
414
|
+
// `?type=` copies made three requests of one library
|
|
415
|
+
// (kywi-cms#147 T3 review, I3).
|
|
416
|
+
componentLibrary: library.components, onSelect: (columns) => {
|
|
334
417
|
if (templateRegion) {
|
|
335
418
|
dispatch({ type: 'ADD_SECTION', regionName: templateRegion, columns });
|
|
336
419
|
}
|
|
@@ -344,9 +427,17 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
|
|
|
344
427
|
}
|
|
345
428
|
setShowTemplatePicker(false);
|
|
346
429
|
setTemplateRegion(null);
|
|
430
|
+
}, onInsertVariantContainer: (container) => {
|
|
431
|
+
// Insert a linked container component (kywi-cms#147) — same
|
|
432
|
+
// region-level affordance, the only place a container can live.
|
|
433
|
+
if (templateRegion) {
|
|
434
|
+
dispatch({ type: 'ADD_VARIANT_CONTAINER', regionName: templateRegion, container });
|
|
435
|
+
}
|
|
436
|
+
setShowTemplatePicker(false);
|
|
437
|
+
setTemplateRegion(null);
|
|
347
438
|
}, onClose: () => {
|
|
348
439
|
setShowTemplatePicker(false);
|
|
349
440
|
setTemplateRegion(null);
|
|
350
|
-
} })), confirmExit && (_jsx(ConfirmDialog, { title: "Leave the editor?", message: "This page has changes you haven't saved yet. Leaving now discards them.", confirmLabel: "Discard changes", onConfirm: exitEditor, onCancel: () => setConfirmExit(false) }))] })] })] }));
|
|
441
|
+
} })), connect.dialog, fork.dialog, confirmExit && (_jsx(ConfirmDialog, { title: "Leave the editor?", message: "This page has changes you haven't saved yet. Leaving now discards them.", confirmLabel: "Discard changes", onConfirm: exitEditor, onCancel: () => setConfirmExit(false) }))] })] })] }));
|
|
351
442
|
}
|
|
352
443
|
//# sourceMappingURL=overlay-shell.js.map
|