@difizen/libro-core 0.3.41 → 0.3.42
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 +29 -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 +33 -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;AAIlD,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,
|
|
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;AAIlD,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,CAgMA,CAAC"}
|
|
@@ -43,6 +43,8 @@ export var LibroCellsOutputRender = function LibroCellsOutputRender(_ref2) {
|
|
|
43
43
|
var parentRef = useRef(null);
|
|
44
44
|
var listRef = useRef(null);
|
|
45
45
|
var noEditorAreaRef = useRef(null);
|
|
46
|
+
var scrollTopRef = useRef(0);
|
|
47
|
+
var viewportHeightRef = useRef(0);
|
|
46
48
|
var _useState = useState([]),
|
|
47
49
|
_useState2 = _slicedToArray(_useState, 2),
|
|
48
50
|
editorsOffset = _useState2[0],
|
|
@@ -113,13 +115,33 @@ export var LibroCellsOutputRender = function LibroCellsOutputRender(_ref2) {
|
|
|
113
115
|
return;
|
|
114
116
|
}
|
|
115
117
|
libroView.model.onScrollToCellView(function (params) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
+
var index = params.cellIndex;
|
|
119
|
+
var offset = params.cellOffset || 0;
|
|
120
|
+
var top = (editorsOffset[index] || 0) + offset;
|
|
121
|
+
var height = (noEditorAreaHeight[index] || 0) + (editorAreaHeight[index] || 0);
|
|
122
|
+
var viewportTop = scrollTopRef.current;
|
|
123
|
+
var viewportHeight = viewportHeightRef.current;
|
|
124
|
+
if (viewportHeight && height) {
|
|
125
|
+
if (top > viewportTop && top + height < viewportTop + viewportHeight) {
|
|
126
|
+
// 在可视范围内就不需要滚动
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (top < viewportTop) {
|
|
130
|
+
listRef.current.scrollToCellPosition(index, offset);
|
|
131
|
+
} else {
|
|
132
|
+
var prevCellNoEditorHeight = noEditorAreaHeight[index - 1] || 0;
|
|
133
|
+
var prevCellEditorHeight = editorAreaHeight[index - 1] || 0;
|
|
134
|
+
var centerOffset = offset - viewportHeight / 2 - (prevCellNoEditorHeight - prevCellEditorHeight);
|
|
135
|
+
listRef.current.scrollToCellPosition(index, centerOffset); // 把目标 cell 的顶部放到视窗的中间位置
|
|
136
|
+
}
|
|
137
|
+
} else {
|
|
138
|
+
listRef.current.scrollToCellPosition(index, offset);
|
|
139
|
+
}
|
|
118
140
|
});
|
|
119
141
|
return function () {
|
|
120
142
|
libroView.model.disposeScrollToCellViewEmitter();
|
|
121
143
|
};
|
|
122
|
-
}, [listRef, libroView]);
|
|
144
|
+
}, [listRef, libroView, editorsOffset, noEditorAreaHeight, editorAreaHeight]);
|
|
123
145
|
|
|
124
146
|
// 在Cell的高度变化时,触发重新计算所有Cell的高度偏移值
|
|
125
147
|
useEffect(function () {
|
|
@@ -141,7 +163,7 @@ export var LibroCellsOutputRender = function LibroCellsOutputRender(_ref2) {
|
|
|
141
163
|
newCellOffsets[index] = offsetTop + offset;
|
|
142
164
|
});
|
|
143
165
|
setEditorsOffset(newCellOffsets);
|
|
144
|
-
}, [
|
|
166
|
+
}, [cells]);
|
|
145
167
|
return /*#__PURE__*/_jsx(AutoSizer, {
|
|
146
168
|
style: {
|
|
147
169
|
height: '100%',
|
|
@@ -151,6 +173,7 @@ export var LibroCellsOutputRender = function LibroCellsOutputRender(_ref2) {
|
|
|
151
173
|
children: function children(_ref3) {
|
|
152
174
|
var width = _ref3.width,
|
|
153
175
|
height = _ref3.height;
|
|
176
|
+
viewportHeightRef.current = height;
|
|
154
177
|
return /*#__PURE__*/_jsx(List, {
|
|
155
178
|
ref: listRef,
|
|
156
179
|
width: width,
|
|
@@ -174,6 +197,8 @@ export var LibroCellsOutputRender = function LibroCellsOutputRender(_ref2) {
|
|
|
174
197
|
noEditorArea: noEditorArea,
|
|
175
198
|
editorsOffset: editorsOffset,
|
|
176
199
|
onScroll: function onScroll(scrollParams) {
|
|
200
|
+
scrollTopRef.current = scrollParams.scrollTop;
|
|
201
|
+
viewportHeightRef.current = scrollParams.clientHeight;
|
|
177
202
|
libroView.cellScrollEmitter.fire({
|
|
178
203
|
scrollingContainer: scrollParams.scrollingContainer,
|
|
179
204
|
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.42",
|
|
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.42",
|
|
38
|
+
"@difizen/libro-common": "^0.3.42",
|
|
39
|
+
"@difizen/libro-shared-model": "^0.3.42",
|
|
40
|
+
"@difizen/libro-virtualized": "^0.3.42",
|
|
41
41
|
"@difizen/mana-app": "latest",
|
|
42
42
|
"@difizen/mana-l10n": "latest",
|
|
43
43
|
"@difizen/mana-react": "latest",
|
|
@@ -43,6 +43,8 @@ export const LibroCellsOutputRender: React.FC<{
|
|
|
43
43
|
const parentRef = useRef(null);
|
|
44
44
|
const listRef = useRef<List | null>(null);
|
|
45
45
|
const noEditorAreaRef = useRef<HTMLDivElement | null>(null);
|
|
46
|
+
const scrollTopRef = useRef(0);
|
|
47
|
+
const viewportHeightRef = useRef(0);
|
|
46
48
|
|
|
47
49
|
const [editorsOffset, setEditorsOffset] = useState<number[]>([]);
|
|
48
50
|
|
|
@@ -128,13 +130,38 @@ export const LibroCellsOutputRender: React.FC<{
|
|
|
128
130
|
}
|
|
129
131
|
|
|
130
132
|
libroView.model.onScrollToCellView((params: ScrollParams) => {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
+
const index = params.cellIndex;
|
|
134
|
+
const offset = params.cellOffset || 0;
|
|
135
|
+
const top = (editorsOffset[index] || 0) + offset;
|
|
136
|
+
const height = (noEditorAreaHeight[index] || 0) + (editorAreaHeight[index] || 0);
|
|
137
|
+
const viewportTop = scrollTopRef.current;
|
|
138
|
+
const viewportHeight = viewportHeightRef.current;
|
|
139
|
+
|
|
140
|
+
if (viewportHeight && height) {
|
|
141
|
+
if (top > viewportTop && top + height < viewportTop + viewportHeight) {
|
|
142
|
+
// 在可视范围内就不需要滚动
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (top < viewportTop) {
|
|
146
|
+
listRef.current!.scrollToCellPosition(index, offset);
|
|
147
|
+
} else {
|
|
148
|
+
const prevCellNoEditorHeight = noEditorAreaHeight[index - 1] || 0;
|
|
149
|
+
const prevCellEditorHeight = editorAreaHeight[index - 1] || 0;
|
|
150
|
+
const centerOffset =
|
|
151
|
+
offset -
|
|
152
|
+
viewportHeight / 2 -
|
|
153
|
+
(prevCellNoEditorHeight - prevCellEditorHeight);
|
|
154
|
+
listRef.current!.scrollToCellPosition(index, centerOffset); // 把目标 cell 的顶部放到视窗的中间位置
|
|
155
|
+
}
|
|
156
|
+
} else {
|
|
157
|
+
listRef.current!.scrollToCellPosition(index, offset);
|
|
158
|
+
}
|
|
133
159
|
});
|
|
160
|
+
|
|
134
161
|
return () => {
|
|
135
162
|
libroView.model.disposeScrollToCellViewEmitter();
|
|
136
163
|
};
|
|
137
|
-
}, [listRef, libroView]);
|
|
164
|
+
}, [listRef, libroView, editorsOffset, noEditorAreaHeight, editorAreaHeight]);
|
|
138
165
|
|
|
139
166
|
// 在Cell的高度变化时,触发重新计算所有Cell的高度偏移值
|
|
140
167
|
useEffect(() => {
|
|
@@ -166,6 +193,7 @@ export const LibroCellsOutputRender: React.FC<{
|
|
|
166
193
|
return (
|
|
167
194
|
<AutoSizer style={{ height: '100%', width: '100%' }} ref={parentRef}>
|
|
168
195
|
{({ width, height }: { width: number; height: number }) => {
|
|
196
|
+
viewportHeightRef.current = height;
|
|
169
197
|
return (
|
|
170
198
|
<List
|
|
171
199
|
ref={listRef}
|
|
@@ -188,6 +216,8 @@ export const LibroCellsOutputRender: React.FC<{
|
|
|
188
216
|
scrollTop: number;
|
|
189
217
|
scrollingContainer: Element;
|
|
190
218
|
}) => {
|
|
219
|
+
scrollTopRef.current = scrollParams.scrollTop;
|
|
220
|
+
viewportHeightRef.current = scrollParams.clientHeight;
|
|
191
221
|
libroView.cellScrollEmitter.fire({
|
|
192
222
|
scrollingContainer: scrollParams.scrollingContainer,
|
|
193
223
|
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; // 加缓冲向上不贴底部
|