@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.
- package/Editor.d.ts +77 -0
- package/Editor.js +312 -0
- package/LICENSE.txt +674 -0
- package/README.md +248 -0
- package/assets/svg/mp.d.ts +2 -0
- package/assets/svg/mp.js +37 -0
- package/assets/svg/status-bar.d.ts +2 -0
- package/assets/svg/status-bar.js +38 -0
- package/constants/index.d.ts +11 -0
- package/constants/index.js +17 -0
- package/contexts/I18nContext.d.ts +15 -0
- package/contexts/I18nContext.js +56 -0
- package/controls/AlignmentControl/AlignmentControl.d.ts +5 -0
- package/controls/AlignmentControl/AlignmentControl.js +58 -0
- package/controls/AlignmentControl/index.d.ts +3 -0
- package/controls/AlignmentControl/index.js +9 -0
- package/controls/DeviceSwitcher/DeviceSwitcher.d.ts +10 -0
- package/controls/DeviceSwitcher/DeviceSwitcher.js +64 -0
- package/controls/DeviceSwitcher/index.d.ts +2 -0
- package/controls/DeviceSwitcher/index.js +9 -0
- package/controls/GradientColorPicker/GradientColorPicker.d.ts +8 -0
- package/controls/GradientColorPicker/GradientColorPicker.js +81 -0
- package/controls/GradientColorPicker/index.d.ts +2 -0
- package/controls/GradientColorPicker/index.js +9 -0
- package/controls/HeadingControl/HeadingControl.d.ts +14 -0
- package/controls/HeadingControl/HeadingControl.js +251 -0
- package/controls/HeadingControl/HeadingView.d.ts +21 -0
- package/controls/HeadingControl/HeadingView.js +43 -0
- package/controls/HeadingControl/index.d.ts +4 -0
- package/controls/HeadingControl/index.js +16 -0
- package/controls/MediaLibraryControl/FileBrowserDialog.d.ts +14 -0
- package/controls/MediaLibraryControl/FileBrowserDialog.js +138 -0
- package/controls/MediaLibraryControl/MediaLibraryControl.d.ts +38 -0
- package/controls/MediaLibraryControl/MediaLibraryControl.js +537 -0
- package/controls/MediaLibraryControl/index.d.ts +3 -0
- package/controls/MediaLibraryControl/index.js +9 -0
- package/controls/PaddingMarginControl/PaddingMarginControl.d.ts +30 -0
- package/controls/PaddingMarginControl/PaddingMarginControl.js +88 -0
- package/controls/PaddingMarginControl/PaddingMarginForm.d.ts +8 -0
- package/controls/PaddingMarginControl/PaddingMarginForm.js +109 -0
- package/controls/PaddingMarginControl/index.d.ts +4 -0
- package/controls/PaddingMarginControl/index.js +16 -0
- package/controls/PaddingMarginControl/utils.d.ts +3 -0
- package/controls/PaddingMarginControl/utils.js +21 -0
- package/controls/SelectableControl/SelectableControl.d.ts +5 -0
- package/controls/SelectableControl/SelectableControl.js +35 -0
- package/controls/SelectableControl/index.d.ts +3 -0
- package/controls/SelectableControl/index.js +9 -0
- package/hooks/ui-optimizations/useDebounce.d.ts +3 -0
- package/hooks/ui-optimizations/useDebounce.js +23 -0
- package/hooks/ui-optimizations/useThrottle.d.ts +3 -0
- package/hooks/ui-optimizations/useThrottle.js +22 -0
- package/hooks/useMediaImageQuery.d.ts +10 -0
- package/hooks/useMediaImageQuery.js +51 -0
- package/hooks/useSortable.d.ts +20 -0
- package/hooks/useSortable.js +70 -0
- package/index.d.ts +7 -0
- package/index.js +54 -0
- package/layouts/BlocksBar/LayerPanel.d.ts +8 -0
- package/layouts/BlocksBar/LayerPanel.js +299 -0
- package/layouts/BlocksBar/index.d.ts +7 -0
- package/layouts/BlocksBar/index.js +575 -0
- package/layouts/EditorPreview/BlockView.d.ts +16 -0
- package/layouts/EditorPreview/BlockView.js +435 -0
- package/layouts/EditorPreview/index.d.ts +9 -0
- package/layouts/EditorPreview/index.js +463 -0
- package/layouts/Header/index.d.ts +18 -0
- package/layouts/Header/index.js +202 -0
- package/layouts/Header/menus/ExportDataDialog.d.ts +4 -0
- package/layouts/Header/menus/ExportDataDialog.js +95 -0
- package/layouts/Header/menus/ImportDataDialog.d.ts +4 -0
- package/layouts/Header/menus/ImportDataDialog.js +100 -0
- package/layouts/Header/menus/LeftMenu.d.ts +9 -0
- package/layouts/Header/menus/LeftMenu.js +369 -0
- package/layouts/Header/menus/RightMenu.d.ts +14 -0
- package/layouts/Header/menus/RightMenu.js +91 -0
- package/layouts/Header/menus/SaveTemplateDialog.d.ts +4 -0
- package/layouts/Header/menus/SaveTemplateDialog.js +203 -0
- package/layouts/MessageBus.d.ts +13 -0
- package/layouts/MessageBus.js +76 -0
- package/layouts/Sidebar/AddBlockButton.d.ts +12 -0
- package/layouts/Sidebar/AddBlockButton.js +267 -0
- package/layouts/Sidebar/BlockForm.d.ts +20 -0
- package/layouts/Sidebar/BlockForm.js +517 -0
- package/layouts/Sidebar/BlocksControl.d.ts +21 -0
- package/layouts/Sidebar/BlocksControl.js +190 -0
- package/layouts/Sidebar/index.d.ts +10 -0
- package/layouts/Sidebar/index.js +451 -0
- package/layouts/Snackbar.d.ts +3 -0
- package/layouts/Snackbar.js +43 -0
- package/package.json +133 -0
- package/store/Provider.d.ts +15 -0
- package/store/Provider.js +71 -0
- package/store/editor-store-core.d.ts +4 -0
- package/store/editor-store-core.js +271 -0
- package/store/index.d.ts +112 -0
- package/store/index.js +178 -0
- package/theme.d.ts +10 -0
- package/theme.js +9 -0
- package/translation/cn.json +29 -0
- package/translation/en.json +29 -0
- package/translation/fr.json +31 -0
- package/translation/index.d.ts +6 -0
- package/translation/index.js +23 -0
- package/translation/types.d.ts +13 -0
- package/translation/types.js +5 -0
- package/types/Block.d.ts +22 -0
- package/types/Block.js +5 -0
- package/types/BlockType.d.ts +50 -0
- package/types/BlockType.js +5 -0
- package/types/ConfigStorageAdapter.d.ts +11 -0
- package/types/ConfigStorageAdapter.js +5 -0
- package/types/ObjectStorageAdapter.d.ts +68 -0
- package/types/ObjectStorageAdapter.js +5 -0
- package/types/index.d.ts +5 -0
- package/types/index.js +100 -0
- package/types/throttle-and-debounce.d.ts +2 -0
- package/types/throttle-and-debounce.js +5 -0
- package/utils/block.d.ts +16 -0
- package/utils/block.js +41 -0
- package/utils/helpers.d.ts +5 -0
- package/utils/helpers.js +22 -0
- package/utils/strings.d.ts +1 -0
- package/utils/strings.js +11 -0
package/store/index.js
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useTemporalEditorStore = exports.useObjectStorage = exports.useEditorStore = exports.useConfigStorageQueryClient = exports.useConfigStorage = exports.createEditorStore = exports.EditorContext = void 0;
|
|
7
|
+
var _reactQuery = require("@tanstack/react-query");
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _zundo = require("zundo");
|
|
10
|
+
var _zustand = require("zustand");
|
|
11
|
+
var _editorStoreCore = _interopRequireDefault(require("./editor-store-core"));
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
const createEditorStore = (initialState = {}) => {
|
|
14
|
+
const createTemporalOptions = () => ({
|
|
15
|
+
partialize: state => ({
|
|
16
|
+
data: state.data
|
|
17
|
+
}),
|
|
18
|
+
equality: (pastState, futureState) => {
|
|
19
|
+
const aId = pastState.data.map(block => `${block.id}:${block.meta.changed}`).join('/');
|
|
20
|
+
const bId = futureState.data.map(block => `${block.id}:${block.meta.changed}`).join('/');
|
|
21
|
+
return aId === bId;
|
|
22
|
+
},
|
|
23
|
+
limit: 20
|
|
24
|
+
});
|
|
25
|
+
const temporalOptions = createTemporalOptions();
|
|
26
|
+
return (0, _zustand.create)()((0, _zundo.temporal)((0, _editorStoreCore.default)(initialState), temporalOptions));
|
|
27
|
+
};
|
|
28
|
+
exports.createEditorStore = createEditorStore;
|
|
29
|
+
const EditorContext = exports.EditorContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
30
|
+
const rootEditorStore = createEditorStore();
|
|
31
|
+
const useEditorStore = selector => {
|
|
32
|
+
const store = (0, _react.useContext)(EditorContext) || rootEditorStore;
|
|
33
|
+
return (0, _zustand.useStore)(store, selector);
|
|
34
|
+
};
|
|
35
|
+
exports.useEditorStore = useEditorStore;
|
|
36
|
+
const useTemporalEditorStore = selector => {
|
|
37
|
+
const store = (0, _react.useContext)(EditorContext) || rootEditorStore;
|
|
38
|
+
return (0, _zustand.useStore)(store.temporal, selector);
|
|
39
|
+
};
|
|
40
|
+
exports.useTemporalEditorStore = useTemporalEditorStore;
|
|
41
|
+
const useObjectStorage = () => {
|
|
42
|
+
return useEditorStore(state => state.storage?.object);
|
|
43
|
+
};
|
|
44
|
+
exports.useObjectStorage = useObjectStorage;
|
|
45
|
+
const useConfigStorage = () => {
|
|
46
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
47
|
+
let _configStorage;
|
|
48
|
+
const {
|
|
49
|
+
storage
|
|
50
|
+
} = useEditorStore(state => state);
|
|
51
|
+
const isStorageUndefined = typeof storage === 'undefined';
|
|
52
|
+
const {
|
|
53
|
+
config: configStorage = null
|
|
54
|
+
} = isStorageUndefined ? {} : storage;
|
|
55
|
+
const objectStorage = useObjectStorage();
|
|
56
|
+
if (configStorage) {
|
|
57
|
+
return configStorage;
|
|
58
|
+
}
|
|
59
|
+
if (isStorageUndefined && !objectStorage) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
if (!_configStorage) {
|
|
63
|
+
const prefix = '.config/mui-edit/';
|
|
64
|
+
const getFilename = id => `${id}.json`;
|
|
65
|
+
_configStorage = {
|
|
66
|
+
async get(id) {
|
|
67
|
+
if (!objectStorage) {
|
|
68
|
+
return Promise.resolve([]);
|
|
69
|
+
}
|
|
70
|
+
const url = await objectStorage.objectUrl({
|
|
71
|
+
key: `${prefix}${getFilename(id)}`
|
|
72
|
+
});
|
|
73
|
+
const response = await fetch(url);
|
|
74
|
+
if (response.status !== 200) {
|
|
75
|
+
throw new Error(`Fail to get config data for config "${id}"`);
|
|
76
|
+
}
|
|
77
|
+
return await response.json();
|
|
78
|
+
},
|
|
79
|
+
async list() {
|
|
80
|
+
if (!objectStorage) {
|
|
81
|
+
return Promise.resolve([]);
|
|
82
|
+
}
|
|
83
|
+
const results = await objectStorage.ls({
|
|
84
|
+
prefix
|
|
85
|
+
});
|
|
86
|
+
return results.objects.map(o => o.name.slice(0, -5));
|
|
87
|
+
},
|
|
88
|
+
async save(config) {
|
|
89
|
+
if (!objectStorage) {
|
|
90
|
+
throw new Error('Object storage is not defined');
|
|
91
|
+
}
|
|
92
|
+
const filename = getFilename(config.id);
|
|
93
|
+
const file = new File([JSON.stringify({
|
|
94
|
+
id: config.id,
|
|
95
|
+
revisionId: (config.revisionId || 0) + 1,
|
|
96
|
+
data: config.data
|
|
97
|
+
})], filename);
|
|
98
|
+
await objectStorage.upload({
|
|
99
|
+
file,
|
|
100
|
+
key: `${prefix}${filename}`,
|
|
101
|
+
acl: 'private',
|
|
102
|
+
overwrite: true
|
|
103
|
+
});
|
|
104
|
+
return config;
|
|
105
|
+
},
|
|
106
|
+
async delete(id) {
|
|
107
|
+
if (!objectStorage) {
|
|
108
|
+
throw new Error('Object storage is not defined');
|
|
109
|
+
}
|
|
110
|
+
await objectStorage.delete({
|
|
111
|
+
key: `${prefix}${getFilename(id)}`
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
return _configStorage;
|
|
117
|
+
};
|
|
118
|
+
exports.useConfigStorage = useConfigStorage;
|
|
119
|
+
const useConfigStorageQueryClient = () => {
|
|
120
|
+
const ErrorConfigStorageNotDefined = new Error('Config storage is not defined');
|
|
121
|
+
const storage = useConfigStorage();
|
|
122
|
+
const queryClient = (0, _reactQuery.useQueryClient)();
|
|
123
|
+
const getStorage = () => {
|
|
124
|
+
if (!storage) {
|
|
125
|
+
throw ErrorConfigStorageNotDefined;
|
|
126
|
+
}
|
|
127
|
+
return storage;
|
|
128
|
+
};
|
|
129
|
+
return {
|
|
130
|
+
useGetQuery(id, options = {}) {
|
|
131
|
+
const query = (0, _reactQuery.useQuery)({
|
|
132
|
+
queryKey: ['configStorage.get', id],
|
|
133
|
+
async queryFn() {
|
|
134
|
+
const config = await getStorage().get(id);
|
|
135
|
+
return config;
|
|
136
|
+
},
|
|
137
|
+
...options
|
|
138
|
+
});
|
|
139
|
+
return query;
|
|
140
|
+
},
|
|
141
|
+
useListQuery(options = {}) {
|
|
142
|
+
return (0, _reactQuery.useQuery)({
|
|
143
|
+
queryKey: ['configStorage.list'],
|
|
144
|
+
queryFn() {
|
|
145
|
+
return getStorage().list();
|
|
146
|
+
},
|
|
147
|
+
...options
|
|
148
|
+
});
|
|
149
|
+
},
|
|
150
|
+
useDeleteMutation(options) {
|
|
151
|
+
return (0, _reactQuery.useMutation)({
|
|
152
|
+
async mutationFn(id) {
|
|
153
|
+
await getStorage().delete(id);
|
|
154
|
+
return id;
|
|
155
|
+
},
|
|
156
|
+
onSuccess(id) {
|
|
157
|
+
queryClient.invalidateQueries(['configStorage.list', 'configStorage.get', id]);
|
|
158
|
+
if (options?.onSuccess) options.onSuccess(id);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
},
|
|
162
|
+
useSaveMutation(options) {
|
|
163
|
+
return (0, _reactQuery.useMutation)({
|
|
164
|
+
mutationFn(config) {
|
|
165
|
+
if (!storage) {
|
|
166
|
+
throw ErrorConfigStorageNotDefined;
|
|
167
|
+
}
|
|
168
|
+
return storage.save(config);
|
|
169
|
+
},
|
|
170
|
+
onSuccess(config) {
|
|
171
|
+
queryClient.invalidateQueries(['configStorage.list', 'configStorage.get', config.id]);
|
|
172
|
+
if (options?.onSuccess) options.onSuccess(config);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
exports.useConfigStorageQueryClient = useConfigStorageQueryClient;
|
package/theme.d.ts
ADDED
package/theme.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"editor": {
|
|
3
|
+
"components": "组件",
|
|
4
|
+
"layers": "图层",
|
|
5
|
+
"content": "内容",
|
|
6
|
+
"advanced": "高级",
|
|
7
|
+
"settings": "设置",
|
|
8
|
+
"clone": "复制",
|
|
9
|
+
"delete": "删除",
|
|
10
|
+
"cancel": "取消",
|
|
11
|
+
"confirm": "确定",
|
|
12
|
+
"clearAll": "清空所有",
|
|
13
|
+
"clearConfirm": "确定要清空所有内容吗?",
|
|
14
|
+
"importFromTemplate": "从模板导入",
|
|
15
|
+
"saveAsTemplate": "保存为模板",
|
|
16
|
+
"importData": "导入数据",
|
|
17
|
+
"exportData": "导出数据",
|
|
18
|
+
"copyToClipboard": "复制到剪贴板",
|
|
19
|
+
"templateName": "模板名称",
|
|
20
|
+
"templateId": "模板ID",
|
|
21
|
+
"edit": "编辑",
|
|
22
|
+
"save": "保存",
|
|
23
|
+
"noTemplatesFound": "没有可用模板",
|
|
24
|
+
"noAdvanced": "暂无高级样式/设置",
|
|
25
|
+
"noLayers": "暂无图层, 添加一些组件吧",
|
|
26
|
+
"searchPlaceholder": "搜索组件名称",
|
|
27
|
+
"noBlockSelected": "选择一个组件编辑"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"editor": {
|
|
3
|
+
"components": "Components",
|
|
4
|
+
"layers": "Layers",
|
|
5
|
+
"content": "Content",
|
|
6
|
+
"advanced": "Advanced",
|
|
7
|
+
"settings": "Settings",
|
|
8
|
+
"clone": "Clone",
|
|
9
|
+
"delete": "Delete",
|
|
10
|
+
"cancel": "Cancel",
|
|
11
|
+
"confirm": "Confirm",
|
|
12
|
+
"clearAll": "Clear All",
|
|
13
|
+
"clearConfirm": "Are you sure you want to clear all content?",
|
|
14
|
+
"importFromTemplate": "Import from Template",
|
|
15
|
+
"saveAsTemplate": "Save as Template",
|
|
16
|
+
"importData": "Import Data",
|
|
17
|
+
"exportData": "Export Data",
|
|
18
|
+
"copyToClipboard": "Copy to Clipboard",
|
|
19
|
+
"templateName": "Template Name",
|
|
20
|
+
"templateId": "Template ID",
|
|
21
|
+
"edit": "Edit",
|
|
22
|
+
"save": "Save",
|
|
23
|
+
"noTemplatesFound": "No templates found.",
|
|
24
|
+
"noAdvanced": "No Advanced style/settings available yet",
|
|
25
|
+
"noLayers": "No layers yet. Add some blocks to see the structure here.",
|
|
26
|
+
"searchPlaceholder": "Search components name",
|
|
27
|
+
"noBlockSelected": "Select a block to edit its properties"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"editor": {
|
|
3
|
+
"components": "Composants",
|
|
4
|
+
"layers": "Calques",
|
|
5
|
+
"content": "Contenu",
|
|
6
|
+
"advanced": "Avancé",
|
|
7
|
+
"settings": "Paramètres",
|
|
8
|
+
"clone": "Dupliquer",
|
|
9
|
+
"delete": "Supprimer",
|
|
10
|
+
"cancel": "Annuler",
|
|
11
|
+
"confirm": "Confirmer",
|
|
12
|
+
"clearAll": "Tout effacer",
|
|
13
|
+
"clearConfirm": "Êtes-vous sûr de vouloir effacer tout le contenu ?",
|
|
14
|
+
"importFromTemplate": "Importer depuis un modèle",
|
|
15
|
+
"saveAsTemplate": "Enregistrer comme modèle",
|
|
16
|
+
"importData": "Importer des données",
|
|
17
|
+
"exportData": "Exporter des données",
|
|
18
|
+
"copyToClipboard": "Copier dans le presse-papiers",
|
|
19
|
+
"templateName": "Nom du modèle",
|
|
20
|
+
"templateId": "ID du modèle",
|
|
21
|
+
"edit": "Modifier",
|
|
22
|
+
"save": "Enregistrer",
|
|
23
|
+
"noTemplatesFound": "Aucun modèle trouvé.",
|
|
24
|
+
"noAdvanced": "Aucun style/paramètres disponibles pour le moment",
|
|
25
|
+
"noLayers": "Aucun calque pour le moment. Ajoutez des blocs pour voir la structure ici.",
|
|
26
|
+
"searchPlaceholder": "Rechercher un composant",
|
|
27
|
+
"noBlockSelected": "Sélectionnez un bloc pour modifier ses propriétés"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { LocaleType, TMessage } from './types';
|
|
2
|
+
declare const translations: Record<LocaleType, TMessage>;
|
|
3
|
+
export declare const getTranslations: (locale: LocaleType) => TMessage;
|
|
4
|
+
export declare const getSupportedLocales: () => LocaleType[];
|
|
5
|
+
export { type LocaleType, type TMessage, type TranslationKey } from './types';
|
|
6
|
+
export { translations };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.translations = exports.getTranslations = exports.getSupportedLocales = void 0;
|
|
7
|
+
var _cn = _interopRequireDefault(require("./cn.json"));
|
|
8
|
+
var _en = _interopRequireDefault(require("./en.json"));
|
|
9
|
+
var _fr = _interopRequireDefault(require("./fr.json"));
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
const translations = exports.translations = {
|
|
12
|
+
en: _en.default,
|
|
13
|
+
cn: _cn.default,
|
|
14
|
+
fr: _fr.default
|
|
15
|
+
};
|
|
16
|
+
const getTranslations = locale => {
|
|
17
|
+
return translations[locale] || translations.en;
|
|
18
|
+
};
|
|
19
|
+
exports.getTranslations = getTranslations;
|
|
20
|
+
const getSupportedLocales = () => {
|
|
21
|
+
return Object.keys(translations);
|
|
22
|
+
};
|
|
23
|
+
exports.getSupportedLocales = getSupportedLocales;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import en from './en.json';
|
|
2
|
+
export type TMessage = typeof en;
|
|
3
|
+
export type LocaleType = 'en' | 'cn' | 'fr';
|
|
4
|
+
export interface LanguageConfig {
|
|
5
|
+
en: TMessage;
|
|
6
|
+
cn: TMessage;
|
|
7
|
+
fr: TMessage;
|
|
8
|
+
}
|
|
9
|
+
type NestedKeyPaths<T, Prefix extends string = ''> = {
|
|
10
|
+
[K in keyof T]: T[K] extends object ? K extends string ? `${Prefix}${K}` | NestedKeyPaths<T[K], `${Prefix}${K}.`> : never : K extends string ? `${Prefix}${K}` : never;
|
|
11
|
+
}[keyof T];
|
|
12
|
+
export type TranslationKey = NestedKeyPaths<TMessage>;
|
|
13
|
+
export {};
|
package/types/Block.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface BlockMeta {
|
|
2
|
+
changed: number;
|
|
3
|
+
created: number;
|
|
4
|
+
}
|
|
5
|
+
export type RelationshipItem = {
|
|
6
|
+
id: string;
|
|
7
|
+
type: string;
|
|
8
|
+
meta?: any;
|
|
9
|
+
};
|
|
10
|
+
export interface Relationship<D extends RelationshipItem = RelationshipItem> {
|
|
11
|
+
data: D | D[];
|
|
12
|
+
}
|
|
13
|
+
export interface Block<D = any, S = any> {
|
|
14
|
+
id: string;
|
|
15
|
+
type: string;
|
|
16
|
+
data: D;
|
|
17
|
+
settings: S;
|
|
18
|
+
meta: BlockMeta;
|
|
19
|
+
collapse?: boolean;
|
|
20
|
+
mpBlock?: boolean;
|
|
21
|
+
top?: boolean;
|
|
22
|
+
}
|
package/types/Block.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { LoadableComponent } from '@loadable/component';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { ThrottleAndDebounce } from '../types';
|
|
5
|
+
import { Block } from './Block';
|
|
6
|
+
export interface EditFormProps<D, S> extends Partial<Block<D, S>> {
|
|
7
|
+
id: string;
|
|
8
|
+
data: D;
|
|
9
|
+
onChange(dataOrFn: D | ((prevData: D) => D)): void;
|
|
10
|
+
onDebouncedChange: ThrottleAndDebounce;
|
|
11
|
+
onThrottledChange: ThrottleAndDebounce;
|
|
12
|
+
onClose(): void;
|
|
13
|
+
}
|
|
14
|
+
export interface SettingsFormProps<D, S> extends Partial<Block<D, S>> {
|
|
15
|
+
id: string;
|
|
16
|
+
data: D;
|
|
17
|
+
settings: S;
|
|
18
|
+
onChange(settingsOrFn: S | ((prevSettings: S) => S)): void;
|
|
19
|
+
onDebouncedChange: ThrottleAndDebounce;
|
|
20
|
+
onThrottledChange: ThrottleAndDebounce;
|
|
21
|
+
}
|
|
22
|
+
export interface ViewProps<D, S, C = Record<string, any>> extends Block<D, S> {
|
|
23
|
+
contentEditable?: boolean;
|
|
24
|
+
onDataChange(data: D): void;
|
|
25
|
+
onSettingsChange(settings: S): void;
|
|
26
|
+
context?: C;
|
|
27
|
+
}
|
|
28
|
+
export interface BlockType<D = any, S = any> {
|
|
29
|
+
id: string;
|
|
30
|
+
icon?: string;
|
|
31
|
+
preview?: string;
|
|
32
|
+
category?: 'Banner' | 'Tool' | 'Card' | 'Text' | 'Media' | 'Design' | 'Brand';
|
|
33
|
+
collapse?: boolean;
|
|
34
|
+
label: string;
|
|
35
|
+
defaultData: D & {
|
|
36
|
+
blockName: string;
|
|
37
|
+
};
|
|
38
|
+
defaultSettings: S;
|
|
39
|
+
getDataSchema?(): Promise<z.Schema>;
|
|
40
|
+
getSettingsSchema?(): Promise<z.Schema>;
|
|
41
|
+
blockLabel(data: D): React.ReactNode;
|
|
42
|
+
settingsForm: LoadableComponent<SettingsFormProps<D, S>> | React.FunctionComponent<SettingsFormProps<D, S>> | null;
|
|
43
|
+
editForm: LoadableComponent<EditFormProps<D, S>> | React.FunctionComponent<EditFormProps<D, S>> | null;
|
|
44
|
+
view: LoadableComponent<ViewProps<D, S>> | React.FunctionComponent<ViewProps<D, S>> | null;
|
|
45
|
+
cardinality?: number;
|
|
46
|
+
disabled?: boolean;
|
|
47
|
+
suspense?: React.SuspenseProps;
|
|
48
|
+
mpBlock?: boolean;
|
|
49
|
+
top?: boolean;
|
|
50
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface Config<Data = any> {
|
|
2
|
+
id: string;
|
|
3
|
+
revisionId: number;
|
|
4
|
+
data: Data;
|
|
5
|
+
}
|
|
6
|
+
export interface ConfigStorageAdapter {
|
|
7
|
+
get<Data>(id: string): Promise<Config<Data> | null>;
|
|
8
|
+
delete(id: string): Promise<void>;
|
|
9
|
+
list(): Promise<string[]>;
|
|
10
|
+
save(config: Config): Promise<typeof config>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export interface StorageObject {
|
|
2
|
+
id: string;
|
|
3
|
+
type: 'file';
|
|
4
|
+
key: string;
|
|
5
|
+
size: number;
|
|
6
|
+
name: string;
|
|
7
|
+
lastModified: string;
|
|
8
|
+
}
|
|
9
|
+
export interface StorageObjectMeta {
|
|
10
|
+
name: string;
|
|
11
|
+
url: string;
|
|
12
|
+
uri: string;
|
|
13
|
+
contentType: string;
|
|
14
|
+
size: string;
|
|
15
|
+
md5?: string;
|
|
16
|
+
exif?: {
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface Folder {
|
|
22
|
+
id: string;
|
|
23
|
+
type: 'folder';
|
|
24
|
+
prefix: string;
|
|
25
|
+
name: string;
|
|
26
|
+
}
|
|
27
|
+
export type LsResult = {
|
|
28
|
+
objects: StorageObject[];
|
|
29
|
+
folders: Folder[];
|
|
30
|
+
isTruncated: boolean;
|
|
31
|
+
count: number;
|
|
32
|
+
};
|
|
33
|
+
export interface ObjectStorageAdapter {
|
|
34
|
+
ls(args: {
|
|
35
|
+
prefix: string;
|
|
36
|
+
}): Promise<LsResult>;
|
|
37
|
+
upload(args: {
|
|
38
|
+
key: string;
|
|
39
|
+
file: File | Blob;
|
|
40
|
+
acl?: 'private' | 'public' | 'public-read';
|
|
41
|
+
overwrite?: boolean;
|
|
42
|
+
onProgress?: XMLHttpRequestUpload['onprogress'];
|
|
43
|
+
onReady?(xhr: XMLHttpRequest): void;
|
|
44
|
+
}): Promise<string>;
|
|
45
|
+
mkdir(args: {
|
|
46
|
+
key: string;
|
|
47
|
+
}): Promise<void>;
|
|
48
|
+
rename(args: {
|
|
49
|
+
source: string;
|
|
50
|
+
destination: string;
|
|
51
|
+
}): Promise<void>;
|
|
52
|
+
objectUrl(args: {
|
|
53
|
+
key: string;
|
|
54
|
+
expires?: number;
|
|
55
|
+
}): Promise<string>;
|
|
56
|
+
imagePreviewUrl(args: {
|
|
57
|
+
key: string;
|
|
58
|
+
expires?: number;
|
|
59
|
+
width: number;
|
|
60
|
+
}): Promise<string>;
|
|
61
|
+
objectMeta(args: {
|
|
62
|
+
key: string;
|
|
63
|
+
}): Promise<StorageObjectMeta>;
|
|
64
|
+
delete(args: {
|
|
65
|
+
key: string;
|
|
66
|
+
}): Promise<void>;
|
|
67
|
+
}
|
|
68
|
+
export default ObjectStorageAdapter;
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { Block, BlockMeta, Relationship, RelationshipItem } from './Block';
|
|
2
|
+
export { BlockType, EditFormProps, SettingsFormProps, ViewProps } from './BlockType';
|
|
3
|
+
export { Config, ConfigStorageAdapter } from './ConfigStorageAdapter';
|
|
4
|
+
export { ObjectStorageAdapter, StorageObject, StorageObjectMeta } from './ObjectStorageAdapter';
|
|
5
|
+
export { ThrottleAndDebounce, WrapFunction } from './throttle-and-debounce';
|
package/types/index.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "Block", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _Block.Block;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "BlockMeta", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _Block.BlockMeta;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "BlockType", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _BlockType.BlockType;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "Config", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _ConfigStorageAdapter.Config;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "ConfigStorageAdapter", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _ConfigStorageAdapter.ConfigStorageAdapter;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "EditFormProps", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _BlockType.EditFormProps;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "ObjectStorageAdapter", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _ObjectStorageAdapter.ObjectStorageAdapter;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(exports, "Relationship", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function () {
|
|
51
|
+
return _Block.Relationship;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(exports, "RelationshipItem", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _Block.RelationshipItem;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(exports, "SettingsFormProps", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: function () {
|
|
63
|
+
return _BlockType.SettingsFormProps;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
Object.defineProperty(exports, "StorageObject", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
get: function () {
|
|
69
|
+
return _ObjectStorageAdapter.StorageObject;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
Object.defineProperty(exports, "StorageObjectMeta", {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
get: function () {
|
|
75
|
+
return _ObjectStorageAdapter.StorageObjectMeta;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
Object.defineProperty(exports, "ThrottleAndDebounce", {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
get: function () {
|
|
81
|
+
return _throttleAndDebounce.ThrottleAndDebounce;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
Object.defineProperty(exports, "ViewProps", {
|
|
85
|
+
enumerable: true,
|
|
86
|
+
get: function () {
|
|
87
|
+
return _BlockType.ViewProps;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
Object.defineProperty(exports, "WrapFunction", {
|
|
91
|
+
enumerable: true,
|
|
92
|
+
get: function () {
|
|
93
|
+
return _throttleAndDebounce.WrapFunction;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
var _Block = require("./Block");
|
|
97
|
+
var _BlockType = require("./BlockType");
|
|
98
|
+
var _ConfigStorageAdapter = require("./ConfigStorageAdapter");
|
|
99
|
+
var _ObjectStorageAdapter = require("./ObjectStorageAdapter");
|
|
100
|
+
var _throttleAndDebounce = require("./throttle-and-debounce");
|
package/utils/block.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Block } from '../types/Block';
|
|
2
|
+
import { BlockType } from '../types/BlockType';
|
|
3
|
+
export declare const createBlock: (blockType: BlockType) => Block<any, any>;
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* @param block -- Block type
|
|
7
|
+
* @param include -- blocks data will be including mp-nav when it is true,
|
|
8
|
+
* @param field -- use type or id to filter the block
|
|
9
|
+
* @returns -- return true if the block is mp-nav when include is true,
|
|
10
|
+
* otherwise execute the excluding logic
|
|
11
|
+
*/
|
|
12
|
+
export declare const blockFilteredMPNav: (block: Block | BlockType, include?: boolean, field?: 'type' | 'id') => boolean;
|
|
13
|
+
declare const _default: {
|
|
14
|
+
createBlock: (blockType: BlockType<any, any>) => Block<any, any>;
|
|
15
|
+
};
|
|
16
|
+
export default _default;
|