@cocoar/vue-page-builder 2.1.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/dist/CoarPageBuilder.vue.d.ts +21 -0
- package/dist/CoarPageBuilder.vue.d.ts.map +1 -0
- package/dist/CoarPageRenderer.vue.d.ts +22 -0
- package/dist/CoarPageRenderer.vue.d.ts.map +1 -0
- package/dist/PageNode.vue.d.ts +7 -0
- package/dist/PageNode.vue.d.ts.map +1 -0
- package/dist/builder/BuilderCanvas.vue.d.ts +3 -0
- package/dist/builder/BuilderCanvas.vue.d.ts.map +1 -0
- package/dist/builder/BuilderCanvasNode.vue.d.ts +9 -0
- package/dist/builder/BuilderCanvasNode.vue.d.ts.map +1 -0
- package/dist/builder/BuilderOutline.vue.d.ts +3 -0
- package/dist/builder/BuilderOutline.vue.d.ts.map +1 -0
- package/dist/builder/BuilderOutlineNode.vue.d.ts +14 -0
- package/dist/builder/BuilderOutlineNode.vue.d.ts.map +1 -0
- package/dist/builder/BuilderPropsPanel.vue.d.ts +3 -0
- package/dist/builder/BuilderPropsPanel.vue.d.ts.map +1 -0
- package/dist/builder/builderContext.d.ts +10 -0
- package/dist/builder/builderContext.d.ts.map +1 -0
- package/dist/builder/nodeDefaults.d.ts +14 -0
- package/dist/builder/nodeDefaults.d.ts.map +1 -0
- package/dist/builder/operations.d.ts +21 -0
- package/dist/builder/operations.d.ts.map +1 -0
- package/dist/builder/props/ButtonProps.vue.d.ts +8 -0
- package/dist/builder/props/ButtonProps.vue.d.ts.map +1 -0
- package/dist/builder/props/CardProps.vue.d.ts +8 -0
- package/dist/builder/props/CardProps.vue.d.ts.map +1 -0
- package/dist/builder/props/CheckboxProps.vue.d.ts +8 -0
- package/dist/builder/props/CheckboxProps.vue.d.ts.map +1 -0
- package/dist/builder/props/HeadingProps.vue.d.ts +8 -0
- package/dist/builder/props/HeadingProps.vue.d.ts.map +1 -0
- package/dist/builder/props/ImageProps.vue.d.ts +8 -0
- package/dist/builder/props/ImageProps.vue.d.ts.map +1 -0
- package/dist/builder/props/LinkProps.vue.d.ts +8 -0
- package/dist/builder/props/LinkProps.vue.d.ts.map +1 -0
- package/dist/builder/props/ParagraphProps.vue.d.ts +8 -0
- package/dist/builder/props/ParagraphProps.vue.d.ts.map +1 -0
- package/dist/builder/props/SectionProps.vue.d.ts +8 -0
- package/dist/builder/props/SectionProps.vue.d.ts.map +1 -0
- package/dist/builder/props/SelectProps.vue.d.ts +8 -0
- package/dist/builder/props/SelectProps.vue.d.ts.map +1 -0
- package/dist/builder/props/SpacerProps.vue.d.ts +8 -0
- package/dist/builder/props/SpacerProps.vue.d.ts.map +1 -0
- package/dist/builder/props/StackProps.vue.d.ts +8 -0
- package/dist/builder/props/StackProps.vue.d.ts.map +1 -0
- package/dist/builder/props/StyleProps.vue.d.ts +8 -0
- package/dist/builder/props/StyleProps.vue.d.ts.map +1 -0
- package/dist/builder/props/TextInputProps.vue.d.ts +8 -0
- package/dist/builder/props/TextInputProps.vue.d.ts.map +1 -0
- package/dist/builder/props/registry.d.ts +15 -0
- package/dist/builder/props/registry.d.ts.map +1 -0
- package/dist/builder/useBuilderDnd.d.ts +26 -0
- package/dist/builder/useBuilderDnd.d.ts.map +1 -0
- package/dist/builder/usePageBuilder.d.ts +28 -0
- package/dist/builder/usePageBuilder.d.ts.map +1 -0
- package/dist/builder/useSchemaValidation.d.ts +28 -0
- package/dist/builder/useSchemaValidation.d.ts.map +1 -0
- package/dist/context.d.ts +24 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/index.css +2 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2454 -0
- package/dist/schema.d.ts +185 -0
- package/dist/schema.d.ts.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PageNode, PageConfig } from './schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
/**
|
|
4
|
+
* Security/allowlist config. The SAME config must also be passed to
|
|
5
|
+
* `<CoarPageRenderer>` so disallowed elements are filtered both during
|
|
6
|
+
* authoring (palette + add-child menu) and at render time (security boundary).
|
|
7
|
+
*/
|
|
8
|
+
config?: PageConfig;
|
|
9
|
+
};
|
|
10
|
+
type __VLS_PublicProps = {
|
|
11
|
+
modelValue?: PageNode;
|
|
12
|
+
} & __VLS_Props;
|
|
13
|
+
declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
14
|
+
"update:modelValue": (value: PageNode) => any;
|
|
15
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
16
|
+
"onUpdate:modelValue"?: ((value: PageNode) => any) | undefined;
|
|
17
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
18
|
+
rootRef: HTMLDivElement;
|
|
19
|
+
}, HTMLDivElement>;
|
|
20
|
+
export default _default;
|
|
21
|
+
//# sourceMappingURL=CoarPageBuilder.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CoarPageBuilder.vue.d.ts","sourceRoot":"","sources":["../src/CoarPageBuilder.vue"],"names":[],"mappings":"AA6rBA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAerD,KAAK,WAAW,GAAG;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,CAAC;AA8JF,KAAK,iBAAiB,GAAG;IACzB,UAAU,CAAC,EAAE,QAAQ,CAAC;CACrB,GAAG,WAAW,CAAC;;;;;;;;AAygBhB,wBASG"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PageNode, PageConfig } from './schema';
|
|
2
|
+
import { ActionHandler, CustomValidator } from './context';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
schema: PageNode;
|
|
5
|
+
actions?: Record<string, ActionHandler>;
|
|
6
|
+
/**
|
|
7
|
+
* Developer-only: async or complex cross-field validation that cannot be
|
|
8
|
+
* expressed declaratively. Returns fieldName → error message.
|
|
9
|
+
* Not exposed in the builder UI — tenant-facing rules live in the schema.
|
|
10
|
+
*/
|
|
11
|
+
onValidate?: CustomValidator;
|
|
12
|
+
assetResolver?: (id: string) => string;
|
|
13
|
+
/**
|
|
14
|
+
* Security/allowlist config. Disallowed element types are skipped at render
|
|
15
|
+
* time even if they appear in the schema — this is the security boundary
|
|
16
|
+
* for hand-written or tampered-with JSON.
|
|
17
|
+
*/
|
|
18
|
+
config?: PageConfig;
|
|
19
|
+
};
|
|
20
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
21
|
+
export default _default;
|
|
22
|
+
//# sourceMappingURL=CoarPageRenderer.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CoarPageRenderer.vue.d.ts","sourceRoot":"","sources":["../src/CoarPageRenderer.vue"],"names":[],"mappings":"AA8KA,OAAO,KAAK,EAAE,QAAQ,EAA2C,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,eAAe,EAErB,MAAM,WAAW,CAAC;AAGnB,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,QAAQ,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACvC;;;;OAIG;IACH,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;IACtC;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,CAAC;;AAsLF,wBAOG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PageNode } from './schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: PageNode;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
export default _default;
|
|
7
|
+
//# sourceMappingURL=PageNode.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageNode.vue.d.ts","sourceRoot":"","sources":["../src/PageNode.vue"],"names":[],"mappings":"AA+VA,OAAO,EAAoB,KAAK,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAK3E,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;;AA2gBtC,wBAMG"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
|
|
2
|
+
export default _default;
|
|
3
|
+
//# sourceMappingURL=BuilderCanvas.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuilderCanvas.vue.d.ts","sourceRoot":"","sources":["../../src/builder/BuilderCanvas.vue"],"names":[],"mappings":";AAgiBA,wBAMG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PageNode } from '../schema';
|
|
2
|
+
import { NodePath } from './operations';
|
|
3
|
+
interface Props {
|
|
4
|
+
node: PageNode;
|
|
5
|
+
path: NodePath;
|
|
6
|
+
}
|
|
7
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
8
|
+
export default _default;
|
|
9
|
+
//# sourceMappingURL=BuilderCanvasNode.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuilderCanvasNode.vue.d.ts","sourceRoot":"","sources":["../../src/builder/BuilderCanvasNode.vue"],"names":[],"mappings":"AA+pBA,OAAO,EAAmB,KAAK,QAAQ,EAAoB,MAAM,WAAW,CAAC;AAG7E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,UAAU,KAAK;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;CAChB;;AA2mBD,wBAOG"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
|
|
2
|
+
export default _default;
|
|
3
|
+
//# sourceMappingURL=BuilderOutline.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuilderOutline.vue.d.ts","sourceRoot":"","sources":["../../src/builder/BuilderOutline.vue"],"names":[],"mappings":";AAuFA,wBAMG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PageNode } from '../schema';
|
|
2
|
+
import { NodePath } from './operations';
|
|
3
|
+
interface Props {
|
|
4
|
+
node: PageNode;
|
|
5
|
+
path: NodePath;
|
|
6
|
+
depth?: number;
|
|
7
|
+
}
|
|
8
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
9
|
+
depth: number;
|
|
10
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
11
|
+
addMenuRoot: HTMLDivElement;
|
|
12
|
+
}, HTMLDivElement>;
|
|
13
|
+
export default _default;
|
|
14
|
+
//# sourceMappingURL=BuilderOutlineNode.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuilderOutlineNode.vue.d.ts","sourceRoot":"","sources":["../../src/builder/BuilderOutlineNode.vue"],"names":[],"mappings":"AAghBA,OAAO,EAAqC,KAAK,QAAQ,EAAoB,MAAM,WAAW,CAAC;AAE/F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,UAAU,KAAK;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;WADS,MAAM;;;;AAudhB,wBASG"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLElement>;
|
|
2
|
+
export default _default;
|
|
3
|
+
//# sourceMappingURL=BuilderPropsPanel.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuilderPropsPanel.vue.d.ts","sourceRoot":"","sources":["../../src/builder/BuilderPropsPanel.vue"],"names":[],"mappings":";AA8YA,wBAMG"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ComputedRef, InjectionKey } from 'vue';
|
|
2
|
+
import { PageConfig } from '../schema';
|
|
3
|
+
import { UsePageBuilderReturn } from './usePageBuilder';
|
|
4
|
+
import { UseSchemaValidationReturn } from './useSchemaValidation';
|
|
5
|
+
export declare const BUILDER_API: InjectionKey<UsePageBuilderReturn>;
|
|
6
|
+
/** Builder-side config (the same `PageConfig` is also passed to the renderer). */
|
|
7
|
+
export declare const BUILDER_CONFIG: InjectionKey<ComputedRef<PageConfig | undefined>>;
|
|
8
|
+
/** Reactive validation issues for the current schema, keyed by node id. */
|
|
9
|
+
export declare const BUILDER_VALIDATION: InjectionKey<UseSchemaValidationReturn>;
|
|
10
|
+
//# sourceMappingURL=builderContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builderContext.d.ts","sourceRoot":"","sources":["../../src/builder/builderContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAEvE,eAAO,MAAM,WAAW,EAAE,YAAY,CAAC,oBAAoB,CAA4B,CAAC;AAExF,kFAAkF;AAClF,eAAO,MAAM,cAAc,EAAE,YAAY,CAAC,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC,CAChD,CAAC;AAE9B,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,EAAE,YAAY,CAAC,yBAAyB,CACtC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ElementType, PageNode } from '../schema';
|
|
2
|
+
export type { ElementType };
|
|
3
|
+
export declare function resetIdCounter(): void;
|
|
4
|
+
export declare function defaultNode(type: ElementType): PageNode;
|
|
5
|
+
export interface PaletteGroup {
|
|
6
|
+
label: string;
|
|
7
|
+
items: {
|
|
8
|
+
type: ElementType;
|
|
9
|
+
label: string;
|
|
10
|
+
icon: string;
|
|
11
|
+
}[];
|
|
12
|
+
}
|
|
13
|
+
export declare const PALETTE_GROUPS: PaletteGroup[];
|
|
14
|
+
//# sourceMappingURL=nodeDefaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeDefaults.d.ts","sourceRoot":"","sources":["../../src/builder/nodeDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,CAAC;AAO5B,wBAAgB,cAAc,IAAI,IAAI,CAAiB;AAEvD,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAoBvD;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7D;AAED,eAAO,MAAM,cAAc,EAAE,YAAY,EAuCxC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PageNode, ElementType } from '../schema';
|
|
2
|
+
export type NodePath = readonly number[];
|
|
3
|
+
export interface NodeLocation {
|
|
4
|
+
path: NodePath;
|
|
5
|
+
node: PageNode;
|
|
6
|
+
parent: (PageNode & {
|
|
7
|
+
children: PageNode[];
|
|
8
|
+
}) | null;
|
|
9
|
+
index: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function getNodeAt(root: PageNode, path: NodePath): NodeLocation | null;
|
|
12
|
+
export declare function findPath(root: PageNode, target: PageNode): NodePath | null;
|
|
13
|
+
export declare function isAncestor(ancestor: NodePath, path: NodePath): boolean;
|
|
14
|
+
export declare function insertChild(root: PageNode, parentPath: NodePath, index: number, newChild: PageNode): PageNode;
|
|
15
|
+
export declare function removeNode(root: PageNode, path: NodePath): PageNode;
|
|
16
|
+
export declare function replaceNode(root: PageNode, path: NodePath, replacement: PageNode): PageNode;
|
|
17
|
+
export declare function patchNode(root: PageNode, path: NodePath, patch: Partial<PageNode>): PageNode;
|
|
18
|
+
export declare function moveNode(root: PageNode, fromPath: NodePath, toParentPath: NodePath, toIndex: number): PageNode;
|
|
19
|
+
export declare function moveSibling(root: PageNode, path: NodePath, delta: -1 | 1): PageNode;
|
|
20
|
+
export type { PageNode, ElementType };
|
|
21
|
+
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/builder/operations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAmB,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7E,MAAM,MAAM,QAAQ,GAAG,SAAS,MAAM,EAAE,CAAC;AAEzC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,CAAC,QAAQ,GAAG;QAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IACrD,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,GAAG,IAAI,CAY7E;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAa1E;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAMtE;AAID,wBAAgB,WAAW,CACzB,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,QAAQ,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,GACjB,QAAQ,CAaV;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAQnE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAW3F;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAiB5F;AAED,wBAAgB,QAAQ,CACtB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,QAAQ,EACtB,OAAO,EAAE,MAAM,GACd,QAAQ,CAUV;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CASnF;AAwBD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ButtonNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: ButtonNode;
|
|
4
|
+
patch: (update: Partial<ButtonNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=ButtonProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ButtonProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/ButtonProps.vue"],"names":[],"mappings":"AA2HA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CAC9C,CAAC;;AAqRF,wBAMG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CardNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: CardNode;
|
|
4
|
+
patch: (update: Partial<CardNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=CardProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/CardProps.vue"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;CAC5C,CAAC;;AAmEF,wBAOG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CheckboxNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: CheckboxNode;
|
|
4
|
+
patch: (update: Partial<CheckboxNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=CheckboxProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckboxProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/CheckboxProps.vue"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;CAChD,CAAC;;AA0IF,wBAMG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { HeadingNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: HeadingNode;
|
|
4
|
+
patch: (update: Partial<HeadingNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=HeadingProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeadingProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/HeadingProps.vue"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CAC/C,CAAC;;AA2GF,wBAMG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ImageNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: ImageNode;
|
|
4
|
+
patch: (update: Partial<ImageNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=ImageProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/ImageProps.vue"],"names":[],"mappings":"AAiJA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;CAC7C,CAAC;;AAiOF,wBAMG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LinkNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: LinkNode;
|
|
4
|
+
patch: (update: Partial<LinkNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=LinkProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/LinkProps.vue"],"names":[],"mappings":"AAmEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;CAC5C,CAAC;;AA4IF,wBAMG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ParagraphNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: ParagraphNode;
|
|
4
|
+
patch: (update: Partial<ParagraphNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=ParagraphProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParagraphProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/ParagraphProps.vue"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;CACjD,CAAC;;AA8DF,wBAOG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SectionNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: SectionNode;
|
|
4
|
+
patch: (update: Partial<SectionNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=SectionProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/SectionProps.vue"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CAC/C,CAAC;;AAmEF,wBAOG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SelectNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: SelectNode;
|
|
4
|
+
patch: (update: Partial<SelectNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=SelectProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/SelectProps.vue"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CAC9C,CAAC;;AAsKF,wBAMG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SpacerNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: SpacerNode;
|
|
4
|
+
patch: (update: Partial<SpacerNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=SpacerProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpacerProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/SpacerProps.vue"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CAC9C,CAAC;;AAuEF,wBAOG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { StackNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: StackNode;
|
|
4
|
+
patch: (update: Partial<StackNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=StackProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StackProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/StackProps.vue"],"names":[],"mappings":"AA8FA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;CAC7C,CAAC;;AAkGF,wBAMG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PageNode, NodeStyle } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: PageNode;
|
|
4
|
+
patchStyle: (update: Partial<NodeStyle>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=StyleProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StyleProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/StyleProps.vue"],"names":[],"mappings":"AAoEA,OAAO,EAAmB,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9E,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;CAClD,CAAC;;AA+KF,wBAMG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TextInputNode } from '../../schema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: TextInputNode;
|
|
4
|
+
patch: (update: Partial<TextInputNode>) => void;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=TextInputProps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextInputProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/TextInputProps.vue"],"names":[],"mappings":"AAyEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;CACjD,CAAC;;AA6MF,wBAMG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Component } from 'vue';
|
|
2
|
+
import { ElementType } from '../../schema';
|
|
3
|
+
export interface PropsRegistryEntry {
|
|
4
|
+
/** Component to render for the element-specific props section. */
|
|
5
|
+
component: Component;
|
|
6
|
+
/** Title shown above the element section. */
|
|
7
|
+
sectionTitle: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Per-element-type props registry. An entry is absent when an element type has
|
|
11
|
+
* no type-specific properties (`page`, `divider`) — only the universal style
|
|
12
|
+
* section is shown for those.
|
|
13
|
+
*/
|
|
14
|
+
export declare const PROPS_REGISTRY: Partial<Record<ElementType, PropsRegistryEntry>>;
|
|
15
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/builder/props/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAehD,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,SAAS,EAAE,SAAS,CAAC;IACrB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAa3E,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { InjectionKey, Ref } from 'vue';
|
|
2
|
+
import { NodePath } from './operations';
|
|
3
|
+
import { ElementType } from '../schema';
|
|
4
|
+
import { UsePageBuilderReturn } from './usePageBuilder';
|
|
5
|
+
export type DragPayload = {
|
|
6
|
+
kind: 'new';
|
|
7
|
+
type: ElementType;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'move';
|
|
10
|
+
path: NodePath;
|
|
11
|
+
};
|
|
12
|
+
export interface BuilderDndContext {
|
|
13
|
+
isDragging: Ref<boolean>;
|
|
14
|
+
payload: Ref<DragPayload | null>;
|
|
15
|
+
activeZoneKey: Ref<string | null>;
|
|
16
|
+
startDrag(payload: DragPayload): void;
|
|
17
|
+
endDrag(): void;
|
|
18
|
+
onZoneEnter(key: string, parentPath: NodePath): boolean;
|
|
19
|
+
onZoneLeave(key: string): void;
|
|
20
|
+
onZoneDrop(parentPath: NodePath, index: number): void;
|
|
21
|
+
canDrop(parentPath: NodePath): boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare const BUILDER_DND: InjectionKey<BuilderDndContext>;
|
|
24
|
+
export declare function provideBuilderDnd(builder: UsePageBuilderReturn): BuilderDndContext;
|
|
25
|
+
export declare function useBuilderDnd(): BuilderDndContext;
|
|
26
|
+
//# sourceMappingURL=useBuilderDnd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBuilderDnd.d.ts","sourceRoot":"","sources":["../../src/builder/useBuilderDnd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,YAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACxE,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAErC,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,OAAO,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjC,aAAa,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClC,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACtC,OAAO,IAAI,IAAI,CAAC;IAChB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC;IACxD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,OAAO,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC;CACxC;AAED,eAAO,MAAM,WAAW,EAAE,YAAY,CAAC,iBAAiB,CAA4B,CAAC;AAIrF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,iBAAiB,CA8ElF;AAED,wBAAgB,aAAa,IAAI,iBAAiB,CAIjD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
import { PageNode } from '../schema';
|
|
3
|
+
import { ElementType } from './nodeDefaults';
|
|
4
|
+
import { NodePath } from './operations';
|
|
5
|
+
export interface UsePageBuilderOptions {
|
|
6
|
+
schema?: Ref<PageNode>;
|
|
7
|
+
initial?: PageNode;
|
|
8
|
+
}
|
|
9
|
+
export declare function usePageBuilder(options?: UsePageBuilderOptions): {
|
|
10
|
+
schema: Ref<PageNode, PageNode>;
|
|
11
|
+
selectedPath: Ref<readonly number[] | null, NodePath | readonly number[] | null>;
|
|
12
|
+
selectedNode: import('vue').ComputedRef<PageNode | null>;
|
|
13
|
+
structuralVersion: Ref<number, number>;
|
|
14
|
+
canUndo: import('vue').ComputedRef<boolean>;
|
|
15
|
+
canRedo: import('vue').ComputedRef<boolean>;
|
|
16
|
+
select: (path: NodePath | null) => void;
|
|
17
|
+
selectNode: (node: PageNode) => void;
|
|
18
|
+
addChild: (parentPath: NodePath, type: ElementType, atIndex?: number) => void;
|
|
19
|
+
remove: (path: NodePath) => void;
|
|
20
|
+
move: (path: NodePath, delta: -1 | 1) => void;
|
|
21
|
+
moveTo: (fromPath: NodePath, toParentPath: NodePath, toIndex: number) => void;
|
|
22
|
+
patch: (path: NodePath, update: Partial<PageNode>) => void;
|
|
23
|
+
replaceSchema: (next: PageNode) => void;
|
|
24
|
+
undo: () => void;
|
|
25
|
+
redo: () => void;
|
|
26
|
+
};
|
|
27
|
+
export type UsePageBuilderReturn = ReturnType<typeof usePageBuilder>;
|
|
28
|
+
//# sourceMappingURL=usePageBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePageBuilder.d.ts","sourceRoot":"","sources":["../../src/builder/usePageBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAQL,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AAID,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B;;;;;;;mBA2E1C,QAAQ,GAAG,IAAI;uBACX,QAAQ;2BAGJ,QAAQ,QAAQ,WAAW,YAAY,MAAM;mBAarD,QAAQ;iBAkBV,QAAQ,SAAS,CAAC,CAAC,GAAG,CAAC;uBAWjB,QAAQ,gBAAgB,QAAQ,WAAW,MAAM;kBAUtD,QAAQ,UAAU,OAAO,CAAC,QAAQ,CAAC;0BAQ3B,QAAQ;;;EA0BtC;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
import { PageConfig, PageNode } from '../schema';
|
|
3
|
+
export type IssueSeverity = 'warning' | 'error';
|
|
4
|
+
export interface ValidationIssue {
|
|
5
|
+
/** Stable ID of the node the issue belongs to. */
|
|
6
|
+
nodeId: string;
|
|
7
|
+
/** Which property of the node is the problem (used to surface the issue near a specific field). */
|
|
8
|
+
field?: string;
|
|
9
|
+
/** Human-readable explanation. */
|
|
10
|
+
message: string;
|
|
11
|
+
severity: IssueSeverity;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Walk the schema reactively and surface common authoring mistakes — buttons
|
|
15
|
+
* without actions, duplicate field names, images without assets, action IDs
|
|
16
|
+
* that aren't in the configured allowlist. Builder UI consumes these to draw
|
|
17
|
+
* warning icons in the outline and inline hints in the props panel.
|
|
18
|
+
*
|
|
19
|
+
* The renderer does NOT consult these — disallowed elements (the actual
|
|
20
|
+
* security boundary) are enforced separately. Validation is purely a UX
|
|
21
|
+
* scaffold for the builder.
|
|
22
|
+
*/
|
|
23
|
+
export declare function useSchemaValidation(schema: Ref<PageNode>, config: Ref<PageConfig | undefined>): {
|
|
24
|
+
issues: import('vue').ComputedRef<ValidationIssue[]>;
|
|
25
|
+
byNodeId: import('vue').ComputedRef<Map<string, ValidationIssue[]>>;
|
|
26
|
+
};
|
|
27
|
+
export type UseSchemaValidationReturn = ReturnType<typeof useSchemaValidation>;
|
|
28
|
+
//# sourceMappingURL=useSchemaValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSchemaValidation.d.ts","sourceRoot":"","sources":["../../src/builder/useSchemaValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAA;IACd,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,aAAa,CAAA;CACxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,EACrB,MAAM,EAAE,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC;;;EAgGpC;AASD,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ComputedRef, InjectionKey } from 'vue';
|
|
2
|
+
import { PageConfig } from './schema';
|
|
3
|
+
export type ActionValues = Record<string, unknown>;
|
|
4
|
+
export type ActionHandler = (values: ActionValues) => void;
|
|
5
|
+
export type CustomValidator = (values: ActionValues) => Record<string, string>;
|
|
6
|
+
export interface PageRendererContext {
|
|
7
|
+
actions?: Record<string, ActionHandler>;
|
|
8
|
+
assetResolver?: (id: string) => string;
|
|
9
|
+
/** Optional security/allowlist config. When set, disallowed elements are skipped. */
|
|
10
|
+
config?: PageConfig;
|
|
11
|
+
/** Called by PageNode when it skips a disallowed type — used to console.warn once. */
|
|
12
|
+
reportDisallowed?: (type: string) => void;
|
|
13
|
+
/** Whether all named fields currently pass validation (quiet, no errors shown). */
|
|
14
|
+
isFormValid: ComputedRef<boolean>;
|
|
15
|
+
getValue: (name: string) => unknown;
|
|
16
|
+
setValue: (name: string, value: unknown) => void;
|
|
17
|
+
/** Returns the error for a field only if it has been touched. */
|
|
18
|
+
getError: (name: string) => string;
|
|
19
|
+
/** Mark a field as touched (called on blur). */
|
|
20
|
+
markTouched: (name: string) => void;
|
|
21
|
+
triggerAction: (id: string, validates?: boolean) => void;
|
|
22
|
+
}
|
|
23
|
+
export declare const PAGE_RENDERER_KEY: InjectionKey<PageRendererContext>;
|
|
24
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACnD,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/E,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACvC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;IACtC,qFAAqF;IACrF,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,mFAAmF;IACnF,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,iEAAiE;IACjE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IAClC,gDAAgD;IAChD,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CACzD;AAED,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,mBAAmB,CAA2B,CAAC"}
|
package/dist/index.css
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
.pb-stack[data-v-0632b6f4]{flex-direction:column;min-width:0;display:flex}.pb-stack--row[data-v-0632b6f4]{flex-direction:row}.pb-stack--row[data-v-0632b6f4]>*{flex:1;min-width:0}.pb-stack--wrap[data-v-0632b6f4]{flex-wrap:wrap}.pb-card-body[data-v-0632b6f4]{flex-direction:column;min-width:0;display:flex}.pb-section[data-v-0632b6f4]{display:block}.pb-section__title[data-v-0632b6f4]{margin:0 0 var(--coar-spacing-s,8px);font-size:var(--coar-body-base-size,14px);color:var(--coar-text-neutral-primary,#111);font-weight:600}.pb-section__body[data-v-0632b6f4]{flex-direction:column;display:flex}.pb-heading[data-v-0632b6f4]{color:var(--coar-text-neutral-primary,#111);margin:0;font-weight:600}.pb-paragraph[data-v-0632b6f4]{color:var(--coar-text-neutral-secondary,#666);margin:0}.pb-button[data-v-0632b6f4],.pb-link[data-v-0632b6f4],.pb-image[data-v-0632b6f4]{width:fit-content;max-width:100%}.pb-link[data-v-0632b6f4]{cursor:pointer;color:var(--coar-text-accent,#06c);font-size:inherit;background:0 0;border:none;padding:0;text-decoration:underline}.pb-link[data-v-0632b6f4]:hover{color:var(--coar-text-accent-hover,#004fa3)}.pb-image[data-v-0632b6f4]{display:block}.pb-spacer[data-v-0632b6f4]{flex-shrink:0}.coar-page-renderer[data-v-8ff147bf]{display:contents}.pb-tree-node[data-v-be04973b]{color:var(--coar-text-neutral-primary,#111);font-size:13px}.pb-tree-row[data-v-be04973b]{cursor:pointer;border-radius:4px;align-items:center;gap:6px;height:30px;padding-right:8px;display:flex;position:relative}.pb-tree-row[data-v-be04973b]:hover{background:var(--coar-surface-neutral-subtle,#f1f1f3)}.pb-tree-node--selected>.pb-tree-row[data-v-be04973b]{background:var(--coar-surface-accent-subtle,#e6eefa);color:var(--coar-text-accent,#1666cc)}.pb-tree-node--selected>.pb-tree-row[data-v-be04973b]:before{content:"";background:var(--coar-background-accent-primary,#1666cc);border-radius:2px;width:3px;position:absolute;top:3px;bottom:3px;left:0}.pb-tree-grip[data-v-be04973b]{width:12px;color:var(--coar-icon-neutral-disabled,#b8b8bc);opacity:0;flex-shrink:0;justify-content:center;align-items:center;transition:opacity .12s ease-out;display:inline-flex}.pb-tree-row:hover .pb-tree-grip[data-v-be04973b],.pb-tree-node--selected>.pb-tree-row .pb-tree-grip[data-v-be04973b]{opacity:1}.pb-tree-type-icon[data-v-be04973b]{color:var(--coar-icon-neutral-secondary,#5a5a60);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.pb-tree-node--selected>.pb-tree-row .pb-tree-type-icon[data-v-be04973b]{color:var(--coar-icon-accent,#1666cc)}.pb-tree-label[data-v-be04973b]{flex:1;align-items:baseline;gap:6px;min-width:0;display:inline-flex}.pb-tree-label-text[data-v-be04973b]{white-space:nowrap;text-overflow:ellipsis;font-weight:500;overflow:hidden}.pb-tree-label-key[data-v-be04973b]{color:var(--coar-text-neutral-tertiary,#8a8a90);white-space:nowrap;text-overflow:ellipsis;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;overflow:hidden}.pb-tree-node--selected>.pb-tree-row .pb-tree-label-key[data-v-be04973b]{color:var(--coar-text-accent,#1666cc);opacity:.7}.pb-tree-issue[data-v-be04973b]{flex-shrink:0;justify-content:center;align-items:center;width:18px;height:18px;margin-right:30px;display:inline-flex}.pb-tree-issue--warning[data-v-be04973b]{color:var(--coar-icon-semantic-warning,#b45309)}.pb-tree-issue--error[data-v-be04973b]{color:var(--coar-icon-semantic-error,#c0392b)}.pb-tree-actions[data-v-be04973b]{opacity:0;background:var(--coar-surface-neutral-subtle,#f1f1f3);border-radius:4px;gap:1px;padding:1px;transition:opacity .12s ease-out;display:flex;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.pb-tree-row:hover .pb-tree-actions[data-v-be04973b],.pb-tree-node--selected>.pb-tree-row .pb-tree-actions[data-v-be04973b]{opacity:1}.pb-tree-node--selected>.pb-tree-row .pb-tree-actions[data-v-be04973b]{background:var(--coar-surface-accent-subtle,#e6eefa)}.pb-tree-btn[data-v-be04973b]{width:22px;height:22px;color:var(--coar-icon-neutral-secondary,#5a5a60);cursor:pointer;background:0 0;border:none;border-radius:3px;justify-content:center;align-items:center;padding:0;transition:background-color .12s ease-out,color .12s ease-out;display:inline-flex}.pb-tree-btn[data-v-be04973b]:hover:not(:disabled){background:var(--coar-surface-neutral-default,#dedee2);color:var(--coar-icon-neutral-primary,#111)}.pb-tree-btn[data-v-be04973b]:disabled{opacity:.3;cursor:not-allowed}.pb-tree-btn--danger[data-v-be04973b]:hover:not(:disabled){background:var(--coar-surface-semantic-error-subtle,#fde8e4);color:var(--coar-text-semantic-error-bold,#c0392b)}.pb-tree-add[data-v-be04973b]{padding-top:2px;padding-bottom:2px;padding-right:8px;position:relative}.pb-tree-add__trigger[data-v-be04973b]{border:1px dashed var(--coar-border-neutral,#cecece);height:26px;color:var(--coar-text-neutral-secondary,#666);cursor:pointer;background:0 0;border-radius:4px;align-items:center;gap:6px;padding:0 10px;font-family:inherit;font-size:12px;transition:border-color .12s,color .12s,background-color .12s;display:inline-flex}.pb-tree-add__trigger[data-v-be04973b]:hover,.pb-tree-add__trigger--open[data-v-be04973b]{border-color:var(--coar-border-accent,#1666cc);color:var(--coar-text-accent,#1666cc);background:var(--coar-surface-accent-subtle,#e6eefa)}.pb-tree-add__menu[data-v-be04973b]{top:calc(100% + 4px);left:inherit;background:var(--coar-surface-default,#fff);border:1px solid var(--coar-border-neutral,#dcdce0);z-index:10;border-radius:6px;flex-direction:column;min-width:200px;padding:4px;display:flex;position:absolute;box-shadow:0 8px 24px #0000001f}.pb-tree-add__group-label[data-v-be04973b]{text-transform:uppercase;letter-spacing:.04em;color:var(--coar-text-neutral-tertiary,#8a8a90);padding:6px 8px 2px;font-size:11px}.pb-tree-add__divider[data-v-be04973b]{background:var(--coar-border-neutral-subtle,#eeeef0);height:1px;margin:4px 0}.pb-tree-add__item[data-v-be04973b]{color:var(--coar-text-neutral-primary,#111);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:10px;padding:6px 8px;font-family:inherit;font-size:13px;transition:background-color .12s;display:inline-flex}.pb-tree-add__item[data-v-be04973b]:hover{background:var(--coar-surface-accent-subtle,#e6eefa);color:var(--coar-text-accent,#1666cc)}.pb-tree-add__item[data-v-be04973b]>:first-child{color:var(--coar-icon-neutral-secondary,#5a5a60);flex-shrink:0}.pb-tree-add__item[data-v-be04973b]:hover>:first-child{color:var(--coar-icon-accent,#1666cc)}.pb-outline-wrap[data-v-fc62f26e]{height:100%;padding:4px 0;overflow-y:auto}.canvas-node[data-v-3ae4c5ac]{--canvas-border:#66666e4d;--canvas-border-selected:#1666ccb3;--canvas-tab-fg:#5a5a60;--canvas-tab-bg:#fff;--canvas-tab-border:#66666e59}.canvas-node--container[data-v-3ae4c5ac]{--canvas-border:#1666cc61;--canvas-tab-fg:#1666cc;--canvas-tab-border:#1666cc73}.canvas-node--element[data-v-3ae4c5ac]{--canvas-border:#05966959;--canvas-tab-fg:#047857;--canvas-tab-border:#05966973}.canvas-node[data-v-3ae4c5ac]{border:1px dashed var(--canvas-border);cursor:pointer;border-radius:6px;min-width:0;padding:16px 10px 10px;transition:border-color .12s ease-out,background-color .12s ease-out;position:relative}.canvas-node[data-v-3ae4c5ac]:hover{background:#1666cc08}.canvas-node--selected[data-v-3ae4c5ac]{border-color:var(--canvas-border-selected);background:#1666cc0d;border-style:solid}.canvas-node--dragging[data-v-3ae4c5ac]{opacity:.4}.canvas-node--root[data-v-3ae4c5ac]{min-height:80px;padding:20px 14px 14px}.canvas-node__tab[data-v-3ae4c5ac]{background:var(--canvas-tab-bg);border:1px solid var(--canvas-tab-border);height:18px;color:var(--canvas-tab-fg);white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;border-radius:4px;align-items:center;gap:4px;max-width:calc(100% - 40px);padding:0 6px;font-size:11px;font-weight:500;display:inline-flex;position:absolute;top:-9px;left:10px;overflow:hidden}.canvas-node__tab--grabbable[data-v-3ae4c5ac]{cursor:grab}.canvas-node__tab--grabbable[data-v-3ae4c5ac]:active{cursor:grabbing}.canvas-node--selected .canvas-node__tab[data-v-3ae4c5ac]{border-color:var(--canvas-border-selected);color:var(--canvas-border-selected);font-weight:600}.canvas-node__tab-label[data-v-3ae4c5ac]{text-overflow:ellipsis;line-height:1;overflow:hidden}.canvas-node__delete[data-v-3ae4c5ac]{border:1px solid var(--canvas-tab-border);background:var(--canvas-tab-bg);width:18px;height:18px;color:var(--canvas-tab-fg);cursor:pointer;opacity:0;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:opacity .12s ease-out,background-color .12s ease-out,border-color .12s ease-out,color .12s ease-out;display:inline-flex;position:absolute;top:-9px;right:10px}.canvas-node--selected>.canvas-node__delete[data-v-3ae4c5ac]{opacity:1}.canvas-node:hover:not(:has(.canvas-node:hover))>.canvas-node__delete[data-v-3ae4c5ac]{opacity:1}.canvas-node__delete[data-v-3ae4c5ac]:hover{background:var(--coar-surface-semantic-error-subtle,#fde8e4);border-color:var(--coar-text-semantic-error-bold,#c0392b);color:var(--coar-text-semantic-error-bold,#c0392b)}.canvas-node__body[data-v-3ae4c5ac]{min-height:24px}.canvas-node__body--dir-row>.canvas-node[data-v-3ae4c5ac]{flex:1;min-width:0}.canvas-node__body--card[data-v-3ae4c5ac]{background:var(--coar-surface-default,#fff);border:1px solid var(--coar-border-neutral,#e0e0e0);border-radius:6px;padding:12px;box-shadow:0 1px 4px #00000012}.canvas-node__section-title[data-v-3ae4c5ac]{color:var(--coar-text-neutral-primary,#111);border-bottom:1px solid var(--coar-border-neutral,#e0e0e0);margin-bottom:8px;padding-bottom:6px;font-size:13px;font-weight:600}.canvas-dropzone[data-v-3ae4c5ac]{box-sizing:border-box;opacity:0;pointer-events:none;background:#1666cc1f;border:1px dashed #1666cc73;border-radius:3px;flex-shrink:0;transition:background-color .12s ease-out,border-color .12s ease-out,opacity .15s ease-out,width .14s ease-out,min-width .14s ease-out,height .14s ease-out,min-height .14s ease-out}.canvas-dropzone--empty[data-v-3ae4c5ac]{opacity:1;pointer-events:auto;color:var(--coar-text-neutral-tertiary,#8a8a90);text-align:center;min-height:unset;background:#66666e0a;border-color:#66666e40;height:auto;padding:14px 12px;font-size:12px;font-style:italic}.canvas-dropzone--drag-active[data-v-3ae4c5ac]{background:#1666cc33;border-color:#1666ccb3}.canvas-dropzone--over[data-v-3ae4c5ac]{background:#1666cc59;border-style:solid;border-color:#1666ccf2;box-shadow:inset 0 0 0 1px #1666cc99}.canvas-dropzone--disabled[data-v-3ae4c5ac]{opacity:.55;background:#64646a14;border-color:#64646a4d}.canvas-dropzone--row[data-v-3ae4c5ac]{align-self:stretch;width:0;min-width:0}.canvas-dropzone--row.canvas-dropzone--drag-active[data-v-3ae4c5ac]{width:10px;min-width:10px}.canvas-dropzone--row.canvas-dropzone--over[data-v-3ae4c5ac]{width:24px;min-width:24px}.canvas-dropzone--column[data-v-3ae4c5ac]{width:auto;height:0;min-height:0}.canvas-dropzone--column.canvas-dropzone--drag-active[data-v-3ae4c5ac]{height:10px;min-height:10px}.canvas-dropzone--column.canvas-dropzone--over[data-v-3ae4c5ac]{height:24px;min-height:24px}.canvas-node__preview[data-v-3ae4c5ac]{pointer-events:none}.canvas-node__spacer-preview[data-v-3ae4c5ac]{background:repeating-linear-gradient(45deg,#00000008 0 4px,#0000 4px 8px);border:1px dashed #0000001f;border-radius:2px;height:20px}.canvas-node__heading[data-v-3ae4c5ac]{color:var(--coar-text-neutral-primary,#111);margin:0;font-weight:600}h1.canvas-node__heading[data-v-3ae4c5ac]{font-size:28px}h2.canvas-node__heading[data-v-3ae4c5ac]{font-size:22px}h3.canvas-node__heading[data-v-3ae4c5ac]{font-size:18px}h4.canvas-node__heading[data-v-3ae4c5ac]{font-size:15px}h5.canvas-node__heading[data-v-3ae4c5ac]{font-size:13px}h6.canvas-node__heading[data-v-3ae4c5ac]{font-size:12px}.canvas-node__paragraph[data-v-3ae4c5ac]{color:var(--coar-text-neutral-secondary,#555);margin:0;font-size:14px}.canvas-node__link[data-v-3ae4c5ac]{cursor:default;color:var(--coar-text-accent,#1666cc);background:0 0;border:none;padding:0;font-size:14px;text-decoration:underline}.canvas-node__image-preview[data-v-3ae4c5ac]{border-radius:4px;max-width:100%;height:auto;display:block}.canvas-node__image-placeholder[data-v-3ae4c5ac]{background:var(--coar-surface-subtle,#f7f7f9);color:var(--coar-text-neutral-secondary,#888);border:1px dashed #00000026;border-radius:4px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:20px;font-size:12px;display:flex}.pb-canvas-shell[data-v-4d674269]{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.pb-palette[data-v-4d674269]{background:var(--coar-surface-neutral-subtle,#f7f7f9);border-bottom:1px solid var(--coar-border-neutral,#e2e2e6);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:10px;padding:8px 12px;display:flex}.pb-palette__group[data-v-4d674269]{flex-wrap:wrap;align-items:center;gap:4px;display:inline-flex}.pb-palette__label[data-v-4d674269]{text-transform:uppercase;letter-spacing:.06em;color:var(--coar-text-neutral-tertiary,#8a8a90);white-space:nowrap;margin-right:2px;font-size:10px;font-weight:600}.pb-palette__divider[data-v-4d674269]{background:var(--coar-border-neutral,#d8d8dc);flex-shrink:0;width:1px;height:20px}.pb-palette__card[data-v-4d674269]{border:1px solid var(--card-border,#66666e40);height:24px;color:var(--card-fg,#5a5a60);cursor:grab;-webkit-user-select:none;user-select:none;white-space:nowrap;background:#fff;border-radius:4px;align-items:center;gap:4px;padding:0 7px;font-family:inherit;font-size:12px;font-weight:500;transition:background-color .12s,border-color .12s,transform 80ms;display:inline-flex}.pb-palette__card[data-v-4d674269]:hover{background:var(--card-bg-hover,#1666cc0f);border-color:var(--card-border-hover,#1666cc66);color:var(--card-fg-hover,#1666cc)}.pb-palette__card[data-v-4d674269]:active{transform:scale(.97)}.pb-palette__card--dragging[data-v-4d674269]{opacity:.4;cursor:grabbing}.pb-palette__card--container[data-v-4d674269]{--card-fg:#1666cc;--card-fg-hover:#1666cc;--card-border:#1666cc4d;--card-border-hover:#1666cc8c;--card-bg-hover:#1666cc14}.pb-palette__card--element[data-v-4d674269]{--card-fg:#047857;--card-fg-hover:#047857;--card-border:#0596694d;--card-border-hover:#0596698c;--card-bg-hover:#05966914}.pb-canvas[data-v-4d674269]{background:repeating-linear-gradient(45deg,#00000004 0 6px,#0000 6px 12px);flex:1;padding:28px 20px 20px;overflow:auto}.pb-prop-group[data-v-e4171f7c]{flex-direction:column;gap:4px;display:flex}.pb-prop-label[data-v-e4171f7c]{color:var(--coar-text-neutral-primary,#111);font-size:12px;font-weight:500}.pb-prop-seg[data-v-e4171f7c]{border:1px solid var(--coar-border-neutral,#d0d0d0);background:var(--coar-surface-base,#fff);border-radius:6px;display:inline-flex;overflow:hidden}.pb-prop-seg__btn[data-v-e4171f7c]{color:var(--coar-text-neutral-secondary,#555);cursor:pointer;background:0 0;border:none;flex:1;padding:6px 12px;font-family:inherit;font-size:12px;transition:background-color .12s,color .12s}.pb-prop-seg__btn+.pb-prop-seg__btn[data-v-e4171f7c]{border-left:1px solid var(--coar-border-neutral,#d0d0d0)}.pb-prop-seg__btn[data-v-e4171f7c]:hover:not(.pb-prop-seg__btn--active){background:var(--coar-surface-neutral-subtle,#f0f0f2)}.pb-prop-seg__btn--active[data-v-e4171f7c]{background:var(--coar-surface-accent-subtle,#e6eefa);color:var(--coar-text-accent,#1666cc);font-weight:600}.pb-prop-textarea[data-v-13b6b029]{border:1px solid var(--coar-border-neutral,#d0d0d0);width:100%;color:var(--coar-text-neutral-primary,#111);background:var(--coar-surface-base,#fff);resize:vertical;box-sizing:border-box;border-radius:6px;min-height:60px;padding:6px 10px;font-family:inherit;font-size:13px}.pb-prop-textarea[data-v-13b6b029]:focus{outline:2px solid var(--coar-border-accent,#1a73e8);outline-offset:-1px}.pb-image-asset[data-v-49a42b45]{align-items:stretch;gap:10px;display:flex}.pb-image-asset__thumb[data-v-49a42b45]{background:var(--coar-surface-neutral-subtle,#f0f0f2);border:1px solid var(--coar-border-neutral,#e0e0e0);border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:80px;height:80px;display:flex;overflow:hidden}.pb-image-asset__thumb img[data-v-49a42b45]{object-fit:cover;width:100%;height:100%;display:block}.pb-image-asset__empty[data-v-49a42b45]{color:var(--coar-icon-neutral-disabled,#b0b0b6);flex-direction:column;align-items:center;gap:2px;font-size:10px;display:flex}.pb-image-asset__empty-label[data-v-49a42b45]{font-size:10px}.pb-image-asset__controls[data-v-49a42b45]{flex-direction:column;justify-content:center;gap:6px;display:flex}.pb-props[data-v-380ec929]{background:var(--coar-surface-default,#fff);height:100%;min-height:0;font-family:var(--coar-body-base-family,sans-serif);flex-direction:column;display:flex}.pb-props__header[data-v-380ec929]{box-sizing:border-box;border-bottom:1px solid var(--coar-border-neutral,#e2e2e6);height:44px;color:var(--coar-text-neutral-secondary,#5a5a60);flex-shrink:0;align-items:center;gap:8px;padding:0 14px;display:flex}.pb-props__title[data-v-380ec929]{text-transform:uppercase;letter-spacing:.06em;color:var(--coar-text-neutral-secondary,#5a5a60);font-size:11px;font-weight:600}.pb-props__body[data-v-380ec929]{flex-direction:column;flex:1;padding:16px;display:flex;overflow:auto}.pb-props__section[data-v-380ec929]{flex-direction:column;gap:12px;display:flex}.pb-props__section--separated[data-v-380ec929]{border-top:1px solid var(--coar-border-neutral-subtle,#eeeef0);margin-top:20px;padding-top:16px}.pb-props__section-title[data-v-380ec929]{text-transform:uppercase;letter-spacing:.06em;color:var(--coar-text-neutral-tertiary,#8a8a90);margin:0;font-size:10px;font-weight:600}.pb-props__empty[data-v-380ec929]{color:var(--coar-icon-neutral-disabled,#b0b0b6);text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:32px 16px;display:flex}.pb-props__empty-title[data-v-380ec929]{font-size:var(--coar-body-small-base-size,14px);color:var(--coar-text-neutral-secondary,#5a5a60);margin:8px 0 0;font-weight:500}.pb-props__empty-hint[data-v-380ec929]{font-size:var(--coar-body-caption-size,12px);color:var(--coar-text-neutral-tertiary,#8a8a90);margin:0}.pb-props__issues[data-v-380ec929]{flex-direction:column;gap:6px;margin:0 0 16px;padding:0;list-style:none;display:flex}.pb-props__issue[data-v-380ec929]{border-radius:6px;align-items:flex-start;gap:8px;padding:8px 10px;font-size:12px;line-height:1.4;display:flex}.pb-props__issue--warning[data-v-380ec929]{background:var(--coar-surface-semantic-warning-subtle,#fef3c7);color:var(--coar-text-semantic-warning-bold,#92400e)}.pb-props__issue--error[data-v-380ec929]{background:var(--coar-surface-semantic-error-subtle,#fde8e4);color:var(--coar-text-semantic-error-bold,#c0392b)}.pb-builder[data-v-fb26dca9]{grid-template-columns:var(--v0d1c4c4b) 1px minmax(360px, 1fr) 1px var(--v0f378b9d);background:var(--coar-surface-default,#fff);border:1px solid var(--coar-border-neutral,#e2e2e6);height:100%;min-height:520px;font-family:var(--coar-body-base-family,sans-serif);border-radius:8px;transition:grid-template-columns .18s ease-out;display:grid;overflow:hidden}.pb-builder--resizing[data-v-fb26dca9]{-webkit-user-select:none;user-select:none;cursor:col-resize;transition:none}.pb-builder__pane[data-v-fb26dca9]{background:var(--coar-surface-default,#fff);flex-direction:column;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.pb-builder__pane--rail[data-v-fb26dca9]{justify-content:flex-start;align-items:center;padding:8px 0}.pb-builder__pane-header[data-v-fb26dca9]{box-sizing:border-box;border-bottom:1px solid var(--coar-border-neutral,#e2e2e6);height:44px;color:var(--coar-text-neutral-secondary,#5a5a60);flex-shrink:0;align-items:center;gap:8px;padding:0 14px;display:flex}.pb-builder__pane-title[data-v-fb26dca9]{text-transform:uppercase;letter-spacing:.06em;color:var(--coar-text-neutral-secondary,#5a5a60);flex:1;font-size:11px;font-weight:600}.pb-builder[data-v-fb26dca9] .coar-tab-list{box-sizing:border-box;align-items:stretch;min-height:44px}.pb-builder[data-v-fb26dca9] .coar-tab-button{align-items:center;padding-top:0;padding-bottom:0;display:inline-flex}.pb-builder[data-v-fb26dca9] .pb-props__header{box-sizing:border-box;height:44px;padding:0 14px}.pb-builder[data-v-fb26dca9] .coar-tab-content{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.pb-builder[data-v-fb26dca9] .coar-tab-panel{display:none}.pb-builder[data-v-fb26dca9] .coar-tab-panel.active{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.pb-builder__tree-scroll[data-v-fb26dca9]{flex:1;padding:6px 6px 12px;overflow:auto}.pb-builder__pane-inner[data-v-fb26dca9]{border:none;border-radius:0;flex:1;min-height:0}.pb-builder__divider[data-v-fb26dca9]{background:var(--coar-border-neutral,#e2e2e6);cursor:col-resize;z-index:1;transition:background-color .12s ease-out;position:relative}.pb-builder__divider[data-v-fb26dca9]:after{content:"";cursor:inherit;position:absolute;inset:0 -3px}.pb-builder__divider[data-v-fb26dca9]:hover,.pb-builder--resizing .pb-builder__divider[data-v-fb26dca9]{background:var(--coar-background-accent-primary,#1666cc)}.pb-builder__divider--inert[data-v-fb26dca9]{cursor:default;pointer-events:none}.pb-builder__divider--inert[data-v-fb26dca9]:after{pointer-events:none}.pb-builder__icon-btn[data-v-fb26dca9]{width:26px;height:26px;color:var(--coar-icon-neutral-secondary,#5a5a60);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:background-color .12s,color .12s,border-color .12s;display:inline-flex}.pb-builder__icon-btn[data-v-fb26dca9]:hover:not(:disabled){background:var(--coar-surface-neutral-subtle,#f0f0f2);border-color:var(--coar-border-neutral,#dcdce0);color:var(--coar-icon-neutral-primary,#111)}.pb-builder__icon-btn[data-v-fb26dca9]:disabled{opacity:.3;cursor:not-allowed}.pb-builder__icon-btn--corner[data-v-fb26dca9]{z-index:2;position:absolute;top:9px;right:10px}.pb-builder__rail-btn[data-v-fb26dca9]{width:28px;height:28px;color:var(--coar-icon-neutral-secondary,#5a5a60);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:background-color .12s,border-color .12s,color .12s;display:inline-flex}.pb-builder__rail-btn[data-v-fb26dca9]:hover{background:var(--coar-surface-neutral-subtle,#f0f0f2);border-color:var(--coar-border-neutral,#dcdce0);color:var(--coar-icon-neutral-primary,#111)}.pb-builder__pane--center[data-v-fb26dca9]{padding:0}.pb-builder__tabs[data-v-fb26dca9]{flex-direction:column;flex:1;min-height:0;display:flex}.pb-builder__tab-label[data-v-fb26dca9]{align-items:center;gap:6px;display:inline-flex}.pb-builder__preview-pane[data-v-fb26dca9]{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.pb-builder__preview-toolbar[data-v-fb26dca9]{border-bottom:1px solid var(--coar-border-neutral,#e2e2e6);background:var(--coar-surface-neutral-subtle,#f7f7f9);flex-shrink:0;align-items:center;gap:8px;padding:8px 12px;display:flex}.pb-builder__seg[data-v-fb26dca9]{border:1px solid var(--coar-border-neutral,#d0d0d0);background:var(--coar-surface-base,#fff);border-radius:6px;display:inline-flex;overflow:hidden}.pb-builder__seg-btn[data-v-fb26dca9]{color:var(--coar-text-neutral-secondary,#555);cursor:pointer;background:0 0;border:none;align-items:center;gap:5px;padding:4px 10px;font-family:inherit;font-size:12px;transition:background-color .12s,color .12s;display:inline-flex}.pb-builder__seg-btn+.pb-builder__seg-btn[data-v-fb26dca9]{border-left:1px solid var(--coar-border-neutral,#d0d0d0)}.pb-builder__seg-btn[data-v-fb26dca9]:hover:not(.pb-builder__seg-btn--active){background:var(--coar-surface-neutral-subtle,#f0f0f2)}.pb-builder__seg-btn--active[data-v-fb26dca9]{background:var(--coar-surface-accent-subtle,#e6eefa);color:var(--coar-text-accent,#1666cc);font-weight:600}.pb-builder__preview[data-v-fb26dca9]{box-sizing:border-box;background:repeating-linear-gradient(45deg,#00000004 0 6px,#0000 6px 12px);flex:1;min-height:0;padding:20px 24px;overflow:auto}.pb-builder__preview-frame[data-v-fb26dca9]{background:var(--coar-surface-default,#fff);border:1px solid var(--coar-border-neutral,#e2e2e6);border-radius:8px;transition:max-width .18s ease-out,width .18s ease-out;overflow:hidden}.pb-builder__json-pane[data-v-fb26dca9]{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.pb-builder__json-toolbar[data-v-fb26dca9]{border-bottom:1px solid var(--coar-border-neutral,#e2e2e6);background:var(--coar-surface-neutral-subtle,#f7f7f9);flex-shrink:0;align-items:center;gap:8px;padding:6px 12px;display:flex}.pb-builder__json-hint[data-v-fb26dca9]{color:var(--coar-text-neutral-secondary,#888);flex:1;font-size:12px}.pb-builder__json-error[data-v-fb26dca9]{color:var(--coar-text-semantic-error-bold,#c0392b);font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px}.pb-builder__json-apply[data-v-fb26dca9]{background:var(--coar-background-accent-primary,#1666cc);color:#fff;cursor:pointer;white-space:nowrap;border:none;border-radius:4px;padding:4px 14px;font-family:inherit;font-size:12px;font-weight:500}.pb-builder__json-apply[data-v-fb26dca9]:disabled{opacity:.4;cursor:default}.pb-builder__json-apply[data-v-fb26dca9]:not(:disabled):hover{filter:brightness(.92)}.pb-builder__json-editor[data-v-fb26dca9]{resize:none;color:var(--coar-text-neutral-primary,#111);background:var(--coar-surface-neutral-subtle,#f7f7f9);border:none;outline:none;flex:1;padding:16px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;line-height:1.55}
|
|
2
|
+
/*$vite$:1*/
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as CoarPageRenderer } from './CoarPageRenderer.vue';
|
|
2
|
+
export { default as CoarPageBuilder } from './CoarPageBuilder.vue';
|
|
3
|
+
export type { ActionValues, ActionHandler, CustomValidator } from './context';
|
|
4
|
+
export type { PageNode, ElementType, NodeStyle, ContainerNode, PageRootNode, StackNode, CardNode, SectionNode, DividerNode, SpacerNode, HeadingNode, ParagraphNode, TextInputNode, CheckboxNode, SelectNode, ButtonNode, LinkNode, ImageNode, PageConfig, } from './schema';
|
|
5
|
+
export { isContainerNode, isElementAllowed } from './schema';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|