@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.
@@ -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
- metadata: Partial<import("./libro-cell-protocol.js").LibroCellMetadata>;
45
- cell_type: string;
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,CAkKA,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;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
- // listRef.current!.scrollToRow(index);
117
- listRef.current.scrollToCellPosition(params.cellIndex, params.cellOffset);
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
- }, [noEditorAreaRef.current, cells]);
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
@@ -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
- //目标cell的高度大于屏幕的高度
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.41",
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.41",
38
- "@difizen/libro-common": "^0.3.41",
39
- "@difizen/libro-shared-model": "^0.3.41",
40
- "@difizen/libro-virtualized": "^0.3.41",
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
- // listRef.current!.scrollToRow(index);
132
- listRef.current!.scrollToCellPosition(params.cellIndex, params.cellOffset);
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,
@@ -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
- //目标cell的高度大于屏幕的高度
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; // 加缓冲向上不贴底部