@kywi-software/core 0.6.2 → 0.6.4
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 +221 -16
- package/README.md +23 -5
- package/dist/admin/layout-editor/column-overlay.d.ts +14 -1
- package/dist/admin/layout-editor/column-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/column-overlay.js +5 -2
- package/dist/admin/layout-editor/column-overlay.js.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.d.ts +34 -1
- package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.js +156 -16
- package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
- package/dist/admin/layout-editor/editor-state.d.ts +57 -2
- package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-state.js +125 -53
- package/dist/admin/layout-editor/editor-state.js.map +1 -1
- package/dist/admin/layout-editor/editor.css +487 -44
- package/dist/admin/layout-editor/index.d.ts +1 -1
- package/dist/admin/layout-editor/index.d.ts.map +1 -1
- package/dist/admin/layout-editor/index.js.map +1 -1
- package/dist/admin/layout-editor/inline-text.d.ts +44 -0
- package/dist/admin/layout-editor/inline-text.d.ts.map +1 -0
- package/dist/admin/layout-editor/inline-text.js +67 -0
- package/dist/admin/layout-editor/inline-text.js.map +1 -0
- package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
- package/dist/admin/layout-editor/layout-editor.js +23 -31
- package/dist/admin/layout-editor/layout-editor.js.map +1 -1
- package/dist/admin/layout-editor/module-overlay.d.ts +32 -1
- package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/module-overlay.js +108 -6
- package/dist/admin/layout-editor/module-overlay.js.map +1 -1
- package/dist/admin/layout-editor/node-lookup.d.ts +94 -0
- package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -0
- package/dist/admin/layout-editor/node-lookup.js +142 -0
- package/dist/admin/layout-editor/node-lookup.js.map +1 -0
- package/dist/admin/layout-editor/overlay-shell.d.ts +19 -1
- package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.js +177 -69
- package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
- package/dist/admin/layout-editor/props-panel.d.ts +9 -2
- package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
- package/dist/admin/layout-editor/props-panel.js +13 -5
- package/dist/admin/layout-editor/props-panel.js.map +1 -1
- package/dist/admin/layout-editor/region-overlay.d.ts +8 -1
- package/dist/admin/layout-editor/region-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/region-overlay.js +4 -1
- package/dist/admin/layout-editor/region-overlay.js.map +1 -1
- package/dist/admin/layout-editor/section-insert-line.d.ts +7 -1
- package/dist/admin/layout-editor/section-insert-line.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-insert-line.js +4 -1
- package/dist/admin/layout-editor/section-insert-line.js.map +1 -1
- package/dist/admin/layout-editor/section-overlay.d.ts +13 -1
- package/dist/admin/layout-editor/section-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-overlay.js +24 -12
- package/dist/admin/layout-editor/section-overlay.js.map +1 -1
- package/dist/admin/layout-editor/section-variant-container-config.d.ts +29 -0
- package/dist/admin/layout-editor/section-variant-container-config.d.ts.map +1 -0
- package/dist/admin/layout-editor/section-variant-container-config.js +82 -0
- package/dist/admin/layout-editor/section-variant-container-config.js.map +1 -0
- package/dist/admin/styles/admin.css +5 -2
- package/dist/admin/surfaces/content/content-edit.d.ts.map +1 -1
- package/dist/admin/surfaces/content/content-edit.js +8 -1
- package/dist/admin/surfaces/content/content-edit.js.map +1 -1
- package/dist/db/content-queries.d.ts +35 -0
- package/dist/db/content-queries.d.ts.map +1 -1
- package/dist/db/content-queries.js +175 -36
- package/dist/db/content-queries.js.map +1 -1
- package/dist/layout/registry.d.ts +8 -1
- package/dist/layout/registry.d.ts.map +1 -1
- package/dist/layout/registry.js +8 -1
- package/dist/layout/registry.js.map +1 -1
- package/dist/nav/index.d.ts +1 -1
- package/dist/nav/index.d.ts.map +1 -1
- package/dist/nav/index.js +4 -1
- package/dist/nav/index.js.map +1 -1
- package/dist/nav/url-resolver.d.ts +27 -0
- package/dist/nav/url-resolver.d.ts.map +1 -1
- package/dist/nav/url-resolver.js +36 -1
- package/dist/nav/url-resolver.js.map +1 -1
- package/dist/scope/edit-mode-hooks.d.ts.map +1 -1
- package/dist/scope/edit-mode-hooks.js +27 -1
- package/dist/scope/edit-mode-hooks.js.map +1 -1
- package/dist/scope/inline-editing.d.ts.map +1 -1
- package/dist/scope/inline-editing.js +2 -1
- package/dist/scope/inline-editing.js.map +1 -1
- package/dist/site/styles.css +147 -4
- package/package.json +1 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* node-lookup.ts
|
|
3
|
+
* Arm-aware traversal for the layout editor (kywi-cms#92).
|
|
4
|
+
*
|
|
5
|
+
* A region's node array holds `LayoutSection`s *and* `VariantContainer`s. A
|
|
6
|
+
* container is not a leaf: it owns a Default arm (`defaultSections`) plus one
|
|
7
|
+
* arm per `VariantEntry` (`variants[].sections`), and every one of those arms
|
|
8
|
+
* holds ordinary sections. Editor lookups used to stop at the top level, which
|
|
9
|
+
* is exactly why section-level personalized / A-B'd content (typically the
|
|
10
|
+
* hero) was invisible and uneditable in the canvas.
|
|
11
|
+
*
|
|
12
|
+
* Everything here walks the same shape as the renderer
|
|
13
|
+
* (`VariantContainerRenderer`) and `layout/module-permissions.ts`: region nodes
|
|
14
|
+
* → container arms → sections → columns → modules.
|
|
15
|
+
*/
|
|
16
|
+
import { isLayoutSection } from '../../layout/types.js';
|
|
17
|
+
/**
|
|
18
|
+
* Arm id standing for a container's Default arm. Real arms are keyed by their
|
|
19
|
+
* `VariantEntry.id`, so a reserved literal keeps "which arm is open" a single
|
|
20
|
+
* `string` rather than `string | null` everywhere it is stored or compared.
|
|
21
|
+
* The renderer uses the same word for its `data-variant` attribute.
|
|
22
|
+
*/
|
|
23
|
+
export const DEFAULT_ARM_ID = 'default';
|
|
24
|
+
/** Narrow a RegionNode to a VariantContainer (mirrors `isLayoutSection`). */
|
|
25
|
+
export function isVariantContainer(node) {
|
|
26
|
+
return node.type === 'variantContainer';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Every section-holding array in a regions map, in document order: each
|
|
30
|
+
* region's own node list first, then each variant container's Default arm and
|
|
31
|
+
* variant arms.
|
|
32
|
+
*/
|
|
33
|
+
export function* iterSectionHolders(regions) {
|
|
34
|
+
for (const [regionName, nodes] of Object.entries(regions)) {
|
|
35
|
+
yield { regionName, region: nodes, siblings: nodes, container: null, armId: null };
|
|
36
|
+
for (const node of nodes) {
|
|
37
|
+
if (!isVariantContainer(node))
|
|
38
|
+
continue;
|
|
39
|
+
yield {
|
|
40
|
+
regionName,
|
|
41
|
+
region: nodes,
|
|
42
|
+
siblings: node.defaultSections,
|
|
43
|
+
container: node,
|
|
44
|
+
armId: DEFAULT_ARM_ID,
|
|
45
|
+
};
|
|
46
|
+
for (const variant of node.variants) {
|
|
47
|
+
yield {
|
|
48
|
+
regionName,
|
|
49
|
+
region: nodes,
|
|
50
|
+
siblings: variant.sections,
|
|
51
|
+
container: node,
|
|
52
|
+
armId: variant.id,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** The sections of one arm, or null when `armId` names no arm of this container. */
|
|
59
|
+
export function armSections(container, armId) {
|
|
60
|
+
if (armId === DEFAULT_ARM_ID)
|
|
61
|
+
return container.defaultSections;
|
|
62
|
+
return container.variants.find(v => v.id === armId)?.sections ?? null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The sections the editor should show for `armId`, falling back to the Default
|
|
66
|
+
* arm when the requested arm no longer exists (e.g. it was just deleted while
|
|
67
|
+
* open). Never null, so the canvas always has something to render.
|
|
68
|
+
*/
|
|
69
|
+
export function resolveArmSections(container, armId) {
|
|
70
|
+
return armSections(container, armId) ?? container.defaultSections;
|
|
71
|
+
}
|
|
72
|
+
/** Find a section by id anywhere in the regions map, including container arms. */
|
|
73
|
+
export function findSectionIn(regions, sectionId) {
|
|
74
|
+
for (const holder of iterSectionHolders(regions)) {
|
|
75
|
+
for (let i = 0; i < holder.siblings.length; i++) {
|
|
76
|
+
const node = holder.siblings[i];
|
|
77
|
+
if (node !== undefined && isLayoutSection(node) && node.id === sectionId) {
|
|
78
|
+
return { holder, section: node, index: i };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
/** Find a column by id anywhere in the regions map, including container arms. */
|
|
85
|
+
export function findColumnIn(regions, columnId) {
|
|
86
|
+
for (const holder of iterSectionHolders(regions)) {
|
|
87
|
+
for (const node of holder.siblings) {
|
|
88
|
+
if (!isLayoutSection(node))
|
|
89
|
+
continue;
|
|
90
|
+
for (const column of node.columns) {
|
|
91
|
+
if (column.id === columnId)
|
|
92
|
+
return { holder, section: node, column };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
/** Find a module by id anywhere in the regions map, including container arms. */
|
|
99
|
+
export function findModuleIn(regions, moduleId) {
|
|
100
|
+
for (const holder of iterSectionHolders(regions)) {
|
|
101
|
+
for (const node of holder.siblings) {
|
|
102
|
+
if (!isLayoutSection(node))
|
|
103
|
+
continue;
|
|
104
|
+
for (const column of node.columns) {
|
|
105
|
+
for (let mi = 0; mi < column.nodes.length; mi++) {
|
|
106
|
+
const module = column.nodes[mi];
|
|
107
|
+
if (module !== undefined && module.id === moduleId) {
|
|
108
|
+
return { holder, section: node, column, module, moduleIndex: mi };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
/** Find a variant container by id. Containers only ever live at region level. */
|
|
117
|
+
export function findVariantContainerIn(regions, containerId) {
|
|
118
|
+
for (const [regionName, nodes] of Object.entries(regions)) {
|
|
119
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
120
|
+
const node = nodes[i];
|
|
121
|
+
if (node !== undefined && isVariantContainer(node) && node.id === containerId) {
|
|
122
|
+
return { regionName, region: nodes, container: node, index: i };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
// ── Document-level readers ───────────────────────────────────────────────────
|
|
129
|
+
//
|
|
130
|
+
// Read-only convenience for the editor shells, which resolve the current
|
|
131
|
+
// selection straight from `layout.regions` (matching their prior behaviour —
|
|
132
|
+
// they have never searched pageVariant / abExperiment regions).
|
|
133
|
+
export function findModuleInDocument(layout, moduleId) {
|
|
134
|
+
return findModuleIn(layout.regions, moduleId)?.module ?? null;
|
|
135
|
+
}
|
|
136
|
+
export function findSectionInDocument(layout, sectionId) {
|
|
137
|
+
return findSectionIn(layout.regions, sectionId)?.section ?? null;
|
|
138
|
+
}
|
|
139
|
+
export function findVariantContainerInDocument(layout, containerId) {
|
|
140
|
+
return findVariantContainerIn(layout.regions, containerId)?.container ?? null;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=node-lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-lookup.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/node-lookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,24 @@ export interface OverlayShellProps {
|
|
|
24
24
|
onSchedule?: (layout: LayoutDocument, scheduledAt: string) => void;
|
|
25
25
|
/** Current user's role — gates admin-only modules in the palette. */
|
|
26
26
|
userRole?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Class name the host puts on the page's own body wrapper (the scaffold's
|
|
29
|
+
* `page page--layout` article). Applied to the in-place flow container so the
|
|
30
|
+
* site's own page-level rules — width, gutters, vertical rhythm — still apply
|
|
31
|
+
* while editing (kywi-cms#94). Without it the editor would render the regions
|
|
32
|
+
* outside the wrapper the site styles them in.
|
|
33
|
+
*/
|
|
34
|
+
pageClassName?: string;
|
|
27
35
|
}
|
|
28
|
-
|
|
36
|
+
/**
|
|
37
|
+
* The front-of-site editor (kywi-cms#94).
|
|
38
|
+
*
|
|
39
|
+
* This is not a modal over the page: the page renders in normal document flow,
|
|
40
|
+
* at its real width, through its own stylesheet — `EditorCanvas` in `inPlace`
|
|
41
|
+
* mode emits the public renderer's markup — and every piece of editing chrome
|
|
42
|
+
* is a fixed rail docked to a viewport edge. Selection outlines, the props rail
|
|
43
|
+
* and inline text editing sit ON the page instead of framing it, and a
|
|
44
|
+
* persistent Done returns to the browse-mode toolbar.
|
|
45
|
+
*/
|
|
46
|
+
export declare function OverlayShell({ editMode, initialLayout, contentId, contentType, pageTitle, themeName: _themeName, themeRegistry: _themeRegistry, moduleRegistry, moduleComponents, onSave, onPublish, onSchedule, userRole, pageClassName, }: OverlayShellProps): import("react/jsx-runtime").JSX.Element | null;
|
|
29
47
|
//# sourceMappingURL=overlay-shell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay-shell.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/overlay-shell.tsx"],"names":[],"mappings":"AACA,OAAO,
|
|
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;AAU5F,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;AAiBvE,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,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IAC5D,SAAS,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IAC/D,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAClE,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;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,GACd,EAAE,iBAAiB,kDA+bnB"}
|
|
@@ -1,38 +1,64 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { useReducer, useState, useCallback, useEffect } from 'react';
|
|
3
|
+
import { useReducer, useState, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
4
4
|
import { DndContext, PointerSensor, KeyboardSensor, useSensors, useSensor, closestCenter, } from '@dnd-kit/core';
|
|
5
|
-
import { isLayoutSection } from '../../layout/types.js';
|
|
6
5
|
import { editorReducer, createInitialState } from './editor-state.js';
|
|
6
|
+
import { findModuleInDocument, findSectionInDocument, findVariantContainerInDocument, } from './node-lookup.js';
|
|
7
|
+
import { resolveDragEndAction } from './drag-utils.js';
|
|
7
8
|
import { EditorCanvas } from './editor-canvas.js';
|
|
8
9
|
import { ModulePalette } from './module-palette.js';
|
|
9
10
|
import { PropsPanel } from './props-panel.js';
|
|
10
11
|
import { SectionTemplatePicker } from './section-template-picker.js';
|
|
11
12
|
import { EditorIcon } from './editor-icons.js';
|
|
13
|
+
import { ConfirmDialog } from '../primitives.js';
|
|
14
|
+
import { resolveInlineTextProp, readInlineTextValue } from './inline-text.js';
|
|
12
15
|
import './editor.css';
|
|
13
16
|
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
// Arm-aware (kywi-cms#92): resolves modules inside a section-level variant
|
|
18
|
+
// container's arms as well as those sitting directly in a region's sections.
|
|
19
|
+
const findModuleById = findModuleInDocument;
|
|
20
|
+
const findSectionById = findSectionInDocument;
|
|
21
|
+
/**
|
|
22
|
+
* While the editor is open the page is offset by the fixed edit bar, exactly as
|
|
23
|
+
* the browse-mode toolbar does it (kywi-cms#93) — one class on <html>, removed
|
|
24
|
+
* the moment the editor unmounts, so the offset never outlives the bar.
|
|
25
|
+
*/
|
|
26
|
+
const EDITING_OFFSET_CLASS = 'kywi-frontend-edit--editing';
|
|
27
|
+
/** Viewport widths the responsive preview constrains the page to. */
|
|
28
|
+
const PREVIEW_WIDTH = {
|
|
29
|
+
// Desktop is the page's REAL width — no wrapper, no letterbox (kywi-cms#94).
|
|
30
|
+
desktop: null,
|
|
31
|
+
tablet: '768px',
|
|
32
|
+
mobile: '375px',
|
|
33
|
+
};
|
|
29
34
|
// ── Component ────────────────────────────────────────────────────────────────
|
|
30
|
-
|
|
35
|
+
/**
|
|
36
|
+
* The front-of-site editor (kywi-cms#94).
|
|
37
|
+
*
|
|
38
|
+
* This is not a modal over the page: the page renders in normal document flow,
|
|
39
|
+
* at its real width, through its own stylesheet — `EditorCanvas` in `inPlace`
|
|
40
|
+
* mode emits the public renderer's markup — and every piece of editing chrome
|
|
41
|
+
* is a fixed rail docked to a viewport edge. Selection outlines, the props rail
|
|
42
|
+
* and inline text editing sit ON the page instead of framing it, and a
|
|
43
|
+
* persistent Done returns to the browse-mode toolbar.
|
|
44
|
+
*/
|
|
45
|
+
export function OverlayShell({ editMode, initialLayout, contentId, contentType, pageTitle, themeName: _themeName, themeRegistry: _themeRegistry, moduleRegistry, moduleComponents, onSave, onPublish, onSchedule, userRole, pageClassName, }) {
|
|
31
46
|
const [state, dispatch] = useReducer(editorReducer, initialLayout, createInitialState);
|
|
32
47
|
const [showTemplatePicker, setShowTemplatePicker] = useState(false);
|
|
33
48
|
const [templateRegion, setTemplateRegion] = useState(null);
|
|
34
49
|
const [previewMode, setPreviewMode] = useState('desktop');
|
|
50
|
+
const [paletteOpen, setPaletteOpen] = useState(true);
|
|
51
|
+
const [confirmExit, setConfirmExit] = useState(false);
|
|
52
|
+
// Inline text editing: which module is being typed on, plus a reset key so a
|
|
53
|
+
// finished session re-renders that module cleanly from its stored props.
|
|
54
|
+
const [textEdit, setTextEdit] = useState({
|
|
55
|
+
id: null,
|
|
56
|
+
resetId: null,
|
|
57
|
+
nonce: 0,
|
|
58
|
+
});
|
|
59
|
+
const doneRef = useRef(null);
|
|
35
60
|
const sensors = useSensors(useSensor(PointerSensor), useSensor(KeyboardSensor));
|
|
61
|
+
const isActive = editMode.isEditMode && editMode.canEdit;
|
|
36
62
|
// ── Unsaved changes prompt ─────────────────────────────────────────────────
|
|
37
63
|
useEffect(() => {
|
|
38
64
|
function handleBeforeUnload(e) {
|
|
@@ -43,35 +69,24 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
|
|
|
43
69
|
window.addEventListener('beforeunload', handleBeforeUnload);
|
|
44
70
|
return () => window.removeEventListener('beforeunload', handleBeforeUnload);
|
|
45
71
|
}, [state.isDirty]);
|
|
72
|
+
// ── Page offset for the fixed edit bar ─────────────────────────────────────
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
if (!isActive)
|
|
75
|
+
return;
|
|
76
|
+
document.documentElement.classList.add(EDITING_OFFSET_CLASS);
|
|
77
|
+
return () => {
|
|
78
|
+
document.documentElement.classList.remove(EDITING_OFFSET_CLASS);
|
|
79
|
+
};
|
|
80
|
+
}, [isActive]);
|
|
46
81
|
// ── Handlers ───────────────────────────────────────────────────────────────
|
|
82
|
+
// One drag resolver shared with the admin editor (drag-utils) — the inline
|
|
83
|
+
// copy this used to carry predated the kywi-cms#20 occupied-drop fix, so a
|
|
84
|
+
// drop onto an already-populated column was silently swallowed here while it
|
|
85
|
+
// worked in the admin.
|
|
47
86
|
const handleDragEnd = useCallback((event) => {
|
|
48
|
-
const
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
const source = active.data.current?.source;
|
|
52
|
-
if (source === 'palette') {
|
|
53
|
-
const moduleType = active.data.current?.moduleType;
|
|
54
|
-
const columnId = over.data.current?.columnId;
|
|
55
|
-
const index = over.data.current?.index ?? 0;
|
|
56
|
-
if (moduleType && columnId) {
|
|
57
|
-
dispatch({ type: 'ADD_MODULE', columnId, index, moduleType });
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
else if (source === 'canvas') {
|
|
61
|
-
const fromColumnId = active.data.current?.columnId;
|
|
62
|
-
const fromIndex = active.data.current?.index;
|
|
63
|
-
const toColumnId = over.data.current?.columnId;
|
|
64
|
-
const toIndex = over.data.current?.index ?? 0;
|
|
65
|
-
if (fromColumnId && toColumnId) {
|
|
66
|
-
dispatch({
|
|
67
|
-
type: 'MOVE_MODULE',
|
|
68
|
-
fromColumnId,
|
|
69
|
-
fromIndex,
|
|
70
|
-
toColumnId,
|
|
71
|
-
toIndex,
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}
|
|
87
|
+
const action = resolveDragEndAction(event.active, event.over);
|
|
88
|
+
if (action)
|
|
89
|
+
dispatch(action);
|
|
75
90
|
}, []);
|
|
76
91
|
const handleSave = useCallback(() => {
|
|
77
92
|
onSave(state.layout, 'save');
|
|
@@ -89,38 +104,131 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
|
|
|
89
104
|
setTemplateRegion(regionName);
|
|
90
105
|
setShowTemplatePicker(true);
|
|
91
106
|
}, []);
|
|
107
|
+
// Done: leave edit mode and hand the page back to the browse-mode toolbar.
|
|
108
|
+
// Unsaved work asks first — an accidental exit that silently discards a
|
|
109
|
+
// page's worth of edits is the worst outcome this screen can produce.
|
|
110
|
+
const { endEdit } = editMode;
|
|
111
|
+
const exitEditor = useCallback(() => {
|
|
112
|
+
setConfirmExit(false);
|
|
113
|
+
endEdit();
|
|
114
|
+
}, [endEdit]);
|
|
115
|
+
const handleDone = useCallback(() => {
|
|
116
|
+
if (state.isDirty) {
|
|
117
|
+
setConfirmExit(true);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
exitEditor();
|
|
121
|
+
}, [state.isDirty, exitEditor]);
|
|
122
|
+
// ── Inline text editing (kywi-cms#94) ──────────────────────────────────────
|
|
123
|
+
const resolveTextProp = useCallback((moduleType) => resolveInlineTextProp(moduleRegistry.get(moduleType)), [moduleRegistry]);
|
|
124
|
+
const endTextEdit = useCallback((moduleId) => {
|
|
125
|
+
setTextEdit(prev => ({ id: null, resetId: moduleId ?? prev.id, nonce: prev.nonce + 1 }));
|
|
126
|
+
}, []);
|
|
127
|
+
const handleInlineActivate = useCallback((moduleId) => {
|
|
128
|
+
setTextEdit(prev => ({ ...prev, id: moduleId }));
|
|
129
|
+
}, []);
|
|
130
|
+
const handleInlineCommit = useCallback((moduleId, host) => {
|
|
131
|
+
const node = findModuleById(state.layout, moduleId);
|
|
132
|
+
const prop = node ? resolveTextProp(node.type) : null;
|
|
133
|
+
if (node && prop) {
|
|
134
|
+
const next = readInlineTextValue(host, prop.html);
|
|
135
|
+
// Same prop, same action, same history the props panel writes — typing
|
|
136
|
+
// on the page and typing in the rail are one save path.
|
|
137
|
+
if (next !== String(node.props[prop.name] ?? '')) {
|
|
138
|
+
dispatch({ type: 'UPDATE_PROPS', moduleId, props: { [prop.name]: next } });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
endTextEdit(moduleId);
|
|
142
|
+
}, [state.layout, resolveTextProp, endTextEdit]);
|
|
143
|
+
const handleInlineCancel = useCallback(() => {
|
|
144
|
+
endTextEdit(null);
|
|
145
|
+
}, [endTextEdit]);
|
|
146
|
+
const inlineEdit = useMemo(() => ({
|
|
147
|
+
editingId: textEdit.id,
|
|
148
|
+
resetId: textEdit.resetId,
|
|
149
|
+
nonce: textEdit.nonce,
|
|
150
|
+
resolveTextProp,
|
|
151
|
+
onActivate: handleInlineActivate,
|
|
152
|
+
onCommit: handleInlineCommit,
|
|
153
|
+
onCancel: handleInlineCancel,
|
|
154
|
+
}), [textEdit, resolveTextProp, handleInlineActivate, handleInlineCommit, handleInlineCancel]);
|
|
155
|
+
// ── Escape ─────────────────────────────────────────────────────────────────
|
|
156
|
+
// Escape narrows the selection; it NEVER exits the editor. An accidental exit
|
|
157
|
+
// costs unsaved work, so leaving is always the deliberate Done button.
|
|
158
|
+
// (An in-progress text edit handles its own Escape and stops propagation.)
|
|
159
|
+
const hasSelection = state.selectedId !== null;
|
|
160
|
+
const isTextEditing = textEdit.id !== null;
|
|
161
|
+
useEffect(() => {
|
|
162
|
+
if (!isActive)
|
|
163
|
+
return;
|
|
164
|
+
function onKeyDown(e) {
|
|
165
|
+
if (e.key !== 'Escape')
|
|
166
|
+
return;
|
|
167
|
+
// Normally the edited module handles this and stops propagation; this is
|
|
168
|
+
// the safety net for an edit whose host has somehow lost focus.
|
|
169
|
+
if (isTextEditing) {
|
|
170
|
+
handleInlineCancel();
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (hasSelection) {
|
|
174
|
+
dispatch({ type: 'DESELECT' });
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// Nothing selected — put the keyboard on the way out instead of leaving.
|
|
178
|
+
doneRef.current?.focus();
|
|
179
|
+
}
|
|
180
|
+
window.addEventListener('keydown', onKeyDown);
|
|
181
|
+
return () => window.removeEventListener('keydown', onKeyDown);
|
|
182
|
+
}, [isActive, hasSelection, isTextEditing, handleInlineCancel]);
|
|
92
183
|
// ── Permission gate ────────────────────────────────────────────────────────
|
|
93
|
-
if (!
|
|
184
|
+
if (!isActive) {
|
|
94
185
|
return null;
|
|
95
186
|
}
|
|
96
|
-
// ──
|
|
187
|
+
// ── Selection resolution ───────────────────────────────────────────────────
|
|
97
188
|
const selectedModule = state.selectedId
|
|
98
189
|
? findModuleById(state.layout, state.selectedId)
|
|
99
190
|
: null;
|
|
100
191
|
const selectedConfig = selectedModule
|
|
101
192
|
? moduleRegistry.get(selectedModule.type)
|
|
102
193
|
: null;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
194
|
+
const selectedSection = state.selectedType === 'section' && state.selectedId
|
|
195
|
+
? findSectionById(state.layout, state.selectedId)
|
|
196
|
+
: null;
|
|
197
|
+
// A section-level variant container selected via its canvas block (#92).
|
|
198
|
+
const selectedVariantContainer = state.selectedType === 'variantContainer' && state.selectedId
|
|
199
|
+
? findVariantContainerInDocument(state.layout, state.selectedId)
|
|
200
|
+
: null;
|
|
201
|
+
// The props rail opens itself the moment something is selected, and closes
|
|
202
|
+
// (deselect) from its own × — that IS its collapse control.
|
|
203
|
+
const propsRailOpen = Boolean(selectedModule || selectedSection || selectedVariantContainer);
|
|
204
|
+
const previewWidth = PREVIEW_WIDTH[previewMode];
|
|
205
|
+
return (_jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, children: _jsxs("div", { className: "kywi-overlay-shell kywi-overlay-shell--inplace", "data-content-id": contentId, "data-content-type": contentType, children: [_jsxs("div", { className: "kywi-overlay-chrome kywi-overlay-toolbar", role: "toolbar", "aria-label": "Edit controls", children: [_jsxs("span", { className: "kywi-editor-mode-badge", children: [_jsx(EditorIcon, { name: "edit", size: 13 }), "EDIT MODE"] }), _jsx("span", { className: "kywi-overlay-page-title", children: pageTitle }), _jsx("span", { className: "kywi-editor-toolbar-divider" }), _jsx("button", { type: "button", className: `kywi-editor-iconbtn${paletteOpen ? ' kywi-editor-iconbtn--on' : ''}`, "data-action": "toggle-palette", "aria-pressed": paletteOpen, "aria-label": paletteOpen ? 'Hide modules' : 'Show modules', title: paletteOpen ? 'Hide modules' : 'Show modules', onClick: () => setPaletteOpen(v => !v), children: _jsx(EditorIcon, { name: "columns", size: 16 }) }), _jsx("button", { type: "button", className: "kywi-editor-iconbtn", onClick: () => dispatch({ type: 'UNDO' }), disabled: state.historyIndex <= 0, "aria-label": "Undo", title: "Undo", children: _jsx(EditorIcon, { name: "undo", size: 16 }) }), _jsx("button", { type: "button", className: "kywi-editor-iconbtn", onClick: () => dispatch({ type: 'REDO' }), disabled: state.historyIndex >= state.history.length - 1, "aria-label": "Redo", title: "Redo", children: _jsx(EditorIcon, { name: "redo", size: 16 }) }), _jsx("span", { className: "kywi-editor-toolbar-divider" }), _jsx("div", { className: "kywi-overlay-preview-toggle", children: ['desktop', 'tablet', 'mobile'].map((mode) => (_jsx("button", { type: "button", className: `kywi-overlay-preview-btn${previewMode === mode ? ' kywi-overlay-preview-btn--active' : ''}`, onClick: () => setPreviewMode(mode), "aria-label": `Preview ${mode}`, "aria-pressed": previewMode === mode, children: mode.charAt(0).toUpperCase() + mode.slice(1) }, mode))) }), _jsx("div", { className: "kywi-overlay-toolbar-spacer" }), _jsxs("button", { type: "button", className: "kywi-overlay-toolbar-btn", "data-action": "draft", onClick: handleDraft, children: [_jsx(EditorIcon, { name: "draft", size: 15 }), "Save Draft"] }), _jsxs("button", { type: "button", className: "kywi-overlay-toolbar-btn kywi-overlay-toolbar-save", "data-action": "save", onClick: handleSave, disabled: !state.isDirty, children: [_jsx(EditorIcon, { name: "save", size: 15 }), "Save"] }), editMode.canPublish && (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "kywi-overlay-toolbar-btn", "data-action": "schedule", onClick: handleSchedule, children: [_jsx(EditorIcon, { name: "schedule", size: 15 }), "Schedule"] }), _jsxs("button", { type: "button", className: "kywi-overlay-toolbar-btn kywi-overlay-toolbar-publish", "data-action": "publish", onClick: handlePublish, children: [_jsx(EditorIcon, { name: "publish", size: 15 }), "Publish"] })] })), _jsx("span", { className: "kywi-editor-toolbar-divider" }), _jsxs("button", { type: "button", ref: doneRef, className: "kywi-overlay-toolbar-btn kywi-overlay-toolbar-done", "data-action": "done", onClick: handleDone, children: [_jsx(EditorIcon, { name: "close", size: 15 }), "Done"] })] }), _jsx("div", { className: [
|
|
206
|
+
'kywi-ip-page',
|
|
207
|
+
previewWidth ? 'kywi-ip-page--constrained' : null,
|
|
208
|
+
pageClassName,
|
|
209
|
+
].filter(Boolean).join(' '), "data-preview": previewMode, "data-kywi-content-id": contentId, ...(previewWidth ? { style: { maxWidth: previewWidth } } : {}), children: _jsx(EditorCanvas, { state: state, dispatch: dispatch, moduleComponents: moduleComponents, onInsertSection: handleInsertSection, inPlace: true, 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 }), section: selectedSection, onDeleteSection: () => {
|
|
210
|
+
dispatch({ type: 'REMOVE_SECTION', sectionId: state.selectedId });
|
|
211
|
+
dispatch({ type: 'DESELECT' });
|
|
212
|
+
}, variantContainer: selectedVariantContainer, onUpdateVariantContainer: (patch) => dispatch({ type: 'UPDATE_VARIANT_CONTAINER', containerId: state.selectedId, patch }), onDeleteVariantContainer: () => {
|
|
213
|
+
dispatch({ type: 'REMOVE_VARIANT_CONTAINER', containerId: state.selectedId });
|
|
214
|
+
dispatch({ type: 'DESELECT' });
|
|
215
|
+
}, onClose: () => dispatch({ type: 'DESELECT' }) }) }), _jsxs("div", { className: "kywi-admin-shell kywi-overlay-dialog-host", children: [showTemplatePicker && (_jsx(SectionTemplatePicker, { onSelect: (columns) => {
|
|
216
|
+
if (templateRegion) {
|
|
217
|
+
dispatch({ type: 'ADD_SECTION', regionName: templateRegion, columns });
|
|
218
|
+
}
|
|
219
|
+
setShowTemplatePicker(false);
|
|
220
|
+
setTemplateRegion(null);
|
|
221
|
+
}, onInsertComponent: (section) => {
|
|
222
|
+
// Insert a linked section component (#69): ADD_SECTIONS clones with
|
|
223
|
+
// fresh ids and cloneSection preserves the componentId reference.
|
|
224
|
+
if (templateRegion) {
|
|
225
|
+
dispatch({ type: 'ADD_SECTIONS', regionName: templateRegion, sections: [section] });
|
|
226
|
+
}
|
|
227
|
+
setShowTemplatePicker(false);
|
|
228
|
+
setTemplateRegion(null);
|
|
229
|
+
}, onClose: () => {
|
|
230
|
+
setShowTemplatePicker(false);
|
|
231
|
+
setTemplateRegion(null);
|
|
232
|
+
} })), 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) }))] })] }) }));
|
|
125
233
|
}
|
|
126
234
|
//# sourceMappingURL=overlay-shell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay-shell.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/overlay-shell.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"overlay-shell.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/overlay-shell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { ModuleNode, LayoutSection } from '../../layout/types.js';
|
|
1
|
+
import type { ModuleNode, LayoutSection, VariantContainer } from '../../layout/types.js';
|
|
2
2
|
import type { ModuleConfig } from '../../config/types.js';
|
|
3
3
|
import type { ThemeRegistry } from '../../layout/theme-registry.js';
|
|
4
|
+
import type { VariantContainerPatch } from './editor-state.js';
|
|
4
5
|
import { type ComponentOption } from './component-picker-field.js';
|
|
5
6
|
interface PropsPanelProps {
|
|
6
7
|
module: ModuleNode | null;
|
|
@@ -36,7 +37,13 @@ interface PropsPanelProps {
|
|
|
36
37
|
onDetachSection?: () => void;
|
|
37
38
|
/** Delete the selected section. */
|
|
38
39
|
onDeleteSection?: () => void;
|
|
40
|
+
/** The section-level variantContainer selected on the canvas, if any. */
|
|
41
|
+
variantContainer?: VariantContainer | null;
|
|
42
|
+
/** Apply a patch to the selected variant container (mode / experiment / arms). */
|
|
43
|
+
onUpdateVariantContainer?: (patch: VariantContainerPatch) => void;
|
|
44
|
+
/** Delete the selected variant container, arms and all. */
|
|
45
|
+
onDeleteVariantContainer?: () => void;
|
|
39
46
|
}
|
|
40
|
-
export declare function PropsPanel({ module, moduleConfig, onUpdateProps, onUpdateStyle, onDelete, onClose, themeRegistry, themeName, audiences, components, onSaveAsComponent, onLinkComponent, onDetach, section, sectionComponents, onSaveSectionAsComponent, onDetachSection, onDeleteSection, }: PropsPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
export declare function PropsPanel({ module, moduleConfig, onUpdateProps, onUpdateStyle, onDelete, onClose, themeRegistry, themeName, audiences, components, onSaveAsComponent, onLinkComponent, onDetach, section, sectionComponents, onSaveSectionAsComponent, onDetachSection, onDeleteSection, variantContainer, onUpdateVariantContainer, onDeleteVariantContainer, }: PropsPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
41
48
|
export {};
|
|
42
49
|
//# sourceMappingURL=props-panel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"props-panel.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/props-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"props-panel.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/props-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAG9D,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAUxF,UAAU,eAAe;IACvB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACzB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAA;IACjC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACvD,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IACtD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC/C,yFAAyF;IACzF,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;IAC9B,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,oEAAoE;IACpE,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/C,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAErB,qFAAqF;IACrF,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAC9B,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,mFAAmF;IACnF,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAA;IACrC,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,mCAAmC;IACnC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAE5B,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC1C,kFAAkF;IAClF,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAA;IACjE,2DAA2D;IAC3D,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAA;CACtC;AAED,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,YAAY,EACZ,aAAa,EACb,aAAa,EACb,QAAQ,EACR,OAAO,EACP,aAAa,EACb,SAAS,EACT,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,GACzB,EAAE,eAAe,2CAmSjB"}
|