@webiny/website-builder-react 6.3.0 → 6.4.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/ConnectToEditor.js +16 -18
- package/components/ConnectToEditor.js.map +1 -1
- package/components/DocumentFragment.js +5 -7
- package/components/DocumentFragment.js.map +1 -1
- package/components/DocumentRenderer.js +37 -46
- package/components/DocumentRenderer.js.map +1 -1
- package/components/DocumentStoreProvider.js +15 -21
- package/components/DocumentStoreProvider.js.map +1 -1
- package/components/EditingElementRenderer/EditingElementRenderer.js +31 -35
- package/components/EditingElementRenderer/EditingElementRenderer.js.map +1 -1
- package/components/EditingElementRenderer/EditingElementRenderer.presenter.js +29 -35
- package/components/EditingElementRenderer/EditingElementRenderer.presenter.js.map +1 -1
- package/components/EditingElementRenderer/index.js +0 -2
- package/components/ElementIndexProvider.js +9 -14
- package/components/ElementIndexProvider.js.map +1 -1
- package/components/ElementRenderer.js +11 -16
- package/components/ElementRenderer.js.map +1 -1
- package/components/ElementSlot.js +6 -9
- package/components/ElementSlot.js.map +1 -1
- package/components/ElementSlotDepthProvider.js +9 -14
- package/components/ElementSlotDepthProvider.js.map +1 -1
- package/components/FragmentsProvider.js +30 -36
- package/components/FragmentsProvider.js.map +1 -1
- package/components/LiveElementRenderer.js +53 -68
- package/components/LiveElementRenderer.js.map +1 -1
- package/components/LiveElementSlot.js +12 -14
- package/components/LiveElementSlot.js.map +1 -1
- package/components/PreviewElementSlot.js +17 -23
- package/components/PreviewElementSlot.js.map +1 -1
- package/components/index.js +0 -2
- package/components/useBindingsForElement.js +13 -11
- package/components/useBindingsForElement.js.map +1 -1
- package/components/useDocumentState.js +4 -3
- package/components/useDocumentState.js.map +1 -1
- package/components/useSelectFromState.js +29 -35
- package/components/useSelectFromState.js.map +1 -1
- package/components/useViewportInfo.js +5 -6
- package/components/useViewportInfo.js.map +1 -1
- package/createComponent.js +26 -31
- package/createComponent.js.map +1 -1
- package/createComponent.test.js +108 -119
- package/createComponent.test.js.map +1 -1
- package/editorComponents/Box.js +3 -6
- package/editorComponents/Box.js.map +1 -1
- package/editorComponents/Box.manifest.js +15 -15
- package/editorComponents/Box.manifest.js.map +1 -1
- package/editorComponents/Fragment.js +23 -32
- package/editorComponents/Fragment.js.map +1 -1
- package/editorComponents/Fragment.manifest.js +14 -12
- package/editorComponents/Fragment.manifest.js.map +1 -1
- package/editorComponents/Grid.js +33 -61
- package/editorComponents/Grid.js.map +1 -1
- package/editorComponents/Grid.manifest.js +163 -167
- package/editorComponents/Grid.manifest.js.map +1 -1
- package/editorComponents/GridColumn.js +3 -6
- package/editorComponents/GridColumn.js.map +1 -1
- package/editorComponents/GridColumn.manifest.js +20 -18
- package/editorComponents/GridColumn.manifest.js.map +1 -1
- package/editorComponents/Image.js +99 -119
- package/editorComponents/Image.js.map +1 -1
- package/editorComponents/Image.manifest.js +33 -33
- package/editorComponents/Image.manifest.js.map +1 -1
- package/editorComponents/Lexical.js +13 -21
- package/editorComponents/Lexical.js.map +1 -1
- package/editorComponents/Lexical.manifest.js +17 -15
- package/editorComponents/Lexical.manifest.js.map +1 -1
- package/editorComponents/Root.js +3 -6
- package/editorComponents/Root.js.map +1 -1
- package/editorComponents/Root.manifest.js +7 -7
- package/editorComponents/Root.manifest.js.map +1 -1
- package/editorComponents/index.js +10 -1
- package/editorComponents/index.js.map +1 -1
- package/index.js +1 -3
- package/package.json +6 -6
- package/types.js +0 -3
- package/components/EditingElementRenderer/index.js.map +0 -1
- package/components/index.js.map +0 -1
- package/index.js.map +0 -1
- package/types.js.map +0 -1
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
value: depth
|
|
11
|
-
}, children);
|
|
12
|
-
};
|
|
13
|
-
export const useElementSlotDepth = () => {
|
|
14
|
-
const context = React.useContext(ElementSlotDepthContext);
|
|
15
|
-
return context ?? 0;
|
|
2
|
+
import react from "react";
|
|
3
|
+
const ElementSlotDepthContext = /*#__PURE__*/ react.createContext(0);
|
|
4
|
+
const ElementSlotDepthProvider = ({ children, depth })=>/*#__PURE__*/ react.createElement(ElementSlotDepthContext.Provider, {
|
|
5
|
+
value: depth
|
|
6
|
+
}, children);
|
|
7
|
+
const useElementSlotDepth = ()=>{
|
|
8
|
+
const context = react.useContext(ElementSlotDepthContext);
|
|
9
|
+
return context ?? 0;
|
|
16
10
|
};
|
|
11
|
+
export { ElementSlotDepthProvider, useElementSlotDepth };
|
|
17
12
|
|
|
18
13
|
//# sourceMappingURL=ElementSlotDepthProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"components/ElementSlotDepthProvider.js","sources":["../../src/components/ElementSlotDepthProvider.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\n\nconst ElementSlotDepthContext = React.createContext<number>(0);\n\ninterface ElementSlotDepthProviderProps {\n depth: number;\n children: React.ReactNode;\n}\n\nexport const ElementSlotDepthProvider = ({ children, depth }: ElementSlotDepthProviderProps) => {\n return (\n <ElementSlotDepthContext.Provider value={depth}>\n {children}\n </ElementSlotDepthContext.Provider>\n );\n};\n\nexport const useElementSlotDepth = () => {\n const context = React.useContext(ElementSlotDepthContext);\n\n return context ?? 0;\n};\n"],"names":["ElementSlotDepthContext","React","ElementSlotDepthProvider","children","depth","useElementSlotDepth","context"],"mappings":";;AAGA,MAAMA,0BAA0B,WAAHA,GAAGC,MAAAA,aAAmB,CAAS;AAOrD,MAAMC,2BAA2B,CAAC,EAAEC,QAAQ,EAAEC,KAAK,EAAiC,GAChF,WAAP,GACI,oBAACJ,wBAAwB,QAAQ;QAAC,OAAOI;OACpCD;AAKN,MAAME,sBAAsB;IAC/B,MAAMC,UAAUL,MAAAA,UAAgB,CAACD;IAEjC,OAAOM,WAAW;AACtB"}
|
|
@@ -1,43 +1,37 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
import React, { useEffect } from "react";
|
|
2
|
+
import react, { useEffect } from "react";
|
|
4
3
|
import { contentSdk } from "@webiny/website-builder-sdk";
|
|
5
|
-
const FragmentsContext = /*#__PURE__*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
4
|
+
const FragmentsContext = /*#__PURE__*/ react.createContext(void 0);
|
|
5
|
+
const FragmentsProvider = ({ fragments, children })=>{
|
|
6
|
+
useEffect(()=>{
|
|
7
|
+
if (contentSdk.isEditing()) {
|
|
8
|
+
const fragmentsData = fragments.map((fragment)=>{
|
|
9
|
+
if ("fixed" === fragment.type) return {
|
|
10
|
+
type: "fixed",
|
|
11
|
+
name: fragment.name
|
|
12
|
+
};
|
|
13
|
+
return {
|
|
14
|
+
type: "component",
|
|
15
|
+
component: fragment.component,
|
|
16
|
+
inputs: fragment.inputs
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
contentSdk.getEditingSdk().messenger.send("document.fragments", {
|
|
20
|
+
fragments: fragmentsData
|
|
21
|
+
});
|
|
19
22
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
contentSdk.getEditingSdk().messenger.send("document.fragments", {
|
|
27
|
-
fragments: fragmentsData
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
}, [fragments.length]);
|
|
31
|
-
return /*#__PURE__*/React.createElement(FragmentsContext.Provider, {
|
|
32
|
-
value: fragments
|
|
33
|
-
}, children);
|
|
23
|
+
}, [
|
|
24
|
+
fragments.length
|
|
25
|
+
]);
|
|
26
|
+
return /*#__PURE__*/ react.createElement(FragmentsContext.Provider, {
|
|
27
|
+
value: fragments
|
|
28
|
+
}, children);
|
|
34
29
|
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return
|
|
39
|
-
}
|
|
40
|
-
return context;
|
|
30
|
+
const useDocumentFragments = ()=>{
|
|
31
|
+
const context = react.useContext(FragmentsContext);
|
|
32
|
+
if (!context) return [];
|
|
33
|
+
return context;
|
|
41
34
|
};
|
|
35
|
+
export { FragmentsProvider, useDocumentFragments };
|
|
42
36
|
|
|
43
37
|
//# sourceMappingURL=FragmentsProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"components/FragmentsProvider.js","sources":["../../src/components/FragmentsProvider.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect } from \"react\";\nimport { contentSdk } from \"@webiny/website-builder-sdk\";\n\ntype FragmentConfig =\n | {\n type: \"fixed\";\n name: string;\n element: React.ReactNode;\n }\n | { type: \"component\"; component: string; inputs: Record<string, any> };\n\nexport type DocumentFragments = FragmentConfig[];\n\nconst FragmentsContext = React.createContext<DocumentFragments | undefined>(undefined);\n\ninterface FragmentsProviderProps {\n fragments: DocumentFragments;\n children: React.ReactNode;\n}\n\nexport const FragmentsProvider = ({ fragments, children }: FragmentsProviderProps) => {\n useEffect(() => {\n if (contentSdk.isEditing()) {\n // Extract serializable data\n const fragmentsData = fragments.map(fragment => {\n if (fragment.type === \"fixed\") {\n return {\n type: \"fixed\",\n name: fragment.name\n };\n }\n\n return {\n type: \"component\",\n component: fragment.component,\n inputs: fragment.inputs\n };\n });\n\n contentSdk\n .getEditingSdk()!\n .messenger.send(\"document.fragments\", { fragments: fragmentsData });\n }\n }, [fragments.length]);\n\n return <FragmentsContext.Provider value={fragments}>{children}</FragmentsContext.Provider>;\n};\n\nexport const useDocumentFragments = () => {\n const context = React.useContext(FragmentsContext);\n if (!context) {\n return [];\n }\n\n return context;\n};\n"],"names":["FragmentsContext","React","undefined","FragmentsProvider","fragments","children","useEffect","contentSdk","fragmentsData","fragment","useDocumentFragments","context"],"mappings":";;;AAcA,MAAMA,mBAAmB,WAAHA,GAAGC,MAAAA,aAAmB,CAAgCC;AAOrE,MAAMC,oBAAoB,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAA0B;IAC7EC,UAAU;QACN,IAAIC,WAAW,SAAS,IAAI;YAExB,MAAMC,gBAAgBJ,UAAU,GAAG,CAACK,CAAAA;gBAChC,IAAIA,AAAkB,YAAlBA,SAAS,IAAI,EACb,OAAO;oBACH,MAAM;oBACN,MAAMA,SAAS,IAAI;gBACvB;gBAGJ,OAAO;oBACH,MAAM;oBACN,WAAWA,SAAS,SAAS;oBAC7B,QAAQA,SAAS,MAAM;gBAC3B;YACJ;YAEAF,WAAAA,aACkB,GACb,SAAS,CAAC,IAAI,CAAC,sBAAsB;gBAAE,WAAWC;YAAc;QACzE;IACJ,GAAG;QAACJ,UAAU,MAAM;KAAC;IAErB,OAAO,WAAP,GAAO,oBAACJ,iBAAiB,QAAQ;QAAC,OAAOI;OAAYC;AACzD;AAEO,MAAMK,uBAAuB;IAChC,MAAMC,UAAUV,MAAAA,UAAgB,CAACD;IACjC,IAAI,CAACW,SACD,OAAO,EAAE;IAGb,OAAOA;AACX"}
|
|
@@ -1,78 +1,63 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
import React, { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import react, { useCallback, useEffect, useState } from "react";
|
|
4
3
|
import { observer } from "mobx-react-lite";
|
|
5
4
|
import { contentSdk } from "@webiny/website-builder-sdk";
|
|
6
5
|
import { ElementSlot } from "./ElementSlot.js";
|
|
7
6
|
import { useViewport } from "./useViewportInfo.js";
|
|
8
7
|
import { useBindingsForElement } from "./useBindingsForElement.js";
|
|
9
8
|
import { useDocumentState } from "./useDocumentState.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
element,
|
|
62
|
-
breakpoint: viewport.breakpoint
|
|
63
|
-
};
|
|
64
|
-
const autoApplyStyles = manifest.autoApplyStyles !== false;
|
|
65
|
-
const userElement = /*#__PURE__*/React.createElement(Component, Object.assign({
|
|
66
|
-
key: element.id
|
|
67
|
-
}, props));
|
|
68
|
-
if (!autoApplyStyles) {
|
|
69
|
-
return userElement;
|
|
70
|
-
}
|
|
71
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
72
|
-
key: index,
|
|
73
|
-
style: styles
|
|
74
|
-
}, userElement);
|
|
75
|
-
}));
|
|
9
|
+
const LiveElementRenderer = observer(({ element })=>{
|
|
10
|
+
const viewport = useViewport();
|
|
11
|
+
const [breakpoint, setBreakpoint] = useState("desktop");
|
|
12
|
+
useEffect(()=>{
|
|
13
|
+
if (viewport.breakpoint && viewport.breakpoint !== breakpoint) setBreakpoint(viewport.breakpoint);
|
|
14
|
+
}, [
|
|
15
|
+
viewport.breakpoint,
|
|
16
|
+
breakpoint
|
|
17
|
+
]);
|
|
18
|
+
const elementBindings = useBindingsForElement(element.id, breakpoint);
|
|
19
|
+
const state = useDocumentState();
|
|
20
|
+
const onResolved = useCallback((value, input)=>{
|
|
21
|
+
if ("slot" === input.type) return /*#__PURE__*/ react.createElement(ElementSlot, {
|
|
22
|
+
key: element.id,
|
|
23
|
+
parentId: element.id,
|
|
24
|
+
slot: input.name,
|
|
25
|
+
elements: input.list ? value : [
|
|
26
|
+
value
|
|
27
|
+
]
|
|
28
|
+
});
|
|
29
|
+
return value;
|
|
30
|
+
}, [
|
|
31
|
+
element.id
|
|
32
|
+
]);
|
|
33
|
+
if (!element || !element.component) return null;
|
|
34
|
+
const instances = contentSdk.resolveElement({
|
|
35
|
+
element,
|
|
36
|
+
state,
|
|
37
|
+
elementBindings,
|
|
38
|
+
onResolved
|
|
39
|
+
});
|
|
40
|
+
if (!instances) return null;
|
|
41
|
+
return /*#__PURE__*/ react.createElement(react.Fragment, null, instances.map((resolvedElement, index)=>{
|
|
42
|
+
const { component: Component, inputs, styles, manifest } = resolvedElement;
|
|
43
|
+
const props = {
|
|
44
|
+
inputs,
|
|
45
|
+
styles,
|
|
46
|
+
element,
|
|
47
|
+
breakpoint: viewport.breakpoint
|
|
48
|
+
};
|
|
49
|
+
const autoApplyStyles = false !== manifest.autoApplyStyles;
|
|
50
|
+
const userElement = /*#__PURE__*/ react.createElement(Component, {
|
|
51
|
+
key: element.id,
|
|
52
|
+
...props
|
|
53
|
+
});
|
|
54
|
+
if (!autoApplyStyles) return userElement;
|
|
55
|
+
return /*#__PURE__*/ react.createElement("div", {
|
|
56
|
+
key: index,
|
|
57
|
+
style: styles
|
|
58
|
+
}, userElement);
|
|
59
|
+
}));
|
|
76
60
|
});
|
|
61
|
+
export { LiveElementRenderer };
|
|
77
62
|
|
|
78
63
|
//# sourceMappingURL=LiveElementRenderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"components/LiveElementRenderer.js","sources":["../../src/components/LiveElementRenderer.tsx"],"sourcesContent":["\"use client\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport type {\n DocumentElement,\n DocumentElementBindings,\n OnResolved\n} from \"@webiny/website-builder-sdk\";\nimport { contentSdk } from \"@webiny/website-builder-sdk\";\nimport { ElementSlot } from \"./ElementSlot.js\";\nimport { useViewport } from \"./useViewportInfo.js\";\nimport { useBindingsForElement } from \"./useBindingsForElement.js\";\nimport { useDocumentState } from \"./useDocumentState.js\";\n\ninterface LiveElementRendererProps {\n element: DocumentElement;\n bindings?: DocumentElementBindings;\n}\n\nexport const LiveElementRenderer = observer(({ element }: LiveElementRendererProps) => {\n const viewport = useViewport();\n\n // 1. Start breakpoint as \"desktop\" on both server and initial client render.\n const [breakpoint, setBreakpoint] = useState<\"desktop\" | string>(\"desktop\");\n\n // 2. Update breakpoint on the client after mount, using real viewport value.\n useEffect(() => {\n if (viewport.breakpoint && viewport.breakpoint !== breakpoint) {\n setBreakpoint(viewport.breakpoint);\n }\n }, [viewport.breakpoint, breakpoint]);\n\n // Bindings for current breakpoint\n const elementBindings = useBindingsForElement(element.id, breakpoint); // pass breakpoint explicitly if possible\n const state = useDocumentState();\n\n const onResolved = useCallback(\n ((value, input) => {\n if (input.type === \"slot\") {\n return (\n <ElementSlot\n key={element.id}\n parentId={element.id}\n slot={input.name}\n elements={input.list ? value : [value]}\n />\n );\n }\n return value;\n }) as OnResolved,\n [element.id]\n );\n\n if (!element || !element.component) {\n return null;\n }\n\n const instances = contentSdk.resolveElement({\n element,\n state,\n elementBindings,\n onResolved\n });\n\n if (!instances) {\n return null;\n }\n\n return (\n <>\n {instances.map((resolvedElement, index) => {\n const { component: Component, inputs, styles, manifest } = resolvedElement;\n const props = { inputs, styles, element, breakpoint: viewport.breakpoint };\n const autoApplyStyles = manifest.autoApplyStyles !== false;\n\n const userElement = <Component key={element.id} {...props} />;\n\n if (!autoApplyStyles) {\n return userElement;\n }\n\n return (\n <div key={index} style={styles}>\n {userElement}\n </div>\n );\n })}\n </>\n );\n});\n"],"names":["LiveElementRenderer","observer","element","viewport","useViewport","breakpoint","setBreakpoint","useState","useEffect","elementBindings","useBindingsForElement","state","useDocumentState","onResolved","useCallback","value","input","ElementSlot","instances","contentSdk","resolvedElement","index","Component","inputs","styles","manifest","props","autoApplyStyles","userElement"],"mappings":";;;;;;;;AAmBO,MAAMA,sBAAsBC,SAAS,CAAC,EAAEC,OAAO,EAA4B;IAC9E,MAAMC,WAAWC;IAGjB,MAAM,CAACC,YAAYC,cAAc,GAAGC,SAA6B;IAGjEC,UAAU;QACN,IAAIL,SAAS,UAAU,IAAIA,SAAS,UAAU,KAAKE,YAC/CC,cAAcH,SAAS,UAAU;IAEzC,GAAG;QAACA,SAAS,UAAU;QAAEE;KAAW;IAGpC,MAAMI,kBAAkBC,sBAAsBR,QAAQ,EAAE,EAAEG;IAC1D,MAAMM,QAAQC;IAEd,MAAMC,aAAaC,YACd,CAACC,OAAOC;QACL,IAAIA,AAAe,WAAfA,MAAM,IAAI,EACV,OAAO,WAAP,GACI,oBAACC,aAAWA;YACR,KAAKf,QAAQ,EAAE;YACf,UAAUA,QAAQ,EAAE;YACpB,MAAMc,MAAM,IAAI;YAChB,UAAUA,MAAM,IAAI,GAAGD,QAAQ;gBAACA;aAAM;;QAIlD,OAAOA;IACX,GACA;QAACb,QAAQ,EAAE;KAAC;IAGhB,IAAI,CAACA,WAAW,CAACA,QAAQ,SAAS,EAC9B,OAAO;IAGX,MAAMgB,YAAYC,WAAW,cAAc,CAAC;QACxCjB;QACAS;QACAF;QACAI;IACJ;IAEA,IAAI,CAACK,WACD,OAAO;IAGX,OAAO,WAAP,GACI,0CACKA,UAAU,GAAG,CAAC,CAACE,iBAAiBC;QAC7B,MAAM,EAAE,WAAWC,SAAS,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGL;QAC3D,MAAMM,QAAQ;YAAEH;YAAQC;YAAQtB;YAAS,YAAYC,SAAS,UAAU;QAAC;QACzE,MAAMwB,kBAAkBF,AAA6B,UAA7BA,SAAS,eAAe;QAEhD,MAAMG,cAAc,WAAdA,GAAc,oBAACN,WAAAA;YAAU,KAAKpB,QAAQ,EAAE;YAAG,GAAGwB,KAAK;;QAEzD,IAAI,CAACC,iBACD,OAAOC;QAGX,OAAO,WAAP,GACI,oBAAC;YAAI,KAAKP;YAAO,OAAOG;WACnBI;IAGb;AAGZ"}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
import React from "react";
|
|
2
|
+
import react from "react";
|
|
4
3
|
import { ElementRenderer } from "./ElementRenderer.js";
|
|
5
4
|
import { ElementSlotDepthProvider, useElementSlotDepth } from "./ElementSlotDepthProvider.js";
|
|
6
5
|
import { ElementIndexProvider } from "./ElementIndexProvider.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
id: id
|
|
18
|
-
})))));
|
|
6
|
+
const LiveElementSlot = ({ elements = [] })=>{
|
|
7
|
+
const depth = useElementSlotDepth();
|
|
8
|
+
return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(ElementSlotDepthProvider, {
|
|
9
|
+
depth: depth + 1
|
|
10
|
+
}, elements.map((id, index)=>/*#__PURE__*/ react.createElement(ElementIndexProvider, {
|
|
11
|
+
key: id,
|
|
12
|
+
index: index
|
|
13
|
+
}, /*#__PURE__*/ react.createElement(ElementRenderer, {
|
|
14
|
+
id: id
|
|
15
|
+
})))));
|
|
19
16
|
};
|
|
17
|
+
export { LiveElementSlot };
|
|
20
18
|
|
|
21
19
|
//# sourceMappingURL=LiveElementSlot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"components/LiveElementSlot.js","sources":["../../src/components/LiveElementSlot.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { ElementRenderer } from \"./ElementRenderer.js\";\nimport type { ElementSlotProps } from \"./ElementSlot.js\";\nimport { ElementSlotDepthProvider, useElementSlotDepth } from \"./ElementSlotDepthProvider.js\";\nimport { ElementIndexProvider } from \"./ElementIndexProvider.js\";\n\nexport const LiveElementSlot = ({ elements = [] }: Pick<ElementSlotProps, \"elements\">) => {\n const depth = useElementSlotDepth();\n return (\n <>\n <ElementSlotDepthProvider depth={depth + 1}>\n {elements.map((id, index) => (\n <ElementIndexProvider key={id} index={index}>\n <ElementRenderer id={id} />\n </ElementIndexProvider>\n ))}\n </ElementSlotDepthProvider>\n </>\n );\n};\n"],"names":["LiveElementSlot","elements","depth","useElementSlotDepth","ElementSlotDepthProvider","id","index","ElementIndexProvider","ElementRenderer"],"mappings":";;;;;AAOO,MAAMA,kBAAkB,CAAC,EAAEC,WAAW,EAAE,EAAsC;IACjF,MAAMC,QAAQC;IACd,OAAO,WAAP,GACI,wDACI,oBAACC,0BAAwBA;QAAC,OAAOF,QAAQ;OACpCD,SAAS,GAAG,CAAC,CAACI,IAAIC,QAAAA,WAAAA,GACf,oBAACC,sBAAoBA;YAAC,KAAKF;YAAI,OAAOC;yBAClC,oBAACE,iBAAeA;YAAC,IAAIH;;AAM7C"}
|
|
@@ -1,30 +1,24 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
import React from "react";
|
|
2
|
+
import react from "react";
|
|
4
3
|
import { LiveElementSlot } from "./LiveElementSlot.js";
|
|
5
4
|
import { useElementSlotDepth } from "./ElementSlotDepthProvider.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"data-depth": depth,
|
|
22
|
-
"data-empty": true
|
|
5
|
+
const PreviewElementSlot = ({ parentId, slot, elements = [] })=>{
|
|
6
|
+
const depth = useElementSlotDepth();
|
|
7
|
+
if (!elements.length) return /*#__PURE__*/ react.createElement("div", {
|
|
8
|
+
style: {
|
|
9
|
+
height: 100,
|
|
10
|
+
width: "100% !important"
|
|
11
|
+
},
|
|
12
|
+
"data-role": "element-slot",
|
|
13
|
+
"data-parent-id": parentId,
|
|
14
|
+
"data-parent-slot": slot,
|
|
15
|
+
"data-depth": depth,
|
|
16
|
+
"data-empty": true
|
|
17
|
+
});
|
|
18
|
+
return /*#__PURE__*/ react.createElement(LiveElementSlot, {
|
|
19
|
+
elements: elements
|
|
23
20
|
});
|
|
24
|
-
}
|
|
25
|
-
return /*#__PURE__*/React.createElement(LiveElementSlot, {
|
|
26
|
-
elements: elements
|
|
27
|
-
});
|
|
28
21
|
};
|
|
22
|
+
export { PreviewElementSlot };
|
|
29
23
|
|
|
30
24
|
//# sourceMappingURL=PreviewElementSlot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"components/PreviewElementSlot.js","sources":["../../src/components/PreviewElementSlot.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { LiveElementSlot } from \"./LiveElementSlot.js\";\nimport { useElementSlotDepth } from \"./ElementSlotDepthProvider.js\";\n\ninterface ElementSlotProps {\n // Element that contains this slot.\n parentId: string;\n // Path to the array of elements within the element's data structure.\n slot: string;\n // IDs of the elements to render.\n elements: string[];\n}\n\nexport const PreviewElementSlot = ({ parentId, slot, elements = [] }: ElementSlotProps) => {\n const depth = useElementSlotDepth();\n\n if (!elements.length) {\n return (\n <div\n style={{ height: 100, width: \"100% !important\" }}\n data-role={\"element-slot\"}\n data-parent-id={parentId}\n data-parent-slot={slot}\n data-depth={depth}\n data-empty={true}\n />\n );\n }\n\n return <LiveElementSlot elements={elements} />;\n};\n"],"names":["PreviewElementSlot","parentId","slot","elements","depth","useElementSlotDepth","LiveElementSlot"],"mappings":";;;;AAcO,MAAMA,qBAAqB,CAAC,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,WAAW,EAAE,EAAoB;IAClF,MAAMC,QAAQC;IAEd,IAAI,CAACF,SAAS,MAAM,EAChB,OAAO,WAAP,GACI,oBAAC;QACG,OAAO;YAAE,QAAQ;YAAK,OAAO;QAAkB;QAC/C,aAAW;QACX,kBAAgBF;QAChB,oBAAkBC;QAClB,cAAYE;QACZ,cAAY;;IAKxB,OAAO,WAAP,GAAO,oBAACE,iBAAeA;QAAC,UAAUH;;AACtC"}
|
package/components/index.js
CHANGED
|
@@ -3,17 +3,19 @@ import { BindingsProcessor } from "@webiny/website-builder-sdk";
|
|
|
3
3
|
import { useViewport } from "./useViewportInfo.js";
|
|
4
4
|
import { useDocumentStore } from "./DocumentStoreProvider.js";
|
|
5
5
|
import { useSelectFromState } from "./useSelectFromState.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
const useBindingsForElement = (elementId, breakpoint)=>{
|
|
7
|
+
const documentStore = useDocumentStore();
|
|
8
|
+
const viewport = useViewport();
|
|
9
|
+
return useSelectFromState(()=>documentStore.getDocument(), (document)=>{
|
|
10
|
+
const bindings = toJS(document.bindings[elementId]) ?? {};
|
|
11
|
+
const breakpoints = viewport.breakpoints.map((bp)=>bp.name);
|
|
12
|
+
const bindingsProcessor = new BindingsProcessor(breakpoints);
|
|
13
|
+
return bindingsProcessor.getBindings(bindings, breakpoint);
|
|
14
|
+
}, [
|
|
15
|
+
elementId,
|
|
16
|
+
breakpoint
|
|
17
|
+
]);
|
|
17
18
|
};
|
|
19
|
+
export { useBindingsForElement };
|
|
18
20
|
|
|
19
21
|
//# sourceMappingURL=useBindingsForElement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"components/useBindingsForElement.js","sources":["../../src/components/useBindingsForElement.ts"],"sourcesContent":["import { toJS } from \"mobx\";\nimport { BindingsProcessor } from \"@webiny/website-builder-sdk\";\nimport { useViewport } from \"./useViewportInfo.js\";\nimport { useDocumentStore } from \"./DocumentStoreProvider.js\";\nimport { useSelectFromState } from \"./useSelectFromState.js\";\n\nexport const useBindingsForElement = (elementId: string, breakpoint: string) => {\n const documentStore = useDocumentStore();\n const viewport = useViewport();\n\n return useSelectFromState(\n () => documentStore.getDocument()!,\n document => {\n const bindings = toJS(document.bindings[elementId]) ?? {};\n const breakpoints = viewport.breakpoints.map(bp => bp.name);\n\n // Merge element bindings.\n const bindingsProcessor = new BindingsProcessor(breakpoints);\n\n return bindingsProcessor.getBindings(bindings, breakpoint);\n },\n [elementId, breakpoint]\n );\n};\n"],"names":["useBindingsForElement","elementId","breakpoint","documentStore","useDocumentStore","viewport","useViewport","useSelectFromState","document","bindings","toJS","breakpoints","bp","bindingsProcessor","BindingsProcessor"],"mappings":";;;;;AAMO,MAAMA,wBAAwB,CAACC,WAAmBC;IACrD,MAAMC,gBAAgBC;IACtB,MAAMC,WAAWC;IAEjB,OAAOC,mBACH,IAAMJ,cAAc,WAAW,IAC/BK,CAAAA;QACI,MAAMC,WAAWC,KAAKF,SAAS,QAAQ,CAACP,UAAU,KAAK,CAAC;QACxD,MAAMU,cAAcN,SAAS,WAAW,CAAC,GAAG,CAACO,CAAAA,KAAMA,GAAG,IAAI;QAG1D,MAAMC,oBAAoB,IAAIC,kBAAkBH;QAEhD,OAAOE,kBAAkB,WAAW,CAACJ,UAAUP;IACnD,GACA;QAACD;QAAWC;KAAW;AAE/B"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { useDocumentStore } from "./DocumentStoreProvider.js";
|
|
2
2
|
import { useSelectFromState } from "./useSelectFromState.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const useDocumentState = ()=>{
|
|
4
|
+
const documentStore = useDocumentStore();
|
|
5
|
+
return useSelectFromState(()=>documentStore.getDocument(), (document)=>document.state ?? {});
|
|
6
6
|
};
|
|
7
|
+
export { useDocumentState };
|
|
7
8
|
|
|
8
9
|
//# sourceMappingURL=useDocumentState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"components/useDocumentState.js","sources":["../../src/components/useDocumentState.ts"],"sourcesContent":["import { useDocumentStore } from \"./DocumentStoreProvider.js\";\nimport { useSelectFromState } from \"./useSelectFromState.js\";\n\nexport const useDocumentState = () => {\n const documentStore = useDocumentStore();\n return useSelectFromState(\n () => documentStore.getDocument()!,\n document => document.state ?? {}\n );\n};\n"],"names":["useDocumentState","documentStore","useDocumentStore","useSelectFromState","document"],"mappings":";;AAGO,MAAMA,mBAAmB;IAC5B,MAAMC,gBAAgBC;IACtB,OAAOC,mBACH,IAAMF,cAAc,WAAW,IAC/BG,CAAAA,WAAYA,SAAS,KAAK,IAAI,CAAC;AAEvC"}
|
|
@@ -1,39 +1,33 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import deep_equal from "deep-equal";
|
|
2
|
+
import { useEffect, useMemo, useState } from "react";
|
|
3
3
|
import { reaction } from "mobx";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
});
|
|
31
|
-
return () => {
|
|
32
|
-
// clean up when the component unmounts
|
|
33
|
-
disposer();
|
|
34
|
-
};
|
|
35
|
-
}, [getState, selector, equals, ...deps]);
|
|
36
|
-
return value;
|
|
4
|
+
function useSelectFromState(getState, selector, deps = [], equals = deep_equal) {
|
|
5
|
+
const initialValue = useMemo(()=>selector(getState()), deps);
|
|
6
|
+
const [value, setValue] = useState(initialValue);
|
|
7
|
+
useEffect(()=>{
|
|
8
|
+
setValue(selector(getState()));
|
|
9
|
+
}, deps);
|
|
10
|
+
useEffect(()=>{
|
|
11
|
+
const disposer = reaction(()=>{
|
|
12
|
+
const state = getState();
|
|
13
|
+
return selector(state);
|
|
14
|
+
}, (newValue, oldValue)=>{
|
|
15
|
+
if (!equals(oldValue, newValue)) setValue(newValue);
|
|
16
|
+
}, {
|
|
17
|
+
equals,
|
|
18
|
+
fireImmediately: false
|
|
19
|
+
});
|
|
20
|
+
return ()=>{
|
|
21
|
+
disposer();
|
|
22
|
+
};
|
|
23
|
+
}, [
|
|
24
|
+
getState,
|
|
25
|
+
selector,
|
|
26
|
+
equals,
|
|
27
|
+
...deps
|
|
28
|
+
]);
|
|
29
|
+
return value;
|
|
37
30
|
}
|
|
31
|
+
export { useSelectFromState };
|
|
38
32
|
|
|
39
33
|
//# sourceMappingURL=useSelectFromState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"components/useSelectFromState.js","sources":["../../src/components/useSelectFromState.ts"],"sourcesContent":["import deepEqual from \"deep-equal\";\nimport { useState, useEffect, useMemo } from \"react\";\nimport type { IReactionDisposer } from \"mobx\";\nimport { reaction } from \"mobx\";\n\ntype Equals<T> = (a: T, b: T) => boolean;\n\n/**\n * Subscribe to part of the document state.\n * @param selector Pick the slice of state you care about.\n * @param equals (optional) comparator, defaults to Object.is\n */\nexport function useSelectFromState<TState, T>(\n getState: () => TState,\n selector: (doc: TState) => T,\n deps: React.DependencyList = [],\n equals: Equals<T> = deepEqual\n): T {\n // Pull the initial slice synchronously\n const initialValue = useMemo(() => selector(getState()), deps);\n const [value, setValue] = useState<T>(initialValue);\n\n useEffect(() => {\n setValue(selector(getState())); // reset state on dep change\n }, deps);\n\n useEffect(() => {\n // reaction tracks selector(doc) and only fires when newVal !== oldVal\n const disposer: IReactionDisposer = reaction(\n () => {\n const state = getState();\n\n return selector(state);\n },\n (newValue, oldValue) => {\n if (!equals(oldValue, newValue)) {\n setValue(newValue);\n }\n },\n {\n // use your comparator to decide if newValue “really” changed\n equals,\n // we already set initial via useState\n fireImmediately: false\n }\n );\n\n return () => {\n // clean up when the component unmounts\n disposer();\n };\n }, [getState, selector, equals, ...deps]);\n\n return value;\n}\n"],"names":["useSelectFromState","getState","selector","deps","equals","deepEqual","initialValue","useMemo","value","setValue","useState","useEffect","disposer","reaction","state","newValue","oldValue"],"mappings":";;;AAYO,SAASA,mBACZC,QAAsB,EACtBC,QAA4B,EAC5BC,OAA6B,EAAE,EAC/BC,SAAoBC,UAAS;IAG7B,MAAMC,eAAeC,QAAQ,IAAML,SAASD,aAAaE;IACzD,MAAM,CAACK,OAAOC,SAAS,GAAGC,SAAYJ;IAEtCK,UAAU;QACNF,SAASP,SAASD;IACtB,GAAGE;IAEHQ,UAAU;QAEN,MAAMC,WAA8BC,SAChC;YACI,MAAMC,QAAQb;YAEd,OAAOC,SAASY;QACpB,GACA,CAACC,UAAUC;YACP,IAAI,CAACZ,OAAOY,UAAUD,WAClBN,SAASM;QAEjB,GACA;YAEIX;YAEA,iBAAiB;QACrB;QAGJ,OAAO;YAEHQ;QACJ;IACJ,GAAG;QAACX;QAAUC;QAAUE;WAAWD;KAAK;IAExC,OAAOK;AACX"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { useEffect, useState } from "react";
|
|
2
2
|
import { viewportManager } from "@webiny/website-builder-sdk";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
return
|
|
7
|
-
}, []);
|
|
8
|
-
return viewport;
|
|
3
|
+
const useViewport = ()=>{
|
|
4
|
+
const [viewport, setViewport] = useState(viewportManager.getViewport());
|
|
5
|
+
useEffect(()=>viewportManager.onViewportChangeEnd(setViewport), []);
|
|
6
|
+
return viewport;
|
|
9
7
|
};
|
|
8
|
+
export { useViewport };
|
|
10
9
|
|
|
11
10
|
//# sourceMappingURL=useViewportInfo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"components/useViewportInfo.js","sources":["../../src/components/useViewportInfo.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { viewportManager } from \"@webiny/website-builder-sdk\";\n\nexport const useViewport = () => {\n const [viewport, setViewport] = useState(viewportManager.getViewport());\n\n useEffect(() => {\n return viewportManager.onViewportChangeEnd(setViewport);\n }, []);\n\n return viewport;\n};\n"],"names":["useViewport","viewport","setViewport","useState","viewportManager","useEffect"],"mappings":";;AAGO,MAAMA,cAAc;IACvB,MAAM,CAACC,UAAUC,YAAY,GAAGC,SAASC,gBAAgB,WAAW;IAEpEC,UAAU,IACCD,gBAAgB,mBAAmB,CAACF,cAC5C,EAAE;IAEL,OAAOD;AACX"}
|