@webiny/app-website-builder 6.4.0-beta.2 → 6.4.0-beta.4
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/BaseEditor/components/DragPreview/DragCursorWrapper.d.ts +7 -0
- package/BaseEditor/components/DragPreview/DragCursorWrapper.js +17 -0
- package/BaseEditor/components/DragPreview/DragCursorWrapper.js.map +1 -0
- package/BaseEditor/components/DragPreview/DragPreview.js +37 -0
- package/BaseEditor/components/DragPreview/DragPreview.js.map +1 -0
- package/BaseEditor/components/DragPreview/index.d.ts +1 -0
- package/BaseEditor/components/DragPreview/index.js +1 -0
- package/BaseEditor/components/DragPreview/useDragPosition.d.ts +4 -0
- package/BaseEditor/components/DragPreview/useDragPosition.js +26 -0
- package/BaseEditor/components/DragPreview/useDragPosition.js.map +1 -0
- package/BaseEditor/components/Editor.js +1 -2
- package/BaseEditor/components/Editor.js.map +1 -1
- package/BaseEditor/config/EditorConfig.d.ts +4 -2
- package/BaseEditor/config/Layout.js +1 -1
- package/BaseEditor/config/Layout.js.map +1 -1
- package/BaseEditor/config/Sidebar/Layout.js +8 -14
- package/BaseEditor/config/Sidebar/Layout.js.map +1 -1
- package/BaseEditor/config/Sidebar/Sidebar.d.ts +1 -1
- package/BaseEditor/config/Sidebar/Sidebar.js +1 -1
- package/BaseEditor/config/Sidebar/Sidebar.js.map +1 -1
- package/BaseEditor/config/Sidebar/Tab.d.ts +2 -2
- package/BaseEditor/config/Sidebar/Tab.js +3 -3
- package/BaseEditor/config/Sidebar/Tab.js.map +1 -1
- package/BaseEditor/config/Toolbar/Layout.js +8 -14
- package/BaseEditor/config/Toolbar/Layout.js.map +1 -1
- package/BaseEditor/config/Toolbar/Tab.d.ts +10 -0
- package/BaseEditor/config/Toolbar/Tab.js +13 -0
- package/BaseEditor/config/Toolbar/Tab.js.map +1 -0
- package/BaseEditor/config/Toolbar/Toolbar.d.ts +1 -0
- package/BaseEditor/config/Toolbar/Toolbar.js +4 -2
- package/BaseEditor/config/Toolbar/Toolbar.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/AddressBar/AddressBar.js +1 -4
- package/BaseEditor/defaultConfig/Content/AddressBar/AddressBar.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/AddressBar/BreakpointSelector.js +20 -23
- package/BaseEditor/defaultConfig/Content/AddressBar/BreakpointSelector.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js +1 -1
- package/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Breadcrumbs/styles.js +2 -2
- package/BaseEditor/defaultConfig/Content/Breadcrumbs/styles.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/ContentPreviewConfig.js +6 -1
- package/BaseEditor/defaultConfig/Content/ContentPreviewConfig.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/DropZoneManager.d.ts +3 -0
- package/BaseEditor/defaultConfig/Content/Preview/DropZoneManager.js +6 -0
- package/BaseEditor/defaultConfig/Content/Preview/DropZoneManager.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/Iframe.js +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/Iframe.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/Overlays/ElementOverlay.js +10 -6
- package/BaseEditor/defaultConfig/Content/Preview/Overlays/ElementOverlay.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/Preview.js +2 -1
- package/BaseEditor/defaultConfig/Content/Preview/Preview.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js +12 -2
- package/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/PreviewEvents.js +1 -2
- package/BaseEditor/defaultConfig/Content/Preview/PreviewEvents.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/useResponsiveContainer.js +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/useResponsiveContainer.js.map +1 -1
- package/BaseEditor/defaultConfig/DefaultEditorConfig.js +3 -5
- package/BaseEditor/defaultConfig/DefaultEditorConfig.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementPreview.d.ts +7 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementPreview.js +23 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementPreview.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementInputs.js +12 -3
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementInputs.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js +6 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/useBindingsForElement.d.ts +5 -5
- package/BaseEditor/defaultConfig/Sidebar/InfoMessage.js +2 -2
- package/BaseEditor/defaultConfig/Sidebar/InfoMessage.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/InheritanceLabel.js +2 -0
- package/BaseEditor/defaultConfig/Sidebar/InheritanceLabel.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/SidebarEmptyState.d.ts +4 -0
- package/BaseEditor/defaultConfig/Sidebar/SidebarEmptyState.js +12 -0
- package/BaseEditor/defaultConfig/Sidebar/SidebarEmptyState.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundColor.js +8 -5
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundColor.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.js +11 -9
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundPosition.js +7 -4
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundPosition.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundScaling.js +7 -4
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundScaling.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background.js +8 -4
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/Border.js +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/Border.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderColor.js +7 -4
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderColor.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderRadius.js +11 -14
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderRadius.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderStyle.js +7 -4
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderStyle.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderWidth.js +11 -14
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderWidth.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border.js +6 -9
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/Alignment.js +8 -5
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/Alignment.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/LengthWithUnitInput.js +9 -8
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/LengthWithUnitInput.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout.js +8 -4
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/LinkedEditing.js +1 -5
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/LinkedEditing.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Margin.js +10 -21
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Margin.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/MarginPadding.js +2 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/MarginPadding.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Padding.js +13 -16
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Padding.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding.js +6 -9
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Visibility/Visibility.js +21 -7
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Visibility/Visibility.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/VisibilityGroup.js +4 -3
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/VisibilityGroup.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/SidebarRow.d.ts +8 -0
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/SidebarRow.js +24 -0
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/SidebarRow.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleAccordion.d.ts +8 -0
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleAccordion.js +11 -0
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleAccordion.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleAccordionItem.d.ts +9 -0
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleAccordionItem.js +45 -0
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleAccordionItem.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleProperties.js +8 -3
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleProperties.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleSettingsGroup.js +8 -7
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleSettingsGroup.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StylesStore.js +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StylesStore.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/UnitValuePicker.js +3 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/UnitValuePicker.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/ValueSelector.js +9 -8
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/ValueSelector.js.map +1 -1
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/GridItem.d.ts +5 -0
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/GridItem.js +24 -0
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/GridItem.js.map +1 -0
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/GroupItemsGrid.d.ts +7 -0
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/GroupItemsGrid.js +18 -0
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/GroupItemsGrid.js.map +1 -0
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/GroupItemsList.d.ts +7 -0
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/GroupItemsList.js +18 -0
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/GroupItemsList.js.map +1 -0
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/InsertElements.js +72 -36
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/InsertElements.js.map +1 -1
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/InsertElementsTab.js +6 -7
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/InsertElementsTab.js.map +1 -1
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/ListItem.d.ts +5 -0
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/ListItem.js +23 -0
- package/BaseEditor/defaultConfig/Toolbar/InsertElements/ListItem.js.map +1 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/ElementActions.d.ts +4 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/ElementActions.js +29 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/ElementActions.js.map +1 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/LayoutIllustration.d.ts +2 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/LayoutIllustration.js +94 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/LayoutIllustration.js.map +1 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.js +12 -111
- package/BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.js.map +1 -1
- package/BaseEditor/defaultConfig/Toolbar/Navigator/NavigatorEmptyState.d.ts +2 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/NavigatorEmptyState.js +20 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/NavigatorEmptyState.js.map +1 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/NavigatorTab.js +6 -7
- package/BaseEditor/defaultConfig/Toolbar/Navigator/NavigatorTab.js.map +1 -1
- package/BaseEditor/defaultConfig/Toolbar/Navigator/Placeholder.d.ts +7 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/Placeholder.js +16 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/Placeholder.js.map +1 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/navigatorUtils.d.ts +32 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/navigatorUtils.js +70 -0
- package/BaseEditor/defaultConfig/Toolbar/Navigator/navigatorUtils.js.map +1 -0
- package/BaseEditor/hooks/useCreateElement.d.ts +1 -1
- package/BaseEditor/hooks/useCreateElement.js +1 -3
- package/BaseEditor/hooks/useCreateElement.js.map +1 -1
- package/ecommerce/EcommerceIntegration.js +1 -1
- package/ecommerce/EcommerceIntegration.js.map +1 -1
- package/ecommerce/components/ResourcePage.d.ts +1 -1
- package/ecommerce/components/ResourcePage.js +1 -1
- package/ecommerce/components/ResourcePage.js.map +1 -1
- package/exports/admin/website-builder/lexical.d.ts +18 -17
- package/exports/admin/website-builder/lexical.js +3 -2
- package/features/ecommerce/apis/useEcommerceApi.js +3 -1
- package/features/ecommerce/apis/useEcommerceApi.js.map +1 -1
- package/inputRenderers/BooleanInput.js +15 -4
- package/inputRenderers/BooleanInput.js.map +1 -1
- package/inputRenderers/FileInput.js.map +1 -1
- package/inputRenderers/LexicalInput/DefaultLexicalConfig.js +4 -1
- package/inputRenderers/LexicalInput/DefaultLexicalConfig.js.map +1 -1
- package/inputRenderers/LexicalInput/ExpandEditorAction.js +4 -1
- package/inputRenderers/LexicalInput/ExpandEditorAction.js.map +1 -1
- package/inputRenderers/LexicalInput/LexicalEditor.d.ts +4 -1
- package/inputRenderers/LexicalInput/LexicalEditor.js +13 -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 +5 -9
- package/inputRenderers/LexicalInput/LexicalInput.js.map +1 -1
- package/inputRenderers/LexicalInput/wbStaticToolbar.css +1 -1
- package/inputRenderers/TextInput.js +3 -1
- package/inputRenderers/TextInput.js.map +1 -1
- package/modules/pages/PageEditor/PageEditorConfig.d.ts +4 -2
- package/modules/pages/PageEditor/PageSettings/PageSettingsPresenter.js +2 -2
- package/modules/pages/PageEditor/PageSettings/PageSettingsPresenter.js.map +1 -1
- package/package.json +31 -29
- package/BaseEditor/components/DragPreview.js +0 -59
- package/BaseEditor/components/DragPreview.js.map +0 -1
- package/ecommerce/components/adaptInputToBind.d.ts +0 -6
- package/ecommerce/components/adaptInputToBind.js +0 -26
- package/ecommerce/components/adaptInputToBind.js.map +0 -1
- /package/BaseEditor/components/{DragPreview.d.ts → DragPreview/DragPreview.d.ts} +0 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
const LayoutIllustration = ()=>/*#__PURE__*/ react.createElement("svg", {
|
|
3
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
4
|
+
width: "104",
|
|
5
|
+
height: "86",
|
|
6
|
+
viewBox: "0 0 104 86",
|
|
7
|
+
fill: "none"
|
|
8
|
+
}, /*#__PURE__*/ react.createElement("g", {
|
|
9
|
+
filter: "url(#filter0_d_6405_31803)"
|
|
10
|
+
}, /*#__PURE__*/ react.createElement("path", {
|
|
11
|
+
d: "M7.01172 11.7C7.01172 8.55198 9.5637 6 12.7117 6H90.3742C93.5222 6 96.0742 8.55198 96.0742 11.7V71.55C96.0742 74.698 93.5222 77.25 90.3742 77.25H12.7117C9.56369 77.25 7.01172 74.698 7.01172 71.55V11.7Z",
|
|
12
|
+
fill: "white"
|
|
13
|
+
})), /*#__PURE__*/ react.createElement("ellipse", {
|
|
14
|
+
cx: "14.8105",
|
|
15
|
+
cy: "13.4043",
|
|
16
|
+
rx: "1.76361",
|
|
17
|
+
ry: "1.78125",
|
|
18
|
+
fill: "#FA5723"
|
|
19
|
+
}), /*#__PURE__*/ react.createElement("ellipse", {
|
|
20
|
+
cx: "20.5429",
|
|
21
|
+
cy: "13.4043",
|
|
22
|
+
rx: "1.76361",
|
|
23
|
+
ry: "1.78125",
|
|
24
|
+
fill: "#FA5723"
|
|
25
|
+
}), /*#__PURE__*/ react.createElement("ellipse", {
|
|
26
|
+
cx: "26.7148",
|
|
27
|
+
cy: "13.4043",
|
|
28
|
+
rx: "1.76361",
|
|
29
|
+
ry: "1.78125",
|
|
30
|
+
fill: "#FA5723"
|
|
31
|
+
}), /*#__PURE__*/ react.createElement("rect", {
|
|
32
|
+
x: "15.1016",
|
|
33
|
+
y: "23.0527",
|
|
34
|
+
width: "23.8155",
|
|
35
|
+
height: "45.9626",
|
|
36
|
+
rx: "1.4012",
|
|
37
|
+
fill: "#F0F1F3"
|
|
38
|
+
}), /*#__PURE__*/ react.createElement("rect", {
|
|
39
|
+
x: "43.0762",
|
|
40
|
+
y: "23.0527",
|
|
41
|
+
width: "44.814",
|
|
42
|
+
height: "21.4722",
|
|
43
|
+
rx: "1.4012",
|
|
44
|
+
fill: "#F0F1F3"
|
|
45
|
+
}), /*#__PURE__*/ react.createElement("rect", {
|
|
46
|
+
x: "43.0762",
|
|
47
|
+
y: "47.873",
|
|
48
|
+
width: "20.7899",
|
|
49
|
+
height: "21.1422",
|
|
50
|
+
rx: "1.4012",
|
|
51
|
+
fill: "#F0F1F3"
|
|
52
|
+
}), /*#__PURE__*/ react.createElement("rect", {
|
|
53
|
+
x: "67.0996",
|
|
54
|
+
y: "47.873",
|
|
55
|
+
width: "20.7899",
|
|
56
|
+
height: "21.1422",
|
|
57
|
+
rx: "1.4012",
|
|
58
|
+
fill: "#F0F1F3"
|
|
59
|
+
}), /*#__PURE__*/ react.createElement("defs", null, /*#__PURE__*/ react.createElement("filter", {
|
|
60
|
+
id: "filter0_d_6405_31803",
|
|
61
|
+
x: "0.000718594",
|
|
62
|
+
y: "-7.95126e-05",
|
|
63
|
+
width: "103.085",
|
|
64
|
+
height: "85.272",
|
|
65
|
+
filterUnits: "userSpaceOnUse",
|
|
66
|
+
colorInterpolationFilters: "sRGB"
|
|
67
|
+
}, /*#__PURE__*/ react.createElement("feFlood", {
|
|
68
|
+
floodOpacity: "0",
|
|
69
|
+
result: "BackgroundImageFix"
|
|
70
|
+
}), /*#__PURE__*/ react.createElement("feColorMatrix", {
|
|
71
|
+
in: "SourceAlpha",
|
|
72
|
+
type: "matrix",
|
|
73
|
+
values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
|
|
74
|
+
result: "hardAlpha"
|
|
75
|
+
}), /*#__PURE__*/ react.createElement("feOffset", {
|
|
76
|
+
dy: "1.01092"
|
|
77
|
+
}), /*#__PURE__*/ react.createElement("feGaussianBlur", {
|
|
78
|
+
stdDeviation: "3.5055"
|
|
79
|
+
}), /*#__PURE__*/ react.createElement("feColorMatrix", {
|
|
80
|
+
type: "matrix",
|
|
81
|
+
values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
|
|
82
|
+
}), /*#__PURE__*/ react.createElement("feBlend", {
|
|
83
|
+
mode: "normal",
|
|
84
|
+
in2: "BackgroundImageFix",
|
|
85
|
+
result: "effect1_dropShadow_6405_31803"
|
|
86
|
+
}), /*#__PURE__*/ react.createElement("feBlend", {
|
|
87
|
+
mode: "normal",
|
|
88
|
+
in: "SourceGraphic",
|
|
89
|
+
in2: "effect1_dropShadow_6405_31803",
|
|
90
|
+
result: "shape"
|
|
91
|
+
}))));
|
|
92
|
+
export { LayoutIllustration };
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=LayoutIllustration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Toolbar/Navigator/LayoutIllustration.js","sources":["../../../../../src/BaseEditor/defaultConfig/Toolbar/Navigator/LayoutIllustration.tsx"],"sourcesContent":["import React from \"react\";\n\nexport const LayoutIllustration = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"104\"\n height=\"86\"\n viewBox=\"0 0 104 86\"\n fill=\"none\"\n >\n <g filter=\"url(#filter0_d_6405_31803)\">\n <path\n d=\"M7.01172 11.7C7.01172 8.55198 9.5637 6 12.7117 6H90.3742C93.5222 6 96.0742 8.55198 96.0742 11.7V71.55C96.0742 74.698 93.5222 77.25 90.3742 77.25H12.7117C9.56369 77.25 7.01172 74.698 7.01172 71.55V11.7Z\"\n fill=\"white\"\n />\n </g>\n <ellipse cx=\"14.8105\" cy=\"13.4043\" rx=\"1.76361\" ry=\"1.78125\" fill=\"#FA5723\" />\n <ellipse cx=\"20.5429\" cy=\"13.4043\" rx=\"1.76361\" ry=\"1.78125\" fill=\"#FA5723\" />\n <ellipse cx=\"26.7148\" cy=\"13.4043\" rx=\"1.76361\" ry=\"1.78125\" fill=\"#FA5723\" />\n <rect x=\"15.1016\" y=\"23.0527\" width=\"23.8155\" height=\"45.9626\" rx=\"1.4012\" fill=\"#F0F1F3\" />\n <rect x=\"43.0762\" y=\"23.0527\" width=\"44.814\" height=\"21.4722\" rx=\"1.4012\" fill=\"#F0F1F3\" />\n <rect x=\"43.0762\" y=\"47.873\" width=\"20.7899\" height=\"21.1422\" rx=\"1.4012\" fill=\"#F0F1F3\" />\n <rect x=\"67.0996\" y=\"47.873\" width=\"20.7899\" height=\"21.1422\" rx=\"1.4012\" fill=\"#F0F1F3\" />\n <defs>\n <filter\n id=\"filter0_d_6405_31803\"\n x=\"0.000718594\"\n y=\"-7.95126e-05\"\n width=\"103.085\"\n height=\"85.272\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"1.01092\" />\n <feGaussianBlur stdDeviation=\"3.5055\" />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\" />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_6405_31803\"\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_6405_31803\"\n result=\"shape\"\n />\n </filter>\n </defs>\n </svg>\n);\n"],"names":["LayoutIllustration"],"mappings":";AAEO,MAAMA,qBAAqB,kBAC9B,oBAAC;QACG,OAAM;QACN,OAAM;QACN,QAAO;QACP,SAAQ;QACR,MAAK;qBAEL,oBAAC;QAAE,QAAO;qBACN,oBAAC;QACG,GAAE;QACF,MAAK;uBAGb,oBAAC;QAAQ,IAAG;QAAU,IAAG;QAAU,IAAG;QAAU,IAAG;QAAU,MAAK;sBAClE,oBAAC;QAAQ,IAAG;QAAU,IAAG;QAAU,IAAG;QAAU,IAAG;QAAU,MAAK;sBAClE,oBAAC;QAAQ,IAAG;QAAU,IAAG;QAAU,IAAG;QAAU,IAAG;QAAU,MAAK;sBAClE,oBAAC;QAAK,GAAE;QAAU,GAAE;QAAU,OAAM;QAAU,QAAO;QAAU,IAAG;QAAS,MAAK;sBAChF,oBAAC;QAAK,GAAE;QAAU,GAAE;QAAU,OAAM;QAAS,QAAO;QAAU,IAAG;QAAS,MAAK;sBAC/E,oBAAC;QAAK,GAAE;QAAU,GAAE;QAAS,OAAM;QAAU,QAAO;QAAU,IAAG;QAAS,MAAK;sBAC/E,oBAAC;QAAK,GAAE;QAAU,GAAE;QAAS,OAAM;QAAU,QAAO;QAAU,IAAG;QAAS,MAAK;sBAC/E,oBAAC,4BACG,oBAAC;QACG,IAAG;QACH,GAAE;QACF,GAAE;QACF,OAAM;QACN,QAAO;QACP,aAAY;QACZ,2BAA0B;qBAE1B,oBAAC;QAAQ,cAAa;QAAI,QAAO;sBACjC,oBAAC;QACG,IAAG;QACH,MAAK;QACL,QAAO;QACP,QAAO;sBAEX,oBAAC;QAAS,IAAG;sBACb,oBAAC;QAAe,cAAa;sBAC7B,oBAAC;QAAc,MAAK;QAAS,QAAO;sBACpC,oBAAC;QACG,MAAK;QACL,KAAI;QACJ,QAAO;sBAEX,oBAAC;QACG,MAAK;QACL,IAAG;QACH,KAAI;QACJ,QAAO"}
|
|
@@ -1,79 +1,14 @@
|
|
|
1
1
|
import react, { useCallback, useMemo } from "react";
|
|
2
|
-
import get from "lodash/get.js";
|
|
3
2
|
import { observer } from "mobx-react-lite";
|
|
4
|
-
import {
|
|
5
|
-
import { ReactComponent } from "@webiny/icons/visibility_off.svg";
|
|
3
|
+
import { ScrollArea, Tree } from "@webiny/admin-ui";
|
|
6
4
|
import { useActiveElement } from "../../../hooks/useActiveElement.js";
|
|
7
5
|
import { useSelectFromEditor } from "../../../hooks/useSelectFromEditor.js";
|
|
8
6
|
import { useDocumentEditor } from "../../../../DocumentEditor/index.js";
|
|
9
7
|
import { Commands } from "../../../index.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
const result = [];
|
|
15
|
-
const asArray = Object.values(elements);
|
|
16
|
-
for(const key in elements){
|
|
17
|
-
const node = elements[key];
|
|
18
|
-
if (node.parent) result.push({
|
|
19
|
-
id: node.id,
|
|
20
|
-
label: node.label,
|
|
21
|
-
parentId: node.parent.id,
|
|
22
|
-
active: node.id === activeElementId,
|
|
23
|
-
droppable: asArray.filter((el)=>el.parent?.id === node.id).length > 0,
|
|
24
|
-
data: {
|
|
25
|
-
parent: node.parent,
|
|
26
|
-
icon: node.image ? /*#__PURE__*/ react.createElement(InlineSvg, {
|
|
27
|
-
src: node.image,
|
|
28
|
-
className: "fill-neutral-strong"
|
|
29
|
-
}) : /*#__PURE__*/ react.createElement(react.Fragment, null),
|
|
30
|
-
draggable: node.canDrag
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
return result;
|
|
35
|
-
}
|
|
36
|
-
function getElementNodeData({ components, elements, bindings }) {
|
|
37
|
-
const getIndex = (elementId, parentId, slot)=>{
|
|
38
|
-
const elementBindings = bindings[parentId];
|
|
39
|
-
if (!elementBindings) return -1;
|
|
40
|
-
const slotValue = get(elementBindings, `inputs.${slot}`);
|
|
41
|
-
if (!slotValue) return -1;
|
|
42
|
-
if (slotValue.list) return slotValue.static.indexOf(elementId);
|
|
43
|
-
return -1;
|
|
44
|
-
};
|
|
45
|
-
return Object.values(elements).reduce((acc, element)=>{
|
|
46
|
-
if ("root" === element.id) return {
|
|
47
|
-
...acc,
|
|
48
|
-
[element.id]: {
|
|
49
|
-
id: element.id,
|
|
50
|
-
label: "Root",
|
|
51
|
-
image: ""
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
const component = components[element.component.name] ?? {
|
|
55
|
-
label: "",
|
|
56
|
-
image: null,
|
|
57
|
-
canDrag: false
|
|
58
|
-
};
|
|
59
|
-
const parentId = element.parent.id;
|
|
60
|
-
const slot = element.parent.slot;
|
|
61
|
-
return {
|
|
62
|
-
...acc,
|
|
63
|
-
[element.id]: {
|
|
64
|
-
id: element.id,
|
|
65
|
-
label: component?.label ?? component?.name ?? "",
|
|
66
|
-
image: component.image,
|
|
67
|
-
canDrag: component.canDrag,
|
|
68
|
-
parent: {
|
|
69
|
-
id: parentId,
|
|
70
|
-
slot,
|
|
71
|
-
index: getIndex(element.id, parentId, slot)
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
}, {});
|
|
76
|
-
}
|
|
8
|
+
import { NavigatorEmptyState } from "./NavigatorEmptyState.js";
|
|
9
|
+
import { Placeholder } from "./Placeholder.js";
|
|
10
|
+
import { ElementActions } from "./ElementActions.js";
|
|
11
|
+
import { flattenElements, getElementNodeData } from "./navigatorUtils.js";
|
|
77
12
|
const Navigator = observer(()=>{
|
|
78
13
|
const editor = useDocumentEditor();
|
|
79
14
|
const [activeElement] = useActiveElement();
|
|
@@ -133,10 +68,10 @@ const Navigator = observer(()=>{
|
|
|
133
68
|
}, /*#__PURE__*/ react.createElement(ElementActions, {
|
|
134
69
|
elementId: node.id
|
|
135
70
|
})));
|
|
136
|
-
if (Object.keys(elementNodes).length <= 1) return /*#__PURE__*/ react.createElement(
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
71
|
+
if (Object.keys(elementNodes).length <= 1) return /*#__PURE__*/ react.createElement(NavigatorEmptyState, null);
|
|
72
|
+
return /*#__PURE__*/ react.createElement(ScrollArea, {
|
|
73
|
+
className: "h-full pt-xs"
|
|
74
|
+
}, /*#__PURE__*/ react.createElement(Tree, {
|
|
140
75
|
key: treeKey,
|
|
141
76
|
autoExpandOnDragOver: false,
|
|
142
77
|
insertDroppableFirst: false,
|
|
@@ -147,8 +82,8 @@ const Navigator = observer(()=>{
|
|
|
147
82
|
defaultOpenNodeIds: activeAncestors,
|
|
148
83
|
dropTargetOffset: 5,
|
|
149
84
|
placeholderRender: (node, { depth })=>/*#__PURE__*/ react.createElement(Placeholder, {
|
|
150
|
-
|
|
151
|
-
|
|
85
|
+
node: node,
|
|
86
|
+
depth: depth
|
|
152
87
|
}),
|
|
153
88
|
onDrop: (newTree, { dragSource })=>{
|
|
154
89
|
if (!dragSource || !dragSource.data) return;
|
|
@@ -167,42 +102,8 @@ const Navigator = observer(()=>{
|
|
|
167
102
|
if (dragSource?.parentId === dropTargetId) return true;
|
|
168
103
|
return false;
|
|
169
104
|
}
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
const Placeholder = (props)=>/*#__PURE__*/ react.createElement("div", {
|
|
173
|
-
className: "bg-primary",
|
|
174
|
-
style: {
|
|
175
|
-
height: 2,
|
|
176
|
-
zIndex: 999,
|
|
177
|
-
position: "absolute",
|
|
178
|
-
right: 0,
|
|
179
|
-
transform: "translateY(-50%)",
|
|
180
|
-
top: -2,
|
|
181
|
-
left: 24 * props.depth
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
const ElementActions = ({ elementId })=>{
|
|
185
|
-
const { styles, onChange } = useStyles(elementId);
|
|
186
|
-
const isVisible = "none" !== styles.display;
|
|
187
|
-
const unhideElement = ()=>{
|
|
188
|
-
onChange(({ styles })=>{
|
|
189
|
-
styles.set("display", "flex");
|
|
190
|
-
});
|
|
191
|
-
};
|
|
192
|
-
if (isVisible) return null;
|
|
193
|
-
return /*#__PURE__*/ react.createElement("div", {
|
|
194
|
-
className: "flex"
|
|
195
|
-
}, /*#__PURE__*/ react.createElement(Tooltip, {
|
|
196
|
-
trigger: /*#__PURE__*/ react.createElement(Tree.Item.Icon, {
|
|
197
|
-
size: "sm",
|
|
198
|
-
className: "cursor-pointer",
|
|
199
|
-
element: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
200
|
-
label: "This element is hidden.",
|
|
201
|
-
onClick: unhideElement
|
|
202
|
-
}),
|
|
203
|
-
content: "This element is hidden. Click to unhide."
|
|
204
105
|
}));
|
|
205
|
-
};
|
|
106
|
+
});
|
|
206
107
|
export { Navigator };
|
|
207
108
|
|
|
208
109
|
//# sourceMappingURL=Navigator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.js","sources":["../../../../../src/BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.tsx"],"sourcesContent":["import React, { useMemo, useCallback } from \"react\";\nimport get from \"lodash/get.js\";\nimport { observer } from \"mobx-react-lite\";\nimport { type NodeDto, Tree, type TreeProps, Tooltip } from \"@webiny/admin-ui\";\nimport { ReactComponent as VisibilityNone } from \"@webiny/icons/visibility_off.svg\";\nimport type { Document } from \"@webiny/website-builder-sdk\";\nimport { useActiveElement } from \"~/BaseEditor/hooks/useActiveElement.js\";\nimport { useSelectFromEditor } from \"~/BaseEditor/hooks/useSelectFromEditor.js\";\nimport type { EditorState } from \"~/editorSdk/Editor.js\";\nimport { useDocumentEditor } from \"~/DocumentEditor/index.js\";\nimport { Commands } from \"~/BaseEditor/index.js\";\nimport { InlineSvg } from \"~/BaseEditor/defaultConfig/Toolbar/InsertElements/InlineSvg.js\";\nimport { InfoMessage } from \"~/BaseEditor/defaultConfig/Sidebar/InfoMessage.js\";\nimport { useStyles } from \"~/BaseEditor/hooks/useStyles.js\";\n\n// Node type for the Tree component.\ntype ElementNode = NodeDto<{\n draggable: boolean;\n icon: React.ReactNode;\n parent: {\n id: string;\n slot: string;\n index: number;\n };\n}>;\n\n// Element data extracted from the Document state.\ntype ElementNodeData = {\n id: string;\n label: string;\n image: string;\n canDrag: boolean;\n parent: {\n id: string;\n slot: string;\n index: number;\n };\n};\n\nfunction flattenElements(elements: Record<string, ElementNodeData>, activeElementId?: string) {\n const result: ElementNode[] = [];\n const asArray = Object.values(elements);\n\n for (const key in elements) {\n const node = elements[key];\n\n // Skip root element.\n if (!node.parent) {\n continue;\n }\n\n result.push({\n id: node.id,\n label: node.label,\n parentId: node.parent.id,\n active: node.id === activeElementId,\n droppable: asArray.filter(el => el.parent?.id === node.id).length > 0,\n data: {\n parent: node.parent,\n icon: node.image ? (\n <InlineSvg src={node.image} className={\"fill-neutral-strong\"} />\n ) : (\n <></>\n ),\n draggable: node.canDrag\n }\n });\n }\n\n return result;\n}\n\ninterface GetElementNodeDataParams {\n components: EditorState[\"components\"];\n elements: Document[\"elements\"];\n bindings: Document[\"bindings\"];\n}\n\nfunction getElementNodeData({\n components,\n elements,\n bindings\n}: GetElementNodeDataParams): Record<string, ElementNodeData> {\n const getIndex = (elementId: string, parentId: string, slot: string) => {\n const elementBindings = bindings[parentId];\n if (!elementBindings) {\n return -1;\n }\n\n const slotValue = get(elementBindings, `inputs.${slot}`);\n if (!slotValue) {\n return -1;\n }\n\n if (slotValue.list) {\n return slotValue.static.indexOf(elementId);\n }\n\n return -1;\n };\n\n return Object.values(elements).reduce((acc, element) => {\n if (element.id === \"root\") {\n return {\n ...acc,\n [element.id]: {\n id: element.id,\n label: \"Root\",\n image: \"\"\n }\n };\n }\n\n const component = components[element.component.name] ?? {\n label: \"\",\n image: null,\n canDrag: false\n };\n\n const parentId = element.parent!.id;\n const slot = element.parent!.slot;\n\n return {\n ...acc,\n [element.id]: {\n id: element.id,\n label: component?.label ?? component?.name ?? \"\",\n image: component.image,\n canDrag: component.canDrag,\n parent: {\n id: parentId,\n slot,\n index: getIndex(element.id, parentId, slot)\n }\n }\n };\n }, {});\n}\n\nexport const Navigator = observer(() => {\n const editor = useDocumentEditor();\n const [activeElement] = useActiveElement();\n\n const document = editor.getDocumentState().read();\n const elements = document.elements;\n const bindings = document.bindings;\n const treeKey = document.id;\n\n const components = useSelectFromEditor(state => {\n return state.components;\n });\n\n const elementNodes = getElementNodeData({ components, elements, bindings });\n\n const activeAncestors = useMemo(() => {\n if (!activeElement) {\n return [];\n }\n\n const ancestors: string[] = [activeElement.id];\n let parent = elementNodes[activeElement.id].parent;\n while (parent) {\n ancestors.push(parent.id);\n parent = elementNodes[parent.id].parent;\n }\n return ancestors.reverse();\n }, [elementNodes, activeElement]);\n\n const nodes = useMemo(() => {\n return flattenElements(elementNodes, activeElement?.id).sort((a, b) => {\n return a.data!.parent.index - b.data!.parent.index;\n });\n }, [elementNodes, activeElement]);\n\n const highlightElement = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n const nodeId = e.currentTarget.getAttribute(\"data-node-id\");\n\n if (nodeId) {\n editor.executeCommand(Commands.HighlightElement, { id: nodeId });\n }\n }, []);\n\n const activateElement = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n const nodeId = e.currentTarget.getAttribute(\"data-node-id\");\n\n if (nodeId) {\n editor.executeCommand(Commands.SelectElement, { id: nodeId });\n }\n }, []);\n\n const renderer: TreeProps[\"renderer\"] = node => {\n return (\n <Tree.Item.Content\n data-node-id={node.id}\n onMouseOver={highlightElement}\n onClick={activateElement}\n >\n <Tree.Item.Icon label={node.label} element={node.icon} size={\"sm\"} />\n {node.label}\n <div className={\"flex w-full justify-end\"}>\n <ElementActions elementId={node.id} />\n </div>\n </Tree.Item.Content>\n );\n };\n\n if (Object.keys(elementNodes).length <= 1) {\n return <InfoMessage message={\"No elements to display.\"} />;\n }\n\n return (\n <Tree\n key={treeKey}\n autoExpandOnDragOver={false}\n insertDroppableFirst={false}\n nodes={nodes}\n rootId={\"root\"}\n renderer={renderer}\n sort={false}\n defaultOpenNodeIds={activeAncestors}\n dropTargetOffset={5}\n placeholderRender={(node, { depth }) => {\n return <Placeholder depth={depth} node={node} />;\n }}\n onDrop={(newTree, { dragSource }) => {\n if (!dragSource || !dragSource.data) {\n return;\n }\n\n const parent = dragSource.data.parent;\n\n const sameLevelNodes = newTree.filter(n => n.parentId === dragSource.parentId);\n const newIndex = sameLevelNodes.findIndex(n => n.id === dragSource.id);\n editor.executeCommand(Commands.MoveElement, {\n elementId: dragSource.id,\n parentId: parent.id,\n slot: parent.slot,\n index: newIndex\n });\n }}\n canDrag={node => node.data?.draggable ?? true}\n canDrop={(_, { dragSource, dropTargetId }) => {\n // Only allow dropping within the same parent (for now).\n if (dragSource?.parentId === dropTargetId) {\n return true;\n }\n return false;\n }}\n />\n );\n});\n\ntype PlaceholderProps = {\n node: any;\n depth: number;\n};\n\nconst Placeholder = (props: PlaceholderProps) => (\n <div\n className={\"bg-primary\"}\n style={{\n height: 2,\n zIndex: 999,\n position: \"absolute\",\n right: 0,\n transform: \"translateY(-50%)\",\n top: -2,\n left: props.depth * 24\n }}\n ></div>\n);\n\nconst ElementActions = ({ elementId }: { elementId: string }) => {\n const { styles, onChange } = useStyles(elementId);\n\n const isVisible = styles.display !== \"none\";\n\n const unhideElement = () => {\n onChange(({ styles }) => {\n styles.set(\"display\", \"flex\");\n });\n };\n\n if (isVisible) {\n return null;\n }\n\n return (\n <div className={\"flex\"}>\n <Tooltip\n trigger={\n <Tree.Item.Icon\n size={\"sm\"}\n className={\"cursor-pointer\"}\n element={<VisibilityNone />}\n label={\"This element is hidden.\"}\n onClick={unhideElement}\n />\n }\n content={\"This element is hidden. Click to unhide.\"}\n />\n </div>\n );\n};\n"],"names":["flattenElements","elements","activeElementId","result","asArray","Object","key","node","el","InlineSvg","getElementNodeData","components","bindings","getIndex","elementId","parentId","slot","elementBindings","slotValue","get","acc","element","component","Navigator","observer","editor","useDocumentEditor","activeElement","useActiveElement","document","treeKey","useSelectFromEditor","state","elementNodes","activeAncestors","useMemo","ancestors","parent","nodes","a","b","highlightElement","useCallback","e","nodeId","Commands","activateElement","renderer","Tree","ElementActions","InfoMessage","depth","Placeholder","newTree","dragSource","sameLevelNodes","n","newIndex","_","dropTargetId","props","styles","onChange","useStyles","isVisible","unhideElement","Tooltip","VisibilityNone"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.js","sources":["../../../../../src/BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.tsx"],"sourcesContent":["import React, { useMemo, useCallback } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { type TreeProps, Tree, ScrollArea } from \"@webiny/admin-ui\";\nimport { useActiveElement } from \"~/BaseEditor/hooks/useActiveElement.js\";\nimport { useSelectFromEditor } from \"~/BaseEditor/hooks/useSelectFromEditor.js\";\nimport { useDocumentEditor } from \"~/DocumentEditor/index.js\";\nimport { Commands } from \"~/BaseEditor/index.js\";\nimport { NavigatorEmptyState } from \"./NavigatorEmptyState.js\";\nimport { Placeholder } from \"./Placeholder.js\";\nimport { ElementActions } from \"./ElementActions.js\";\nimport { flattenElements, getElementNodeData } from \"./navigatorUtils.js\";\n\nexport const Navigator = observer(() => {\n const editor = useDocumentEditor();\n const [activeElement] = useActiveElement();\n\n const document = editor.getDocumentState().read();\n const elements = document.elements;\n const bindings = document.bindings;\n const treeKey = document.id;\n\n const components = useSelectFromEditor(state => state.components);\n\n const elementNodes = getElementNodeData({ components, elements, bindings });\n\n const activeAncestors = useMemo(() => {\n if (!activeElement) {\n return [];\n }\n const ancestors: string[] = [activeElement.id];\n let parent = elementNodes[activeElement.id].parent;\n while (parent) {\n ancestors.push(parent.id);\n parent = elementNodes[parent.id].parent;\n }\n return ancestors.reverse();\n }, [elementNodes, activeElement]);\n\n const nodes = useMemo(() => {\n return flattenElements(elementNodes, activeElement?.id).sort((a, b) => {\n return a.data!.parent.index - b.data!.parent.index;\n });\n }, [elementNodes, activeElement]);\n\n const highlightElement = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n const nodeId = e.currentTarget.getAttribute(\"data-node-id\");\n if (nodeId) {\n editor.executeCommand(Commands.HighlightElement, { id: nodeId });\n }\n }, []);\n\n const activateElement = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n const nodeId = e.currentTarget.getAttribute(\"data-node-id\");\n if (nodeId) {\n editor.executeCommand(Commands.SelectElement, { id: nodeId });\n }\n }, []);\n\n const renderer: TreeProps[\"renderer\"] = node => (\n <Tree.Item.Content\n data-node-id={node.id}\n onMouseOver={highlightElement}\n onClick={activateElement}\n >\n <Tree.Item.Icon label={node.label} element={node.icon} size={\"sm\"} />\n {node.label}\n <div className={\"flex w-full justify-end\"}>\n <ElementActions elementId={node.id} />\n </div>\n </Tree.Item.Content>\n );\n\n if (Object.keys(elementNodes).length <= 1) {\n return <NavigatorEmptyState />;\n }\n\n return (\n <ScrollArea className={\"h-full pt-xs\"}>\n <Tree\n key={treeKey}\n autoExpandOnDragOver={false}\n insertDroppableFirst={false}\n nodes={nodes}\n rootId={\"root\"}\n renderer={renderer}\n sort={false}\n defaultOpenNodeIds={activeAncestors}\n dropTargetOffset={5}\n placeholderRender={(node, { depth }) => <Placeholder node={node} depth={depth} />}\n onDrop={(newTree, { dragSource }) => {\n if (!dragSource || !dragSource.data) {\n return;\n }\n const parent = dragSource.data.parent;\n const sameLevelNodes = newTree.filter(n => n.parentId === dragSource.parentId);\n const newIndex = sameLevelNodes.findIndex(n => n.id === dragSource.id);\n editor.executeCommand(Commands.MoveElement, {\n elementId: dragSource.id,\n parentId: parent.id,\n slot: parent.slot,\n index: newIndex\n });\n }}\n canDrag={node => node.data?.draggable ?? true}\n canDrop={(_, { dragSource, dropTargetId }) => {\n if (dragSource?.parentId === dropTargetId) {\n return true;\n }\n return false;\n }}\n />\n </ScrollArea>\n );\n});\n"],"names":["Navigator","observer","editor","useDocumentEditor","activeElement","useActiveElement","document","elements","bindings","treeKey","components","useSelectFromEditor","state","elementNodes","getElementNodeData","activeAncestors","useMemo","ancestors","parent","nodes","flattenElements","a","b","highlightElement","useCallback","e","nodeId","Commands","activateElement","renderer","node","Tree","ElementActions","Object","NavigatorEmptyState","ScrollArea","depth","Placeholder","newTree","dragSource","sameLevelNodes","n","newIndex","_","dropTargetId"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { Button, Text, useSegmentedTabs } from "@webiny/admin-ui";
|
|
3
|
+
import { LayoutIllustration } from "./LayoutIllustration.js";
|
|
4
|
+
const NavigatorEmptyState = ()=>{
|
|
5
|
+
const { setActiveTab } = useSegmentedTabs();
|
|
6
|
+
return /*#__PURE__*/ react.createElement("div", {
|
|
7
|
+
className: "flex flex-col items-center gap-md px-md text-center mt-[200px]"
|
|
8
|
+
}, /*#__PURE__*/ react.createElement(LayoutIllustration, null), /*#__PURE__*/ react.createElement(Text, {
|
|
9
|
+
size: "sm",
|
|
10
|
+
className: "text-neutral-strong"
|
|
11
|
+
}, "You do not have any items in your layout. Add your first item in Insert panel."), /*#__PURE__*/ react.createElement(Button, {
|
|
12
|
+
variant: "secondary",
|
|
13
|
+
text: "Add item",
|
|
14
|
+
size: "sm",
|
|
15
|
+
onClick: ()=>setActiveTab("insert")
|
|
16
|
+
}));
|
|
17
|
+
};
|
|
18
|
+
export { NavigatorEmptyState };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=NavigatorEmptyState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Toolbar/Navigator/NavigatorEmptyState.js","sources":["../../../../../src/BaseEditor/defaultConfig/Toolbar/Navigator/NavigatorEmptyState.tsx"],"sourcesContent":["import React from \"react\";\nimport { Text, Button, useSegmentedTabs } from \"@webiny/admin-ui\";\nimport { LayoutIllustration } from \"./LayoutIllustration.js\";\n\nexport const NavigatorEmptyState = () => {\n const { setActiveTab } = useSegmentedTabs();\n\n return (\n <div className={\"flex flex-col items-center gap-md px-md text-center mt-[200px]\"}>\n <LayoutIllustration />\n <Text size={\"sm\"} className={\"text-neutral-strong\"}>\n {\"You do not have any items in your layout. Add your first item in Insert panel.\"}\n </Text>\n <Button\n variant={\"secondary\"}\n text={\"Add item\"}\n size={\"sm\"}\n onClick={() => setActiveTab(\"insert\")}\n />\n </div>\n );\n};\n"],"names":["NavigatorEmptyState","setActiveTab","useSegmentedTabs","LayoutIllustration","Text","Button"],"mappings":";;;AAIO,MAAMA,sBAAsB;IAC/B,MAAM,EAAEC,YAAY,EAAE,GAAGC;IAEzB,OAAO,WAAP,GACI,oBAAC;QAAI,WAAW;qBACZ,oBAACC,oBAAkBA,OAAAA,WAAAA,GACnB,oBAACC,MAAIA;QAAC,MAAM;QAAM,WAAW;OACxB,iGAEL,oBAACC,QAAMA;QACH,SAAS;QACT,MAAM;QACN,MAAM;QACN,SAAS,IAAMJ,aAAa;;AAI5C"}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import react from "react";
|
|
2
|
-
import { Icon
|
|
2
|
+
import { Icon } from "@webiny/admin-ui";
|
|
3
3
|
import { ReactComponent } from "@webiny/icons/account_tree.svg";
|
|
4
|
-
import {
|
|
4
|
+
import { Toolbar } from "../../../config/Toolbar/Toolbar.js";
|
|
5
5
|
import { Navigator } from "./Navigator.js";
|
|
6
|
-
const NavigatorTab = ()=>/*#__PURE__*/ react.createElement(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
spacing: "sm",
|
|
6
|
+
const NavigatorTab = ()=>/*#__PURE__*/ react.createElement(Toolbar.Tab, {
|
|
7
|
+
name: "navigator",
|
|
8
|
+
label: "Navigator",
|
|
10
9
|
icon: /*#__PURE__*/ react.createElement(Icon, {
|
|
11
10
|
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
12
11
|
label: "Navigator"
|
|
13
12
|
}),
|
|
14
|
-
|
|
13
|
+
element: /*#__PURE__*/ react.createElement(Navigator, null)
|
|
15
14
|
});
|
|
16
15
|
export { NavigatorTab };
|
|
17
16
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseEditor/defaultConfig/Toolbar/Navigator/NavigatorTab.js","sources":["../../../../../src/BaseEditor/defaultConfig/Toolbar/Navigator/NavigatorTab.tsx"],"sourcesContent":["import React from \"react\";\nimport { Icon
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Toolbar/Navigator/NavigatorTab.js","sources":["../../../../../src/BaseEditor/defaultConfig/Toolbar/Navigator/NavigatorTab.tsx"],"sourcesContent":["import React from \"react\";\nimport { Icon } from \"@webiny/admin-ui\";\nimport { ReactComponent as TreeIcon } from \"@webiny/icons/account_tree.svg\";\nimport { Toolbar } from \"~/BaseEditor/config/Toolbar/Toolbar.js\";\nimport { Navigator } from \"./Navigator.js\";\n\nexport const NavigatorTab = () => (\n <Toolbar.Tab\n name={\"navigator\"}\n label={\"Navigator\"}\n icon={<Icon icon={<TreeIcon />} label={\"Navigator\"} />}\n element={<Navigator />}\n />\n);\n"],"names":["NavigatorTab","Toolbar","Icon","TreeIcon","Navigator"],"mappings":";;;;;AAMO,MAAMA,eAAe,kBACxB,oBAACC,QAAQ,GAAG;QACR,MAAM;QACN,OAAO;QACP,oBAAM,oBAACC,MAAIA;YAAC,oBAAM,oBAACC,gBAAQA;YAAK,OAAO;;QACvC,uBAAS,oBAACC,WAASA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
const Placeholder = ({ depth })=>/*#__PURE__*/ react.createElement("div", {
|
|
3
|
+
className: "bg-primary",
|
|
4
|
+
style: {
|
|
5
|
+
height: 2,
|
|
6
|
+
zIndex: 999,
|
|
7
|
+
position: "absolute",
|
|
8
|
+
right: 0,
|
|
9
|
+
transform: "translateY(-50%)",
|
|
10
|
+
top: -2,
|
|
11
|
+
left: 24 * depth
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
export { Placeholder };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=Placeholder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Toolbar/Navigator/Placeholder.js","sources":["../../../../../src/BaseEditor/defaultConfig/Toolbar/Navigator/Placeholder.tsx"],"sourcesContent":["import React from \"react\";\n\ninterface PlaceholderProps {\n node: any;\n depth: number;\n}\n\nexport const Placeholder = ({ depth }: PlaceholderProps) => (\n <div\n className={\"bg-primary\"}\n style={{\n height: 2,\n zIndex: 999,\n position: \"absolute\",\n right: 0,\n transform: \"translateY(-50%)\",\n top: -2,\n left: depth * 24\n }}\n />\n);\n"],"names":["Placeholder","depth"],"mappings":";AAOO,MAAMA,cAAc,CAAC,EAAEC,KAAK,EAAoB,iBACnD,oBAAC;QACG,WAAW;QACX,OAAO;YACH,QAAQ;YACR,QAAQ;YACR,UAAU;YACV,OAAO;YACP,WAAW;YACX,KAAK;YACL,MAAMA,AAAQ,KAARA;QACV"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { NodeDto } from "@webiny/admin-ui";
|
|
2
|
+
import type { Document } from "@webiny/website-builder-sdk";
|
|
3
|
+
import type { EditorState } from "../../../../editorSdk/Editor.js";
|
|
4
|
+
import React from "react";
|
|
5
|
+
export type ElementNode = NodeDto<{
|
|
6
|
+
draggable: boolean;
|
|
7
|
+
icon: React.ReactNode;
|
|
8
|
+
parent: {
|
|
9
|
+
id: string;
|
|
10
|
+
slot: string;
|
|
11
|
+
index: number;
|
|
12
|
+
};
|
|
13
|
+
}>;
|
|
14
|
+
export type ElementNodeData = {
|
|
15
|
+
id: string;
|
|
16
|
+
label: string;
|
|
17
|
+
image: string;
|
|
18
|
+
canDrag: boolean;
|
|
19
|
+
parent: {
|
|
20
|
+
id: string;
|
|
21
|
+
slot: string;
|
|
22
|
+
index: number;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export declare function flattenElements(elements: Record<string, ElementNodeData>, activeElementId?: string): ElementNode[];
|
|
26
|
+
interface GetElementNodeDataParams {
|
|
27
|
+
components: EditorState["components"];
|
|
28
|
+
elements: Document["elements"];
|
|
29
|
+
bindings: Document["bindings"];
|
|
30
|
+
}
|
|
31
|
+
export declare function getElementNodeData({ components, elements, bindings }: GetElementNodeDataParams): Record<string, ElementNodeData>;
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { InlineSvg } from "../InsertElements/InlineSvg.js";
|
|
2
|
+
import react from "react";
|
|
3
|
+
import get from "lodash/get.js";
|
|
4
|
+
function flattenElements(elements, activeElementId) {
|
|
5
|
+
const result = [];
|
|
6
|
+
const asArray = Object.values(elements);
|
|
7
|
+
for(const key in elements){
|
|
8
|
+
const node = elements[key];
|
|
9
|
+
if (node.parent) result.push({
|
|
10
|
+
id: node.id,
|
|
11
|
+
label: node.label,
|
|
12
|
+
parentId: node.parent.id,
|
|
13
|
+
active: node.id === activeElementId,
|
|
14
|
+
droppable: asArray.filter((el)=>el.parent?.id === node.id).length > 0,
|
|
15
|
+
data: {
|
|
16
|
+
parent: node.parent,
|
|
17
|
+
icon: node.image ? /*#__PURE__*/ react.createElement(InlineSvg, {
|
|
18
|
+
src: node.image,
|
|
19
|
+
className: "fill-neutral-strong"
|
|
20
|
+
}) : /*#__PURE__*/ react.createElement(react.Fragment, null),
|
|
21
|
+
draggable: node.canDrag
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
function getElementNodeData({ components, elements, bindings }) {
|
|
28
|
+
const getIndex = (elementId, parentId, slot)=>{
|
|
29
|
+
const elementBindings = bindings[parentId];
|
|
30
|
+
if (!elementBindings) return -1;
|
|
31
|
+
const slotValue = get(elementBindings, `inputs.${slot}`);
|
|
32
|
+
if (!slotValue) return -1;
|
|
33
|
+
if (slotValue.list) return slotValue.static.indexOf(elementId);
|
|
34
|
+
return -1;
|
|
35
|
+
};
|
|
36
|
+
return Object.values(elements).reduce((acc, element)=>{
|
|
37
|
+
if ("root" === element.id) return {
|
|
38
|
+
...acc,
|
|
39
|
+
[element.id]: {
|
|
40
|
+
id: element.id,
|
|
41
|
+
label: "Root",
|
|
42
|
+
image: ""
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const component = components[element.component.name] ?? {
|
|
46
|
+
label: "",
|
|
47
|
+
image: null,
|
|
48
|
+
canDrag: false
|
|
49
|
+
};
|
|
50
|
+
const parentId = element.parent.id;
|
|
51
|
+
const slot = element.parent.slot;
|
|
52
|
+
return {
|
|
53
|
+
...acc,
|
|
54
|
+
[element.id]: {
|
|
55
|
+
id: element.id,
|
|
56
|
+
label: component?.label ?? component?.name ?? "",
|
|
57
|
+
image: component.image,
|
|
58
|
+
canDrag: component.canDrag,
|
|
59
|
+
parent: {
|
|
60
|
+
id: parentId,
|
|
61
|
+
slot,
|
|
62
|
+
index: getIndex(element.id, parentId, slot)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}, {});
|
|
67
|
+
}
|
|
68
|
+
export { flattenElements, getElementNodeData };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=navigatorUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Toolbar/Navigator/navigatorUtils.js","sources":["../../../../../src/BaseEditor/defaultConfig/Toolbar/Navigator/navigatorUtils.tsx"],"sourcesContent":["import type { NodeDto } from \"@webiny/admin-ui\";\nimport type { Document } from \"@webiny/website-builder-sdk\";\nimport type { EditorState } from \"~/editorSdk/Editor.js\";\nimport { InlineSvg } from \"~/BaseEditor/defaultConfig/Toolbar/InsertElements/InlineSvg.js\";\nimport React from \"react\";\nimport get from \"lodash/get.js\";\n\nexport type ElementNode = NodeDto<{\n draggable: boolean;\n icon: React.ReactNode;\n parent: {\n id: string;\n slot: string;\n index: number;\n };\n}>;\n\nexport type ElementNodeData = {\n id: string;\n label: string;\n image: string;\n canDrag: boolean;\n parent: {\n id: string;\n slot: string;\n index: number;\n };\n};\n\nexport function flattenElements(\n elements: Record<string, ElementNodeData>,\n activeElementId?: string\n): ElementNode[] {\n const result: ElementNode[] = [];\n const asArray = Object.values(elements);\n\n for (const key in elements) {\n const node = elements[key];\n\n if (!node.parent) {\n continue;\n }\n\n result.push({\n id: node.id,\n label: node.label,\n parentId: node.parent.id,\n active: node.id === activeElementId,\n droppable: asArray.filter(el => el.parent?.id === node.id).length > 0,\n data: {\n parent: node.parent,\n icon: node.image ? (\n <InlineSvg src={node.image} className={\"fill-neutral-strong\"} />\n ) : (\n <></>\n ),\n draggable: node.canDrag\n }\n });\n }\n\n return result;\n}\n\ninterface GetElementNodeDataParams {\n components: EditorState[\"components\"];\n elements: Document[\"elements\"];\n bindings: Document[\"bindings\"];\n}\n\nexport function getElementNodeData({\n components,\n elements,\n bindings\n}: GetElementNodeDataParams): Record<string, ElementNodeData> {\n const getIndex = (elementId: string, parentId: string, slot: string) => {\n const elementBindings = bindings[parentId];\n if (!elementBindings) {\n return -1;\n }\n\n const slotValue = get(elementBindings, `inputs.${slot}`);\n if (!slotValue) {\n return -1;\n }\n\n if (slotValue.list) {\n return slotValue.static.indexOf(elementId);\n }\n\n return -1;\n };\n\n return Object.values(elements).reduce((acc, element) => {\n if (element.id === \"root\") {\n return { ...acc, [element.id]: { id: element.id, label: \"Root\", image: \"\" } };\n }\n\n const component = components[element.component.name] ?? {\n label: \"\",\n image: null,\n canDrag: false\n };\n\n const parentId = element.parent!.id;\n const slot = element.parent!.slot;\n\n return {\n ...acc,\n [element.id]: {\n id: element.id,\n label: component?.label ?? component?.name ?? \"\",\n image: component.image,\n canDrag: component.canDrag,\n parent: {\n id: parentId,\n slot,\n index: getIndex(element.id, parentId, slot)\n }\n }\n };\n }, {});\n}\n"],"names":["flattenElements","elements","activeElementId","result","asArray","Object","key","node","el","InlineSvg","getElementNodeData","components","bindings","getIndex","elementId","parentId","slot","elementBindings","slotValue","get","acc","element","component"],"mappings":";;;AA6BO,SAASA,gBACZC,QAAyC,EACzCC,eAAwB;IAExB,MAAMC,SAAwB,EAAE;IAChC,MAAMC,UAAUC,OAAO,MAAM,CAACJ;IAE9B,IAAK,MAAMK,OAAOL,SAAU;QACxB,MAAMM,OAAON,QAAQ,CAACK,IAAI;QAE1B,IAAKC,KAAK,MAAM,EAIhBJ,OAAO,IAAI,CAAC;YACR,IAAII,KAAK,EAAE;YACX,OAAOA,KAAK,KAAK;YACjB,UAAUA,KAAK,MAAM,CAAC,EAAE;YACxB,QAAQA,KAAK,EAAE,KAAKL;YACpB,WAAWE,QAAQ,MAAM,CAACI,CAAAA,KAAMA,GAAG,MAAM,EAAE,OAAOD,KAAK,EAAE,EAAE,MAAM,GAAG;YACpE,MAAM;gBACF,QAAQA,KAAK,MAAM;gBACnB,MAAMA,KAAK,KAAK,GAAG,WAAH,GACZ,oBAACE,WAASA;oBAAC,KAAKF,KAAK,KAAK;oBAAE,WAAW;mCAEvC;gBAEJ,WAAWA,KAAK,OAAO;YAC3B;QACJ;IACJ;IAEA,OAAOJ;AACX;AAQO,SAASO,mBAAmB,EAC/BC,UAAU,EACVV,QAAQ,EACRW,QAAQ,EACe;IACvB,MAAMC,WAAW,CAACC,WAAmBC,UAAkBC;QACnD,MAAMC,kBAAkBL,QAAQ,CAACG,SAAS;QAC1C,IAAI,CAACE,iBACD,OAAO;QAGX,MAAMC,YAAYC,IAAIF,iBAAiB,CAAC,OAAO,EAAED,MAAM;QACvD,IAAI,CAACE,WACD,OAAO;QAGX,IAAIA,UAAU,IAAI,EACd,OAAOA,UAAU,MAAM,CAAC,OAAO,CAACJ;QAGpC,OAAO;IACX;IAEA,OAAOT,OAAO,MAAM,CAACJ,UAAU,MAAM,CAAC,CAACmB,KAAKC;QACxC,IAAIA,AAAe,WAAfA,QAAQ,EAAE,EACV,OAAO;YAAE,GAAGD,GAAG;YAAE,CAACC,QAAQ,EAAE,CAAC,EAAE;gBAAE,IAAIA,QAAQ,EAAE;gBAAE,OAAO;gBAAQ,OAAO;YAAG;QAAE;QAGhF,MAAMC,YAAYX,UAAU,CAACU,QAAQ,SAAS,CAAC,IAAI,CAAC,IAAI;YACpD,OAAO;YACP,OAAO;YACP,SAAS;QACb;QAEA,MAAMN,WAAWM,QAAQ,MAAM,CAAE,EAAE;QACnC,MAAML,OAAOK,QAAQ,MAAM,CAAE,IAAI;QAEjC,OAAO;YACH,GAAGD,GAAG;YACN,CAACC,QAAQ,EAAE,CAAC,EAAE;gBACV,IAAIA,QAAQ,EAAE;gBACd,OAAOC,WAAW,SAASA,WAAW,QAAQ;gBAC9C,OAAOA,UAAU,KAAK;gBACtB,SAASA,UAAU,OAAO;gBAC1B,QAAQ;oBACJ,IAAIP;oBACJC;oBACA,OAAOH,SAASQ,QAAQ,EAAE,EAAEN,UAAUC;gBAC1C;YACJ;QACJ;IACJ,GAAG,CAAC;AACR"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Commands } from "../../BaseEditor/commands.js";
|
|
2
2
|
import type { CommandPayload } from "../../editorSdk/createCommand.js";
|
|
3
3
|
export declare function useCreateElement(): {
|
|
4
|
-
createElement: (payload: CommandPayload<typeof Commands.CreateElement>) => void
|
|
4
|
+
createElement: (payload: CommandPayload<typeof Commands.CreateElement>) => Promise<void>;
|
|
5
5
|
};
|
|
@@ -3,9 +3,7 @@ import { useDocumentEditor } from "../../DocumentEditor/index.js";
|
|
|
3
3
|
import { Commands } from "../commands.js";
|
|
4
4
|
function useCreateElement() {
|
|
5
5
|
const editor = useDocumentEditor();
|
|
6
|
-
const createElement = useCallback((payload)=>
|
|
7
|
-
editor.executeCommand(Commands.CreateElement, payload);
|
|
8
|
-
}, [
|
|
6
|
+
const createElement = useCallback((payload)=>editor.executeCommand(Commands.CreateElement, payload), [
|
|
9
7
|
editor
|
|
10
8
|
]);
|
|
11
9
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseEditor/hooks/useCreateElement.js","sources":["../../../src/BaseEditor/hooks/useCreateElement.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useDocumentEditor } from \"~/DocumentEditor/index.js\";\nimport { Commands } from \"~/BaseEditor/commands.js\";\nimport type { CommandPayload } from \"~/editorSdk/createCommand.js\";\n\nexport function useCreateElement() {\n const editor = useDocumentEditor();\n\n const createElement = useCallback(\n (payload: CommandPayload<typeof Commands.CreateElement>) => {\n editor.executeCommand(Commands.CreateElement, payload);\n },\n [editor]\n );\n\n return { createElement };\n}\n"],"names":["useCreateElement","editor","useDocumentEditor","createElement","useCallback","payload","Commands"],"mappings":";;;AAKO,SAASA;IACZ,MAAMC,SAASC;IAEf,MAAMC,gBAAgBC,YAClB,CAACC
|
|
1
|
+
{"version":3,"file":"BaseEditor/hooks/useCreateElement.js","sources":["../../../src/BaseEditor/hooks/useCreateElement.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useDocumentEditor } from \"~/DocumentEditor/index.js\";\nimport { Commands } from \"~/BaseEditor/commands.js\";\nimport type { CommandPayload } from \"~/editorSdk/createCommand.js\";\n\nexport function useCreateElement() {\n const editor = useDocumentEditor();\n\n const createElement = useCallback(\n (payload: CommandPayload<typeof Commands.CreateElement>) => {\n return editor.executeCommand(Commands.CreateElement, payload);\n },\n [editor]\n );\n\n return { createElement };\n}\n"],"names":["useCreateElement","editor","useDocumentEditor","createElement","useCallback","payload","Commands"],"mappings":";;;AAKO,SAASA;IACZ,MAAMC,SAASC;IAEf,MAAMC,gBAAgBC,YAClB,CAACC,UACUJ,OAAO,cAAc,CAACK,SAAS,aAAa,EAAED,UAEzD;QAACJ;KAAO;IAGZ,OAAO;QAAEE;IAAc;AAC3B"}
|
|
@@ -43,7 +43,7 @@ const EcommerceIntegration_PageType = (props)=>{
|
|
|
43
43
|
}, []);
|
|
44
44
|
if (!renderer) return null;
|
|
45
45
|
return /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(AdminConfig.Form.FieldRenderer, {
|
|
46
|
-
name:
|
|
46
|
+
name: `resource-picker:${pluginName}`,
|
|
47
47
|
component: renderer
|
|
48
48
|
}));
|
|
49
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecommerce/EcommerceIntegration.js","sources":["../../src/ecommerce/EcommerceIntegration.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { useContainer } from \"@webiny/app\";\nimport { Editor } from \"~/index.js\";\nimport type {\n IEcommerceApi,\n IEcommerceApiFactory,\n SettingsInput as ISettingsInput,\n Resource as IResource\n} from \"./types.js\";\nimport { CreateInputRenderers } from \"./CreateInputRenderers.js\";\nimport type { EcommerceResourcePageTypeConfig } from \"./components/ResourcePage.js\";\nimport {\n EcommerceResourcePageType,\n createResourcePickerRenderer\n} from \"./components/ResourcePage.js\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { createGenericContext } from \"@webiny/app\";\nimport {\n EcommerceApiManifest,\n EcommerceApiProviderAbstraction,\n useEcommerceApiProvider\n} from \"~/features/index.js\";\nimport { PageType as PageTypeAbstraction } from \"~/presentation/pages/CreatePage/abstractions.js\";\nimport { createPageTypeRemovalDecorator } from \"~/presentation/pages/CreatePage/PageTypeProvider.js\";\n\nexport interface CustomResourcePickerProps<T = any> {\n value?: T;\n onChange(val: T | undefined): void;\n}\n\nexport type EcommerceIntegrationProps = {\n name: string;\n init: IEcommerceApiFactory;\n settings: ISettingsInput[];\n children?: React.ReactNode;\n};\n\nconst Context = createGenericContext<{ pluginName: string }>(\"EcommerceIntegrationContext\");\n\nconst EcommerceIntegrationBase = (props: EcommerceIntegrationProps) => {\n const provider = useEcommerceApiProvider();\n const container = useContainer();\n\n useMemo(() => {\n container.registerInstance(EcommerceApiProviderAbstraction, provider);\n }, []);\n\n useEffect(() => {\n provider.addApiManifest(new EcommerceApiManifest(props.name, props.init, props.settings));\n }, []);\n\n return (\n <Context.Provider pluginName={props.name}>\n <Editor.EditorConfig priority={\"secondary\"}>\n <CreateInputRenderers pluginName={props.name} />\n </Editor.EditorConfig>\n {props.children}\n </Context.Provider>\n );\n};\n\nexport type PageTypeProps =\n | (Omit<EcommerceResourcePageTypeConfig, \"apiName\"> & { remove?: never })\n | { name: string; remove: true };\n\nconst PageType = (props: PageTypeProps) => {\n const { pluginName } = Context.useHook();\n const container = useContainer();\n const provider = useEcommerceApiProvider();\n\n const renderer = useMemo(() => {\n if (props.remove) {\n container.registerDecorator(createPageTypeRemovalDecorator(props.name));\n return undefined;\n }\n\n const pageType = new EcommerceResourcePageType({ ...props, apiName: pluginName }, provider);\n container.registerInstance(PageTypeAbstraction, pageType);\n\n return createResourcePickerRenderer({\n pluginName,\n resourceType: props.resourceType\n });\n }, []);\n\n if (!renderer) {\n return null;\n }\n\n return (\n <AdminConfig>\n <AdminConfig.Form.FieldRenderer
|
|
1
|
+
{"version":3,"file":"ecommerce/EcommerceIntegration.js","sources":["../../src/ecommerce/EcommerceIntegration.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { useContainer } from \"@webiny/app\";\nimport { Editor } from \"~/index.js\";\nimport type {\n IEcommerceApi,\n IEcommerceApiFactory,\n SettingsInput as ISettingsInput,\n Resource as IResource\n} from \"./types.js\";\nimport { CreateInputRenderers } from \"./CreateInputRenderers.js\";\nimport type { EcommerceResourcePageTypeConfig } from \"./components/ResourcePage.js\";\nimport {\n EcommerceResourcePageType,\n createResourcePickerRenderer\n} from \"./components/ResourcePage.js\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { createGenericContext } from \"@webiny/app\";\nimport {\n EcommerceApiManifest,\n EcommerceApiProviderAbstraction,\n useEcommerceApiProvider\n} from \"~/features/index.js\";\nimport { PageType as PageTypeAbstraction } from \"~/presentation/pages/CreatePage/abstractions.js\";\nimport { createPageTypeRemovalDecorator } from \"~/presentation/pages/CreatePage/PageTypeProvider.js\";\n\nexport interface CustomResourcePickerProps<T = any> {\n value?: T;\n onChange(val: T | undefined): void;\n}\n\nexport type EcommerceIntegrationProps = {\n name: string;\n init: IEcommerceApiFactory;\n settings: ISettingsInput[];\n children?: React.ReactNode;\n};\n\nconst Context = createGenericContext<{ pluginName: string }>(\"EcommerceIntegrationContext\");\n\nconst EcommerceIntegrationBase = (props: EcommerceIntegrationProps) => {\n const provider = useEcommerceApiProvider();\n const container = useContainer();\n\n useMemo(() => {\n container.registerInstance(EcommerceApiProviderAbstraction, provider);\n }, []);\n\n useEffect(() => {\n provider.addApiManifest(new EcommerceApiManifest(props.name, props.init, props.settings));\n }, []);\n\n return (\n <Context.Provider pluginName={props.name}>\n <Editor.EditorConfig priority={\"secondary\"}>\n <CreateInputRenderers pluginName={props.name} />\n </Editor.EditorConfig>\n {props.children}\n </Context.Provider>\n );\n};\n\nexport type PageTypeProps =\n | (Omit<EcommerceResourcePageTypeConfig, \"apiName\"> & { remove?: never })\n | { name: string; remove: true };\n\nconst PageType = (props: PageTypeProps) => {\n const { pluginName } = Context.useHook();\n const container = useContainer();\n const provider = useEcommerceApiProvider();\n\n const renderer = useMemo(() => {\n if (props.remove) {\n container.registerDecorator(createPageTypeRemovalDecorator(props.name));\n return undefined;\n }\n\n const pageType = new EcommerceResourcePageType({ ...props, apiName: pluginName }, provider);\n container.registerInstance(PageTypeAbstraction, pageType);\n\n return createResourcePickerRenderer({\n pluginName,\n resourceType: props.resourceType\n });\n }, []);\n\n if (!renderer) {\n return null;\n }\n\n return (\n <AdminConfig>\n <AdminConfig.Form.FieldRenderer\n name={`resource-picker:${pluginName}`}\n component={renderer}\n />\n </AdminConfig>\n );\n};\n\nexport const EcommerceIntegration = Object.assign(EcommerceIntegrationBase, { PageType });\n\nexport namespace EcommerceIntegration {\n export type Props = EcommerceIntegrationProps;\n export type EcommerceApi = IEcommerceApi;\n export type EcommerceApiFactory = IEcommerceApiFactory;\n export type SettingsInput = ISettingsInput;\n export type Resource = IResource;\n}\n"],"names":["Context","createGenericContext","EcommerceIntegrationBase","props","provider","useEcommerceApiProvider","container","useContainer","useMemo","EcommerceApiProviderAbstraction","useEffect","EcommerceApiManifest","Editor","CreateInputRenderers","PageType","pluginName","renderer","createPageTypeRemovalDecorator","pageType","EcommerceResourcePageType","PageTypeAbstraction","createResourcePickerRenderer","AdminConfig","EcommerceIntegration","Object"],"mappings":";;;;;;;;;AAqCA,MAAMA,UAAUC,qBAA6C;AAE7D,MAAMC,2BAA2B,CAACC;IAC9B,MAAMC,WAAWC;IACjB,MAAMC,YAAYC;IAElBC,QAAQ;QACJF,UAAU,gBAAgB,CAACG,iCAAiCL;IAChE,GAAG,EAAE;IAELM,UAAU;QACNN,SAAS,cAAc,CAAC,IAAIO,qBAAqBR,MAAM,IAAI,EAAEA,MAAM,IAAI,EAAEA,MAAM,QAAQ;IAC3F,GAAG,EAAE;IAEL,OAAO,WAAP,GACI,oBAACH,QAAQ,QAAQ;QAAC,YAAYG,MAAM,IAAI;qBACpC,oBAACS,OAAO,YAAY;QAAC,UAAU;qBAC3B,oBAACC,sBAAoBA;QAAC,YAAYV,MAAM,IAAI;SAE/CA,MAAM,QAAQ;AAG3B;AAMA,MAAMW,gCAAW,CAACX;IACd,MAAM,EAAEY,UAAU,EAAE,GAAGf,QAAQ,OAAO;IACtC,MAAMM,YAAYC;IAClB,MAAMH,WAAWC;IAEjB,MAAMW,WAAWR,QAAQ;QACrB,IAAIL,MAAM,MAAM,EAAE,YACdG,UAAU,iBAAiB,CAACW,+BAA+Bd,MAAM,IAAI;QAIzE,MAAMe,WAAW,IAAIC,0BAA0B;YAAE,GAAGhB,KAAK;YAAE,SAASY;QAAW,GAAGX;QAClFE,UAAU,gBAAgB,CAACc,UAAqBF;QAEhD,OAAOG,6BAA6B;YAChCN;YACA,cAAcZ,MAAM,YAAY;QACpC;IACJ,GAAG,EAAE;IAEL,IAAI,CAACa,UACD,OAAO;IAGX,OAAO,WAAP,GACI,oBAACM,aAAWA,MAAAA,WAAAA,GACR,oBAACA,YAAY,IAAI,CAAC,aAAa;QAC3B,MAAM,CAAC,gBAAgB,EAAEP,YAAY;QACrC,WAAWC;;AAI3B;AAEO,MAAMO,uBAAuBC,OAAO,MAAM,CAACtB,0BAA0B;IAAEY,UAAAA;AAAS"}
|
|
@@ -6,7 +6,7 @@ import type { IEcommerceApiProvider } from "../../features/index.js";
|
|
|
6
6
|
import type { Resource } from "../types.js";
|
|
7
7
|
declare module "@webiny/app-admin/features/formModel/abstractions.js" {
|
|
8
8
|
interface IFieldRendererRegistry {
|
|
9
|
-
|
|
9
|
+
[key: `resource-picker:${string}`]: {
|
|
10
10
|
fieldType: "text";
|
|
11
11
|
settings?: {
|
|
12
12
|
rows?: number;
|
|
@@ -28,7 +28,7 @@ class EcommerceResourcePageType {
|
|
|
28
28
|
}
|
|
29
29
|
modifyForm(form) {
|
|
30
30
|
form.fields((fields)=>({
|
|
31
|
-
resourceId: fields.text().label(toTitleCaseLabel(this.config.resourceType)).required().renderer(
|
|
31
|
+
resourceId: fields.text().label(toTitleCaseLabel(this.config.resourceType)).required().renderer(`resource-picker:${this.config.apiName}`).afterChange((value, f)=>{
|
|
32
32
|
if (!value) return;
|
|
33
33
|
this.onResourceSelected(String(value), f);
|
|
34
34
|
})
|