@kywi-software/core 0.11.0 → 0.12.1
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 +12 -0
- package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.js +76 -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 +161 -190
- package/dist/admin/layout-editor/layout-editor.js.map +1 -1
- package/dist/admin/layout-editor/linked-component.d.ts +38 -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 +34 -0
- package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -1
- package/dist/admin/layout-editor/node-lookup.js +90 -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 +55 -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 +65 -0
- package/dist/admin/layout-editor/use-component-connect.d.ts.map +1 -0
- package/dist/admin/layout-editor/use-component-connect.js +294 -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,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useReducer, useState, useCallback, useEffect, useRef } from 'react';
|
|
3
|
+
import { useReducer, useState, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
4
4
|
import { DndContext } from '@dnd-kit/core';
|
|
5
5
|
import { editorReducer, createInitialState } from './editor-state.js';
|
|
6
6
|
import { findModuleInDocument, findSectionInDocument, findVariantContainerInDocument, } from './node-lookup.js';
|
|
@@ -12,8 +12,9 @@ import { EditorCanvas } from './editor-canvas.js';
|
|
|
12
12
|
import { PropsPanel } from './props-panel.js';
|
|
13
13
|
import { SectionTemplatePicker } from './section-template-picker.js';
|
|
14
14
|
import { ConfirmDialog } from '../primitives.js';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
15
|
+
import { useComponentLibrary } from './use-component-library.js';
|
|
16
|
+
import { useComponentConnect } from './use-component-connect.js';
|
|
17
|
+
import { useComponentFork } from './use-component-fork.js';
|
|
17
18
|
import './editor.css';
|
|
18
19
|
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
19
20
|
// Selection lookups are arm-aware (kywi-cms#92): a module or section living
|
|
@@ -22,42 +23,22 @@ import './editor.css';
|
|
|
22
23
|
const findModuleById = findModuleInDocument;
|
|
23
24
|
const findSectionById = findSectionInDocument;
|
|
24
25
|
// ── Component ─────────────────────────────────────────────────────────────────
|
|
25
|
-
export function LayoutEditor({ initialLayout, moduleRegistry, moduleComponents, onSave, onCancel, audiences, onChange, userRole, }) {
|
|
26
|
+
export function LayoutEditor({ initialLayout, moduleRegistry, moduleComponents, onSave, onCancel, audiences, onChange, userRole, canvasKind = 'page', }) {
|
|
27
|
+
// One rule, two canvases (see `canvasKind`): a document that is not a page has
|
|
28
|
+
// no placements, so every placement-shaped affordance is withheld.
|
|
29
|
+
const componentActionsWithheld = canvasKind !== 'page';
|
|
26
30
|
const [state, dispatch] = useReducer(editorReducer, initialLayout, createInitialState);
|
|
27
31
|
const [showTemplatePicker, setShowTemplatePicker] = useState(false);
|
|
28
32
|
const [templateRegion, setTemplateRegion] = useState(null);
|
|
29
33
|
// Cancel-with-unsaved-changes confirm (kywi-cms#135) — mirrors overlay-shell's
|
|
30
34
|
// exit-confirm pattern.
|
|
31
35
|
const [confirmCancel, setConfirmCancel] = useState(false);
|
|
32
|
-
// Saved reusable components (kywi-cms#46)
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
adminFetch('/api/v1/components?type=module')
|
|
39
|
-
.then(r => (r.ok ? r.json() : Promise.reject(new Error(String(r.status)))))
|
|
40
|
-
.then((body) => {
|
|
41
|
-
if (!cancelled)
|
|
42
|
-
setComponents(body.data ?? []);
|
|
43
|
-
})
|
|
44
|
-
.catch(() => { });
|
|
45
|
-
return () => { cancelled = true; };
|
|
46
|
-
}, []);
|
|
47
|
-
// Saved section-type components (kywi-cms#69): loaded so the props panel can
|
|
48
|
-
// name the linked-badge component for a selected linked section. Best-effort.
|
|
49
|
-
const [sectionComponents, setSectionComponents] = useState([]);
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
let cancelled = false;
|
|
52
|
-
adminFetch('/api/v1/components?type=section')
|
|
53
|
-
.then(r => (r.ok ? r.json() : Promise.reject(new Error(String(r.status)))))
|
|
54
|
-
.then((body) => {
|
|
55
|
-
if (!cancelled)
|
|
56
|
-
setSectionComponents(body.data ?? []);
|
|
57
|
-
})
|
|
58
|
-
.catch(() => { });
|
|
59
|
-
return () => { cancelled = true; };
|
|
60
|
-
}, []);
|
|
36
|
+
// Saved reusable components of every type (kywi-cms#46/#69/#147), loaded once:
|
|
37
|
+
// the props panel offers them in the picker and names linked instances, the
|
|
38
|
+
// canvas previews connected module nodes as their real module, and detach /
|
|
39
|
+
// save-as-component read their definitions. Shared with the front-of-site
|
|
40
|
+
// overlay shell — one hook, one request (see use-component-library.ts).
|
|
41
|
+
const library = useComponentLibrary();
|
|
61
42
|
// Shell parity with OverlayShell (kywi-cms#135 review): a host that unmounts
|
|
62
43
|
// this editor as part of its own save handling — content-form.tsx's Layout
|
|
63
44
|
// tab navigates away once the PUT resolves — would otherwise get the
|
|
@@ -81,35 +62,58 @@ export function LayoutEditor({ initialLayout, moduleRegistry, moduleComponents,
|
|
|
81
62
|
useEffect(() => {
|
|
82
63
|
onChangeRef.current = onChange;
|
|
83
64
|
});
|
|
84
|
-
// Keep the host form in sync with every layout mutation. Skips
|
|
85
|
-
//
|
|
86
|
-
// the
|
|
87
|
-
//
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
//
|
|
65
|
+
// Keep the host form in sync with every layout mutation. Skips any render
|
|
66
|
+
// where the document is still the last-saved one, so we don't spuriously
|
|
67
|
+
// mark a pristine form dirty; the layout the parent already holds is
|
|
68
|
+
// authoritative until an edit lands.
|
|
69
|
+
//
|
|
70
|
+
// Compared against `state.originalLayout` rather than a mount-time ref. That
|
|
71
|
+
// is the same thing at mount (both are the initial document, and the reducer
|
|
72
|
+
// sets `originalLayout` once in its lazy init, so it is stable across
|
|
73
|
+
// StrictMode's mount -> unmount -> remount double-invoke), and it stays
|
|
74
|
+
// correct for the two later moments where the document changes without anyone
|
|
75
|
+
// editing anything: MARK_SAVED, and REFRESH_COMPONENT_COPIES — the linked-copy
|
|
76
|
+
// refresh (kywi-cms#147 T4 review, C1), which moves both baselines together
|
|
77
|
+
// precisely so it is not an edit. Firing onChange for either would tell the
|
|
78
|
+
// host form it has unsaved changes it does not have.
|
|
92
79
|
//
|
|
93
80
|
// `hasSyncedRef` (kywi-cms#135): once a real edit has fired onChange at
|
|
94
81
|
// least once, every later state.layout change fires again unconditionally
|
|
95
|
-
// — including one that happens to be reference-equal to
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
|
|
82
|
+
// — including one that happens to be reference-equal to `originalLayout`.
|
|
83
|
+
// That happens for real: RESET_TO_SAVED (the Layout-tab Cancel revert) sets
|
|
84
|
+
// `layout` back to `originalLayout`, so the check above would wrongly treat
|
|
85
|
+
// "reverted to the original" the same as "still pristine" and leave the host
|
|
86
|
+
// form stranded on the discarded edit.
|
|
87
|
+
//
|
|
88
|
+
// The dependency list is `[state.layout]` alone on purpose. `originalLayout` is
|
|
89
|
+
// read, not depended on: adding it would re-run the effect on MARK_SAVED — where
|
|
90
|
+
// the document did not change at all — and fire a spurious onChange right after
|
|
91
|
+
// every successful save.
|
|
102
92
|
const hasSyncedRef = useRef(false);
|
|
103
93
|
useEffect(() => {
|
|
104
|
-
if (!hasSyncedRef.current && state.layout ===
|
|
94
|
+
if (!hasSyncedRef.current && state.layout === state.originalLayout)
|
|
105
95
|
return;
|
|
106
96
|
hasSyncedRef.current = true;
|
|
107
97
|
onChangeRef.current?.(state.layout);
|
|
98
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
108
99
|
}, [state.layout]);
|
|
109
100
|
// Sensors, collision detection and drop handling are shared with the
|
|
110
101
|
// front-of-site OverlayShell (kywi-cms#134) — see use-editor-dnd.ts.
|
|
111
102
|
const dnd = useEditorDnd({ registry: moduleRegistry, dispatch });
|
|
112
|
-
|
|
103
|
+
// The save fork (kywi-cms#147 T4): a save that would persist an edited linked
|
|
104
|
+
// instance stops and asks first. With nothing edited it is a pass-through, so
|
|
105
|
+
// every other save behaves exactly as before.
|
|
106
|
+
const fork = useComponentFork({
|
|
107
|
+
layout: state.layout,
|
|
108
|
+
originalLayout: state.originalLayout,
|
|
109
|
+
dispatch,
|
|
110
|
+
library,
|
|
111
|
+
// On a definition canvas there is nothing to fork: saving IS the propagation
|
|
112
|
+
// (kywi-cms#147 T5 review, I1). On a blueprint canvas there is no "this page"
|
|
113
|
+
// to keep an edit on (final review, M2).
|
|
114
|
+
inert: componentActionsWithheld,
|
|
115
|
+
});
|
|
116
|
+
const persist = useCallback((saved) => {
|
|
113
117
|
// kywi-cms#135 review: only advance the "last-saved" baseline once the
|
|
114
118
|
// host's save callback actually reports success. `onSave` may be
|
|
115
119
|
// synchronous, async, or report nothing at all (`void`/`undefined`,
|
|
@@ -118,18 +122,26 @@ export function LayoutEditor({ initialLayout, moduleRegistry, moduleComponents,
|
|
|
118
122
|
// rejection) means the save did NOT persist, so MARK_SAVED must not
|
|
119
123
|
// fire and the Save button / beforeunload guard must stay armed.
|
|
120
124
|
//
|
|
121
|
-
// `saved` is
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
//
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
// `saved` is the document that was actually handed over — captured by the
|
|
126
|
+
// caller, not read from state at resolve time — so the baseline can never
|
|
127
|
+
// become something the author dragged onto the canvas while the PUT was in
|
|
128
|
+
// flight (see the MARK_SAVED action doc in editor-state.ts). With the fork
|
|
129
|
+
// it is also the RESOLVED document, not the edited one.
|
|
130
|
+
const result = onSave?.(saved);
|
|
131
|
+
void Promise.resolve(result)
|
|
127
132
|
.then(ok => {
|
|
128
133
|
if (ok !== false && mountedRef.current)
|
|
129
134
|
dispatch({ type: 'MARK_SAVED', layout: saved });
|
|
130
135
|
})
|
|
131
136
|
.catch(() => { });
|
|
132
|
-
|
|
137
|
+
// Reported back so the fork can tell a failed page save from a clean one:
|
|
138
|
+
// it has already written component definitions by this point and has to say
|
|
139
|
+
// so rather than closing as if everything landed.
|
|
140
|
+
return result;
|
|
141
|
+
}, [onSave]);
|
|
142
|
+
const handleSave = useCallback(() => {
|
|
143
|
+
fork.guardSave(persist);
|
|
144
|
+
}, [fork, persist]);
|
|
133
145
|
const handleCancel = useCallback(() => {
|
|
134
146
|
if (!state.isDirty) {
|
|
135
147
|
onCancel?.();
|
|
@@ -153,119 +165,27 @@ export function LayoutEditor({ initialLayout, moduleRegistry, moduleComponents,
|
|
|
153
165
|
setShowTemplatePicker(false);
|
|
154
166
|
setTemplateRegion(null);
|
|
155
167
|
}, [templateRegion]);
|
|
156
|
-
// ── Reusable components (kywi-cms#46)
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
//
|
|
163
|
-
//
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const moduleId = state.selectedId;
|
|
178
|
-
if (!moduleId)
|
|
179
|
-
return;
|
|
180
|
-
const node = findModuleById(state.layout, moduleId);
|
|
181
|
-
if (!node)
|
|
182
|
-
return;
|
|
183
|
-
const name = window.prompt('Save this module as a reusable component. Name:')?.trim();
|
|
184
|
-
if (!name)
|
|
185
|
-
return;
|
|
186
|
-
try {
|
|
187
|
-
const res = await adminFetch('/api/v1/components', {
|
|
188
|
-
method: 'POST',
|
|
189
|
-
body: JSON.stringify(saveAsComponent(node, name)),
|
|
190
|
-
});
|
|
191
|
-
if (!res.ok)
|
|
192
|
-
return;
|
|
193
|
-
const body = (await res.json());
|
|
194
|
-
const created = body.data;
|
|
195
|
-
if (created?.id) {
|
|
196
|
-
setComponents(prev => [...prev, created]);
|
|
197
|
-
linkModule(moduleId, created.id);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
catch {
|
|
201
|
-
/* ignore — save failed, node stays inline */
|
|
202
|
-
}
|
|
203
|
-
}, [state.selectedId, state.layout, linkModule]);
|
|
204
|
-
// Detach a connected node back into an editable inline copy (snapshots the
|
|
205
|
-
// component's current definition into the node and drops the link).
|
|
206
|
-
const handleDetach = useCallback(() => {
|
|
207
|
-
const moduleId = state.selectedId;
|
|
208
|
-
if (!moduleId)
|
|
209
|
-
return;
|
|
210
|
-
const node = findModuleById(state.layout, moduleId);
|
|
211
|
-
if (!node?.componentId)
|
|
212
|
-
return;
|
|
213
|
-
const comp = components.find(c => c.id === node.componentId);
|
|
214
|
-
const detached = detachModuleFromComponent(node, comp ?? null);
|
|
215
|
-
dispatch({ type: 'REPLACE_MODULE', moduleId, node: detached });
|
|
216
|
-
dispatch({ type: 'DESELECT' });
|
|
217
|
-
}, [state.selectedId, state.layout, components]);
|
|
218
|
-
// ── Reusable section components (kywi-cms#69) ─────────────────────────────
|
|
219
|
-
// Save the selected section as a reusable section component, then link it in
|
|
220
|
-
// place (stamp componentId, keeping the section id/position) so it immediately
|
|
221
|
-
// becomes a live instance of the new component.
|
|
222
|
-
const handleSaveSectionAsComponent = useCallback(async () => {
|
|
223
|
-
const sectionId = state.selectedId;
|
|
224
|
-
if (!sectionId)
|
|
225
|
-
return;
|
|
226
|
-
const section = findSectionById(state.layout, sectionId);
|
|
227
|
-
if (!section)
|
|
228
|
-
return;
|
|
229
|
-
const name = window.prompt('Save this section as a reusable component. Name:')?.trim();
|
|
230
|
-
if (!name)
|
|
231
|
-
return;
|
|
232
|
-
try {
|
|
233
|
-
const res = await adminFetch('/api/v1/components', {
|
|
234
|
-
method: 'POST',
|
|
235
|
-
body: JSON.stringify(saveAsComponent(section, name)),
|
|
236
|
-
});
|
|
237
|
-
if (!res.ok)
|
|
238
|
-
return;
|
|
239
|
-
const body = (await res.json());
|
|
240
|
-
const created = body.data;
|
|
241
|
-
if (created?.id) {
|
|
242
|
-
setSectionComponents(prev => [...prev, created]);
|
|
243
|
-
// Link in place: keep the section's id/position, stamp the new componentId.
|
|
244
|
-
dispatch({
|
|
245
|
-
type: 'REPLACE_SECTION',
|
|
246
|
-
sectionId,
|
|
247
|
-
section: { ...section, componentId: created.id },
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
catch {
|
|
252
|
-
/* ignore — save failed, section stays inline */
|
|
253
|
-
}
|
|
254
|
-
}, [state.selectedId, state.layout]);
|
|
255
|
-
// Detach a connected section back into an editable inline copy (strips the
|
|
256
|
-
// link, deep-clones the local copy with fresh ids). The fresh id means the old
|
|
257
|
-
// selection is stale, so deselect afterwards (mirrors module detach).
|
|
258
|
-
const handleDetachSection = useCallback(() => {
|
|
259
|
-
const sectionId = state.selectedId;
|
|
260
|
-
if (!sectionId)
|
|
261
|
-
return;
|
|
262
|
-
const section = findSectionById(state.layout, sectionId);
|
|
263
|
-
if (!section?.componentId)
|
|
264
|
-
return;
|
|
265
|
-
const detached = detachSectionFromComponent(section);
|
|
266
|
-
dispatch({ type: 'REPLACE_SECTION', sectionId, section: detached });
|
|
267
|
-
dispatch({ type: 'DESELECT' });
|
|
268
|
-
}, [state.selectedId, state.layout]);
|
|
168
|
+
// ── Reusable components (kywi-cms#46/#69/#147) ────────────────────────────
|
|
169
|
+
//
|
|
170
|
+
// Save-as-component (all three granularities), connect-in-place and detach all
|
|
171
|
+
// live in one hook shared with the overlay shell, so the two editors cannot
|
|
172
|
+
// drift apart on what saving or detaching means.
|
|
173
|
+
const connect = useComponentConnect({ layout: state.layout, dispatch, library });
|
|
174
|
+
// The canvas chrome only ever needed the linked pill's name lookup
|
|
175
|
+
// (`nameOf`) — its "Save as component" buttons are gone at every granularity
|
|
176
|
+
// (kywi-cms#159), so there is nothing left here for a definition/blueprint
|
|
177
|
+
// canvas to withhold. `connect.affordances` is exactly `{ nameOf }` in every
|
|
178
|
+
// case now; `componentActionsWithheld` still gates the props rail's own
|
|
179
|
+
// buttons (via `canvasKind` below) and the palette filter just below.
|
|
180
|
+
const componentAffordances = connect.affordances;
|
|
181
|
+
// The `component` placeholder is the one palette entry these canvases cannot
|
|
182
|
+
// use: its only purpose is to be pointed at a saved component — the nested link
|
|
183
|
+
// a definition may not hold, and the untracked link a blueprint must not mint.
|
|
184
|
+
// Withheld rather than offered-then-inert.
|
|
185
|
+
const paletteModules = useMemo(() => {
|
|
186
|
+
const modules = moduleRegistry.list();
|
|
187
|
+
return componentActionsWithheld ? modules.filter(m => m.name !== 'component') : modules;
|
|
188
|
+
}, [moduleRegistry, componentActionsWithheld]);
|
|
269
189
|
const handleDeleteSection = useCallback(() => {
|
|
270
190
|
if (state.selectedId)
|
|
271
191
|
dispatch({ type: 'REMOVE_SECTION', sectionId: state.selectedId });
|
|
@@ -290,16 +210,27 @@ export function LayoutEditor({ initialLayout, moduleRegistry, moduleComponents,
|
|
|
290
210
|
dispatch({ type: 'UNWRAP_VARIANT_CONTAINER', containerId });
|
|
291
211
|
dispatch({ type: 'DESELECT' });
|
|
292
212
|
}, []);
|
|
293
|
-
// Module-type components offered by the props-panel picker
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
const sectionComponentOptions =
|
|
213
|
+
// Module-type components offered by the props-panel picker; section- and
|
|
214
|
+
// container-type ones name a linked instance in its badge.
|
|
215
|
+
const componentOptions = library.optionsFor('module');
|
|
216
|
+
const sectionComponentOptions = library.optionsFor('section');
|
|
217
|
+
const containerComponentOptions = library.optionsFor('variantContainer');
|
|
218
|
+
// The selection may sit INSIDE another node's linked component instance (a
|
|
219
|
+
// module in a linked section, a section in a linked container's arm), where
|
|
220
|
+
// every component action is refused — see `useComponentConnect`. The rail
|
|
221
|
+
// withdraws them rather than offering a button that cannot work.
|
|
222
|
+
const selectionInsideLinkedComponent = state.selectedId
|
|
223
|
+
? connect.isInsideLinkedComponent(state.selectedId)
|
|
224
|
+
: false;
|
|
297
225
|
const selectedModule = state.selectedId
|
|
298
226
|
? findModuleById(state.layout, state.selectedId)
|
|
299
227
|
: null;
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
228
|
+
// Which registry entry describes this node's FIELDS: for a linked instance the
|
|
229
|
+
// component's own moduleType, not the placeholder node's `type` (kywi-cms#147 T4
|
|
230
|
+
// review, I2 — see `fieldModuleType`). Null means there is nothing honest to show,
|
|
231
|
+
// and the rail renders no content fields at all.
|
|
232
|
+
const selectedFieldType = selectedModule ? library.fieldModuleType(selectedModule) : null;
|
|
233
|
+
const selectedConfig = selectedFieldType ? moduleRegistry.get(selectedFieldType) : null;
|
|
303
234
|
// A section is selected when SELECT carried selectionType 'section' (#69).
|
|
304
235
|
const selectedSection = state.selectedType === 'section' && state.selectedId
|
|
305
236
|
? findSectionById(state.layout, state.selectedId)
|
|
@@ -311,10 +242,37 @@ export function LayoutEditor({ initialLayout, moduleRegistry, moduleComponents,
|
|
|
311
242
|
return (_jsxs(DndContext, { sensors: dnd.sensors, collisionDetection: dnd.collisionDetection, onDragStart: dnd.handleDragStart, onDragMove: dnd.handleDragMove, onDragEnd: dnd.handleDragEnd, onDragCancel: dnd.handleDragCancel, accessibility: dnd.accessibility, children: [_jsx(PaletteDragGhost, { activeDrag: dnd.activeDrag }), _jsxs("div", { className: "kywi-editor-root", children: [_jsx(EditorToolbar, { state: state, dispatch: dispatch, ...(audiences ? { audiences } : {}), onSave: handleSave, onCancel: handleCancel, onAddSection: () => {
|
|
312
243
|
setTemplateRegion(Object.keys(state.layout.regions)[0] ?? 'main');
|
|
313
244
|
setShowTemplatePicker(true);
|
|
314
|
-
} }), _jsxs("div", { className: "kywi-editor-body", children: [_jsx(ModulePalette, { modules:
|
|
245
|
+
} }), _jsxs("div", { className: "kywi-editor-body", children: [_jsx(ModulePalette, { modules: paletteModules, ...(userRole ? { userRole } : {}) }), _jsx("div", { className: "kywi-editor-canvas", children: _jsx(DropTargetContext.Provider, { value: dnd.dropTarget, children: _jsx(EditorCanvas, { state: state, dispatch: dispatch, moduleComponents: moduleComponents, onInsertSection: handleInsertSection, resolveComponent: library.resolveModule, componentAffordances: componentAffordances }) }) }), _jsx(PropsPanel, { module: selectedModule, moduleConfig: selectedConfig, ...(audiences ? { audiences } : {}), components: componentOptions,
|
|
246
|
+
// What a linked module renders, so its fields show the component's
|
|
247
|
+
// content rather than an empty form (kywi-cms#147 T4).
|
|
248
|
+
linkedModuleRender: selectedModule ? library.renderedModule(selectedModule) : null, 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 }), onSaveAsComponent: () => {
|
|
315
249
|
if (state.selectedId)
|
|
316
|
-
|
|
317
|
-
},
|
|
250
|
+
connect.saveModule(state.selectedId);
|
|
251
|
+
}, onLinkComponent: (componentId) => {
|
|
252
|
+
if (state.selectedId)
|
|
253
|
+
connect.linkModule(state.selectedId, componentId);
|
|
254
|
+
}, onDetach: () => {
|
|
255
|
+
if (state.selectedId)
|
|
256
|
+
connect.detachModule(state.selectedId);
|
|
257
|
+
}, insideLinkedComponent: selectionInsideLinkedComponent, canvasKind: canvasKind, section: selectedSection, sectionComponents: sectionComponentOptions, onSaveSectionAsComponent: () => {
|
|
258
|
+
if (state.selectedId)
|
|
259
|
+
connect.saveSection(state.selectedId);
|
|
260
|
+
}, onDetachSection: () => {
|
|
261
|
+
if (state.selectedId)
|
|
262
|
+
connect.detachSection(state.selectedId);
|
|
263
|
+
}, onDeleteSection: handleDeleteSection, variantContainer: selectedVariantContainer, variantContainerComponents: containerComponentOptions, onSaveVariantContainerAsComponent: () => {
|
|
264
|
+
if (state.selectedId)
|
|
265
|
+
connect.saveVariantContainer(state.selectedId);
|
|
266
|
+
}, onDetachVariantContainer: () => {
|
|
267
|
+
if (state.selectedId)
|
|
268
|
+
connect.detachVariantContainer(state.selectedId);
|
|
269
|
+
}, onUpdateVariantContainer: handleUpdateVariantContainer, onDeleteVariantContainer: handleDeleteVariantContainer, onUnwrapVariantContainer: handleUnwrapVariantContainer, onClose: () => dispatch({ type: 'DESELECT' }) })] })] }), showTemplatePicker && (_jsx(SectionTemplatePicker
|
|
270
|
+
// The library this shell already loaded — the picker must not fetch its
|
|
271
|
+
// own copy of rows we are holding (kywi-cms#147 T3 review, I3).
|
|
272
|
+
, {
|
|
273
|
+
// The library this shell already loaded — the picker must not fetch its
|
|
274
|
+
// own copy of rows we are holding (kywi-cms#147 T3 review, I3).
|
|
275
|
+
componentLibrary: library.components, onSelect: (columns) => {
|
|
318
276
|
if (templateRegion) {
|
|
319
277
|
dispatch({ type: 'ADD_SECTION', regionName: templateRegion, columns });
|
|
320
278
|
}
|
|
@@ -326,17 +284,30 @@ export function LayoutEditor({ initialLayout, moduleRegistry, moduleComponents,
|
|
|
326
284
|
}
|
|
327
285
|
setShowTemplatePicker(false);
|
|
328
286
|
setTemplateRegion(null);
|
|
329
|
-
},
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
287
|
+
}, ...(componentActionsWithheld ? {} : {
|
|
288
|
+
onInsertComponent: (section) => {
|
|
289
|
+
// A linked section (componentId stamped) — ADD_SECTIONS clones it with
|
|
290
|
+
// fresh ids while cloneSection preserves the reference (#69).
|
|
291
|
+
if (templateRegion) {
|
|
292
|
+
dispatch({ type: 'ADD_SECTIONS', regionName: templateRegion, sections: [section] });
|
|
293
|
+
}
|
|
294
|
+
setShowTemplatePicker(false);
|
|
295
|
+
setTemplateRegion(null);
|
|
296
|
+
},
|
|
297
|
+
onInsertVariantContainer: (container) => {
|
|
298
|
+
// A linked container component (kywi-cms#147). Containers live at
|
|
299
|
+
// region level only, so this is the same insert affordance a section
|
|
300
|
+
// uses — ADD_VARIANT_CONTAINER clones it with fresh ids while
|
|
301
|
+
// cloneVariantContainer preserves the reference.
|
|
302
|
+
if (templateRegion) {
|
|
303
|
+
dispatch({ type: 'ADD_VARIANT_CONTAINER', regionName: templateRegion, container });
|
|
304
|
+
}
|
|
305
|
+
setShowTemplatePicker(false);
|
|
306
|
+
setTemplateRegion(null);
|
|
307
|
+
},
|
|
308
|
+
}), onClose: () => {
|
|
338
309
|
setShowTemplatePicker(false);
|
|
339
310
|
setTemplateRegion(null);
|
|
340
|
-
} })), confirmCancel && (_jsx(ConfirmDialog, { title: "Discard unsaved layout changes?", message: "This layout has changes you haven't saved yet. Cancelling now discards them.", confirmLabel: "Discard", onConfirm: confirmCancelDiscard, onCancel: () => setConfirmCancel(false) }))] }));
|
|
311
|
+
} })), connect.dialog, fork.dialog, confirmCancel && (_jsx(ConfirmDialog, { title: "Discard unsaved layout changes?", message: "This layout has changes you haven't saved yet. Cancelling now discards them.", confirmLabel: "Discard", onConfirm: confirmCancelDiscard, onCancel: () => setConfirmCancel(false) }))] }));
|
|
341
312
|
}
|
|
342
313
|
//# sourceMappingURL=layout-editor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-editor.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/layout-editor.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layout-editor.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/layout-editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pill naming the component a node is an instance of.
|
|
3
|
+
*
|
|
4
|
+
* `data-linked-component` is the test/e2e hook; the name is the accessible text,
|
|
5
|
+
* not a tooltip, because "which component is this?" is the question the
|
|
6
|
+
* affordance exists to answer.
|
|
7
|
+
*/
|
|
8
|
+
export declare function LinkedComponentPill({ name }: {
|
|
9
|
+
name?: string | null | undefined;
|
|
10
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
/**
|
|
12
|
+
* What the canvas needs from its shell to name a linked instance's pill.
|
|
13
|
+
*
|
|
14
|
+
* Both shells build one of these from the loaded component library (see
|
|
15
|
+
* `use-component-connect.ts`), so the canvas stays free of fetching. `nameOf`
|
|
16
|
+
* is optional: a shell that wires none of it gets a canvas with no pill name at
|
|
17
|
+
* all, which is what the unit tests that render `EditorCanvas` directly rely on.
|
|
18
|
+
*
|
|
19
|
+
* Used to also carry `onSaveModule` / `onSaveSection` / `onSaveVariantContainer`
|
|
20
|
+
* for the chrome's own "Save as component" buttons, but that button no longer
|
|
21
|
+
* lives in the chrome at any granularity (kywi-cms#159) — the props rail is its
|
|
22
|
+
* only home now, wired straight to `use-component-connect.tsx`'s
|
|
23
|
+
* `saveModule` / `saveSection` / `saveVariantContainer` independent of this type.
|
|
24
|
+
*/
|
|
25
|
+
export interface ComponentAffordances {
|
|
26
|
+
/** Human name for a linked component id, or null when it isn't known. */
|
|
27
|
+
nameOf: (componentId: string) => string | null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* `nameOf` for a node that may or may not be linked, or null when it isn't.
|
|
31
|
+
* Keeps the "is this linked?" test in one place: the node's own `componentId`,
|
|
32
|
+
* never a separate flag (there isn't one, and a second source of truth here
|
|
33
|
+
* would be one more thing to keep in step with the renderer).
|
|
34
|
+
*/
|
|
35
|
+
export declare function linkedComponentName(node: {
|
|
36
|
+
componentId?: string | undefined;
|
|
37
|
+
}, affordances: ComponentAffordances | undefined): string | null;
|
|
38
|
+
//# sourceMappingURL=linked-component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked-component.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/linked-component.tsx"],"names":[],"mappings":"AAuBA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,2CAWjF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC1C,WAAW,EAAE,oBAAoB,GAAG,SAAS,GAC5C,MAAM,GAAG,IAAI,CAGf"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { EditorIcon } from './editor-icons.js';
|
|
4
|
+
/**
|
|
5
|
+
* linked-component.tsx
|
|
6
|
+
* The editor's linked-instance affordance and the callbacks the canvas needs to
|
|
7
|
+
* offer "Save as component" (kywi-cms#147).
|
|
8
|
+
*
|
|
9
|
+
* A linked instance looks like ordinary content — that is the whole point of a
|
|
10
|
+
* component — so without an affordance the owner has no way to know that the
|
|
11
|
+
* heading they are about to edit is shared with eleven other pages. Webflow's
|
|
12
|
+
* answer is a distinct outline plus a named badge, and that is what this is: one
|
|
13
|
+
* pill, rendered inside whichever chrome already floats above the node
|
|
14
|
+
* (section bar, container bar, module chip row), plus a `--linked` modifier class
|
|
15
|
+
* the stylesheet turns into a distinct outline.
|
|
16
|
+
*
|
|
17
|
+
* Editor-only, in both shells: nothing here reaches the public renderer.
|
|
18
|
+
*/
|
|
19
|
+
/** Fallback when the component library hasn't loaded (or the row is gone). */
|
|
20
|
+
const UNNAMED_COMPONENT = 'Component';
|
|
21
|
+
/**
|
|
22
|
+
* The pill naming the component a node is an instance of.
|
|
23
|
+
*
|
|
24
|
+
* `data-linked-component` is the test/e2e hook; the name is the accessible text,
|
|
25
|
+
* not a tooltip, because "which component is this?" is the question the
|
|
26
|
+
* affordance exists to answer.
|
|
27
|
+
*/
|
|
28
|
+
export function LinkedComponentPill({ name }) {
|
|
29
|
+
return (_jsxs("span", { className: "kywi-editor-linked-pill", "data-linked-component": name ?? UNNAMED_COMPONENT, contentEditable: false, children: [_jsx(EditorIcon, { name: "card", size: 12 }), name ?? UNNAMED_COMPONENT] }));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* `nameOf` for a node that may or may not be linked, or null when it isn't.
|
|
33
|
+
* Keeps the "is this linked?" test in one place: the node's own `componentId`,
|
|
34
|
+
* never a separate flag (there isn't one, and a second source of truth here
|
|
35
|
+
* would be one more thing to keep in step with the renderer).
|
|
36
|
+
*/
|
|
37
|
+
export function linkedComponentName(node, affordances) {
|
|
38
|
+
if (!node.componentId)
|
|
39
|
+
return null;
|
|
40
|
+
return affordances?.nameOf(node.componentId) ?? UNNAMED_COMPONENT;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=linked-component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked-component.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/linked-component.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C;;;;;;;;;;;;;;GAcG;AAEH,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAErC;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAE,IAAI,EAAwC;IAChF,OAAO,CACL,gBACE,SAAS,EAAC,yBAAyB,2BACZ,IAAI,IAAI,iBAAiB,EAChD,eAAe,EAAE,KAAK,aAEtB,KAAC,UAAU,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAE,EAAE,GAAI,EACnC,IAAI,IAAI,iBAAiB,IACrB,CACR,CAAA;AACH,CAAC;AAqBD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAA0C,EAC1C,WAA6C;IAE7C,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAA;IAClC,OAAO,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,iBAAiB,CAAA;AACnE,CAAC"}
|
|
@@ -70,8 +70,17 @@ interface ModuleOverlayProps {
|
|
|
70
70
|
* this either.
|
|
71
71
|
*/
|
|
72
72
|
onInlineFallback?: () => void;
|
|
73
|
+
/**
|
|
74
|
+
* The component this module is a linked instance of (kywi-cms#147). Stamps
|
|
75
|
+
* `data-component-id` (the same hook the public renderer emits), switches the
|
|
76
|
+
* wrapper to the linked outline, and names the component in a pill beside the
|
|
77
|
+
* type chip — a linked module is otherwise indistinguishable from an ordinary
|
|
78
|
+
* one, which is how an owner edits eleven pages by accident.
|
|
79
|
+
*/
|
|
80
|
+
componentId?: string;
|
|
81
|
+
componentName?: string | null;
|
|
73
82
|
children: React.ReactNode;
|
|
74
83
|
}
|
|
75
|
-
export declare function ModuleOverlay({ moduleId, instanceId, columnId, index, isSelected, onSelect, actions, typeLabel, inPlace, moduleType, inlineText, onInlineFallback, children, }: ModuleOverlayProps): import("react/jsx-runtime").JSX.Element;
|
|
84
|
+
export declare function ModuleOverlay({ moduleId, instanceId, columnId, index, isSelected, onSelect, actions, typeLabel, inPlace, moduleType, inlineText, onInlineFallback, componentId, componentName, children, }: ModuleOverlayProps): import("react/jsx-runtime").JSX.Element;
|
|
76
85
|
export {};
|
|
77
86
|
//# sourceMappingURL=module-overlay.d.ts.map
|