@webiny/app-website-builder 6.4.0-beta.2 → 6.4.0-beta.3
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/exports/admin/website-builder/lexical.d.ts +18 -17
- package/exports/admin/website-builder/lexical.js +3 -2
- package/inputRenderers/FileInput.js.map +1 -1
- package/inputRenderers/LexicalInput/LexicalEditor.d.ts +4 -1
- package/inputRenderers/LexicalInput/LexicalEditor.js +12 -2
- package/inputRenderers/LexicalInput/LexicalEditor.js.map +1 -1
- package/inputRenderers/LexicalInput/LexicalEditorConfig.d.ts +18 -0
- package/inputRenderers/LexicalInput/LexicalEditorConfig.js +5 -1
- package/inputRenderers/LexicalInput/LexicalEditorConfig.js.map +1 -1
- package/inputRenderers/LexicalInput/LexicalInput.js +4 -9
- package/inputRenderers/LexicalInput/LexicalInput.js.map +1 -1
- package/modules/pages/PageEditor/PageSettings/PageSettingsPresenter.js +2 -2
- package/modules/pages/PageEditor/PageSettings/PageSettingsPresenter.js.map +1 -1
- package/package.json +24 -24
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
17
|
-
export
|
|
1
|
+
export { LexicalEditorConfig } from "../../../inputRenderers/LexicalInput/LexicalEditorConfig.js";
|
|
2
|
+
export { LexicalEditor } from "../../../inputRenderers/LexicalInput/LexicalEditor.js";
|
|
3
|
+
export type { LexicalEditorProps } from "../../../inputRenderers/LexicalInput/LexicalEditor.js";
|
|
4
|
+
export { useLexicalEditorConfig } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
5
|
+
export { LexicalHtmlRenderer } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
6
|
+
export { getNodeFromSelection } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
7
|
+
export { useCurrentElement } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
8
|
+
export { useCurrentSelection } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
9
|
+
export { useDeriveValueFromSelection } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
10
|
+
export { useRichTextEditor } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
11
|
+
export { useFontColorPicker } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
12
|
+
export { useTextAlignmentAction } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
13
|
+
export { useTypographyAction } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
14
|
+
export { useIsMounted } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
15
|
+
export { Divider } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
16
|
+
export { DropDownItem } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
17
|
+
export { DropDown } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
18
|
+
export type { Klass, LexicalNode } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { LexicalEditorConfig } from "../../../inputRenderers/LexicalInput/LexicalEditorConfig.js";
|
|
2
|
+
export { LexicalEditor } from "../../../inputRenderers/LexicalInput/LexicalEditor.js";
|
|
3
|
+
export { Divider, DropDown, DropDownItem, LexicalHtmlRenderer, getNodeFromSelection, useCurrentElement, useCurrentSelection, useDeriveValueFromSelection, useFontColorPicker, useIsMounted, useLexicalEditorConfig, useRichTextEditor, useTextAlignmentAction, useTypographyAction } from "@webiny/lexical-editor/exports/admin/ui/lexical.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputRenderers/FileInput.js","sources":["../../src/inputRenderers/FileInput.tsx"],"sourcesContent":["import React from \"react\";\nimport { FilePicker } from \"@webiny/admin-ui\";\nimport type { ElementInputRendererProps } from \"~/BaseEditor/index.js\";\nimport { FileManager, type FileManagerFileItem } from \"@webiny/app-admin\";\nimport { useBreakpoint } from \"~/BaseEditor/hooks/useBreakpoint.js\";\nimport type { FileInput } from \"@webiny/website-builder-sdk\";\nimport { fileManagerItemToValue } from \"~/shared/fileManagerItemToValue.js\";\n\nexport const FileInputRenderer = ({\n value,\n onChange,\n label,\n ...props\n}: ElementInputRendererProps) => {\n const input = props.input as FileInput;\n const { isBaseBreakpoint } = useBreakpoint();\n const onFileChange = (file: FileManagerFileItem) => {\n onChange(({ value }) => {\n const newValue = fileManagerItemToValue(file);\n value.set(newValue);\n });\n };\n\n const onRemove = () => {\n onChange(({ value }) => {\n if (isBaseBreakpoint) {\n value.set(undefined);\n } else {\n value.set(null);\n }\n });\n };\n\n return (\n <FileManager\n accept={input.allowedFileTypes}\n onChange={onFileChange}\n render={({ showFileManager }) => (\n <FilePicker\n label={label}\n description={input.description}\n type=\"compact\"\n value={value}\n onSelectItem={() => showFileManager()}\n onRemoveItem={onRemove}\n onEditItem={() => showFileManager()}\n />\n )}\n />\n );\n};\n"],"names":["FileInputRenderer","value","onChange","label","props","input","isBaseBreakpoint","useBreakpoint","onFileChange","file","newValue","fileManagerItemToValue","onRemove","undefined","FileManager","showFileManager","FilePicker"],"mappings":";;;;;AAQO,MAAMA,oBAAoB,CAAC,EAC9BC,KAAK,EACLC,QAAQ,EACRC,KAAK,EACL,GAAGC,OACqB;IACxB,MAAMC,QAAQD,MAAM,KAAK;IACzB,MAAM,EAAEE,gBAAgB,EAAE,GAAGC;
|
|
1
|
+
{"version":3,"file":"inputRenderers/FileInput.js","sources":["../../src/inputRenderers/FileInput.tsx"],"sourcesContent":["import React from \"react\";\nimport { FilePicker } from \"@webiny/admin-ui\";\nimport type { ElementInputRendererProps } from \"~/BaseEditor/index.js\";\nimport { FileManager, type FileManagerFileItem } from \"@webiny/app-admin\";\nimport { useBreakpoint } from \"~/BaseEditor/hooks/useBreakpoint.js\";\nimport type { FileInput } from \"@webiny/website-builder-sdk\";\nimport { fileManagerItemToValue } from \"~/shared/fileManagerItemToValue.js\";\n\nexport const FileInputRenderer = ({\n value,\n onChange,\n label,\n ...props\n}: ElementInputRendererProps) => {\n const input = props.input as FileInput;\n const { isBaseBreakpoint } = useBreakpoint();\n\n const onFileChange = (file: FileManagerFileItem) => {\n onChange(({ value }) => {\n const newValue = fileManagerItemToValue(file);\n value.set(newValue);\n });\n };\n\n const onRemove = () => {\n onChange(({ value }) => {\n if (isBaseBreakpoint) {\n value.set(undefined);\n } else {\n value.set(null);\n }\n });\n };\n\n return (\n <FileManager\n accept={input.allowedFileTypes}\n onChange={onFileChange}\n render={({ showFileManager }) => (\n <FilePicker\n label={label}\n description={input.description}\n type=\"compact\"\n value={value}\n onSelectItem={() => showFileManager()}\n onRemoveItem={onRemove}\n onEditItem={() => showFileManager()}\n />\n )}\n />\n );\n};\n"],"names":["FileInputRenderer","value","onChange","label","props","input","isBaseBreakpoint","useBreakpoint","onFileChange","file","newValue","fileManagerItemToValue","onRemove","undefined","FileManager","showFileManager","FilePicker"],"mappings":";;;;;AAQO,MAAMA,oBAAoB,CAAC,EAC9BC,KAAK,EACLC,QAAQ,EACRC,KAAK,EACL,GAAGC,OACqB;IACxB,MAAMC,QAAQD,MAAM,KAAK;IACzB,MAAM,EAAEE,gBAAgB,EAAE,GAAGC;IAE7B,MAAMC,eAAe,CAACC;QAClBP,SAAS,CAAC,EAAED,KAAK,EAAE;YACf,MAAMS,WAAWC,uBAAuBF;YACxCR,MAAM,GAAG,CAACS;QACd;IACJ;IAEA,MAAME,WAAW;QACbV,SAAS,CAAC,EAAED,KAAK,EAAE;YACf,IAAIK,kBACAL,MAAM,GAAG,CAACY;iBAEVZ,MAAM,GAAG,CAAC;QAElB;IACJ;IAEA,OAAO,WAAP,GACI,oBAACa,aAAWA;QACR,QAAQT,MAAM,gBAAgB;QAC9B,UAAUG;QACV,QAAQ,CAAC,EAAEO,eAAe,EAAE,iBACxB,oBAACC,YAAUA;gBACP,OAAOb;gBACP,aAAaE,MAAM,WAAW;gBAC9B,MAAK;gBACL,OAAOJ;gBACP,cAAc,IAAMc;gBACpB,cAAcH;gBACd,YAAY,IAAMG;;;AAKtC"}
|
|
@@ -2,4 +2,7 @@ import React from "react";
|
|
|
2
2
|
import { LexicalEditor as BaseLexicalEditor } from "@webiny/app-admin";
|
|
3
3
|
import "./wbStaticToolbar.css";
|
|
4
4
|
export type LexicalEditorProps = Omit<React.ComponentProps<typeof BaseLexicalEditor>, "theme">;
|
|
5
|
-
export declare const LexicalEditor:
|
|
5
|
+
export declare const LexicalEditor: {
|
|
6
|
+
Expanded: (props: LexicalEditorProps) => React.JSX.Element;
|
|
7
|
+
Compact: (props: LexicalEditorProps) => React.JSX.Element;
|
|
8
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import react from "react";
|
|
2
|
-
import { LexicalEditor } from "@webiny/app-admin";
|
|
2
|
+
import { CompositionScope, LexicalEditor } from "@webiny/app-admin";
|
|
3
3
|
import { StaticToolbar } from "@webiny/lexical-editor";
|
|
4
4
|
import { createLexicalTokens } from "@webiny/lexical-theme/createLexicalEditorTokens.js";
|
|
5
5
|
import { useWebsiteBuilderTheme } from "../../BaseEditor/components/index.js";
|
|
@@ -23,7 +23,7 @@ const styles = {
|
|
|
23
23
|
fontFamily: "var(--wb-theme-font-family)"
|
|
24
24
|
};
|
|
25
25
|
const lexicalTokens = createLexicalTokens("wb-lx-");
|
|
26
|
-
const
|
|
26
|
+
const LexicalEditorComponent = (props)=>{
|
|
27
27
|
const { theme } = useWebsiteBuilderTheme();
|
|
28
28
|
const editorTheme = {
|
|
29
29
|
colors: theme?.colors ?? [],
|
|
@@ -43,6 +43,16 @@ const LexicalEditor_LexicalEditor = (props)=>{
|
|
|
43
43
|
theme: editorTheme
|
|
44
44
|
});
|
|
45
45
|
};
|
|
46
|
+
const ExpandedLexicalEditor = (props)=>/*#__PURE__*/ react.createElement(CompositionScope, {
|
|
47
|
+
name: "expanded"
|
|
48
|
+
}, /*#__PURE__*/ react.createElement(LexicalEditorComponent, props));
|
|
49
|
+
const CompactLexicalEditor = (props)=>/*#__PURE__*/ react.createElement(CompositionScope, {
|
|
50
|
+
name: "compact"
|
|
51
|
+
}, /*#__PURE__*/ react.createElement(LexicalEditorComponent, props));
|
|
52
|
+
const LexicalEditor_LexicalEditor = {
|
|
53
|
+
Expanded: ExpandedLexicalEditor,
|
|
54
|
+
Compact: CompactLexicalEditor
|
|
55
|
+
};
|
|
46
56
|
export { LexicalEditor_LexicalEditor as LexicalEditor };
|
|
47
57
|
|
|
48
58
|
//# sourceMappingURL=LexicalEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputRenderers/LexicalInput/LexicalEditor.js","sources":["../../../src/inputRenderers/LexicalInput/LexicalEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { LexicalEditor as BaseLexicalEditor } from \"@webiny/app-admin\";\nimport { StaticToolbar } from \"@webiny/lexical-editor\";\nimport type { EditorTheme } from \"@webiny/lexical-theme\";\nimport { createLexicalTokens } from \"@webiny/lexical-theme/createLexicalEditorTokens.js\";\nimport { useWebsiteBuilderTheme } from \"~/BaseEditor/components/index.js\";\nimport \"./wbStaticToolbar.css\";\n\nconst placeholderStyles: React.CSSProperties = { position: \"absolute\", top: 40, left: 25 };\n\nconst contentEditableStyles: React.CSSProperties = {\n minHeight: 200,\n display: \"block\",\n padding: 10\n};\n\nconst styles: React.CSSProperties = {\n backgroundColor: \"#fff\",\n border: \"1px solid #e1e1e1\",\n padding: \"10px 14px\",\n minHeight: 200,\n maxHeight: 350,\n fontFamily: \"var(--wb-theme-font-family)\"\n};\n\nconst lexicalTokens = createLexicalTokens(\"wb-lx-\");\n\nexport type LexicalEditorProps = Omit<React.ComponentProps<typeof BaseLexicalEditor>, \"theme\">;\n\
|
|
1
|
+
{"version":3,"file":"inputRenderers/LexicalInput/LexicalEditor.js","sources":["../../../src/inputRenderers/LexicalInput/LexicalEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { LexicalEditor as BaseLexicalEditor } from \"@webiny/app-admin\";\nimport { StaticToolbar } from \"@webiny/lexical-editor\";\nimport type { EditorTheme } from \"@webiny/lexical-theme\";\nimport { createLexicalTokens } from \"@webiny/lexical-theme/createLexicalEditorTokens.js\";\nimport { useWebsiteBuilderTheme } from \"~/BaseEditor/components/index.js\";\nimport \"./wbStaticToolbar.css\";\nimport { CompositionScope } from \"@webiny/app-admin\";\n\nconst placeholderStyles: React.CSSProperties = { position: \"absolute\", top: 40, left: 25 };\n\nconst contentEditableStyles: React.CSSProperties = {\n minHeight: 200,\n display: \"block\",\n padding: 10\n};\n\nconst styles: React.CSSProperties = {\n backgroundColor: \"#fff\",\n border: \"1px solid #e1e1e1\",\n padding: \"10px 14px\",\n minHeight: 200,\n maxHeight: 350,\n fontFamily: \"var(--wb-theme-font-family)\"\n};\n\nconst lexicalTokens = createLexicalTokens(\"wb-lx-\");\n\nexport type LexicalEditorProps = Omit<React.ComponentProps<typeof BaseLexicalEditor>, \"theme\">;\n\nconst LexicalEditorComponent = (props: LexicalEditorProps) => {\n const { theme } = useWebsiteBuilderTheme();\n\n const editorTheme: EditorTheme = {\n colors: theme?.colors ?? [],\n typography: theme?.typography ?? {},\n tokens: lexicalTokens\n };\n\n return (\n <BaseLexicalEditor\n {...props}\n staticToolbar={<StaticToolbar className={\"wb-static-toolbar\"} />}\n tag={\"p\"}\n placeholder={props?.placeholder || \"Enter your text here...\"}\n placeholderStyles={placeholderStyles}\n contentEditableStyles={contentEditableStyles}\n styles={styles}\n theme={editorTheme}\n />\n );\n};\n\nconst ExpandedLexicalEditor = (props: LexicalEditorProps) => {\n return (\n <CompositionScope name={\"expanded\"}>\n <LexicalEditorComponent {...props} />\n </CompositionScope>\n );\n};\n\nconst CompactLexicalEditor = (props: LexicalEditorProps) => {\n return (\n <CompositionScope name={\"compact\"}>\n <LexicalEditorComponent {...props} />\n </CompositionScope>\n );\n};\n\nexport const LexicalEditor = {\n Expanded: ExpandedLexicalEditor,\n Compact: CompactLexicalEditor\n};\n"],"names":["placeholderStyles","contentEditableStyles","styles","lexicalTokens","createLexicalTokens","LexicalEditorComponent","props","theme","useWebsiteBuilderTheme","editorTheme","BaseLexicalEditor","StaticToolbar","ExpandedLexicalEditor","CompositionScope","CompactLexicalEditor","LexicalEditor"],"mappings":";;;;;;AASA,MAAMA,oBAAyC;IAAE,UAAU;IAAY,KAAK;IAAI,MAAM;AAAG;AAEzF,MAAMC,wBAA6C;IAC/C,WAAW;IACX,SAAS;IACT,SAAS;AACb;AAEA,MAAMC,SAA8B;IAChC,iBAAiB;IACjB,QAAQ;IACR,SAAS;IACT,WAAW;IACX,WAAW;IACX,YAAY;AAChB;AAEA,MAAMC,gBAAgBC,oBAAoB;AAI1C,MAAMC,yBAAyB,CAACC;IAC5B,MAAM,EAAEC,KAAK,EAAE,GAAGC;IAElB,MAAMC,cAA2B;QAC7B,QAAQF,OAAO,UAAU,EAAE;QAC3B,YAAYA,OAAO,cAAc,CAAC;QAClC,QAAQJ;IACZ;IAEA,OAAO,WAAP,GACI,oBAACO,eAAiBA;QACb,GAAGJ,KAAK;QACT,6BAAe,oBAACK,eAAaA;YAAC,WAAW;;QACzC,KAAK;QACL,aAAaL,OAAO,eAAe;QACnC,mBAAmBN;QACnB,uBAAuBC;QACvB,QAAQC;QACR,OAAOO;;AAGnB;AAEA,MAAMG,wBAAwB,CAACN,QACpB,WAAP,GACI,oBAACO,kBAAgBA;QAAC,MAAM;qBACpB,oBAACR,wBAA2BC;AAKxC,MAAMQ,uBAAuB,CAACR,QACnB,WAAP,GACI,oBAACO,kBAAgBA;QAAC,MAAM;qBACpB,oBAACR,wBAA2BC;AAKjC,MAAMS,8BAAgB;IACzB,UAAUH;IACV,SAASE;AACb"}
|
|
@@ -16,3 +16,21 @@ export declare const ExpandedEditorConfig: {
|
|
|
16
16
|
Plugin: (props: React.ComponentProps<typeof BaseConfig.Plugin>) => React.JSX.Element;
|
|
17
17
|
Node: (props: React.ComponentProps<typeof BaseConfig.Node>) => React.JSX.Element;
|
|
18
18
|
};
|
|
19
|
+
export declare const LexicalEditorConfig: {
|
|
20
|
+
Expanded: {
|
|
21
|
+
({ children }: {
|
|
22
|
+
children: React.ReactNode;
|
|
23
|
+
}): React.JSX.Element;
|
|
24
|
+
ToolbarAction: (props: React.ComponentProps<typeof BaseConfig.ToolbarElement>) => React.JSX.Element;
|
|
25
|
+
Plugin: (props: React.ComponentProps<typeof BaseConfig.Plugin>) => React.JSX.Element;
|
|
26
|
+
Node: (props: React.ComponentProps<typeof BaseConfig.Node>) => React.JSX.Element;
|
|
27
|
+
};
|
|
28
|
+
Compact: {
|
|
29
|
+
({ children }: {
|
|
30
|
+
children: React.ReactNode;
|
|
31
|
+
}): React.JSX.Element;
|
|
32
|
+
ToolbarAction: (props: React.ComponentProps<typeof BaseConfig.ToolbarElement>) => React.JSX.Element;
|
|
33
|
+
Plugin: (props: React.ComponentProps<typeof BaseConfig.Plugin>) => React.JSX.Element;
|
|
34
|
+
Node: (props: React.ComponentProps<typeof BaseConfig.Node>) => React.JSX.Element;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
@@ -20,6 +20,10 @@ const ExpandedEditorConfig = ({ children })=>/*#__PURE__*/ react.createElement(C
|
|
|
20
20
|
ExpandedEditorConfig.ToolbarAction = ToolbarAction;
|
|
21
21
|
ExpandedEditorConfig.Plugin = PluginConfig;
|
|
22
22
|
ExpandedEditorConfig.Node = NodeConfig;
|
|
23
|
-
|
|
23
|
+
const LexicalEditorConfig_LexicalEditorConfig = {
|
|
24
|
+
Expanded: ExpandedEditorConfig,
|
|
25
|
+
Compact: CompactEditorConfig
|
|
26
|
+
};
|
|
27
|
+
export { CompactEditorConfig, ExpandedEditorConfig, LexicalEditorConfig_LexicalEditorConfig as LexicalEditorConfig };
|
|
24
28
|
|
|
25
29
|
//# sourceMappingURL=LexicalEditorConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputRenderers/LexicalInput/LexicalEditorConfig.js","sources":["../../../src/inputRenderers/LexicalInput/LexicalEditorConfig.tsx"],"sourcesContent":["import React from \"react\";\nimport { LexicalEditorConfig as BaseConfig } from \"@webiny/lexical-editor\";\nimport { CompositionScope } from \"@webiny/react-composition\";\n\nconst ToolbarAction = (props: React.ComponentProps<typeof BaseConfig.ToolbarElement>) => {\n return <BaseConfig.ToolbarElement {...props} />;\n};\n\nconst PluginConfig = (props: React.ComponentProps<typeof BaseConfig.Plugin>) => {\n return <BaseConfig.Plugin {...props} />;\n};\n\nconst NodeConfig = (props: React.ComponentProps<typeof BaseConfig.Node>) => {\n return <BaseConfig.Node {...props} />;\n};\n\nexport const CompactEditorConfig = ({ children }: { children: React.ReactNode }) => {\n return (\n <CompositionScope name={\"compact\"}>\n <BaseConfig priority={\"secondary\"}>{children}</BaseConfig>\n </CompositionScope>\n );\n};\n\nCompactEditorConfig.ToolbarAction = ToolbarAction;\nCompactEditorConfig.Plugin = PluginConfig;\nCompactEditorConfig.Node = NodeConfig;\n\nexport const ExpandedEditorConfig = ({ children }: { children: React.ReactNode }) => {\n return (\n <CompositionScope name={\"expanded\"}>\n <BaseConfig priority={\"secondary\"}>{children}</BaseConfig>\n </CompositionScope>\n );\n};\n\nExpandedEditorConfig.ToolbarAction = ToolbarAction;\nExpandedEditorConfig.Plugin = PluginConfig;\nExpandedEditorConfig.Node = NodeConfig;\n"],"names":["ToolbarAction","props","BaseConfig","PluginConfig","NodeConfig","CompactEditorConfig","children","CompositionScope","ExpandedEditorConfig"],"mappings":";;;AAIA,MAAMA,gBAAgB,CAACC,QACZ,WAAP,GAAO,oBAACC,oBAAAA,cAAyB,EAAKD;AAG1C,MAAME,eAAe,CAACF,QACX,WAAP,GAAO,oBAACC,oBAAAA,MAAiB,EAAKD;AAGlC,MAAMG,aAAa,CAACH,QACT,WAAP,GAAO,oBAACC,oBAAAA,IAAe,EAAKD;AAGzB,MAAMI,sBAAsB,CAAC,EAAEC,QAAQ,EAAiC,GACpE,WAAP,GACI,oBAACC,kBAAgBA;QAAC,MAAM;qBACpB,oBAACL,qBAAUA;QAAC,UAAU;OAAcI;AAKhDD,oBAAoB,aAAa,GAAGL;AACpCK,oBAAoB,MAAM,GAAGF;AAC7BE,oBAAoB,IAAI,GAAGD;AAEpB,MAAMI,uBAAuB,CAAC,EAAEF,QAAQ,EAAiC,GACrE,WAAP,GACI,oBAACC,kBAAgBA;QAAC,MAAM;qBACpB,oBAACL,qBAAUA;QAAC,UAAU;OAAcI;AAKhDE,qBAAqB,aAAa,GAAGR;AACrCQ,qBAAqB,MAAM,GAAGL;AAC9BK,qBAAqB,IAAI,GAAGJ"}
|
|
1
|
+
{"version":3,"file":"inputRenderers/LexicalInput/LexicalEditorConfig.js","sources":["../../../src/inputRenderers/LexicalInput/LexicalEditorConfig.tsx"],"sourcesContent":["import React from \"react\";\nimport { LexicalEditorConfig as BaseConfig } from \"@webiny/lexical-editor\";\nimport { CompositionScope } from \"@webiny/react-composition\";\n\nconst ToolbarAction = (props: React.ComponentProps<typeof BaseConfig.ToolbarElement>) => {\n return <BaseConfig.ToolbarElement {...props} />;\n};\n\nconst PluginConfig = (props: React.ComponentProps<typeof BaseConfig.Plugin>) => {\n return <BaseConfig.Plugin {...props} />;\n};\n\nconst NodeConfig = (props: React.ComponentProps<typeof BaseConfig.Node>) => {\n return <BaseConfig.Node {...props} />;\n};\n\nexport const CompactEditorConfig = ({ children }: { children: React.ReactNode }) => {\n return (\n <CompositionScope name={\"compact\"}>\n <BaseConfig priority={\"secondary\"}>{children}</BaseConfig>\n </CompositionScope>\n );\n};\n\nCompactEditorConfig.ToolbarAction = ToolbarAction;\nCompactEditorConfig.Plugin = PluginConfig;\nCompactEditorConfig.Node = NodeConfig;\n\nexport const ExpandedEditorConfig = ({ children }: { children: React.ReactNode }) => {\n return (\n <CompositionScope name={\"expanded\"}>\n <BaseConfig priority={\"secondary\"}>{children}</BaseConfig>\n </CompositionScope>\n );\n};\n\nExpandedEditorConfig.ToolbarAction = ToolbarAction;\nExpandedEditorConfig.Plugin = PluginConfig;\nExpandedEditorConfig.Node = NodeConfig;\n\nexport const LexicalEditorConfig = {\n Expanded: ExpandedEditorConfig,\n Compact: CompactEditorConfig\n};\n"],"names":["ToolbarAction","props","BaseConfig","PluginConfig","NodeConfig","CompactEditorConfig","children","CompositionScope","ExpandedEditorConfig","LexicalEditorConfig"],"mappings":";;;AAIA,MAAMA,gBAAgB,CAACC,QACZ,WAAP,GAAO,oBAACC,oBAAAA,cAAyB,EAAKD;AAG1C,MAAME,eAAe,CAACF,QACX,WAAP,GAAO,oBAACC,oBAAAA,MAAiB,EAAKD;AAGlC,MAAMG,aAAa,CAACH,QACT,WAAP,GAAO,oBAACC,oBAAAA,IAAe,EAAKD;AAGzB,MAAMI,sBAAsB,CAAC,EAAEC,QAAQ,EAAiC,GACpE,WAAP,GACI,oBAACC,kBAAgBA;QAAC,MAAM;qBACpB,oBAACL,qBAAUA;QAAC,UAAU;OAAcI;AAKhDD,oBAAoB,aAAa,GAAGL;AACpCK,oBAAoB,MAAM,GAAGF;AAC7BE,oBAAoB,IAAI,GAAGD;AAEpB,MAAMI,uBAAuB,CAAC,EAAEF,QAAQ,EAAiC,GACrE,WAAP,GACI,oBAACC,kBAAgBA;QAAC,MAAM;qBACpB,oBAACL,qBAAUA;QAAC,UAAU;OAAcI;AAKhDE,qBAAqB,aAAa,GAAGR;AACrCQ,qBAAqB,MAAM,GAAGL;AAC9BK,qBAAqB,IAAI,GAAGJ;AAErB,MAAMK,0CAAsB;IAC/B,UAAUD;IACV,SAASH;AACb"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import react, { useCallback, useEffect, useState } from "react";
|
|
2
2
|
import { Dialog, FormComponentLabel } from "@webiny/admin-ui";
|
|
3
|
-
import { CompositionScope } from "@webiny/app-admin";
|
|
4
3
|
import { LexicalEditor } from "./LexicalEditor.js";
|
|
5
4
|
import { ExpandedEditorProvider, useExpandedEditor } from "./ExpandedEditor.js";
|
|
6
5
|
const LexicalInputRenderer = (props)=>{
|
|
@@ -39,12 +38,10 @@ const EditorDialog = (props)=>{
|
|
|
39
38
|
props.onChange(localValue);
|
|
40
39
|
}
|
|
41
40
|
}))
|
|
42
|
-
}, /*#__PURE__*/ react.createElement(
|
|
43
|
-
name: "expanded"
|
|
44
|
-
}, /*#__PURE__*/ react.createElement(LexicalEditor, {
|
|
41
|
+
}, /*#__PURE__*/ react.createElement(LexicalEditor.Expanded, {
|
|
45
42
|
value: localValue,
|
|
46
43
|
onChange: setLocalValue
|
|
47
|
-
}))
|
|
44
|
+
}));
|
|
48
45
|
};
|
|
49
46
|
const ExpandableLexicalInputRenderer = ({ value, onChange, input, label })=>{
|
|
50
47
|
const { isExpanded, setExpanded } = useExpandedEditor();
|
|
@@ -57,13 +54,11 @@ const ExpandableLexicalInputRenderer = ({ value, onChange, input, label })=>{
|
|
|
57
54
|
]);
|
|
58
55
|
return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(FormComponentLabel, {
|
|
59
56
|
text: label
|
|
60
|
-
}), /*#__PURE__*/ react.createElement(
|
|
61
|
-
name: "compact"
|
|
62
|
-
}, /*#__PURE__*/ react.createElement(LexicalEditor, {
|
|
57
|
+
}), /*#__PURE__*/ react.createElement(LexicalEditor.Compact, {
|
|
63
58
|
value: value,
|
|
64
59
|
onChange: onChange,
|
|
65
60
|
key: input.name
|
|
66
|
-
})
|
|
61
|
+
}), /*#__PURE__*/ react.createElement(EditorDialog, {
|
|
67
62
|
open: isExpanded,
|
|
68
63
|
value: value,
|
|
69
64
|
onChange: applyChanges,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputRenderers/LexicalInput/LexicalInput.js","sources":["../../../src/inputRenderers/LexicalInput/LexicalInput.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { Dialog, FormComponentLabel } from \"@webiny/admin-ui\";\nimport
|
|
1
|
+
{"version":3,"file":"inputRenderers/LexicalInput/LexicalInput.js","sources":["../../../src/inputRenderers/LexicalInput/LexicalInput.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { Dialog, FormComponentLabel } from \"@webiny/admin-ui\";\nimport type { RichTextValueWithHtml } from \"@webiny/app-admin\";\nimport { LexicalEditor } from \"./LexicalEditor.js\";\nimport type { ElementInputRendererProps } from \"~/BaseEditor/index.js\";\nimport {\n ExpandedEditorProvider,\n useExpandedEditor\n} from \"~/inputRenderers/LexicalInput/ExpandedEditor.js\";\n\ntype LexicalInputRendererProps = Omit<ElementInputRendererProps, \"onChange\" | \"metadata\"> & {\n onChange: (value: RichTextValueWithHtml) => void;\n};\n\nexport const LexicalInputRenderer = (props: ElementInputRendererProps) => {\n const onChange = (lexicalValue: RichTextValueWithHtml) => {\n props.onChange(({ value }) => {\n value.set(lexicalValue);\n });\n };\n\n const value = props.value ?? {};\n\n return (\n <ExpandedEditorProvider>\n <ExpandableLexicalInputRenderer {...props} value={value} onChange={onChange} />\n </ExpandedEditorProvider>\n );\n};\n\ninterface EditorDialogProps extends Omit<LexicalInputRendererProps, \"onPreviewChange\" | \"label\"> {\n open: boolean;\n onClose: () => void;\n}\n\nconst EditorDialog = (props: EditorDialogProps) => {\n const [localValue, setLocalValue] = useState(props.value);\n\n useEffect(() => {\n setLocalValue(props.value);\n }, [props.value]);\n\n return (\n <Dialog\n id={\"lexical-editor-dialog\"}\n open={props.open}\n className={\"w-[900px] max-w-[900px] overflow-visible\"}\n data-hover-manager={\"ignore\"}\n title={`Edit ${props.input.label}`}\n dismissible={false}\n showCloseButton={false}\n actions={\n <>\n <Dialog.CancelAction onClick={props.onClose} />\n <Dialog.ConfirmAction\n text={\"Save Changes\"}\n onClick={() => {\n props.onChange(localValue);\n }}\n />\n </>\n }\n >\n <LexicalEditor.Expanded value={localValue} onChange={setLocalValue} />\n </Dialog>\n );\n};\n\nconst ExpandableLexicalInputRenderer = ({\n value,\n onChange,\n input,\n label\n}: LexicalInputRendererProps) => {\n const { isExpanded, setExpanded } = useExpandedEditor();\n\n const applyChanges = useCallback(\n (newValue: any) => {\n onChange(newValue);\n setExpanded(false);\n },\n [onChange, setExpanded]\n );\n\n return (\n <>\n <FormComponentLabel text={label} />\n <LexicalEditor.Compact value={value} onChange={onChange} key={input.name} />\n <EditorDialog\n open={isExpanded}\n value={value}\n onChange={applyChanges}\n onClose={() => setExpanded(false)}\n input={input}\n />\n </>\n );\n};\n"],"names":["LexicalInputRenderer","props","onChange","lexicalValue","value","ExpandedEditorProvider","ExpandableLexicalInputRenderer","EditorDialog","localValue","setLocalValue","useState","useEffect","Dialog","LexicalEditor","input","label","isExpanded","setExpanded","useExpandedEditor","applyChanges","useCallback","newValue","FormComponentLabel"],"mappings":";;;;AAcO,MAAMA,uBAAuB,CAACC;IACjC,MAAMC,WAAW,CAACC;QACdF,MAAM,QAAQ,CAAC,CAAC,EAAEG,KAAK,EAAE;YACrBA,MAAM,GAAG,CAACD;QACd;IACJ;IAEA,MAAMC,QAAQH,MAAM,KAAK,IAAI,CAAC;IAE9B,OAAO,WAAP,GACI,oBAACI,wBAAsBA,MAAAA,WAAAA,GACnB,oBAACC,gCAA8BA;QAAE,GAAGL,KAAK;QAAE,OAAOG;QAAO,UAAUF;;AAG/E;AAOA,MAAMK,eAAe,CAACN;IAClB,MAAM,CAACO,YAAYC,cAAc,GAAGC,SAAST,MAAM,KAAK;IAExDU,UAAU;QACNF,cAAcR,MAAM,KAAK;IAC7B,GAAG;QAACA,MAAM,KAAK;KAAC;IAEhB,OAAO,WAAP,GACI,oBAACW,QAAMA;QACH,IAAI;QACJ,MAAMX,MAAM,IAAI;QAChB,WAAW;QACX,sBAAoB;QACpB,OAAO,CAAC,KAAK,EAAEA,MAAM,KAAK,CAAC,KAAK,EAAE;QAClC,aAAa;QACb,iBAAiB;QACjB,uBACI,wDACI,oBAACW,OAAO,YAAY;YAAC,SAASX,MAAM,OAAO;0BAC3C,oBAACW,OAAO,aAAa;YACjB,MAAM;YACN,SAAS;gBACLX,MAAM,QAAQ,CAACO;YACnB;;qBAKZ,oBAACK,cAAc,QAAQ;QAAC,OAAOL;QAAY,UAAUC;;AAGjE;AAEA,MAAMH,iCAAiC,CAAC,EACpCF,KAAK,EACLF,QAAQ,EACRY,KAAK,EACLC,KAAK,EACmB;IACxB,MAAM,EAAEC,UAAU,EAAEC,WAAW,EAAE,GAAGC;IAEpC,MAAMC,eAAeC,YACjB,CAACC;QACGnB,SAASmB;QACTJ,YAAY;IAChB,GACA;QAACf;QAAUe;KAAY;IAG3B,OAAO,WAAP,GACI,wDACI,oBAACK,oBAAkBA;QAAC,MAAMP;sBAC1B,oBAACF,cAAc,OAAO;QAAC,OAAOT;QAAO,UAAUF;QAAU,KAAKY,MAAM,IAAI;sBACxE,oBAACP,cAAYA;QACT,MAAMS;QACN,OAAOZ;QACP,UAAUe;QACV,SAAS,IAAMF,YAAY;QAC3B,OAAOH;;AAIvB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computed, makeAutoObservable } from "mobx";
|
|
1
|
+
import { computed, makeAutoObservable, toJS } from "mobx";
|
|
2
2
|
import { FormModelFactory } from "@webiny/app-admin";
|
|
3
3
|
import { PageSettingsGroup, PageSettingsGroupModifier, PageSettingsPresenter } from "./abstractions.js";
|
|
4
4
|
class PageSettingsPresenterImpl {
|
|
@@ -40,7 +40,7 @@ class PageSettingsPresenterImpl {
|
|
|
40
40
|
if (!this.form || !this.originalData) return false;
|
|
41
41
|
const data = await this.form.submit();
|
|
42
42
|
if (!data) return false;
|
|
43
|
-
const doc = structuredClone(this.originalData);
|
|
43
|
+
const doc = structuredClone(toJS(this.originalData));
|
|
44
44
|
for (const group of this.groups)group.mapFromForm(data[group.name] ?? {}, doc);
|
|
45
45
|
for (const modifier of this.modifiers ?? [])if (modifier.mapFromForm) modifier.mapFromForm(data[modifier.group] ?? {}, doc);
|
|
46
46
|
return doc;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules/pages/PageEditor/PageSettings/PageSettingsPresenter.js","sources":["../../../../../src/modules/pages/PageEditor/PageSettings/PageSettingsPresenter.ts"],"sourcesContent":["import { makeAutoObservable, computed } from \"mobx\";\nimport { FormModelFactory, FormModel } from \"@webiny/app-admin\";\nimport { PageSettingsPresenter as PresenterAbstraction } from \"./abstractions.js\";\nimport { PageSettingsGroup } from \"./abstractions.js\";\nimport { PageSettingsGroupModifier } from \"./abstractions.js\";\n\ntype FieldsFactory = (\n fields: FormModelFactory.FieldBuilderRegistry\n) => Record<string, FormModelFactory.FieldBuilder>;\n\ntype LayoutFactory = (layout: FormModelFactory.LayoutBuilder) => FormModel.LayoutNodeBuilder[];\n\ninterface CollectedGroup {\n group: PageSettingsGroup.Interface;\n fieldsFns: FieldsFactory[];\n layoutFns: LayoutFactory[];\n}\n\nclass PageSettingsPresenterImpl implements PresenterAbstraction.Interface {\n private form: FormModel.Interface | null = null;\n private error: string | null = null;\n private originalData: PageSettingsGroup.PageDocument | null = null;\n\n constructor(\n private factory: FormModelFactory.Interface,\n private groups: PageSettingsGroup.Interface[],\n private modifiers: PageSettingsGroupModifier.Interface[] | undefined\n ) {\n makeAutoObservable(this, { vm: computed }, { autoBind: true });\n }\n\n get vm(): PresenterAbstraction.ViewModel {\n return {\n form: this.form ? this.form.vm : null,\n error: this.error\n };\n }\n\n init(data: PageSettingsGroup.PageDocument): void {\n this.error = null;\n this.originalData = data;\n\n this.form = this.buildForm();\n\n const mapped: Record<string, any> = {};\n for (const group of this.groups) {\n mapped[group.name] = group.mapToForm(data);\n }\n\n for (const modifier of this.modifiers ?? []) {\n if (modifier.mapToForm) {\n const modData = modifier.mapToForm(data);\n mapped[modifier.group] = { ...mapped[modifier.group], ...modData };\n }\n }\n\n this.form.setData(mapped);\n }\n\n async submit(): Promise<PageSettingsGroup.PageDocument | false> {\n if (!this.form || !this.originalData) {\n return false;\n }\n\n const data = await this.form.submit<Record<string, any>>();\n if (!data) {\n return false;\n }\n\n const doc = structuredClone(this.originalData);\n\n for (const group of this.groups) {\n group.mapFromForm(data[group.name] ?? {}, doc);\n }\n\n for (const modifier of this.modifiers ?? []) {\n if (modifier.mapFromForm) {\n modifier.mapFromForm(data[modifier.group] ?? {}, doc);\n }\n }\n\n return doc;\n }\n\n private collectGroups(): CollectedGroup[] {\n return this.groups.map(group => {\n const fieldsFns: FieldsFactory[] = [];\n const layoutFns: LayoutFactory[] = [];\n\n const builder: PageSettingsGroup.FormBuilder = {\n fields(fn: FieldsFactory) {\n fieldsFns.push(fn);\n },\n layout(fn: LayoutFactory) {\n layoutFns.push(fn);\n }\n };\n\n group.buildForm(builder);\n\n for (const modifier of this.modifiers ?? []) {\n if (modifier.group === group.name) {\n modifier.modifyForm(builder);\n }\n }\n\n return { group, fieldsFns, layoutFns };\n });\n }\n\n private buildForm() {\n const collected = this.collectGroups();\n\n return this.factory.create({\n fields: fields => {\n const result: Record<string, FormModelFactory.FieldBuilder> = {};\n for (const { group, fieldsFns } of collected) {\n if (fieldsFns.length === 0) {\n continue;\n }\n result[group.name] = fields\n .object()\n .label(group.label)\n .renderer(\"passthrough\")\n .fields(registry => {\n const merged: Record<string, FormModelFactory.FieldBuilder> = {};\n for (const fn of fieldsFns) {\n Object.assign(merged, fn(registry));\n }\n return merged;\n });\n }\n return result;\n },\n layout: layout => {\n if (collected.length === 0) {\n return [];\n }\n\n const tabsBuilder = layout.tabs(\"settings-tabs\").renderer(\"tabsVertical\");\n\n for (const { group, layoutFns } of collected) {\n tabsBuilder.tab(group.name, tab => {\n tab.label(group.label);\n if (group.description) {\n tab.description(group.description);\n }\n if (group.icon) {\n tab.icon(group.icon);\n }\n tab.layout(l => {\n if (layoutFns.length > 0) {\n return [\n l.object(group.name, inner => {\n return layoutFns.flatMap(fn => fn(inner));\n })\n ];\n }\n\n return [l.row(group.name)];\n });\n });\n }\n\n return [tabsBuilder];\n }\n });\n }\n}\n\nexport const PageSettingsPresenterRegistration = PresenterAbstraction.createImplementation({\n implementation: PageSettingsPresenterImpl,\n dependencies: [\n FormModelFactory,\n [PageSettingsGroup, { multiple: true }],\n [PageSettingsGroupModifier, { multiple: true, optional: true }]\n ]\n});\n"],"names":["PageSettingsPresenterImpl","factory","groups","modifiers","makeAutoObservable","computed","data","mapped","group","modifier","modData","doc","structuredClone","fieldsFns","layoutFns","builder","fn","collected","fields","result","registry","merged","Object","layout","tabsBuilder","tab","l","inner","PageSettingsPresenterRegistration","PresenterAbstraction","FormModelFactory","PageSettingsGroup","PageSettingsGroupModifier"],"mappings":";;;AAkBA,MAAMA;IAKF,YACYC,OAAmC,EACnCC,MAAqC,EACrCC,SAA4D,CACtE;aAHUF,OAAO,GAAPA;aACAC,MAAM,GAANA;aACAC,SAAS,GAATA;aAPJ,IAAI,GAA+B;aACnC,KAAK,GAAkB;aACvB,YAAY,GAA0C;QAO1DC,mBAAmB,IAAI,EAAE;YAAE,IAAIC;QAAS,GAAG;YAAE,UAAU;QAAK;IAChE;IAEA,IAAI,KAAqC;QACrC,OAAO;YACH,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG;YACjC,OAAO,IAAI,CAAC,KAAK;QACrB;IACJ;IAEA,KAAKC,IAAoC,EAAQ;QAC7C,IAAI,CAAC,KAAK,GAAG;QACb,IAAI,CAAC,YAAY,GAAGA;QAEpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS;QAE1B,MAAMC,SAA8B,CAAC;QACrC,KAAK,MAAMC,SAAS,IAAI,CAAC,MAAM,CAC3BD,MAAM,CAACC,MAAM,IAAI,CAAC,GAAGA,MAAM,SAAS,CAACF;QAGzC,KAAK,MAAMG,YAAY,IAAI,CAAC,SAAS,IAAI,EAAE,CACvC,IAAIA,SAAS,SAAS,EAAE;YACpB,MAAMC,UAAUD,SAAS,SAAS,CAACH;YACnCC,MAAM,CAACE,SAAS,KAAK,CAAC,GAAG;gBAAE,GAAGF,MAAM,CAACE,SAAS,KAAK,CAAC;gBAAE,GAAGC,OAAO;YAAC;QACrE;QAGJ,IAAI,CAAC,IAAI,CAAC,OAAO,CAACH;IACtB;IAEA,MAAM,SAA0D;QAC5D,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAChC,OAAO;QAGX,MAAMD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;QACnC,IAAI,CAACA,MACD,OAAO;QAGX,MAAMK,MAAMC,
|
|
1
|
+
{"version":3,"file":"modules/pages/PageEditor/PageSettings/PageSettingsPresenter.js","sources":["../../../../../src/modules/pages/PageEditor/PageSettings/PageSettingsPresenter.ts"],"sourcesContent":["import { makeAutoObservable, computed, toJS } from \"mobx\";\nimport { FormModelFactory, FormModel } from \"@webiny/app-admin\";\nimport { PageSettingsPresenter as PresenterAbstraction } from \"./abstractions.js\";\nimport { PageSettingsGroup } from \"./abstractions.js\";\nimport { PageSettingsGroupModifier } from \"./abstractions.js\";\n\ntype FieldsFactory = (\n fields: FormModelFactory.FieldBuilderRegistry\n) => Record<string, FormModelFactory.FieldBuilder>;\n\ntype LayoutFactory = (layout: FormModelFactory.LayoutBuilder) => FormModel.LayoutNodeBuilder[];\n\ninterface CollectedGroup {\n group: PageSettingsGroup.Interface;\n fieldsFns: FieldsFactory[];\n layoutFns: LayoutFactory[];\n}\n\nclass PageSettingsPresenterImpl implements PresenterAbstraction.Interface {\n private form: FormModel.Interface | null = null;\n private error: string | null = null;\n private originalData: PageSettingsGroup.PageDocument | null = null;\n\n constructor(\n private factory: FormModelFactory.Interface,\n private groups: PageSettingsGroup.Interface[],\n private modifiers: PageSettingsGroupModifier.Interface[] | undefined\n ) {\n makeAutoObservable(this, { vm: computed }, { autoBind: true });\n }\n\n get vm(): PresenterAbstraction.ViewModel {\n return {\n form: this.form ? this.form.vm : null,\n error: this.error\n };\n }\n\n init(data: PageSettingsGroup.PageDocument): void {\n this.error = null;\n this.originalData = data;\n\n this.form = this.buildForm();\n\n const mapped: Record<string, any> = {};\n for (const group of this.groups) {\n mapped[group.name] = group.mapToForm(data);\n }\n\n for (const modifier of this.modifiers ?? []) {\n if (modifier.mapToForm) {\n const modData = modifier.mapToForm(data);\n mapped[modifier.group] = { ...mapped[modifier.group], ...modData };\n }\n }\n\n this.form.setData(mapped);\n }\n\n async submit(): Promise<PageSettingsGroup.PageDocument | false> {\n if (!this.form || !this.originalData) {\n return false;\n }\n\n const data = await this.form.submit<Record<string, any>>();\n if (!data) {\n return false;\n }\n\n const doc = structuredClone(toJS(this.originalData));\n\n for (const group of this.groups) {\n group.mapFromForm(data[group.name] ?? {}, doc);\n }\n\n for (const modifier of this.modifiers ?? []) {\n if (modifier.mapFromForm) {\n modifier.mapFromForm(data[modifier.group] ?? {}, doc);\n }\n }\n\n return doc;\n }\n\n private collectGroups(): CollectedGroup[] {\n return this.groups.map(group => {\n const fieldsFns: FieldsFactory[] = [];\n const layoutFns: LayoutFactory[] = [];\n\n const builder: PageSettingsGroup.FormBuilder = {\n fields(fn: FieldsFactory) {\n fieldsFns.push(fn);\n },\n layout(fn: LayoutFactory) {\n layoutFns.push(fn);\n }\n };\n\n group.buildForm(builder);\n\n for (const modifier of this.modifiers ?? []) {\n if (modifier.group === group.name) {\n modifier.modifyForm(builder);\n }\n }\n\n return { group, fieldsFns, layoutFns };\n });\n }\n\n private buildForm() {\n const collected = this.collectGroups();\n\n return this.factory.create({\n fields: fields => {\n const result: Record<string, FormModelFactory.FieldBuilder> = {};\n for (const { group, fieldsFns } of collected) {\n if (fieldsFns.length === 0) {\n continue;\n }\n result[group.name] = fields\n .object()\n .label(group.label)\n .renderer(\"passthrough\")\n .fields(registry => {\n const merged: Record<string, FormModelFactory.FieldBuilder> = {};\n for (const fn of fieldsFns) {\n Object.assign(merged, fn(registry));\n }\n return merged;\n });\n }\n return result;\n },\n layout: layout => {\n if (collected.length === 0) {\n return [];\n }\n\n const tabsBuilder = layout.tabs(\"settings-tabs\").renderer(\"tabsVertical\");\n\n for (const { group, layoutFns } of collected) {\n tabsBuilder.tab(group.name, tab => {\n tab.label(group.label);\n if (group.description) {\n tab.description(group.description);\n }\n if (group.icon) {\n tab.icon(group.icon);\n }\n tab.layout(l => {\n if (layoutFns.length > 0) {\n return [\n l.object(group.name, inner => {\n return layoutFns.flatMap(fn => fn(inner));\n })\n ];\n }\n\n return [l.row(group.name)];\n });\n });\n }\n\n return [tabsBuilder];\n }\n });\n }\n}\n\nexport const PageSettingsPresenterRegistration = PresenterAbstraction.createImplementation({\n implementation: PageSettingsPresenterImpl,\n dependencies: [\n FormModelFactory,\n [PageSettingsGroup, { multiple: true }],\n [PageSettingsGroupModifier, { multiple: true, optional: true }]\n ]\n});\n"],"names":["PageSettingsPresenterImpl","factory","groups","modifiers","makeAutoObservable","computed","data","mapped","group","modifier","modData","doc","structuredClone","toJS","fieldsFns","layoutFns","builder","fn","collected","fields","result","registry","merged","Object","layout","tabsBuilder","tab","l","inner","PageSettingsPresenterRegistration","PresenterAbstraction","FormModelFactory","PageSettingsGroup","PageSettingsGroupModifier"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-website-builder",
|
|
3
|
-
"version": "6.4.0-beta.
|
|
3
|
+
"version": "6.4.0-beta.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -21,28 +21,28 @@
|
|
|
21
21
|
"@monaco-editor/react": "4.7.0",
|
|
22
22
|
"@svgr/webpack": "8.1.0",
|
|
23
23
|
"@types/react": "18.3.28",
|
|
24
|
-
"@webiny/admin-ui": "6.4.0-beta.
|
|
25
|
-
"@webiny/app": "6.4.0-beta.
|
|
26
|
-
"@webiny/app-aco": "6.4.0-beta.
|
|
27
|
-
"@webiny/app-admin": "6.4.0-beta.
|
|
28
|
-
"@webiny/app-headless-cms-common": "6.4.0-beta.
|
|
29
|
-
"@webiny/app-trash-bin": "6.4.0-beta.
|
|
30
|
-
"@webiny/app-utils": "6.4.0-beta.
|
|
24
|
+
"@webiny/admin-ui": "6.4.0-beta.3",
|
|
25
|
+
"@webiny/app": "6.4.0-beta.3",
|
|
26
|
+
"@webiny/app-aco": "6.4.0-beta.3",
|
|
27
|
+
"@webiny/app-admin": "6.4.0-beta.3",
|
|
28
|
+
"@webiny/app-headless-cms-common": "6.4.0-beta.3",
|
|
29
|
+
"@webiny/app-trash-bin": "6.4.0-beta.3",
|
|
30
|
+
"@webiny/app-utils": "6.4.0-beta.3",
|
|
31
31
|
"@webiny/di": "1.0.1",
|
|
32
|
-
"@webiny/error": "6.4.0-beta.
|
|
33
|
-
"@webiny/feature": "6.4.0-beta.
|
|
34
|
-
"@webiny/form": "6.4.0-beta.
|
|
35
|
-
"@webiny/icons": "6.4.0-beta.
|
|
36
|
-
"@webiny/languages": "6.4.0-beta.
|
|
37
|
-
"@webiny/lexical-converter": "6.4.0-beta.
|
|
38
|
-
"@webiny/lexical-editor": "6.4.0-beta.
|
|
39
|
-
"@webiny/lexical-nodes": "6.4.0-beta.
|
|
40
|
-
"@webiny/lexical-theme": "6.4.0-beta.
|
|
41
|
-
"@webiny/react-composition": "6.4.0-beta.
|
|
42
|
-
"@webiny/react-properties": "6.4.0-beta.
|
|
43
|
-
"@webiny/utils": "6.4.0-beta.
|
|
44
|
-
"@webiny/validation": "6.4.0-beta.
|
|
45
|
-
"@webiny/website-builder-sdk": "6.4.0-beta.
|
|
32
|
+
"@webiny/error": "6.4.0-beta.3",
|
|
33
|
+
"@webiny/feature": "6.4.0-beta.3",
|
|
34
|
+
"@webiny/form": "6.4.0-beta.3",
|
|
35
|
+
"@webiny/icons": "6.4.0-beta.3",
|
|
36
|
+
"@webiny/languages": "6.4.0-beta.3",
|
|
37
|
+
"@webiny/lexical-converter": "6.4.0-beta.3",
|
|
38
|
+
"@webiny/lexical-editor": "6.4.0-beta.3",
|
|
39
|
+
"@webiny/lexical-nodes": "6.4.0-beta.3",
|
|
40
|
+
"@webiny/lexical-theme": "6.4.0-beta.3",
|
|
41
|
+
"@webiny/react-composition": "6.4.0-beta.3",
|
|
42
|
+
"@webiny/react-properties": "6.4.0-beta.3",
|
|
43
|
+
"@webiny/utils": "6.4.0-beta.3",
|
|
44
|
+
"@webiny/validation": "6.4.0-beta.3",
|
|
45
|
+
"@webiny/website-builder-sdk": "6.4.0-beta.3",
|
|
46
46
|
"apollo-cache": "1.3.5",
|
|
47
47
|
"apollo-client": "2.6.10",
|
|
48
48
|
"apollo-link": "1.2.14",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@types/deep-equal": "1.0.4",
|
|
70
70
|
"@types/is-hotkey": "0.1.10",
|
|
71
|
-
"@webiny/build-tools": "6.4.0-beta.
|
|
71
|
+
"@webiny/build-tools": "6.4.0-beta.3",
|
|
72
72
|
"execa": "5.1.1",
|
|
73
73
|
"rimraf": "6.1.3",
|
|
74
74
|
"typescript": "6.0.3",
|
|
@@ -90,5 +90,5 @@
|
|
|
90
90
|
]
|
|
91
91
|
}
|
|
92
92
|
},
|
|
93
|
-
"gitHead": "
|
|
93
|
+
"gitHead": "2e58681d4344024bfb60e6180338e2f154ec87f0"
|
|
94
94
|
}
|