@difizen/libro-core 0.1.1 → 0.1.3
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/es/add-cell/index.less +1 -1
- package/es/add-cell/libro-add-cell-slot-contribution.d.ts +1 -2
- package/es/add-cell/libro-add-cell-slot-contribution.d.ts.map +1 -1
- package/es/add-cell/libro-add-cell-slot-contribution.js +12 -6
- package/es/add-cell/libro-add-cell-view.d.ts +4 -4
- package/es/add-cell/libro-add-cell-view.d.ts.map +1 -1
- package/es/add-cell/libro-add-cell-view.js +4 -6
- package/es/cell/libro-cell-contribution.d.ts +1 -2
- package/es/cell/libro-cell-contribution.d.ts.map +1 -1
- package/es/cell/libro-cell-contribution.js +14 -8
- package/es/cell/libro-cell-model.d.ts +9 -0
- package/es/cell/libro-cell-model.d.ts.map +1 -1
- package/es/cell/libro-cell-model.js +53 -11
- package/es/cell/libro-cell-protocol.d.ts +2 -0
- package/es/cell/libro-cell-protocol.d.ts.map +1 -1
- package/es/cell/libro-cell-view.d.ts +6 -2
- package/es/cell/libro-cell-view.d.ts.map +1 -1
- package/es/cell/libro-cell-view.js +54 -24
- package/es/cell/libro-edit-cell-view.d.ts +6 -12
- package/es/cell/libro-edit-cell-view.d.ts.map +1 -1
- package/es/cell/libro-edit-cell-view.js +9 -4
- package/es/cell/libro-executable-cell-view.d.ts +2 -0
- package/es/cell/libro-executable-cell-view.d.ts.map +1 -1
- package/es/cell/libro-executable-cell-view.js +4 -1
- package/es/collapse-service.d.ts +1 -1
- package/es/collapse-service.d.ts.map +1 -1
- package/es/collapse-service.js +1 -1
- package/es/command/document-commands.d.ts +1 -2
- package/es/command/document-commands.d.ts.map +1 -1
- package/es/command/document-commands.js +3 -2
- package/es/command/kernel-command.d.ts.map +1 -1
- package/es/command/kernel-command.js +3 -0
- package/es/command/libro-command-contribution.d.ts +0 -1
- package/es/command/libro-command-contribution.d.ts.map +1 -1
- package/es/command/libro-command-contribution.js +179 -129
- package/es/command/libro-command-register.d.ts +0 -1
- package/es/command/libro-command-register.d.ts.map +1 -1
- package/es/command/libro-command-register.js +13 -7
- package/es/command/notebook-commands.d.ts.map +1 -1
- package/es/command/notebook-commands.js +17 -4
- package/es/components/cell-protocol.d.ts +5 -5
- package/es/components/cell-protocol.d.ts.map +1 -1
- package/es/components/dnd-cell-item-render.d.ts +6 -2
- package/es/components/dnd-cell-item-render.d.ts.map +1 -1
- package/es/components/dnd-cell-item-render.js +194 -89
- package/es/components/dnd-component/custom-drag-layer.d.ts +1 -1
- package/es/components/dnd-component/custom-drag-layer.d.ts.map +1 -1
- package/es/components/dnd-component/custom-drag-layer.js +3 -4
- package/es/components/dnd-component/default-dnd-content.d.ts +2 -1
- package/es/components/dnd-component/default-dnd-content.d.ts.map +1 -1
- package/es/components/dnd-component/default-dnd-content.js +100 -44
- package/es/components/dnd-component/dnd-context.js +1 -1
- package/es/components/dnd-component/dnd-list.d.ts +9 -5
- package/es/components/dnd-component/dnd-list.d.ts.map +1 -1
- package/es/components/dnd-component/dnd-list.js +93 -26
- package/es/components/dnd-component/index.d.ts +1 -1
- package/es/components/dnd-component/index.d.ts.map +1 -1
- package/es/components/dnd-component/index.js +2 -2
- package/es/components/dnd-component/index.less +8 -0
- package/es/components/dnd-component/overscanIndices-getter.d.ts +22 -0
- package/es/components/dnd-component/overscanIndices-getter.d.ts.map +1 -0
- package/es/components/dnd-component/overscanIndices-getter.js +58 -0
- package/es/components/dnd-component/virtualized-manager.d.ts +19 -0
- package/es/components/dnd-component/virtualized-manager.d.ts.map +1 -0
- package/es/components/dnd-component/virtualized-manager.js +60 -0
- package/es/components/index.d.ts +2 -2
- package/es/components/index.d.ts.map +1 -1
- package/es/components/index.js +2 -2
- package/es/components/libro-virtualized-render.d.ts +15 -0
- package/es/components/libro-virtualized-render.d.ts.map +1 -0
- package/es/components/libro-virtualized-render.js +174 -0
- package/es/content/index.d.ts +1 -0
- package/es/content/index.d.ts.map +1 -1
- package/es/content/index.js +2 -1
- package/es/content/libro-content-contribution.d.ts +2 -2
- package/es/content/libro-content-contribution.d.ts.map +1 -1
- package/es/content/libro-content-contribution.js +2 -3
- package/es/content/libro-content-module.d.ts.map +1 -1
- package/es/content/libro-content-module.js +3 -2
- package/es/content/libro-content-protocol.d.ts +5 -0
- package/es/content/libro-content-protocol.d.ts.map +1 -1
- package/es/content/libro-content-protocol.js +2 -1
- package/es/content/libro-content-service.d.ts +5 -3
- package/es/content/libro-content-service.d.ts.map +1 -1
- package/es/content/libro-content-service.js +36 -8
- package/es/content/libro-save-content-contribution.d.ts +6 -0
- package/es/content/libro-save-content-contribution.d.ts.map +1 -0
- package/es/content/libro-save-content-contribution.js +27 -0
- package/es/formatter/index.d.ts +6 -0
- package/es/formatter/index.d.ts.map +1 -0
- package/es/formatter/index.js +5 -0
- package/es/formatter/libro-formatter-json-contribution.d.ts +18 -0
- package/es/formatter/libro-formatter-json-contribution.d.ts.map +1 -0
- package/es/formatter/libro-formatter-json-contribution.js +41 -0
- package/es/formatter/libro-formatter-manager.d.ts +16 -0
- package/es/formatter/libro-formatter-manager.d.ts.map +1 -0
- package/es/formatter/libro-formatter-manager.js +86 -0
- package/es/formatter/libro-formatter-module.d.ts +3 -0
- package/es/formatter/libro-formatter-module.d.ts.map +1 -0
- package/es/formatter/libro-formatter-module.js +7 -0
- package/es/formatter/libro-formatter-protocol.d.ts +37 -0
- package/es/formatter/libro-formatter-protocol.d.ts.map +1 -0
- package/es/formatter/libro-formatter-protocol.js +18 -0
- package/es/formatter/libro-formatter-string-contribution.d.ts +18 -0
- package/es/formatter/libro-formatter-string-contribution.d.ts.map +1 -0
- package/es/formatter/libro-formatter-string-contribution.js +41 -0
- package/es/formatter/libro-formatter-trans-default-contribution.d.ts +7 -0
- package/es/formatter/libro-formatter-trans-default-contribution.d.ts.map +1 -0
- package/es/formatter/libro-formatter-trans-default-contribution.js +19 -0
- package/es/index.d.ts +5 -1
- package/es/index.d.ts.map +1 -1
- package/es/index.js +6 -2
- package/es/index.less +135 -58
- package/es/libro-context-key.d.ts.map +1 -1
- package/es/libro-model.d.ts +13 -2
- package/es/libro-model.d.ts.map +1 -1
- package/es/libro-model.js +149 -70
- package/es/libro-protocol.d.ts +44 -2
- package/es/libro-protocol.d.ts.map +1 -1
- package/es/libro-protocol.js +16 -3
- package/es/libro-service.d.ts +1 -1
- package/es/libro-service.d.ts.map +1 -1
- package/es/libro-service.js +29 -20
- package/es/{configuration/libro-configuration-contribution.d.ts → libro-setting-contribution.d.ts} +2 -2
- package/es/libro-setting-contribution.d.ts.map +1 -0
- package/es/{configuration/libro-configuration-contribution.js → libro-setting-contribution.js} +8 -9
- package/es/{configuration/libro-configuration.d.ts → libro-setting.d.ts} +3 -2
- package/es/libro-setting.d.ts.map +1 -0
- package/es/{configuration/libro-configuration.js → libro-setting.js} +17 -7
- package/es/libro-view.d.ts +21 -8
- package/es/libro-view.d.ts.map +1 -1
- package/es/libro-view.js +477 -338
- package/es/material-from-designer.d.ts +3 -0
- package/es/material-from-designer.d.ts.map +1 -1
- package/es/material-from-designer.js +112 -1
- package/es/module.d.ts.map +1 -1
- package/es/module.js +20 -5
- package/es/output/output-area.d.ts +3 -4
- package/es/output/output-area.d.ts.map +1 -1
- package/es/output/output-area.js +23 -16
- package/es/output/output-contribution.d.ts +0 -1
- package/es/output/output-contribution.d.ts.map +1 -1
- package/es/output/output-contribution.js +14 -9
- package/es/output/output-model.d.ts +2 -2
- package/es/output/output-model.d.ts.map +1 -1
- package/es/output/output-model.js +2 -2
- package/es/output/output-protocol.d.ts.map +1 -1
- package/es/output/output-protocol.js +0 -2
- package/es/settings/index.d.ts +5 -0
- package/es/settings/index.d.ts.map +1 -0
- package/es/settings/index.js +4 -0
- package/es/settings/index.less +3 -0
- package/es/settings/module.d.ts +3 -0
- package/es/settings/module.d.ts.map +1 -0
- package/es/settings/module.js +4 -0
- package/es/settings/setting-editor/configuration-panel-view.d.ts +13 -0
- package/es/settings/setting-editor/configuration-panel-view.d.ts.map +1 -0
- package/es/settings/setting-editor/configuration-panel-view.js +115 -0
- package/es/settings/setting-editor/configuration-render-contribution.d.ts +6 -0
- package/es/settings/setting-editor/configuration-render-contribution.d.ts.map +1 -0
- package/es/settings/setting-editor/configuration-render-contribution.js +77 -0
- package/es/settings/setting-editor/default-node-render.d.ts +9 -0
- package/es/settings/setting-editor/default-node-render.d.ts.map +1 -0
- package/es/settings/setting-editor/default-node-render.js +79 -0
- package/es/settings/setting-editor/index.d.ts +7 -0
- package/es/settings/setting-editor/index.d.ts.map +1 -0
- package/es/settings/setting-editor/index.js +6 -0
- package/es/settings/setting-editor/index.less +12 -0
- package/es/settings/setting-editor/module.d.ts +3 -0
- package/es/settings/setting-editor/module.d.ts.map +1 -0
- package/es/settings/setting-editor/module.js +7 -0
- package/es/settings/setting-editor/setting-editor-view.d.ts +15 -0
- package/es/settings/setting-editor/setting-editor-view.d.ts.map +1 -0
- package/es/settings/setting-editor/setting-editor-view.js +169 -0
- package/es/settings/setting-editor/setting-tree-service.d.ts +9 -0
- package/es/settings/setting-editor/setting-tree-service.d.ts.map +1 -0
- package/es/settings/setting-editor/setting-tree-service.js +118 -0
- package/es/settings/setting-editor/setting-tree-view.d.ts +19 -0
- package/es/settings/setting-editor/setting-tree-view.d.ts.map +1 -0
- package/es/settings/setting-editor/setting-tree-view.js +88 -0
- package/es/settings/settings-contribution.d.ts +7 -0
- package/es/settings/settings-contribution.d.ts.map +1 -0
- package/es/settings/settings-contribution.js +36 -0
- package/es/settings/settings-modal.d.ts +5 -0
- package/es/settings/settings-modal.d.ts.map +1 -0
- package/es/settings/settings-modal.js +53 -0
- package/es/settings/settings-modal.less +3 -0
- package/es/settings/settings-protocol.d.ts +4 -0
- package/es/settings/settings-protocol.d.ts.map +1 -0
- package/es/settings/settings-protocol.js +5 -0
- package/es/slot/libro-slot-manager.d.ts +2 -2
- package/es/slot/libro-slot-manager.d.ts.map +1 -1
- package/es/slot/libro-slot-manager.js +14 -8
- package/es/slot/libro-slot-view.d.ts +3 -3
- package/es/slot/libro-slot-view.d.ts.map +1 -1
- package/es/slot/libro-slot-view.js +2 -2
- package/es/theme/libro-color-registry.d.ts.map +1 -1
- package/es/theme/libro-color-registry.js +7 -0
- package/es/toolbar/all-outputs-scroll-icon.d.ts +3 -0
- package/es/toolbar/all-outputs-scroll-icon.d.ts.map +1 -0
- package/es/toolbar/all-outputs-scroll-icon.js +10 -0
- package/es/toolbar/libro-toolbar.d.ts +2 -1
- package/es/toolbar/libro-toolbar.d.ts.map +1 -1
- package/es/toolbar/libro-toolbar.js +44 -8
- package/es/toolbar/restart-clear-outputs-modal.d.ts +1 -2
- package/es/toolbar/restart-clear-outputs-modal.d.ts.map +1 -1
- package/es/toolbar/restart-clear-outputs-modal.js +2 -2
- package/es/toolbar/shutdown-modal.d.ts +1 -2
- package/es/toolbar/shutdown-modal.d.ts.map +1 -1
- package/es/toolbar/shutdown-modal.js +2 -2
- package/es/toolbar/side-toolar-more-select.d.ts.map +1 -1
- package/es/toolbar/side-toolar-more-select.js +2 -2
- package/es/virtualized-manager-helper.d.ts +11 -0
- package/es/virtualized-manager-helper.d.ts.map +1 -0
- package/es/virtualized-manager-helper.js +51 -0
- package/es/virtualized-manager.d.ts +19 -0
- package/es/virtualized-manager.d.ts.map +1 -0
- package/es/virtualized-manager.js +61 -0
- package/package.json +9 -6
- package/src/add-cell/index.less +1 -1
- package/src/add-cell/libro-add-cell-slot-contribution.ts +1 -4
- package/src/add-cell/libro-add-cell-view.tsx +13 -6
- package/src/cell/libro-cell-contribution.ts +2 -6
- package/src/cell/libro-cell-model.ts +57 -4
- package/src/cell/libro-cell-protocol.ts +2 -0
- package/src/cell/libro-cell-view.tsx +21 -9
- package/src/cell/libro-edit-cell-view.tsx +10 -9
- package/src/cell/libro-executable-cell-view.ts +6 -1
- package/src/collapse-service.ts +1 -1
- package/src/command/document-commands.ts +3 -5
- package/src/command/kernel-command.ts +3 -0
- package/src/command/libro-command-contribution.ts +107 -91
- package/src/command/libro-command-register.ts +1 -4
- package/src/command/notebook-commands.ts +16 -3
- package/src/components/cell-protocol.ts +5 -5
- package/src/components/dnd-cell-item-render.tsx +239 -92
- package/src/components/dnd-component/custom-drag-layer.tsx +5 -6
- package/src/components/dnd-component/default-dnd-content.tsx +113 -42
- package/src/components/dnd-component/dnd-context.tsx +1 -1
- package/src/components/dnd-component/dnd-list.tsx +135 -43
- package/src/components/dnd-component/index.less +8 -0
- package/src/components/dnd-component/index.tsx +1 -1
- package/src/components/dnd-component/overscanIndices-getter.ts +92 -0
- package/src/components/dnd-component/virtualized-manager.ts +34 -0
- package/src/components/index.ts +2 -2
- package/src/components/libro-virtualized-render.tsx +178 -0
- package/src/content/index.ts +1 -0
- package/src/content/libro-content-contribution.ts +2 -3
- package/src/content/libro-content-module.ts +11 -3
- package/src/content/libro-content-protocol.ts +6 -0
- package/src/content/libro-content-service.ts +26 -8
- package/src/content/libro-save-content-contribution.ts +12 -0
- package/src/formatter/index.ts +5 -0
- package/src/formatter/libro-formatter-json-contribution.ts +42 -0
- package/src/formatter/libro-formatter-manager.ts +85 -0
- package/src/formatter/libro-formatter-module.ts +19 -0
- package/src/formatter/libro-formatter-protocol.ts +63 -0
- package/src/formatter/libro-formatter-string-contribution.ts +41 -0
- package/src/formatter/libro-formatter-trans-default-contribution.ts +15 -0
- package/src/index.less +135 -58
- package/src/index.tsx +6 -1
- package/src/libro-context-key.ts +3 -3
- package/src/libro-model.ts +87 -23
- package/src/libro-protocol.ts +81 -4
- package/src/libro-service.ts +4 -13
- package/src/{configuration/libro-configuration-contribution.ts → libro-setting-contribution.ts} +7 -8
- package/src/{configuration/libro-configuration.ts → libro-setting.ts} +18 -7
- package/src/libro-view.tsx +273 -141
- package/src/material-from-designer.tsx +93 -1
- package/src/module.ts +29 -7
- package/src/output/output-area.tsx +18 -12
- package/src/output/output-contribution.ts +2 -6
- package/src/output/output-model.tsx +3 -3
- package/src/output/output-protocol.ts +0 -1
- package/src/settings/index.less +3 -0
- package/src/settings/index.ts +4 -0
- package/src/settings/module.ts +8 -0
- package/src/settings/setting-editor/configuration-panel-view.tsx +89 -0
- package/src/settings/setting-editor/configuration-render-contribution.ts +81 -0
- package/src/settings/setting-editor/default-node-render.tsx +65 -0
- package/src/settings/setting-editor/index.less +12 -0
- package/src/settings/setting-editor/index.ts +6 -0
- package/src/settings/setting-editor/module.ts +17 -0
- package/src/settings/setting-editor/setting-editor-view.tsx +93 -0
- package/src/settings/setting-editor/setting-tree-service.ts +82 -0
- package/src/settings/setting-editor/setting-tree-view.tsx +95 -0
- package/src/settings/settings-contribution.tsx +24 -0
- package/src/settings/settings-modal.less +3 -0
- package/src/settings/settings-modal.tsx +50 -0
- package/src/settings/settings-protocol.ts +7 -0
- package/src/slot/libro-slot-manager.ts +1 -3
- package/src/slot/libro-slot-view.tsx +2 -5
- package/src/theme/libro-color-registry.ts +6 -0
- package/src/toolbar/all-outputs-scroll-icon.tsx +19 -0
- package/src/toolbar/libro-toolbar.tsx +30 -5
- package/src/toolbar/restart-clear-outputs-modal.tsx +3 -3
- package/src/toolbar/shutdown-modal.tsx +3 -3
- package/src/toolbar/side-toolar-more-select.tsx +2 -1
- package/src/virtualized-manager-helper.ts +29 -0
- package/src/virtualized-manager.ts +34 -0
- package/es/configuration/libro-configuration-contribution.d.ts.map +0 -1
- package/es/configuration/libro-configuration.d.ts.map +0 -1
|
@@ -1,18 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
2
2
|
import { getOrigin, useInject, ViewInstance } from '@difizen/mana-app';
|
|
3
|
+
import { useConfigurationValue } from '@difizen/mana-app';
|
|
3
4
|
import type { Identifier } from 'dnd-core';
|
|
4
|
-
import React, {
|
|
5
|
+
import React, {
|
|
6
|
+
useCallback,
|
|
7
|
+
useEffect,
|
|
8
|
+
useLayoutEffect,
|
|
9
|
+
useMemo,
|
|
10
|
+
useRef,
|
|
11
|
+
useState,
|
|
12
|
+
forwardRef,
|
|
13
|
+
} from 'react';
|
|
5
14
|
import { useDrag, useDragDropManager, useDrop } from 'react-dnd';
|
|
6
15
|
import { getEmptyImage } from 'react-dnd-html5-backend';
|
|
16
|
+
import 'resize-observer-polyfill';
|
|
7
17
|
|
|
8
|
-
import { CellService } from '../../cell/index.js';
|
|
18
|
+
import type { CellService } from '../../cell/index.js';
|
|
19
|
+
import { LibroCellService } from '../../cell/index.js';
|
|
9
20
|
import { CellCollapsible } from '../../collapse-service.js';
|
|
10
|
-
import {
|
|
11
|
-
import { isCellView, DragAreaKey } from '../../libro-protocol.js';
|
|
21
|
+
import { DragAreaKey, isCellView } from '../../libro-protocol.js';
|
|
12
22
|
import type { CellView, DndContentProps } from '../../libro-protocol.js';
|
|
23
|
+
import { MultiSelectionWhenShiftClick } from '../../libro-setting.js';
|
|
13
24
|
import type { LibroView } from '../../libro-view.js';
|
|
14
25
|
import { HolderOutlined, PlusOutlined } from '../../material-from-designer.js';
|
|
15
|
-
import {
|
|
26
|
+
import { VirtualizedManagerHelper } from '../../virtualized-manager-helper.js';
|
|
16
27
|
import { BetweenCellProvider } from '../cell-protocol.js';
|
|
17
28
|
|
|
18
29
|
export interface Dragparams {
|
|
@@ -20,17 +31,51 @@ export interface Dragparams {
|
|
|
20
31
|
index: number;
|
|
21
32
|
}
|
|
22
33
|
|
|
23
|
-
export const
|
|
34
|
+
export const DndCellContainer: React.FC<DndContentProps> = ({ cell, index }) => {
|
|
24
35
|
const ref = useRef<HTMLDivElement>(null);
|
|
25
36
|
const instance = useInject<LibroView>(ViewInstance);
|
|
26
37
|
const [multiSelectionWhenShiftClick] = useConfigurationValue(
|
|
27
38
|
MultiSelectionWhenShiftClick,
|
|
28
39
|
);
|
|
29
40
|
const BetweenCellContent = useInject<BetweenCellProvider>(BetweenCellProvider);
|
|
30
|
-
const cellService = useInject<CellService>(
|
|
41
|
+
const cellService = useInject<CellService>(LibroCellService);
|
|
42
|
+
const virtualizedManagerHelper = useInject(VirtualizedManagerHelper);
|
|
43
|
+
const virtualizedManager = virtualizedManagerHelper.getOrCreate(cell.parent.model);
|
|
31
44
|
const dragDropManager = useDragDropManager();
|
|
32
45
|
const dragDropMonitor = dragDropManager.getMonitor();
|
|
33
46
|
const ItemRender = getOrigin(instance.dndItemRender);
|
|
47
|
+
|
|
48
|
+
useLayoutEffect(() => {
|
|
49
|
+
if (typeof ref !== 'object') {
|
|
50
|
+
return () => {
|
|
51
|
+
//
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const el = ref?.current;
|
|
55
|
+
if (!el) {
|
|
56
|
+
return () => {
|
|
57
|
+
//
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
|
62
|
+
entries.forEach((entry) => {
|
|
63
|
+
const isVisible =
|
|
64
|
+
entry.contentRect.width !== 0 && entry.contentRect.height !== 0;
|
|
65
|
+
|
|
66
|
+
if (isVisible) {
|
|
67
|
+
cell.noEditorAreaHeight = ref.current?.clientHeight || 0;
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
resizeObserver.observe(el as HTMLElement);
|
|
73
|
+
return () => {
|
|
74
|
+
cell.noEditorAreaHeight = 0;
|
|
75
|
+
resizeObserver.disconnect();
|
|
76
|
+
};
|
|
77
|
+
}, [ref, cell]);
|
|
78
|
+
|
|
34
79
|
const handleFocus = useCallback(
|
|
35
80
|
(e: React.FocusEvent<HTMLElement>) => {
|
|
36
81
|
const className = (e.target as HTMLDivElement).className;
|
|
@@ -75,6 +120,9 @@ export const DefaultDndContent: React.FC<DndContentProps> = ({ cell, index }) =>
|
|
|
75
120
|
instance.model.selections = [];
|
|
76
121
|
}, [instance, cell]);
|
|
77
122
|
|
|
123
|
+
const scrollTimer = useRef<null | NodeJS.Timeout>(null);
|
|
124
|
+
const unsubscribe = useRef<null | any>(null);
|
|
125
|
+
|
|
78
126
|
const [{ isDrag }, drag, preview] = useDrag(
|
|
79
127
|
{
|
|
80
128
|
type: DragAreaKey,
|
|
@@ -84,40 +132,46 @@ export const DefaultDndContent: React.FC<DndContentProps> = ({ cell, index }) =>
|
|
|
84
132
|
}),
|
|
85
133
|
end() {
|
|
86
134
|
instance.isDragging = false;
|
|
135
|
+
if (scrollTimer.current) {
|
|
136
|
+
clearInterval(scrollTimer.current);
|
|
137
|
+
}
|
|
87
138
|
},
|
|
88
139
|
},
|
|
89
140
|
[cell, index],
|
|
90
141
|
);
|
|
91
|
-
|
|
92
|
-
instance.isDragging = dragDropMonitor.isDragging();
|
|
93
|
-
});
|
|
142
|
+
|
|
94
143
|
const libroViewContent = instance.container?.current?.getElementsByClassName(
|
|
95
144
|
'libro-view-content',
|
|
96
145
|
)[0] as HTMLElement;
|
|
97
|
-
|
|
146
|
+
|
|
98
147
|
useEffect(() => {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
148
|
+
unsubscribe.current = dragDropMonitor.subscribeToStateChange(() => {
|
|
149
|
+
instance.isDragging = dragDropMonitor.isDragging();
|
|
150
|
+
scrollTimer.current = setInterval(() => {
|
|
151
|
+
const currentOffset = dragDropMonitor.getClientOffset();
|
|
152
|
+
if (libroViewContent && instance.isDragging && currentOffset) {
|
|
153
|
+
const libroViewClientRect = libroViewContent.getBoundingClientRect();
|
|
154
|
+
const { top, bottom } = libroViewClientRect;
|
|
155
|
+
const { y } = currentOffset;
|
|
156
|
+
const topLimit = top + 30;
|
|
157
|
+
const bottomLimit = bottom - 50;
|
|
158
|
+
if (y < topLimit) {
|
|
159
|
+
libroViewContent.scrollTop -= 0.5;
|
|
160
|
+
} else if (y > bottomLimit) {
|
|
161
|
+
libroViewContent.scrollTop += 0.5;
|
|
162
|
+
}
|
|
111
163
|
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
164
|
+
}, 10);
|
|
165
|
+
return () => {
|
|
166
|
+
if (scrollTimer.current) {
|
|
167
|
+
clearInterval(scrollTimer.current);
|
|
168
|
+
}
|
|
169
|
+
if (unsubscribe.current) {
|
|
170
|
+
unsubscribe.current();
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
});
|
|
174
|
+
}, [dragDropMonitor]);
|
|
121
175
|
|
|
122
176
|
useEffect(() => {
|
|
123
177
|
// This gets called after every render, by default
|
|
@@ -155,7 +209,7 @@ export const DefaultDndContent: React.FC<DndContentProps> = ({ cell, index }) =>
|
|
|
155
209
|
view.dispose();
|
|
156
210
|
return;
|
|
157
211
|
})
|
|
158
|
-
.catch(() => {
|
|
212
|
+
.catch((e) => {
|
|
159
213
|
//
|
|
160
214
|
});
|
|
161
215
|
if (isCellView(item.cell)) {
|
|
@@ -183,17 +237,31 @@ export const DefaultDndContent: React.FC<DndContentProps> = ({ cell, index }) =>
|
|
|
183
237
|
}
|
|
184
238
|
if (isDragInSelections) {
|
|
185
239
|
instance.model.exchangeCells(instance.model.selections, dropIndex);
|
|
186
|
-
|
|
240
|
+
if (virtualizedManager.isVirtualized) {
|
|
241
|
+
instance.model.scrollToCellView({ cellIndex: dropIndex });
|
|
242
|
+
} else {
|
|
243
|
+
instance.model.scrollToView(cell);
|
|
244
|
+
}
|
|
245
|
+
|
|
187
246
|
return;
|
|
188
247
|
}
|
|
189
248
|
}
|
|
190
249
|
if (dragIndex < dropIndex) {
|
|
191
250
|
instance.model.exchangeCell(dragIndex, dropIndex - 1);
|
|
192
|
-
|
|
251
|
+
|
|
252
|
+
if (virtualizedManager.isVirtualized) {
|
|
253
|
+
instance.model.scrollToCellView({ cellIndex: dropIndex });
|
|
254
|
+
} else {
|
|
255
|
+
instance.model.scrollToView(cell);
|
|
256
|
+
}
|
|
193
257
|
}
|
|
194
258
|
if (dragIndex > dropIndex) {
|
|
195
259
|
instance.model.exchangeCell(dragIndex, dropIndex);
|
|
196
|
-
|
|
260
|
+
if (virtualizedManager.isVirtualized) {
|
|
261
|
+
instance.model.scrollToCellView({ cellIndex: dropIndex });
|
|
262
|
+
} else {
|
|
263
|
+
instance.model.scrollToView(cell);
|
|
264
|
+
}
|
|
197
265
|
}
|
|
198
266
|
}
|
|
199
267
|
return;
|
|
@@ -214,15 +282,18 @@ export const DefaultDndContent: React.FC<DndContentProps> = ({ cell, index }) =>
|
|
|
214
282
|
instance.model.mouseMode = 'drag';
|
|
215
283
|
}
|
|
216
284
|
|
|
217
|
-
const
|
|
285
|
+
const isMultiSelected =
|
|
286
|
+
instance.model.selections.length !== 0 && instance.isSelected(cell);
|
|
218
287
|
// let isMouseOver = false;
|
|
219
288
|
const [isMouseOverDragArea, setIsMouseOverDragArea] = useState(false);
|
|
220
|
-
const hasCellHidden =
|
|
221
|
-
|
|
289
|
+
const hasCellHidden = useMemo(() => {
|
|
290
|
+
return cell.hasCellHidden();
|
|
291
|
+
}, [cell]);
|
|
222
292
|
const isCollapsible = CellCollapsible.is(cell);
|
|
293
|
+
|
|
223
294
|
return (
|
|
224
295
|
<div
|
|
225
|
-
className={`libro-dnd-cell-container ${
|
|
296
|
+
className={`libro-dnd-cell-container ${isMultiSelected ? 'multi-selected' : ''} ${
|
|
226
297
|
hasCellHidden ? 'hidden' : ''
|
|
227
298
|
}`}
|
|
228
299
|
data-handler-id={handlerId}
|
|
@@ -245,7 +316,7 @@ export const DefaultDndContent: React.FC<DndContentProps> = ({ cell, index }) =>
|
|
|
245
316
|
tabIndex={-1}
|
|
246
317
|
onFocus={handleFocus}
|
|
247
318
|
// onClick={e => e.preventDefault()}
|
|
248
|
-
className=
|
|
319
|
+
className="libro-dnd-cell-content"
|
|
249
320
|
>
|
|
250
321
|
<ItemRender
|
|
251
322
|
isDragOver={!!isDragOver}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ViewInstance } from '@difizen/mana-app';
|
|
2
1
|
import { getOrigin, useInject } from '@difizen/mana-app';
|
|
2
|
+
import { ViewInstance } from '@difizen/mana-app';
|
|
3
3
|
import type { FC } from 'react';
|
|
4
4
|
import { DndProvider } from 'react-dnd';
|
|
5
5
|
import { HTML5Backend } from 'react-dnd-html5-backend';
|
|
@@ -1,57 +1,149 @@
|
|
|
1
1
|
import { getOrigin, useInject, useObserve, ViewInstance } from '@difizen/mana-app';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import type { FC, ReactNode } from 'react';
|
|
4
|
+
import { forwardRef, memo, useEffect, useState } from 'react';
|
|
4
5
|
import type { XYCoord } from 'react-dnd';
|
|
5
6
|
import { useDrop } from 'react-dnd';
|
|
6
7
|
|
|
7
|
-
import { LibroCellService } from '../../cell/index.js';
|
|
8
8
|
import type { CellService } from '../../cell/index.js';
|
|
9
|
-
import {
|
|
9
|
+
import { LibroCellService } from '../../cell/index.js';
|
|
10
10
|
import type { CellView, DndContentProps } from '../../libro-protocol.js';
|
|
11
|
+
import { DragAreaKey, isCellView } from '../../libro-protocol.js';
|
|
11
12
|
import type { LibroView } from '../../libro-view.js';
|
|
13
|
+
import { VirtualizedManagerHelper } from '../../virtualized-manager-helper.js';
|
|
14
|
+
import { LibroCellsOutputRender } from '../libro-virtualized-render.js';
|
|
12
15
|
|
|
13
16
|
import type { Dragparams } from './default-dnd-content.js';
|
|
17
|
+
import './index.less';
|
|
14
18
|
|
|
15
|
-
const
|
|
19
|
+
export const DndCellRender: FC<DndContentProps> = memo(function DndCellRender({
|
|
20
|
+
cell,
|
|
21
|
+
index,
|
|
22
|
+
...props
|
|
23
|
+
}: DndContentProps) {
|
|
16
24
|
const observableCell = useObserve(cell);
|
|
17
25
|
const instance = useInject<LibroView>(ViewInstance);
|
|
18
|
-
const
|
|
26
|
+
const DndCellContainer = instance.dndContentRender;
|
|
27
|
+
|
|
19
28
|
return (
|
|
20
|
-
<
|
|
29
|
+
<DndCellContainer cell={observableCell} key={cell.id} index={index} {...props} />
|
|
21
30
|
);
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
}, []);
|
|
34
|
-
return (
|
|
35
|
-
<div className="libro-dnd-cells-container" ref={ref}>
|
|
36
|
-
{!libroView.model.isInitialized && <LoadingRender />}
|
|
37
|
-
{libroView.model.isInitialized &&
|
|
38
|
-
cells
|
|
39
|
-
.filter((cell) => cell.collapsedHidden === false)
|
|
40
|
-
.map((cell, index) => {
|
|
41
|
-
return <DndContentMemo cell={cell} key={cell.id} index={index} />;
|
|
42
|
-
})}
|
|
43
|
-
</div>
|
|
44
|
-
);
|
|
45
|
-
},
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// 定义一个函数用于渲染非虚拟列表时的单元格
|
|
34
|
+
const renderNonVirtualListCells = (cells: CellView[]) => (
|
|
35
|
+
<div style={{ height: '100%', overflow: 'visible' }}>
|
|
36
|
+
{cells
|
|
37
|
+
.filter((cell) => !cell.collapsedHidden)
|
|
38
|
+
.map((cell, index) => (
|
|
39
|
+
<DndCellRender cell={cell} key={cell.id} index={index} />
|
|
40
|
+
))}
|
|
41
|
+
</div>
|
|
46
42
|
);
|
|
47
43
|
|
|
48
|
-
export
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
libroView: LibroView;
|
|
53
|
-
|
|
54
|
-
|
|
44
|
+
export const DndCellsRender = forwardRef<
|
|
45
|
+
HTMLDivElement,
|
|
46
|
+
{ libroView: LibroView; addCellButtons: ReactNode }
|
|
47
|
+
>(function DndCellsRender(
|
|
48
|
+
{ libroView, addCellButtons }: { libroView: LibroView; addCellButtons: ReactNode },
|
|
49
|
+
ref,
|
|
50
|
+
) {
|
|
51
|
+
const LoadingRender = getOrigin(libroView.loadingRender);
|
|
52
|
+
const virtualizedManagerHelper = useInject(VirtualizedManagerHelper);
|
|
53
|
+
const virtualizedManager = virtualizedManagerHelper.getOrCreate(libroView.model);
|
|
54
|
+
|
|
55
|
+
const cells = libroView.model.getCells().reduce<CellView[]>(function (a, b) {
|
|
56
|
+
if (a.indexOf(b) < 0) {
|
|
57
|
+
a.push(b);
|
|
58
|
+
}
|
|
59
|
+
return a;
|
|
60
|
+
}, []);
|
|
61
|
+
|
|
62
|
+
const [isVirtualList, setIsVirtualList] = useState<boolean>(false);
|
|
63
|
+
const [isJudging, setIsJudging] = useState<boolean>(true);
|
|
64
|
+
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (!libroView.model.isInitialized) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
let size = undefined;
|
|
71
|
+
let path = undefined;
|
|
72
|
+
|
|
73
|
+
// TODO: 类型处理
|
|
74
|
+
const model = libroView.model as any;
|
|
75
|
+
if (model.currentFileContents && model.currentFileContents.size) {
|
|
76
|
+
size = parseFloat((model.currentFileContents.size / 1048576).toFixed(3)); // 单位MB
|
|
77
|
+
path = model.currentFileContents.path || '';
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
setIsJudging(true);
|
|
81
|
+
virtualizedManager
|
|
82
|
+
.openVirtualized(cells.length, size, path)
|
|
83
|
+
.then((willOpen) => {
|
|
84
|
+
setIsVirtualList(willOpen);
|
|
85
|
+
return;
|
|
86
|
+
})
|
|
87
|
+
.catch(() => {
|
|
88
|
+
setIsVirtualList(false);
|
|
89
|
+
})
|
|
90
|
+
.finally(() => {
|
|
91
|
+
setIsJudging(false);
|
|
92
|
+
})
|
|
93
|
+
.catch((e) => {
|
|
94
|
+
//
|
|
95
|
+
});
|
|
96
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
97
|
+
}, [virtualizedManager, libroView.model.isInitialized]);
|
|
98
|
+
|
|
99
|
+
const isInitialized = libroView.model.isInitialized;
|
|
100
|
+
const isLoading = !isInitialized || isJudging;
|
|
101
|
+
const shouldRenderCells = isInitialized && !isJudging;
|
|
102
|
+
|
|
103
|
+
return (
|
|
104
|
+
<>
|
|
105
|
+
<div
|
|
106
|
+
className={classNames(
|
|
107
|
+
'libro-dnd-cells-container',
|
|
108
|
+
isVirtualList && 'virtual_list_container',
|
|
109
|
+
)}
|
|
110
|
+
ref={ref}
|
|
111
|
+
>
|
|
112
|
+
{isLoading && <LoadingRender />}
|
|
113
|
+
<>
|
|
114
|
+
{shouldRenderCells && (
|
|
115
|
+
<>
|
|
116
|
+
{isVirtualList ? (
|
|
117
|
+
<LibroCellsOutputRender
|
|
118
|
+
cells={cells}
|
|
119
|
+
libroView={libroView}
|
|
120
|
+
addCellButtons={addCellButtons}
|
|
121
|
+
/>
|
|
122
|
+
) : (
|
|
123
|
+
renderNonVirtualListCells(cells)
|
|
124
|
+
)}
|
|
125
|
+
</>
|
|
126
|
+
)}
|
|
127
|
+
</>
|
|
128
|
+
</div>
|
|
129
|
+
{shouldRenderCells && !isVirtualList && addCellButtons}
|
|
130
|
+
</>
|
|
131
|
+
);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
export const DndList = forwardRef<
|
|
135
|
+
HTMLDivElement,
|
|
136
|
+
{ libroView: LibroView; children: ReactNode }
|
|
137
|
+
>(function DndList(
|
|
138
|
+
{
|
|
139
|
+
libroView,
|
|
140
|
+
children,
|
|
141
|
+
}: {
|
|
142
|
+
libroView: LibroView;
|
|
143
|
+
children: ReactNode;
|
|
144
|
+
},
|
|
145
|
+
ref,
|
|
146
|
+
) {
|
|
55
147
|
const cellService = useInject<CellService>(LibroCellService);
|
|
56
148
|
|
|
57
149
|
const [, drop] = useDrop<Dragparams>(() => ({
|
|
@@ -67,9 +159,10 @@ export function DndList({
|
|
|
67
159
|
item.cell.parent.id,
|
|
68
160
|
)
|
|
69
161
|
.then((view) => {
|
|
70
|
-
|
|
162
|
+
view.dispose();
|
|
163
|
+
return;
|
|
71
164
|
})
|
|
72
|
-
.catch(() => {
|
|
165
|
+
.catch((e) => {
|
|
73
166
|
//
|
|
74
167
|
});
|
|
75
168
|
if (isCellView(item.cell)) {
|
|
@@ -112,8 +205,7 @@ export function DndList({
|
|
|
112
205
|
|
|
113
206
|
return (
|
|
114
207
|
<div className="libro-dnd-list-container" ref={drop}>
|
|
115
|
-
<
|
|
116
|
-
{children}
|
|
208
|
+
<DndCellsRender libroView={libroView} addCellButtons={children} />
|
|
117
209
|
</div>
|
|
118
210
|
);
|
|
119
|
-
}
|
|
211
|
+
});
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export type OverscanIndicesGetterParams = {
|
|
2
|
+
// One of SCROLL_DIRECTION_HORIZONTAL or SCROLL_DIRECTION_VERTICAL
|
|
3
|
+
direction: 'horizontal' | 'vertical';
|
|
4
|
+
|
|
5
|
+
// One of SCROLL_DIRECTION_BACKWARD or SCROLL_DIRECTION_FORWARD
|
|
6
|
+
scrollDirection: -1 | 1;
|
|
7
|
+
|
|
8
|
+
// Number of rows or columns in the current axis
|
|
9
|
+
cellCount: number;
|
|
10
|
+
|
|
11
|
+
// Maximum number of cells to over-render in either direction
|
|
12
|
+
overscanCellsCount: number;
|
|
13
|
+
|
|
14
|
+
// Begin of range of visible cells
|
|
15
|
+
startIndex: number;
|
|
16
|
+
|
|
17
|
+
// End of range of visible cells
|
|
18
|
+
stopIndex: number;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type OverscanIndices = {
|
|
22
|
+
overscanStartIndex: number;
|
|
23
|
+
overscanStopIndex: number;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export const SCROLL_DIRECTION_BACKWARD = -1;
|
|
27
|
+
export const SCROLL_DIRECTION_FORWARD = 1;
|
|
28
|
+
|
|
29
|
+
export const SCROLL_DIRECTION_HORIZONTAL = 'horizontal';
|
|
30
|
+
export const SCROLL_DIRECTION_VERTICAL = 'vertical';
|
|
31
|
+
|
|
32
|
+
let overscanIndicesCache: { value: any; timestamp: number } | null = null;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Calculates the number of cells to overscan before and after a specified range.
|
|
36
|
+
* This function ensures that overscanning doesn't exceed the available cells.
|
|
37
|
+
*/
|
|
38
|
+
export default function libroOverscanIndicesGetter({
|
|
39
|
+
cellCount,
|
|
40
|
+
overscanCellsCount,
|
|
41
|
+
scrollDirection,
|
|
42
|
+
startIndex,
|
|
43
|
+
stopIndex,
|
|
44
|
+
}: OverscanIndicesGetterParams): OverscanIndices {
|
|
45
|
+
// Make sure we render at least 1 cell extra before and after (except near boundaries)
|
|
46
|
+
// This is necessary in order to support keyboard navigation (TAB/SHIFT+TAB) in some cases
|
|
47
|
+
// For more info see issues #625
|
|
48
|
+
|
|
49
|
+
// 计算 overscanIndices 的函数
|
|
50
|
+
const calculateOverscanIndices = () => {
|
|
51
|
+
const _overscanCellsCount = Math.max(1, overscanCellsCount);
|
|
52
|
+
|
|
53
|
+
let overscanIndices = null;
|
|
54
|
+
|
|
55
|
+
if (scrollDirection === SCROLL_DIRECTION_FORWARD) {
|
|
56
|
+
overscanIndices = {
|
|
57
|
+
overscanStartIndex: Math.max(0, startIndex - 1),
|
|
58
|
+
overscanStopIndex: Math.min(cellCount - 1, stopIndex + _overscanCellsCount),
|
|
59
|
+
};
|
|
60
|
+
} else {
|
|
61
|
+
overscanIndices = {
|
|
62
|
+
overscanStartIndex: Math.max(0, startIndex - _overscanCellsCount),
|
|
63
|
+
overscanStopIndex: Math.min(cellCount - 1, stopIndex + 1),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return overscanIndices;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// 检查缓存和时间戳函数
|
|
71
|
+
const checkCacheAndTimestamp = () => {
|
|
72
|
+
if (cellCount === 1) {
|
|
73
|
+
// 'horizontal' 方向 不用缓存
|
|
74
|
+
const overscanIndices = calculateOverscanIndices();
|
|
75
|
+
return overscanIndices;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (overscanIndicesCache && Date.now() - overscanIndicesCache.timestamp < 500) {
|
|
79
|
+
return overscanIndicesCache.value;
|
|
80
|
+
} else {
|
|
81
|
+
const overscanIndices = calculateOverscanIndices();
|
|
82
|
+
overscanIndicesCache = {
|
|
83
|
+
value: overscanIndices,
|
|
84
|
+
timestamp: Date.now(),
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
return overscanIndices;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
return checkCacheAndTimestamp();
|
|
92
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { prop, singleton } from '@difizen/mana-app';
|
|
2
|
+
|
|
3
|
+
export interface IVirtualizedManager {
|
|
4
|
+
openVirtualized: (length: number, size?: number) => Promise<boolean>;
|
|
5
|
+
isVirtualized: boolean;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@singleton()
|
|
9
|
+
export class VirtualizedManager implements IVirtualizedManager {
|
|
10
|
+
/**
|
|
11
|
+
* 因为进行isVirtualized判断过后才会渲染list
|
|
12
|
+
* 所以它用于滚动到某个cell的判断依据是没有问题的。
|
|
13
|
+
*/
|
|
14
|
+
@prop()
|
|
15
|
+
isVirtualized = false;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @param length cell个数
|
|
20
|
+
* @param size undefined 或者 单位 为B
|
|
21
|
+
* @returns 是否使用虚拟滚动
|
|
22
|
+
*/
|
|
23
|
+
openVirtualized = async (length: number, size?: number) => {
|
|
24
|
+
// this.isVirtualized = true;
|
|
25
|
+
// return true;
|
|
26
|
+
if (length > 100 || (size && size > 4)) {
|
|
27
|
+
this.isVirtualized = true;
|
|
28
|
+
return true;
|
|
29
|
+
} else {
|
|
30
|
+
this.isVirtualized = false;
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
package/src/components/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './libro-component.js';
|
|
2
|
-
export * from './dnd-component/index.js';
|
|
3
1
|
export * from './cell-protocol.js';
|
|
4
2
|
export * from './dnd-cell-item-render.js';
|
|
3
|
+
export * from './dnd-component/index.js';
|
|
4
|
+
export * from './libro-component.js';
|
|
5
5
|
export * from './libro-side-toolbar-menu.js';
|