@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,299 @@
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 _store = require("../../store");
9
+ var _block = require("../../utils/block");
10
+ var _MoreVert = _interopRequireDefault(require("@mui/icons-material/MoreVert"));
11
+ var _Box = _interopRequireDefault(require("@mui/material/Box/Box.js"));
12
+ var _Icon = _interopRequireDefault(require("@mui/material/Icon/Icon.js"));
13
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton/IconButton.js"));
14
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography/Typography.js"));
15
+ var _SimpleTreeView = require("@mui/x-tree-view/SimpleTreeView");
16
+ var _TreeItem = require("@mui/x-tree-view/TreeItem");
17
+ var _react = require("react");
18
+ var _sortablejs = _interopRequireDefault(require("sortablejs"));
19
+ var _jsxRuntime = require("react/jsx-runtime");
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
+ const LayerNode = ({
22
+ block,
23
+ blockTypes,
24
+ onMenuOpen,
25
+ setSelectedBlockId,
26
+ setEditingBlockId,
27
+ setData,
28
+ onChange,
29
+ level
30
+ }) => {
31
+ const blockType = blockTypes.find(type => type.id === block.type);
32
+ const label = blockType?.blockLabel(block.data) || block.data.blockName || blockType?.label || block.id;
33
+ const children = block.data.subBlocks;
34
+ const hasChildren = children && children.length > 0;
35
+ const [subBlocksElement, setSubBlocksElement] = (0, _react.useState)(null);
36
+ const subBlocksRef = (0, _react.useCallback)(node => {
37
+ if (node) {
38
+ setSubBlocksElement(node);
39
+ }
40
+ }, []);
41
+ (0, _react.useLayoutEffect)(() => {
42
+ if (!subBlocksElement || !hasChildren || children.length < 2) return;
43
+ const sortable = new _sortablejs.default(subBlocksElement, {
44
+ animation: 150,
45
+ handle: '.sortable-handle',
46
+ group: `level-${level + 1}`,
47
+ draggable: '.MuiTreeItem-root',
48
+ onStart: evt => {
49
+ // mark the current dragging, prevent the EditorPreview from triggering dropIndex
50
+ evt.item.setAttribute('data-sortable-dragging', 'true');
51
+ },
52
+ onEnd: evt => {
53
+ // remove the dragging mark
54
+ evt.item.removeAttribute('data-sortable-dragging');
55
+ },
56
+ onUpdate: evt => {
57
+ const {
58
+ oldIndex
59
+ } = evt;
60
+ const {
61
+ newIndex
62
+ } = evt;
63
+ if (oldIndex === undefined || newIndex === undefined) return;
64
+ setData(prevData => {
65
+ const updateBlocks = blocks => {
66
+ return blocks.map(b => {
67
+ if (b.id === block.id) {
68
+ const newSubBlocks = [...children];
69
+ const [moved] = newSubBlocks.splice(oldIndex, 1);
70
+ newSubBlocks.splice(newIndex, 0, moved);
71
+ return {
72
+ ...b,
73
+ data: {
74
+ ...b.data,
75
+ subBlocks: newSubBlocks
76
+ },
77
+ meta: {
78
+ ...b.meta,
79
+ changed: Date.now()
80
+ }
81
+ };
82
+ }
83
+ if (b.data.subBlocks) {
84
+ return {
85
+ ...b,
86
+ data: {
87
+ ...b.data,
88
+ subBlocks: updateBlocks(b.data.subBlocks)
89
+ },
90
+ meta: {
91
+ ...b.meta,
92
+ changed: Date.now()
93
+ }
94
+ };
95
+ }
96
+ return b;
97
+ });
98
+ };
99
+ const newData = updateBlocks(prevData);
100
+ onChange?.(newData);
101
+ return newData;
102
+ });
103
+ }
104
+ });
105
+ return () => sortable.destroy();
106
+ }, [subBlocksElement, children, block.id, hasChildren, level, setData, onChange]);
107
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem.TreeItem, {
108
+ itemId: block.id,
109
+ label: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
110
+ className: "sortable-handle",
111
+ sx: {
112
+ display: 'flex',
113
+ alignItems: 'center',
114
+ justifyContent: 'space-between',
115
+ cursor: 'grab',
116
+ py: 0.5,
117
+ pr: 1,
118
+ width: '100%'
119
+ },
120
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
121
+ sx: {
122
+ display: 'flex',
123
+ alignItems: 'center',
124
+ flex: 1
125
+ },
126
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
127
+ sx: {
128
+ mr: 1,
129
+ fontSize: 20
130
+ },
131
+ children: blockType?.icon || 'drag_handle'
132
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
133
+ variant: "body2",
134
+ sx: {
135
+ flex: 1,
136
+ overflow: 'hidden',
137
+ textOverflow: 'ellipsis',
138
+ whiteSpace: 'nowrap'
139
+ },
140
+ children: label
141
+ })]
142
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
143
+ size: "small",
144
+ onClick: e => onMenuOpen(e, block.id),
145
+ sx: {
146
+ opacity: 0,
147
+ '.MuiTreeItem-content:hover &': {
148
+ opacity: 1
149
+ }
150
+ },
151
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MoreVert.default, {
152
+ fontSize: "small"
153
+ })
154
+ })]
155
+ }),
156
+ onClick: () => {
157
+ setSelectedBlockId(block.id);
158
+ setEditingBlockId(block.id);
159
+ },
160
+ children: hasChildren && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
161
+ ref: subBlocksRef,
162
+ children: children.map(child => /*#__PURE__*/(0, _jsxRuntime.jsx)(LayerNode, {
163
+ block: child,
164
+ blockTypes: blockTypes,
165
+ onMenuOpen: onMenuOpen,
166
+ setSelectedBlockId: setSelectedBlockId,
167
+ setEditingBlockId: setEditingBlockId,
168
+ setData: setData,
169
+ onChange: onChange,
170
+ level: level + 1
171
+ }, child.id))
172
+ })
173
+ }, block.id);
174
+ };
175
+ const LayerPanel = ({
176
+ onMenuOpen,
177
+ onChange
178
+ }) => {
179
+ const t = (0, _I18nContext.useT)();
180
+ const {
181
+ data,
182
+ blockTypes,
183
+ selectedBlockId,
184
+ setSelectedBlockId,
185
+ setEditingBlockId,
186
+ setData,
187
+ isMp
188
+ } = (0, _store.useEditorStore)(state => state);
189
+ const [expandedItems, setExpandedItems] = (0, _react.useState)(['root']);
190
+ const treeRef = (0, _react.useRef)(null);
191
+ const noMpNavBarData = (0, _react.useMemo)(() => data.filter(block => (0, _block.blockFilteredMPNav)(block)), [data]);
192
+ (0, _react.useEffect)(() => {
193
+ if (!treeRef.current) return;
194
+ const sortable = new _sortablejs.default(treeRef.current, {
195
+ animation: 150,
196
+ handle: '.sortable-handle',
197
+ group: 'level-0',
198
+ draggable: '.MuiTreeItem-root',
199
+ onStart: evt => {
200
+ evt.item.style.cursor = 'grabbing';
201
+ // mark the current dragging, prevent the EditorPreview from triggering dropIndex
202
+ evt.item.setAttribute('data-sortable-dragging', 'true');
203
+ },
204
+ onEnd: evt => {
205
+ evt.item.style.cursor = 'grab';
206
+ // remove the dragging mark
207
+ evt.item.removeAttribute('data-sortable-dragging');
208
+ },
209
+ onUpdate: evt => {
210
+ const {
211
+ oldIndex
212
+ } = evt;
213
+ const {
214
+ newIndex
215
+ } = evt;
216
+ if (oldIndex === undefined || newIndex === undefined) return;
217
+ const realOldIndex = isMp ? oldIndex + 1 : oldIndex;
218
+ const realNewIndex = isMp ? newIndex + 1 : newIndex;
219
+ setData(prevData => {
220
+ const newData = [...prevData];
221
+ const [moved] = newData.splice(realOldIndex, 1);
222
+ newData.splice(realNewIndex, 0, moved);
223
+ const updatedData = newData.map(block => ({
224
+ ...block,
225
+ meta: {
226
+ ...block.meta,
227
+ changed: Date.now()
228
+ }
229
+ }));
230
+ onChange?.(updatedData);
231
+ return updatedData;
232
+ });
233
+ }
234
+ });
235
+ return () => sortable.destroy();
236
+ }, [setData, onChange, isMp]);
237
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
238
+ sx: {
239
+ py: 2
240
+ },
241
+ children: noMpNavBarData.length === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
242
+ variant: "body2",
243
+ color: "text.secondary",
244
+ sx: {
245
+ textAlign: 'center',
246
+ py: 4
247
+ },
248
+ children: t('editor.noLayers')
249
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_SimpleTreeView.SimpleTreeView, {
250
+ ref: treeRef,
251
+ "aria-label": "block structure",
252
+ expandedItems: expandedItems,
253
+ selectedItems: selectedBlockId || '',
254
+ onSelectedItemsChange: (event, itemId) => {
255
+ if (itemId) {
256
+ setSelectedBlockId(itemId);
257
+ setEditingBlockId(itemId);
258
+ }
259
+ },
260
+ onExpandedItemsChange: (event, nodeIds) => {
261
+ setExpandedItems(nodeIds);
262
+ },
263
+ sx: {
264
+ '.MuiTreeItem-root': {
265
+ '.MuiTreeItem-content': {
266
+ padding: '4px 8px',
267
+ borderRadius: 1,
268
+ '&:hover': {
269
+ backgroundColor: 'action.hover'
270
+ },
271
+ '&.Mui-selected': {
272
+ backgroundColor: 'grey[100]',
273
+ '&:hover': {
274
+ backgroundColor: 'grey[100]'
275
+ }
276
+ }
277
+ },
278
+ '.MuiTreeItem-group': {
279
+ marginLeft: 2,
280
+ paddingLeft: 1,
281
+ borderLeft: '1px dashed',
282
+ borderColor: 'divider'
283
+ }
284
+ }
285
+ },
286
+ children: noMpNavBarData.map(block => /*#__PURE__*/(0, _jsxRuntime.jsx)(LayerNode, {
287
+ block: block,
288
+ blockTypes: blockTypes,
289
+ onMenuOpen: onMenuOpen,
290
+ setSelectedBlockId: setSelectedBlockId,
291
+ setEditingBlockId: setEditingBlockId,
292
+ setData: setData,
293
+ onChange: onChange,
294
+ level: 0
295
+ }, block.id))
296
+ })
297
+ });
298
+ };
299
+ var _default = exports.default = LayerPanel;
@@ -0,0 +1,7 @@
1
+ import { Block } from '../../types';
2
+ import { TooltipProps } from '@mui/material/Tooltip';
3
+ export declare const HtmlTooltip: import("@emotion/styled").StyledComponent<TooltipProps & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
4
+ declare const BlocksBar: ({ onChange }: {
5
+ onChange?(data: Block[]): void;
6
+ }) => import("react/jsx-runtime").JSX.Element;
7
+ export default BlocksBar;