@difizen/libro-core 0.3.41 → 0.3.43
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/cell/libro-cell-view.d.ts +9 -9
- package/es/components/libro-virtualized-render.d.ts.map +1 -1
- package/es/components/libro-virtualized-render.js +47 -4
- package/es/libro-model.d.ts.map +1 -1
- package/es/libro-model.js +2 -2
- package/package.json +5 -5
- package/src/components/libro-virtualized-render.tsx +54 -3
- package/src/libro-model.ts +4 -2
|
@@ -41,21 +41,16 @@ export declare class LibroCellView extends BaseView implements CellView {
|
|
|
41
41
|
toJSON(): LibroCell;
|
|
42
42
|
toJSONWithoutId: () => {
|
|
43
43
|
[x: string]: import("@difizen/libro-common").PartialJSONValue | undefined;
|
|
44
|
-
|
|
45
|
-
cell_type:
|
|
44
|
+
id?: string | undefined;
|
|
45
|
+
cell_type: "raw";
|
|
46
|
+
metadata: Partial<import("@difizen/libro-common").IRawCellMetadata>;
|
|
47
|
+
attachments?: import("@difizen/libro-common").IAttachments | undefined;
|
|
46
48
|
source: import("@difizen/libro-common").MultilineString;
|
|
47
49
|
} | {
|
|
48
50
|
[x: string]: import("@difizen/libro-common").PartialJSONValue | undefined;
|
|
49
51
|
cell_type: string;
|
|
50
52
|
source: import("@difizen/libro-common").MultilineString;
|
|
51
53
|
metadata: Partial<import("@difizen/libro-common").ICellMetadata>;
|
|
52
|
-
} | {
|
|
53
|
-
[x: string]: import("@difizen/libro-common").PartialJSONValue | undefined;
|
|
54
|
-
id?: string | undefined;
|
|
55
|
-
cell_type: "raw";
|
|
56
|
-
metadata: Partial<import("@difizen/libro-common").IRawCellMetadata>;
|
|
57
|
-
attachments?: import("@difizen/libro-common").IAttachments | undefined;
|
|
58
|
-
source: import("@difizen/libro-common").MultilineString;
|
|
59
54
|
} | {
|
|
60
55
|
[x: string]: import("@difizen/libro-common").PartialJSONValue | undefined;
|
|
61
56
|
id?: string | undefined;
|
|
@@ -71,6 +66,11 @@ export declare class LibroCellView extends BaseView implements CellView {
|
|
|
71
66
|
outputs: import("@difizen/libro-common").IOutput[];
|
|
72
67
|
execution_count: import("@difizen/libro-common").ExecutionCount;
|
|
73
68
|
source: import("@difizen/libro-common").MultilineString;
|
|
69
|
+
} | {
|
|
70
|
+
[x: string]: import("@difizen/libro-common").PartialJSONValue | undefined;
|
|
71
|
+
metadata: Partial<import("./libro-cell-protocol.js").LibroCellMetadata>;
|
|
72
|
+
cell_type: string;
|
|
73
|
+
source: import("@difizen/libro-common").MultilineString;
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
//# sourceMappingURL=libro-cell-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libro-virtualized-render.d.ts","sourceRoot":"","sources":["../../src/components/libro-virtualized-render.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"libro-virtualized-render.d.ts","sourceRoot":"","sources":["../../src/components/libro-virtualized-render.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAKlD,UAAU,wBAAwB;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAkBlE,CAAC;AAGF,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5C,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,SAAS,CAAC;CAC3B,CAoNA,CAAC"}
|
|
@@ -13,6 +13,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
13
13
|
import { AutoSizer, List } from '@difizen/libro-virtualized';
|
|
14
14
|
import { memo, useEffect, useMemo, useRef, useState } from 'react';
|
|
15
15
|
import { EditorCellView } from "../cell/index.js";
|
|
16
|
+
import { useFrameMonitor } from "../utils/index.js";
|
|
16
17
|
import { DndCellRender } from "./dnd-component/index.js";
|
|
17
18
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
18
19
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -37,12 +38,15 @@ export var LibroVirtualizedRow = /*#__PURE__*/memo(function LibroVirtualizedRow(
|
|
|
37
38
|
|
|
38
39
|
// 已经在上层判断是否为虚拟滚动
|
|
39
40
|
export var LibroCellsOutputRender = function LibroCellsOutputRender(_ref2) {
|
|
41
|
+
var _listRef$current;
|
|
40
42
|
var cells = _ref2.cells,
|
|
41
43
|
libroView = _ref2.libroView,
|
|
42
44
|
addCellButtons = _ref2.addCellButtons;
|
|
43
45
|
var parentRef = useRef(null);
|
|
44
46
|
var listRef = useRef(null);
|
|
45
47
|
var noEditorAreaRef = useRef(null);
|
|
48
|
+
var scrollTopRef = useRef(0);
|
|
49
|
+
var viewportHeightRef = useRef(0);
|
|
46
50
|
var _useState = useState([]),
|
|
47
51
|
_useState2 = _slicedToArray(_useState, 2),
|
|
48
52
|
editorsOffset = _useState2[0],
|
|
@@ -113,13 +117,33 @@ export var LibroCellsOutputRender = function LibroCellsOutputRender(_ref2) {
|
|
|
113
117
|
return;
|
|
114
118
|
}
|
|
115
119
|
libroView.model.onScrollToCellView(function (params) {
|
|
116
|
-
|
|
117
|
-
|
|
120
|
+
var index = params.cellIndex;
|
|
121
|
+
var offset = params.cellOffset || 0;
|
|
122
|
+
var top = (editorsOffset[index] || 0) + offset;
|
|
123
|
+
var height = (noEditorAreaHeight[index] || 0) + (editorAreaHeight[index] || 0);
|
|
124
|
+
var viewportTop = scrollTopRef.current;
|
|
125
|
+
var viewportHeight = viewportHeightRef.current;
|
|
126
|
+
if (viewportHeight && height) {
|
|
127
|
+
if (top > viewportTop && top + height < viewportTop + viewportHeight) {
|
|
128
|
+
// 在可视范围内就不需要滚动
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (top < viewportTop) {
|
|
132
|
+
listRef.current.scrollToCellPosition(index, offset);
|
|
133
|
+
} else {
|
|
134
|
+
var prevCellNoEditorHeight = noEditorAreaHeight[index - 1] || 0;
|
|
135
|
+
var prevCellEditorHeight = editorAreaHeight[index - 1] || 0;
|
|
136
|
+
var centerOffset = offset - viewportHeight / 2 - (prevCellNoEditorHeight - prevCellEditorHeight);
|
|
137
|
+
listRef.current.scrollToCellPosition(index, centerOffset); // 把目标 cell 的顶部放到视窗的中间位置
|
|
138
|
+
}
|
|
139
|
+
} else {
|
|
140
|
+
listRef.current.scrollToCellPosition(index, offset);
|
|
141
|
+
}
|
|
118
142
|
});
|
|
119
143
|
return function () {
|
|
120
144
|
libroView.model.disposeScrollToCellViewEmitter();
|
|
121
145
|
};
|
|
122
|
-
}, [listRef, libroView]);
|
|
146
|
+
}, [listRef, libroView, editorsOffset, noEditorAreaHeight, editorAreaHeight]);
|
|
123
147
|
|
|
124
148
|
// 在Cell的高度变化时,触发重新计算所有Cell的高度偏移值
|
|
125
149
|
useEffect(function () {
|
|
@@ -141,7 +165,23 @@ export var LibroCellsOutputRender = function LibroCellsOutputRender(_ref2) {
|
|
|
141
165
|
newCellOffsets[index] = offsetTop + offset;
|
|
142
166
|
});
|
|
143
167
|
setEditorsOffset(newCellOffsets);
|
|
144
|
-
}, [
|
|
168
|
+
}, [cells]);
|
|
169
|
+
useFrameMonitor({
|
|
170
|
+
current: (_listRef$current = listRef.current) === null || _listRef$current === void 0 || (_listRef$current = _listRef$current.Grid) === null || _listRef$current === void 0 ? void 0 : _listRef$current._scrollingContainer
|
|
171
|
+
}, libroView.libroViewTracker.isEnabledSpmReporter, function (payload) {
|
|
172
|
+
var _libroView$model$curr;
|
|
173
|
+
var fpsTracker = libroView.libroViewTracker.getOrCreateTrackers({
|
|
174
|
+
type: 'fps',
|
|
175
|
+
id: libroView.model.options['modelId'] + 'fps'
|
|
176
|
+
});
|
|
177
|
+
fpsTracker['avgFPS'] = payload.summary.avgFPS;
|
|
178
|
+
fpsTracker['maxFrameTime'] = payload.summary.maxFrameTime;
|
|
179
|
+
fpsTracker['totalDropped'] = payload.summary.totalDropped;
|
|
180
|
+
fpsTracker['extra'] = payload.frames;
|
|
181
|
+
fpsTracker['cells'] = libroView.model.cells.length;
|
|
182
|
+
fpsTracker['size'] = (_libroView$model$curr = libroView.model.currentFileContents) === null || _libroView$model$curr === void 0 ? void 0 : _libroView$model$curr.size;
|
|
183
|
+
libroView.libroViewTracker.tracker(fpsTracker);
|
|
184
|
+
});
|
|
145
185
|
return /*#__PURE__*/_jsx(AutoSizer, {
|
|
146
186
|
style: {
|
|
147
187
|
height: '100%',
|
|
@@ -151,6 +191,7 @@ export var LibroCellsOutputRender = function LibroCellsOutputRender(_ref2) {
|
|
|
151
191
|
children: function children(_ref3) {
|
|
152
192
|
var width = _ref3.width,
|
|
153
193
|
height = _ref3.height;
|
|
194
|
+
viewportHeightRef.current = height;
|
|
154
195
|
return /*#__PURE__*/_jsx(List, {
|
|
155
196
|
ref: listRef,
|
|
156
197
|
width: width,
|
|
@@ -174,6 +215,8 @@ export var LibroCellsOutputRender = function LibroCellsOutputRender(_ref2) {
|
|
|
174
215
|
noEditorArea: noEditorArea,
|
|
175
216
|
editorsOffset: editorsOffset,
|
|
176
217
|
onScroll: function onScroll(scrollParams) {
|
|
218
|
+
scrollTopRef.current = scrollParams.scrollTop;
|
|
219
|
+
viewportHeightRef.current = scrollParams.clientHeight;
|
|
177
220
|
libroView.cellScrollEmitter.fire({
|
|
178
221
|
scrollingContainer: scrollParams.scrollingContainer,
|
|
179
222
|
scrollTop: scrollParams.scrollTop
|
package/es/libro-model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libro-model.d.ts","sourceRoot":"","sources":["../src/libro-model.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"libro-model.d.ts","sourceRoot":"","sources":["../src/libro-model.ts"],"names":[],"mappings":"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"}
|
package/es/libro-model.js
CHANGED
|
@@ -561,9 +561,9 @@ export var LibroModel = (_dec = transient(), _dec2 = inject(NotebookOption), _de
|
|
|
561
561
|
if (offsetTop < _scrollTop) {
|
|
562
562
|
target.offsetParent.parentElement.scrollTop = offsetTop;
|
|
563
563
|
} else {
|
|
564
|
-
|
|
564
|
+
// 目标 cell 的高度大于屏幕的高度
|
|
565
565
|
if (_targetheight >= _height) {
|
|
566
|
-
target.offsetParent.parentElement.scrollTop = offsetTop - _height / 2;
|
|
566
|
+
target.offsetParent.parentElement.scrollTop = offsetTop - _height / 2; // 把目标 cell 的顶部放到视窗的中间位置
|
|
567
567
|
} else {
|
|
568
568
|
target.offsetParent.parentElement.scrollTop = offsetTop + _targetheight - _height + 30; // 加缓冲向上不贴底部
|
|
569
569
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@difizen/libro-core",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.43",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"libro",
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@ant-design/icons": "^5.1.0",
|
|
37
|
-
"@difizen/libro-code-editor": "^0.3.
|
|
38
|
-
"@difizen/libro-common": "^0.3.
|
|
39
|
-
"@difizen/libro-shared-model": "^0.3.
|
|
40
|
-
"@difizen/libro-virtualized": "^0.3.
|
|
37
|
+
"@difizen/libro-code-editor": "^0.3.43",
|
|
38
|
+
"@difizen/libro-common": "^0.3.43",
|
|
39
|
+
"@difizen/libro-shared-model": "^0.3.43",
|
|
40
|
+
"@difizen/libro-virtualized": "^0.3.43",
|
|
41
41
|
"@difizen/mana-app": "latest",
|
|
42
42
|
"@difizen/mana-l10n": "latest",
|
|
43
43
|
"@difizen/mana-react": "latest",
|
|
@@ -6,6 +6,7 @@ import { memo, useEffect, useMemo, useRef, useState } from 'react';
|
|
|
6
6
|
import { EditorCellView } from '../cell/index.js';
|
|
7
7
|
import type { CellView, ScrollParams } from '../libro-protocol.js';
|
|
8
8
|
import type { LibroView } from '../libro-view.js';
|
|
9
|
+
import { useFrameMonitor } from '../utils/index.js';
|
|
9
10
|
|
|
10
11
|
import { DndCellRender } from './dnd-component/index.js';
|
|
11
12
|
|
|
@@ -43,6 +44,8 @@ export const LibroCellsOutputRender: React.FC<{
|
|
|
43
44
|
const parentRef = useRef(null);
|
|
44
45
|
const listRef = useRef<List | null>(null);
|
|
45
46
|
const noEditorAreaRef = useRef<HTMLDivElement | null>(null);
|
|
47
|
+
const scrollTopRef = useRef(0);
|
|
48
|
+
const viewportHeightRef = useRef(0);
|
|
46
49
|
|
|
47
50
|
const [editorsOffset, setEditorsOffset] = useState<number[]>([]);
|
|
48
51
|
|
|
@@ -128,13 +131,38 @@ export const LibroCellsOutputRender: React.FC<{
|
|
|
128
131
|
}
|
|
129
132
|
|
|
130
133
|
libroView.model.onScrollToCellView((params: ScrollParams) => {
|
|
131
|
-
|
|
132
|
-
|
|
134
|
+
const index = params.cellIndex;
|
|
135
|
+
const offset = params.cellOffset || 0;
|
|
136
|
+
const top = (editorsOffset[index] || 0) + offset;
|
|
137
|
+
const height = (noEditorAreaHeight[index] || 0) + (editorAreaHeight[index] || 0);
|
|
138
|
+
const viewportTop = scrollTopRef.current;
|
|
139
|
+
const viewportHeight = viewportHeightRef.current;
|
|
140
|
+
|
|
141
|
+
if (viewportHeight && height) {
|
|
142
|
+
if (top > viewportTop && top + height < viewportTop + viewportHeight) {
|
|
143
|
+
// 在可视范围内就不需要滚动
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (top < viewportTop) {
|
|
147
|
+
listRef.current!.scrollToCellPosition(index, offset);
|
|
148
|
+
} else {
|
|
149
|
+
const prevCellNoEditorHeight = noEditorAreaHeight[index - 1] || 0;
|
|
150
|
+
const prevCellEditorHeight = editorAreaHeight[index - 1] || 0;
|
|
151
|
+
const centerOffset =
|
|
152
|
+
offset -
|
|
153
|
+
viewportHeight / 2 -
|
|
154
|
+
(prevCellNoEditorHeight - prevCellEditorHeight);
|
|
155
|
+
listRef.current!.scrollToCellPosition(index, centerOffset); // 把目标 cell 的顶部放到视窗的中间位置
|
|
156
|
+
}
|
|
157
|
+
} else {
|
|
158
|
+
listRef.current!.scrollToCellPosition(index, offset);
|
|
159
|
+
}
|
|
133
160
|
});
|
|
161
|
+
|
|
134
162
|
return () => {
|
|
135
163
|
libroView.model.disposeScrollToCellViewEmitter();
|
|
136
164
|
};
|
|
137
|
-
}, [listRef, libroView]);
|
|
165
|
+
}, [listRef, libroView, editorsOffset, noEditorAreaHeight, editorAreaHeight]);
|
|
138
166
|
|
|
139
167
|
// 在Cell的高度变化时,触发重新计算所有Cell的高度偏移值
|
|
140
168
|
useEffect(() => {
|
|
@@ -163,9 +191,30 @@ export const LibroCellsOutputRender: React.FC<{
|
|
|
163
191
|
setEditorsOffset(newCellOffsets);
|
|
164
192
|
}, [cells]);
|
|
165
193
|
|
|
194
|
+
useFrameMonitor(
|
|
195
|
+
{
|
|
196
|
+
current: listRef.current?.Grid?._scrollingContainer,
|
|
197
|
+
},
|
|
198
|
+
libroView.libroViewTracker.isEnabledSpmReporter,
|
|
199
|
+
(payload) => {
|
|
200
|
+
const fpsTracker = libroView.libroViewTracker.getOrCreateTrackers({
|
|
201
|
+
type: 'fps',
|
|
202
|
+
id: libroView.model.options['modelId'] + 'fps',
|
|
203
|
+
});
|
|
204
|
+
fpsTracker['avgFPS'] = payload.summary.avgFPS;
|
|
205
|
+
fpsTracker['maxFrameTime'] = payload.summary.maxFrameTime;
|
|
206
|
+
fpsTracker['totalDropped'] = payload.summary.totalDropped;
|
|
207
|
+
fpsTracker['extra'] = payload.frames;
|
|
208
|
+
fpsTracker['cells'] = libroView.model.cells.length;
|
|
209
|
+
fpsTracker['size'] = libroView.model.currentFileContents?.size;
|
|
210
|
+
libroView.libroViewTracker.tracker(fpsTracker);
|
|
211
|
+
},
|
|
212
|
+
);
|
|
213
|
+
|
|
166
214
|
return (
|
|
167
215
|
<AutoSizer style={{ height: '100%', width: '100%' }} ref={parentRef}>
|
|
168
216
|
{({ width, height }: { width: number; height: number }) => {
|
|
217
|
+
viewportHeightRef.current = height;
|
|
169
218
|
return (
|
|
170
219
|
<List
|
|
171
220
|
ref={listRef}
|
|
@@ -188,6 +237,8 @@ export const LibroCellsOutputRender: React.FC<{
|
|
|
188
237
|
scrollTop: number;
|
|
189
238
|
scrollingContainer: Element;
|
|
190
239
|
}) => {
|
|
240
|
+
scrollTopRef.current = scrollParams.scrollTop;
|
|
241
|
+
viewportHeightRef.current = scrollParams.clientHeight;
|
|
191
242
|
libroView.cellScrollEmitter.fire({
|
|
192
243
|
scrollingContainer: scrollParams.scrollingContainer,
|
|
193
244
|
scrollTop: scrollParams.scrollTop,
|
package/src/libro-model.ts
CHANGED
|
@@ -422,9 +422,11 @@ export class LibroModel implements NotebookModel, DndListModel {
|
|
|
422
422
|
target = target?.offsetParent as HTMLElement;
|
|
423
423
|
offsetTop += target?.offsetTop || 0;
|
|
424
424
|
}
|
|
425
|
+
|
|
425
426
|
if (target?.offsetParent?.parentElement && _targetheight) {
|
|
426
427
|
const _height = target.offsetParent.parentElement.clientHeight;
|
|
427
428
|
const _scrollTop = target.offsetParent.parentElement.scrollTop;
|
|
429
|
+
|
|
428
430
|
if (offsetTop > _scrollTop && offsetTop + _targetheight < _height + _scrollTop) {
|
|
429
431
|
// 在可视范围内就不需要滚动
|
|
430
432
|
return;
|
|
@@ -432,9 +434,9 @@ export class LibroModel implements NotebookModel, DndListModel {
|
|
|
432
434
|
if (offsetTop < _scrollTop) {
|
|
433
435
|
target.offsetParent.parentElement.scrollTop = offsetTop;
|
|
434
436
|
} else {
|
|
435
|
-
|
|
437
|
+
// 目标 cell 的高度大于屏幕的高度
|
|
436
438
|
if (_targetheight >= _height) {
|
|
437
|
-
target.offsetParent.parentElement.scrollTop = offsetTop - _height / 2;
|
|
439
|
+
target.offsetParent.parentElement.scrollTop = offsetTop - _height / 2; // 把目标 cell 的顶部放到视窗的中间位置
|
|
438
440
|
} else {
|
|
439
441
|
target.offsetParent.parentElement.scrollTop =
|
|
440
442
|
offsetTop + _targetheight - _height + 30; // 加缓冲向上不贴底部
|