@ones-editor/editor 5.0.5-beta.ONES22302330.1 → 5.0.5-beta.ONES22302330.2

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/dist/index.js CHANGED
@@ -11896,6 +11896,94 @@ var __publicField = (obj, key, value) => {
11896
11896
  const colorIndex = Math.abs(typeof content === "string" && content.trim() ? hashCode(content.trim()) : 0) % ColorNames.length;
11897
11897
  return ColorNames[colorIndex];
11898
11898
  }
11899
+ const renderers = /* @__PURE__ */ new WeakMap();
11900
+ const pendingEditors = /* @__PURE__ */ new WeakMap();
11901
+ function renderDeferredBlock(block) {
11902
+ var _a;
11903
+ (_a = renderers.get(block)) == null ? void 0 : _a();
11904
+ }
11905
+ class DeferredContents {
11906
+ constructor(editor) {
11907
+ __publicField(this, "pending", /* @__PURE__ */ new Map());
11908
+ __publicField(this, "owners", /* @__PURE__ */ new Map());
11909
+ __publicField(this, "observer");
11910
+ __publicField(this, "renderAll", () => {
11911
+ this.pending.forEach((ids, block) => renderDeferredBlock(block));
11912
+ });
11913
+ __publicField(this, "handleReadonlyChanged", () => {
11914
+ if (!this.editor.readonly)
11915
+ this.renderAll();
11916
+ });
11917
+ __publicField(this, "handleKeyDown", (event) => {
11918
+ if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "f")
11919
+ this.renderAll();
11920
+ });
11921
+ var _a;
11922
+ this.editor = editor;
11923
+ this.observer = new IntersectionObserver((entries) => {
11924
+ entries.forEach((entry) => {
11925
+ if (entry.isIntersecting)
11926
+ renderDeferredBlock(entry.target);
11927
+ });
11928
+ }, { root: (_a = editor.options.scrollContainer) != null ? _a : null, rootMargin: "1000px 0px" });
11929
+ editor.on("readonlyChanged", this.handleReadonlyChanged);
11930
+ window.addEventListener("beforeprint", this.renderAll);
11931
+ window.addEventListener("keydown", this.handleKeyDown, true);
11932
+ }
11933
+ add(block, ids, render) {
11934
+ this.pending.set(block, ids);
11935
+ ids.forEach((id) => this.owners.set(id, block));
11936
+ renderers.set(block, () => {
11937
+ this.remove(block);
11938
+ render();
11939
+ });
11940
+ block.setAttribute("data-deferred-content", "true");
11941
+ this.observer.observe(block);
11942
+ }
11943
+ remove(block) {
11944
+ var _a;
11945
+ (_a = this.pending.get(block)) == null ? void 0 : _a.forEach((id) => this.owners.delete(id));
11946
+ this.pending.delete(block);
11947
+ renderers.delete(block);
11948
+ block.removeAttribute("data-deferred-content");
11949
+ this.observer.unobserve(block);
11950
+ }
11951
+ renderId(id) {
11952
+ const block = this.owners.get(id);
11953
+ if (block)
11954
+ renderDeferredBlock(block);
11955
+ }
11956
+ destroy() {
11957
+ this.observer.disconnect();
11958
+ this.pending.forEach((ids, block) => renderers.delete(block));
11959
+ this.owners.clear();
11960
+ this.pending.clear();
11961
+ this.editor.off("readonlyChanged", this.handleReadonlyChanged);
11962
+ window.removeEventListener("beforeprint", this.renderAll);
11963
+ window.removeEventListener("keydown", this.handleKeyDown, true);
11964
+ pendingEditors.delete(this.editor);
11965
+ }
11966
+ }
11967
+ function deferBlockContent(editor, block, ids, render) {
11968
+ let pending = pendingEditors.get(editor);
11969
+ if (!pending) {
11970
+ pending = editor.addCustom("deferred-contents", () => new DeferredContents(editor));
11971
+ pendingEditors.set(editor, pending);
11972
+ }
11973
+ pending.add(block, ids, render);
11974
+ }
11975
+ function renderDeferredContents(editor) {
11976
+ var _a;
11977
+ (_a = pendingEditors.get(editor)) == null ? void 0 : _a.renderAll();
11978
+ }
11979
+ function removeDeferredBlock(editor, block) {
11980
+ var _a;
11981
+ (_a = pendingEditors.get(editor)) == null ? void 0 : _a.remove(block);
11982
+ }
11983
+ function renderDeferredId(editor, id) {
11984
+ var _a;
11985
+ (_a = pendingEditors.get(editor)) == null ? void 0 : _a.renderId(id);
11986
+ }
11899
11987
  const logger$4Q = getLogger("container");
11900
11988
  function isContainer(elem) {
11901
11989
  return elem.getAttribute("data-type") === "editor-container";
@@ -11931,7 +12019,11 @@ var __publicField = (obj, key, value) => {
11931
12019
  return container;
11932
12020
  }
11933
12021
  function getContainerById(editor, containerId) {
11934
- const container = editor.rootElement.querySelector(`[data-container-id=${containerId}]`);
12022
+ let container = editor.rootElement.querySelector(`[data-container-id=${containerId}]`);
12023
+ if (!container) {
12024
+ renderDeferredId(editor, containerId);
12025
+ container = editor.rootElement.querySelector(`[data-container-id=${containerId}]`);
12026
+ }
11935
12027
  assert(logger$4P, container, `no container: ${containerId}`);
11936
12028
  return container;
11937
12029
  }
@@ -32547,7 +32639,11 @@ ${codeText}
32547
32639
  return this.selection.getFocusedBlock();
32548
32640
  }
32549
32641
  findBlockById(id) {
32550
- const block = this.rootContainer.querySelector(`#${id}`);
32642
+ let block = this.rootContainer.querySelector(`#${id}`);
32643
+ if (!block) {
32644
+ renderDeferredId(this, id);
32645
+ block = this.rootContainer.querySelector(`#${id}`);
32646
+ }
32551
32647
  if (block) {
32552
32648
  assert(logger$3b, isBlock$1(block), "not an valid block element");
32553
32649
  }
@@ -45647,6 +45743,7 @@ ${codeText}
45647
45743
  return `${getBlockId(block)}_scroll`;
45648
45744
  }
45649
45745
  function getBlockTable(block) {
45746
+ renderDeferredBlock(block);
45650
45747
  const table = block.querySelector("div[data-type=table-content] >table");
45651
45748
  assert(logger$2E, table instanceof HTMLTableElement, "invalid table");
45652
45749
  return table;
@@ -74983,6 +75080,7 @@ ${codeText}
74983
75080
  return table;
74984
75081
  }
74985
75082
  function createBlockContent$2(editor, path, container, blockElement, blockData) {
75083
+ var _a, _b;
74986
75084
  assert(logger$_, blockData.type === "table", "not table data");
74987
75085
  assert(logger$_, getContainerId(container) === path[path.length - 1].containerId, "invalid path");
74988
75086
  const tableData = blockData;
@@ -74993,9 +75091,37 @@ ${codeText}
74993
75091
  if (isRootContainer(container)) {
74994
75092
  addClass(tableContent, "deferred-table-content");
74995
75093
  }
74996
- const table = createTable(editor, path, tableData);
74997
- table.classList.add("drag-preview-element");
74998
- tableContent.appendChild(table);
75094
+ let placeholder2;
75095
+ const renderTable = () => {
75096
+ try {
75097
+ const table = createTable(editor, path, tableData);
75098
+ table.classList.add("drag-preview-element");
75099
+ tableContent.appendChild(table);
75100
+ } catch (err) {
75101
+ const message = `invalid table data: ${JSON.stringify(tableData)}`;
75102
+ logger$_.error(message);
75103
+ createElement("div", ["error"], tableContent).innerText = message;
75104
+ }
75105
+ placeholder2 == null ? void 0 : placeholder2.remove();
75106
+ tableContent.style.minHeight = "";
75107
+ };
75108
+ const defer = editor.readonly && isRootContainer(container) && path[0].blockIndex >= 10 && !tableData.chart && ((_a = tableData.colsWidth) == null ? void 0 : _a.length) === tableData.cols && tableData.colsWidth.every((width) => width > 0) && typeof IntersectionObserver !== "undefined" && editor.doc.getContainerBlocks("root").length >= 200 && tableData.children.every((id) => editor.doc.getContainerBlocks(id).every((block) => {
75109
+ var _a2;
75110
+ return block.type === "text" && !block.heading && !block.children && ((_a2 = block.text) == null ? void 0 : _a2.every((op) => {
75111
+ var _a3, _b2;
75112
+ return !((_a3 = op.attributes) == null ? void 0 : _a3.box) && !((_b2 = op.attributes) == null ? void 0 : _b2.insertion);
75113
+ }));
75114
+ }));
75115
+ if (defer) {
75116
+ tableContent.style.minHeight = "400px";
75117
+ placeholder2 = createElement("table", [], tableContent);
75118
+ placeholder2.style.minWidth = `${((_b = tableData.colsWidth) != null ? _b : []).reduce((sum, width) => sum + width, 0)}px`;
75119
+ placeholder2.setAttribute("aria-hidden", "true");
75120
+ const ids = tableData.children.flatMap((id) => [id, ...editor.doc.getContainerBlocks(id).map((block) => block.id)]);
75121
+ deferBlockContent(editor, blockElement, ids, renderTable);
75122
+ } else {
75123
+ renderTable();
75124
+ }
74999
75125
  const options = editor.getComponentOptions("table");
75000
75126
  if (!clientType.isMobile) {
75001
75127
  handleTableResizeMouseEvent(editor);
@@ -75856,6 +75982,7 @@ ${codeText}
75856
75982
  return new DOMRect(clientRect.left, clientRect.top + offset, clientRect.width, Math.max(clientRect.height - offset * 2, 0));
75857
75983
  }
75858
75984
  function handleDeleteBlock$4(editor, block) {
75985
+ removeDeferredBlock(editor, block);
75859
75986
  untrackChildBlockEvent(editor, handleChartDebounceUpdate);
75860
75987
  const scrollContent = editor.findCustom(getTableScrollKey(block));
75861
75988
  if (scrollContent) {
@@ -80270,6 +80397,7 @@ ${docStr}
80270
80397
  if (!find) {
80271
80398
  return;
80272
80399
  }
80400
+ renderDeferredContents(editor);
80273
80401
  const blocks = getAllChildBlocks(editor, {
80274
80402
  simpleBlockOnly: true,
80275
80403
  visibleOnly: true
@@ -97738,7 +97866,7 @@ ${JSON.stringify(error2, null, 2)}`);
97738
97866
  }
97739
97867
  }
97740
97868
  });
97741
- editor.version = "5.0.5-beta.ONES22302330.1";
97869
+ editor.version = "5.0.5-beta.ONES22302330.2";
97742
97870
  return editor;
97743
97871
  }
97744
97872
  function isDoc(doc2) {
@@ -97874,7 +98002,7 @@ ${JSON.stringify(error2, null, 2)}`);
97874
98002
  OnesEditorDropTarget.register(editor);
97875
98003
  OnesEditorTocProvider.register(editor);
97876
98004
  OnesEditorExclusiveBlock.register(editor);
97877
- editor.version = "5.0.5-beta.ONES22302330.1";
98005
+ editor.version = "5.0.5-beta.ONES22302330.2";
97878
98006
  return editor;
97879
98007
  } catch (error2) {
97880
98008
  try {
@@ -98017,7 +98145,7 @@ ${JSON.stringify(error2, null, 2)}`);
98017
98145
  }
98018
98146
  }
98019
98147
  });
98020
- editor.version = "5.0.5-beta.ONES22302330.1";
98148
+ editor.version = "5.0.5-beta.ONES22302330.2";
98021
98149
  return editor;
98022
98150
  }
98023
98151
  const emojis$1 = {
@@ -144150,6 +144278,7 @@ ${JSON.stringify(error2, null, 2)}`);
144150
144278
  exports2.createTextWithReplaceSoftReturn = createTextWithReplaceSoftReturn;
144151
144279
  exports2.dataURLToBlob = dataURLToBlob;
144152
144280
  exports2.daysAfter = daysAfter;
144281
+ exports2.deferBlockContent = deferBlockContent;
144153
144282
  exports2.deleteColor = deleteColor;
144154
144283
  exports2.deleteText = deleteText;
144155
144284
  exports2.diffDays = diffDays;
@@ -144515,9 +144644,13 @@ ${JSON.stringify(error2, null, 2)}`);
144515
144644
  exports2.registerDragDrop = registerDragDrop;
144516
144645
  exports2.removeAttribute = removeAttribute;
144517
144646
  exports2.removeClass = removeClass;
144647
+ exports2.removeDeferredBlock = removeDeferredBlock;
144518
144648
  exports2.removeLastBr = removeLastBr;
144519
144649
  exports2.removePlaceholderFromBlock = removePlaceholderFromBlock;
144520
144650
  exports2.removeStyle = removeStyle;
144651
+ exports2.renderDeferredBlock = renderDeferredBlock;
144652
+ exports2.renderDeferredContents = renderDeferredContents;
144653
+ exports2.renderDeferredId = renderDeferredId;
144521
144654
  exports2.repairDuplicatedBlockIds = repairDuplicatedBlockIds;
144522
144655
  exports2.replaceAll = replaceAll$1;
144523
144656
  exports2.replaceAllCaseInsensitive = replaceAllCaseInsensitive;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ones-editor/editor",
3
- "version": "5.0.5-beta.ONES22302330.1",
3
+ "version": "5.0.5-beta.ONES22302330.2",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "dependencies": {