@webiny/website-builder-react 6.3.0 → 6.4.0-beta.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/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,126 +1,106 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react, { useCallback, useEffect, useState } from "react";
|
|
2
2
|
import { contentSdk } from "@webiny/website-builder-sdk";
|
|
3
|
-
const SUPPORTED_IMAGE_RESIZE_WIDTHS = [
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
const SUPPORTED_IMAGE_RESIZE_WIDTHS = [
|
|
4
|
+
100,
|
|
5
|
+
300,
|
|
6
|
+
500,
|
|
7
|
+
750,
|
|
8
|
+
1000,
|
|
9
|
+
1500,
|
|
10
|
+
2500
|
|
11
|
+
];
|
|
12
|
+
const ImageComponent = (props)=>{
|
|
13
|
+
const image = useImage(props);
|
|
14
|
+
if (!image.src) return /*#__PURE__*/ react.createElement(ImagePlaceholder, {
|
|
15
|
+
style: props.styles
|
|
9
16
|
});
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
title: image.title,
|
|
15
|
-
data: image.src
|
|
17
|
+
if ("object" === image.tag) return /*#__PURE__*/ react.createElement("object", {
|
|
18
|
+
style: image.styles,
|
|
19
|
+
title: image.title,
|
|
20
|
+
data: image.src
|
|
16
21
|
});
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}));
|
|
22
|
+
return /*#__PURE__*/ react.createElement(react.Fragment, null, !image.isLoaded && /*#__PURE__*/ react.createElement(ImagePlaceholder, {
|
|
23
|
+
style: image.styles
|
|
24
|
+
}), /*#__PURE__*/ react.createElement("img", {
|
|
25
|
+
alt: image.altText,
|
|
26
|
+
onLoad: image.onLoad,
|
|
27
|
+
title: image.title,
|
|
28
|
+
src: image.src,
|
|
29
|
+
srcSet: image.srcSet,
|
|
30
|
+
style: image.styles
|
|
31
|
+
}));
|
|
28
32
|
};
|
|
29
|
-
const ImagePlaceholder = ({
|
|
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
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const imageStyles = {
|
|
100
|
-
maxWidth: "100%",
|
|
101
|
-
opacity: isLoaded ? 1 : 0,
|
|
102
|
-
transition: "opacity 0.3s ease",
|
|
103
|
-
...styles
|
|
104
|
-
};
|
|
105
|
-
const onLoad = useCallback(() => {
|
|
106
|
-
if (contentSdk.isEditing()) {
|
|
107
|
-
setTimeout(() => {
|
|
108
|
-
setIsLoaded(true);
|
|
109
|
-
}, 100);
|
|
110
|
-
} else {
|
|
111
|
-
setIsLoaded(true);
|
|
112
|
-
}
|
|
113
|
-
}, []);
|
|
114
|
-
return {
|
|
115
|
-
altText,
|
|
116
|
-
isLoaded,
|
|
117
|
-
onLoad,
|
|
118
|
-
src: inputs.image?.src,
|
|
119
|
-
srcSet,
|
|
120
|
-
styles: imageStyles,
|
|
121
|
-
tag,
|
|
122
|
-
title
|
|
123
|
-
};
|
|
33
|
+
const ImagePlaceholder = ({ style })=>/*#__PURE__*/ react.createElement("div", {
|
|
34
|
+
style: {
|
|
35
|
+
display: "flex",
|
|
36
|
+
height: "200px",
|
|
37
|
+
backgroundColor: "#f4f4f4",
|
|
38
|
+
justifyContent: "center",
|
|
39
|
+
alignItems: "center",
|
|
40
|
+
fill: "#ffffff",
|
|
41
|
+
...style
|
|
42
|
+
}
|
|
43
|
+
}, /*#__PURE__*/ react.createElement("svg", {
|
|
44
|
+
style: {
|
|
45
|
+
width: "70px",
|
|
46
|
+
height: "70px",
|
|
47
|
+
filter: "drop-shadow(rgba(0, 0, 0, 0.16) 0px 1px 0px)"
|
|
48
|
+
},
|
|
49
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
50
|
+
height: "24px",
|
|
51
|
+
viewBox: "0 -960 960 960",
|
|
52
|
+
width: "24px"
|
|
53
|
+
}, /*#__PURE__*/ react.createElement("path", {
|
|
54
|
+
d: "M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z"
|
|
55
|
+
})));
|
|
56
|
+
const getSrcSet = (src, srcSetWidths)=>srcSetWidths.map((item)=>`${src}?width=${item} ${item}w`).join(", ");
|
|
57
|
+
const useImage = ({ inputs, styles })=>{
|
|
58
|
+
const [isLoaded, setIsLoaded] = useState(!contentSdk.isEditing());
|
|
59
|
+
const { title = "", altText, image } = inputs;
|
|
60
|
+
const src = image?.src;
|
|
61
|
+
const tag = src && src.endsWith(".svg") ? "object" : "img";
|
|
62
|
+
useEffect(()=>{
|
|
63
|
+
if (!src) setIsLoaded(false);
|
|
64
|
+
}, [
|
|
65
|
+
src
|
|
66
|
+
]);
|
|
67
|
+
let srcSetWidths = [];
|
|
68
|
+
const width = styles.width?.toString();
|
|
69
|
+
if (width && width.endsWith("px")) {
|
|
70
|
+
const imageWidthInt = parseInt(width);
|
|
71
|
+
for(let i = 0; i < SUPPORTED_IMAGE_RESIZE_WIDTHS.length; i++){
|
|
72
|
+
const supportedResizeWidth = SUPPORTED_IMAGE_RESIZE_WIDTHS[i];
|
|
73
|
+
if (imageWidthInt > supportedResizeWidth) srcSetWidths.push(supportedResizeWidth);
|
|
74
|
+
else {
|
|
75
|
+
srcSetWidths.push(supportedResizeWidth);
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
} else srcSetWidths = SUPPORTED_IMAGE_RESIZE_WIDTHS;
|
|
80
|
+
const srcSet = src ? getSrcSet(src, srcSetWidths) : "";
|
|
81
|
+
const imageStyles = {
|
|
82
|
+
maxWidth: "100%",
|
|
83
|
+
opacity: isLoaded ? 1 : 0,
|
|
84
|
+
transition: "opacity 0.3s ease",
|
|
85
|
+
...styles
|
|
86
|
+
};
|
|
87
|
+
const onLoad = useCallback(()=>{
|
|
88
|
+
if (contentSdk.isEditing()) setTimeout(()=>{
|
|
89
|
+
setIsLoaded(true);
|
|
90
|
+
}, 100);
|
|
91
|
+
else setIsLoaded(true);
|
|
92
|
+
}, []);
|
|
93
|
+
return {
|
|
94
|
+
altText,
|
|
95
|
+
isLoaded,
|
|
96
|
+
onLoad,
|
|
97
|
+
src: inputs.image?.src,
|
|
98
|
+
srcSet,
|
|
99
|
+
styles: imageStyles,
|
|
100
|
+
tag,
|
|
101
|
+
title
|
|
102
|
+
};
|
|
124
103
|
};
|
|
104
|
+
export { ImageComponent };
|
|
125
105
|
|
|
126
106
|
//# sourceMappingURL=Image.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"editorComponents/Image.js","sources":["../../src/editorComponents/Image.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport type { CssProperties } from \"@webiny/website-builder-sdk\";\nimport { contentSdk } from \"@webiny/website-builder-sdk\";\nimport type { ComponentProps } from \"~/types.js\";\n\nconst SUPPORTED_IMAGE_RESIZE_WIDTHS = [100, 300, 500, 750, 1000, 1500, 2500];\n\ntype ImageProps = ComponentProps<{\n title: string;\n altText: string;\n image: {\n id: string;\n name: string;\n size: number;\n mimeType: string;\n src: string;\n };\n}>;\n\nexport const ImageComponent = (props: ImageProps) => {\n const image = useImage(props);\n\n if (!image.src) {\n return <ImagePlaceholder style={props.styles} />;\n }\n\n if (image.tag === \"object\") {\n return <object style={image.styles} title={image.title} data={image.src} />;\n }\n\n return (\n <>\n {!image.isLoaded && <ImagePlaceholder style={image.styles} />}\n <img\n alt={image.altText}\n onLoad={image.onLoad}\n title={image.title}\n src={image.src}\n srcSet={image.srcSet}\n style={image.styles}\n />\n </>\n );\n};\n\nconst ImagePlaceholder = ({ style }: { style: CssProperties }) => {\n return (\n <div\n style={{\n display: \"flex\",\n height: \"200px\",\n backgroundColor: \"#f4f4f4\",\n justifyContent: \"center\",\n alignItems: \"center\",\n fill: \"#ffffff\",\n ...style\n }}\n >\n <svg\n style={{\n width: \"70px\",\n height: \"70px\",\n filter: \"drop-shadow(rgba(0, 0, 0, 0.16) 0px 1px 0px)\"\n }}\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n >\n <path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z\" />\n </svg>\n </div>\n );\n};\n\nconst getSrcSet = (src: string, srcSetWidths: number[]) => {\n return srcSetWidths.map(item => `${src}?width=${item} ${item}w`).join(\", \");\n};\n\nconst useImage = ({ inputs, styles }: ImageProps) => {\n const [isLoaded, setIsLoaded] = useState(contentSdk.isEditing() ? false : true);\n const { title = \"\", altText, image } = inputs;\n const src = image?.src;\n\n const tag = src && src.endsWith(\".svg\") ? \"object\" : \"img\";\n\n useEffect(() => {\n if (!src) {\n setIsLoaded(false);\n }\n }, [src]);\n\n // If a fixed image width in pixels was set, let's filter out unneeded\n // image resize widths. For example, if 155px was set as the fixed image\n // width, then we want the `srcset` attribute to only contain 100w and 300w.\n let srcSetWidths: number[] = [];\n\n const width = styles.width?.toString();\n\n if (width && width.endsWith(\"px\")) {\n const imageWidthInt = parseInt(width);\n for (let i = 0; i < SUPPORTED_IMAGE_RESIZE_WIDTHS.length; i++) {\n const supportedResizeWidth = SUPPORTED_IMAGE_RESIZE_WIDTHS[i];\n if (imageWidthInt > supportedResizeWidth) {\n srcSetWidths.push(supportedResizeWidth);\n } else {\n srcSetWidths.push(supportedResizeWidth);\n break;\n }\n }\n } else {\n // If a fixed image width was not provided, we\n // rely on all the supported image resize widths.\n srcSetWidths = SUPPORTED_IMAGE_RESIZE_WIDTHS;\n }\n\n const srcSet = src ? getSrcSet(src, srcSetWidths) : \"\";\n\n const imageStyles = {\n maxWidth: \"100%\",\n opacity: isLoaded ? 1 : 0,\n transition: \"opacity 0.3s ease\",\n ...styles\n };\n\n const onLoad = useCallback(() => {\n if (contentSdk.isEditing()) {\n setTimeout(() => {\n setIsLoaded(true);\n }, 100);\n } else {\n setIsLoaded(true);\n }\n }, []);\n\n return {\n altText,\n isLoaded,\n onLoad,\n src: inputs.image?.src,\n srcSet,\n styles: imageStyles,\n tag,\n title\n };\n};\n"],"names":["SUPPORTED_IMAGE_RESIZE_WIDTHS","ImageComponent","props","image","useImage","ImagePlaceholder","style","getSrcSet","src","srcSetWidths","item","inputs","styles","isLoaded","setIsLoaded","useState","contentSdk","title","altText","tag","useEffect","width","imageWidthInt","parseInt","i","supportedResizeWidth","srcSet","imageStyles","onLoad","useCallback","setTimeout"],"mappings":";;AAKA,MAAMA,gCAAgC;IAAC;IAAK;IAAK;IAAK;IAAK;IAAM;IAAM;CAAK;AAcrE,MAAMC,iBAAiB,CAACC;IAC3B,MAAMC,QAAQC,SAASF;IAEvB,IAAI,CAACC,MAAM,GAAG,EACV,OAAO,WAAP,GAAO,oBAACE,kBAAgBA;QAAC,OAAOH,MAAM,MAAM;;IAGhD,IAAIC,AAAc,aAAdA,MAAM,GAAG,EACT,OAAO,WAAP,GAAO,oBAAC;QAAO,OAAOA,MAAM,MAAM;QAAE,OAAOA,MAAM,KAAK;QAAE,MAAMA,MAAM,GAAG;;IAG3E,OAAO,WAAP,GACI,0CACK,CAACA,MAAM,QAAQ,IAAI,WAAJ,GAAI,oBAACE,kBAAgBA;QAAC,OAAOF,MAAM,MAAM;sBACzD,oBAAC;QACG,KAAKA,MAAM,OAAO;QAClB,QAAQA,MAAM,MAAM;QACpB,OAAOA,MAAM,KAAK;QAClB,KAAKA,MAAM,GAAG;QACd,QAAQA,MAAM,MAAM;QACpB,OAAOA,MAAM,MAAM;;AAInC;AAEA,MAAME,mBAAmB,CAAC,EAAEC,KAAK,EAA4B,GAClD,WAAP,GACI,oBAAC;QACG,OAAO;YACH,SAAS;YACT,QAAQ;YACR,iBAAiB;YACjB,gBAAgB;YAChB,YAAY;YACZ,MAAM;YACN,GAAGA,KAAK;QACZ;qBAEA,oBAAC;QACG,OAAO;YACH,OAAO;YACP,QAAQ;YACR,QAAQ;QACZ;QACA,OAAM;QACN,QAAO;QACP,SAAQ;QACR,OAAM;qBAEN,oBAAC;QAAK,GAAE;;AAMxB,MAAMC,YAAY,CAACC,KAAaC,eACrBA,aAAa,GAAG,CAACC,CAAAA,OAAQ,GAAGF,IAAI,OAAO,EAAEE,KAAK,CAAC,EAAEA,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;AAG1E,MAAMN,WAAW,CAAC,EAAEO,MAAM,EAAEC,MAAM,EAAc;IAC5C,MAAM,CAACC,UAAUC,YAAY,GAAGC,UAASC,WAAW,SAAS;IAC7D,MAAM,EAAEC,QAAQ,EAAE,EAAEC,OAAO,EAAEf,KAAK,EAAE,GAAGQ;IACvC,MAAMH,MAAML,OAAO;IAEnB,MAAMgB,MAAMX,OAAOA,IAAI,QAAQ,CAAC,UAAU,WAAW;IAErDY,UAAU;QACN,IAAI,CAACZ,KACDM,YAAY;IAEpB,GAAG;QAACN;KAAI;IAKR,IAAIC,eAAyB,EAAE;IAE/B,MAAMY,QAAQT,OAAO,KAAK,EAAE;IAE5B,IAAIS,SAASA,MAAM,QAAQ,CAAC,OAAO;QAC/B,MAAMC,gBAAgBC,SAASF;QAC/B,IAAK,IAAIG,IAAI,GAAGA,IAAIxB,8BAA8B,MAAM,EAAEwB,IAAK;YAC3D,MAAMC,uBAAuBzB,6BAA6B,CAACwB,EAAE;YAC7D,IAAIF,gBAAgBG,sBAChBhB,aAAa,IAAI,CAACgB;iBACf;gBACHhB,aAAa,IAAI,CAACgB;gBAClB;YACJ;QACJ;IACJ,OAGIhB,eAAeT;IAGnB,MAAM0B,SAASlB,MAAMD,UAAUC,KAAKC,gBAAgB;IAEpD,MAAMkB,cAAc;QAChB,UAAU;QACV,SAASd,WAAW,IAAI;QACxB,YAAY;QACZ,GAAGD,MAAM;IACb;IAEA,MAAMgB,SAASC,YAAY;QACvB,IAAIb,WAAW,SAAS,IACpBc,WAAW;YACPhB,YAAY;QAChB,GAAG;aAEHA,YAAY;IAEpB,GAAG,EAAE;IAEL,OAAO;QACHI;QACAL;QACAe;QACA,KAAKjB,OAAO,KAAK,EAAE;QACnBe;QACA,QAAQC;QACRR;QACAF;IACJ;AACJ"}
|
|
@@ -1,42 +1,42 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
2
|
import { createFileInput, createTextInput } from "@webiny/website-builder-sdk";
|
|
4
3
|
import { createComponent } from "../createComponent.js";
|
|
5
4
|
import { ImageComponent } from "./Image.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
5
|
+
const Image = createComponent(ImageComponent, {
|
|
6
|
+
name: "Webiny/Image",
|
|
7
|
+
label: "Image",
|
|
8
|
+
aiContext: "Displays an image from the file manager with configurable title and alt text.",
|
|
9
|
+
group: "basic",
|
|
10
|
+
image: '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z"/></svg>',
|
|
11
|
+
autoApplyStyles: false,
|
|
12
|
+
inputs: {
|
|
13
|
+
image: createFileInput({
|
|
14
|
+
label: "Image",
|
|
15
|
+
allowedFileTypes: [
|
|
16
|
+
"image/*"
|
|
17
|
+
],
|
|
18
|
+
onChange: ({ inputs })=>{
|
|
19
|
+
if (inputs.image) {
|
|
20
|
+
inputs.title = inputs.image.name;
|
|
21
|
+
inputs.altText = inputs.image.name;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}),
|
|
25
|
+
title: createTextInput({
|
|
26
|
+
label: "Title",
|
|
27
|
+
description: "Title of the image"
|
|
28
|
+
}),
|
|
29
|
+
altText: createTextInput({
|
|
30
|
+
label: "Alternate Text",
|
|
31
|
+
description: "Shown when the user has disabled images"
|
|
32
|
+
})
|
|
33
|
+
},
|
|
34
|
+
defaults: {
|
|
35
|
+
styles: {
|
|
36
|
+
width: "100%"
|
|
23
37
|
}
|
|
24
|
-
}
|
|
25
|
-
}),
|
|
26
|
-
title: createTextInput({
|
|
27
|
-
label: "Title",
|
|
28
|
-
description: "Title of the image"
|
|
29
|
-
}),
|
|
30
|
-
altText: createTextInput({
|
|
31
|
-
label: "Alternate Text",
|
|
32
|
-
description: "Shown when the user has disabled images"
|
|
33
|
-
})
|
|
34
|
-
},
|
|
35
|
-
defaults: {
|
|
36
|
-
styles: {
|
|
37
|
-
width: "100%"
|
|
38
38
|
}
|
|
39
|
-
}
|
|
40
39
|
});
|
|
40
|
+
export { Image };
|
|
41
41
|
|
|
42
42
|
//# sourceMappingURL=Image.manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"editorComponents/Image.manifest.js","sources":["../../src/editorComponents/Image.manifest.ts"],"sourcesContent":["\"use client\";\nimport { createFileInput, createTextInput } from \"@webiny/website-builder-sdk\";\nimport { createComponent } from \"~/createComponent.js\";\nimport { ImageComponent } from \"./Image.js\";\n\nexport const Image = createComponent(ImageComponent, {\n name: \"Webiny/Image\",\n label: \"Image\",\n aiContext: \"Displays an image from the file manager with configurable title and alt text.\",\n group: \"basic\",\n image: `<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z\"/></svg>`,\n autoApplyStyles: false,\n inputs: {\n image: createFileInput({\n label: \"Image\",\n allowedFileTypes: [\"image/*\"],\n onChange: ({ inputs }) => {\n if (inputs.image) {\n inputs.title = inputs.image.name;\n inputs.altText = inputs.image.name;\n }\n }\n }),\n title: createTextInput({\n label: \"Title\",\n description: \"Title of the image\"\n }),\n altText: createTextInput({\n label: \"Alternate Text\",\n description: \"Shown when the user has disabled images\"\n })\n },\n defaults: {\n styles: {\n width: \"100%\"\n }\n }\n});\n"],"names":["Image","createComponent","ImageComponent","createFileInput","inputs","createTextInput"],"mappings":";;;;AAKO,MAAMA,QAAQC,gBAAgBC,gBAAgB;IACjD,MAAM;IACN,OAAO;IACP,WAAW;IACX,OAAO;IACP,OAAO;IACP,iBAAiB;IACjB,QAAQ;QACJ,OAAOC,gBAAgB;YACnB,OAAO;YACP,kBAAkB;gBAAC;aAAU;YAC7B,UAAU,CAAC,EAAEC,MAAM,EAAE;gBACjB,IAAIA,OAAO,KAAK,EAAE;oBACdA,OAAO,KAAK,GAAGA,OAAO,KAAK,CAAC,IAAI;oBAChCA,OAAO,OAAO,GAAGA,OAAO,KAAK,CAAC,IAAI;gBACtC;YACJ;QACJ;QACA,OAAOC,gBAAgB;YACnB,OAAO;YACP,aAAa;QACjB;QACA,SAASA,gBAAgB;YACrB,OAAO;YACP,aAAa;QACjB;IACJ;IACA,UAAU;QACN,QAAQ;YACJ,OAAO;QACX;IACJ;AACJ"}
|
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
const {
|
|
14
|
-
html
|
|
15
|
-
} = inputs.content;
|
|
16
|
-
if (html) {
|
|
17
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
18
|
-
dangerouslySetInnerHTML: {
|
|
19
|
-
__html: html
|
|
20
|
-
}
|
|
2
|
+
import react from "react";
|
|
3
|
+
const createLexicalValue = (value)=>({
|
|
4
|
+
state: `{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"${value}","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"wby-paragraph","version":1,"textFormat":0,"textStyle":""}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}`,
|
|
5
|
+
html: `<p class="wb-paragraph-1">${value}</p>`
|
|
6
|
+
});
|
|
7
|
+
const LexicalComponent = ({ inputs })=>{
|
|
8
|
+
const { html } = inputs.content;
|
|
9
|
+
if (html) return /*#__PURE__*/ react.createElement("div", {
|
|
10
|
+
dangerouslySetInnerHTML: {
|
|
11
|
+
__html: html
|
|
12
|
+
}
|
|
21
13
|
});
|
|
22
|
-
|
|
23
|
-
return null;
|
|
14
|
+
return null;
|
|
24
15
|
};
|
|
16
|
+
export { LexicalComponent, createLexicalValue };
|
|
25
17
|
|
|
26
18
|
//# sourceMappingURL=Lexical.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"editorComponents/Lexical.js","sources":["../../src/editorComponents/Lexical.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport type { ComponentProps } from \"~/types.js\";\n\nexport const createLexicalValue = (value: string) => {\n return {\n state: `{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"${value}\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"wby-paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}`,\n html: `<p class=\"wb-paragraph-1\">${value}</p>`\n };\n};\n\ntype LexicalProps = ComponentProps<{\n content: {\n html?: string;\n };\n}>;\n\nexport const LexicalComponent = ({ inputs }: LexicalProps) => {\n const { html } = inputs.content;\n\n if (html) {\n return <div dangerouslySetInnerHTML={{ __html: html }}></div>;\n }\n\n return null;\n};\n"],"names":["createLexicalValue","value","LexicalComponent","inputs","html"],"mappings":";;AAIO,MAAMA,qBAAqB,CAACC,QACxB;QACH,OAAO,CAAC,4FAA4F,EAAEA,MAAM,8MAA8M,CAAC;QAC3T,MAAM,CAAC,0BAA0B,EAAEA,MAAM,IAAI,CAAC;IAClD;AASG,MAAMC,mBAAmB,CAAC,EAAEC,MAAM,EAAgB;IACrD,MAAM,EAAEC,IAAI,EAAE,GAAGD,OAAO,OAAO;IAE/B,IAAIC,MACA,OAAO,WAAP,GAAO,oBAAC;QAAI,yBAAyB;YAAE,QAAQA;QAAK;;IAGxD,OAAO;AACX"}
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
2
|
import { createLexicalInput } from "@webiny/website-builder-sdk";
|
|
4
3
|
import { createComponent } from "../createComponent.js";
|
|
5
4
|
import { LexicalComponent, createLexicalValue } from "./Lexical.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
5
|
+
const Lexical = createComponent(LexicalComponent, {
|
|
6
|
+
name: "Webiny/Lexical",
|
|
7
|
+
label: "Rich Text",
|
|
8
|
+
aiContext: "Rich text content. Generate semantic HTML tags. Do NOT generate markdown.",
|
|
9
|
+
group: "basic",
|
|
10
|
+
image: '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px"><path d="M280-160v-520H80v-120h520v120H400v520H280Zm360 0v-320H520v-120h360v120H760v320H640Z"/></svg>',
|
|
11
|
+
inputs: [
|
|
12
|
+
createLexicalInput({
|
|
13
|
+
name: "content",
|
|
14
|
+
label: "Content"
|
|
15
|
+
})
|
|
16
|
+
],
|
|
17
|
+
defaults: {
|
|
18
|
+
inputs: {
|
|
19
|
+
content: createLexicalValue("Examine she brother prudent add day ham. Far stairs now coming bed oppose hunted become his. You zealously departure had procuring suspicion. Books whose front would purse if be do decay. Quitting you way formerly disposed perceive ladyship are. Common turned boy direct and yet.")
|
|
20
|
+
}
|
|
19
21
|
}
|
|
20
|
-
}
|
|
21
22
|
});
|
|
23
|
+
export { Lexical };
|
|
22
24
|
|
|
23
25
|
//# sourceMappingURL=Lexical.manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"editorComponents/Lexical.manifest.js","sources":["../../src/editorComponents/Lexical.manifest.ts"],"sourcesContent":["\"use client\";\nimport { createLexicalInput } from \"@webiny/website-builder-sdk\";\nimport { createComponent } from \"~/createComponent.js\";\nimport { LexicalComponent, createLexicalValue } from \"./Lexical.js\";\n\nexport const Lexical = createComponent(LexicalComponent, {\n name: \"Webiny/Lexical\",\n label: \"Rich Text\",\n aiContext: \"Rich text content. Generate semantic HTML tags. Do NOT generate markdown.\",\n group: \"basic\",\n image: `<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"><path d=\"M280-160v-520H80v-120h520v120H400v520H280Zm360 0v-320H520v-120h360v120H760v320H640Z\"/></svg>`,\n inputs: [\n createLexicalInput({\n name: \"content\",\n label: \"Content\"\n })\n ],\n defaults: {\n inputs: {\n content: createLexicalValue(\n \"Examine she brother prudent add day ham. Far stairs now coming bed oppose hunted become his. You zealously departure had procuring suspicion. Books whose front would purse if be do decay. Quitting you way formerly disposed perceive ladyship are. Common turned boy direct and yet.\"\n )\n }\n }\n});\n"],"names":["Lexical","createComponent","LexicalComponent","createLexicalInput","createLexicalValue"],"mappings":";;;;AAKO,MAAMA,UAAUC,gBAAgBC,kBAAkB;IACrD,MAAM;IACN,OAAO;IACP,WAAW;IACX,OAAO;IACP,OAAO;IACP,QAAQ;QACJC,mBAAmB;YACf,MAAM;YACN,OAAO;QACX;KACH;IACD,UAAU;QACN,QAAQ;YACJ,SAASC,mBACL;QAER;IACJ;AACJ"}
|
package/editorComponents/Root.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}) => {
|
|
5
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, inputs.children);
|
|
6
|
-
};
|
|
1
|
+
import react from "react";
|
|
2
|
+
const RootComponent = ({ inputs })=>/*#__PURE__*/ react.createElement(react.Fragment, null, inputs.children);
|
|
3
|
+
export { RootComponent };
|
|
7
4
|
|
|
8
5
|
//# sourceMappingURL=Root.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"editorComponents/Root.js","sources":["../../src/editorComponents/Root.tsx"],"sourcesContent":["import React from \"react\";\nimport type { ComponentPropsWithChildren } from \"~/types.js\";\n\nexport const RootComponent = ({ inputs }: ComponentPropsWithChildren) => {\n return <>{inputs.children}</>;\n};\n"],"names":["RootComponent","inputs"],"mappings":";AAGO,MAAMA,gBAAgB,CAAC,EAAEC,MAAM,EAA8B,GACzD,WAAP,GAAO,0CAAGA,OAAO,QAAQ"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
2
|
import { createComponent } from "../createComponent.js";
|
|
4
3
|
import { RootComponent } from "./Root.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
const Root = createComponent(RootComponent, {
|
|
5
|
+
name: "Webiny/Root",
|
|
6
|
+
label: "Main Content",
|
|
7
|
+
acceptsChildren: true,
|
|
8
|
+
hideFromToolbar: true,
|
|
9
|
+
useInAiContentGeneration: false
|
|
11
10
|
});
|
|
11
|
+
export { Root };
|
|
12
12
|
|
|
13
13
|
//# sourceMappingURL=Root.manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"editorComponents/Root.manifest.js","sources":["../../src/editorComponents/Root.manifest.ts"],"sourcesContent":["\"use client\";\nimport { createComponent } from \"~/createComponent.js\";\nimport { RootComponent } from \"./Root.js\";\n\nexport const Root = createComponent(RootComponent, {\n name: \"Webiny/Root\",\n label: \"Main Content\",\n acceptsChildren: true,\n hideFromToolbar: true,\n useInAiContentGeneration: false\n});\n"],"names":["Root","createComponent","RootComponent"],"mappings":";;;AAIO,MAAMA,OAAOC,gBAAgBC,eAAe;IAC/C,MAAM;IACN,OAAO;IACP,iBAAiB;IACjB,iBAAiB;IACjB,0BAA0B;AAC9B"}
|
|
@@ -5,6 +5,15 @@ import { Lexical } from "./Lexical.manifest.js";
|
|
|
5
5
|
import { Root } from "./Root.manifest.js";
|
|
6
6
|
import { GridColumn } from "./GridColumn.manifest.js";
|
|
7
7
|
import { Fragment } from "./Fragment.manifest.js";
|
|
8
|
-
|
|
8
|
+
const editorComponents = [
|
|
9
|
+
Root,
|
|
10
|
+
Box,
|
|
11
|
+
Grid,
|
|
12
|
+
GridColumn,
|
|
13
|
+
Image,
|
|
14
|
+
Lexical,
|
|
15
|
+
Fragment
|
|
16
|
+
];
|
|
17
|
+
export { editorComponents };
|
|
9
18
|
|
|
10
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"editorComponents/index.js","sources":["../../src/editorComponents/index.ts"],"sourcesContent":["import { Box } from \"./Box.manifest.js\";\nimport { Grid } from \"./Grid.manifest.js\";\nimport { Image } from \"./Image.manifest.js\";\nimport { Lexical } from \"./Lexical.manifest.js\";\nimport { Root } from \"./Root.manifest.js\";\nimport { GridColumn } from \"./GridColumn.manifest.js\";\nimport { Fragment } from \"./Fragment.manifest.js\";\n\nexport const editorComponents = [Root, Box, Grid, GridColumn, Image, Lexical, Fragment];\n"],"names":["editorComponents","Root","Box","Grid","GridColumn","Image","Lexical","Fragment"],"mappings":";;;;;;;AAQO,MAAMA,mBAAmB;IAACC;IAAMC;IAAKC;IAAMC;IAAYC;IAAOC;IAASC;CAAS"}
|
package/index.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
1
|
export * from "./components/index.js";
|
|
2
2
|
export * from "./createComponent.js";
|
|
3
|
-
export {
|
|
4
|
-
|
|
5
|
-
//# sourceMappingURL=index.js.map
|
|
3
|
+
export { StyleSettings, contentSdk, createBooleanInput, createColorInput, createDateInput, createElement, createFileInput, createInput, createLexicalInput, createLongTextInput, createNumberInput, createObjectInput, createRadioInput, createSelectInput, createSlotInput, createTagsInput, createTextInput, createTheme, environment, getHeadersProvider, registerComponentGroup, setHeadersProvider } from "@webiny/website-builder-sdk";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/website-builder-react",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.4.0-beta.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,22 +17,22 @@
|
|
|
17
17
|
],
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@webiny/website-builder-sdk": "6.
|
|
20
|
+
"@webiny/website-builder-sdk": "6.4.0-beta.0",
|
|
21
21
|
"deep-equal": "2.2.3",
|
|
22
|
-
"mobx": "6.15.
|
|
22
|
+
"mobx": "6.15.3",
|
|
23
23
|
"mobx-react-lite": "4.1.1",
|
|
24
24
|
"react": "18.3.1",
|
|
25
25
|
"react-dom": "18.3.1"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/react": "18.3.28",
|
|
29
|
-
"@webiny/build-tools": "6.
|
|
29
|
+
"@webiny/build-tools": "6.4.0-beta.0",
|
|
30
30
|
"typescript": "6.0.3",
|
|
31
|
-
"vitest": "4.1.
|
|
31
|
+
"vitest": "4.1.6"
|
|
32
32
|
},
|
|
33
33
|
"publishConfig": {
|
|
34
34
|
"access": "public",
|
|
35
35
|
"directory": "dist"
|
|
36
36
|
},
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "a545d7529828af07d08d49c3da1bcb967483b9ce"
|
|
38
38
|
}
|
package/types.js
CHANGED