@webiny/app-website-builder 6.5.0-beta.1 → 6.5.0-beta.10
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/config/Sidebar/Tab.d.ts +0 -4
- package/BaseEditor/config/Sidebar/Tab.js +5 -21
- package/BaseEditor/config/Sidebar/Tab.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js +6 -66
- package/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/DropZoneManager.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/Iframe.d.ts +2 -2
- package/BaseEditor/defaultConfig/Content/Preview/Overlays/ElementOverlays.d.ts +2 -2
- package/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/usePreviewDomain.d.ts +1 -6
- package/BaseEditor/defaultConfig/Content/usePreviewDomain.js +1 -26
- package/BaseEditor/defaultConfig/DocumentStateEditor/DocumentStateEditor.d.ts +2 -2
- package/BaseEditor/defaultConfig/ElementInputRenderers.js +12 -0
- package/BaseEditor/defaultConfig/ElementInputRenderers.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js +2 -5
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.d.ts +22 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.js +17 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.d.ts +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.js +64 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/useInputValue.js +7 -2
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/useInputValue.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundColor.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.js +8 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundPosition.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundScaling.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderColor.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderRadius.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderStyle.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderWidth.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/Alignment.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/LengthWithUnitInput.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Margin.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Padding.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Visibility/Visibility.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/SidebarRow.js +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/SidebarRow.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleSettingsGroup.js +2 -5
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleSettingsGroup.js.map +1 -1
- package/BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.d.ts +2 -2
- package/DocumentEditor/DocumentEditor.d.ts +2 -2
- package/DocumentEditor/StateInspector.d.ts +4 -2
- package/Extension.js +3 -0
- package/Extension.js.map +1 -1
- package/domain/Page/Page.d.ts +2 -0
- package/domain/Page/Page.js +1 -0
- package/domain/Page/Page.js.map +1 -1
- package/domain/PageRevision/PageRevision.d.ts +11 -0
- package/domain/PageRevision/PageRevision.js +20 -0
- package/domain/PageRevision/PageRevision.js.map +1 -1
- package/ecommerce/components/ResourcePage.d.ts +6 -2
- package/ecommerce/components/ResourcesList.d.ts +4 -4
- package/ecommerce/components/ResourcesPicker.d.ts +9 -4
- package/editorSdk/CommandBus.js.map +1 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js +41 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js.map +1 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.d.ts +3 -2
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js +8 -2
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevision.test.d.ts +1 -0
- package/features/pages/deletePageRevision/DeletePageRevision.test.js +67 -0
- package/features/pages/deletePageRevision/DeletePageRevision.test.js.map +1 -0
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.d.ts +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.js +2 -3
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.d.ts +4 -2
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.js +7 -3
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionUseCase.js +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionUseCase.js.map +1 -1
- package/features/pages/deletePageRevision/abstractions.d.ts +2 -3
- package/features/pages/deletePageRevision/abstractions.js.map +1 -1
- package/features/pages/getPage/PageGatewayDto.d.ts +2 -0
- package/features/pages/publishPage/PublishPage.test.js +41 -1
- package/features/pages/publishPage/PublishPage.test.js.map +1 -1
- package/features/pages/publishPage/PublishPageRepository.d.ts +3 -2
- package/features/pages/publishPage/PublishPageRepository.js +15 -4
- package/features/pages/publishPage/PublishPageRepository.js.map +1 -1
- package/features/pages/shared/pageGraphQLFields.js +1 -0
- package/features/pages/shared/pageGraphQLFields.js.map +1 -1
- package/features/pages/unpublishPage/UnpublishPage.test.js +4 -1
- package/features/pages/unpublishPage/UnpublishPage.test.js.map +1 -1
- package/features/pages/unpublishPage/UnpublishPageRepository.d.ts +3 -2
- package/features/pages/unpublishPage/UnpublishPageRepository.js +12 -4
- package/features/pages/unpublishPage/UnpublishPageRepository.js.map +1 -1
- package/inputRenderers/DateTimeInput.d.ts +9 -0
- package/inputRenderers/DateTimeInput.js +21 -0
- package/inputRenderers/DateTimeInput.js.map +1 -0
- package/inputRenderers/DateTimeInput.test.d.ts +1 -0
- package/inputRenderers/DateTimeInput.test.js +27 -0
- package/inputRenderers/DateTimeInput.test.js.map +1 -0
- package/inputRenderers/RadioInput.d.ts +3 -0
- package/inputRenderers/RadioInput.js +20 -0
- package/inputRenderers/RadioInput.js.map +1 -0
- package/inputRenderers/TagsInput.d.ts +3 -0
- package/inputRenderers/TagsInput.js +22 -0
- package/inputRenderers/TagsInput.js.map +1 -0
- package/package.json +31 -31
- package/presentation/pages/CreatePage/CreatePageDialog.d.ts +2 -2
- package/presentation/pages/PageEditor/Revisions/RevisionListDrawer.js +4 -0
- package/presentation/pages/PageEditor/Revisions/RevisionListDrawer.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/RevisionListItem.d.ts +3 -3
- package/presentation/pages/PageEditor/Revisions/RevisionListItem.js +9 -20
- package/presentation/pages/PageEditor/Revisions/RevisionListItem.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/RevisionsList.js +7 -19
- package/presentation/pages/PageEditor/Revisions/RevisionsList.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/useRevision.d.ts +1 -1
- package/presentation/pages/PageEditor/Revisions/useRevision.js +84 -14
- package/presentation/pages/PageEditor/Revisions/useRevision.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/useRevisionList.d.ts +3 -0
- package/presentation/pages/PageEditor/Revisions/useRevisionList.js +31 -0
- package/presentation/pages/PageEditor/Revisions/useRevisionList.js.map +1 -0
- package/presentation/pages/PageEditor/TopBar/PageSettingsDrawer.d.ts +2 -2
- package/presentation/pages/PageEditor/TopBar/RevisionsMenu.js +7 -19
- package/presentation/pages/PageEditor/TopBar/RevisionsMenu.js.map +1 -1
- package/presentation/pages/PageList/PageListPresenter.test.js +3 -1
- package/presentation/pages/PageList/PageListPresenter.test.js.map +1 -1
- package/presentation/pages/PageList/components/BulkActions/BulkActionDelete.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionDuplicate.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionMovePage.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionPublish.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionUnpublish.d.ts +2 -2
- package/presentation/pages/PageList/components/DocumentList.d.ts +2 -2
- package/presentation/pages/PageList/components/Table/Table.d.ts +2 -2
- package/presentation/pages/RevisionList/RevisionListPresenter.d.ts +27 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.js +73 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.js.map +1 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.d.ts +1 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.js +219 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.js.map +1 -0
- package/presentation/pages/RevisionList/abstractions.d.ts +34 -0
- package/presentation/pages/RevisionList/abstractions.js +5 -0
- package/presentation/pages/RevisionList/abstractions.js.map +1 -0
- package/presentation/pages/RevisionList/feature.d.ts +3 -0
- package/presentation/pages/RevisionList/feature.js +17 -0
- package/presentation/pages/RevisionList/feature.js.map +1 -0
- package/presentation/pages/RevisionList/index.d.ts +2 -0
- package/presentation/pages/RevisionList/index.js +1 -0
- package/presentation/pages/TrashBin/WbTrashBin.d.ts +2 -2
- package/presentation/redirects/RedirectList/RedirectListPresenter.js.map +1 -1
- package/presentation/redirects/RedirectList/RedirectListPresenter.test.js.map +1 -1
- package/presentation/redirects/RedirectList/components/BulkActionDelete.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/BulkActionMove.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/CreateRedirectDialog.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/DocumentList.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/EditRedirectDialog.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/Table/Table.d.ts +2 -2
- package/BaseEditor/defaultConfig/Content/usePreviewDomain.js.map +0 -1
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const TabContainer: import("@emotion/styled").StyledComponent<{
|
|
3
|
-
theme?: import("@emotion/react").Theme;
|
|
4
|
-
as?: React.ElementType;
|
|
5
|
-
}, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
6
2
|
export interface TabProps {
|
|
7
3
|
name: string;
|
|
8
4
|
label: string;
|
|
@@ -1,31 +1,15 @@
|
|
|
1
1
|
import react from "react";
|
|
2
|
-
import
|
|
3
|
-
import { SegmentedControl } from "@webiny/admin-ui";
|
|
4
|
-
const TabContainer = styled("div")({
|
|
5
|
-
display: "flex",
|
|
6
|
-
position: "relative",
|
|
7
|
-
flexDirection: "column",
|
|
8
|
-
height: "calc(100vh - 44px - 49px)",
|
|
9
|
-
overflowY: "auto",
|
|
10
|
-
"&::-webkit-scrollbar": {
|
|
11
|
-
width: 1
|
|
12
|
-
},
|
|
13
|
-
"&::-webkit-scrollbar-track": {
|
|
14
|
-
boxShadow: "inset 0 0 6px rgba(0, 0, 0, 0.3)"
|
|
15
|
-
},
|
|
16
|
-
"&::-webkit-scrollbar-thumb": {
|
|
17
|
-
backgroundColor: "darkgrey",
|
|
18
|
-
outline: "1px solid slategrey"
|
|
19
|
-
}
|
|
20
|
-
});
|
|
2
|
+
import { FillViewportHeight, ScrollArea, SegmentedControl } from "@webiny/admin-ui";
|
|
21
3
|
const Tab = ({ name, label, icon, disabled, element, visible })=>/*#__PURE__*/ react.createElement(SegmentedControl.Tabs.Tab, {
|
|
22
4
|
value: name,
|
|
23
5
|
trigger: label,
|
|
24
6
|
icon: icon,
|
|
25
7
|
disabled: disabled,
|
|
26
8
|
visible: visible,
|
|
27
|
-
content: /*#__PURE__*/ react.createElement(
|
|
9
|
+
content: /*#__PURE__*/ react.createElement(FillViewportHeight, null, /*#__PURE__*/ react.createElement(ScrollArea, {
|
|
10
|
+
className: "h-full"
|
|
11
|
+
}, element))
|
|
28
12
|
});
|
|
29
|
-
export { Tab
|
|
13
|
+
export { Tab };
|
|
30
14
|
|
|
31
15
|
//# sourceMappingURL=Tab.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseEditor/config/Sidebar/Tab.js","sources":["../../../../src/BaseEditor/config/Sidebar/Tab.tsx"],"sourcesContent":["import React from \"react\";\nimport
|
|
1
|
+
{"version":3,"file":"BaseEditor/config/Sidebar/Tab.js","sources":["../../../../src/BaseEditor/config/Sidebar/Tab.tsx"],"sourcesContent":["import React from \"react\";\nimport { FillViewportHeight, ScrollArea, SegmentedControl } from \"@webiny/admin-ui\";\n\nexport interface TabProps {\n name: string;\n label: string;\n icon?: React.ReactElement;\n element: React.JSX.Element;\n disabled?: boolean;\n visible?: boolean;\n}\n\nexport const Tab = ({ name, label, icon, disabled, element, visible }: TabProps) => {\n return (\n <SegmentedControl.Tabs.Tab\n value={name}\n trigger={label}\n icon={icon}\n disabled={disabled}\n visible={visible}\n // Same pattern as the Insert panel: FillViewportHeight sizes the region to the space\n // from its own top edge down to the viewport bottom (no hardcoded offsets), and the\n // ScrollArea scrolls the content within it.\n content={\n <FillViewportHeight>\n <ScrollArea className={\"h-full\"}>{element}</ScrollArea>\n </FillViewportHeight>\n }\n />\n );\n};\n"],"names":["Tab","name","label","icon","disabled","element","visible","SegmentedControl","FillViewportHeight","ScrollArea"],"mappings":";;AAYO,MAAMA,MAAM,CAAC,EAAEC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,EAAY,GACpE,WAAP,GACI,oBAACC,iBAAiB,IAAI,CAAC,GAAG;QACtB,OAAON;QACP,SAASC;QACT,MAAMC;QACN,UAAUC;QACV,SAASE;QAIT,uBACI,oBAACE,oBAAkBA,MAAAA,WAAAA,GACf,oBAACC,YAAUA;YAAC,WAAW;WAAWJ"}
|
|
@@ -1,80 +1,20 @@
|
|
|
1
|
-
import react, {
|
|
2
|
-
import {
|
|
3
|
-
import { Button, DropdownMenu, IconButton, Input, Separator, cn } from "@webiny/admin-ui";
|
|
1
|
+
import react, { useEffect } from "react";
|
|
2
|
+
import { PreviewDomainMenu } from "@webiny/frontend-settings/exports/admin.js";
|
|
4
3
|
import { usePreviewDomain } from "../usePreviewDomain.js";
|
|
5
|
-
import { Bind, Form } from "@webiny/form";
|
|
6
|
-
import { validation } from "@webiny/validation";
|
|
7
4
|
import { useDocumentEditor } from "../../../../DocumentEditor/index.js";
|
|
8
5
|
import { Commands } from "../../../index.js";
|
|
9
6
|
const PreviewDomain = ()=>{
|
|
10
7
|
const editor = useDocumentEditor();
|
|
11
|
-
const
|
|
12
|
-
const { previewDomain, isOverridden, unsetPreviewDomain, setPreviewDomain } = usePreviewDomain();
|
|
13
|
-
const commitValue = useCallback((data)=>{
|
|
14
|
-
const value = data.previewDomain;
|
|
15
|
-
if (value.length > 0) setPreviewDomain(value);
|
|
16
|
-
else unsetPreviewDomain();
|
|
17
|
-
setIsOpen(false);
|
|
18
|
-
}, []);
|
|
19
|
-
const resetDomain = useCallback(()=>{
|
|
20
|
-
unsetPreviewDomain();
|
|
21
|
-
setIsOpen(false);
|
|
22
|
-
}, []);
|
|
8
|
+
const { previewDomain } = usePreviewDomain();
|
|
23
9
|
useEffect(()=>{
|
|
24
10
|
if (!previewDomain) return;
|
|
25
11
|
editor.executeCommand(Commands.RefreshPreview);
|
|
26
12
|
}, [
|
|
27
13
|
previewDomain
|
|
28
14
|
]);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
align: "center",
|
|
33
|
-
side: "bottom",
|
|
34
|
-
className: "shadow-lg",
|
|
35
|
-
onOpenChange: setIsOpen,
|
|
36
|
-
trigger: /*#__PURE__*/ react.createElement(IconButton, {
|
|
37
|
-
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
38
|
-
size: "md",
|
|
39
|
-
onClick: ()=>{},
|
|
40
|
-
variant: "ghost",
|
|
41
|
-
className: classNames
|
|
42
|
-
})
|
|
43
|
-
}, /*#__PURE__*/ react.createElement("div", {
|
|
44
|
-
className: "p-sm text-sm",
|
|
45
|
-
style: {
|
|
46
|
-
width: 300
|
|
47
|
-
}
|
|
48
|
-
}, /*#__PURE__*/ react.createElement(Form, {
|
|
49
|
-
data: {
|
|
50
|
-
previewDomain
|
|
51
|
-
},
|
|
52
|
-
onSubmit: commitValue
|
|
53
|
-
}, (form)=>/*#__PURE__*/ react.createElement(Bind, {
|
|
54
|
-
name: "previewDomain",
|
|
55
|
-
validators: [
|
|
56
|
-
validation.create("url")
|
|
57
|
-
]
|
|
58
|
-
}, /*#__PURE__*/ react.createElement(Input, {
|
|
59
|
-
autoFocus: true,
|
|
60
|
-
label: "Preview Domain",
|
|
61
|
-
description: /*#__PURE__*/ react.createElement(react.Fragment, null, "Set a custom preview domain for your session.", /*#__PURE__*/ react.createElement("br", null), "This doesn't affect other users."),
|
|
62
|
-
size: "md",
|
|
63
|
-
onBlur: ()=>form.submit(),
|
|
64
|
-
onEnter: ()=>form.submit(),
|
|
65
|
-
note: 'Hit "Enter" or click outside the menu to apply.'
|
|
66
|
-
}))), isOverridden ? /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Separator, {
|
|
67
|
-
variant: "dimmed",
|
|
68
|
-
margin: "lg"
|
|
69
|
-
}), /*#__PURE__*/ react.createElement(Button, {
|
|
70
|
-
variant: "primary",
|
|
71
|
-
onClick: resetDomain,
|
|
72
|
-
text: "Reset Domain",
|
|
73
|
-
size: "sm"
|
|
74
|
-
}), /*#__PURE__*/ react.createElement(Separator, {
|
|
75
|
-
variant: "dimmed",
|
|
76
|
-
margin: "lg"
|
|
77
|
-
}), "Resetting will revert to using the default preview domain.") : null));
|
|
15
|
+
return /*#__PURE__*/ react.createElement(PreviewDomainMenu, {
|
|
16
|
+
className: "absolute left-0 top-0"
|
|
17
|
+
});
|
|
78
18
|
};
|
|
79
19
|
export { PreviewDomain };
|
|
80
20
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js","sources":["../../../../../src/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.tsx"],"sourcesContent":["import React, {
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js","sources":["../../../../../src/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { PreviewDomainMenu } from \"@webiny/frontend-settings/exports/admin.js\";\nimport { usePreviewDomain } from \"../usePreviewDomain.js\";\nimport { useDocumentEditor } from \"~/DocumentEditor/index.js\";\nimport { Commands } from \"~/BaseEditor/index.js\";\n\nexport const PreviewDomain = () => {\n const editor = useDocumentEditor();\n const { previewDomain } = usePreviewDomain();\n\n useEffect(() => {\n if (!previewDomain) {\n return;\n }\n\n editor.executeCommand(Commands.RefreshPreview);\n }, [previewDomain]);\n\n return <PreviewDomainMenu className={\"absolute left-0 top-0\"} />;\n};\n"],"names":["PreviewDomain","editor","useDocumentEditor","previewDomain","usePreviewDomain","useEffect","Commands","PreviewDomainMenu"],"mappings":";;;;;AAMO,MAAMA,gBAAgB;IACzB,MAAMC,SAASC;IACf,MAAM,EAAEC,aAAa,EAAE,GAAGC;IAE1BC,UAAU;QACN,IAAI,CAACF,eACD;QAGJF,OAAO,cAAc,CAACK,SAAS,cAAc;IACjD,GAAG;QAACH;KAAc;IAElB,OAAO,WAAP,GAAO,oBAACI,mBAAiBA;QAAC,WAAW;;AACzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseEditor/defaultConfig/Content/Preview/DropZoneManager.js","sources":["../../../../../src/BaseEditor/defaultConfig/Content/Preview/DropZoneManager.ts"],"sourcesContent":["import type { Box } from \"./Box.js\";\n\ntype DropPosition = number | null;\ntype MatchChangeCallback = (hasMatch: boolean) => void;\n\nexport interface DropZoneProximity {\n box: Box;\n position: DropPosition;\n}\n\ninterface DropzoneEntry {\n id: string;\n box: Box;\n canAccept?: () => boolean;\n onProximityChange: (proximity: DropZoneProximity | null) => void;\n}\n\nexport class DropZoneManager {\n private zones = new Map<string, DropzoneEntry>();\n private currentTargetId: string | null = null;\n private currentPosition: DropPosition = null;\n private animationFrame: number | null = null;\n private currentBox: Box | null = null;\n private matchCallbacks = new Set<MatchChangeCallback>();\n\n constructor(private mouse: { x: number; y: number }) {}\n\n register(entry: DropzoneEntry) {\n if (entry.id === \"root\") {\n return;\n }\n\n this.zones.set(entry.id, entry);\n }\n\n unregister(id: string) {\n this.zones.delete(id);\n }\n\n subscribeToMatchChange(cb: MatchChangeCallback): () => void {\n this.matchCallbacks.add(cb);\n return () => this.matchCallbacks.delete(cb);\n }\n\n start() {\n const runDropzoneLoop = () => {\n this.tick();\n this.animationFrame = requestAnimationFrame(runDropzoneLoop);\n };\n this.animationFrame = requestAnimationFrame(runDropzoneLoop);\n }\n\n stop() {\n if (this.animationFrame) {\n cancelAnimationFrame(this.animationFrame);\n }\n }\n\n getLastMatchedPosition() {\n if (!this.currentBox) {\n return null;\n }\n\n return {\n parentId: this.currentBox.parentId,\n slot: this.currentBox.parentSlot,\n index: this.currentBox.parentIndex + (this.currentPosition ?? 0)\n };\n }\n\n tick() {\n const scrollYOffset = this.getScrollOffset();\n const threshold = 10;\n const mouseX = this.mouse.x;\n const mouseY = this.mouse.y + scrollYOffset;\n\n let matchedId: string | null = null;\n let matchedPosition: DropPosition = null;\n let matchedBox: Box | null = null;\n\n // Collect all candidate matches with their canAccept callback.\n const candidates: { id: string; box: Box; position: number; canAccept?: () => boolean }[] =\n [];\n\n for (const [id, { box, canAccept }] of this.zones) {\n const isWithinX = mouseX >= box.left && mouseX <= box.right;\n\n if (!isWithinX) {\n continue;\n }\n\n if (Math.abs(mouseY - box.top) <= threshold) {\n candidates.push({ id, box, position: 0, canAccept });\n }\n\n if (Math.abs(mouseY - box.bottom) <= threshold) {\n candidates.push({ id, box, position: 1, canAccept });\n }\n }\n\n if (candidates.length > 0) {\n // Filter to only eligible candidates.\n const eligible = candidates.filter(c => !c.canAccept || c.canAccept());\n\n if (eligible.length > 0) {\n const uniqueDepths = [...new Set(eligible.map(c => c.box.depth))].sort(\n (a, b) => b - a\n );\n\n if (uniqueDepths.length === 1) {\n const winner = eligible[0];\n matchedId = winner.id;\n matchedPosition = winner.position;\n matchedBox = winner.box;\n } else {\n // Use X position to select depth band among eligible candidates only.\n let rangeLeft = Infinity;\n let rangeRight = -Infinity;\n for (const c of eligible) {\n rangeLeft = Math.min(rangeLeft, c.box.left);\n rangeRight = Math.max(rangeRight, c.box.right);\n }\n\n const centerX = (rangeLeft + rangeRight) / 2;\n const halfWidth = (rangeRight - rangeLeft) / 2;\n\n // 0 at center, 1 at edges.\n const distFromCenter =\n halfWidth > 0 ? Math.abs(mouseX - centerX) / halfWidth : 0;\n\n // Map distance to depth index: center → 0 (deepest), edges → last (shallowest).\n const depthIndex = Math.min(\n Math.floor(distFromCenter * uniqueDepths.length),\n uniqueDepths.length - 1\n );\n\n const winner = eligible.find(c => c.box.depth === uniqueDepths[depthIndex]);\n if (winner) {\n matchedId = winner.id;\n matchedPosition = winner.position;\n matchedBox = winner.box;\n }\n }\n }\n }\n\n if (matchedId !== this.currentTargetId || matchedPosition !== this.currentPosition) {\n this.currentTargetId = matchedId;\n this.currentPosition = matchedPosition;\n this.currentBox = matchedBox;\n\n this.matchCallbacks.forEach(cb => cb(matchedId !== null));\n\n for (const [id, entry] of this.zones) {\n const isTarget = id === matchedId;\n entry.onProximityChange(\n isTarget ? { box: matchedBox!, position: matchedPosition } : null\n );\n }\n }\n }\n\n private getScrollOffset() {\n const container = document.getElementById(\"preview-container\");\n if (!container) {\n return 0;\n }\n\n return container.scrollTop;\n }\n}\n"],"names":["DropZoneManager","mouse","Map","Set","entry","id","cb","runDropzoneLoop","requestAnimationFrame","cancelAnimationFrame","scrollYOffset","threshold","mouseX","mouseY","matchedId","matchedPosition","matchedBox","candidates","box","canAccept","isWithinX","Math","eligible","c","uniqueDepths","a","b","winner","rangeLeft","Infinity","rangeRight","centerX","halfWidth","distFromCenter","depthIndex","isTarget","container","document"],"mappings":"AAiBO,MAAMA;IAQT,YAAoBC,KAA+B,CAAE;aAAjCA,KAAK,GAALA;aAPZ,KAAK,GAAG,IAAIC;aACZ,eAAe,GAAkB;aACjC,eAAe,GAAiB;aAChC,cAAc,GAAkB;aAChC,UAAU,GAAe;aACzB,cAAc,GAAG,IAAIC;IAEyB;IAEtD,SAASC,KAAoB,EAAE;QAC3B,IAAIA,AAAa,WAAbA,MAAM,EAAE,EACR;QAGJ,IAAI,CAAC,KAAK,CAAC,GAAG,CAACA,MAAM,EAAE,EAAEA;IAC7B;IAEA,WAAWC,EAAU,EAAE;QACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAACA;IACtB;IAEA,uBAAuBC,EAAuB,EAAc;QACxD,IAAI,CAAC,cAAc,CAAC,GAAG,CAACA;QACxB,OAAO,IAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAACA;IAC5C;IAEA,QAAQ;QACJ,MAAMC,kBAAkB;YACpB,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,cAAc,GAAGC,sBAAsBD;QAChD;QACA,IAAI,CAAC,cAAc,GAAGC,sBAAsBD;IAChD;IAEA,OAAO;QACH,IAAI,IAAI,CAAC,cAAc,EACnBE,qBAAqB,IAAI,CAAC,cAAc;IAEhD;IAEA,yBAAyB;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU,EAChB,OAAO;QAGX,OAAO;YACH,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ;YAClC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU;YAChC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,GAAI,KAAI,CAAC,eAAe,IAAI;QAClE;IACJ;IAEA,OAAO;QACH,MAAMC,gBAAgB,IAAI,CAAC,eAAe;QAC1C,MAAMC,YAAY;QAClB,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,GAAGH;QAE9B,IAAII,YAA2B;QAC/B,IAAIC,kBAAgC;QACpC,IAAIC,aAAyB;QAG7B,MAAMC,aACF,EAAE;QAEN,KAAK,MAAM,CAACZ,IAAI,EAAEa,GAAG,EAAEC,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAE;YAC/C,MAAMC,YAAYR,UAAUM,IAAI,IAAI,IAAIN,UAAUM,IAAI,KAAK;YAE3D,IAAKE;gBAIL,IAAIC,KAAK,GAAG,CAACR,SAASK,IAAI,GAAG,KAAKP,WAC9BM,WAAW,IAAI,CAAC;oBAAEZ;oBAAIa;oBAAK,UAAU;oBAAGC;gBAAU;gBAGtD,IAAIE,KAAK,GAAG,CAACR,SAASK,IAAI,MAAM,KAAKP,WACjCM,WAAW,IAAI,CAAC;oBAAEZ;oBAAIa;oBAAK,UAAU;oBAAGC;gBAAU;;QAE1D;QAEA,IAAIF,WAAW,MAAM,GAAG,GAAG;YAEvB,MAAMK,WAAWL,WAAW,MAAM,CAACM,CAAAA,IAAK,CAACA,EAAE,SAAS,IAAIA,EAAE,SAAS;YAEnE,IAAID,SAAS,MAAM,GAAG,GAAG;gBACrB,MAAME,eAAe;uBAAI,IAAIrB,IAAImB,SAAS,GAAG,CAACC,CAAAA,IAAKA,EAAE,GAAG,CAAC,KAAK;iBAAG,CAAC,IAAI,CAClE,CAACE,GAAGC,IAAMA,IAAID;gBAGlB,IAAID,AAAwB,MAAxBA,aAAa,MAAM,EAAQ;oBAC3B,MAAMG,SAASL,QAAQ,CAAC,EAAE;oBAC1BR,YAAYa,OAAO,EAAE;oBACrBZ,kBAAkBY,OAAO,QAAQ;oBACjCX,aAAaW,OAAO,GAAG;gBAC3B,OAAO;oBAEH,IAAIC,YAAYC;
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Content/Preview/DropZoneManager.js","sources":["../../../../../src/BaseEditor/defaultConfig/Content/Preview/DropZoneManager.ts"],"sourcesContent":["import type { Box } from \"./Box.js\";\n\ntype DropPosition = number | null;\ntype MatchChangeCallback = (hasMatch: boolean) => void;\n\nexport interface DropZoneProximity {\n box: Box;\n position: DropPosition;\n}\n\ninterface DropzoneEntry {\n id: string;\n box: Box;\n canAccept?: () => boolean;\n onProximityChange: (proximity: DropZoneProximity | null) => void;\n}\n\nexport class DropZoneManager {\n private zones = new Map<string, DropzoneEntry>();\n private currentTargetId: string | null = null;\n private currentPosition: DropPosition = null;\n private animationFrame: number | null = null;\n private currentBox: Box | null = null;\n private matchCallbacks = new Set<MatchChangeCallback>();\n\n constructor(private mouse: { x: number; y: number }) {}\n\n register(entry: DropzoneEntry) {\n if (entry.id === \"root\") {\n return;\n }\n\n this.zones.set(entry.id, entry);\n }\n\n unregister(id: string) {\n this.zones.delete(id);\n }\n\n subscribeToMatchChange(cb: MatchChangeCallback): () => void {\n this.matchCallbacks.add(cb);\n return () => this.matchCallbacks.delete(cb);\n }\n\n start() {\n const runDropzoneLoop = () => {\n this.tick();\n this.animationFrame = requestAnimationFrame(runDropzoneLoop);\n };\n this.animationFrame = requestAnimationFrame(runDropzoneLoop);\n }\n\n stop() {\n if (this.animationFrame) {\n cancelAnimationFrame(this.animationFrame);\n }\n }\n\n getLastMatchedPosition() {\n if (!this.currentBox) {\n return null;\n }\n\n return {\n parentId: this.currentBox.parentId,\n slot: this.currentBox.parentSlot,\n index: this.currentBox.parentIndex + (this.currentPosition ?? 0)\n };\n }\n\n tick() {\n const scrollYOffset = this.getScrollOffset();\n const threshold = 10;\n const mouseX = this.mouse.x;\n const mouseY = this.mouse.y + scrollYOffset;\n\n let matchedId: string | null = null;\n let matchedPosition: DropPosition = null;\n let matchedBox: Box | null = null;\n\n // Collect all candidate matches with their canAccept callback.\n const candidates: { id: string; box: Box; position: number; canAccept?: () => boolean }[] =\n [];\n\n for (const [id, { box, canAccept }] of this.zones) {\n const isWithinX = mouseX >= box.left && mouseX <= box.right;\n\n if (!isWithinX) {\n continue;\n }\n\n if (Math.abs(mouseY - box.top) <= threshold) {\n candidates.push({ id, box, position: 0, canAccept });\n }\n\n if (Math.abs(mouseY - box.bottom) <= threshold) {\n candidates.push({ id, box, position: 1, canAccept });\n }\n }\n\n if (candidates.length > 0) {\n // Filter to only eligible candidates.\n const eligible = candidates.filter(c => !c.canAccept || c.canAccept());\n\n if (eligible.length > 0) {\n const uniqueDepths = [...new Set(eligible.map(c => c.box.depth))].sort(\n (a, b) => b - a\n );\n\n if (uniqueDepths.length === 1) {\n const winner = eligible[0];\n matchedId = winner.id;\n matchedPosition = winner.position;\n matchedBox = winner.box;\n } else {\n // Use X position to select depth band among eligible candidates only.\n let rangeLeft = Infinity;\n let rangeRight = -Infinity;\n for (const c of eligible) {\n rangeLeft = Math.min(rangeLeft, c.box.left);\n rangeRight = Math.max(rangeRight, c.box.right);\n }\n\n const centerX = (rangeLeft + rangeRight) / 2;\n const halfWidth = (rangeRight - rangeLeft) / 2;\n\n // 0 at center, 1 at edges.\n const distFromCenter =\n halfWidth > 0 ? Math.abs(mouseX - centerX) / halfWidth : 0;\n\n // Map distance to depth index: center → 0 (deepest), edges → last (shallowest).\n const depthIndex = Math.min(\n Math.floor(distFromCenter * uniqueDepths.length),\n uniqueDepths.length - 1\n );\n\n const winner = eligible.find(c => c.box.depth === uniqueDepths[depthIndex]);\n if (winner) {\n matchedId = winner.id;\n matchedPosition = winner.position;\n matchedBox = winner.box;\n }\n }\n }\n }\n\n if (matchedId !== this.currentTargetId || matchedPosition !== this.currentPosition) {\n this.currentTargetId = matchedId;\n this.currentPosition = matchedPosition;\n this.currentBox = matchedBox;\n\n this.matchCallbacks.forEach(cb => cb(matchedId !== null));\n\n for (const [id, entry] of this.zones) {\n const isTarget = id === matchedId;\n entry.onProximityChange(\n isTarget ? { box: matchedBox!, position: matchedPosition } : null\n );\n }\n }\n }\n\n private getScrollOffset() {\n const container = document.getElementById(\"preview-container\");\n if (!container) {\n return 0;\n }\n\n return container.scrollTop;\n }\n}\n"],"names":["DropZoneManager","mouse","Map","Set","entry","id","cb","runDropzoneLoop","requestAnimationFrame","cancelAnimationFrame","scrollYOffset","threshold","mouseX","mouseY","matchedId","matchedPosition","matchedBox","candidates","box","canAccept","isWithinX","Math","eligible","c","uniqueDepths","a","b","winner","rangeLeft","Infinity","rangeRight","centerX","halfWidth","distFromCenter","depthIndex","isTarget","container","document"],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ interface IframeProps {
|
|
|
8
8
|
viewportManager: ViewportManager;
|
|
9
9
|
onConnected: (messenger: Messenger) => void;
|
|
10
10
|
}
|
|
11
|
-
export declare const Iframe: (({ url, timestamp, ...props }: IframeProps) => React.JSX.Element) & {
|
|
12
|
-
|
|
11
|
+
export declare const Iframe: (({ url, timestamp, ...props }: IframeProps) => React.JSX.Element) & React.NamedExoticComponent<IframeProps> & {
|
|
12
|
+
readonly type: ({ url, timestamp, ...props }: IframeProps) => React.JSX.Element;
|
|
13
13
|
};
|
|
14
14
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const ElementOverlays: (() => React.JSX.Element) & {
|
|
3
|
-
|
|
2
|
+
export declare const ElementOverlays: (() => React.JSX.Element) & React.NamedExoticComponent<unknown> & {
|
|
3
|
+
readonly type: () => React.JSX.Element;
|
|
4
4
|
};
|
|
@@ -11,7 +11,7 @@ const PreviewContainer = ({ children })=>{
|
|
|
11
11
|
style: {
|
|
12
12
|
height: `calc(100vh - ${uiHeight}px)`
|
|
13
13
|
},
|
|
14
|
-
className: "bg-neutral-subtle relative flex flex-col items-center w-full overflow-auto p-[24px]"
|
|
14
|
+
className: "fill-grid bg-neutral-subtle relative flex flex-col items-center w-full overflow-auto p-[24px]"
|
|
15
15
|
}, children), isDragging && /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement("div", {
|
|
16
16
|
className: "absolute z-50 pointer-events-none animate-fade-in top-0 left-0 right-0 h-2 bg-[#f9d8ce]"
|
|
17
17
|
}), /*#__PURE__*/ react.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js","sources":["../../../../../src/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.tsx"],"sourcesContent":["import React from \"react\";\nimport { useSelectFromEditor } from \"~/BaseEditor/hooks/useSelectFromEditor.js\";\nimport { useIsDragging } from \"./useIsDragging.js\";\n\ninterface PreviewContainerProps {\n children: React.ReactNode;\n}\n\nexport const PreviewContainer = ({ children }: PreviewContainerProps) => {\n const uiHeight = useSelectFromEditor(state => state.uiReservedSpace.height);\n const isDragging = useIsDragging();\n\n return (\n <>\n <div className={\"relative\"}>\n <div\n id={\"preview-container\"}\n style={{ height: `calc(100vh - ${uiHeight}px)` }}\n className={\n \"bg-neutral-subtle relative flex flex-col items-center w-full overflow-auto p-[24px]\"\n }\n >\n {children}\n </div>\n {isDragging && (\n <>\n <div\n className={\n \"absolute z-50 pointer-events-none animate-fade-in top-0 left-0 right-0 h-2 bg-[#f9d8ce]\"\n }\n />\n <div\n className={\n \"absolute z-50 pointer-events-none animate-fade-in bottom-0 left-0 right-0 h-2 bg-[#f9d8ce]\"\n }\n />\n <div\n className={\n \"absolute z-50 pointer-events-none animate-fade-in top-0 left-0 bottom-0 w-2 bg-[#f9d8ce]\"\n }\n />\n <div\n className={\n \"absolute z-50 pointer-events-none animate-fade-in top-0 right-0 bottom-0 w-2 bg-[#f9d8ce]\"\n }\n />\n </>\n )}\n </div>\n </>\n );\n};\n"],"names":["PreviewContainer","children","uiHeight","useSelectFromEditor","state","isDragging","useIsDragging"],"mappings":";;;AAQO,MAAMA,mBAAmB,CAAC,EAAEC,QAAQ,EAAyB;IAChE,MAAMC,WAAWC,oBAAoBC,CAAAA,QAASA,MAAM,eAAe,CAAC,MAAM;IAC1E,MAAMC,aAAaC;IAEnB,OAAO,WAAP,GACI,wDACI,oBAAC;QAAI,WAAW;qBACZ,oBAAC;QACG,IAAI;QACJ,OAAO;YAAE,QAAQ,CAAC,aAAa,EAAEJ,SAAS,GAAG,CAAC;QAAC;QAC/C,WACI;OAGHD,WAEJI,cAAc,WAAdA,GACG,wDACI,oBAAC;QACG,WACI;sBAGR,oBAAC;QACG,WACI;sBAGR,oBAAC;QACG,WACI;sBAGR,oBAAC;QACG,WACI;;AAQhC"}
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js","sources":["../../../../../src/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.tsx"],"sourcesContent":["import React from \"react\";\nimport { useSelectFromEditor } from \"~/BaseEditor/hooks/useSelectFromEditor.js\";\nimport { useIsDragging } from \"./useIsDragging.js\";\n\ninterface PreviewContainerProps {\n children: React.ReactNode;\n}\n\nexport const PreviewContainer = ({ children }: PreviewContainerProps) => {\n const uiHeight = useSelectFromEditor(state => state.uiReservedSpace.height);\n const isDragging = useIsDragging();\n\n return (\n <>\n <div className={\"relative\"}>\n <div\n id={\"preview-container\"}\n style={{ height: `calc(100vh - ${uiHeight}px)` }}\n className={\n \"fill-grid bg-neutral-subtle relative flex flex-col items-center w-full overflow-auto p-[24px]\"\n }\n >\n {children}\n </div>\n {isDragging && (\n <>\n <div\n className={\n \"absolute z-50 pointer-events-none animate-fade-in top-0 left-0 right-0 h-2 bg-[#f9d8ce]\"\n }\n />\n <div\n className={\n \"absolute z-50 pointer-events-none animate-fade-in bottom-0 left-0 right-0 h-2 bg-[#f9d8ce]\"\n }\n />\n <div\n className={\n \"absolute z-50 pointer-events-none animate-fade-in top-0 left-0 bottom-0 w-2 bg-[#f9d8ce]\"\n }\n />\n <div\n className={\n \"absolute z-50 pointer-events-none animate-fade-in top-0 right-0 bottom-0 w-2 bg-[#f9d8ce]\"\n }\n />\n </>\n )}\n </div>\n </>\n );\n};\n"],"names":["PreviewContainer","children","uiHeight","useSelectFromEditor","state","isDragging","useIsDragging"],"mappings":";;;AAQO,MAAMA,mBAAmB,CAAC,EAAEC,QAAQ,EAAyB;IAChE,MAAMC,WAAWC,oBAAoBC,CAAAA,QAASA,MAAM,eAAe,CAAC,MAAM;IAC1E,MAAMC,aAAaC;IAEnB,OAAO,WAAP,GACI,wDACI,oBAAC;QAAI,WAAW;qBACZ,oBAAC;QACG,IAAI;QACJ,OAAO;YAAE,QAAQ,CAAC,aAAa,EAAEJ,SAAS,GAAG,CAAC;QAAC;QAC/C,WACI;OAGHD,WAEJI,cAAc,WAAdA,GACG,wDACI,oBAAC;QACG,WACI;sBAGR,oBAAC;QACG,WACI;sBAGR,oBAAC;QACG,WACI;sBAGR,oBAAC;QACG,WACI;;AAQhC"}
|
|
@@ -1,26 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { useLocalStorage } from "@webiny/app";
|
|
3
|
-
import { usePreviewDomain } from "@webiny/frontend-settings/exports/admin.js";
|
|
4
|
-
const CUSTOM_PREVIEW_DOMAIN = "custom_preview_domain";
|
|
5
|
-
const usePreviewDomain_usePreviewDomain = ()=>{
|
|
6
|
-
const { previewDomain, isOverridden } = usePreviewDomain();
|
|
7
|
-
const localStorage = useLocalStorage();
|
|
8
|
-
const setPreviewDomain = useCallback((domain)=>{
|
|
9
|
-
if (domain === previewDomain) localStorage.remove(CUSTOM_PREVIEW_DOMAIN);
|
|
10
|
-
else localStorage.set(CUSTOM_PREVIEW_DOMAIN, domain);
|
|
11
|
-
}, [
|
|
12
|
-
previewDomain
|
|
13
|
-
]);
|
|
14
|
-
const unsetPreviewDomain = useCallback(()=>{
|
|
15
|
-
localStorage.remove(CUSTOM_PREVIEW_DOMAIN);
|
|
16
|
-
}, []);
|
|
17
|
-
return {
|
|
18
|
-
previewDomain,
|
|
19
|
-
setPreviewDomain,
|
|
20
|
-
unsetPreviewDomain,
|
|
21
|
-
isOverridden
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
export { usePreviewDomain_usePreviewDomain as usePreviewDomain };
|
|
25
|
-
|
|
26
|
-
//# sourceMappingURL=usePreviewDomain.js.map
|
|
1
|
+
export { usePreviewDomain } from "@webiny/frontend-settings/exports/admin.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const DocumentStateEditor: (() => React.JSX.Element) & {
|
|
3
|
-
|
|
2
|
+
export declare const DocumentStateEditor: (() => React.JSX.Element) & React.NamedExoticComponent<unknown> & {
|
|
3
|
+
readonly type: () => React.JSX.Element;
|
|
4
4
|
};
|
|
@@ -4,6 +4,9 @@ import { TextInputRenderer } from "../../inputRenderers/TextInput.js";
|
|
|
4
4
|
import { NumberInputRenderer } from "../../inputRenderers/NumberInput.js";
|
|
5
5
|
import { BooleanInputRenderer } from "../../inputRenderers/BooleanInput.js";
|
|
6
6
|
import { TextareaInputRenderer } from "../../inputRenderers/TextareaInput.js";
|
|
7
|
+
import { TagsInputRenderer } from "../../inputRenderers/TagsInput.js";
|
|
8
|
+
import { DateTimeInputRenderer } from "../../inputRenderers/DateTimeInput.js";
|
|
9
|
+
import { RadioInputRenderer } from "../../inputRenderers/RadioInput.js";
|
|
7
10
|
import { LexicalInputRenderer } from "../../inputRenderers/LexicalInput/LexicalInput.js";
|
|
8
11
|
import { DefaultLexicalConfig } from "../../inputRenderers/LexicalInput/DefaultLexicalConfig.js";
|
|
9
12
|
import { SlotInputRenderer } from "../../inputRenderers/SlotInput.js";
|
|
@@ -22,9 +25,18 @@ const ElementInputRenderers = ()=>/*#__PURE__*/ react.createElement(react.Fragme
|
|
|
22
25
|
}), /*#__PURE__*/ react.createElement(EditorConfig.ElementInput.Renderer, {
|
|
23
26
|
name: "Webiny/Select",
|
|
24
27
|
component: SelectInputRenderer
|
|
28
|
+
}), /*#__PURE__*/ react.createElement(EditorConfig.ElementInput.Renderer, {
|
|
29
|
+
name: "Webiny/RadioGroup",
|
|
30
|
+
component: RadioInputRenderer
|
|
25
31
|
}), /*#__PURE__*/ react.createElement(EditorConfig.ElementInput.Renderer, {
|
|
26
32
|
name: "Webiny/Textarea",
|
|
27
33
|
component: TextareaInputRenderer
|
|
34
|
+
}), /*#__PURE__*/ react.createElement(EditorConfig.ElementInput.Renderer, {
|
|
35
|
+
name: "Webiny/Tags",
|
|
36
|
+
component: TagsInputRenderer
|
|
37
|
+
}), /*#__PURE__*/ react.createElement(EditorConfig.ElementInput.Renderer, {
|
|
38
|
+
name: "Webiny/DateTime",
|
|
39
|
+
component: DateTimeInputRenderer
|
|
28
40
|
}), /*#__PURE__*/ react.createElement(EditorConfig.ElementInput.Renderer, {
|
|
29
41
|
name: "Webiny/Number",
|
|
30
42
|
component: NumberInputRenderer
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseEditor/defaultConfig/ElementInputRenderers.js","sources":["../../../src/BaseEditor/defaultConfig/ElementInputRenderers.tsx"],"sourcesContent":["import React from \"react\";\nimport { EditorConfig } from \"~/BaseEditor/index.js\";\nimport { TextInputRenderer } from \"~/inputRenderers/TextInput.js\";\nimport { NumberInputRenderer } from \"~/inputRenderers/NumberInput.js\";\nimport { BooleanInputRenderer } from \"~/inputRenderers/BooleanInput.js\";\nimport { TextareaInputRenderer } from \"~/inputRenderers/TextareaInput.js\";\nimport { LexicalInputRenderer } from \"~/inputRenderers/LexicalInput/LexicalInput.js\";\nimport { DefaultLexicalConfig } from \"~/inputRenderers/LexicalInput/DefaultLexicalConfig.js\";\nimport { SlotInputRenderer } from \"~/inputRenderers/SlotInput.js\";\nimport { GridLayoutInputRenderer } from \"~/inputRenderers/GridLayoutInput.js\";\nimport { SelectInputRenderer } from \"~/inputRenderers/SelectInput.js\";\nimport { FileInputRenderer } from \"~/inputRenderers/FileInput.js\";\nimport { FragmentSelectorInputRenderer } from \"~/inputRenderers/FragmentSelectorInput.js\";\nimport { ObjectInputRenderer } from \"~/inputRenderers/ObjectInput/ObjectInputRenderer.js\";\nimport { ContentEntryInputRenderer } from \"~/inputRenderers/ContentEntryInput.js\";\n\nexport const ElementInputRenderers = () => {\n return (\n <>\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Slot\"}\n component={SlotInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Input\"}\n component={TextInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Select\"}\n component={SelectInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Textarea\"}\n component={TextareaInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Number\"}\n component={NumberInputRenderer}\n />\n {/* Configure Lexical Editor*/}\n <DefaultLexicalConfig />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Lexical\"}\n component={LexicalInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Switch\"}\n component={BooleanInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/GridLayout\"}\n component={GridLayoutInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/FileManager\"}\n component={FileInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/FragmentSelector\"}\n component={FragmentSelectorInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Object\"}\n component={ObjectInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/ContentEntry\"}\n component={ContentEntryInputRenderer}\n />\n </>\n );\n};\n"],"names":["ElementInputRenderers","EditorConfig","SlotInputRenderer","TextInputRenderer","SelectInputRenderer","TextareaInputRenderer","NumberInputRenderer","DefaultLexicalConfig","LexicalInputRenderer","BooleanInputRenderer","GridLayoutInputRenderer","FileInputRenderer","FragmentSelectorInputRenderer","ObjectInputRenderer","ContentEntryInputRenderer"],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/ElementInputRenderers.js","sources":["../../../src/BaseEditor/defaultConfig/ElementInputRenderers.tsx"],"sourcesContent":["import React from \"react\";\nimport { EditorConfig } from \"~/BaseEditor/index.js\";\nimport { TextInputRenderer } from \"~/inputRenderers/TextInput.js\";\nimport { NumberInputRenderer } from \"~/inputRenderers/NumberInput.js\";\nimport { BooleanInputRenderer } from \"~/inputRenderers/BooleanInput.js\";\nimport { TextareaInputRenderer } from \"~/inputRenderers/TextareaInput.js\";\nimport { TagsInputRenderer } from \"~/inputRenderers/TagsInput.js\";\nimport { DateTimeInputRenderer } from \"~/inputRenderers/DateTimeInput.js\";\nimport { RadioInputRenderer } from \"~/inputRenderers/RadioInput.js\";\nimport { LexicalInputRenderer } from \"~/inputRenderers/LexicalInput/LexicalInput.js\";\nimport { DefaultLexicalConfig } from \"~/inputRenderers/LexicalInput/DefaultLexicalConfig.js\";\nimport { SlotInputRenderer } from \"~/inputRenderers/SlotInput.js\";\nimport { GridLayoutInputRenderer } from \"~/inputRenderers/GridLayoutInput.js\";\nimport { SelectInputRenderer } from \"~/inputRenderers/SelectInput.js\";\nimport { FileInputRenderer } from \"~/inputRenderers/FileInput.js\";\nimport { FragmentSelectorInputRenderer } from \"~/inputRenderers/FragmentSelectorInput.js\";\nimport { ObjectInputRenderer } from \"~/inputRenderers/ObjectInput/ObjectInputRenderer.js\";\nimport { ContentEntryInputRenderer } from \"~/inputRenderers/ContentEntryInput.js\";\n\nexport const ElementInputRenderers = () => {\n return (\n <>\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Slot\"}\n component={SlotInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Input\"}\n component={TextInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Select\"}\n component={SelectInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/RadioGroup\"}\n component={RadioInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Textarea\"}\n component={TextareaInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Tags\"}\n component={TagsInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/DateTime\"}\n component={DateTimeInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Number\"}\n component={NumberInputRenderer}\n />\n {/* Configure Lexical Editor*/}\n <DefaultLexicalConfig />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Lexical\"}\n component={LexicalInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Switch\"}\n component={BooleanInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/GridLayout\"}\n component={GridLayoutInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/FileManager\"}\n component={FileInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/FragmentSelector\"}\n component={FragmentSelectorInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/Object\"}\n component={ObjectInputRenderer}\n />\n <EditorConfig.ElementInput.Renderer\n name={\"Webiny/ContentEntry\"}\n component={ContentEntryInputRenderer}\n />\n </>\n );\n};\n"],"names":["ElementInputRenderers","EditorConfig","SlotInputRenderer","TextInputRenderer","SelectInputRenderer","RadioInputRenderer","TextareaInputRenderer","TagsInputRenderer","DateTimeInputRenderer","NumberInputRenderer","DefaultLexicalConfig","LexicalInputRenderer","BooleanInputRenderer","GridLayoutInputRenderer","FileInputRenderer","FragmentSelectorInputRenderer","ObjectInputRenderer","ContentEntryInputRenderer"],"mappings":";;;;;;;;;;;;;;;;;;AAmBO,MAAMA,wBAAwB,IAC1B,WAAP,GACI,wDACI,oBAACC,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWC;sBAEf,oBAACD,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWE;sBAEf,oBAACF,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWG;sBAEf,oBAACH,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWI;sBAEf,oBAACJ,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWK;sBAEf,oBAACL,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWM;sBAEf,oBAACN,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWO;sBAEf,oBAACP,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWQ;sBAGf,oBAACC,sBAAoBA,OAAAA,WAAAA,GACrB,oBAACT,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWU;sBAEf,oBAACV,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWW;sBAEf,oBAACX,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWY;sBAEf,oBAACZ,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWa;sBAEf,oBAACb,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWc;sBAEf,oBAACd,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWe;sBAEf,oBAACf,aAAa,YAAY,CAAC,QAAQ;QAC/B,MAAM;QACN,WAAWgB"}
|
|
@@ -2,10 +2,7 @@ import react from "react";
|
|
|
2
2
|
import { Icon } from "@webiny/admin-ui";
|
|
3
3
|
import { ReactComponent } from "@webiny/icons/notes.svg";
|
|
4
4
|
import { Sidebar } from "../../../config/Sidebar/Sidebar.js";
|
|
5
|
-
|
|
6
|
-
const ElementSettingsGroup = ()=>/*#__PURE__*/ react.createElement(ScrollableContainer, {
|
|
7
|
-
tabIndex: -1
|
|
8
|
-
}, /*#__PURE__*/ react.createElement(Sidebar.Group.Tab, {
|
|
5
|
+
const ElementSettingsGroup = ()=>/*#__PURE__*/ react.createElement(Sidebar.Group.Tab, {
|
|
9
6
|
name: "element",
|
|
10
7
|
label: "Element",
|
|
11
8
|
icon: /*#__PURE__*/ react.createElement(Icon, {
|
|
@@ -15,7 +12,7 @@ const ElementSettingsGroup = ()=>/*#__PURE__*/ react.createElement(ScrollableCon
|
|
|
15
12
|
element: /*#__PURE__*/ react.createElement(Sidebar.Elements, {
|
|
16
13
|
group: "element"
|
|
17
14
|
})
|
|
18
|
-
})
|
|
15
|
+
});
|
|
19
16
|
export { ElementSettingsGroup };
|
|
20
17
|
|
|
21
18
|
//# sourceMappingURL=ElementSettingsGroup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js","sources":["../../../../../src/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.tsx"],"sourcesContent":["import React from \"react\";\nimport { Icon } from \"@webiny/admin-ui\";\nimport { ReactComponent as NotesIcon } from \"@webiny/icons/notes.svg\";\nimport { Sidebar } from \"~/BaseEditor/config/Sidebar/Sidebar.js\";\
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js","sources":["../../../../../src/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.tsx"],"sourcesContent":["import React from \"react\";\nimport { Icon } from \"@webiny/admin-ui\";\nimport { ReactComponent as NotesIcon } from \"@webiny/icons/notes.svg\";\nimport { Sidebar } from \"~/BaseEditor/config/Sidebar/Sidebar.js\";\n\nexport const ElementSettingsGroup = () => (\n <Sidebar.Group.Tab\n name={\"element\"}\n label={\"Element\"}\n icon={<Icon icon={<NotesIcon />} label={\"Element\"} />}\n element={<Sidebar.Elements group={\"element\"} />}\n />\n);\n"],"names":["ElementSettingsGroup","Sidebar","Icon","NotesIcon"],"mappings":";;;;AAKO,MAAMA,uBAAuB,kBAChC,oBAACC,QAAQ,KAAK,CAAC,GAAG;QACd,MAAM;QACN,OAAO;QACP,oBAAM,oBAACC,MAAIA;YAAC,oBAAM,oBAACC,gBAASA;YAAK,OAAO;;QACxC,uBAAS,oBAACF,QAAQ,QAAQ;YAAC,OAAO"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DocumentElementBindings, JsonPatchOperation } from "@webiny/website-builder-sdk";
|
|
2
|
+
interface IBindingsUpdate {
|
|
3
|
+
createJsonPatch(bindings: DocumentElementBindings): JsonPatchOperation[];
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Tracks what the preview currently shows for one element, so preview patches can be computed
|
|
7
|
+
* against it.
|
|
8
|
+
*
|
|
9
|
+
* The preview applies each patch on top of its own copy of the element's bindings. Computing a patch
|
|
10
|
+
* against the committed bindings instead goes wrong as soon as one preview patch has been applied:
|
|
11
|
+
* going back to the committed value (OS undo, or deleting what was just typed) diffs to an empty
|
|
12
|
+
* patch, and the preview keeps showing the last previewed value.
|
|
13
|
+
*
|
|
14
|
+
* The tracked copy is tied to the committed bindings it started from. Once those change, the editor
|
|
15
|
+
* has sent the preview the committed state, so tracking starts over from it.
|
|
16
|
+
*/
|
|
17
|
+
export declare class PreviewedBindings {
|
|
18
|
+
private source;
|
|
19
|
+
private bindings;
|
|
20
|
+
createPatch(update: IBindingsUpdate, committed: DocumentElementBindings): JsonPatchOperation[];
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsonPatch } from "@webiny/website-builder-sdk";
|
|
2
|
+
class PreviewedBindings {
|
|
3
|
+
createPatch(update, committed) {
|
|
4
|
+
const base = this.source === committed && this.bindings ? this.bindings : committed;
|
|
5
|
+
const patch = update.createJsonPatch(base);
|
|
6
|
+
this.source = committed;
|
|
7
|
+
this.bindings = jsonPatch.applyPatch(structuredClone(base), patch, false, true).newDocument;
|
|
8
|
+
return patch;
|
|
9
|
+
}
|
|
10
|
+
constructor(){
|
|
11
|
+
this.source = null;
|
|
12
|
+
this.bindings = null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export { PreviewedBindings };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=PreviewedBindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.js","sources":["../../../../../src/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.ts"],"sourcesContent":["import { jsonPatch } from \"@webiny/website-builder-sdk\";\nimport type { DocumentElementBindings, JsonPatchOperation } from \"@webiny/website-builder-sdk\";\n\ninterface IBindingsUpdate {\n createJsonPatch(bindings: DocumentElementBindings): JsonPatchOperation[];\n}\n\n/**\n * Tracks what the preview currently shows for one element, so preview patches can be computed\n * against it.\n *\n * The preview applies each patch on top of its own copy of the element's bindings. Computing a patch\n * against the committed bindings instead goes wrong as soon as one preview patch has been applied:\n * going back to the committed value (OS undo, or deleting what was just typed) diffs to an empty\n * patch, and the preview keeps showing the last previewed value.\n *\n * The tracked copy is tied to the committed bindings it started from. Once those change, the editor\n * has sent the preview the committed state, so tracking starts over from it.\n */\nexport class PreviewedBindings {\n private source: DocumentElementBindings | null = null;\n private bindings: DocumentElementBindings | null = null;\n\n createPatch(update: IBindingsUpdate, committed: DocumentElementBindings): JsonPatchOperation[] {\n const base = this.source === committed && this.bindings ? this.bindings : committed;\n const patch = update.createJsonPatch(base);\n\n this.source = committed;\n this.bindings = jsonPatch.applyPatch(structuredClone(base), patch, false, true).newDocument;\n\n return patch;\n }\n}\n"],"names":["PreviewedBindings","update","committed","base","patch","jsonPatch","structuredClone"],"mappings":";AAmBO,MAAMA;IAIT,YAAYC,MAAuB,EAAEC,SAAkC,EAAwB;QAC3F,MAAMC,OAAO,IAAI,CAAC,MAAM,KAAKD,aAAa,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAGA;QAC1E,MAAME,QAAQH,OAAO,eAAe,CAACE;QAErC,IAAI,CAAC,MAAM,GAAGD;QACd,IAAI,CAAC,QAAQ,GAAGG,UAAU,UAAU,CAACC,gBAAgBH,OAAOC,OAAO,OAAO,MAAM,WAAW;QAE3F,OAAOA;IACX;;aAXQ,MAAM,GAAmC;aACzC,QAAQ,GAAmC;;AAWvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { jsonPatch } from "@webiny/website-builder-sdk";
|
|
3
|
+
import { PreviewedBindings } from "./PreviewedBindings.js";
|
|
4
|
+
const bindingsWithTitle = (title)=>({
|
|
5
|
+
inputs: {
|
|
6
|
+
title: {
|
|
7
|
+
id: "title",
|
|
8
|
+
type: "text",
|
|
9
|
+
static: title
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
const updateTo = (target)=>({
|
|
14
|
+
createJsonPatch: (bindings)=>jsonPatch.compare(bindings, target)
|
|
15
|
+
});
|
|
16
|
+
class FakePreview {
|
|
17
|
+
constructor(committed){
|
|
18
|
+
this.bindings = structuredClone(committed);
|
|
19
|
+
}
|
|
20
|
+
apply(patch) {
|
|
21
|
+
jsonPatch.applyPatch(this.bindings, patch, false, true);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
describe("PreviewedBindings", ()=>{
|
|
25
|
+
it("brings the preview back when the value returns to the committed one (undo)", ()=>{
|
|
26
|
+
const committed = bindingsWithTitle("abc");
|
|
27
|
+
const preview = new FakePreview(committed);
|
|
28
|
+
const previewed = new PreviewedBindings();
|
|
29
|
+
preview.apply(previewed.createPatch(updateTo(bindingsWithTitle("abcd")), committed));
|
|
30
|
+
expect(preview.bindings).toEqual(bindingsWithTitle("abcd"));
|
|
31
|
+
const patch = previewed.createPatch(updateTo(bindingsWithTitle("abc")), committed);
|
|
32
|
+
expect(patch).not.toEqual([]);
|
|
33
|
+
preview.apply(patch);
|
|
34
|
+
expect(preview.bindings).toEqual(bindingsWithTitle("abc"));
|
|
35
|
+
});
|
|
36
|
+
it("follows a run of edits", ()=>{
|
|
37
|
+
const committed = bindingsWithTitle("");
|
|
38
|
+
const preview = new FakePreview(committed);
|
|
39
|
+
const previewed = new PreviewedBindings();
|
|
40
|
+
for (const value of [
|
|
41
|
+
"a",
|
|
42
|
+
"ab",
|
|
43
|
+
"abc",
|
|
44
|
+
"ab",
|
|
45
|
+
"a",
|
|
46
|
+
""
|
|
47
|
+
]){
|
|
48
|
+
preview.apply(previewed.createPatch(updateTo(bindingsWithTitle(value)), committed));
|
|
49
|
+
expect(preview.bindings).toEqual(bindingsWithTitle(value));
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
it("starts over from the committed bindings once they change", ()=>{
|
|
53
|
+
const previewed = new PreviewedBindings();
|
|
54
|
+
const first = bindingsWithTitle("abc");
|
|
55
|
+
previewed.createPatch(updateTo(bindingsWithTitle("abcd")), first);
|
|
56
|
+
const second = bindingsWithTitle("xyz");
|
|
57
|
+
const preview = new FakePreview(second);
|
|
58
|
+
const patch = previewed.createPatch(updateTo(bindingsWithTitle("xyz!")), second);
|
|
59
|
+
preview.apply(patch);
|
|
60
|
+
expect(preview.bindings).toEqual(bindingsWithTitle("xyz!"));
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=PreviewedBindings.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.js","sources":["../../../../../src/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { jsonPatch } from \"@webiny/website-builder-sdk\";\nimport type { DocumentElementBindings } from \"@webiny/website-builder-sdk\";\nimport { PreviewedBindings } from \"./PreviewedBindings.js\";\n\nconst bindingsWithTitle = (title: string): DocumentElementBindings => ({\n inputs: { title: { id: \"title\", type: \"text\", static: title } }\n});\n\n// Stands in for InputsUpdater: the patch that turns `bindings` into the updated bindings.\nconst updateTo = (target: DocumentElementBindings) => ({\n createJsonPatch: (bindings: DocumentElementBindings) => jsonPatch.compare(bindings, target)\n});\n\n/**\n * The preview side: like EditingElementRenderer, it applies every patch on top of its own copy.\n */\nclass FakePreview {\n public bindings: DocumentElementBindings;\n\n constructor(committed: DocumentElementBindings) {\n this.bindings = structuredClone(committed);\n }\n\n apply(patch: any[]) {\n jsonPatch.applyPatch(this.bindings, patch, false, true);\n }\n}\n\ndescribe(\"PreviewedBindings\", () => {\n it(\"brings the preview back when the value returns to the committed one (undo)\", () => {\n const committed = bindingsWithTitle(\"abc\");\n const preview = new FakePreview(committed);\n const previewed = new PreviewedBindings();\n\n // Type \"d\".\n preview.apply(previewed.createPatch(updateTo(bindingsWithTitle(\"abcd\")), committed));\n expect(preview.bindings).toEqual(bindingsWithTitle(\"abcd\"));\n\n // Undo back to the committed \"abc\". Diffed against the committed bindings this patch was\n // empty, and the preview stayed on \"abcd\".\n const patch = previewed.createPatch(updateTo(bindingsWithTitle(\"abc\")), committed);\n expect(patch).not.toEqual([]);\n preview.apply(patch);\n expect(preview.bindings).toEqual(bindingsWithTitle(\"abc\"));\n });\n\n it(\"follows a run of edits\", () => {\n const committed = bindingsWithTitle(\"\");\n const preview = new FakePreview(committed);\n const previewed = new PreviewedBindings();\n\n for (const value of [\"a\", \"ab\", \"abc\", \"ab\", \"a\", \"\"]) {\n preview.apply(previewed.createPatch(updateTo(bindingsWithTitle(value)), committed));\n expect(preview.bindings).toEqual(bindingsWithTitle(value));\n }\n });\n\n it(\"starts over from the committed bindings once they change\", () => {\n const previewed = new PreviewedBindings();\n\n const first = bindingsWithTitle(\"abc\");\n previewed.createPatch(updateTo(bindingsWithTitle(\"abcd\")), first);\n\n // A commit (here of \"xyz\") reaches the preview as a document update, not through us.\n const second = bindingsWithTitle(\"xyz\");\n const preview = new FakePreview(second);\n\n const patch = previewed.createPatch(updateTo(bindingsWithTitle(\"xyz!\")), second);\n preview.apply(patch);\n expect(preview.bindings).toEqual(bindingsWithTitle(\"xyz!\"));\n });\n});\n"],"names":["bindingsWithTitle","title","updateTo","target","bindings","jsonPatch","FakePreview","committed","structuredClone","patch","describe","it","preview","previewed","PreviewedBindings","expect","value","first","second"],"mappings":";;;AAKA,MAAMA,oBAAoB,CAACC,QAA4C;QACnE,QAAQ;YAAE,OAAO;gBAAE,IAAI;gBAAS,MAAM;gBAAQ,QAAQA;YAAM;QAAE;IAClE;AAGA,MAAMC,WAAW,CAACC,SAAqC;QACnD,iBAAiB,CAACC,WAAsCC,UAAU,OAAO,CAACD,UAAUD;IACxF;AAKA,MAAMG;IAGF,YAAYC,SAAkC,CAAE;QAC5C,IAAI,CAAC,QAAQ,GAAGC,gBAAgBD;IACpC;IAEA,MAAME,KAAY,EAAE;QAChBJ,UAAU,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAEI,OAAO,OAAO;IACtD;AACJ;AAEAC,SAAS,qBAAqB;IAC1BC,GAAG,8EAA8E;QAC7E,MAAMJ,YAAYP,kBAAkB;QACpC,MAAMY,UAAU,IAAIN,YAAYC;QAChC,MAAMM,YAAY,IAAIC;QAGtBF,QAAQ,KAAK,CAACC,UAAU,WAAW,CAACX,SAASF,kBAAkB,UAAUO;QACzEQ,OAAOH,QAAQ,QAAQ,EAAE,OAAO,CAACZ,kBAAkB;QAInD,MAAMS,QAAQI,UAAU,WAAW,CAACX,SAASF,kBAAkB,SAASO;QACxEQ,OAAON,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE;QAC5BG,QAAQ,KAAK,CAACH;QACdM,OAAOH,QAAQ,QAAQ,EAAE,OAAO,CAACZ,kBAAkB;IACvD;IAEAW,GAAG,0BAA0B;QACzB,MAAMJ,YAAYP,kBAAkB;QACpC,MAAMY,UAAU,IAAIN,YAAYC;QAChC,MAAMM,YAAY,IAAIC;QAEtB,KAAK,MAAME,SAAS;YAAC;YAAK;YAAM;YAAO;YAAM;YAAK;SAAG,CAAE;YACnDJ,QAAQ,KAAK,CAACC,UAAU,WAAW,CAACX,SAASF,kBAAkBgB,SAAST;YACxEQ,OAAOH,QAAQ,QAAQ,EAAE,OAAO,CAACZ,kBAAkBgB;QACvD;IACJ;IAEAL,GAAG,4DAA4D;QAC3D,MAAME,YAAY,IAAIC;QAEtB,MAAMG,QAAQjB,kBAAkB;QAChCa,UAAU,WAAW,CAACX,SAASF,kBAAkB,UAAUiB;QAG3D,MAAMC,SAASlB,kBAAkB;QACjC,MAAMY,UAAU,IAAIN,YAAYY;QAEhC,MAAMT,QAAQI,UAAU,WAAW,CAACX,SAASF,kBAAkB,UAAUkB;QACzEN,QAAQ,KAAK,CAACH;QACdM,OAAOH,QAAQ,QAAQ,EAAE,OAAO,CAACZ,kBAAkB;IACvD;AACJ"}
|
|
@@ -10,6 +10,7 @@ import { useBindingsForElement } from "./useBindingsForElement.js";
|
|
|
10
10
|
import { useElementInputsAst } from "../../../hooks/useElementInputsAst.js";
|
|
11
11
|
import { BreakpointElementMetadata, ElementMetadata, InputMetadata } from "../../../metadata/index.js";
|
|
12
12
|
import { useElementFactory } from "./useElementFactory.js";
|
|
13
|
+
import { PreviewedBindings } from "./PreviewedBindings.js";
|
|
13
14
|
class InputValueObject {
|
|
14
15
|
constructor(value){
|
|
15
16
|
this.value = value;
|
|
@@ -74,6 +75,9 @@ const useInputValue = (elementId, node)=>{
|
|
|
74
75
|
rawBindings
|
|
75
76
|
]);
|
|
76
77
|
const [localState, setLocalValue] = useState();
|
|
78
|
+
const previewedBindings = useMemo(()=>new PreviewedBindings(), [
|
|
79
|
+
elementId
|
|
80
|
+
]);
|
|
77
81
|
const onChange = useCallback(withTimeout((cb)=>{
|
|
78
82
|
const deepInputs = inputsProcessor.toDeepInputs(resolvedBindings.inputs);
|
|
79
83
|
const valueObject = new InputValueObject(value);
|
|
@@ -134,7 +138,7 @@ const useInputValue = (elementId, node)=>{
|
|
|
134
138
|
static: valueObject.get()
|
|
135
139
|
});
|
|
136
140
|
const updatedInputs = inputsProcessor.createUpdate(devFriendlyInputs, breakpoint.name);
|
|
137
|
-
const patch =
|
|
141
|
+
const patch = previewedBindings.createPatch(updatedInputs, rawBindings);
|
|
138
142
|
editor.executeCommand(Commands.PreviewPatchElement, {
|
|
139
143
|
elementId,
|
|
140
144
|
patch
|
|
@@ -142,7 +146,8 @@ const useInputValue = (elementId, node)=>{
|
|
|
142
146
|
}, [
|
|
143
147
|
elementId,
|
|
144
148
|
rawBindings,
|
|
145
|
-
localState
|
|
149
|
+
localState,
|
|
150
|
+
previewedBindings
|
|
146
151
|
]);
|
|
147
152
|
const setBindingType = useCallback((type)=>{
|
|
148
153
|
editor.updateDocument((state)=>{
|