@singleton-sd/post-kit-editor 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +105 -0
- package/dist/canvas/EditorBlock.d.ts +6 -0
- package/dist/canvas/EditorBlock.js +25 -0
- package/dist/canvas/EditorBlock.js.map +1 -0
- package/dist/canvas/EmailBuilderCanvas.d.ts +7 -0
- package/dist/canvas/EmailBuilderCanvas.js +15 -0
- package/dist/canvas/EmailBuilderCanvas.js.map +1 -0
- package/dist/canvas/blocks/ColumnsContainerEditor.d.ts +2 -0
- package/dist/canvas/blocks/ColumnsContainerEditor.js +47 -0
- package/dist/canvas/blocks/ColumnsContainerEditor.js.map +1 -0
- package/dist/canvas/blocks/ColumnsContainerPropsSchema.d.ts +183 -0
- package/dist/canvas/blocks/ColumnsContainerPropsSchema.js +19 -0
- package/dist/canvas/blocks/ColumnsContainerPropsSchema.js.map +1 -0
- package/dist/canvas/blocks/ContainerEditor.d.ts +2 -0
- package/dist/canvas/blocks/ContainerEditor.js +39 -0
- package/dist/canvas/blocks/ContainerEditor.js.map +1 -0
- package/dist/canvas/blocks/ContainerPropsSchema.d.ts +83 -0
- package/dist/canvas/blocks/ContainerPropsSchema.js +16 -0
- package/dist/canvas/blocks/ContainerPropsSchema.js.map +1 -0
- package/dist/canvas/blocks/EmailLayoutEditor.d.ts +2 -0
- package/dist/canvas/blocks/EmailLayoutEditor.js +80 -0
- package/dist/canvas/blocks/EmailLayoutEditor.js.map +1 -0
- package/dist/canvas/blocks/EmailLayoutPropsSchema.d.ts +28 -0
- package/dist/canvas/blocks/EmailLayoutPropsSchema.js +33 -0
- package/dist/canvas/blocks/EmailLayoutPropsSchema.js.map +1 -0
- package/dist/canvas/editor-context.d.ts +22 -0
- package/dist/canvas/editor-context.js +55 -0
- package/dist/canvas/editor-context.js.map +1 -0
- package/dist/canvas/editor-core.d.ts +2910 -0
- package/dist/canvas/editor-core.js +87 -0
- package/dist/canvas/editor-core.js.map +1 -0
- package/dist/canvas/helpers/AddBlockMenu.d.ts +7 -0
- package/dist/canvas/helpers/AddBlockMenu.js +23 -0
- package/dist/canvas/helpers/AddBlockMenu.js.map +1 -0
- package/dist/canvas/helpers/EditorBlockWrapper.d.ts +5 -0
- package/dist/canvas/helpers/EditorBlockWrapper.js +36 -0
- package/dist/canvas/helpers/EditorBlockWrapper.js.map +1 -0
- package/dist/canvas/helpers/EditorChildrenIds.d.ts +11 -0
- package/dist/canvas/helpers/EditorChildrenIds.js +38 -0
- package/dist/canvas/helpers/EditorChildrenIds.js.map +1 -0
- package/dist/canvas/helpers/block-templates.d.ts +7 -0
- package/dist/canvas/helpers/block-templates.js +87 -0
- package/dist/canvas/helpers/block-templates.js.map +1 -0
- package/dist/email-template-editor.d.ts +11 -0
- package/dist/email-template-editor.js +32 -0
- package/dist/email-template-editor.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/insertion-target.d.ts +18 -0
- package/dist/insertion-target.js +41 -0
- package/dist/insertion-target.js.map +1 -0
- package/dist/metadata/MetadataPanel.d.ts +7 -0
- package/dist/metadata/MetadataPanel.js +56 -0
- package/dist/metadata/MetadataPanel.js.map +1 -0
- package/dist/metadata/insert-at-cursor.d.ts +5 -0
- package/dist/metadata/insert-at-cursor.js +22 -0
- package/dist/metadata/insert-at-cursor.js.map +1 -0
- package/dist/metadata/subject-preview.d.ts +2 -0
- package/dist/metadata/subject-preview.js +12 -0
- package/dist/metadata/subject-preview.js.map +1 -0
- package/dist/metadata/template-key.d.ts +4 -0
- package/dist/metadata/template-key.js +21 -0
- package/dist/metadata/template-key.js.map +1 -0
- package/dist/preview/PreviewDataEditor.d.ts +7 -0
- package/dist/preview/PreviewDataEditor.js +37 -0
- package/dist/preview/PreviewDataEditor.js.map +1 -0
- package/dist/preview/PreviewPane.d.ts +7 -0
- package/dist/preview/PreviewPane.js +39 -0
- package/dist/preview/PreviewPane.js.map +1 -0
- package/dist/preview/preview-frame.d.ts +8 -0
- package/dist/preview/preview-frame.js +41 -0
- package/dist/preview/preview-frame.js.map +1 -0
- package/dist/preview/preview-rows.d.ts +10 -0
- package/dist/preview/preview-rows.js +54 -0
- package/dist/preview/preview-rows.js.map +1 -0
- package/dist/preview/render-template-preview.d.ts +10 -0
- package/dist/preview/render-template-preview.js +27 -0
- package/dist/preview/render-template-preview.js.map +1 -0
- package/dist/serialization.d.ts +15 -0
- package/dist/serialization.js +128 -0
- package/dist/serialization.js.map +1 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/variables/VariableCatalogue.d.ts +7 -0
- package/dist/variables/VariableCatalogue.js +77 -0
- package/dist/variables/VariableCatalogue.js.map +1 -0
- package/dist/variables/clipboard.d.ts +3 -0
- package/dist/variables/clipboard.js +16 -0
- package/dist/variables/clipboard.js.map +1 -0
- package/dist/variables/copy-feedback.d.ts +7 -0
- package/dist/variables/copy-feedback.js +14 -0
- package/dist/variables/copy-feedback.js.map +1 -0
- package/dist/variables/resolve-catalogue.d.ts +2 -0
- package/dist/variables/resolve-catalogue.js +10 -0
- package/dist/variables/resolve-catalogue.js.map +1 -0
- package/dist/working-files.d.ts +6 -0
- package/dist/working-files.js +25 -0
- package/dist/working-files.js.map +1 -0
- package/package.json +60 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Singleton SD
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# @singleton-sd/post-kit-editor
|
|
2
|
+
|
|
3
|
+
React admin editor component for [PostKit](../../README.md) email templates. It
|
|
4
|
+
edits the three Git-backed source files (`template.json`, `metadata.json`,
|
|
5
|
+
`preview.json`) **in memory**. Persistence is not wired yet: `onSave` /
|
|
6
|
+
`onSendTest` props are part of the public contract for later issues, but this
|
|
7
|
+
package does not invoke them — working edits are discarded when the component
|
|
8
|
+
unmounts unless the host implements those callbacks (save/send-test UI lands in
|
|
9
|
+
a follow-up issue).
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pnpm add @singleton-sd/post-kit-editor
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
React is a **peer dependency** — the consumer application owns the React instance:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pnpm add react@^18.3.1 react-dom@^18.3.1
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { EmailTemplateEditor, type TemplateSourceFiles } from '@singleton-sd/post-kit-editor';
|
|
27
|
+
|
|
28
|
+
export function TemplateAdminPage({ template }: { template: TemplateSourceFiles }) {
|
|
29
|
+
return (
|
|
30
|
+
<EmailTemplateEditor
|
|
31
|
+
template={template}
|
|
32
|
+
availableVariables={[{ name: 'name', description: 'Recipient display name' }]}
|
|
33
|
+
onSave={async (files) => {
|
|
34
|
+
await fetch('/api/templates', { method: 'PUT', body: JSON.stringify(files) });
|
|
35
|
+
}}
|
|
36
|
+
onPreviewRendered={(html) => {
|
|
37
|
+
// Optional: host can offer “open preview in new tab”
|
|
38
|
+
console.log('preview bytes', html.length);
|
|
39
|
+
}}
|
|
40
|
+
className="tenant-theme"
|
|
41
|
+
/>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Persistence is consumer-supplied
|
|
47
|
+
|
|
48
|
+
The editor never writes to disk, Git, or a network endpoint. The `onSave` and
|
|
49
|
+
`onSendTest` props exist so consumers can rely on a stable contract, but **this
|
|
50
|
+
release does not call them** — there is no Save / Send-Test control yet. Edits
|
|
51
|
+
live only in React state (`workingFiles`) until a later issue adds that UI.
|
|
52
|
+
|
|
53
|
+
## Preview data (synthetic only)
|
|
54
|
+
|
|
55
|
+
`preview.json` is edited in the preview-data panel and used to render the
|
|
56
|
+
sandboxed preview pane via `@singleton-sd/post-kit-compiler/preview`
|
|
57
|
+
`renderPreview` (same EmailBuilder + Handlebars path as publish). Those sample
|
|
58
|
+
values are **committed to the consumer repository** with the template source.
|
|
59
|
+
|
|
60
|
+
**Never put real personal data, customer addresses, or secrets in preview
|
|
61
|
+
data.** Keep values synthetic (e.g. `Jane Doe`, `jane@example.com`).
|
|
62
|
+
|
|
63
|
+
The preview pane shows compiler errors inline when render fails and leaves the
|
|
64
|
+
canvas / metadata editable. Re-renders are debounced while typing. Optional
|
|
65
|
+
`onPreviewRendered` receives the HTML string on each successful render.
|
|
66
|
+
|
|
67
|
+
Browser note: preview imports `@singleton-sd/post-kit-compiler/preview`, which
|
|
68
|
+
has no Node built-ins. Full `compile()` (content hashing + filesystem) remains
|
|
69
|
+
on the package root for CI and publish tooling. The preview iframe applies a
|
|
70
|
+
restrictive CSP (`connect-src 'none'`, `img-src data:` only) so template HTML
|
|
71
|
+
cannot trigger arbitrary network fetches from the admin page.
|
|
72
|
+
|
|
73
|
+
## Styling
|
|
74
|
+
|
|
75
|
+
The editor ships **plain CSS classes**, no CSS-in-JS runtime and no component
|
|
76
|
+
library. Every class is prefixed with the exported `EDITOR_CLASS_PREFIX`
|
|
77
|
+
(`pk-editor-`), so class names are stable and safe to target from a consumer
|
|
78
|
+
stylesheet — for example `.pk-editor-root`. The root element also accepts a
|
|
79
|
+
`className` prop as an escape hatch for theme or layout classes.
|
|
80
|
+
|
|
81
|
+
## Component tests
|
|
82
|
+
|
|
83
|
+
Tests run on Node's built-in test runner with `tsx`, consistent with the rest of
|
|
84
|
+
the repo — no browser-based test stack, no jsdom.
|
|
85
|
+
|
|
86
|
+
Components are rendered to static markup with `react-dom/server` and asserted
|
|
87
|
+
against the resulting HTML string:
|
|
88
|
+
|
|
89
|
+
```tsx
|
|
90
|
+
import { renderToStaticMarkup } from 'react-dom/server';
|
|
91
|
+
|
|
92
|
+
const html = renderToStaticMarkup(<EmailTemplateEditor template={template} onSave={() => {}} />);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Specs live next to the code as `src/**/*.spec.tsx`. Behaviour that needs
|
|
96
|
+
interaction is factored into pure functions (preview rows, `renderTemplatePreview`)
|
|
97
|
+
that can be tested without a DOM.
|
|
98
|
+
|
|
99
|
+
## Development
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
pnpm test # type-check + run tests
|
|
103
|
+
pnpm build # emit CommonJS to dist/
|
|
104
|
+
pnpm lint # covered by root eslint
|
|
105
|
+
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useCurrentBlockId = useCurrentBlockId;
|
|
4
|
+
exports.EditorBlock = EditorBlock;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const editor_core_1 = require("./editor-core");
|
|
8
|
+
const editor_context_1 = require("./editor-context");
|
|
9
|
+
const EditorBlockContext = (0, react_1.createContext)(null);
|
|
10
|
+
function useCurrentBlockId() {
|
|
11
|
+
const blockId = (0, react_1.useContext)(EditorBlockContext);
|
|
12
|
+
if (!blockId) {
|
|
13
|
+
throw new Error('useCurrentBlockId must be used within EditorBlock');
|
|
14
|
+
}
|
|
15
|
+
return blockId;
|
|
16
|
+
}
|
|
17
|
+
function EditorBlock({ id }) {
|
|
18
|
+
const document = (0, editor_context_1.useDocument)();
|
|
19
|
+
const block = document[id];
|
|
20
|
+
if (!block) {
|
|
21
|
+
throw new Error(`Could not find block "${id}"`);
|
|
22
|
+
}
|
|
23
|
+
return ((0, jsx_runtime_1.jsx)(EditorBlockContext.Provider, { value: id, children: (0, jsx_runtime_1.jsx)(editor_core_1.EditorBlock, { ...block }) }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=EditorBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditorBlock.js","sourceRoot":"","sources":["../../src/canvas/EditorBlock.tsx"],"names":[],"mappings":";;AAOA,8CAMC;AAMD,kCAYC;;AA/BD,iCAAyD;AAEzD,+CAA+D;AAC/D,qDAA+C;AAE/C,MAAM,kBAAkB,GAAG,IAAA,qBAAa,EAAgB,IAAI,CAAC,CAAC;AAE9D,SAAgB,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,kBAAkB,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAMD,SAAgB,WAAW,CAAC,EAAE,EAAE,EAAoB;IAClD,MAAM,QAAQ,GAAG,IAAA,4BAAW,GAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CACL,uBAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,YACpC,uBAAC,yBAAe,OAAK,KAAK,GAAI,GACF,CAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { EmailBuilderDocument } from '../types';
|
|
2
|
+
export interface EmailBuilderCanvasProps {
|
|
3
|
+
document: EmailBuilderDocument;
|
|
4
|
+
onChange: (document: EmailBuilderDocument) => void;
|
|
5
|
+
readOnly?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function EmailBuilderCanvas({ document, onChange, readOnly, }: EmailBuilderCanvasProps): JSX.Element;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmailBuilderCanvas = EmailBuilderCanvas;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const email_template_editor_1 = require("../email-template-editor");
|
|
6
|
+
const editor_context_1 = require("./editor-context");
|
|
7
|
+
const EditorBlock_1 = require("./EditorBlock");
|
|
8
|
+
const email_builder_1 = require("@usewaypoint/email-builder");
|
|
9
|
+
function EmailBuilderCanvas({ document, onChange, readOnly = false, }) {
|
|
10
|
+
if (readOnly) {
|
|
11
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: `${email_template_editor_1.EDITOR_CLASS_PREFIX}canvas`, "data-testid": `${email_template_editor_1.EDITOR_CLASS_PREFIX}canvas`, children: (0, jsx_runtime_1.jsx)(email_builder_1.Reader, { document: document, rootBlockId: "root" }) }));
|
|
12
|
+
}
|
|
13
|
+
return ((0, jsx_runtime_1.jsx)(editor_context_1.CanvasEditorProvider, { document: document, onChange: onChange, children: (0, jsx_runtime_1.jsx)("div", { className: `${email_template_editor_1.EDITOR_CLASS_PREFIX}canvas`, "data-testid": `${email_template_editor_1.EDITOR_CLASS_PREFIX}canvas`, children: (0, jsx_runtime_1.jsx)(EditorBlock_1.EditorBlock, { id: "root" }) }) }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=EmailBuilderCanvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailBuilderCanvas.js","sourceRoot":"","sources":["../../src/canvas/EmailBuilderCanvas.tsx"],"names":[],"mappings":";;AAcA,gDAoBC;;AA/BD,oEAA+D;AAC/D,qDAAwD;AACxD,+CAA4C;AAC5C,8DAAoD;AAQpD,SAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,EACR,QAAQ,GAAG,KAAK,GACQ;IACxB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,gCAAK,SAAS,EAAE,GAAG,2CAAmB,QAAQ,iBAAe,GAAG,2CAAmB,QAAQ,YACzF,uBAAC,sBAAM,IAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAC,MAAM,GAAG,GAC7C,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,uBAAC,qCAAoB,IAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,YAC1D,gCAAK,SAAS,EAAE,GAAG,2CAAmB,QAAQ,iBAAe,GAAG,2CAAmB,QAAQ,YACzF,uBAAC,yBAAW,IAAC,EAAE,EAAC,MAAM,GAAG,GACrB,GACe,CACxB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = ColumnsContainerEditor;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const block_columns_container_1 = require("@usewaypoint/block-columns-container");
|
|
9
|
+
const EditorBlock_1 = require("../EditorBlock");
|
|
10
|
+
const editor_context_1 = require("../editor-context");
|
|
11
|
+
const EditorChildrenIds_1 = __importDefault(require("../helpers/EditorChildrenIds"));
|
|
12
|
+
const ColumnsContainerPropsSchema_1 = __importDefault(require("./ColumnsContainerPropsSchema"));
|
|
13
|
+
const EMPTY_COLUMNS = [{ childrenIds: [] }, { childrenIds: [] }, { childrenIds: [] }];
|
|
14
|
+
function ColumnsContainerEditor({ style, props, }) {
|
|
15
|
+
const currentBlockId = (0, EditorBlock_1.useCurrentBlockId)();
|
|
16
|
+
const patchDocument = (0, editor_context_1.usePatchDocument)();
|
|
17
|
+
const setSelectedBlockId = (0, editor_context_1.useSetSelectedBlockId)();
|
|
18
|
+
const { columns, ...restProps } = props ?? {};
|
|
19
|
+
const columnsValue = columns ?? EMPTY_COLUMNS;
|
|
20
|
+
const updateColumn = (columnIndex, { block, blockId, childrenIds }) => {
|
|
21
|
+
const nextColumns = [...columnsValue];
|
|
22
|
+
nextColumns[columnIndex] = {
|
|
23
|
+
...columnsValue[columnIndex],
|
|
24
|
+
childrenIds,
|
|
25
|
+
};
|
|
26
|
+
patchDocument({
|
|
27
|
+
[blockId]: block,
|
|
28
|
+
[currentBlockId]: {
|
|
29
|
+
type: 'ColumnsContainer',
|
|
30
|
+
data: ColumnsContainerPropsSchema_1.default.parse({
|
|
31
|
+
style,
|
|
32
|
+
props: {
|
|
33
|
+
...restProps,
|
|
34
|
+
columns: nextColumns,
|
|
35
|
+
},
|
|
36
|
+
}),
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
setSelectedBlockId(blockId);
|
|
40
|
+
};
|
|
41
|
+
return ((0, jsx_runtime_1.jsx)(block_columns_container_1.ColumnsContainer, { props: restProps, style: style, columns: [
|
|
42
|
+
(0, jsx_runtime_1.jsx)(EditorChildrenIds_1.default, { childrenIds: columns?.[0]?.childrenIds, onChange: (change) => updateColumn(0, change) }, "col-0"),
|
|
43
|
+
(0, jsx_runtime_1.jsx)(EditorChildrenIds_1.default, { childrenIds: columns?.[1]?.childrenIds, onChange: (change) => updateColumn(1, change) }, "col-1"),
|
|
44
|
+
(0, jsx_runtime_1.jsx)(EditorChildrenIds_1.default, { childrenIds: columns?.[2]?.childrenIds, onChange: (change) => updateColumn(2, change) }, "col-2"),
|
|
45
|
+
] }));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=ColumnsContainerEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnsContainerEditor.js","sourceRoot":"","sources":["../../../src/canvas/blocks/ColumnsContainerEditor.tsx"],"names":[],"mappings":";;;;;AAcA,yCA2DC;;AAvED,kFAAgG;AAEhG,gDAAmD;AACnD,sDAA4E;AAC5E,qFAA4F;AAE5F,gGAEuC;AAEvC,MAAM,aAAa,GAAG,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;AAEtF,SAAwB,sBAAsB,CAAC,EAC7C,KAAK,EACL,KAAK,GACiB;IACtB,MAAM,cAAc,GAAG,IAAA,+BAAiB,GAAE,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAA,iCAAgB,GAAE,CAAC;IACzC,MAAM,kBAAkB,GAAG,IAAA,sCAAqB,GAAE,CAAC;IAEnD,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;IAC9C,MAAM,YAAY,GAAG,OAAO,IAAI,aAAa,CAAC;IAE9C,MAAM,YAAY,GAAG,CACnB,WAAsB,EACtB,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAwB,EACrD,EAAE;QACF,MAAM,WAAW,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;QACtC,WAAW,CAAC,WAAW,CAAC,GAAG;YACzB,GAAG,YAAY,CAAC,WAAW,CAAC;YAC5B,WAAW;SACZ,CAAC;QACF,aAAa,CAAC;YACZ,CAAC,OAAO,CAAC,EAAE,KAAK;YAChB,CAAC,cAAc,CAAC,EAAE;gBAChB,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,qCAA2B,CAAC,KAAK,CAAC;oBACtC,KAAK;oBACL,KAAK,EAAE;wBACL,GAAG,SAAS;wBACZ,OAAO,EAAE,WAAW;qBACrB;iBACF,CAAC;aACH;SACF,CAAC,CAAC;QACH,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,OAAO,CACL,uBAAC,0CAAoB,IACnB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE;YACP,uBAAC,2BAAiB,IAEhB,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EACtC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,IAFzC,OAAO,CAGX;YACF,uBAAC,2BAAiB,IAEhB,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EACtC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,IAFzC,OAAO,CAGX;YACF,uBAAC,2BAAiB,IAEhB,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EACtC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,IAFzC,OAAO,CAGX;SACH,GACD,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const ColumnsContainerPropsSchema: z.ZodObject<{
|
|
3
|
+
style: z.ZodNullable<z.ZodOptional<z.ZodObject<{
|
|
4
|
+
backgroundColor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
5
|
+
padding: z.ZodNullable<z.ZodOptional<z.ZodObject<{
|
|
6
|
+
top: z.ZodNumber;
|
|
7
|
+
bottom: z.ZodNumber;
|
|
8
|
+
right: z.ZodNumber;
|
|
9
|
+
left: z.ZodNumber;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
top: number;
|
|
12
|
+
bottom: number;
|
|
13
|
+
right: number;
|
|
14
|
+
left: number;
|
|
15
|
+
}, {
|
|
16
|
+
top: number;
|
|
17
|
+
bottom: number;
|
|
18
|
+
right: number;
|
|
19
|
+
left: number;
|
|
20
|
+
}>>>;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
backgroundColor?: string | null | undefined;
|
|
23
|
+
padding?: {
|
|
24
|
+
top: number;
|
|
25
|
+
bottom: number;
|
|
26
|
+
right: number;
|
|
27
|
+
left: number;
|
|
28
|
+
} | null | undefined;
|
|
29
|
+
}, {
|
|
30
|
+
backgroundColor?: string | null | undefined;
|
|
31
|
+
padding?: {
|
|
32
|
+
top: number;
|
|
33
|
+
bottom: number;
|
|
34
|
+
right: number;
|
|
35
|
+
left: number;
|
|
36
|
+
} | null | undefined;
|
|
37
|
+
}>>>;
|
|
38
|
+
props: z.ZodNullable<z.ZodOptional<z.ZodObject<{
|
|
39
|
+
columns: z.ZodTuple<[z.ZodObject<{
|
|
40
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
41
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
42
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
43
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
44
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
45
|
+
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
|
|
46
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
47
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
48
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
49
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
50
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
51
|
+
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
|
|
52
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
53
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
54
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
55
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
56
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
57
|
+
}, z.ZodTypeAny, "passthrough">>], null>;
|
|
58
|
+
fixedWidths: z.ZodNullable<z.ZodOptional<z.ZodTuple<[z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodOptional<z.ZodNullable<z.ZodNumber>>], null>>>;
|
|
59
|
+
columnsCount: z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodLiteral<2>, z.ZodLiteral<3>]>>>;
|
|
60
|
+
columnsGap: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
61
|
+
contentAlignment: z.ZodNullable<z.ZodOptional<z.ZodEnum<["top", "middle", "bottom"]>>>;
|
|
62
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
63
|
+
columns: z.ZodTuple<[z.ZodObject<{
|
|
64
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
65
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
66
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
67
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
68
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
69
|
+
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
|
|
70
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
71
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
72
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
73
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
74
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
75
|
+
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
|
|
76
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
77
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
78
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
79
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
80
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
81
|
+
}, z.ZodTypeAny, "passthrough">>], null>;
|
|
82
|
+
fixedWidths: z.ZodNullable<z.ZodOptional<z.ZodTuple<[z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodOptional<z.ZodNullable<z.ZodNumber>>], null>>>;
|
|
83
|
+
columnsCount: z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodLiteral<2>, z.ZodLiteral<3>]>>>;
|
|
84
|
+
columnsGap: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
85
|
+
contentAlignment: z.ZodNullable<z.ZodOptional<z.ZodEnum<["top", "middle", "bottom"]>>>;
|
|
86
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
87
|
+
columns: z.ZodTuple<[z.ZodObject<{
|
|
88
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
89
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
90
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
91
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
92
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
93
|
+
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
|
|
94
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
95
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
96
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
97
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
98
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
99
|
+
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
|
|
100
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
101
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
102
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
103
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
104
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
105
|
+
}, z.ZodTypeAny, "passthrough">>], null>;
|
|
106
|
+
fixedWidths: z.ZodNullable<z.ZodOptional<z.ZodTuple<[z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodOptional<z.ZodNullable<z.ZodNumber>>], null>>>;
|
|
107
|
+
columnsCount: z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodLiteral<2>, z.ZodLiteral<3>]>>>;
|
|
108
|
+
columnsGap: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
109
|
+
contentAlignment: z.ZodNullable<z.ZodOptional<z.ZodEnum<["top", "middle", "bottom"]>>>;
|
|
110
|
+
}, z.ZodTypeAny, "passthrough">>>>;
|
|
111
|
+
}, "strip", z.ZodTypeAny, {
|
|
112
|
+
style?: {
|
|
113
|
+
backgroundColor?: string | null | undefined;
|
|
114
|
+
padding?: {
|
|
115
|
+
top: number;
|
|
116
|
+
bottom: number;
|
|
117
|
+
right: number;
|
|
118
|
+
left: number;
|
|
119
|
+
} | null | undefined;
|
|
120
|
+
} | null | undefined;
|
|
121
|
+
props?: z.objectOutputType<{
|
|
122
|
+
columns: z.ZodTuple<[z.ZodObject<{
|
|
123
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
124
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
125
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
126
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
127
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
128
|
+
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
|
|
129
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
130
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
131
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
132
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
133
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
134
|
+
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
|
|
135
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
136
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
137
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
138
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
139
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
140
|
+
}, z.ZodTypeAny, "passthrough">>], null>;
|
|
141
|
+
fixedWidths: z.ZodNullable<z.ZodOptional<z.ZodTuple<[z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodOptional<z.ZodNullable<z.ZodNumber>>], null>>>;
|
|
142
|
+
columnsCount: z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodLiteral<2>, z.ZodLiteral<3>]>>>;
|
|
143
|
+
columnsGap: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
144
|
+
contentAlignment: z.ZodNullable<z.ZodOptional<z.ZodEnum<["top", "middle", "bottom"]>>>;
|
|
145
|
+
}, z.ZodTypeAny, "passthrough"> | null | undefined;
|
|
146
|
+
}, {
|
|
147
|
+
style?: {
|
|
148
|
+
backgroundColor?: string | null | undefined;
|
|
149
|
+
padding?: {
|
|
150
|
+
top: number;
|
|
151
|
+
bottom: number;
|
|
152
|
+
right: number;
|
|
153
|
+
left: number;
|
|
154
|
+
} | null | undefined;
|
|
155
|
+
} | null | undefined;
|
|
156
|
+
props?: z.objectInputType<{
|
|
157
|
+
columns: z.ZodTuple<[z.ZodObject<{
|
|
158
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
159
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
160
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
161
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
162
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
163
|
+
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
|
|
164
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
165
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
166
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
167
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
168
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
169
|
+
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
|
|
170
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
171
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
172
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
173
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
174
|
+
childrenIds: z.ZodArray<z.ZodString, "many">;
|
|
175
|
+
}, z.ZodTypeAny, "passthrough">>], null>;
|
|
176
|
+
fixedWidths: z.ZodNullable<z.ZodOptional<z.ZodTuple<[z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodOptional<z.ZodNullable<z.ZodNumber>>], null>>>;
|
|
177
|
+
columnsCount: z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodLiteral<2>, z.ZodLiteral<3>]>>>;
|
|
178
|
+
columnsGap: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
179
|
+
contentAlignment: z.ZodNullable<z.ZodOptional<z.ZodEnum<["top", "middle", "bottom"]>>>;
|
|
180
|
+
}, z.ZodTypeAny, "passthrough"> | null | undefined;
|
|
181
|
+
}>;
|
|
182
|
+
export type ColumnsContainerProps = z.infer<typeof ColumnsContainerPropsSchema>;
|
|
183
|
+
export default ColumnsContainerPropsSchema;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const zod_1 = require("zod");
|
|
4
|
+
const block_columns_container_1 = require("@usewaypoint/block-columns-container");
|
|
5
|
+
const BasePropsShape = block_columns_container_1.ColumnsContainerPropsSchema.shape.props.unwrap().unwrap().shape;
|
|
6
|
+
const ColumnSchema = zod_1.z.object({ childrenIds: zod_1.z.array(zod_1.z.string()) }).passthrough();
|
|
7
|
+
const ColumnsContainerPropsSchema = zod_1.z.object({
|
|
8
|
+
style: block_columns_container_1.ColumnsContainerPropsSchema.shape.style,
|
|
9
|
+
props: zod_1.z
|
|
10
|
+
.object({
|
|
11
|
+
...BasePropsShape,
|
|
12
|
+
columns: zod_1.z.tuple([ColumnSchema, ColumnSchema, ColumnSchema]),
|
|
13
|
+
})
|
|
14
|
+
.passthrough()
|
|
15
|
+
.optional()
|
|
16
|
+
.nullable(),
|
|
17
|
+
});
|
|
18
|
+
exports.default = ColumnsContainerPropsSchema;
|
|
19
|
+
//# sourceMappingURL=ColumnsContainerPropsSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnsContainerPropsSchema.js","sourceRoot":"","sources":["../../../src/canvas/blocks/ColumnsContainerPropsSchema.ts"],"names":[],"mappings":";;AAAA,6BAAwB;AAExB,kFAAsH;AAEtH,MAAM,cAAc,GAAG,qDAA+B,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;AAE3F,MAAM,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAElF,MAAM,2BAA2B,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,qDAA+B,CAAC,KAAK,CAAC,KAAK;IAClD,KAAK,EAAE,OAAC;SACL,MAAM,CAAC;QACN,GAAG,cAAc;QACjB,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;KAC7D,CAAC;SACD,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,EAAE;CACd,CAAC,CAAC;AAGH,kBAAe,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = ContainerEditor;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const block_container_1 = require("@usewaypoint/block-container");
|
|
9
|
+
const EditorBlock_1 = require("../EditorBlock");
|
|
10
|
+
const editor_context_1 = require("../editor-context");
|
|
11
|
+
const EditorChildrenIds_1 = __importDefault(require("../helpers/EditorChildrenIds"));
|
|
12
|
+
function ContainerEditor({ style, props }) {
|
|
13
|
+
const childrenIds = props?.childrenIds ?? [];
|
|
14
|
+
const document = (0, editor_context_1.useDocument)();
|
|
15
|
+
const currentBlockId = (0, EditorBlock_1.useCurrentBlockId)();
|
|
16
|
+
const patchDocument = (0, editor_context_1.usePatchDocument)();
|
|
17
|
+
const setSelectedBlockId = (0, editor_context_1.useSetSelectedBlockId)();
|
|
18
|
+
return ((0, jsx_runtime_1.jsx)(block_container_1.Container, { style: style, children: (0, jsx_runtime_1.jsx)(EditorChildrenIds_1.default, { childrenIds: childrenIds, onChange: ({ block, blockId, childrenIds: nextChildrenIds }) => {
|
|
19
|
+
const currentBlock = document[currentBlockId];
|
|
20
|
+
if (!currentBlock || currentBlock.type !== 'Container') {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
patchDocument({
|
|
24
|
+
[blockId]: block,
|
|
25
|
+
[currentBlockId]: {
|
|
26
|
+
type: 'Container',
|
|
27
|
+
data: {
|
|
28
|
+
...currentBlock.data,
|
|
29
|
+
props: {
|
|
30
|
+
...currentBlock.data.props,
|
|
31
|
+
childrenIds: nextChildrenIds,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
setSelectedBlockId(blockId);
|
|
37
|
+
} }) }));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=ContainerEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContainerEditor.js","sourceRoot":"","sources":["../../../src/canvas/blocks/ContainerEditor.tsx"],"names":[],"mappings":";;;;;AAUA,kCAkCC;;AA1CD,kEAA0E;AAE1E,gDAAmD;AACnD,sDAAyF;AACzF,qFAA6D;AAI7D,SAAwB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAkB;IACtE,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAA,4BAAW,GAAE,CAAC;IAC/B,MAAM,cAAc,GAAG,IAAA,+BAAiB,GAAE,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAA,iCAAgB,GAAE,CAAC;IACzC,MAAM,kBAAkB,GAAG,IAAA,sCAAqB,GAAE,CAAC;IAEnD,OAAO,CACL,uBAAC,2BAAa,IAAC,KAAK,EAAE,KAAK,YACzB,uBAAC,2BAAiB,IAChB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE;gBAC7D,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAC9C,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACvD,OAAO;gBACT,CAAC;gBACD,aAAa,CAAC;oBACZ,CAAC,OAAO,CAAC,EAAE,KAAK;oBAChB,CAAC,cAAc,CAAC,EAAE;wBAChB,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE;4BACJ,GAAG,YAAY,CAAC,IAAI;4BACpB,KAAK,EAAE;gCACL,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK;gCAC1B,WAAW,EAAE,eAAe;6BAC7B;yBACF;qBACF;iBACF,CAAC,CAAC;gBACH,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC,GACD,GACY,CACjB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const ContainerPropsSchema: z.ZodObject<{
|
|
3
|
+
style: z.ZodNullable<z.ZodOptional<z.ZodObject<{
|
|
4
|
+
backgroundColor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
5
|
+
borderColor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
6
|
+
borderRadius: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
7
|
+
padding: z.ZodNullable<z.ZodOptional<z.ZodObject<{
|
|
8
|
+
top: z.ZodNumber;
|
|
9
|
+
bottom: z.ZodNumber;
|
|
10
|
+
right: z.ZodNumber;
|
|
11
|
+
left: z.ZodNumber;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
top: number;
|
|
14
|
+
bottom: number;
|
|
15
|
+
right: number;
|
|
16
|
+
left: number;
|
|
17
|
+
}, {
|
|
18
|
+
top: number;
|
|
19
|
+
bottom: number;
|
|
20
|
+
right: number;
|
|
21
|
+
left: number;
|
|
22
|
+
}>>>;
|
|
23
|
+
}, "strip", z.ZodTypeAny, {
|
|
24
|
+
backgroundColor?: string | null | undefined;
|
|
25
|
+
borderColor?: string | null | undefined;
|
|
26
|
+
borderRadius?: number | null | undefined;
|
|
27
|
+
padding?: {
|
|
28
|
+
top: number;
|
|
29
|
+
bottom: number;
|
|
30
|
+
right: number;
|
|
31
|
+
left: number;
|
|
32
|
+
} | null | undefined;
|
|
33
|
+
}, {
|
|
34
|
+
backgroundColor?: string | null | undefined;
|
|
35
|
+
borderColor?: string | null | undefined;
|
|
36
|
+
borderRadius?: number | null | undefined;
|
|
37
|
+
padding?: {
|
|
38
|
+
top: number;
|
|
39
|
+
bottom: number;
|
|
40
|
+
right: number;
|
|
41
|
+
left: number;
|
|
42
|
+
} | null | undefined;
|
|
43
|
+
}>>>;
|
|
44
|
+
props: z.ZodNullable<z.ZodOptional<z.ZodObject<{
|
|
45
|
+
childrenIds: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
46
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
47
|
+
childrenIds: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
48
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
49
|
+
childrenIds: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
50
|
+
}, z.ZodTypeAny, "passthrough">>>>;
|
|
51
|
+
}, "strip", z.ZodTypeAny, {
|
|
52
|
+
style?: {
|
|
53
|
+
backgroundColor?: string | null | undefined;
|
|
54
|
+
borderColor?: string | null | undefined;
|
|
55
|
+
borderRadius?: number | null | undefined;
|
|
56
|
+
padding?: {
|
|
57
|
+
top: number;
|
|
58
|
+
bottom: number;
|
|
59
|
+
right: number;
|
|
60
|
+
left: number;
|
|
61
|
+
} | null | undefined;
|
|
62
|
+
} | null | undefined;
|
|
63
|
+
props?: z.objectOutputType<{
|
|
64
|
+
childrenIds: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
65
|
+
}, z.ZodTypeAny, "passthrough"> | null | undefined;
|
|
66
|
+
}, {
|
|
67
|
+
style?: {
|
|
68
|
+
backgroundColor?: string | null | undefined;
|
|
69
|
+
borderColor?: string | null | undefined;
|
|
70
|
+
borderRadius?: number | null | undefined;
|
|
71
|
+
padding?: {
|
|
72
|
+
top: number;
|
|
73
|
+
bottom: number;
|
|
74
|
+
right: number;
|
|
75
|
+
left: number;
|
|
76
|
+
} | null | undefined;
|
|
77
|
+
} | null | undefined;
|
|
78
|
+
props?: z.objectInputType<{
|
|
79
|
+
childrenIds: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
80
|
+
}, z.ZodTypeAny, "passthrough"> | null | undefined;
|
|
81
|
+
}>;
|
|
82
|
+
export default ContainerPropsSchema;
|
|
83
|
+
export type ContainerProps = z.infer<typeof ContainerPropsSchema>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const zod_1 = require("zod");
|
|
4
|
+
const block_container_1 = require("@usewaypoint/block-container");
|
|
5
|
+
const ContainerPropsSchema = zod_1.z.object({
|
|
6
|
+
style: block_container_1.ContainerPropsSchema.shape.style,
|
|
7
|
+
props: zod_1.z
|
|
8
|
+
.object({
|
|
9
|
+
childrenIds: zod_1.z.array(zod_1.z.string()).optional().nullable(),
|
|
10
|
+
})
|
|
11
|
+
.passthrough()
|
|
12
|
+
.optional()
|
|
13
|
+
.nullable(),
|
|
14
|
+
});
|
|
15
|
+
exports.default = ContainerPropsSchema;
|
|
16
|
+
//# sourceMappingURL=ContainerPropsSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContainerPropsSchema.js","sourceRoot":"","sources":["../../../src/canvas/blocks/ContainerPropsSchema.ts"],"names":[],"mappings":";;AAAA,6BAAwB;AAExB,kEAAgG;AAEhG,MAAM,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,sCAAwB,CAAC,KAAK,CAAC,KAAK;IAC3C,KAAK,EAAE,OAAC;SACL,MAAM,CAAC;QACN,WAAW,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KACvD,CAAC;SACD,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,kBAAe,oBAAoB,CAAC"}
|