@it-consultis/page-builder 1.1.34

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.
Files changed (124) hide show
  1. package/Editor.d.ts +77 -0
  2. package/Editor.js +312 -0
  3. package/LICENSE.txt +674 -0
  4. package/README.md +248 -0
  5. package/assets/svg/mp.d.ts +2 -0
  6. package/assets/svg/mp.js +37 -0
  7. package/assets/svg/status-bar.d.ts +2 -0
  8. package/assets/svg/status-bar.js +38 -0
  9. package/constants/index.d.ts +11 -0
  10. package/constants/index.js +17 -0
  11. package/contexts/I18nContext.d.ts +15 -0
  12. package/contexts/I18nContext.js +56 -0
  13. package/controls/AlignmentControl/AlignmentControl.d.ts +5 -0
  14. package/controls/AlignmentControl/AlignmentControl.js +58 -0
  15. package/controls/AlignmentControl/index.d.ts +3 -0
  16. package/controls/AlignmentControl/index.js +9 -0
  17. package/controls/DeviceSwitcher/DeviceSwitcher.d.ts +10 -0
  18. package/controls/DeviceSwitcher/DeviceSwitcher.js +64 -0
  19. package/controls/DeviceSwitcher/index.d.ts +2 -0
  20. package/controls/DeviceSwitcher/index.js +9 -0
  21. package/controls/GradientColorPicker/GradientColorPicker.d.ts +8 -0
  22. package/controls/GradientColorPicker/GradientColorPicker.js +81 -0
  23. package/controls/GradientColorPicker/index.d.ts +2 -0
  24. package/controls/GradientColorPicker/index.js +9 -0
  25. package/controls/HeadingControl/HeadingControl.d.ts +14 -0
  26. package/controls/HeadingControl/HeadingControl.js +251 -0
  27. package/controls/HeadingControl/HeadingView.d.ts +21 -0
  28. package/controls/HeadingControl/HeadingView.js +43 -0
  29. package/controls/HeadingControl/index.d.ts +4 -0
  30. package/controls/HeadingControl/index.js +16 -0
  31. package/controls/MediaLibraryControl/FileBrowserDialog.d.ts +14 -0
  32. package/controls/MediaLibraryControl/FileBrowserDialog.js +138 -0
  33. package/controls/MediaLibraryControl/MediaLibraryControl.d.ts +38 -0
  34. package/controls/MediaLibraryControl/MediaLibraryControl.js +537 -0
  35. package/controls/MediaLibraryControl/index.d.ts +3 -0
  36. package/controls/MediaLibraryControl/index.js +9 -0
  37. package/controls/PaddingMarginControl/PaddingMarginControl.d.ts +30 -0
  38. package/controls/PaddingMarginControl/PaddingMarginControl.js +88 -0
  39. package/controls/PaddingMarginControl/PaddingMarginForm.d.ts +8 -0
  40. package/controls/PaddingMarginControl/PaddingMarginForm.js +109 -0
  41. package/controls/PaddingMarginControl/index.d.ts +4 -0
  42. package/controls/PaddingMarginControl/index.js +16 -0
  43. package/controls/PaddingMarginControl/utils.d.ts +3 -0
  44. package/controls/PaddingMarginControl/utils.js +21 -0
  45. package/controls/SelectableControl/SelectableControl.d.ts +5 -0
  46. package/controls/SelectableControl/SelectableControl.js +35 -0
  47. package/controls/SelectableControl/index.d.ts +3 -0
  48. package/controls/SelectableControl/index.js +9 -0
  49. package/hooks/ui-optimizations/useDebounce.d.ts +3 -0
  50. package/hooks/ui-optimizations/useDebounce.js +23 -0
  51. package/hooks/ui-optimizations/useThrottle.d.ts +3 -0
  52. package/hooks/ui-optimizations/useThrottle.js +22 -0
  53. package/hooks/useMediaImageQuery.d.ts +10 -0
  54. package/hooks/useMediaImageQuery.js +51 -0
  55. package/hooks/useSortable.d.ts +20 -0
  56. package/hooks/useSortable.js +70 -0
  57. package/index.d.ts +7 -0
  58. package/index.js +54 -0
  59. package/layouts/BlocksBar/LayerPanel.d.ts +8 -0
  60. package/layouts/BlocksBar/LayerPanel.js +299 -0
  61. package/layouts/BlocksBar/index.d.ts +7 -0
  62. package/layouts/BlocksBar/index.js +575 -0
  63. package/layouts/EditorPreview/BlockView.d.ts +16 -0
  64. package/layouts/EditorPreview/BlockView.js +435 -0
  65. package/layouts/EditorPreview/index.d.ts +9 -0
  66. package/layouts/EditorPreview/index.js +463 -0
  67. package/layouts/Header/index.d.ts +18 -0
  68. package/layouts/Header/index.js +202 -0
  69. package/layouts/Header/menus/ExportDataDialog.d.ts +4 -0
  70. package/layouts/Header/menus/ExportDataDialog.js +95 -0
  71. package/layouts/Header/menus/ImportDataDialog.d.ts +4 -0
  72. package/layouts/Header/menus/ImportDataDialog.js +100 -0
  73. package/layouts/Header/menus/LeftMenu.d.ts +9 -0
  74. package/layouts/Header/menus/LeftMenu.js +369 -0
  75. package/layouts/Header/menus/RightMenu.d.ts +14 -0
  76. package/layouts/Header/menus/RightMenu.js +91 -0
  77. package/layouts/Header/menus/SaveTemplateDialog.d.ts +4 -0
  78. package/layouts/Header/menus/SaveTemplateDialog.js +203 -0
  79. package/layouts/MessageBus.d.ts +13 -0
  80. package/layouts/MessageBus.js +76 -0
  81. package/layouts/Sidebar/AddBlockButton.d.ts +12 -0
  82. package/layouts/Sidebar/AddBlockButton.js +267 -0
  83. package/layouts/Sidebar/BlockForm.d.ts +20 -0
  84. package/layouts/Sidebar/BlockForm.js +517 -0
  85. package/layouts/Sidebar/BlocksControl.d.ts +21 -0
  86. package/layouts/Sidebar/BlocksControl.js +190 -0
  87. package/layouts/Sidebar/index.d.ts +10 -0
  88. package/layouts/Sidebar/index.js +451 -0
  89. package/layouts/Snackbar.d.ts +3 -0
  90. package/layouts/Snackbar.js +43 -0
  91. package/package.json +133 -0
  92. package/store/Provider.d.ts +15 -0
  93. package/store/Provider.js +71 -0
  94. package/store/editor-store-core.d.ts +4 -0
  95. package/store/editor-store-core.js +271 -0
  96. package/store/index.d.ts +112 -0
  97. package/store/index.js +178 -0
  98. package/theme.d.ts +10 -0
  99. package/theme.js +9 -0
  100. package/translation/cn.json +29 -0
  101. package/translation/en.json +29 -0
  102. package/translation/fr.json +31 -0
  103. package/translation/index.d.ts +6 -0
  104. package/translation/index.js +23 -0
  105. package/translation/types.d.ts +13 -0
  106. package/translation/types.js +5 -0
  107. package/types/Block.d.ts +22 -0
  108. package/types/Block.js +5 -0
  109. package/types/BlockType.d.ts +50 -0
  110. package/types/BlockType.js +5 -0
  111. package/types/ConfigStorageAdapter.d.ts +11 -0
  112. package/types/ConfigStorageAdapter.js +5 -0
  113. package/types/ObjectStorageAdapter.d.ts +68 -0
  114. package/types/ObjectStorageAdapter.js +5 -0
  115. package/types/index.d.ts +5 -0
  116. package/types/index.js +100 -0
  117. package/types/throttle-and-debounce.d.ts +2 -0
  118. package/types/throttle-and-debounce.js +5 -0
  119. package/utils/block.d.ts +16 -0
  120. package/utils/block.js +41 -0
  121. package/utils/helpers.d.ts +5 -0
  122. package/utils/helpers.js +22 -0
  123. package/utils/strings.d.ts +1 -0
  124. package/utils/strings.js +11 -0
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _I18nContext = require("../../../contexts/I18nContext");
8
+ var _Box = _interopRequireDefault(require("@mui/material/Box/Box.js"));
9
+ var _Button = _interopRequireDefault(require("@mui/material/Button/Button.js"));
10
+ var _Dialog = _interopRequireDefault(require("@mui/material/Dialog/Dialog.js"));
11
+ var _DialogActions = _interopRequireDefault(require("@mui/material/DialogActions/DialogActions.js"));
12
+ var _DialogContent = _interopRequireDefault(require("@mui/material/DialogContent/DialogContent.js"));
13
+ var _DialogTitle = _interopRequireDefault(require("@mui/material/DialogTitle/DialogTitle.js"));
14
+ var _colors = require("@mui/material/colors");
15
+ var _react = _interopRequireWildcard(require("react"));
16
+ var _store = require("../../../store");
17
+ var _jsxRuntime = require("react/jsx-runtime");
18
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
19
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
+ const allMessages = {
22
+ copySuccess: {
23
+ id: 'copySuccess',
24
+ message: 'Data copied',
25
+ severity: 'info'
26
+ }
27
+ };
28
+ const ExportDataDialog = props => {
29
+ const t = (0, _I18nContext.useT)();
30
+ const {
31
+ ...dialogProps
32
+ } = props;
33
+ const data = (0, _store.useEditorStore)(state => state.data);
34
+ const addAlertMessages = (0, _store.useEditorStore)(state => state.addAlertMessages);
35
+ const json = (0, _react.useMemo)(() => {
36
+ return JSON.stringify(data);
37
+ }, [data]);
38
+ const copyToClipboard = () => {
39
+ navigator.clipboard.writeText(json);
40
+ addAlertMessages([{
41
+ ...allMessages.copySuccess
42
+ }]);
43
+ };
44
+ const closeDialog = (ev, reason) => {
45
+ if (dialogProps.onClose) {
46
+ dialogProps.onClose(ev, reason);
47
+ }
48
+ };
49
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
50
+ ...dialogProps,
51
+ onClose: closeDialog,
52
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogTitle.default, {
53
+ children: t('editor.exportData')
54
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogContent.default, {
55
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
56
+ onChange: ev => ev.preventDefault(),
57
+ onClick: ev => {
58
+ const element = ev.currentTarget;
59
+ window.requestAnimationFrame(() => {
60
+ element.select();
61
+ copyToClipboard();
62
+ });
63
+ },
64
+ rows: 10,
65
+ component: "textarea",
66
+ sx: {
67
+ background: _colors.grey[100],
68
+ padding: 1,
69
+ width: 540,
70
+ maxWidth: '100%',
71
+ fontSize: theme => theme.typography.fontSize * 0.85
72
+ },
73
+ contentEditable: false,
74
+ value: json
75
+ })
76
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DialogActions.default, {
77
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
78
+ sx: {
79
+ fontWeight: 500
80
+ },
81
+ onClick: copyToClipboard,
82
+ children: t('editor.copyToClipboard')
83
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
84
+ sx: {
85
+ fontWeight: 500
86
+ },
87
+ onClick: ev => {
88
+ closeDialog(ev, 'backdropClick');
89
+ },
90
+ children: t('editor.cancel')
91
+ })]
92
+ })]
93
+ });
94
+ };
95
+ var _default = exports.default = ExportDataDialog;
@@ -0,0 +1,4 @@
1
+ import { DialogProps } from '@mui/material';
2
+ import React from 'react';
3
+ declare const ImportDataDialog: React.FC<DialogProps>;
4
+ export default ImportDataDialog;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _I18nContext = require("../../../contexts/I18nContext");
8
+ var _Button = _interopRequireDefault(require("@mui/material/Button/Button.js"));
9
+ var _Dialog = _interopRequireDefault(require("@mui/material/Dialog/Dialog.js"));
10
+ var _DialogActions = _interopRequireDefault(require("@mui/material/DialogActions/DialogActions.js"));
11
+ var _DialogContent = _interopRequireDefault(require("@mui/material/DialogContent/DialogContent.js"));
12
+ var _DialogTitle = _interopRequireDefault(require("@mui/material/DialogTitle/DialogTitle.js"));
13
+ var _TextField = _interopRequireDefault(require("@mui/material/TextField/TextField.js"));
14
+ var _react = _interopRequireDefault(require("react"));
15
+ var _store = require("../../../store");
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
+ const ImportDataDialog = props => {
19
+ const t = (0, _I18nContext.useT)();
20
+ const {
21
+ ...dialogProps
22
+ } = props;
23
+ const editorImportData = (0, _store.useEditorStore)(state => state.importData);
24
+ const addAlertMessages = (0, _store.useEditorStore)(state => state.addAlertMessages);
25
+ const closeDialog = (ev, reason) => {
26
+ if (dialogProps.onClose) {
27
+ dialogProps.onClose(ev, reason);
28
+ }
29
+ };
30
+ const importData = async data => {
31
+ const result = await editorImportData(data);
32
+ if (result.success) {
33
+ closeDialog({}, 'escapeKeyDown');
34
+ addAlertMessages([{
35
+ severity: 'success',
36
+ message: 'Data imported successfully'
37
+ }]);
38
+ return;
39
+ }
40
+ const errMessages = [];
41
+ result.errors.forEach(err => {
42
+ err.issues.forEach(issue => {
43
+ errMessages.push(`Code: ${issue.code}. ${issue.message}`);
44
+ });
45
+ });
46
+ addAlertMessages([{
47
+ severity: 'error',
48
+ message: errMessages,
49
+ autoHideDuration: 10000
50
+ }]);
51
+ };
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
53
+ ...dialogProps,
54
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogTitle.default, {
55
+ children: t('editor.importData')
56
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("form", {
57
+ onSubmit: ev => {
58
+ ev.preventDefault();
59
+ const form = ev.currentTarget;
60
+ const textarea = form.elements.item(0);
61
+ importData(textarea.value);
62
+ },
63
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogContent.default, {
64
+ sx: {
65
+ pt: 0
66
+ },
67
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
68
+ name: "data",
69
+ rows: 10,
70
+ sx: {
71
+ minWidth: 320,
72
+ minHeight: 200,
73
+ width: 540,
74
+ maxWidth: '100%',
75
+ fontSize: theme => theme.typography.fontSize * 0.85
76
+ },
77
+ multiline: true,
78
+ required: true
79
+ })
80
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DialogActions.default, {
81
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
82
+ type: "submit",
83
+ sx: {
84
+ fontWeight: 500
85
+ },
86
+ children: t('editor.importData')
87
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
88
+ sx: {
89
+ fontWeight: 500
90
+ },
91
+ onClick: ev => {
92
+ closeDialog(ev, 'backdropClick');
93
+ },
94
+ children: t('editor.cancel')
95
+ })]
96
+ })]
97
+ })]
98
+ });
99
+ };
100
+ var _default = exports.default = ImportDataDialog;
@@ -0,0 +1,9 @@
1
+ import { Block } from '../../../types';
2
+ import { FC } from 'react';
3
+ declare const LeftMenu: FC<{
4
+ onToggleBlocksBar?(): void;
5
+ isBlocksBarVisible?: boolean;
6
+ onChange?(data: Block[]): void;
7
+ slot?: FC;
8
+ }>;
9
+ export default LeftMenu;
@@ -0,0 +1,369 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _I18nContext = require("../../../contexts/I18nContext");
8
+ var _DeleteForever = _interopRequireDefault(require("@mui/icons-material/esm/DeleteForever.js"));
9
+ var _Apps = _interopRequireDefault(require("@mui/icons-material/Apps"));
10
+ var _DeleteOutline = _interopRequireDefault(require("@mui/icons-material/DeleteOutline"));
11
+ var _Tune = _interopRequireDefault(require("@mui/icons-material/Tune"));
12
+ var _lab = require("@mui/lab");
13
+ var _Box = _interopRequireDefault(require("@mui/material/Box/Box.js"));
14
+ var _Button = _interopRequireDefault(require("@mui/material/Button/Button.js"));
15
+ var _ButtonBase = _interopRequireDefault(require("@mui/material/ButtonBase/ButtonBase.js"));
16
+ var _Dialog = _interopRequireDefault(require("@mui/material/Dialog/Dialog.js"));
17
+ var _DialogActions = _interopRequireDefault(require("@mui/material/DialogActions/DialogActions.js"));
18
+ var _DialogContent = _interopRequireDefault(require("@mui/material/DialogContent/DialogContent.js"));
19
+ var _DialogTitle = _interopRequireDefault(require("@mui/material/DialogTitle/DialogTitle.js"));
20
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton/IconButton.js"));
21
+ var _Menu = _interopRequireDefault(require("@mui/material/Menu/Menu.js"));
22
+ var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem/MenuItem.js"));
23
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography/Typography.js"));
24
+ var _colors = require("@mui/material/colors");
25
+ var _Grid = _interopRequireDefault(require("@mui/material/Unstable_Grid2/Grid2"));
26
+ var _store = require("../../../store");
27
+ var _react = _interopRequireWildcard(require("react"));
28
+ var _block = require("../../../utils/block");
29
+ var _ExportDataDialog = _interopRequireDefault(require("./ExportDataDialog"));
30
+ var _ImportDataDialog = _interopRequireDefault(require("./ImportDataDialog"));
31
+ var _SaveTemplateDialog = _interopRequireDefault(require("./SaveTemplateDialog"));
32
+ var _jsxRuntime = require("react/jsx-runtime");
33
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
34
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
35
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
36
+ const TemplateMenuItem = props => {
37
+ const {
38
+ id,
39
+ onSelect,
40
+ onDelete
41
+ } = props;
42
+ const configClient = (0, _store.useConfigStorageQueryClient)();
43
+ const configQuery = configClient.useGetQuery(id);
44
+ const config = configQuery.data;
45
+ if (configQuery.isLoading || !config) {
46
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
47
+ disabled: true,
48
+ children: id
49
+ });
50
+ }
51
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Grid.default, {
52
+ container: true,
53
+ spacing: 1,
54
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Grid.default, {
55
+ sx: {
56
+ minWidth: 150
57
+ },
58
+ alignItems: "center",
59
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ButtonBase.default, {
60
+ onClick: () => {
61
+ onSelect(config);
62
+ },
63
+ sx: {
64
+ width: '100%',
65
+ textAlign: 'left',
66
+ px: 1,
67
+ mx: 1,
68
+ flexDirection: 'column',
69
+ alignItems: 'start'
70
+ },
71
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
72
+ children: config.data.name
73
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
74
+ variant: "caption",
75
+ sx: {
76
+ lineHeight: 1,
77
+ color: _colors.grey[600]
78
+ },
79
+ children: config.id.slice(9)
80
+ })]
81
+ })
82
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Grid.default, {
83
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
84
+ size: "small",
85
+ onClick: () => {
86
+ onDelete(config);
87
+ },
88
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DeleteForever.default, {
89
+ width: 12,
90
+ height: 12
91
+ })
92
+ })
93
+ })]
94
+ });
95
+ };
96
+ const ImportTemplateMenuItem = props => {
97
+ const t = (0, _I18nContext.useT)();
98
+ const {
99
+ onClose
100
+ } = props;
101
+ const rootRef = (0, _react.useRef)(null);
102
+ const [open, setOpen] = (0, _react.useState)(false);
103
+ const [editorData, setEditorData] = (0, _store.useEditorStore)(state => [state.data, state.setData]);
104
+ const configClient = (0, _store.useConfigStorageQueryClient)();
105
+ const configListQuery = configClient.useListQuery({
106
+ enabled: open
107
+ });
108
+ const configList = configListQuery.data || [];
109
+ const templateList = configList.filter(configId => configId.startsWith('template.'));
110
+ const [action, setAction] = (0, _react.useState)(null);
111
+ const [dialogOpen, setDialogOpen] = (0, _react.useState)(false);
112
+ const close = () => {
113
+ setDialogOpen(false);
114
+ setAction(null);
115
+ setOpen(false);
116
+ };
117
+ const closeDialog = () => {
118
+ close();
119
+ onClose();
120
+ };
121
+ const deleteMutation = configClient.useDeleteMutation({
122
+ onSuccess() {
123
+ closeDialog();
124
+ }
125
+ });
126
+ (0, _react.useEffect)(() => {
127
+ if (action?.type === 'select') {
128
+ if (editorData.length === 0) {
129
+ setEditorData(action.payload.data.blocks);
130
+ close();
131
+ return;
132
+ }
133
+ setDialogOpen(true);
134
+ }
135
+ if (action?.type === 'delete') {
136
+ setDialogOpen(true);
137
+ }
138
+ }, [action, editorData, setEditorData]);
139
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
140
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
141
+ open: dialogOpen,
142
+ onClose: () => {
143
+ if (!deleteMutation.isLoading) onClose();
144
+ },
145
+ children: [action?.type === 'select' && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
146
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_DialogTitle.default, {
147
+ children: ["Import data from template \"", action.payload.data.name, "\""]
148
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DialogContent.default, {
149
+ dividers: true,
150
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
151
+ children: ["Are you sure you want to import data from template \"", action.payload.data.name, "\"?"]
152
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
153
+ children: "You will lose your current data."
154
+ })]
155
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DialogActions.default, {
156
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
157
+ variant: "contained",
158
+ sx: {
159
+ mr: 0.5
160
+ },
161
+ onClick: () => {
162
+ setEditorData(action.payload.data.blocks);
163
+ closeDialog();
164
+ },
165
+ children: "Confirm"
166
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
167
+ variant: "outlined",
168
+ onClick: closeDialog,
169
+ children: "Cancel"
170
+ })]
171
+ })]
172
+ }), action?.type === 'delete' && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
173
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_DialogTitle.default, {
174
+ children: ["Delete template \"", action.payload.data.name, "\""]
175
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DialogContent.default, {
176
+ dividers: true,
177
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
178
+ children: ["Are you sure you want to delete template \"", action.payload.data.name, "\"?"]
179
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
180
+ children: "Data will be lost permanently."
181
+ })]
182
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DialogActions.default, {
183
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_lab.LoadingButton, {
184
+ loading: deleteMutation.isLoading,
185
+ variant: "contained",
186
+ sx: {
187
+ mr: 0.5
188
+ },
189
+ onClick: () => {
190
+ deleteMutation.mutate(action.payload.id);
191
+ },
192
+ children: t('editor.delete')
193
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
194
+ variant: "outlined",
195
+ onClick: closeDialog,
196
+ disabled: deleteMutation.isLoading,
197
+ children: t('editor.cancel')
198
+ })]
199
+ })]
200
+ })]
201
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
202
+ ref: rootRef,
203
+ onClick: () => {
204
+ setOpen(true);
205
+ },
206
+ children: t('editor.importFromTemplate')
207
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Menu.default, {
208
+ MenuListProps: {
209
+ dense: true
210
+ },
211
+ onClose: close,
212
+ open: open,
213
+ anchorEl: rootRef.current,
214
+ anchorOrigin: {
215
+ vertical: 'top',
216
+ horizontal: 'right'
217
+ },
218
+ children: [templateList.length === 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
219
+ disabled: true,
220
+ children: t('editor.noTemplatesFound')
221
+ }), templateList.map(configId => {
222
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(TemplateMenuItem, {
223
+ onSelect: config => {
224
+ setAction({
225
+ type: 'select',
226
+ payload: config
227
+ });
228
+ },
229
+ onDelete: config => {
230
+ setAction({
231
+ type: 'delete',
232
+ payload: config
233
+ });
234
+ },
235
+ id: configId
236
+ }, configId);
237
+ })]
238
+ })]
239
+ });
240
+ };
241
+ const LeftMenu = props => {
242
+ const {
243
+ onToggleBlocksBar,
244
+ isBlocksBarVisible,
245
+ onChange,
246
+ slot: Slot
247
+ } = props;
248
+ const t = (0, _I18nContext.useT)();
249
+ const editorHasData = (0, _store.useEditorStore)(state => state.data.length > 0);
250
+ const storage = (0, _store.useEditorStore)(state => state.storage);
251
+ const {
252
+ data,
253
+ setData,
254
+ isMp,
255
+ blockTypes
256
+ } = (0, _store.useEditorStore)(state => state);
257
+ const [anchorEl, setAnchorEl] = (0, _react.useState)();
258
+ const menuOpen = Boolean(anchorEl);
259
+ const [action, setAction] = (0, _react.useState)('');
260
+ (0, _react.useEffect)(() => {
261
+ if (action.length > 0) {
262
+ setAnchorEl(undefined);
263
+ }
264
+ }, [action]);
265
+ const closeDialog = () => setAction('');
266
+ const [confirmOpen, setConfirmOpen] = _react.default.useState(false);
267
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
268
+ display: "flex",
269
+ alignItems: "center",
270
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
271
+ onClick: ev => {
272
+ setAnchorEl(ev.currentTarget);
273
+ },
274
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tune.default, {
275
+ fontSize: "small"
276
+ })
277
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
278
+ onClick: () => {
279
+ onToggleBlocksBar?.();
280
+ },
281
+ sx: {
282
+ opacity: isBlocksBarVisible ? 1 : 0.5
283
+ },
284
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Apps.default, {
285
+ fontSize: "small"
286
+ })
287
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
288
+ onClick: () => {
289
+ setConfirmOpen(true);
290
+ },
291
+ sx: {
292
+ opacity: data.length > 0 ? 1 : 0.5
293
+ },
294
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DeleteOutline.default, {
295
+ fontSize: "small"
296
+ })
297
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Menu.default, {
298
+ onClose: () => setAnchorEl(undefined),
299
+ marginThreshold: 0,
300
+ anchorEl: anchorEl,
301
+ open: menuOpen,
302
+ MenuListProps: {
303
+ dense: true
304
+ },
305
+ children: [storage && /*#__PURE__*/(0, _jsxRuntime.jsx)(ImportTemplateMenuItem, {
306
+ onClose: () => {
307
+ setAnchorEl(undefined);
308
+ }
309
+ }), storage && /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
310
+ onClick: () => {
311
+ setAction('save_template');
312
+ },
313
+ children: t('editor.saveAsTemplate')
314
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
315
+ onClick: () => {
316
+ setAction('import_data');
317
+ },
318
+ children: t('editor.importData')
319
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
320
+ disabled: !editorHasData,
321
+ onClick: () => {
322
+ setAction('export_data');
323
+ },
324
+ children: t('editor.exportData')
325
+ })]
326
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExportDataDialog.default, {
327
+ open: action === 'export_data',
328
+ onClose: closeDialog
329
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ImportDataDialog.default, {
330
+ open: action === 'import_data',
331
+ onClose: closeDialog
332
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_SaveTemplateDialog.default, {
333
+ open: action === 'save_template',
334
+ onClose: closeDialog
335
+ }), Slot && /*#__PURE__*/(0, _jsxRuntime.jsx)(Slot, {}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
336
+ open: confirmOpen,
337
+ onClose: () => {
338
+ setConfirmOpen(false);
339
+ },
340
+ "aria-labelledby": "alert-dialog-title",
341
+ "aria-describedby": "alert-dialog-description",
342
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogTitle.default, {
343
+ id: "alert-dialog-title",
344
+ children: t('editor.clearConfirm')
345
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DialogActions.default, {
346
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
347
+ variant: "outlined",
348
+ onClick: () => {
349
+ setConfirmOpen(false);
350
+ },
351
+ children: t('editor.cancel')
352
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
353
+ variant: "contained",
354
+ onClick: () => {
355
+ setConfirmOpen(false);
356
+ const empty = isMp ? [(0, _block.createBlock)(blockTypes.find(block => (0, _block.blockFilteredMPNav)(block, true, 'id')))] : [];
357
+ setData(empty);
358
+ if (onChange) {
359
+ onChange(empty);
360
+ }
361
+ },
362
+ autoFocus: true,
363
+ children: t('editor.clearAll')
364
+ })]
365
+ })]
366
+ })]
367
+ });
368
+ };
369
+ var _default = exports.default = LeftMenu;
@@ -0,0 +1,14 @@
1
+ import { FC } from 'react';
2
+ export type RightMenuProps = {
3
+ onFullScreen?: () => void;
4
+ onExitFullScreen?: () => void;
5
+ onToggleSidebar?: () => void;
6
+ isSidebarVisible?: boolean;
7
+ platinum?: boolean;
8
+ slot?: FC;
9
+ };
10
+ declare const RightMenu: {
11
+ (props: RightMenuProps): import("react/jsx-runtime").JSX.Element;
12
+ propTypes: {};
13
+ };
14
+ export default RightMenu;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _AspectRatio = _interopRequireDefault(require("@mui/icons-material/AspectRatio"));
8
+ var _RedoOutlined = _interopRequireDefault(require("@mui/icons-material/RedoOutlined"));
9
+ var _UndoOutlined = _interopRequireDefault(require("@mui/icons-material/UndoOutlined"));
10
+ var _WidthWideOutlined = _interopRequireDefault(require("@mui/icons-material/WidthWideOutlined"));
11
+ var _Box = _interopRequireDefault(require("@mui/material/Box/Box.js"));
12
+ var _Button = _interopRequireDefault(require("@mui/material/Button/Button.js"));
13
+ var _store = require("../../../store");
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
+ const RightMenu = props => {
17
+ const {
18
+ setIsFullScreen,
19
+ isFullScreen
20
+ } = (0, _store.useEditorStore)(state => state);
21
+ const {
22
+ onFullScreen,
23
+ onExitFullScreen,
24
+ onToggleSidebar,
25
+ isSidebarVisible,
26
+ platinum,
27
+ slot: Slot
28
+ } = props;
29
+ const {
30
+ undo,
31
+ redo,
32
+ pastStates,
33
+ futureStates
34
+ } = (0, _store.useTemporalEditorStore)(state => state);
35
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
36
+ display: "flex",
37
+ alignItems: "center",
38
+ children: [Slot && /*#__PURE__*/(0, _jsxRuntime.jsx)(Slot, {}), platinum && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
39
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
40
+ disabled: pastStates.length === 0,
41
+ onClick: () => {
42
+ undo();
43
+ },
44
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_UndoOutlined.default, {
45
+ style: {
46
+ opacity: pastStates.length === 0 ? 0.5 : 1
47
+ },
48
+ fontSize: "small"
49
+ })
50
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
51
+ disabled: futureStates.length === 0,
52
+ onClick: () => {
53
+ redo();
54
+ },
55
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_RedoOutlined.default, {
56
+ style: {
57
+ opacity: futureStates.length === 0 ? 0.5 : 1
58
+ },
59
+ fontSize: "small"
60
+ })
61
+ })]
62
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
63
+ onClick: onToggleSidebar,
64
+ sx: {
65
+ opacity: isSidebarVisible ? 1 : 0.5
66
+ },
67
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_WidthWideOutlined.default, {
68
+ fontSize: "small"
69
+ })
70
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
71
+ onClick: () => {
72
+ const newState = !isFullScreen;
73
+ setIsFullScreen(newState);
74
+ if (newState) {
75
+ onFullScreen?.();
76
+ } else {
77
+ onExitFullScreen?.();
78
+ }
79
+ },
80
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_AspectRatio.default, {
81
+ sx: {
82
+ opacity: isFullScreen ? 1 : 0.5,
83
+ transition: 'opacity 0.2s ease'
84
+ },
85
+ fontSize: "small"
86
+ })
87
+ })]
88
+ });
89
+ };
90
+ RightMenu.propTypes = {};
91
+ var _default = exports.default = RightMenu;