@webiny/website-builder-vue 6.4.0-beta.5 → 6.4.0-beta.7
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 +11 -0
- package/components/ConnectToEditor.d.ts +35 -0
- package/components/ConnectToEditor.js +40 -0
- package/components/ConnectToEditor.js.map +1 -0
- package/components/DocumentFragment.d.ts +67 -0
- package/components/DocumentFragment.js +24 -0
- package/components/DocumentFragment.js.map +1 -0
- package/components/DocumentRenderer.d.ts +59 -0
- package/components/DocumentRenderer.js +68 -0
- package/components/DocumentRenderer.js.map +1 -0
- package/components/DocumentStoreProvider.d.ts +37 -0
- package/components/DocumentStoreProvider.js +32 -0
- package/components/DocumentStoreProvider.js.map +1 -0
- package/components/EditingElementRenderer/EditingElementRenderer.d.ts +22 -0
- package/components/EditingElementRenderer/EditingElementRenderer.js +53 -0
- package/components/EditingElementRenderer/EditingElementRenderer.js.map +1 -0
- package/components/EditingElementRenderer/EditingElementRenderer.presenter.d.ts +15 -0
- package/components/EditingElementRenderer/EditingElementRenderer.presenter.js +37 -0
- package/components/EditingElementRenderer/EditingElementRenderer.presenter.js.map +1 -0
- package/components/EditingElementRenderer/index.js +2 -0
- package/components/ElementIndexProvider.d.ts +19 -0
- package/components/ElementIndexProvider.js +19 -0
- package/components/ElementIndexProvider.js.map +1 -0
- package/components/ElementRenderer.d.ts +19 -0
- package/components/ElementRenderer.js +33 -0
- package/components/ElementRenderer.js.map +1 -0
- package/components/ElementSlot.d.ts +39 -0
- package/components/ElementSlot.js +36 -0
- package/components/ElementSlot.js.map +1 -0
- package/components/ElementSlotDepthProvider.d.ts +19 -0
- package/components/ElementSlotDepthProvider.js +19 -0
- package/components/ElementSlotDepthProvider.js.map +1 -0
- package/components/FragmentsProvider.d.ts +46 -0
- package/components/FragmentsProvider.js +40 -0
- package/components/FragmentsProvider.js.map +1 -0
- package/components/LiveElementRenderer.d.ts +24 -0
- package/components/LiveElementRenderer.js +74 -0
- package/components/LiveElementRenderer.js.map +1 -0
- package/components/LiveElementSlot.d.ts +21 -0
- package/components/LiveElementSlot.js +36 -0
- package/components/LiveElementSlot.js.map +1 -0
- package/components/PreviewElementSlot.d.ts +38 -0
- package/components/PreviewElementSlot.js +45 -0
- package/components/PreviewElementSlot.js.map +1 -0
- package/{src/components/index.ts → components/index.d.ts} +2 -11
- package/components/index.js +8 -0
- package/composables/useBindingsForElement.d.ts +825 -0
- package/composables/useBindingsForElement.js +24 -0
- package/composables/useBindingsForElement.js.map +1 -0
- package/composables/useDocumentState.d.ts +5 -0
- package/composables/useDocumentState.js +11 -0
- package/composables/useDocumentState.js.map +1 -0
- package/composables/useObservable.d.ts +13 -0
- package/composables/useObservable.js +14 -0
- package/composables/useObservable.js.map +1 -0
- package/{src/composables/useSelectFromState.ts → composables/useSelectFromState.d.ts} +2 -10
- package/composables/useSelectFromState.js +9 -0
- package/composables/useSelectFromState.js.map +1 -0
- package/composables/useViewport.d.ts +7 -0
- package/composables/useViewport.js +18 -0
- package/composables/useViewport.js.map +1 -0
- package/createComponent.d.ts +21 -0
- package/createComponent.js +31 -0
- package/createComponent.js.map +1 -0
- package/editorComponents/Box.d.ts +7 -0
- package/editorComponents/Box.js +4 -0
- package/editorComponents/Box.js.map +1 -0
- package/editorComponents/Box.manifest.d.ts +1 -0
- package/{src/editorComponents/Box.manifest.ts → editorComponents/Box.manifest.js} +6 -4
- package/editorComponents/Box.manifest.js.map +1 -0
- package/editorComponents/Fragment.d.ts +13 -0
- package/editorComponents/Fragment.js +39 -0
- package/editorComponents/Fragment.js.map +1 -0
- package/editorComponents/Fragment.manifest.d.ts +1 -0
- package/{src/editorComponents/Fragment.manifest.ts → editorComponents/Fragment.manifest.js} +6 -4
- package/editorComponents/Fragment.manifest.js.map +1 -0
- package/editorComponents/Grid.d.ts +24 -0
- package/editorComponents/Grid.js +33 -0
- package/editorComponents/Grid.js.map +1 -0
- package/editorComponents/Grid.manifest.d.ts +1 -0
- package/{src/editorComponents/Grid.manifest.ts → editorComponents/Grid.manifest.js} +58 -55
- package/editorComponents/Grid.manifest.js.map +1 -0
- package/editorComponents/GridColumn.d.ts +5 -0
- package/editorComponents/GridColumn.js +4 -0
- package/editorComponents/GridColumn.js.map +1 -0
- package/editorComponents/GridColumn.manifest.d.ts +1 -0
- package/{src/editorComponents/GridColumn.manifest.ts → editorComponents/GridColumn.manifest.js} +9 -5
- package/editorComponents/GridColumn.manifest.js.map +1 -0
- package/editorComponents/Image.d.ts +37 -0
- package/editorComponents/Image.js +115 -0
- package/editorComponents/Image.js.map +1 -0
- package/editorComponents/Image.manifest.d.ts +1 -0
- package/{src/editorComponents/Image.manifest.ts → editorComponents/Image.manifest.js} +17 -12
- package/editorComponents/Image.manifest.js.map +1 -0
- package/editorComponents/Lexical.d.ts +18 -0
- package/editorComponents/Lexical.js +15 -0
- package/editorComponents/Lexical.js.map +1 -0
- package/editorComponents/Lexical.manifest.d.ts +1 -0
- package/editorComponents/Lexical.manifest.js +24 -0
- package/editorComponents/Lexical.manifest.js.map +1 -0
- package/editorComponents/Root.d.ts +7 -0
- package/editorComponents/Root.js +4 -0
- package/editorComponents/Root.js.map +1 -0
- package/editorComponents/Root.manifest.d.ts +1 -0
- package/editorComponents/Root.manifest.js +13 -0
- package/editorComponents/Root.manifest.js.map +1 -0
- package/{src/editorComponents/index.ts → editorComponents/index.d.ts} +1 -3
- package/editorComponents/index.js +20 -0
- package/editorComponents/index.js.map +1 -0
- package/index.d.ts +10 -0
- package/index.js +9 -4
- package/package.json +10 -8
- package/{src/types.ts → types.d.ts} +11 -32
- package/types.js +0 -0
- package/src/components/ConnectToEditor.ts +0 -46
- package/src/components/DocumentFragment.ts +0 -43
- package/src/components/DocumentRenderer.ts +0 -102
- package/src/components/DocumentStoreProvider.ts +0 -53
- package/src/components/EditingElementRenderer/EditingElementRenderer.presenter.ts +0 -59
- package/src/components/EditingElementRenderer/EditingElementRenderer.ts +0 -70
- package/src/components/ElementIndexProvider.ts +0 -24
- package/src/components/ElementRenderer.ts +0 -42
- package/src/components/ElementSlot.ts +0 -34
- package/src/components/ElementSlotDepthProvider.ts +0 -24
- package/src/components/FragmentsProvider.ts +0 -87
- package/src/components/LiveElementRenderer.ts +0 -102
- package/src/components/LiveElementSlot.ts +0 -46
- package/src/components/PreviewElementSlot.ts +0 -43
- package/src/composables/useBindingsForElement.ts +0 -40
- package/src/composables/useDocumentState.ts +0 -13
- package/src/composables/useObservable.ts +0 -30
- package/src/composables/useViewport.ts +0 -27
- package/src/createComponent.ts +0 -55
- package/src/editorComponents/Box.ts +0 -8
- package/src/editorComponents/Fragment.ts +0 -57
- package/src/editorComponents/Grid.ts +0 -72
- package/src/editorComponents/GridColumn.ts +0 -6
- package/src/editorComponents/Image.ts +0 -144
- package/src/editorComponents/Lexical.manifest.ts +0 -24
- package/src/editorComponents/Lexical.ts +0 -23
- package/src/editorComponents/Root.manifest.ts +0 -10
- package/src/editorComponents/Root.ts +0 -8
- package/src/index.ts +0 -52
- package/tsconfig.build.json +0 -16
- package/tsconfig.json +0 -16
- package/webiny.config.js +0 -8
- /package/{src/components/EditingElementRenderer/index.ts → components/EditingElementRenderer/index.d.ts} +0 -0
- /package/{src/lexical.css → lexical.css} +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entry point for rendering a single document element by ID.
|
|
3
|
+
*
|
|
4
|
+
* - Retrieves the live element from the MobX DocumentStore (reactive via useObservable).
|
|
5
|
+
* - Dispatches to EditingElementRenderer (editor mode) or LiveElementRenderer (live mode).
|
|
6
|
+
*/
|
|
7
|
+
export declare const ElementRenderer: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
8
|
+
id: {
|
|
9
|
+
type: StringConstructor;
|
|
10
|
+
required: true;
|
|
11
|
+
};
|
|
12
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
}> | null, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
15
|
+
id: {
|
|
16
|
+
type: StringConstructor;
|
|
17
|
+
required: true;
|
|
18
|
+
};
|
|
19
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { defineComponent, h } from "vue";
|
|
2
|
+
import { environment } from "@webiny/website-builder-sdk";
|
|
3
|
+
import { EditingElementRenderer } from "./EditingElementRenderer/index.js";
|
|
4
|
+
import { LiveElementRenderer } from "./LiveElementRenderer.js";
|
|
5
|
+
import { useDocumentStore } from "./DocumentStoreProvider.js";
|
|
6
|
+
import { useObservable } from "../composables/useObservable.js";
|
|
7
|
+
import { setElementRenderer } from "./LiveElementSlot.js";
|
|
8
|
+
const ElementRenderer = defineComponent({
|
|
9
|
+
name: "WebinyElementRenderer",
|
|
10
|
+
props: {
|
|
11
|
+
id: {
|
|
12
|
+
type: String,
|
|
13
|
+
required: true
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
setup (props) {
|
|
17
|
+
const documentStore = useDocumentStore();
|
|
18
|
+
const element = useObservable(()=>documentStore.getElement(props.id));
|
|
19
|
+
return ()=>{
|
|
20
|
+
if (!element.value) return null;
|
|
21
|
+
if (environment.isEditing()) return h(EditingElementRenderer, {
|
|
22
|
+
element: element.value
|
|
23
|
+
});
|
|
24
|
+
return h(LiveElementRenderer, {
|
|
25
|
+
element: element.value
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
setElementRenderer(ElementRenderer);
|
|
31
|
+
export { ElementRenderer };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=ElementRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components/ElementRenderer.js","sources":["../../src/components/ElementRenderer.ts"],"sourcesContent":["import { defineComponent, h } from \"vue\";\nimport { environment } from \"@webiny/website-builder-sdk\";\nimport { EditingElementRenderer } from \"./EditingElementRenderer/index.js\";\nimport { LiveElementRenderer } from \"./LiveElementRenderer.js\";\nimport { useDocumentStore } from \"./DocumentStoreProvider.js\";\nimport { useObservable } from \"~/composables/useObservable.js\";\nimport { setElementRenderer } from \"./LiveElementSlot.js\";\n\n/**\n * Entry point for rendering a single document element by ID.\n *\n * - Retrieves the live element from the MobX DocumentStore (reactive via useObservable).\n * - Dispatches to EditingElementRenderer (editor mode) or LiveElementRenderer (live mode).\n */\nexport const ElementRenderer = defineComponent({\n name: \"WebinyElementRenderer\",\n\n props: {\n id: { type: String, required: true }\n },\n\n setup(props) {\n const documentStore = useDocumentStore();\n\n // Reactively track the element in the MobX store.\n const element = useObservable(() => documentStore.getElement(props.id));\n\n return () => {\n if (!element.value) {\n return null;\n }\n\n if (environment.isEditing()) {\n return h(EditingElementRenderer, { element: element.value });\n }\n return h(LiveElementRenderer, { element: element.value });\n };\n }\n});\n\n// Break the circular dependency: LiveElementSlot needs ElementRenderer.\nsetElementRenderer(ElementRenderer);\n"],"names":["ElementRenderer","defineComponent","String","props","documentStore","useDocumentStore","element","useObservable","environment","h","EditingElementRenderer","LiveElementRenderer","setElementRenderer"],"mappings":";;;;;;;AAcO,MAAMA,kBAAkBC,gBAAgB;IAC3C,MAAM;IAEN,OAAO;QACH,IAAI;YAAE,MAAMC;YAAQ,UAAU;QAAK;IACvC;IAEA,OAAMC,KAAK;QACP,MAAMC,gBAAgBC;QAGtB,MAAMC,UAAUC,cAAc,IAAMH,cAAc,UAAU,CAACD,MAAM,EAAE;QAErE,OAAO;YACH,IAAI,CAACG,QAAQ,KAAK,EACd,OAAO;YAGX,IAAIE,YAAY,SAAS,IACrB,OAAOC,EAAEC,wBAAwB;gBAAE,SAASJ,QAAQ,KAAK;YAAC;YAE9D,OAAOG,EAAEE,qBAAqB;gBAAE,SAASL,QAAQ,KAAK;YAAC;QAC3D;IACJ;AACJ;AAGAM,mBAAmBZ"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type PropType } from "vue";
|
|
2
|
+
/**
|
|
3
|
+
* Dispatches to PreviewElementSlot (editing mode) or LiveElementSlot (live
|
|
4
|
+
* mode) based on the current environment.
|
|
5
|
+
*
|
|
6
|
+
* Used by LiveElementRenderer when resolving slot inputs so that child elements
|
|
7
|
+
* are rendered recursively via ElementRenderer.
|
|
8
|
+
*/
|
|
9
|
+
export declare const ElementSlot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
10
|
+
parentId: {
|
|
11
|
+
type: StringConstructor;
|
|
12
|
+
required: true;
|
|
13
|
+
};
|
|
14
|
+
slot: {
|
|
15
|
+
type: StringConstructor;
|
|
16
|
+
required: true;
|
|
17
|
+
};
|
|
18
|
+
elements: {
|
|
19
|
+
type: PropType<string[]>;
|
|
20
|
+
default: () => never[];
|
|
21
|
+
};
|
|
22
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
25
|
+
parentId: {
|
|
26
|
+
type: StringConstructor;
|
|
27
|
+
required: true;
|
|
28
|
+
};
|
|
29
|
+
slot: {
|
|
30
|
+
type: StringConstructor;
|
|
31
|
+
required: true;
|
|
32
|
+
};
|
|
33
|
+
elements: {
|
|
34
|
+
type: PropType<string[]>;
|
|
35
|
+
default: () => never[];
|
|
36
|
+
};
|
|
37
|
+
}>> & Readonly<{}>, {
|
|
38
|
+
elements: string[];
|
|
39
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { defineComponent, h } from "vue";
|
|
2
|
+
import { environment } from "@webiny/website-builder-sdk";
|
|
3
|
+
import { LiveElementSlot } from "./LiveElementSlot.js";
|
|
4
|
+
import { PreviewElementSlot } from "./PreviewElementSlot.js";
|
|
5
|
+
const ElementSlot = defineComponent({
|
|
6
|
+
name: "WebinyElementSlot",
|
|
7
|
+
props: {
|
|
8
|
+
parentId: {
|
|
9
|
+
type: String,
|
|
10
|
+
required: true
|
|
11
|
+
},
|
|
12
|
+
slot: {
|
|
13
|
+
type: String,
|
|
14
|
+
required: true
|
|
15
|
+
},
|
|
16
|
+
elements: {
|
|
17
|
+
type: Array,
|
|
18
|
+
default: ()=>[]
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
setup (props) {
|
|
22
|
+
return ()=>{
|
|
23
|
+
if (environment.isEditing()) return h(PreviewElementSlot, {
|
|
24
|
+
parentId: props.parentId,
|
|
25
|
+
slot: props.slot,
|
|
26
|
+
elements: props.elements
|
|
27
|
+
});
|
|
28
|
+
return h(LiveElementSlot, {
|
|
29
|
+
elements: props.elements
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
export { ElementSlot };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=ElementSlot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components/ElementSlot.js","sources":["../../src/components/ElementSlot.ts"],"sourcesContent":["import { defineComponent, h, type PropType } from \"vue\";\nimport { environment } from \"@webiny/website-builder-sdk\";\nimport { LiveElementSlot } from \"./LiveElementSlot.js\";\nimport { PreviewElementSlot } from \"./PreviewElementSlot.js\";\n\n/**\n * Dispatches to PreviewElementSlot (editing mode) or LiveElementSlot (live\n * mode) based on the current environment.\n *\n * Used by LiveElementRenderer when resolving slot inputs so that child elements\n * are rendered recursively via ElementRenderer.\n */\nexport const ElementSlot = defineComponent({\n name: \"WebinyElementSlot\",\n\n props: {\n parentId: { type: String, required: true },\n slot: { type: String, required: true },\n elements: { type: Array as PropType<string[]>, default: () => [] }\n },\n\n setup(props) {\n return () => {\n if (environment.isEditing()) {\n return h(PreviewElementSlot, {\n parentId: props.parentId,\n slot: props.slot,\n elements: props.elements\n });\n }\n return h(LiveElementSlot, { elements: props.elements });\n };\n }\n});\n"],"names":["ElementSlot","defineComponent","String","Array","props","environment","h","PreviewElementSlot","LiveElementSlot"],"mappings":";;;;AAYO,MAAMA,cAAcC,gBAAgB;IACvC,MAAM;IAEN,OAAO;QACH,UAAU;YAAE,MAAMC;YAAQ,UAAU;QAAK;QACzC,MAAM;YAAE,MAAMA;YAAQ,UAAU;QAAK;QACrC,UAAU;YAAE,MAAMC;YAA6B,SAAS,IAAM,EAAE;QAAC;IACrE;IAEA,OAAMC,KAAK;QACP,OAAO;YACH,IAAIC,YAAY,SAAS,IACrB,OAAOC,EAAEC,oBAAoB;gBACzB,UAAUH,MAAM,QAAQ;gBACxB,MAAMA,MAAM,IAAI;gBAChB,UAAUA,MAAM,QAAQ;YAC5B;YAEJ,OAAOE,EAAEE,iBAAiB;gBAAE,UAAUJ,MAAM,QAAQ;YAAC;QACzD;IACJ;AACJ"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type PropType } from "vue";
|
|
2
|
+
/**
|
|
3
|
+
* Provides the current element-slot nesting depth to all descendants.
|
|
4
|
+
*/
|
|
5
|
+
export declare const ElementSlotDepthProvider: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
6
|
+
depth: {
|
|
7
|
+
type: PropType<number>;
|
|
8
|
+
required: true;
|
|
9
|
+
};
|
|
10
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
}>[] | undefined, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
13
|
+
depth: {
|
|
14
|
+
type: PropType<number>;
|
|
15
|
+
required: true;
|
|
16
|
+
};
|
|
17
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
18
|
+
/** Returns the current slot nesting depth (0 at the root). */
|
|
19
|
+
export declare const useElementSlotDepth: () => number;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineComponent, inject, provide } from "vue";
|
|
2
|
+
const DEPTH_KEY = Symbol("WebinyElementSlotDepth");
|
|
3
|
+
const ElementSlotDepthProvider = defineComponent({
|
|
4
|
+
name: "WebinyElementSlotDepthProvider",
|
|
5
|
+
props: {
|
|
6
|
+
depth: {
|
|
7
|
+
type: Number,
|
|
8
|
+
required: true
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
setup (props, { slots }) {
|
|
12
|
+
provide(DEPTH_KEY, props.depth);
|
|
13
|
+
return ()=>slots.default?.();
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
const useElementSlotDepth = ()=>inject(DEPTH_KEY, 0);
|
|
17
|
+
export { ElementSlotDepthProvider, useElementSlotDepth };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=ElementSlotDepthProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components/ElementSlotDepthProvider.js","sources":["../../src/components/ElementSlotDepthProvider.ts"],"sourcesContent":["import { defineComponent, provide, inject, type InjectionKey, type PropType } from \"vue\";\n\nconst DEPTH_KEY: InjectionKey<number> = Symbol(\"WebinyElementSlotDepth\");\n\n/**\n * Provides the current element-slot nesting depth to all descendants.\n */\nexport const ElementSlotDepthProvider = defineComponent({\n name: \"WebinyElementSlotDepthProvider\",\n\n props: {\n depth: { type: Number as PropType<number>, required: true }\n },\n\n setup(props, { slots }) {\n provide(DEPTH_KEY, props.depth);\n return () => slots.default?.();\n }\n});\n\n/** Returns the current slot nesting depth (0 at the root). */\nexport const useElementSlotDepth = (): number => {\n return inject(DEPTH_KEY, 0);\n};\n"],"names":["DEPTH_KEY","Symbol","ElementSlotDepthProvider","defineComponent","Number","props","slots","provide","useElementSlotDepth","inject"],"mappings":";AAEA,MAAMA,YAAkCC,OAAO;AAKxC,MAAMC,2BAA2BC,gBAAgB;IACpD,MAAM;IAEN,OAAO;QACH,OAAO;YAAE,MAAMC;YAA4B,UAAU;QAAK;IAC9D;IAEA,OAAMC,KAAK,EAAE,EAAEC,KAAK,EAAE;QAClBC,QAAQP,WAAWK,MAAM,KAAK;QAC9B,OAAO,IAAMC,MAAM,OAAO;IAC9B;AACJ;AAGO,MAAME,sBAAsB,IACxBC,OAAOT,WAAW"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type PropType, type Slot } from "vue";
|
|
2
|
+
/**
|
|
3
|
+
* A fragment that renders a pre-defined Vue subtree (fixed).
|
|
4
|
+
* `element` is a Vue slot function returned by useSlots() — e.g. the result
|
|
5
|
+
* of `<template #fragment:header>…</template>` in the consumer.
|
|
6
|
+
*/
|
|
7
|
+
type FixedFragment = {
|
|
8
|
+
type: "fixed";
|
|
9
|
+
name: string;
|
|
10
|
+
element: Slot;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* A fragment that inserts a named editor component with given inputs.
|
|
14
|
+
*/
|
|
15
|
+
type ComponentFragment = {
|
|
16
|
+
type: "component";
|
|
17
|
+
component: string;
|
|
18
|
+
inputs: Record<string, unknown>;
|
|
19
|
+
};
|
|
20
|
+
export type DocumentFragmentConfig = FixedFragment | ComponentFragment;
|
|
21
|
+
export type DocumentFragments = DocumentFragmentConfig[];
|
|
22
|
+
/**
|
|
23
|
+
* Provides the fragments array to all descendants and notifies the editing
|
|
24
|
+
* SDK whenever the fragment list changes.
|
|
25
|
+
*/
|
|
26
|
+
export declare const FragmentsProvider: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
27
|
+
fragments: {
|
|
28
|
+
type: PropType<DocumentFragments>;
|
|
29
|
+
default: () => never[];
|
|
30
|
+
};
|
|
31
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
32
|
+
[key: string]: any;
|
|
33
|
+
}>[] | undefined, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
34
|
+
fragments: {
|
|
35
|
+
type: PropType<DocumentFragments>;
|
|
36
|
+
default: () => never[];
|
|
37
|
+
};
|
|
38
|
+
}>> & Readonly<{}>, {
|
|
39
|
+
fragments: DocumentFragments;
|
|
40
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
41
|
+
/**
|
|
42
|
+
* Composable – returns the current DocumentFragments array.
|
|
43
|
+
* Returns an empty array when called outside a FragmentsProvider.
|
|
44
|
+
*/
|
|
45
|
+
export declare const useDocumentFragments: () => DocumentFragments;
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { defineComponent, inject, provide, watch } from "vue";
|
|
2
|
+
import { contentSdk } from "@webiny/website-builder-sdk";
|
|
3
|
+
const FRAGMENTS_KEY = Symbol("WebinyDocumentFragments");
|
|
4
|
+
const FragmentsProvider = defineComponent({
|
|
5
|
+
name: "WebinyFragmentsProvider",
|
|
6
|
+
props: {
|
|
7
|
+
fragments: {
|
|
8
|
+
type: Array,
|
|
9
|
+
default: ()=>[]
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
setup (props, { slots }) {
|
|
13
|
+
watch(()=>props.fragments.length, ()=>{
|
|
14
|
+
if (!contentSdk.isEditing()) return;
|
|
15
|
+
const data = props.fragments.map((f)=>{
|
|
16
|
+
if ("fixed" === f.type) return {
|
|
17
|
+
type: "fixed",
|
|
18
|
+
name: f.name
|
|
19
|
+
};
|
|
20
|
+
return {
|
|
21
|
+
type: "component",
|
|
22
|
+
component: f.component,
|
|
23
|
+
inputs: f.inputs
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
contentSdk.getEditingSdk()?.messenger.send("document.fragments", {
|
|
27
|
+
fragments: data
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
provide(FRAGMENTS_KEY, ()=>props.fragments);
|
|
31
|
+
return ()=>slots.default?.();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
const useDocumentFragments = ()=>{
|
|
35
|
+
const get = inject(FRAGMENTS_KEY, ()=>[]);
|
|
36
|
+
return get();
|
|
37
|
+
};
|
|
38
|
+
export { FragmentsProvider, useDocumentFragments };
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=FragmentsProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components/FragmentsProvider.js","sources":["../../src/components/FragmentsProvider.ts"],"sourcesContent":["import {\n defineComponent,\n provide,\n inject,\n watch,\n type InjectionKey,\n type PropType,\n type Slot\n} from \"vue\";\nimport { contentSdk } from \"@webiny/website-builder-sdk\";\n\n/**\n * A fragment that renders a pre-defined Vue subtree (fixed).\n * `element` is a Vue slot function returned by useSlots() — e.g. the result\n * of `<template #fragment:header>…</template>` in the consumer.\n */\ntype FixedFragment = {\n type: \"fixed\";\n name: string;\n element: Slot;\n};\n\n/**\n * A fragment that inserts a named editor component with given inputs.\n */\ntype ComponentFragment = {\n type: \"component\";\n component: string;\n inputs: Record<string, unknown>;\n};\n\nexport type DocumentFragmentConfig = FixedFragment | ComponentFragment;\nexport type DocumentFragments = DocumentFragmentConfig[];\n\nconst FRAGMENTS_KEY: InjectionKey<() => DocumentFragments> = Symbol(\"WebinyDocumentFragments\");\n\n/**\n * Provides the fragments array to all descendants and notifies the editing\n * SDK whenever the fragment list changes.\n */\nexport const FragmentsProvider = defineComponent({\n name: \"WebinyFragmentsProvider\",\n\n props: {\n fragments: {\n type: Array as PropType<DocumentFragments>,\n default: () => []\n }\n },\n\n setup(props, { slots }) {\n // Notify the editing SDK when fragments change.\n watch(\n () => props.fragments.length,\n () => {\n if (!contentSdk.isEditing()) {\n return;\n }\n\n const data = props.fragments.map(f => {\n if (f.type === \"fixed\") {\n return { type: \"fixed\", name: f.name };\n }\n return { type: \"component\", component: f.component, inputs: f.inputs };\n });\n\n contentSdk.getEditingSdk()?.messenger.send(\"document.fragments\", {\n fragments: data\n });\n }\n );\n\n // Provide as a getter so consumers always receive the latest array.\n provide(FRAGMENTS_KEY, () => props.fragments);\n\n return () => slots.default?.();\n }\n});\n\n/**\n * Composable – returns the current DocumentFragments array.\n * Returns an empty array when called outside a FragmentsProvider.\n */\nexport const useDocumentFragments = (): DocumentFragments => {\n const get = inject(FRAGMENTS_KEY, () => [] as DocumentFragments);\n return get();\n};\n"],"names":["FRAGMENTS_KEY","Symbol","FragmentsProvider","defineComponent","Array","props","slots","watch","contentSdk","data","f","provide","useDocumentFragments","get","inject"],"mappings":";;AAkCA,MAAMA,gBAAuDC,OAAO;AAM7D,MAAMC,oBAAoBC,gBAAgB;IAC7C,MAAM;IAEN,OAAO;QACH,WAAW;YACP,MAAMC;YACN,SAAS,IAAM,EAAE;QACrB;IACJ;IAEA,OAAMC,KAAK,EAAE,EAAEC,KAAK,EAAE;QAElBC,MACI,IAAMF,MAAM,SAAS,CAAC,MAAM,EAC5B;YACI,IAAI,CAACG,WAAW,SAAS,IACrB;YAGJ,MAAMC,OAAOJ,MAAM,SAAS,CAAC,GAAG,CAACK,CAAAA;gBAC7B,IAAIA,AAAW,YAAXA,EAAE,IAAI,EACN,OAAO;oBAAE,MAAM;oBAAS,MAAMA,EAAE,IAAI;gBAAC;gBAEzC,OAAO;oBAAE,MAAM;oBAAa,WAAWA,EAAE,SAAS;oBAAE,QAAQA,EAAE,MAAM;gBAAC;YACzE;YAEAF,WAAW,aAAa,IAAI,UAAU,KAAK,sBAAsB;gBAC7D,WAAWC;YACf;QACJ;QAIJE,QAAQX,eAAe,IAAMK,MAAM,SAAS;QAE5C,OAAO,IAAMC,MAAM,OAAO;IAC9B;AACJ;AAMO,MAAMM,uBAAuB;IAChC,MAAMC,MAAMC,OAAOd,eAAe,IAAM,EAAE;IAC1C,OAAOa;AACX"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type PropType } from "vue";
|
|
2
|
+
import { type DocumentElement } from "@webiny/website-builder-sdk";
|
|
3
|
+
/**
|
|
4
|
+
* Resolves a single document element into its rendered Vue subtree.
|
|
5
|
+
*
|
|
6
|
+
* Steps:
|
|
7
|
+
* 1. Determines the current breakpoint (starts at "desktop" for SSR safety).
|
|
8
|
+
* 2. Fetches merged bindings for the element at that breakpoint.
|
|
9
|
+
* 3. Calls contentSdk.resolveElement() to get the list of component instances.
|
|
10
|
+
* 4. Renders each instance, optionally wrapping it in a style div.
|
|
11
|
+
*/
|
|
12
|
+
export declare const LiveElementRenderer: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
13
|
+
element: {
|
|
14
|
+
type: PropType<DocumentElement>;
|
|
15
|
+
required: true;
|
|
16
|
+
};
|
|
17
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
18
|
+
[key: string]: any;
|
|
19
|
+
}> | null, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
20
|
+
element: {
|
|
21
|
+
type: PropType<DocumentElement>;
|
|
22
|
+
required: true;
|
|
23
|
+
};
|
|
24
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Fragment, computed, defineComponent, h, onMounted, ref, watch } from "vue";
|
|
2
|
+
import { contentSdk } from "@webiny/website-builder-sdk";
|
|
3
|
+
import { ElementSlot } from "./ElementSlot.js";
|
|
4
|
+
import { useViewport } from "../composables/useViewport.js";
|
|
5
|
+
import { useBindingsForElement } from "../composables/useBindingsForElement.js";
|
|
6
|
+
import { useDocumentState } from "../composables/useDocumentState.js";
|
|
7
|
+
const LiveElementRenderer = defineComponent({
|
|
8
|
+
name: "WebinyLiveElementRenderer",
|
|
9
|
+
props: {
|
|
10
|
+
element: {
|
|
11
|
+
type: Object,
|
|
12
|
+
required: true
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
setup (props) {
|
|
16
|
+
const viewport = useViewport();
|
|
17
|
+
const breakpoint = ref("desktop");
|
|
18
|
+
onMounted(()=>{
|
|
19
|
+
if (viewport.value?.breakpoint) breakpoint.value = viewport.value.breakpoint;
|
|
20
|
+
});
|
|
21
|
+
watch(()=>viewport.value?.breakpoint, (newBp)=>{
|
|
22
|
+
if (newBp && newBp !== breakpoint.value) breakpoint.value = newBp;
|
|
23
|
+
});
|
|
24
|
+
const elementId = computed(()=>props.element?.id ?? "");
|
|
25
|
+
const elementBindings = useBindingsForElement(elementId.value, breakpoint);
|
|
26
|
+
const state = useDocumentState();
|
|
27
|
+
return ()=>{
|
|
28
|
+
const { element } = props;
|
|
29
|
+
if (!element?.component) return null;
|
|
30
|
+
const onResolved = (value, input)=>{
|
|
31
|
+
if ("slot" === input.type) {
|
|
32
|
+
const elements = input.list ? value : [
|
|
33
|
+
value
|
|
34
|
+
];
|
|
35
|
+
return h(ElementSlot, {
|
|
36
|
+
parentId: element.id,
|
|
37
|
+
slot: input.name,
|
|
38
|
+
elements
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
};
|
|
43
|
+
const instances = contentSdk.resolveElement({
|
|
44
|
+
element,
|
|
45
|
+
state: state.value,
|
|
46
|
+
elementBindings: elementBindings.value,
|
|
47
|
+
onResolved
|
|
48
|
+
});
|
|
49
|
+
if (!instances) return null;
|
|
50
|
+
const vnodes = instances.map((resolved, index)=>{
|
|
51
|
+
const { component: Component, inputs, styles, manifest } = resolved;
|
|
52
|
+
const autoApplyStyles = false !== manifest.autoApplyStyles;
|
|
53
|
+
const userVNode = h(Component, {
|
|
54
|
+
key: `${element.id}-${index}`,
|
|
55
|
+
inputs,
|
|
56
|
+
styles,
|
|
57
|
+
element,
|
|
58
|
+
breakpoint: breakpoint.value
|
|
59
|
+
});
|
|
60
|
+
if (!autoApplyStyles) return userVNode;
|
|
61
|
+
return h("div", {
|
|
62
|
+
key: `wrapper-${index}`,
|
|
63
|
+
style: styles
|
|
64
|
+
}, [
|
|
65
|
+
userVNode
|
|
66
|
+
]);
|
|
67
|
+
});
|
|
68
|
+
return h(Fragment, null, vnodes);
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
export { LiveElementRenderer };
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=LiveElementRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components/LiveElementRenderer.js","sources":["../../src/components/LiveElementRenderer.ts"],"sourcesContent":["import { defineComponent, ref, computed, watch, onMounted, h, Fragment, type PropType } from \"vue\";\nimport { contentSdk, type DocumentElement, type ComponentInput } from \"@webiny/website-builder-sdk\";\nimport { ElementSlot } from \"./ElementSlot.js\";\nimport { useViewport } from \"~/composables/useViewport.js\";\nimport { useBindingsForElement } from \"~/composables/useBindingsForElement.js\";\nimport { useDocumentState } from \"~/composables/useDocumentState.js\";\n\n/**\n * Resolves a single document element into its rendered Vue subtree.\n *\n * Steps:\n * 1. Determines the current breakpoint (starts at \"desktop\" for SSR safety).\n * 2. Fetches merged bindings for the element at that breakpoint.\n * 3. Calls contentSdk.resolveElement() to get the list of component instances.\n * 4. Renders each instance, optionally wrapping it in a style div.\n */\nexport const LiveElementRenderer = defineComponent({\n name: \"WebinyLiveElementRenderer\",\n\n props: {\n element: { type: Object as PropType<DocumentElement>, required: true }\n },\n\n setup(props) {\n const viewport = useViewport();\n\n // Start with \"desktop\" on both server and initial client render (SSR-safe).\n const breakpoint = ref<string>(\"desktop\");\n\n onMounted(() => {\n if (viewport.value?.breakpoint) {\n breakpoint.value = viewport.value.breakpoint;\n }\n });\n\n watch(\n () => viewport.value?.breakpoint,\n newBp => {\n if (newBp && newBp !== breakpoint.value) {\n breakpoint.value = newBp;\n }\n }\n );\n\n const elementId = computed(() => props.element?.id ?? \"\");\n const elementBindings = useBindingsForElement(elementId.value, breakpoint);\n const state = useDocumentState();\n\n return () => {\n const { element } = props;\n if (!element?.component) {\n return null;\n }\n\n const onResolved = (value: unknown, input: ComponentInput) => {\n if (input.type === \"slot\") {\n const elements = (input as { list?: boolean }).list\n ? (value as string[])\n : [value as string];\n return h(ElementSlot, {\n parentId: element.id,\n slot: input.name,\n elements\n });\n }\n return value;\n };\n\n const instances = contentSdk.resolveElement({\n element,\n state: state.value,\n elementBindings: elementBindings.value,\n onResolved\n });\n\n if (!instances) {\n return null;\n }\n\n const vnodes = instances.map((resolved, index) => {\n const { component: Component, inputs, styles, manifest } = resolved;\n const autoApplyStyles = manifest.autoApplyStyles !== false;\n\n const userVNode = h(Component, {\n key: `${element.id}-${index}`,\n inputs,\n styles,\n element,\n breakpoint: breakpoint.value\n });\n\n if (!autoApplyStyles) {\n return userVNode;\n }\n\n return h(\"div\", { key: `wrapper-${index}`, style: styles }, [userVNode]);\n });\n\n return h(Fragment, null, vnodes);\n };\n }\n});\n"],"names":["LiveElementRenderer","defineComponent","Object","props","viewport","useViewport","breakpoint","ref","onMounted","watch","newBp","elementId","computed","elementBindings","useBindingsForElement","state","useDocumentState","element","onResolved","value","input","elements","h","ElementSlot","instances","contentSdk","vnodes","resolved","index","Component","inputs","styles","manifest","autoApplyStyles","userVNode","Fragment"],"mappings":";;;;;;AAgBO,MAAMA,sBAAsBC,gBAAgB;IAC/C,MAAM;IAEN,OAAO;QACH,SAAS;YAAE,MAAMC;YAAqC,UAAU;QAAK;IACzE;IAEA,OAAMC,KAAK;QACP,MAAMC,WAAWC;QAGjB,MAAMC,aAAaC,IAAY;QAE/BC,UAAU;YACN,IAAIJ,SAAS,KAAK,EAAE,YAChBE,WAAW,KAAK,GAAGF,SAAS,KAAK,CAAC,UAAU;QAEpD;QAEAK,MACI,IAAML,SAAS,KAAK,EAAE,YACtBM,CAAAA;YACI,IAAIA,SAASA,UAAUJ,WAAW,KAAK,EACnCA,WAAW,KAAK,GAAGI;QAE3B;QAGJ,MAAMC,YAAYC,SAAS,IAAMT,MAAM,OAAO,EAAE,MAAM;QACtD,MAAMU,kBAAkBC,sBAAsBH,UAAU,KAAK,EAAEL;QAC/D,MAAMS,QAAQC;QAEd,OAAO;YACH,MAAM,EAAEC,OAAO,EAAE,GAAGd;YACpB,IAAI,CAACc,SAAS,WACV,OAAO;YAGX,MAAMC,aAAa,CAACC,OAAgBC;gBAChC,IAAIA,AAAe,WAAfA,MAAM,IAAI,EAAa;oBACvB,MAAMC,WAAYD,MAA6B,IAAI,GAC5CD,QACD;wBAACA;qBAAgB;oBACvB,OAAOG,EAAEC,aAAa;wBAClB,UAAUN,QAAQ,EAAE;wBACpB,MAAMG,MAAM,IAAI;wBAChBC;oBACJ;gBACJ;gBACA,OAAOF;YACX;YAEA,MAAMK,YAAYC,WAAW,cAAc,CAAC;gBACxCR;gBACA,OAAOF,MAAM,KAAK;gBAClB,iBAAiBF,gBAAgB,KAAK;gBACtCK;YACJ;YAEA,IAAI,CAACM,WACD,OAAO;YAGX,MAAME,SAASF,UAAU,GAAG,CAAC,CAACG,UAAUC;gBACpC,MAAM,EAAE,WAAWC,SAAS,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGL;gBAC3D,MAAMM,kBAAkBD,AAA6B,UAA7BA,SAAS,eAAe;gBAEhD,MAAME,YAAYZ,EAAEO,WAAW;oBAC3B,KAAK,GAAGZ,QAAQ,EAAE,CAAC,CAAC,EAAEW,OAAO;oBAC7BE;oBACAC;oBACAd;oBACA,YAAYX,WAAW,KAAK;gBAChC;gBAEA,IAAI,CAAC2B,iBACD,OAAOC;gBAGX,OAAOZ,EAAE,OAAO;oBAAE,KAAK,CAAC,QAAQ,EAAEM,OAAO;oBAAE,OAAOG;gBAAO,GAAG;oBAACG;iBAAU;YAC3E;YAEA,OAAOZ,EAAEa,UAAU,MAAMT;QAC7B;IACJ;AACJ"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type PropType } from "vue";
|
|
2
|
+
export declare const setElementRenderer: (c: unknown) => void;
|
|
3
|
+
/**
|
|
4
|
+
* Renders a flat list of element IDs as sibling ElementRenderer instances,
|
|
5
|
+
* each wrapped in an index-provider and nested inside an incremented depth.
|
|
6
|
+
*/
|
|
7
|
+
export declare const LiveElementSlot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
8
|
+
elements: {
|
|
9
|
+
type: PropType<string[]>;
|
|
10
|
+
default: () => never[];
|
|
11
|
+
};
|
|
12
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
15
|
+
elements: {
|
|
16
|
+
type: PropType<string[]>;
|
|
17
|
+
default: () => never[];
|
|
18
|
+
};
|
|
19
|
+
}>> & Readonly<{}>, {
|
|
20
|
+
elements: string[];
|
|
21
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { defineComponent, h } from "vue";
|
|
2
|
+
import { ElementSlotDepthProvider, useElementSlotDepth } from "./ElementSlotDepthProvider.js";
|
|
3
|
+
import { ElementIndexProvider } from "./ElementIndexProvider.js";
|
|
4
|
+
import { setLiveElementSlot } from "./PreviewElementSlot.js";
|
|
5
|
+
let ElementRenderer;
|
|
6
|
+
const setElementRenderer = (c)=>{
|
|
7
|
+
ElementRenderer = c;
|
|
8
|
+
};
|
|
9
|
+
const LiveElementSlot = defineComponent({
|
|
10
|
+
name: "WebinyLiveElementSlot",
|
|
11
|
+
props: {
|
|
12
|
+
elements: {
|
|
13
|
+
type: Array,
|
|
14
|
+
default: ()=>[]
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
setup (props) {
|
|
18
|
+
const depth = useElementSlotDepth();
|
|
19
|
+
return ()=>h(ElementSlotDepthProvider, {
|
|
20
|
+
depth: depth + 1
|
|
21
|
+
}, {
|
|
22
|
+
default: ()=>props.elements.map((id, index)=>h(ElementIndexProvider, {
|
|
23
|
+
key: id,
|
|
24
|
+
index
|
|
25
|
+
}, {
|
|
26
|
+
default: ()=>h(ElementRenderer, {
|
|
27
|
+
id
|
|
28
|
+
})
|
|
29
|
+
}))
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
setLiveElementSlot(LiveElementSlot);
|
|
34
|
+
export { LiveElementSlot, setElementRenderer };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=LiveElementSlot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components/LiveElementSlot.js","sources":["../../src/components/LiveElementSlot.ts"],"sourcesContent":["import { defineComponent, h, type PropType } from \"vue\";\nimport { ElementSlotDepthProvider, useElementSlotDepth } from \"./ElementSlotDepthProvider.js\";\nimport { ElementIndexProvider } from \"./ElementIndexProvider.js\";\nimport { setLiveElementSlot } from \"./PreviewElementSlot.js\";\n\n// Forward-declared to resolve the circular ElementRenderer ↔ LiveElementSlot cycle.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet ElementRenderer: any;\nexport const setElementRenderer = (c: unknown) => {\n ElementRenderer = c;\n};\n\n/**\n * Renders a flat list of element IDs as sibling ElementRenderer instances,\n * each wrapped in an index-provider and nested inside an incremented depth.\n */\nexport const LiveElementSlot = defineComponent({\n name: \"WebinyLiveElementSlot\",\n\n props: {\n elements: { type: Array as PropType<string[]>, default: () => [] }\n },\n\n setup(props) {\n const depth = useElementSlotDepth();\n\n return () =>\n h(\n ElementSlotDepthProvider,\n { depth: depth + 1 },\n {\n default: () =>\n props.elements.map((id, index) =>\n h(\n ElementIndexProvider,\n { key: id, index },\n { default: () => h(ElementRenderer, { id }) }\n )\n )\n }\n );\n }\n});\n\n// Break the circular dependency: PreviewElementSlot needs LiveElementSlot.\nsetLiveElementSlot(LiveElementSlot);\n"],"names":["ElementRenderer","setElementRenderer","c","LiveElementSlot","defineComponent","Array","props","depth","useElementSlotDepth","h","ElementSlotDepthProvider","id","index","ElementIndexProvider","setLiveElementSlot"],"mappings":";;;;AAOA,IAAIA;AACG,MAAMC,qBAAqB,CAACC;IAC/BF,kBAAkBE;AACtB;AAMO,MAAMC,kBAAkBC,gBAAgB;IAC3C,MAAM;IAEN,OAAO;QACH,UAAU;YAAE,MAAMC;YAA6B,SAAS,IAAM,EAAE;QAAC;IACrE;IAEA,OAAMC,KAAK;QACP,MAAMC,QAAQC;QAEd,OAAO,IACHC,EACIC,0BACA;gBAAE,OAAOH,QAAQ;YAAE,GACnB;gBACI,SAAS,IACLD,MAAM,QAAQ,CAAC,GAAG,CAAC,CAACK,IAAIC,QACpBH,EACII,sBACA;4BAAE,KAAKF;4BAAIC;wBAAM,GACjB;4BAAE,SAAS,IAAMH,EAAET,iBAAiB;oCAAEW;gCAAG;wBAAG;YAG5D;IAEZ;AACJ;AAGAG,mBAAmBX"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type PropType } from "vue";
|
|
2
|
+
export declare const setLiveElementSlot: (c: unknown) => void;
|
|
3
|
+
/**
|
|
4
|
+
* In editing mode, renders an empty placeholder div when the slot has no
|
|
5
|
+
* children (so the editor can show a drop zone). Otherwise delegates to
|
|
6
|
+
* LiveElementSlot.
|
|
7
|
+
*/
|
|
8
|
+
export declare const PreviewElementSlot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
9
|
+
parentId: {
|
|
10
|
+
type: StringConstructor;
|
|
11
|
+
required: true;
|
|
12
|
+
};
|
|
13
|
+
slot: {
|
|
14
|
+
type: StringConstructor;
|
|
15
|
+
required: true;
|
|
16
|
+
};
|
|
17
|
+
elements: {
|
|
18
|
+
type: PropType<string[]>;
|
|
19
|
+
default: () => never[];
|
|
20
|
+
};
|
|
21
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
22
|
+
[key: string]: any;
|
|
23
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
24
|
+
parentId: {
|
|
25
|
+
type: StringConstructor;
|
|
26
|
+
required: true;
|
|
27
|
+
};
|
|
28
|
+
slot: {
|
|
29
|
+
type: StringConstructor;
|
|
30
|
+
required: true;
|
|
31
|
+
};
|
|
32
|
+
elements: {
|
|
33
|
+
type: PropType<string[]>;
|
|
34
|
+
default: () => never[];
|
|
35
|
+
};
|
|
36
|
+
}>> & Readonly<{}>, {
|
|
37
|
+
elements: string[];
|
|
38
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { defineComponent, h } from "vue";
|
|
2
|
+
import { useElementSlotDepth } from "./ElementSlotDepthProvider.js";
|
|
3
|
+
let LiveElementSlot;
|
|
4
|
+
const setLiveElementSlot = (c)=>{
|
|
5
|
+
LiveElementSlot = c;
|
|
6
|
+
};
|
|
7
|
+
const PreviewElementSlot = defineComponent({
|
|
8
|
+
name: "WebinyPreviewElementSlot",
|
|
9
|
+
props: {
|
|
10
|
+
parentId: {
|
|
11
|
+
type: String,
|
|
12
|
+
required: true
|
|
13
|
+
},
|
|
14
|
+
slot: {
|
|
15
|
+
type: String,
|
|
16
|
+
required: true
|
|
17
|
+
},
|
|
18
|
+
elements: {
|
|
19
|
+
type: Array,
|
|
20
|
+
default: ()=>[]
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
setup (props) {
|
|
24
|
+
const depth = useElementSlotDepth();
|
|
25
|
+
return ()=>{
|
|
26
|
+
if (!props.elements.length) return h("div", {
|
|
27
|
+
style: {
|
|
28
|
+
height: "100px",
|
|
29
|
+
width: "100% !important"
|
|
30
|
+
},
|
|
31
|
+
"data-role": "element-slot",
|
|
32
|
+
"data-parent-id": props.parentId,
|
|
33
|
+
"data-parent-slot": props.slot,
|
|
34
|
+
"data-depth": depth,
|
|
35
|
+
"data-empty": true
|
|
36
|
+
});
|
|
37
|
+
return h(LiveElementSlot, {
|
|
38
|
+
elements: props.elements
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
export { PreviewElementSlot, setLiveElementSlot };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=PreviewElementSlot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components/PreviewElementSlot.js","sources":["../../src/components/PreviewElementSlot.ts"],"sourcesContent":["import { defineComponent, h, type PropType } from \"vue\";\nimport { useElementSlotDepth } from \"./ElementSlotDepthProvider.js\";\n\n// Forward-declare to avoid circular dep at module init time.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet LiveElementSlot: any;\nexport const setLiveElementSlot = (c: unknown) => {\n LiveElementSlot = c;\n};\n\n/**\n * In editing mode, renders an empty placeholder div when the slot has no\n * children (so the editor can show a drop zone). Otherwise delegates to\n * LiveElementSlot.\n */\nexport const PreviewElementSlot = defineComponent({\n name: \"WebinyPreviewElementSlot\",\n\n props: {\n parentId: { type: String, required: true },\n slot: { type: String, required: true },\n elements: { type: Array as PropType<string[]>, default: () => [] }\n },\n\n setup(props) {\n const depth = useElementSlotDepth();\n\n return () => {\n if (!props.elements.length) {\n return h(\"div\", {\n style: { height: \"100px\", width: \"100% !important\" },\n \"data-role\": \"element-slot\",\n \"data-parent-id\": props.parentId,\n \"data-parent-slot\": props.slot,\n \"data-depth\": depth,\n \"data-empty\": true\n });\n }\n\n return h(LiveElementSlot, { elements: props.elements });\n };\n }\n});\n"],"names":["LiveElementSlot","setLiveElementSlot","c","PreviewElementSlot","defineComponent","String","Array","props","depth","useElementSlotDepth","h"],"mappings":";;AAKA,IAAIA;AACG,MAAMC,qBAAqB,CAACC;IAC/BF,kBAAkBE;AACtB;AAOO,MAAMC,qBAAqBC,gBAAgB;IAC9C,MAAM;IAEN,OAAO;QACH,UAAU;YAAE,MAAMC;YAAQ,UAAU;QAAK;QACzC,MAAM;YAAE,MAAMA;YAAQ,UAAU;QAAK;QACrC,UAAU;YAAE,MAAMC;YAA6B,SAAS,IAAM,EAAE;QAAC;IACrE;IAEA,OAAMC,KAAK;QACP,MAAMC,QAAQC;QAEd,OAAO;YACH,IAAI,CAACF,MAAM,QAAQ,CAAC,MAAM,EACtB,OAAOG,EAAE,OAAO;gBACZ,OAAO;oBAAE,QAAQ;oBAAS,OAAO;gBAAkB;gBACnD,aAAa;gBACb,kBAAkBH,MAAM,QAAQ;gBAChC,oBAAoBA,MAAM,IAAI;gBAC9B,cAAcC;gBACd,cAAc;YAClB;YAGJ,OAAOE,EAAEV,iBAAiB;gBAAE,UAAUO,MAAM,QAAQ;YAAC;QACzD;IACJ;AACJ"}
|
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
export { DocumentRenderer } from "./DocumentRenderer.js";
|
|
2
2
|
export { DocumentFragment, type DocumentFragmentProps } from "./DocumentFragment.js";
|
|
3
3
|
export { ElementSlot } from "./ElementSlot.js";
|
|
4
|
-
export {
|
|
5
|
-
|
|
6
|
-
useDocumentStore,
|
|
7
|
-
DOCUMENT_STORE_KEY
|
|
8
|
-
} from "./DocumentStoreProvider.js";
|
|
9
|
-
export {
|
|
10
|
-
FragmentsProvider,
|
|
11
|
-
useDocumentFragments,
|
|
12
|
-
type DocumentFragmentConfig,
|
|
13
|
-
type DocumentFragments
|
|
14
|
-
} from "./FragmentsProvider.js";
|
|
4
|
+
export { DocumentStoreProvider, useDocumentStore, DOCUMENT_STORE_KEY } from "./DocumentStoreProvider.js";
|
|
5
|
+
export { FragmentsProvider, useDocumentFragments, type DocumentFragmentConfig, type DocumentFragments } from "./FragmentsProvider.js";
|
|
15
6
|
export { ElementSlotDepthProvider, useElementSlotDepth } from "./ElementSlotDepthProvider.js";
|
|
16
7
|
export { ElementIndexProvider, useElementIndex } from "./ElementIndexProvider.js";
|
|
17
8
|
export { EditingElementRenderer } from "./EditingElementRenderer/index.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { DocumentRenderer } from "./DocumentRenderer.js";
|
|
2
|
+
export { DocumentFragment } from "./DocumentFragment.js";
|
|
3
|
+
export { ElementSlot } from "./ElementSlot.js";
|
|
4
|
+
export { DOCUMENT_STORE_KEY, DocumentStoreProvider, useDocumentStore } from "./DocumentStoreProvider.js";
|
|
5
|
+
export { FragmentsProvider, useDocumentFragments } from "./FragmentsProvider.js";
|
|
6
|
+
export { ElementSlotDepthProvider, useElementSlotDepth } from "./ElementSlotDepthProvider.js";
|
|
7
|
+
export { ElementIndexProvider, useElementIndex } from "./ElementIndexProvider.js";
|
|
8
|
+
export { EditingElementRenderer } from "./EditingElementRenderer/index.js";
|