superdoc 1.0.0-beta.17 → 1.0.0-beta.18

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.
Files changed (31) hide show
  1. package/dist/chunks/{PdfViewer-cvzMUtBh.es.js → PdfViewer-CDEQktlZ.es.js} +1 -1
  2. package/dist/chunks/{PdfViewer-BIlJaTm7.cjs → PdfViewer-CZgU5VTe.cjs} +1 -1
  3. package/dist/chunks/{index-DDx90Dl3.cjs → index-CBFc2Hsa.cjs} +8 -4
  4. package/dist/chunks/{index-VCeRjVPO-FBgR9qxX.es.js → index-DpnfmQSg--uFI4inB.es.js} +1 -1
  5. package/dist/chunks/{index-VCeRjVPO-DjkejB6t.cjs → index-DpnfmQSg-D54nF5iO.cjs} +1 -1
  6. package/dist/chunks/{index-CrIfBvBN.es.js → index-yYYhcBhg.es.js} +8 -4
  7. package/dist/chunks/{super-editor.es-00SpI-wK.es.js → super-editor.es-BNkRY9J-.es.js} +1834 -1121
  8. package/dist/chunks/{super-editor.es-Mlj7AGyt.cjs → super-editor.es-BfPsU6H-.cjs} +1833 -1120
  9. package/dist/packages/superdoc/src/components/CommentsLayer/use-comment.d.ts.map +1 -1
  10. package/dist/packages/superdoc/src/stores/comments-store.d.ts.map +1 -1
  11. package/dist/style.css +7 -7
  12. package/dist/super-editor/ai-writer.es.js +2 -2
  13. package/dist/super-editor/chunks/{converter-B9zUZjYT.js → converter-Cz21HA_9.js} +207 -15
  14. package/dist/super-editor/chunks/{docx-zipper-r5KdE_SA.js → docx-zipper-DiEfO4LE.js} +1 -1
  15. package/dist/super-editor/chunks/{editor-D2k2BwSG.js → editor-DoxVe-iR.js} +1564 -1060
  16. package/dist/super-editor/chunks/{index-VCeRjVPO.js → index-DpnfmQSg.js} +1 -1
  17. package/dist/super-editor/chunks/{toolbar-8o_LgoiW.js → toolbar-CKdQr5PG.js} +2 -2
  18. package/dist/super-editor/converter.es.js +1 -1
  19. package/dist/super-editor/docx-zipper.es.js +2 -2
  20. package/dist/super-editor/editor.es.js +3 -3
  21. package/dist/super-editor/file-zipper.es.js +1 -1
  22. package/dist/super-editor/style.css +7 -7
  23. package/dist/super-editor/super-editor.es.js +126 -45
  24. package/dist/super-editor/toolbar.es.js +2 -2
  25. package/dist/super-editor.cjs +3 -3
  26. package/dist/super-editor.es.js +1 -1
  27. package/dist/superdoc.cjs +2 -2
  28. package/dist/superdoc.es.js +2 -2
  29. package/dist/superdoc.umd.js +1832 -1115
  30. package/dist/superdoc.umd.js.map +1 -1
  31. package/package.json +1 -1
@@ -19191,6 +19191,7 @@ function getUnderlineCssString({ type: type2 = "single", color = null, thickness
19191
19191
  if (color) add("text-decoration-color", color);
19192
19192
  return parts.join("; ");
19193
19193
  }
19194
+ const INLINE_OVERRIDE_PROPERTIES = ["fontSize", "bold", "italic", "strike", "underline", "letterSpacing"];
19194
19195
  const resolveRunProperties = (params2, inlineRpr, resolvedPpr, isListNumber = false, numberingDefinedInline = false) => {
19195
19196
  const paragraphStyleId = resolvedPpr?.styleId;
19196
19197
  const paragraphStyleProps = resolveStyleChain$1(params2, paragraphStyleId, translator$1N);
@@ -19227,6 +19228,11 @@ const resolveRunProperties = (params2, inlineRpr, resolvedPpr, isListNumber = fa
19227
19228
  styleChain = [...styleChain, paragraphStyleProps, runStyleProps, inlineRpr];
19228
19229
  }
19229
19230
  const finalProps = combineProperties(styleChain, ["fontFamily", "color"]);
19231
+ for (const prop of INLINE_OVERRIDE_PROPERTIES) {
19232
+ if (inlineRpr?.[prop] != null) {
19233
+ finalProps[prop] = inlineRpr[prop];
19234
+ }
19235
+ }
19230
19236
  return finalProps;
19231
19237
  };
19232
19238
  function resolveParagraphProperties(params2, inlineProps, insideTable = false, overrideInlineStyleId = false, tableStyleId = null) {
@@ -25034,8 +25040,8 @@ function handleImageNode$1(node, params2, isAnchor) {
25034
25040
  horizontal: positionHValue,
25035
25041
  top: positionVValue
25036
25042
  };
25037
- const useSimplePos = attributes["simplePos"] === "1" || attributes["simplePos"] === 1;
25038
- const simplePos = useSimplePos ? node.elements.find((el) => el.name === "wp:simplePos") : null;
25043
+ const useSimplePos = attributes["simplePos"] === "1" || attributes["simplePos"] === 1 || attributes["simplePos"] === true;
25044
+ const simplePosNode = node.elements.find((el) => el.name === "wp:simplePos");
25039
25045
  const wrapNode = isAnchor ? node.elements.find(
25040
25046
  (el) => ["wp:wrapNone", "wp:wrapSquare", "wp:wrapThrough", "wp:wrapTight", "wp:wrapTopAndBottom"].includes(el.name)
25041
25047
  ) : null;
@@ -25175,10 +25181,10 @@ function handleImageNode$1(node, params2, isAnchor) {
25175
25181
  anchorData,
25176
25182
  isAnchor,
25177
25183
  transformData,
25178
- ...simplePos && {
25184
+ ...useSimplePos && {
25179
25185
  simplePos: {
25180
- x: simplePos.attributes.x,
25181
- y: simplePos.attributes.y
25186
+ x: simplePosNode.attributes?.x,
25187
+ y: simplePosNode.attributes?.y
25182
25188
  }
25183
25189
  },
25184
25190
  wrap: wrap2,
@@ -30936,12 +30942,13 @@ function translateShapeGroup(params2) {
30936
30942
  function translateAnchorNode(params2) {
30937
30943
  const { attrs } = params2.node;
30938
30944
  const anchorElements = [];
30939
- if (attrs.simplePos) {
30945
+ const hasSimplePos = attrs.simplePos || attrs.originalAttributes?.simplePos;
30946
+ if (hasSimplePos) {
30940
30947
  anchorElements.push({
30941
30948
  name: "wp:simplePos",
30942
30949
  attributes: {
30943
- x: 0,
30944
- y: 0
30950
+ x: attrs.simplePos?.x ?? 0,
30951
+ y: attrs.simplePos?.y ?? 0
30945
30952
  }
30946
30953
  });
30947
30954
  }
@@ -30993,8 +31000,8 @@ function translateAnchorNode(params2) {
30993
31000
  }
30994
31001
  if (attrs.originalAttributes?.simplePos !== void 0) {
30995
31002
  inlineAttrs.simplePos = attrs.originalAttributes.simplePos;
30996
- } else if (attrs.simplePos !== void 0) {
30997
- inlineAttrs.simplePos = attrs.simplePos;
31003
+ } else if (hasSimplePos) {
31004
+ inlineAttrs.simplePos = "1";
30998
31005
  }
30999
31006
  if (attrs.originalAttributes?.locked !== void 0) {
31000
31007
  inlineAttrs.locked = attrs.originalAttributes.locked;
@@ -33759,7 +33766,7 @@ const handlePassthroughNode = (params2) => {
33759
33766
  const { nodes = [] } = params2;
33760
33767
  const node = nodes[0];
33761
33768
  if (!node) return { nodes: [], consumed: 0 };
33762
- if (registeredHandlers[node.name]) {
33769
+ if (registeredHandlers[node.name] || node.name === "w:commentReference") {
33763
33770
  return { nodes: [], consumed: 0 };
33764
33771
  }
33765
33772
  const originalXml = carbonCopy(node) || {};
@@ -34059,7 +34066,11 @@ function importCommentData({ docx, editor, converter }) {
34059
34066
  const generateCommentsWithExtendedData = ({ docx, comments }) => {
34060
34067
  if (!comments?.length) return [];
34061
34068
  const commentsExtended = docx["word/commentsExtended.xml"];
34062
- if (!commentsExtended) return comments.map((comment) => ({ ...comment, isDone: comment.isDone ?? false }));
34069
+ if (!commentsExtended) {
34070
+ const commentRanges = extractCommentRangesFromDocument(docx);
34071
+ const commentsWithThreading = detectThreadingFromRanges(comments, commentRanges);
34072
+ return commentsWithThreading.map((comment) => ({ ...comment, isDone: comment.isDone ?? false }));
34073
+ }
34063
34074
  const { elements: initialElements = [] } = commentsExtended;
34064
34075
  if (!initialElements?.length) return comments.map((comment) => ({ ...comment, isDone: comment.isDone ?? false }));
34065
34076
  const { elements = [] } = initialElements[0] ?? {};
@@ -34085,6 +34096,79 @@ const getExtendedDetails = (commentEx) => {
34085
34096
  const paraIdParent = attributes["w15:paraIdParent"];
34086
34097
  return { paraId, isDone, paraIdParent };
34087
34098
  };
34099
+ const extractCommentRangesFromDocument = (docx) => {
34100
+ const documentXml = docx["word/document.xml"];
34101
+ if (!documentXml) {
34102
+ return [];
34103
+ }
34104
+ const pendingComments = [];
34105
+ const walkElements = (elements) => {
34106
+ if (!elements || !Array.isArray(elements)) return;
34107
+ elements.forEach((element) => {
34108
+ if (element.name === "w:commentRangeStart") {
34109
+ const commentId = element.attributes?.["w:id"];
34110
+ if (commentId !== void 0) {
34111
+ pendingComments.push({
34112
+ type: "start",
34113
+ commentId: String(commentId)
34114
+ });
34115
+ }
34116
+ } else if (element.name === "w:commentRangeEnd") {
34117
+ const commentId = element.attributes?.["w:id"];
34118
+ if (commentId !== void 0) {
34119
+ pendingComments.push({
34120
+ type: "end",
34121
+ commentId: String(commentId)
34122
+ });
34123
+ }
34124
+ }
34125
+ if (element.elements && Array.isArray(element.elements)) {
34126
+ walkElements(element.elements);
34127
+ }
34128
+ });
34129
+ };
34130
+ if (documentXml.elements && documentXml.elements.length > 0) {
34131
+ const body = documentXml.elements[0];
34132
+ if (body.elements) {
34133
+ walkElements(body.elements);
34134
+ }
34135
+ }
34136
+ return pendingComments;
34137
+ };
34138
+ const detectThreadingFromRanges = (comments, rangeEvents) => {
34139
+ if (!rangeEvents || rangeEvents.length === 0) {
34140
+ return comments;
34141
+ }
34142
+ const openRanges = [];
34143
+ const parentMap = /* @__PURE__ */ new Map();
34144
+ rangeEvents.forEach((event) => {
34145
+ if (event.type === "start") {
34146
+ if (openRanges.length > 0) {
34147
+ const parentCommentId = openRanges[openRanges.length - 1];
34148
+ parentMap.set(event.commentId, parentCommentId);
34149
+ }
34150
+ openRanges.push(event.commentId);
34151
+ } else if (event.type === "end") {
34152
+ const index2 = openRanges.lastIndexOf(event.commentId);
34153
+ if (index2 !== -1) {
34154
+ openRanges.splice(index2, 1);
34155
+ }
34156
+ }
34157
+ });
34158
+ return comments.map((comment) => {
34159
+ const parentCommentId = parentMap.get(comment.importedId);
34160
+ if (parentCommentId) {
34161
+ const parentComment = comments.find((c2) => c2.importedId === parentCommentId);
34162
+ if (parentComment) {
34163
+ return {
34164
+ ...comment,
34165
+ parentCommentId: parentComment.commentId
34166
+ };
34167
+ }
34168
+ }
34169
+ return comment;
34170
+ });
34171
+ };
34088
34172
  const RELATIONSHIP_TYPES = (
34089
34173
  /** @type {const} */
34090
34174
  {
@@ -35925,10 +36009,12 @@ const toIsoNoFractional = (unixMillis) => {
35925
36009
  const updateCommentsXml = (commentDefs = [], commentsXml) => {
35926
36010
  const newCommentsXml = carbonCopy(commentsXml);
35927
36011
  commentDefs.forEach((commentDef) => {
35928
- const elements = commentDef.elements[0].elements;
36012
+ const paraNode = commentDef.elements[0];
36013
+ if (!paraNode.attributes) paraNode.attributes = {};
36014
+ const elements = paraNode.elements;
35929
36015
  elements.unshift(COMMENT_REF);
35930
36016
  const paraId = commentDef.attributes["w15:paraId"];
35931
- commentDef.elements[0].attributes["w14:paraId"] = paraId;
36017
+ paraNode.attributes["w14:paraId"] = paraId;
35932
36018
  commentDef.attributes = {
35933
36019
  "w:id": commentDef.attributes["w:id"],
35934
36020
  "w:author": commentDef.attributes["w:author"],
@@ -36302,7 +36388,7 @@ const _SuperConverter = class _SuperConverter2 {
36302
36388
  static getStoredSuperdocVersion(docx) {
36303
36389
  return _SuperConverter2.getStoredCustomProperty(docx, "SuperdocVersion");
36304
36390
  }
36305
- static setStoredSuperdocVersion(docx = this.convertedXml, version2 = "1.0.0-beta.17") {
36391
+ static setStoredSuperdocVersion(docx = this.convertedXml, version2 = "1.0.0-beta.18") {
36306
36392
  return _SuperConverter2.setStoredCustomProperty(docx, "SuperdocVersion", version2, false);
36307
36393
  }
36308
36394
  /**
@@ -36643,6 +36729,112 @@ const _SuperConverter = class _SuperConverter2 {
36643
36729
  });
36644
36730
  return { result, params: params2 };
36645
36731
  }
36732
+ /**
36733
+ * Creates a default empty header for the specified variant.
36734
+ *
36735
+ * This method programmatically creates a new header section with an empty ProseMirror
36736
+ * document. The header is added to the converter's data structures and will be included
36737
+ * in subsequent DOCX exports.
36738
+ *
36739
+ * @param {('default' | 'first' | 'even' | 'odd')} variant - The header variant to create
36740
+ * @returns {string} The relationship ID of the created header
36741
+ *
36742
+ * @throws {Error} If variant is invalid or header already exists for this variant
36743
+ *
36744
+ * @example
36745
+ * ```javascript
36746
+ * const headerId = converter.createDefaultHeader('default');
36747
+ * // headerId: 'rId-header-default'
36748
+ * // converter.headers['rId-header-default'] contains empty PM doc
36749
+ * // converter.headerIds.default === 'rId-header-default'
36750
+ * ```
36751
+ */
36752
+ createDefaultHeader(variant = "default") {
36753
+ if (typeof variant !== "string") {
36754
+ throw new TypeError(`variant must be a string, received ${typeof variant}`);
36755
+ }
36756
+ const validVariants = ["default", "first", "even", "odd"];
36757
+ if (!validVariants.includes(variant)) {
36758
+ throw new Error(`Invalid header variant: ${variant}. Must be one of: ${validVariants.join(", ")}`);
36759
+ }
36760
+ if (this.headerIds[variant]) {
36761
+ console.warn(`[SuperConverter] Header already exists for variant '${variant}': ${this.headerIds[variant]}`);
36762
+ return this.headerIds[variant];
36763
+ }
36764
+ const rId = `rId-header-${variant}`;
36765
+ const emptyDoc = {
36766
+ type: "doc",
36767
+ content: [
36768
+ {
36769
+ type: "paragraph",
36770
+ content: []
36771
+ }
36772
+ ]
36773
+ };
36774
+ this.headers[rId] = emptyDoc;
36775
+ this.headerIds[variant] = rId;
36776
+ if (!this.headerIds.ids) {
36777
+ this.headerIds.ids = [];
36778
+ }
36779
+ if (!this.headerIds.ids.includes(rId)) {
36780
+ this.headerIds.ids.push(rId);
36781
+ }
36782
+ this.documentModified = true;
36783
+ return rId;
36784
+ }
36785
+ /**
36786
+ * Creates a default empty footer for the specified variant.
36787
+ *
36788
+ * This method programmatically creates a new footer section with an empty ProseMirror
36789
+ * document. The footer is added to the converter's data structures and will be included
36790
+ * in subsequent DOCX exports.
36791
+ *
36792
+ * @param {('default' | 'first' | 'even' | 'odd')} variant - The footer variant to create
36793
+ * @returns {string} The relationship ID of the created footer
36794
+ *
36795
+ * @throws {Error} If variant is invalid or footer already exists for this variant
36796
+ *
36797
+ * @example
36798
+ * ```javascript
36799
+ * const footerId = converter.createDefaultFooter('default');
36800
+ * // footerId: 'rId-footer-default'
36801
+ * // converter.footers['rId-footer-default'] contains empty PM doc
36802
+ * // converter.footerIds.default === 'rId-footer-default'
36803
+ * ```
36804
+ */
36805
+ createDefaultFooter(variant = "default") {
36806
+ if (typeof variant !== "string") {
36807
+ throw new TypeError(`variant must be a string, received ${typeof variant}`);
36808
+ }
36809
+ const validVariants = ["default", "first", "even", "odd"];
36810
+ if (!validVariants.includes(variant)) {
36811
+ throw new Error(`Invalid footer variant: ${variant}. Must be one of: ${validVariants.join(", ")}`);
36812
+ }
36813
+ if (this.footerIds[variant]) {
36814
+ console.warn(`[SuperConverter] Footer already exists for variant '${variant}': ${this.footerIds[variant]}`);
36815
+ return this.footerIds[variant];
36816
+ }
36817
+ const rId = `rId-footer-${variant}`;
36818
+ const emptyDoc = {
36819
+ type: "doc",
36820
+ content: [
36821
+ {
36822
+ type: "paragraph",
36823
+ content: []
36824
+ }
36825
+ ]
36826
+ };
36827
+ this.footers[rId] = emptyDoc;
36828
+ this.footerIds[variant] = rId;
36829
+ if (!this.footerIds.ids) {
36830
+ this.footerIds.ids = [];
36831
+ }
36832
+ if (!this.footerIds.ids.includes(rId)) {
36833
+ this.footerIds.ids.push(rId);
36834
+ }
36835
+ this.documentModified = true;
36836
+ return rId;
36837
+ }
36646
36838
  // Deprecated methods for backward compatibility
36647
36839
  static getStoredSuperdocId(docx) {
36648
36840
  console.warn("getStoredSuperdocId is deprecated, use getDocumentGuid instead");
@@ -39502,7 +39694,7 @@ var __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, "rea
39502
39694
  var __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
39503
39695
  var __privateSet = (obj, member, value, setter) => (__accessCheck$1(obj, member, "write to private field"), member.set(obj, value), value);
39504
39696
  var __privateMethod$1 = (obj, member, method) => (__accessCheck$1(obj, member, "access private method"), method);
39505
- var _Attribute_static, getGlobalAttributes_fn, getNodeAndMarksAttributes_fn, _Schema_static, createNodesSchema_fn, createMarksSchema_fn, _events, _ExtensionService_instances, setupExtensions_fn, attachEditorEvents_fn, _editor, _stateValidators, _xmlValidators, _requiredNodeTypes, _requiredMarkTypes, _SuperValidator_instances, initializeValidators_fn, collectValidatorRequirements_fn, analyzeDocument_fn, dispatchWithFallback_fn, _commandService, _Editor_instances, initContainerElement_fn, init_fn, initRichText_fn, onFocus_fn, checkHeadless_fn, registerCopyHandler_fn, insertNewFileData_fn, getPluginKeyName_fn, createExtensionService_fn, createCommandService_fn, createConverter_fn, initMedia_fn, initFonts_fn, checkFonts_fn, determineUnsupportedFonts_fn, createSchema_fn, generatePmData_fn, createView_fn, onCollaborationReady_fn, initComments_fn, dispatchTransaction_fn, handleNodeSelection_fn, prepareDocumentForImport_fn, prepareDocumentForExport_fn, endCollaboration_fn, validateDocumentInit_fn, validateDocumentExport_fn, initDevTools_fn, _map, _editor2, _descriptors, _collections, _editorEntries, _maxCachedEditors, _editorAccessOrder, _pendingCreations, _cacheHits, _cacheMisses, _evictions, _HeaderFooterEditorManager_instances, hasConverter_fn, extractCollections_fn, collectDescriptors_fn, teardownMissingEditors_fn, teardownEditors_fn, createEditor_fn, createEditorContainer_fn, registerConverterEditor_fn, unregisterConverterEditor_fn, updateAccessOrder_fn, enforceCacheSizeLimit_fn, _manager, _mediaFiles, _blockCache, _HeaderFooterLayoutAdapter_instances, getBlocks_fn, getConverterContext_fn, _instances, _options, _editor3, _visibleHost, _viewportHost, _painterHost, _selectionOverlay, _hiddenHost, _layoutOptions, _layoutState, _domPainter, _layoutError, _layoutErrorState, _errorBanner, _errorBannerMessage, _telemetryEmitter, _renderScheduled, _pendingDocChange, _isRerendering, _selectionUpdateScheduled, _remoteCursorUpdateScheduled, _rafHandle, _editorListeners, _sectionMetadata, _documentMode, _inputBridge, _trackedChangesMode, _trackedChangesEnabled, _trackedChangesOverrides, _headerFooterManager, _headerFooterAdapter, _headerFooterIdentifier, _headerLayoutResults, _footerLayoutResults, _headerDecorationProvider, _footerDecorationProvider, _headerFooterManagerCleanups, _headerRegions, _footerRegions, _session, _activeHeaderFooterEditor, _hoverOverlay, _hoverTooltip, _modeBanner, _ariaLiveRegion, _hoverRegion, _clickCount, _lastClickTime, _lastClickPosition, _lastSelectedImageBlockId, _remoteCursorState, _remoteCursorDirty, _remoteCursorOverlay, _localSelectionLayer, _awarenessCleanup, _scrollCleanup, _remoteCursorRafHandle, _scrollTimeout, _PresentationEditor_instances, aggregateLayoutBounds_fn, safeCleanup_fn, setupEditorListeners_fn, setupCollaborationCursors_fn, normalizeAwarenessStates_fn, getFallbackColor_fn, getValidatedColor_fn, scheduleRemoteCursorUpdate_fn, scheduleRemoteCursorReRender_fn, updateRemoteCursors_fn, renderRemoteCursors_fn, renderRemoteCaret_fn, renderRemoteCursorLabel_fn, renderRemoteSelection_fn, setupPointerHandlers_fn, setupInputBridge_fn, initHeaderFooterRegistry_fn, _handlePointerDown, getFirstTextPosition_fn, registerPointerClick_fn, selectWordAt_fn, selectParagraphAt_fn, isWordCharacter_fn, _handlePointerMove, _handlePointerLeave, _handleDoubleClick, _handleKeyDown, focusHeaderFooterShortcut_fn, scheduleRerender_fn, flushRerenderQueue_fn, rerender_fn, ensurePainter_fn, scheduleSelectionUpdate_fn, updateSelection_fn, resolveLayoutOptions_fn, buildHeaderFooterInput_fn, computeHeaderFooterConstraints_fn, updateDecorationProviders_fn, createDecorationProvider_fn, findHeaderFooterPageForPageNumber_fn, computeDecorationBox_fn, rebuildHeaderFooterRegions_fn, hitTestHeaderFooterRegion_fn, pointInRegion_fn, activateHeaderFooterRegion_fn, enterHeaderFooterMode_fn, exitHeaderFooterMode_fn, getActiveDomTarget_fn, emitHeaderFooterModeChanged_fn, emitHeaderFooterEditingContext_fn, updateAwarenessSession_fn, updateModeBanner_fn, announce_fn, validateHeaderFooterEditPermission_fn, emitHeaderFooterEditBlocked_fn, resolveDescriptorForRegion_fn, getBodyPageHeight_fn, getHeaderFooterPageHeight_fn, renderSelectionRects_fn, renderHoverRegion_fn, clearHoverRegion_fn, renderCaretOverlay_fn, getHeaderFooterContext_fn, computeHeaderFooterSelectionRects_fn, computeHeaderFooterCaretRect_fn, syncTrackedChangesPreferences_fn, deriveTrackedChangesMode_fn, deriveTrackedChangesEnabled_fn, getTrackChangesPluginState_fn, computeDefaultLayoutDefaults_fn, parseColumns_fn, inchesToPx_fn, applyZoom_fn, createLayoutMetrics_fn, convertPageLocalToOverlayCoords_fn, normalizeClientPoint_fn, computeCaretLayoutRect_fn, computeCaretLayoutRectFromDOM_fn, computeTableCaretLayoutRect_fn, findLineContainingPos_fn, lineHeightBeforeIndex_fn, getCurrentPageIndex_fn, findRegionForPage_fn, handleLayoutError_fn, decorateError_fn, showLayoutErrorBanner_fn, dismissErrorBanner_fn, createHiddenHost_fn, _windowRoot, _layoutSurfaces, _getTargetDom, _onTargetChanged, _listeners, _currentTarget, _destroyed, _useWindowFallback, _PresentationInputBridge_instances, addListener_fn, dispatchToTarget_fn, forwardKeyboardEvent_fn, forwardTextEvent_fn, forwardCompositionEvent_fn, forwardContextMenu_fn, isEventOnActiveTarget_fn, shouldSkipSurface_fn, isInLayoutSurface_fn, getListenerTargets_fn, isPlainCharacterKey_fn, _DocumentSectionView_instances, init_fn2, addToolTip_fn, _ParagraphNodeView_instances, checkShouldUpdate_fn, updateHTMLAttributes_fn, updateDOMStyles_fn, resolveNeighborParagraphProperties_fn, updateListStyles_fn, initList_fn, checkIsList_fn, createMarker_fn, createSeparator_fn, calculateTabSeparatorStyle_fn, calculateMarkerStyle_fn, removeList_fn, getParagraphContext_fn, scheduleAnimation_fn, cancelScheduledAnimation_fn, _FieldAnnotationView_instances, createAnnotation_fn, _AutoPageNumberNodeView_instances, renderDom_fn, scheduleUpdateNodeStyle_fn, _VectorShapeView_instances, ensureParentPositioned_fn, _ShapeGroupView_instances, ensureParentPositioned_fn2;
39697
+ var _Attribute_static, getGlobalAttributes_fn, getNodeAndMarksAttributes_fn, _Schema_static, createNodesSchema_fn, createMarksSchema_fn, _events, _ExtensionService_instances, setupExtensions_fn, attachEditorEvents_fn, _editor, _stateValidators, _xmlValidators, _requiredNodeTypes, _requiredMarkTypes, _SuperValidator_instances, initializeValidators_fn, collectValidatorRequirements_fn, analyzeDocument_fn, dispatchWithFallback_fn, _commandService, _Editor_instances, initContainerElement_fn, init_fn, initRichText_fn, onFocus_fn, checkHeadless_fn, registerCopyHandler_fn, insertNewFileData_fn, getPluginKeyName_fn, createExtensionService_fn, createCommandService_fn, createConverter_fn, initMedia_fn, initFonts_fn, checkFonts_fn, determineUnsupportedFonts_fn, createSchema_fn, generatePmData_fn, createView_fn, onCollaborationReady_fn, initComments_fn, dispatchTransaction_fn, handleNodeSelection_fn, prepareDocumentForImport_fn, prepareDocumentForExport_fn, endCollaboration_fn, validateDocumentInit_fn, validateDocumentExport_fn, initDevTools_fn, _map, _editor2, _descriptors, _collections, _editorEntries, _maxCachedEditors, _editorAccessOrder, _pendingCreations, _cacheHits, _cacheMisses, _evictions, _HeaderFooterEditorManager_instances, hasConverter_fn, extractCollections_fn, collectDescriptors_fn, teardownMissingEditors_fn, teardownEditors_fn, createEditor_fn, createEditorContainer_fn, registerConverterEditor_fn, unregisterConverterEditor_fn, updateAccessOrder_fn, enforceCacheSizeLimit_fn, _manager, _mediaFiles, _blockCache, _HeaderFooterLayoutAdapter_instances, getBlocks_fn, getConverterContext_fn, _selectionOverlay, _activeEditorHost, _activeDecorationContainer, _activeRegion, _borderLine, _EditorOverlayManager_instances, findDecorationContainer_fn, ensureEditorHost_fn, positionEditorHost_fn, showHeaderFooterBorder_fn, hideHeaderFooterBorder_fn, _instances, _options, _editor3, _visibleHost, _viewportHost, _painterHost, _selectionOverlay2, _hiddenHost, _layoutOptions, _layoutState, _domPainter, _layoutError, _layoutErrorState, _errorBanner, _errorBannerMessage, _telemetryEmitter, _renderScheduled, _pendingDocChange, _isRerendering, _selectionUpdateScheduled, _remoteCursorUpdateScheduled, _rafHandle, _editorListeners, _sectionMetadata, _documentMode, _inputBridge, _trackedChangesMode, _trackedChangesEnabled, _trackedChangesOverrides, _headerFooterManager, _headerFooterAdapter, _headerFooterIdentifier, _headerLayoutResults, _footerLayoutResults, _headerDecorationProvider, _footerDecorationProvider, _headerFooterManagerCleanups, _headerRegions, _footerRegions, _session, _activeHeaderFooterEditor, _overlayManager, _hoverOverlay, _hoverTooltip, _modeBanner, _ariaLiveRegion, _hoverRegion, _clickCount, _lastClickTime, _lastClickPosition, _lastSelectedImageBlockId, _remoteCursorState, _remoteCursorDirty, _remoteCursorOverlay, _localSelectionLayer, _awarenessCleanup, _scrollCleanup, _remoteCursorRafHandle, _scrollTimeout, _PresentationEditor_instances, aggregateLayoutBounds_fn, safeCleanup_fn, setupEditorListeners_fn, setupCollaborationCursors_fn, normalizeAwarenessStates_fn, getFallbackColor_fn, getValidatedColor_fn, scheduleRemoteCursorUpdate_fn, scheduleRemoteCursorReRender_fn, updateRemoteCursors_fn, renderRemoteCursors_fn, renderRemoteCaret_fn, renderRemoteCursorLabel_fn, renderRemoteSelection_fn, setupPointerHandlers_fn, setupInputBridge_fn, initHeaderFooterRegistry_fn, _handlePointerDown, getFirstTextPosition_fn, registerPointerClick_fn, selectWordAt_fn, selectParagraphAt_fn, isWordCharacter_fn, _handlePointerMove, _handlePointerLeave, _handleDoubleClick, _handleKeyDown, focusHeaderFooterShortcut_fn, scheduleRerender_fn, flushRerenderQueue_fn, rerender_fn, ensurePainter_fn, scheduleSelectionUpdate_fn, updateSelection_fn, resolveLayoutOptions_fn, buildHeaderFooterInput_fn, computeHeaderFooterConstraints_fn, updateDecorationProviders_fn, createDecorationProvider_fn, findHeaderFooterPageForPageNumber_fn, computeDecorationBox_fn, rebuildHeaderFooterRegions_fn, hitTestHeaderFooterRegion_fn, pointInRegion_fn, activateHeaderFooterRegion_fn, enterHeaderFooterMode_fn, exitHeaderFooterMode_fn, getActiveDomTarget_fn, emitHeaderFooterModeChanged_fn, emitHeaderFooterEditingContext_fn, updateAwarenessSession_fn, updateModeBanner_fn, announce_fn, validateHeaderFooterEditPermission_fn, emitHeaderFooterEditBlocked_fn, resolveDescriptorForRegion_fn, createDefaultHeaderFooter_fn, getPageElement_fn, scrollPageIntoView_fn, waitForPageMount_fn, getBodyPageHeight_fn, getHeaderFooterPageHeight_fn, renderSelectionRects_fn, renderHoverRegion_fn, clearHoverRegion_fn, renderCaretOverlay_fn, getHeaderFooterContext_fn, computeHeaderFooterSelectionRects_fn, syncTrackedChangesPreferences_fn, deriveTrackedChangesMode_fn, deriveTrackedChangesEnabled_fn, getTrackChangesPluginState_fn, computeDefaultLayoutDefaults_fn, parseColumns_fn, inchesToPx_fn, applyZoom_fn, createLayoutMetrics_fn, convertPageLocalToOverlayCoords_fn, normalizeClientPoint_fn, computeCaretLayoutRect_fn, computeCaretLayoutRectFromDOM_fn, computeTableCaretLayoutRect_fn, findLineContainingPos_fn, lineHeightBeforeIndex_fn, getCurrentPageIndex_fn, findRegionForPage_fn, handleLayoutError_fn, decorateError_fn, showLayoutErrorBanner_fn, dismissErrorBanner_fn, createHiddenHost_fn, _windowRoot, _layoutSurfaces, _getTargetDom, _onTargetChanged, _listeners, _currentTarget, _destroyed, _useWindowFallback, _PresentationInputBridge_instances, addListener_fn, dispatchToTarget_fn, forwardKeyboardEvent_fn, forwardTextEvent_fn, forwardCompositionEvent_fn, forwardContextMenu_fn, isEventOnActiveTarget_fn, shouldSkipSurface_fn, isInLayoutSurface_fn, getListenerTargets_fn, isPlainCharacterKey_fn, _DocumentSectionView_instances, init_fn2, addToolTip_fn, _ParagraphNodeView_instances, checkShouldUpdate_fn, updateHTMLAttributes_fn, updateDOMStyles_fn, resolveNeighborParagraphProperties_fn, updateListStyles_fn, initList_fn, checkIsList_fn, createMarker_fn, createSeparator_fn, calculateTabSeparatorStyle_fn, calculateMarkerStyle_fn, removeList_fn, getParagraphContext_fn, scheduleAnimation_fn, cancelScheduledAnimation_fn, _FieldAnnotationView_instances, createAnnotation_fn, _AutoPageNumberNodeView_instances, renderDom_fn, scheduleUpdateNodeStyle_fn, _VectorShapeView_instances, ensureParentPositioned_fn, _ShapeGroupView_instances, ensureParentPositioned_fn2;
39506
39698
  var GOOD_LEAF_SIZE = 200;
39507
39699
  var RopeSequence = function RopeSequence2() {
39508
39700
  };
@@ -50688,50 +50880,90 @@ const getCommentPositionsById = (commentId, doc2) => {
50688
50880
  return positions;
50689
50881
  };
50690
50882
  const prepareCommentsForExport = (doc2, tr, schema, comments = []) => {
50883
+ const commentMap = /* @__PURE__ */ new Map();
50884
+ comments.forEach((c2) => {
50885
+ commentMap.set(c2.commentId, c2);
50886
+ });
50887
+ new Set(comments.filter((c2) => c2.parentCommentId).map((c2) => c2.parentCommentId));
50691
50888
  const startNodes = [];
50692
50889
  const endNodes = [];
50693
50890
  const seen = /* @__PURE__ */ new Set();
50694
50891
  doc2.descendants((node, pos) => {
50695
- const commentMarks = node.marks?.filter((mark) => mark.type.name === CommentMarkName);
50892
+ const commentMarks = node.marks?.filter((mark) => mark.type.name === CommentMarkName) || [];
50696
50893
  commentMarks.forEach((commentMark) => {
50697
- if (commentMark) {
50698
- const { attrs = {} } = commentMark;
50699
- const { commentId } = attrs;
50700
- if (commentId === "pending") return;
50701
- if (seen.has(commentId)) return;
50702
- seen.add(commentId);
50703
- const commentStartNodeAttrs = getPreparedComment(commentMark.attrs);
50704
- const startNode = schema.nodes.commentRangeStart.create(commentStartNodeAttrs);
50894
+ const { attrs = {} } = commentMark;
50895
+ const { commentId } = attrs;
50896
+ if (commentId === "pending") return;
50897
+ if (seen.has(commentId)) return;
50898
+ seen.add(commentId);
50899
+ const comment = commentMap.get(commentId);
50900
+ const parentCommentId = comment?.parentCommentId;
50901
+ const commentStartNodeAttrs = getPreparedComment(commentMark.attrs);
50902
+ const startNode = schema.nodes.commentRangeStart.create(commentStartNodeAttrs);
50903
+ startNodes.push({
50904
+ pos,
50905
+ node: startNode,
50906
+ commentId,
50907
+ parentCommentId
50908
+ });
50909
+ const endNode = schema.nodes.commentRangeEnd.create(commentStartNodeAttrs);
50910
+ endNodes.push({
50911
+ pos: pos + node.nodeSize,
50912
+ node: endNode,
50913
+ commentId,
50914
+ parentCommentId
50915
+ });
50916
+ const childComments = comments.filter((c2) => c2.parentCommentId === commentId).sort((a, b2) => a.createdTime - b2.createdTime);
50917
+ childComments.forEach((c2) => {
50918
+ if (seen.has(c2.commentId)) return;
50919
+ seen.add(c2.commentId);
50920
+ const childMark = getPreparedComment({
50921
+ commentId: c2.commentId,
50922
+ internal: c2.isInternal
50923
+ });
50924
+ const childStartNode = schema.nodes.commentRangeStart.create(childMark);
50705
50925
  startNodes.push({
50706
50926
  pos,
50707
- node: startNode
50927
+ node: childStartNode,
50928
+ commentId: c2.commentId,
50929
+ parentCommentId: c2.parentCommentId
50708
50930
  });
50709
- const endNode = schema.nodes.commentRangeEnd.create(commentStartNodeAttrs);
50931
+ const childEndNode = schema.nodes.commentRangeEnd.create(childMark);
50710
50932
  endNodes.push({
50711
50933
  pos: pos + node.nodeSize,
50712
- node: endNode
50934
+ node: childEndNode,
50935
+ commentId: c2.commentId,
50936
+ parentCommentId: c2.parentCommentId
50713
50937
  });
50714
- const parentId = commentId;
50715
- if (parentId) {
50716
- const childComments = comments.filter((c2) => c2.parentCommentId === parentId).sort((a, b2) => a.createdTime - b2.createdTime);
50717
- childComments.forEach((c2) => {
50718
- const childMark = getPreparedComment(c2);
50719
- const childStartNode = schema.nodes.commentRangeStart.create(childMark);
50720
- seen.add(c2.commentId);
50721
- startNodes.push({
50722
- pos,
50723
- node: childStartNode
50724
- });
50725
- const childEndNode = schema.nodes.commentRangeEnd.create(childMark);
50726
- endNodes.push({
50727
- pos: pos + node.nodeSize,
50728
- node: childEndNode
50729
- });
50730
- });
50731
- }
50732
- }
50938
+ });
50733
50939
  });
50734
50940
  });
50941
+ startNodes.sort((a, b2) => {
50942
+ if (a.pos !== b2.pos) return a.pos - b2.pos;
50943
+ const aIsParentOfB = a.commentId === b2.parentCommentId;
50944
+ const bIsParentOfA = b2.commentId === a.parentCommentId;
50945
+ if (aIsParentOfB) return -1;
50946
+ if (bIsParentOfA) return 1;
50947
+ if (a.parentCommentId && a.parentCommentId === b2.parentCommentId) {
50948
+ const aComment = commentMap.get(a.commentId);
50949
+ const bComment = commentMap.get(b2.commentId);
50950
+ return (aComment?.createdTime || 0) - (bComment?.createdTime || 0);
50951
+ }
50952
+ return 0;
50953
+ });
50954
+ endNodes.sort((a, b2) => {
50955
+ if (a.pos !== b2.pos) return a.pos - b2.pos;
50956
+ const aIsParentOfB = a.commentId === b2.parentCommentId;
50957
+ const bIsParentOfA = b2.commentId === a.parentCommentId;
50958
+ if (aIsParentOfB) return -1;
50959
+ if (bIsParentOfA) return 1;
50960
+ if (a.parentCommentId && a.parentCommentId === b2.parentCommentId) {
50961
+ const aComment = commentMap.get(a.commentId);
50962
+ const bComment = commentMap.get(b2.commentId);
50963
+ return (aComment?.createdTime || 0) - (bComment?.createdTime || 0);
50964
+ }
50965
+ return 0;
50966
+ });
50735
50967
  startNodes.forEach((n) => {
50736
50968
  const { pos, node } = n;
50737
50969
  const mappedPos = tr.mapping.map(pos);
@@ -53273,7 +53505,7 @@ const isHeadless = (editor) => {
53273
53505
  const shouldSkipNodeView = (editor) => {
53274
53506
  return isHeadless(editor);
53275
53507
  };
53276
- const summaryVersion = "1.0.0-beta.17";
53508
+ const summaryVersion = "1.0.0-beta.18";
53277
53509
  const nodeKeys = ["group", "content", "marks", "inline", "atom", "defining", "code", "tableRole", "summary"];
53278
53510
  const markKeys = ["group", "inclusive", "excludes", "spanning", "code"];
53279
53511
  function mapAttributes(attrs) {
@@ -54049,7 +54281,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
54049
54281
  { default: remarkStringify },
54050
54282
  { default: remarkGfm }
54051
54283
  ] = await Promise.all([
54052
- Promise.resolve().then(() => require("./index-VCeRjVPO-DjkejB6t.cjs")),
54284
+ Promise.resolve().then(() => require("./index-DpnfmQSg-D54nF5iO.cjs")),
54053
54285
  Promise.resolve().then(() => require("./index-DRCvimau-H4Ck3S9a.cjs")),
54054
54286
  Promise.resolve().then(() => require("./index-C_x_N6Uh-Db3CUJMX.cjs")),
54055
54287
  Promise.resolve().then(() => require("./index-D_sWOSiG-BtDZzJ6I.cjs")),
@@ -54254,7 +54486,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
54254
54486
  * Process collaboration migrations
54255
54487
  */
54256
54488
  processCollaborationMigrations() {
54257
- console.debug("[checkVersionMigrations] Current editor version", "1.0.0-beta.17");
54489
+ console.debug("[checkVersionMigrations] Current editor version", "1.0.0-beta.18");
54258
54490
  if (!this.options.ydoc) return;
54259
54491
  const metaMap = this.options.ydoc.getMap("meta");
54260
54492
  let docVersion = metaMap.get("version");
@@ -54956,6 +55188,15 @@ function extractColumns(elements) {
54956
55188
  gap: gapInches * PX_PER_INCH$2
54957
55189
  };
54958
55190
  }
55191
+ function extractVerticalAlign(elements) {
55192
+ const vAlign = elements.find((el) => el?.name === "w:vAlign");
55193
+ if (!vAlign?.attributes) return void 0;
55194
+ const val = vAlign.attributes["w:val"];
55195
+ if (val === "top" || val === "center" || val === "bottom" || val === "both") {
55196
+ return val;
55197
+ }
55198
+ return void 0;
55199
+ }
54959
55200
  function extractSectionData(para) {
54960
55201
  const attrs = para.attrs ?? {};
54961
55202
  let { headerPx, footerPx } = extractNormalizedMargins(attrs);
@@ -54972,7 +55213,20 @@ function extractSectionData(para) {
54972
55213
  const footerRefs = extractHeaderFooterRefs(sectPrElements, "w:footerReference");
54973
55214
  const numbering = extractPageNumbering(sectPrElements);
54974
55215
  const columnsPx = extractColumns(sectPrElements);
54975
- return { headerPx, footerPx, type: type2, pageSizePx, orientation, columnsPx, titlePg, headerRefs, footerRefs, numbering };
55216
+ const vAlign = extractVerticalAlign(sectPrElements);
55217
+ return {
55218
+ headerPx,
55219
+ footerPx,
55220
+ type: type2,
55221
+ pageSizePx,
55222
+ orientation,
55223
+ columnsPx,
55224
+ titlePg,
55225
+ headerRefs,
55226
+ footerRefs,
55227
+ numbering,
55228
+ vAlign
55229
+ };
54976
55230
  }
54977
55231
  function isSectPrElement(value) {
54978
55232
  return typeof value === "object" && value !== null && value.type === "element" && value.name === "w:sectPr";
@@ -55009,7 +55263,8 @@ function createSectionBreakBlock(section, blockIdGen, extraAttrs) {
55009
55263
  ...section.columns && { columns: section.columns },
55010
55264
  ...section.numbering ? { numbering: section.numbering } : {},
55011
55265
  ...section.headerRefs && { headerRefs: section.headerRefs },
55012
- ...section.footerRefs && { footerRefs: section.footerRefs }
55266
+ ...section.footerRefs && { footerRefs: section.footerRefs },
55267
+ ...section.vAlign && { vAlign: section.vAlign }
55013
55268
  };
55014
55269
  return result;
55015
55270
  }
@@ -55081,7 +55336,8 @@ function buildSectionRangesFromParagraphs(paragraphs, hasBodySectPr) {
55081
55336
  titlePg: sectionData.titlePg ?? false,
55082
55337
  headerRefs: sectionData.headerRefs,
55083
55338
  footerRefs: sectionData.footerRefs,
55084
- numbering: sectionData.numbering
55339
+ numbering: sectionData.numbering,
55340
+ vAlign: sectionData.vAlign
55085
55341
  };
55086
55342
  ranges.push(range2);
55087
55343
  currentStart = item.index + 1;
@@ -55120,7 +55376,8 @@ function createFinalSectionFromBodySectPr(bodySectPr, currentStart, totalParagra
55120
55376
  type: bodySectionData.type ?? DEFAULT_BODY_SECTION_TYPE,
55121
55377
  titlePg: bodySectionData.titlePg ?? false,
55122
55378
  headerRefs: bodySectionData.headerRefs,
55123
- footerRefs: bodySectionData.footerRefs
55379
+ footerRefs: bodySectionData.footerRefs,
55380
+ vAlign: bodySectionData.vAlign
55124
55381
  };
55125
55382
  }
55126
55383
  function createDefaultFinalSection(currentStart, totalParagraphs, sectionIndex) {
@@ -56783,8 +57040,9 @@ const normalizeOoxmlTabs = (tabs) => {
56783
57040
  for (const entry of tabs) {
56784
57041
  if (!entry || typeof entry !== "object") continue;
56785
57042
  const rawEntry = entry;
56786
- const source = rawEntry.tab && typeof rawEntry.tab === "object" ? rawEntry.tab : rawEntry;
56787
- const posTwips = resolveTabPosition(source);
57043
+ const isNestedTab = Boolean(rawEntry.tab && typeof rawEntry.tab === "object");
57044
+ const source = isNestedTab ? rawEntry.tab : rawEntry;
57045
+ const posTwips = resolveTabPosition(source, isNestedTab);
56788
57046
  if (posTwips == null) continue;
56789
57047
  const val = normalizeTabVal(source.val ?? source.align ?? source.alignment ?? source.type ?? source.tabType);
56790
57048
  if (!val) continue;
@@ -56798,7 +57056,7 @@ const normalizeOoxmlTabs = (tabs) => {
56798
57056
  }
56799
57057
  return normalized.length > 0 ? normalized : void 0;
56800
57058
  };
56801
- const resolveTabPosition = (source) => {
57059
+ const resolveTabPosition = (source, treatPosAsTwips = false) => {
56802
57060
  const originalPos = pickNumber(source.originalPos);
56803
57061
  if (originalPos != null) {
56804
57062
  return originalPos;
@@ -56807,6 +57065,9 @@ const resolveTabPosition = (source) => {
56807
57065
  if (posValue == null) {
56808
57066
  return void 0;
56809
57067
  }
57068
+ if (treatPosAsTwips) {
57069
+ return posValue;
57070
+ }
56810
57071
  if (posValue > TWIPS_THRESHOLD) {
56811
57072
  return posValue;
56812
57073
  } else {
@@ -58794,19 +59055,21 @@ const computeParagraphAttrs = (para, styleContext, listCounterContext, converter
58794
59055
  }
58795
59056
  const tabObj = tab;
58796
59057
  const val = typeof tabObj.tabType === "string" ? tabObj.tabType : typeof tabObj.val === "string" ? tabObj.val : void 0;
58797
- const pos = pickNumber(tabObj.originalPos ?? tabObj.pos);
59058
+ const originalPos = pickNumber(tabObj.originalPos);
59059
+ const pos = originalPos ?? pickNumber(tabObj.pos);
58798
59060
  if (!val || pos == null) {
58799
59061
  continue;
58800
59062
  }
58801
59063
  const normalized = { val, pos };
59064
+ if (originalPos != null && Number.isFinite(originalPos)) {
59065
+ normalized.originalPos = originalPos;
59066
+ } else {
59067
+ normalized.originalPos = pos;
59068
+ }
58802
59069
  const leader = tabObj.leader;
58803
59070
  if (typeof leader === "string" && leader.length > 0) {
58804
59071
  normalized.leader = leader;
58805
59072
  }
58806
- const originalPos = pickNumber(tabObj.originalPos);
58807
- if (originalPos != null && Number.isFinite(originalPos)) {
58808
- normalized.originalPos = originalPos;
58809
- }
58810
59073
  unwrapped.push(normalized);
58811
59074
  continue;
58812
59075
  }
@@ -59648,11 +59911,11 @@ const applyLinkedStyleToRun = (run2, options) => {
59648
59911
  if (!maps.length) return;
59649
59912
  const finalStyles = Object.assign({}, ...maps);
59650
59913
  const fontFamily2 = extractValue(finalStyles["font-family"]);
59651
- if (typeof fontFamily2 === "string" && fontFamily2 && run2.fontFamily === options.defaultFont) {
59914
+ if (typeof fontFamily2 === "string" && fontFamily2) {
59652
59915
  run2.fontFamily = fontFamily2;
59653
59916
  }
59654
59917
  const fontSize2 = toPxNumber(finalStyles["font-size"]);
59655
- if (fontSize2 != null && run2.fontSize === options.defaultSize) {
59918
+ if (fontSize2 != null) {
59656
59919
  run2.fontSize = fontSize2;
59657
59920
  }
59658
59921
  const letterSpacing = toPxNumber(finalStyles["letter-spacing"]);
@@ -60015,9 +60278,7 @@ function paragraphToFlowBlocks$1(para, nextBlockId, positions, defaultFont, defa
60015
60278
  resolver: linkedStyleResolver,
60016
60279
  paragraphStyleId,
60017
60280
  inlineStyleId,
60018
- runStyleId,
60019
- defaultFont,
60020
- defaultSize
60281
+ runStyleId
60021
60282
  });
60022
60283
  };
60023
60284
  const visitNode = (node, inheritedMarks = [], activeSdt, activeRunStyleId = null) => {
@@ -60027,7 +60288,8 @@ function paragraphToFlowBlocks$1(para, nextBlockId, positions, defaultFont, defa
60027
60288
  positions,
60028
60289
  defaultFont,
60029
60290
  defaultSize,
60030
- inheritedMarks,
60291
+ [],
60292
+ // Empty marks - will be applied after linked styles
60031
60293
  activeSdt,
60032
60294
  hyperlinkConfig,
60033
60295
  themeColors
@@ -60035,6 +60297,7 @@ function paragraphToFlowBlocks$1(para, nextBlockId, positions, defaultFont, defa
60035
60297
  const inlineStyleId = getInlineStyleId(inheritedMarks);
60036
60298
  applyRunStyles2(run2, inlineStyleId, activeRunStyleId);
60037
60299
  applyBaseRunDefaults(run2, baseRunDefaults, defaultFont, defaultSize);
60300
+ applyMarksToRun(run2, [...node.marks ?? [], ...inheritedMarks ?? []], hyperlinkConfig, themeColors);
60038
60301
  currentRuns.push(run2);
60039
60302
  return;
60040
60303
  }
@@ -61909,13 +62172,14 @@ function processFragment(fragmentEl, viewX, viewY) {
61909
62172
  if (!Number.isFinite(lineStart) || !Number.isFinite(lineEnd)) {
61910
62173
  return null;
61911
62174
  }
61912
- const spanEls = Array.from(lineEl.querySelectorAll("span"));
62175
+ const spanEls = Array.from(lineEl.querySelectorAll("span, a"));
61913
62176
  log(
61914
- "Spans in line:",
62177
+ "Spans/anchors in line:",
61915
62178
  spanEls.map((el, i) => {
61916
62179
  const rect = el.getBoundingClientRect();
61917
62180
  return {
61918
62181
  index: i,
62182
+ tag: el.tagName,
61919
62183
  pmStart: el.dataset.pmStart,
61920
62184
  pmEnd: el.dataset.pmEnd,
61921
62185
  text: el.textContent?.substring(0, 20) + (el.textContent && el.textContent.length > 20 ? "..." : ""),
@@ -61935,32 +62199,33 @@ function processFragment(fragmentEl, viewX, viewY) {
61935
62199
  if (viewX >= lastRect.right) {
61936
62200
  return lineEnd;
61937
62201
  }
61938
- const targetSpan = findSpanAtX(spanEls, viewX);
61939
- if (!targetSpan) {
62202
+ const targetEl = findSpanAtX(spanEls, viewX);
62203
+ if (!targetEl) {
61940
62204
  return lineStart;
61941
62205
  }
61942
- const spanStart = Number(targetSpan.dataset.pmStart ?? "NaN");
61943
- const spanEnd = Number(targetSpan.dataset.pmEnd ?? "NaN");
61944
- const targetRect = targetSpan.getBoundingClientRect();
61945
- log("Target span:", {
62206
+ const spanStart = Number(targetEl.dataset.pmStart ?? "NaN");
62207
+ const spanEnd = Number(targetEl.dataset.pmEnd ?? "NaN");
62208
+ const targetRect = targetEl.getBoundingClientRect();
62209
+ log("Target element:", {
62210
+ tag: targetEl.tagName,
61946
62211
  pmStart: spanStart,
61947
62212
  pmEnd: spanEnd,
61948
- text: targetSpan.textContent?.substring(0, 30),
61949
- visibility: targetSpan.style.visibility,
62213
+ text: targetEl.textContent?.substring(0, 30),
62214
+ visibility: targetEl.style.visibility,
61950
62215
  rect: { left: targetRect.left, right: targetRect.right, width: targetRect.width }
61951
62216
  });
61952
62217
  if (!Number.isFinite(spanStart) || !Number.isFinite(spanEnd)) {
61953
62218
  return null;
61954
62219
  }
61955
- const firstChild = targetSpan.firstChild;
62220
+ const firstChild = targetEl.firstChild;
61956
62221
  if (!firstChild || firstChild.nodeType !== Node.TEXT_NODE || !firstChild.textContent) {
61957
- const spanRect = targetSpan.getBoundingClientRect();
61958
- const closerToLeft = Math.abs(viewX - spanRect.left) <= Math.abs(viewX - spanRect.right);
62222
+ const elRect = targetEl.getBoundingClientRect();
62223
+ const closerToLeft = Math.abs(viewX - elRect.left) <= Math.abs(viewX - elRect.right);
61959
62224
  const snapPos = closerToLeft ? spanStart : spanEnd;
61960
62225
  return snapPos;
61961
62226
  }
61962
62227
  const textNode = firstChild;
61963
- const charIndex = findCharIndexAtX(textNode, targetSpan, viewX);
62228
+ const charIndex = findCharIndexAtX(textNode, targetEl, viewX);
61964
62229
  const pos = spanStart + charIndex;
61965
62230
  return pos;
61966
62231
  }
@@ -61998,7 +62263,8 @@ function findSpanAtX(spanEls, viewX) {
61998
62263
  const span = spanEls[i];
61999
62264
  const rect = span.getBoundingClientRect();
62000
62265
  if (viewX >= rect.left && viewX <= rect.right) {
62001
- log("findSpanAtX: Found containing span at index", i, {
62266
+ log("findSpanAtX: Found containing element at index", i, {
62267
+ tag: span.tagName,
62002
62268
  pmStart: span.dataset.pmStart,
62003
62269
  pmEnd: span.dataset.pmEnd,
62004
62270
  rect: { left: rect.left, right: rect.right },
@@ -62010,16 +62276,17 @@ function findSpanAtX(spanEls, viewX) {
62010
62276
  targetSpan = span;
62011
62277
  }
62012
62278
  }
62013
- log("findSpanAtX: No containing span, using nearest:", {
62279
+ log("findSpanAtX: No containing element, using nearest:", {
62280
+ tag: targetSpan.tagName,
62014
62281
  pmStart: targetSpan.dataset.pmStart,
62015
62282
  pmEnd: targetSpan.dataset.pmEnd,
62016
62283
  viewX
62017
62284
  });
62018
62285
  return targetSpan;
62019
62286
  }
62020
- function findCharIndexAtX(textNode, span, targetX) {
62287
+ function findCharIndexAtX(textNode, container, targetX) {
62021
62288
  const text = textNode.textContent ?? "";
62022
- const baseLeft = span.getBoundingClientRect().left;
62289
+ const baseLeft = container.getBoundingClientRect().left;
62023
62290
  const range2 = document.createRange();
62024
62291
  let lo = 0;
62025
62292
  let hi = text.length;
@@ -62351,6 +62618,9 @@ function computeNextSectionPropsAtBreak(blocks) {
62351
62618
  if (source.orientation) {
62352
62619
  props.orientation = source.orientation;
62353
62620
  }
62621
+ if (source.vAlign) {
62622
+ props.vAlign = source.vAlign;
62623
+ }
62354
62624
  return props;
62355
62625
  };
62356
62626
  docxBreakIndexes.forEach((index2, ordinal) => {
@@ -63751,6 +64021,10 @@ function cloneBlockWithResolvedTokens(block, displayPageText, totalPagesStr) {
63751
64021
  runs: clonedRuns
63752
64022
  };
63753
64023
  }
64024
+ const DEFAULT_PARAGRAPH_LINE_HEIGHT_PX = 20;
64025
+ function hasHeight(fragment) {
64026
+ return fragment.kind === "image" || fragment.kind === "drawing" || fragment.kind === "table";
64027
+ }
63754
64028
  const DEFAULT_PAGE_SIZE$2 = { w: 612, h: 792 };
63755
64029
  const DEFAULT_MARGINS$2 = { top: 72, right: 72, bottom: 72, left: 72 };
63756
64030
  const COLUMN_EPSILON = 1e-4;
@@ -63845,6 +64119,8 @@ function layoutDocument(blocks, measures, options = {}) {
63845
64119
  let pendingColumns = null;
63846
64120
  let activeOrientation = null;
63847
64121
  let pendingOrientation = null;
64122
+ let activeVAlign = null;
64123
+ let pendingVAlign = null;
63848
64124
  const floatManager = createFloatingObjectManager(
63849
64125
  normalizeColumns(activeColumns, contentWidth),
63850
64126
  { left: margins.left, right: margins.right },
@@ -63950,6 +64226,9 @@ function layoutDocument(blocks, measures, options = {}) {
63950
64226
  if (activeOrientation) {
63951
64227
  page.orientation = activeOrientation;
63952
64228
  }
64229
+ if (activeVAlign && activeVAlign !== "top") {
64230
+ page.vAlign = activeVAlign;
64231
+ }
63953
64232
  return page;
63954
64233
  };
63955
64234
  let pageCount = 0;
@@ -64028,6 +64307,10 @@ function layoutDocument(blocks, measures, options = {}) {
64028
64307
  activeSectionRefs = pendingSectionRefs;
64029
64308
  pendingSectionRefs = null;
64030
64309
  }
64310
+ if (pendingVAlign !== null) {
64311
+ activeVAlign = pendingVAlign;
64312
+ pendingVAlign = null;
64313
+ }
64031
64314
  pageCount += 1;
64032
64315
  return;
64033
64316
  }
@@ -64164,7 +64447,8 @@ function layoutDocument(blocks, measures, options = {}) {
64164
64447
  margins: ahead.margins ? { ...effectiveBlock.margins ?? {}, ...ahead.margins } : effectiveBlock.margins ?? {},
64165
64448
  pageSize: ahead.pageSize ?? effectiveBlock.pageSize,
64166
64449
  columns: ahead.columns ?? effectiveBlock.columns,
64167
- orientation: ahead.orientation ?? effectiveBlock.orientation
64450
+ orientation: ahead.orientation ?? effectiveBlock.orientation,
64451
+ vAlign: ahead.vAlign ?? effectiveBlock.vAlign
64168
64452
  };
64169
64453
  }
64170
64454
  const sectionState = {
@@ -64217,6 +64501,15 @@ function layoutDocument(blocks, measures, options = {}) {
64217
64501
  pendingColumns = updatedState.pendingColumns;
64218
64502
  activeOrientation = updatedState.activeOrientation;
64219
64503
  pendingOrientation = updatedState.pendingOrientation;
64504
+ if (effectiveBlock.vAlign) {
64505
+ const isFirstSection = effectiveBlock.attrs?.isFirstSection && states.length === 0;
64506
+ if (isFirstSection) {
64507
+ activeVAlign = effectiveBlock.vAlign;
64508
+ pendingVAlign = null;
64509
+ } else {
64510
+ pendingVAlign = effectiveBlock.vAlign;
64511
+ }
64512
+ }
64220
64513
  if (effectiveBlock.headerRefs || effectiveBlock.footerRefs) {
64221
64514
  pendingSectionRefs = {
64222
64515
  ...effectiveBlock.headerRefs && { headerRefs: effectiveBlock.headerRefs },
@@ -64225,8 +64518,17 @@ function layoutDocument(blocks, measures, options = {}) {
64225
64518
  layoutLog(`[Layout] After scheduleSectionBreakCompat: Scheduled pendingSectionRefs:`, pendingSectionRefs);
64226
64519
  }
64227
64520
  if (breakInfo.forceMidPageRegion && block.columns) {
64228
- const state2 = paginator.ensurePage();
64229
- startMidPageRegion(state2, { count: block.columns.count, gap: block.columns.gap });
64521
+ let state2 = paginator.ensurePage();
64522
+ const columnIndexBefore = state2.columnIndex;
64523
+ const rawCount = block.columns.count;
64524
+ const validatedCount = typeof rawCount === "number" && Number.isFinite(rawCount) && rawCount > 0 ? Math.max(1, Math.floor(rawCount)) : 1;
64525
+ const rawGap = block.columns.gap;
64526
+ const validatedGap = typeof rawGap === "number" && Number.isFinite(rawGap) && rawGap >= 0 ? Math.max(0, rawGap) : 0;
64527
+ const newColumns = { count: validatedCount, gap: validatedGap };
64528
+ if (columnIndexBefore >= newColumns.count) {
64529
+ state2 = paginator.startNewPage();
64530
+ }
64531
+ startMidPageRegion(state2, newColumns);
64230
64532
  }
64231
64533
  if (breakInfo.forcePageBreak) {
64232
64534
  let state2 = paginator.ensurePage();
@@ -64418,6 +64720,45 @@ function layoutDocument(blocks, measures, options = {}) {
64418
64720
  while (pages.length > 0 && pages[pages.length - 1].fragments.length === 0) {
64419
64721
  pages.pop();
64420
64722
  }
64723
+ for (const page of pages) {
64724
+ if (!page.vAlign || page.vAlign === "top") continue;
64725
+ if (page.fragments.length === 0) continue;
64726
+ const pageSizeForPage = page.size ?? pageSize;
64727
+ const contentTop = page.margins?.top ?? margins.top;
64728
+ const contentBottom = pageSizeForPage.h - (page.margins?.bottom ?? margins.bottom);
64729
+ const contentHeight = contentBottom - contentTop;
64730
+ let minY = Infinity;
64731
+ let maxY = -Infinity;
64732
+ for (const fragment of page.fragments) {
64733
+ if (fragment.y < minY) minY = fragment.y;
64734
+ let fragmentBottom = fragment.y;
64735
+ if (hasHeight(fragment)) {
64736
+ fragmentBottom += fragment.height;
64737
+ } else {
64738
+ const lineCount = fragment.toLine - fragment.fromLine;
64739
+ fragmentBottom += lineCount * DEFAULT_PARAGRAPH_LINE_HEIGHT_PX;
64740
+ }
64741
+ if (fragmentBottom > maxY) maxY = fragmentBottom;
64742
+ }
64743
+ const actualContentHeight = maxY - minY;
64744
+ const availableSpace = contentHeight - actualContentHeight;
64745
+ if (availableSpace <= 0) {
64746
+ continue;
64747
+ }
64748
+ let yOffset = 0;
64749
+ if (page.vAlign === "center") {
64750
+ yOffset = availableSpace / 2;
64751
+ } else if (page.vAlign === "bottom") {
64752
+ yOffset = availableSpace;
64753
+ } else if (page.vAlign === "both") {
64754
+ yOffset = availableSpace / 2;
64755
+ }
64756
+ if (yOffset > 0) {
64757
+ for (const fragment of page.fragments) {
64758
+ fragment.y += yOffset;
64759
+ }
64760
+ }
64761
+ }
64421
64762
  return {
64422
64763
  pageSize,
64423
64764
  pages,
@@ -68845,14 +69186,25 @@ const PRINT_STYLES = `
68845
69186
  }
68846
69187
  `;
68847
69188
  const LINK_AND_TOC_STYLES = `
68848
- /* Reset browser default link styling - allow run colors to show through */
69189
+ /* Reset browser default link styling - allow run colors to show through from inline styles
69190
+ *
69191
+ * Note: !important was removed from these rules to allow inline styles to take precedence.
69192
+ * This is necessary because OOXML hyperlink character styles apply colors via inline style
69193
+ * attributes on the run elements. The CSS cascade ensures that inline styles (applied via
69194
+ * element.style.color in applyRunStyles) override these class-based rules naturally.
69195
+ *
69196
+ * Implications:
69197
+ * - OOXML hyperlink character styles will correctly display their assigned colors
69198
+ * - Browser default link colors are still reset by these inherit rules
69199
+ * - Inline color styles from run objects override the inherit value as expected
69200
+ */
68849
69201
  .superdoc-link {
68850
- color: inherit !important;
68851
- text-decoration: none !important;
69202
+ color: inherit;
69203
+ text-decoration: none;
68852
69204
  }
68853
69205
 
68854
69206
  .superdoc-link:visited {
68855
- color: inherit !important;
69207
+ color: inherit;
68856
69208
  }
68857
69209
 
68858
69210
  .superdoc-link:hover {
@@ -70391,14 +70743,23 @@ const _DomPainter = class _DomPainter2 {
70391
70743
  lines.forEach((line, index2) => {
70392
70744
  const lineEl = this.renderLine(block, line, context);
70393
70745
  const isListFirstLine = index2 === 0 && !fragment.continuesFromPrev && fragment.markerWidth && wordLayout?.marker;
70394
- if (paraIndentLeft && !isListFirstLine) {
70395
- lineEl.style.paddingLeft = `${paraIndentLeft}px`;
70746
+ const hasExplicitSegmentPositioning = line.segments?.some((seg) => seg.x !== void 0);
70747
+ const isFirstLine = index2 === 0 && !fragment.continuesFromPrev;
70748
+ if (!isListFirstLine) {
70749
+ if (isFirstLine && hasExplicitSegmentPositioning && firstLineOffset !== 0) {
70750
+ const adjustedPadding = paraIndentLeft + firstLineOffset;
70751
+ lineEl.style.paddingLeft = `${adjustedPadding}px`;
70752
+ } else if (paraIndentLeft) {
70753
+ lineEl.style.paddingLeft = `${paraIndentLeft}px`;
70754
+ }
70396
70755
  }
70397
70756
  if (paraIndentRight) {
70398
70757
  lineEl.style.paddingRight = `${paraIndentRight}px`;
70399
70758
  }
70400
70759
  if (!fragment.continuesFromPrev && index2 === 0 && firstLineOffset && !isListFirstLine) {
70401
- lineEl.style.textIndent = `${firstLineOffset}px`;
70760
+ if (!hasExplicitSegmentPositioning) {
70761
+ lineEl.style.textIndent = `${firstLineOffset}px`;
70762
+ }
70402
70763
  } else if (firstLineOffset && !isListFirstLine) {
70403
70764
  lineEl.style.textIndent = "0px";
70404
70765
  }
@@ -71292,6 +71653,24 @@ const _DomPainter = class _DomPainter2 {
71292
71653
  }
71293
71654
  elem.setAttribute("role", "link");
71294
71655
  elem.setAttribute("tabindex", "0");
71656
+ elem.addEventListener("click", (event) => {
71657
+ event.preventDefault();
71658
+ event.stopPropagation();
71659
+ const linkClickEvent = new CustomEvent("superdoc-link-click", {
71660
+ bubbles: true,
71661
+ composed: true,
71662
+ detail: {
71663
+ href: linkData.href,
71664
+ target: linkData.target,
71665
+ rel: linkData.rel,
71666
+ tooltip: linkData.tooltip,
71667
+ element: elem,
71668
+ clientX: event.clientX,
71669
+ clientY: event.clientY
71670
+ }
71671
+ });
71672
+ elem.dispatchEvent(linkClickEvent);
71673
+ });
71295
71674
  }
71296
71675
  /**
71297
71676
  * Render a single run as an HTML element (span or anchor).
@@ -71581,7 +71960,13 @@ const _DomPainter = class _DomPainter2 {
71581
71960
  if (styleId) {
71582
71961
  elem.setAttribute("styleid", styleId);
71583
71962
  }
71963
+ const runSegments2 = segmentsByRun.get(runIndex);
71964
+ const segX = runSegments2 && runSegments2[0]?.x !== void 0 ? runSegments2[0].x : cumulativeX;
71965
+ const segWidth = (runSegments2 && runSegments2[0]?.width !== void 0 ? runSegments2[0].width : elem.offsetWidth) ?? 0;
71966
+ elem.style.position = "absolute";
71967
+ elem.style.left = `${segX}px`;
71584
71968
  el.appendChild(elem);
71969
+ cumulativeX = segX + segWidth;
71585
71970
  }
71586
71971
  continue;
71587
71972
  }
@@ -72123,7 +72508,7 @@ const deriveBlockVersion = (block) => {
72123
72508
  }
72124
72509
  return block.id;
72125
72510
  };
72126
- const applyRunStyles = (element, run2, isLink = false) => {
72511
+ const applyRunStyles = (element, run2, _isLink = false) => {
72127
72512
  if (run2.kind === "tab" || run2.kind === "image" || run2.kind === "lineBreak" || run2.kind === "break") {
72128
72513
  return;
72129
72514
  }
@@ -72131,9 +72516,7 @@ const applyRunStyles = (element, run2, isLink = false) => {
72131
72516
  element.style.fontSize = `${run2.fontSize}px`;
72132
72517
  if (run2.bold) element.style.fontWeight = "bold";
72133
72518
  if (run2.italic) element.style.fontStyle = "italic";
72134
- if (!isLink) {
72135
- if (run2.color) element.style.color = run2.color;
72136
- }
72519
+ if (run2.color) element.style.color = run2.color;
72137
72520
  if (run2.letterSpacing != null) {
72138
72521
  element.style.letterSpacing = `${run2.letterSpacing}px`;
72139
72522
  }
@@ -72681,28 +73064,44 @@ async function measureParagraphBlock(block, maxWidth) {
72681
73064
  }
72682
73065
  return true;
72683
73066
  };
72684
- const alignSegmentAtTab = (segmentText, font, runContext) => {
72685
- if (!pendingTabAlignment || !currentLine) return;
73067
+ const alignPendingTabForWidth = (segmentWidth, beforeDecimalWidth) => {
73068
+ if (!pendingTabAlignment || !currentLine) return void 0;
73069
+ if (segmentWidth < 0) {
73070
+ segmentWidth = 0;
73071
+ }
72686
73072
  const { target, val } = pendingTabAlignment;
72687
73073
  let startX = currentLine.width;
73074
+ if (val === "decimal") {
73075
+ const beforeWidth = beforeDecimalWidth ?? 0;
73076
+ startX = Math.max(0, target - beforeWidth);
73077
+ } else if (val === "end") {
73078
+ startX = Math.max(0, target - segmentWidth);
73079
+ } else if (val === "center") {
73080
+ startX = Math.max(0, target - segmentWidth / 2);
73081
+ } else {
73082
+ startX = Math.max(0, target);
73083
+ }
73084
+ currentLine.width = roundValue(startX);
73085
+ lastAppliedTabAlign = { target, val };
73086
+ pendingTabAlignment = null;
73087
+ return startX;
73088
+ };
73089
+ const alignSegmentAtTab = (segmentText, font, runContext) => {
73090
+ if (!pendingTabAlignment || !currentLine) return void 0;
73091
+ const { val } = pendingTabAlignment;
73092
+ let segmentWidth = 0;
73093
+ let beforeDecimalWidth;
72688
73094
  if (val === "decimal") {
72689
73095
  const idx = segmentText.indexOf(decimalSeparator);
72690
73096
  if (idx >= 0) {
72691
73097
  const beforeText = segmentText.slice(0, idx);
72692
- const beforeWidth = beforeText.length > 0 ? measureRunWidth(beforeText, font, ctx2, runContext) : 0;
72693
- startX = Math.max(0, target - beforeWidth);
72694
- } else {
72695
- startX = Math.max(0, target);
73098
+ beforeDecimalWidth = beforeText.length > 0 ? measureRunWidth(beforeText, font, ctx2, runContext) : 0;
72696
73099
  }
73100
+ segmentWidth = segmentText.length > 0 ? measureRunWidth(segmentText, font, ctx2, runContext) : 0;
72697
73101
  } else if (val === "end" || val === "center") {
72698
- const segWidth = segmentText.length > 0 ? measureRunWidth(segmentText, font, ctx2, runContext) : 0;
72699
- startX = val === "end" ? Math.max(0, target - segWidth) : Math.max(0, target - segWidth / 2);
72700
- } else if (val === "start" || val === "bar") {
72701
- startX = Math.max(0, target);
73102
+ segmentWidth = segmentText.length > 0 ? measureRunWidth(segmentText, font, ctx2, runContext) : 0;
72702
73103
  }
72703
- currentLine.width = roundValue(startX);
72704
- lastAppliedTabAlign = { target, val };
72705
- pendingTabAlignment = null;
73104
+ return alignPendingTabForWidth(segmentWidth, beforeDecimalWidth);
72706
73105
  };
72707
73106
  const runsToProcess = [];
72708
73107
  for (const run2 of block.runs) {
@@ -72851,6 +73250,10 @@ async function measureParagraphBlock(block, maxWidth) {
72851
73250
  const topSpace = run2.distTop ?? 0;
72852
73251
  const bottomSpace = run2.distBottom ?? 0;
72853
73252
  const imageHeight = run2.height + topSpace + bottomSpace;
73253
+ let imageStartX;
73254
+ if (pendingTabAlignment && currentLine) {
73255
+ imageStartX = alignPendingTabForWidth(imageWidth);
73256
+ }
72854
73257
  if (!currentLine) {
72855
73258
  currentLine = {
72856
73259
  fromRun: runIndex,
@@ -72867,12 +73270,14 @@ async function measureParagraphBlock(block, maxWidth) {
72867
73270
  runIndex,
72868
73271
  fromChar: 0,
72869
73272
  toChar: 1,
72870
- width: imageWidth
73273
+ width: imageWidth,
73274
+ ...imageStartX !== void 0 ? { x: imageStartX } : {}
72871
73275
  }
72872
73276
  ]
72873
73277
  };
72874
73278
  continue;
72875
73279
  }
73280
+ const appliedTabAlign = lastAppliedTabAlign;
72876
73281
  if (currentLine.width + imageWidth > currentLine.maxWidth && currentLine.width > 0) {
72877
73282
  const metrics = calculateTypographyMetrics(currentLine.maxFontSize, spacing);
72878
73283
  const completedLine = {
@@ -72883,6 +73288,7 @@ async function measureParagraphBlock(block, maxWidth) {
72883
73288
  lines.push(completedLine);
72884
73289
  tabStopCursor = 0;
72885
73290
  pendingTabAlignment = null;
73291
+ lastAppliedTabAlign = null;
72886
73292
  currentLine = {
72887
73293
  fromRun: runIndex,
72888
73294
  fromChar: 0,
@@ -72910,9 +73316,15 @@ async function measureParagraphBlock(block, maxWidth) {
72910
73316
  runIndex,
72911
73317
  fromChar: 0,
72912
73318
  toChar: 1,
72913
- width: imageWidth
73319
+ width: imageWidth,
73320
+ ...imageStartX !== void 0 ? { x: imageStartX } : {}
72914
73321
  });
72915
73322
  }
73323
+ const tabAlign = appliedTabAlign;
73324
+ if (tabAlign && currentLine && tabAlign.val === "end") {
73325
+ currentLine.width = roundValue(tabAlign.target);
73326
+ }
73327
+ lastAppliedTabAlign = null;
72916
73328
  continue;
72917
73329
  }
72918
73330
  if (!("text" in run2) || !("fontSize" in run2)) {
@@ -72928,8 +73340,10 @@ async function measureParagraphBlock(block, maxWidth) {
72928
73340
  const words = segment.split(" ");
72929
73341
  let segmentStartX;
72930
73342
  if (currentLine && pendingTabAlignment) {
72931
- alignSegmentAtTab(segment, font, run2);
72932
- segmentStartX = currentLine.width;
73343
+ segmentStartX = alignSegmentAtTab(segment, font, run2);
73344
+ if (segmentStartX == null) {
73345
+ segmentStartX = currentLine.width;
73346
+ }
72933
73347
  }
72934
73348
  for (let wordIndex = 0; wordIndex < words.length; wordIndex++) {
72935
73349
  const word = words[wordIndex];
@@ -73570,12 +73984,49 @@ const createHeaderFooterEditor = ({
73570
73984
  editor,
73571
73985
  data,
73572
73986
  editorContainer,
73573
- appendToBody = true,
73987
+ editorHost,
73574
73988
  sectionId,
73575
73989
  type: type2,
73990
+ availableWidth,
73576
73991
  availableHeight,
73577
- currentPageNumber
73992
+ currentPageNumber,
73993
+ totalPageCount
73578
73994
  }) => {
73995
+ if (!editor) {
73996
+ throw new TypeError("editor parameter is required");
73997
+ }
73998
+ if (!data) {
73999
+ throw new TypeError("data parameter is required");
74000
+ }
74001
+ if (!editorContainer) {
74002
+ throw new TypeError("editorContainer parameter is required");
74003
+ }
74004
+ if (!(editorContainer instanceof HTMLElement)) {
74005
+ throw new TypeError("editorContainer must be an HTMLElement");
74006
+ }
74007
+ if (editorHost !== void 0 && !(editorHost instanceof HTMLElement)) {
74008
+ throw new TypeError("editorHost must be an HTMLElement or undefined");
74009
+ }
74010
+ if (availableWidth !== void 0) {
74011
+ if (typeof availableWidth !== "number" || !Number.isFinite(availableWidth) || availableWidth <= 0) {
74012
+ throw new RangeError("availableWidth must be a positive number");
74013
+ }
74014
+ }
74015
+ if (availableHeight !== void 0) {
74016
+ if (typeof availableHeight !== "number" || !Number.isFinite(availableHeight) || availableHeight <= 0) {
74017
+ throw new RangeError("availableHeight must be a positive number");
74018
+ }
74019
+ }
74020
+ if (currentPageNumber !== void 0) {
74021
+ if (typeof currentPageNumber !== "number" || !Number.isInteger(currentPageNumber) || currentPageNumber < 1) {
74022
+ throw new RangeError("currentPageNumber must be a positive integer");
74023
+ }
74024
+ }
74025
+ if (totalPageCount !== void 0) {
74026
+ if (typeof totalPageCount !== "number" || !Number.isInteger(totalPageCount) || totalPageCount < 1) {
74027
+ throw new RangeError("totalPageCount must be a positive integer");
74028
+ }
74029
+ }
73579
74030
  const parentStyles = editor.converter.getDocumentDefaultStyles();
73580
74031
  const { fontSizePt, typeface, fontFamilyCss } = parentStyles;
73581
74032
  const fontSizeInPixles = fontSizePt * 1.3333;
@@ -73589,21 +74040,24 @@ const createHeaderFooterEditor = ({
73589
74040
  position: "absolute",
73590
74041
  top: "0",
73591
74042
  left: "0",
73592
- width: "auto",
74043
+ width: availableWidth ? `${availableWidth}px` : "100%",
74044
+ height: availableHeight ? `${availableHeight}px` : "auto",
73593
74045
  maxWidth: "none",
73594
74046
  fontFamily: fontFamilyCss || typeface,
73595
74047
  fontSize: `${fontSizeInPixles}px`,
73596
- lineHeight: `${lineHeight2}px`
73597
- });
73598
- Object.assign(editorContainer.style, {
73599
- padding: "0",
73600
- margin: "0",
73601
- border: "none",
73602
- boxSizing: "border-box",
73603
- height: availableHeight + "px",
73604
- overflow: "hidden"
73605
- });
73606
- if (appendToBody) document.body.appendChild(editorContainer);
74048
+ lineHeight: `${lineHeight2}px`,
74049
+ overflow: "hidden",
74050
+ pointerEvents: "auto",
74051
+ // Critical: enables click interaction
74052
+ backgroundColor: "white"
74053
+ // Ensure editor has white background
74054
+ });
74055
+ if (editorHost) {
74056
+ editorHost.appendChild(editorContainer);
74057
+ } else {
74058
+ console.warn("[createHeaderFooterEditor] No editorHost provided, falling back to document.body");
74059
+ document.body.appendChild(editorContainer);
74060
+ }
73607
74061
  const headerFooterEditor = new Editor({
73608
74062
  role: editor.options.role,
73609
74063
  loadFromSchema: true,
@@ -73621,9 +74075,12 @@ const createHeaderFooterEditor = ({
73621
74075
  pagination: false,
73622
74076
  // Explicitly disable pagination
73623
74077
  annotations: true,
73624
- currentPageNumber,
74078
+ currentPageNumber: currentPageNumber ?? 1,
74079
+ totalPageCount: totalPageCount ?? 1,
73625
74080
  // Don't set parentEditor to avoid circular reference issues
73626
74081
  // parentEditor: editor,
74082
+ // IMPORTANT: Start with editable: false to prevent triggering update cascades during creation.
74083
+ // PresentationEditor#enterHeaderFooterMode will call setEditable(true) when entering edit mode.
73627
74084
  editable: false,
73628
74085
  documentMode: "viewing",
73629
74086
  onCreate: (evt) => setEditorToolbar(evt, editor),
@@ -73653,18 +74110,23 @@ const createHeaderFooterEditor = ({
73653
74110
  const onHeaderFooterDataUpdate = async ({ editor, transaction }, mainEditor, sectionId, type2) => {
73654
74111
  if (!type2 || !sectionId) return;
73655
74112
  const updatedData = editor.getUpdatedJson();
73656
- mainEditor.converter[`${type2}Editors`].forEach((item) => {
73657
- if (item.id === sectionId) {
74113
+ const editorsList = mainEditor.converter[`${type2}Editors`];
74114
+ if (Array.isArray(editorsList)) {
74115
+ editorsList.forEach((item) => {
74116
+ if (item.id === sectionId) {
74117
+ item.editor.setOptions({
74118
+ media: editor.options.media,
74119
+ mediaFiles: editor.options.mediaFiles
74120
+ });
74121
+ if (item.editor !== editor) {
74122
+ item.editor.replaceContent(updatedData);
74123
+ }
74124
+ }
73658
74125
  item.editor.setOptions({
73659
- media: editor.options.media,
73660
- mediaFiles: editor.options.mediaFiles
74126
+ lastSelection: transaction?.selection
73661
74127
  });
73662
- item.editor.replaceContent(updatedData);
73663
- }
73664
- item.editor.setOptions({
73665
- lastSelection: transaction?.selection
73666
74128
  });
73667
- });
74129
+ }
73668
74130
  mainEditor.converter[`${type2}s`][sectionId] = updatedData;
73669
74131
  mainEditor.setOptions({ isHeaderFooterChanged: editor.docChanged });
73670
74132
  await updateYdocDocxData(mainEditor);
@@ -73745,13 +74207,69 @@ class HeaderFooterEditorManager extends EventEmitter$1 {
73745
74207
  * Handles concurrent calls for the same descriptor by tracking pending creations
73746
74208
  * and returning the same promise to all callers.
73747
74209
  *
73748
- * @param descriptor - The header or footer descriptor
74210
+ * @param descriptor - The header or footer descriptor. Must have a valid id property.
74211
+ * @param options - Optional configuration for editor creation
74212
+ * @param options.editorHost - The HTMLElement to mount the editor in. If provided, must be a valid HTMLElement.
74213
+ * @param options.availableWidth - The width of the editing region in pixels. Must be a positive number if provided.
74214
+ * @param options.availableHeight - The height of the editing region in pixels. Must be a positive number if provided.
74215
+ * @param options.currentPageNumber - The current page number for PAGE field resolution. Must be a positive integer if provided.
74216
+ * @param options.totalPageCount - The total page count for NUMPAGES field resolution. Must be a positive integer if provided.
73749
74217
  * @returns The editor instance, or null if creation failed
73750
74218
  *
73751
- * @throws Never throws - errors are logged and emitted as events
74219
+ * @throws Never throws - errors are logged and emitted as events. Invalid parameters return null with error logged.
73752
74220
  */
73753
- async ensureEditor(descriptor) {
74221
+ async ensureEditor(descriptor, options) {
73754
74222
  if (!descriptor?.id) return null;
74223
+ if (options) {
74224
+ if (options.editorHost !== void 0 && !(options.editorHost instanceof HTMLElement)) {
74225
+ console.error("[HeaderFooterEditorManager] editorHost must be an HTMLElement");
74226
+ this.emit("error", {
74227
+ descriptor,
74228
+ error: new TypeError("editorHost must be an HTMLElement")
74229
+ });
74230
+ return null;
74231
+ }
74232
+ if (options.availableWidth !== void 0) {
74233
+ if (typeof options.availableWidth !== "number" || !Number.isFinite(options.availableWidth) || options.availableWidth <= 0) {
74234
+ console.error("[HeaderFooterEditorManager] availableWidth must be a positive number");
74235
+ this.emit("error", {
74236
+ descriptor,
74237
+ error: new TypeError("availableWidth must be a positive number")
74238
+ });
74239
+ return null;
74240
+ }
74241
+ }
74242
+ if (options.availableHeight !== void 0) {
74243
+ if (typeof options.availableHeight !== "number" || !Number.isFinite(options.availableHeight) || options.availableHeight <= 0) {
74244
+ console.error("[HeaderFooterEditorManager] availableHeight must be a positive number");
74245
+ this.emit("error", {
74246
+ descriptor,
74247
+ error: new TypeError("availableHeight must be a positive number")
74248
+ });
74249
+ return null;
74250
+ }
74251
+ }
74252
+ if (options.currentPageNumber !== void 0) {
74253
+ if (typeof options.currentPageNumber !== "number" || !Number.isInteger(options.currentPageNumber) || options.currentPageNumber < 1) {
74254
+ console.error("[HeaderFooterEditorManager] currentPageNumber must be a positive integer");
74255
+ this.emit("error", {
74256
+ descriptor,
74257
+ error: new TypeError("currentPageNumber must be a positive integer")
74258
+ });
74259
+ return null;
74260
+ }
74261
+ }
74262
+ if (options.totalPageCount !== void 0) {
74263
+ if (typeof options.totalPageCount !== "number" || !Number.isInteger(options.totalPageCount) || options.totalPageCount < 1) {
74264
+ console.error("[HeaderFooterEditorManager] totalPageCount must be a positive integer");
74265
+ this.emit("error", {
74266
+ descriptor,
74267
+ error: new TypeError("totalPageCount must be a positive integer")
74268
+ });
74269
+ return null;
74270
+ }
74271
+ }
74272
+ }
73755
74273
  const existing = __privateGet$1(this, _editorEntries).get(descriptor.id);
73756
74274
  if (existing) {
73757
74275
  __privateSet(this, _cacheHits, __privateGet$1(this, _cacheHits) + 1);
@@ -73760,6 +74278,29 @@ class HeaderFooterEditorManager extends EventEmitter$1 {
73760
74278
  console.error("[HeaderFooterEditorManager] Editor initialization failed:", error);
73761
74279
  this.emit("error", { descriptor, error });
73762
74280
  });
74281
+ if (existing.container && options?.editorHost) {
74282
+ if (existing.container.parentElement !== options.editorHost) {
74283
+ options.editorHost.appendChild(existing.container);
74284
+ }
74285
+ }
74286
+ if (existing.editor && options) {
74287
+ const updateOptions = {};
74288
+ if (options.currentPageNumber !== void 0) {
74289
+ updateOptions.currentPageNumber = options.currentPageNumber;
74290
+ }
74291
+ if (options.totalPageCount !== void 0) {
74292
+ updateOptions.totalPageCount = options.totalPageCount;
74293
+ }
74294
+ if (options.availableWidth !== void 0) {
74295
+ updateOptions.availableWidth = options.availableWidth;
74296
+ }
74297
+ if (options.availableHeight !== void 0) {
74298
+ updateOptions.availableHeight = options.availableHeight;
74299
+ }
74300
+ if (Object.keys(updateOptions).length > 0) {
74301
+ existing.editor.setOptions(updateOptions);
74302
+ }
74303
+ }
73763
74304
  return existing.editor;
73764
74305
  }
73765
74306
  const pending = __privateGet$1(this, _pendingCreations).get(descriptor.id);
@@ -73769,7 +74310,7 @@ class HeaderFooterEditorManager extends EventEmitter$1 {
73769
74310
  __privateSet(this, _cacheMisses, __privateGet$1(this, _cacheMisses) + 1);
73770
74311
  const creationPromise = (async () => {
73771
74312
  try {
73772
- const entry = await __privateMethod$1(this, _HeaderFooterEditorManager_instances, createEditor_fn).call(this, descriptor);
74313
+ const entry = await __privateMethod$1(this, _HeaderFooterEditorManager_instances, createEditor_fn).call(this, descriptor, options);
73773
74314
  if (!entry) return null;
73774
74315
  __privateGet$1(this, _editorEntries).set(descriptor.id, entry);
73775
74316
  __privateMethod$1(this, _HeaderFooterEditorManager_instances, updateAccessOrder_fn).call(this, descriptor.id);
@@ -74077,7 +74618,7 @@ teardownEditors_fn = function() {
74077
74618
  });
74078
74619
  __privateGet$1(this, _editorEntries).clear();
74079
74620
  };
74080
- createEditor_fn = async function(descriptor) {
74621
+ createEditor_fn = async function(descriptor, options) {
74081
74622
  const json = this.getDocumentJson(descriptor);
74082
74623
  if (!json) return null;
74083
74624
  let editor;
@@ -74088,12 +74629,13 @@ createEditor_fn = async function(descriptor) {
74088
74629
  editor: __privateGet$1(this, _editor2),
74089
74630
  data: json,
74090
74631
  editorContainer: container,
74091
- appendToBody: true,
74632
+ editorHost: options?.editorHost,
74092
74633
  sectionId: descriptor.id,
74093
74634
  type: descriptor.kind,
74094
- availableHeight: DEFAULT_HEADER_FOOTER_HEIGHT,
74095
- currentPageNumber: 1
74096
- // Default page number
74635
+ availableWidth: options?.availableWidth,
74636
+ availableHeight: options?.availableHeight ?? DEFAULT_HEADER_FOOTER_HEIGHT,
74637
+ currentPageNumber: options?.currentPageNumber ?? 1,
74638
+ totalPageCount: options?.totalPageCount ?? 1
74097
74639
  });
74098
74640
  } catch (error) {
74099
74641
  console.error("[HeaderFooterEditorManager] Editor creation failed:", error);
@@ -74367,6 +74909,312 @@ getConverterContext_fn = function() {
74367
74909
  }
74368
74910
  return Object.keys(context).length > 0 ? context : void 0;
74369
74911
  };
74912
+ const EDITOR_HOST_Z_INDEX = "10";
74913
+ const BORDER_LINE_Z_INDEX = "15";
74914
+ const BORDER_LINE_COLOR = "#4472c4";
74915
+ const BORDER_LINE_HEIGHT = "1px";
74916
+ class EditorOverlayManager {
74917
+ /**
74918
+ * Creates a new EditorOverlayManager instance.
74919
+ *
74920
+ * @param painterHost - The host element containing painted pages. Must be an HTMLElement connected to the DOM.
74921
+ * @param visibleHost - The visible host element for overlay positioning. Must be an HTMLElement connected to the DOM.
74922
+ * @param selectionOverlay - The selection overlay element (optional). If provided, must be an HTMLElement.
74923
+ *
74924
+ * @throws {TypeError} If painterHost is not an HTMLElement
74925
+ * @throws {TypeError} If visibleHost is not an HTMLElement
74926
+ * @throws {TypeError} If selectionOverlay is provided but is not an HTMLElement
74927
+ * @throws {Error} If painterHost is not connected to the DOM
74928
+ * @throws {Error} If visibleHost is not connected to the DOM
74929
+ */
74930
+ constructor(painterHost, visibleHost, selectionOverlay = null) {
74931
+ __privateAdd$1(this, _EditorOverlayManager_instances);
74932
+ __privateAdd$1(this, _selectionOverlay);
74933
+ __privateAdd$1(this, _activeEditorHost, null);
74934
+ __privateAdd$1(this, _activeDecorationContainer, null);
74935
+ __privateAdd$1(this, _activeRegion, null);
74936
+ __privateAdd$1(this, _borderLine, null);
74937
+ if (!(painterHost instanceof HTMLElement)) {
74938
+ throw new TypeError("painterHost must be an HTMLElement");
74939
+ }
74940
+ if (!(visibleHost instanceof HTMLElement)) {
74941
+ throw new TypeError("visibleHost must be an HTMLElement");
74942
+ }
74943
+ if (selectionOverlay !== null && !(selectionOverlay instanceof HTMLElement)) {
74944
+ throw new TypeError("selectionOverlay must be an HTMLElement or null");
74945
+ }
74946
+ if (!painterHost.isConnected) {
74947
+ throw new Error("painterHost must be connected to the DOM");
74948
+ }
74949
+ if (!visibleHost.isConnected) {
74950
+ throw new Error("visibleHost must be connected to the DOM");
74951
+ }
74952
+ __privateSet(this, _selectionOverlay, selectionOverlay);
74953
+ }
74954
+ /**
74955
+ * Sets the callback to be invoked when the dimming overlay is clicked.
74956
+ * This allows PresentationEditor to exit header/footer mode when the user
74957
+ * clicks outside the editing region.
74958
+ *
74959
+ * @param callback - Function to call when dimming overlay is clicked
74960
+ */
74961
+ setOnDimmingClick(_callback) {
74962
+ }
74963
+ /**
74964
+ * Gets the currently active editor host element.
74965
+ * This is useful for checking if a click target is inside the active editing area.
74966
+ *
74967
+ * @returns The active editor host element, or null if not in editing mode
74968
+ */
74969
+ getActiveEditorHost() {
74970
+ return __privateGet$1(this, _activeEditorHost);
74971
+ }
74972
+ /**
74973
+ * Shows the editing overlay for a header/footer region.
74974
+ *
74975
+ * This method:
74976
+ * 1. Creates or retrieves the editor host element as a sibling to the decoration container
74977
+ * 2. Positions the editor host to match the decoration container bounds
74978
+ * 3. Hides the static decoration content
74979
+ * 4. Shows the dimming overlay over body content
74980
+ * 5. Returns the editor host element for mounting the ProseMirror editor
74981
+ *
74982
+ * @param pageElement - The page DOM element containing the region
74983
+ * @param region - The header/footer region to edit
74984
+ * @param zoom - Current zoom level (for positioning calculations)
74985
+ * @returns Result object with success status and editor host element
74986
+ *
74987
+ * @example
74988
+ * ```typescript
74989
+ * const result = overlayManager.showEditingOverlay(pageElement, region, 1.0);
74990
+ * if (result.success && result.editorHost) {
74991
+ * // Mount ProseMirror editor in result.editorHost
74992
+ * }
74993
+ * ```
74994
+ */
74995
+ showEditingOverlay(pageElement, region, zoom) {
74996
+ try {
74997
+ const decorationContainer = __privateMethod$1(this, _EditorOverlayManager_instances, findDecorationContainer_fn).call(this, pageElement, region.kind);
74998
+ if (!decorationContainer) {
74999
+ return {
75000
+ success: false,
75001
+ reason: `Decoration container not found for ${region.kind} on page ${region.pageIndex}`
75002
+ };
75003
+ }
75004
+ const editorHost = __privateMethod$1(this, _EditorOverlayManager_instances, ensureEditorHost_fn).call(this, pageElement, region.kind);
75005
+ if (!editorHost) {
75006
+ return {
75007
+ success: false,
75008
+ reason: `Failed to create editor host for ${region.kind}`
75009
+ };
75010
+ }
75011
+ __privateMethod$1(this, _EditorOverlayManager_instances, positionEditorHost_fn).call(this, editorHost, region, decorationContainer, zoom);
75012
+ decorationContainer.style.visibility = "hidden";
75013
+ editorHost.style.visibility = "visible";
75014
+ editorHost.style.zIndex = EDITOR_HOST_Z_INDEX;
75015
+ if (region.kind === "footer") {
75016
+ const contentOffset = editorHost.dataset.contentOffset;
75017
+ if (contentOffset) {
75018
+ const editorContainer = editorHost.querySelector(".super-editor");
75019
+ if (editorContainer instanceof HTMLElement) {
75020
+ editorContainer.style.top = `${contentOffset}px`;
75021
+ }
75022
+ }
75023
+ }
75024
+ __privateMethod$1(this, _EditorOverlayManager_instances, showHeaderFooterBorder_fn).call(this, pageElement, region, decorationContainer);
75025
+ __privateSet(this, _activeEditorHost, editorHost);
75026
+ __privateSet(this, _activeDecorationContainer, decorationContainer);
75027
+ __privateSet(this, _activeRegion, region);
75028
+ return {
75029
+ success: true,
75030
+ editorHost
75031
+ };
75032
+ } catch (error) {
75033
+ if (__privateGet$1(this, _activeDecorationContainer)) {
75034
+ __privateGet$1(this, _activeDecorationContainer).style.visibility = "visible";
75035
+ }
75036
+ if (__privateGet$1(this, _activeEditorHost)) {
75037
+ __privateGet$1(this, _activeEditorHost).style.visibility = "hidden";
75038
+ }
75039
+ __privateMethod$1(this, _EditorOverlayManager_instances, hideHeaderFooterBorder_fn).call(this);
75040
+ const errorMessage = error instanceof Error ? error.message : String(error);
75041
+ console.error("[EditorOverlayManager] Failed to show editing overlay:", error);
75042
+ return {
75043
+ success: false,
75044
+ reason: `DOM manipulation error: ${errorMessage}`
75045
+ };
75046
+ }
75047
+ }
75048
+ /**
75049
+ * Hides the editing overlay and restores normal view.
75050
+ *
75051
+ * This method:
75052
+ * 1. Shows the static decoration content
75053
+ * 2. Hides the editor host (but doesn't destroy it for reuse)
75054
+ * 3. Removes the dimming overlay
75055
+ *
75056
+ * @example
75057
+ * ```typescript
75058
+ * overlayManager.hideEditingOverlay();
75059
+ * // Static decoration is now visible, editor is hidden
75060
+ * ```
75061
+ */
75062
+ hideEditingOverlay() {
75063
+ if (__privateGet$1(this, _activeDecorationContainer)) {
75064
+ __privateGet$1(this, _activeDecorationContainer).style.visibility = "visible";
75065
+ }
75066
+ if (__privateGet$1(this, _activeEditorHost)) {
75067
+ __privateGet$1(this, _activeEditorHost).style.visibility = "hidden";
75068
+ __privateGet$1(this, _activeEditorHost).style.zIndex = "";
75069
+ if (__privateGet$1(this, _activeRegion)?.kind === "footer") {
75070
+ const editorContainer = __privateGet$1(this, _activeEditorHost).querySelector(".super-editor");
75071
+ if (editorContainer instanceof HTMLElement) {
75072
+ editorContainer.style.top = "0";
75073
+ }
75074
+ }
75075
+ }
75076
+ __privateMethod$1(this, _EditorOverlayManager_instances, hideHeaderFooterBorder_fn).call(this);
75077
+ __privateSet(this, _activeEditorHost, null);
75078
+ __privateSet(this, _activeDecorationContainer, null);
75079
+ __privateSet(this, _activeRegion, null);
75080
+ }
75081
+ /**
75082
+ * Hides the layout selection overlay to prevent double caret rendering.
75083
+ *
75084
+ * Called when entering header/footer editing mode to ensure only the
75085
+ * ProseMirror editor's caret is visible, not both the PM caret and the
75086
+ * layout engine's selection overlay.
75087
+ *
75088
+ * @example
75089
+ * ```typescript
75090
+ * overlayManager.hideSelectionOverlay();
75091
+ * // Selection overlay is now hidden
75092
+ * ```
75093
+ */
75094
+ hideSelectionOverlay() {
75095
+ if (__privateGet$1(this, _selectionOverlay)) {
75096
+ __privateGet$1(this, _selectionOverlay).style.visibility = "hidden";
75097
+ }
75098
+ }
75099
+ /**
75100
+ * Shows the layout selection overlay.
75101
+ *
75102
+ * Called when exiting header/footer editing mode to restore the
75103
+ * normal selection overlay rendering for body content.
75104
+ *
75105
+ * @example
75106
+ * ```typescript
75107
+ * overlayManager.showSelectionOverlay();
75108
+ * // Selection overlay is now visible
75109
+ * ```
75110
+ */
75111
+ showSelectionOverlay() {
75112
+ if (__privateGet$1(this, _selectionOverlay)) {
75113
+ __privateGet$1(this, _selectionOverlay).style.visibility = "visible";
75114
+ }
75115
+ }
75116
+ /**
75117
+ * Destroys the overlay manager and cleans up all resources.
75118
+ *
75119
+ * Clears all references.
75120
+ * Editor host elements are left in the DOM as they're children of page elements
75121
+ * that will be cleaned up by the virtualization system.
75122
+ */
75123
+ destroy() {
75124
+ __privateMethod$1(this, _EditorOverlayManager_instances, hideHeaderFooterBorder_fn).call(this);
75125
+ __privateSet(this, _activeEditorHost, null);
75126
+ __privateSet(this, _activeDecorationContainer, null);
75127
+ __privateSet(this, _activeRegion, null);
75128
+ __privateSet(this, _selectionOverlay, null);
75129
+ }
75130
+ }
75131
+ _selectionOverlay = /* @__PURE__ */ new WeakMap();
75132
+ _activeEditorHost = /* @__PURE__ */ new WeakMap();
75133
+ _activeDecorationContainer = /* @__PURE__ */ new WeakMap();
75134
+ _activeRegion = /* @__PURE__ */ new WeakMap();
75135
+ _borderLine = /* @__PURE__ */ new WeakMap();
75136
+ _EditorOverlayManager_instances = /* @__PURE__ */ new WeakSet();
75137
+ findDecorationContainer_fn = function(pageElement, kind) {
75138
+ const className = kind === "header" ? "superdoc-page-header" : "superdoc-page-footer";
75139
+ return pageElement.querySelector(`.${className}`);
75140
+ };
75141
+ ensureEditorHost_fn = function(pageElement, kind) {
75142
+ const className = kind === "header" ? "superdoc-header-editor-host" : "superdoc-footer-editor-host";
75143
+ let editorHost = pageElement.querySelector(`.${className}`);
75144
+ if (!editorHost) {
75145
+ editorHost = document.createElement("div");
75146
+ editorHost.className = className;
75147
+ Object.assign(editorHost.style, {
75148
+ position: "absolute",
75149
+ pointerEvents: "auto",
75150
+ // Critical: enables click interaction
75151
+ visibility: "hidden",
75152
+ // Hidden by default, shown during editing
75153
+ overflow: "hidden",
75154
+ boxSizing: "border-box"
75155
+ });
75156
+ const decorationContainer = __privateMethod$1(this, _EditorOverlayManager_instances, findDecorationContainer_fn).call(this, pageElement, kind);
75157
+ if (!decorationContainer) {
75158
+ console.error(`[EditorOverlayManager] Decoration container not found for ${kind}`);
75159
+ return null;
75160
+ }
75161
+ decorationContainer.parentNode?.insertBefore(editorHost, decorationContainer.nextSibling);
75162
+ }
75163
+ return editorHost;
75164
+ };
75165
+ positionEditorHost_fn = function(editorHost, region, decorationContainer, _zoom) {
75166
+ const decorationRect = decorationContainer.getBoundingClientRect();
75167
+ const pageElement = editorHost.parentElement;
75168
+ if (!pageElement) {
75169
+ console.error("[EditorOverlayManager] Editor host has no parent element");
75170
+ return;
75171
+ }
75172
+ const pageRect = pageElement.getBoundingClientRect();
75173
+ const top2 = decorationRect.top - pageRect.top;
75174
+ const left2 = decorationRect.left - pageRect.left;
75175
+ const width = decorationRect.width;
75176
+ const height = decorationRect.height;
75177
+ Object.assign(editorHost.style, {
75178
+ top: `${top2}px`,
75179
+ left: `${left2}px`,
75180
+ width: `${width}px`,
75181
+ height: `${height}px`
75182
+ });
75183
+ if (region.kind === "footer") {
75184
+ const fragment = decorationContainer.querySelector(".superdoc-fragment");
75185
+ if (fragment instanceof HTMLElement) {
75186
+ const fragmentTop = parseFloat(fragment.style.top) || 0;
75187
+ editorHost.dataset.contentOffset = String(fragmentTop);
75188
+ }
75189
+ }
75190
+ };
75191
+ showHeaderFooterBorder_fn = function(pageElement, region, decorationContainer) {
75192
+ __privateMethod$1(this, _EditorOverlayManager_instances, hideHeaderFooterBorder_fn).call(this);
75193
+ __privateSet(this, _borderLine, document.createElement("div"));
75194
+ __privateGet$1(this, _borderLine).className = "superdoc-header-footer-border";
75195
+ const decorationRect = decorationContainer.getBoundingClientRect();
75196
+ const pageRect = pageElement.getBoundingClientRect();
75197
+ const isHeader = region.kind === "header";
75198
+ const topPosition = isHeader ? decorationRect.bottom - pageRect.top : decorationRect.top - pageRect.top;
75199
+ Object.assign(__privateGet$1(this, _borderLine).style, {
75200
+ position: "absolute",
75201
+ left: "0",
75202
+ right: "0",
75203
+ top: `${topPosition}px`,
75204
+ height: BORDER_LINE_HEIGHT,
75205
+ backgroundColor: BORDER_LINE_COLOR,
75206
+ // MS Word blue
75207
+ zIndex: BORDER_LINE_Z_INDEX,
75208
+ pointerEvents: "none"
75209
+ });
75210
+ pageElement.appendChild(__privateGet$1(this, _borderLine));
75211
+ };
75212
+ hideHeaderFooterBorder_fn = function() {
75213
+ if (__privateGet$1(this, _borderLine)) {
75214
+ __privateGet$1(this, _borderLine).remove();
75215
+ __privateSet(this, _borderLine, null);
75216
+ }
75217
+ };
74370
75218
  const uiSurfaces = /* @__PURE__ */ new WeakSet();
74371
75219
  function isInRegisteredSurface(event) {
74372
75220
  const path = typeof event.composedPath === "function" ? event.composedPath() : [];
@@ -74405,7 +75253,7 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
74405
75253
  __privateAdd$1(this, _visibleHost);
74406
75254
  __privateAdd$1(this, _viewportHost);
74407
75255
  __privateAdd$1(this, _painterHost);
74408
- __privateAdd$1(this, _selectionOverlay);
75256
+ __privateAdd$1(this, _selectionOverlay2);
74409
75257
  __privateAdd$1(this, _hiddenHost);
74410
75258
  __privateAdd$1(this, _layoutOptions);
74411
75259
  __privateAdd$1(this, _layoutState, { blocks: [], measures: [], layout: null });
@@ -74440,6 +75288,7 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
74440
75288
  __privateAdd$1(this, _footerRegions, /* @__PURE__ */ new Map());
74441
75289
  __privateAdd$1(this, _session, { mode: "body" });
74442
75290
  __privateAdd$1(this, _activeHeaderFooterEditor, null);
75291
+ __privateAdd$1(this, _overlayManager, null);
74443
75292
  __privateAdd$1(this, _hoverOverlay, null);
74444
75293
  __privateAdd$1(this, _hoverTooltip, null);
74445
75294
  __privateAdd$1(this, _modeBanner, null);
@@ -74494,6 +75343,11 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
74494
75343
  const x2 = (event.clientX - rect.left + scrollLeft) / zoom;
74495
75344
  const y2 = (event.clientY - rect.top + scrollTop) / zoom;
74496
75345
  if (__privateGet$1(this, _session).mode !== "body") {
75346
+ const activeEditorHost = __privateGet$1(this, _overlayManager)?.getActiveEditorHost?.();
75347
+ const clickedInsideEditorHost = activeEditorHost && (activeEditorHost.contains(event.target) || activeEditorHost === event.target);
75348
+ if (clickedInsideEditorHost) {
75349
+ return;
75350
+ }
74497
75351
  const headerFooterRegion2 = __privateMethod$1(this, _PresentationEditor_instances, hitTestHeaderFooterRegion_fn).call(this, x2, y2);
74498
75352
  if (!headerFooterRegion2) {
74499
75353
  __privateMethod$1(this, _PresentationEditor_instances, exitHeaderFooterMode_fn).call(this);
@@ -74648,6 +75502,11 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
74648
75502
  if (region) {
74649
75503
  event.preventDefault();
74650
75504
  event.stopPropagation();
75505
+ const descriptor = __privateMethod$1(this, _PresentationEditor_instances, resolveDescriptorForRegion_fn).call(this, region);
75506
+ if (!descriptor && __privateGet$1(this, _headerFooterManager)) {
75507
+ __privateMethod$1(this, _PresentationEditor_instances, createDefaultHeaderFooter_fn).call(this, region);
75508
+ __privateGet$1(this, _headerFooterManager).refresh();
75509
+ }
74651
75510
  __privateMethod$1(this, _PresentationEditor_instances, activateHeaderFooterRegion_fn).call(this, region);
74652
75511
  } else if (__privateGet$1(this, _session).mode !== "body") {
74653
75512
  __privateMethod$1(this, _PresentationEditor_instances, exitHeaderFooterMode_fn).call(this);
@@ -74716,13 +75575,13 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
74716
75575
  __privateGet$1(this, _painterHost).className = "presentation-editor__pages";
74717
75576
  __privateGet$1(this, _painterHost).style.transformOrigin = "top left";
74718
75577
  __privateGet$1(this, _viewportHost).appendChild(__privateGet$1(this, _painterHost));
74719
- __privateSet(this, _selectionOverlay, doc2.createElement("div"));
74720
- __privateGet$1(this, _selectionOverlay).className = "presentation-editor__selection-overlay";
74721
- __privateGet$1(this, _selectionOverlay).id = `presentation-overlay-${options.documentId || "default"}`;
74722
- __privateGet$1(this, _selectionOverlay).style.position = "absolute";
74723
- __privateGet$1(this, _selectionOverlay).style.inset = "0";
74724
- __privateGet$1(this, _selectionOverlay).style.pointerEvents = "none";
74725
- __privateGet$1(this, _selectionOverlay).style.zIndex = "10";
75578
+ __privateSet(this, _selectionOverlay2, doc2.createElement("div"));
75579
+ __privateGet$1(this, _selectionOverlay2).className = "presentation-editor__selection-overlay";
75580
+ __privateGet$1(this, _selectionOverlay2).id = `presentation-overlay-${options.documentId || "default"}`;
75581
+ __privateGet$1(this, _selectionOverlay2).style.position = "absolute";
75582
+ __privateGet$1(this, _selectionOverlay2).style.inset = "0";
75583
+ __privateGet$1(this, _selectionOverlay2).style.pointerEvents = "none";
75584
+ __privateGet$1(this, _selectionOverlay2).style.zIndex = "10";
74726
75585
  __privateSet(this, _remoteCursorOverlay, doc2.createElement("div"));
74727
75586
  __privateGet$1(this, _remoteCursorOverlay).className = "presentation-editor__selection-layer--remote";
74728
75587
  __privateGet$1(this, _remoteCursorOverlay).style.position = "absolute";
@@ -74733,9 +75592,9 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
74733
75592
  __privateGet$1(this, _localSelectionLayer).style.position = "absolute";
74734
75593
  __privateGet$1(this, _localSelectionLayer).style.inset = "0";
74735
75594
  __privateGet$1(this, _localSelectionLayer).style.pointerEvents = "none";
74736
- __privateGet$1(this, _selectionOverlay).appendChild(__privateGet$1(this, _remoteCursorOverlay));
74737
- __privateGet$1(this, _selectionOverlay).appendChild(__privateGet$1(this, _localSelectionLayer));
74738
- __privateGet$1(this, _viewportHost).appendChild(__privateGet$1(this, _selectionOverlay));
75595
+ __privateGet$1(this, _selectionOverlay2).appendChild(__privateGet$1(this, _remoteCursorOverlay));
75596
+ __privateGet$1(this, _selectionOverlay2).appendChild(__privateGet$1(this, _localSelectionLayer));
75597
+ __privateGet$1(this, _viewportHost).appendChild(__privateGet$1(this, _selectionOverlay2));
74739
75598
  __privateSet(this, _hoverOverlay, doc2.createElement("div"));
74740
75599
  __privateGet$1(this, _hoverOverlay).className = "presentation-editor__hover-overlay";
74741
75600
  Object.assign(__privateGet$1(this, _hoverOverlay).style, {
@@ -74746,7 +75605,7 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
74746
75605
  display: "none",
74747
75606
  zIndex: "11"
74748
75607
  });
74749
- __privateGet$1(this, _selectionOverlay).appendChild(__privateGet$1(this, _hoverOverlay));
75608
+ __privateGet$1(this, _selectionOverlay2).appendChild(__privateGet$1(this, _hoverOverlay));
74750
75609
  __privateSet(this, _hoverTooltip, doc2.createElement("div"));
74751
75610
  __privateGet$1(this, _hoverTooltip).className = "presentation-editor__hover-tooltip";
74752
75611
  Object.assign(__privateGet$1(this, _hoverTooltip).style, {
@@ -74761,7 +75620,7 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
74761
75620
  zIndex: "12",
74762
75621
  whiteSpace: "nowrap"
74763
75622
  });
74764
- __privateGet$1(this, _selectionOverlay).appendChild(__privateGet$1(this, _hoverTooltip));
75623
+ __privateGet$1(this, _selectionOverlay2).appendChild(__privateGet$1(this, _hoverTooltip));
74765
75624
  __privateSet(this, _modeBanner, doc2.createElement("div"));
74766
75625
  __privateGet$1(this, _modeBanner).className = "presentation-editor__mode-banner";
74767
75626
  Object.assign(__privateGet$1(this, _modeBanner).style, {
@@ -74979,7 +75838,7 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
74979
75838
  * ```
74980
75839
  */
74981
75840
  get overlayElement() {
74982
- return __privateGet$1(this, _selectionOverlay) ?? null;
75841
+ return __privateGet$1(this, _selectionOverlay2) ?? null;
74983
75842
  }
74984
75843
  /**
74985
75844
  * Set the document mode and update editor editability.
@@ -75149,12 +76008,12 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
75149
76008
  * @returns Array of rects, each containing pageIndex and position data (left, top, right, bottom, width, height)
75150
76009
  */
75151
76010
  getRangeRects(from2, to, relativeTo) {
75152
- if (!__privateGet$1(this, _selectionOverlay)) return [];
76011
+ if (!__privateGet$1(this, _selectionOverlay2)) return [];
75153
76012
  if (!Number.isFinite(from2) || !Number.isFinite(to)) return [];
75154
76013
  const start2 = Math.min(from2, to);
75155
76014
  const end2 = Math.max(from2, to);
75156
76015
  const zoom = __privateGet$1(this, _layoutOptions).zoom ?? 1;
75157
- const overlayRect = __privateGet$1(this, _selectionOverlay).getBoundingClientRect();
76016
+ const overlayRect = __privateGet$1(this, _selectionOverlay2).getBoundingClientRect();
75158
76017
  const relativeRect = relativeTo?.getBoundingClientRect() ?? null;
75159
76018
  const layoutRectSource = () => {
75160
76019
  if (__privateGet$1(this, _session).mode !== "body") {
@@ -75415,7 +76274,7 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
75415
76274
  return null;
75416
76275
  }
75417
76276
  const rect2 = rects2[0];
75418
- const overlayRect = __privateGet$1(this, _selectionOverlay)?.getBoundingClientRect();
76277
+ const overlayRect = __privateGet$1(this, _selectionOverlay2)?.getBoundingClientRect();
75419
76278
  if (!overlayRect) {
75420
76279
  return null;
75421
76280
  }
@@ -75585,7 +76444,7 @@ const _PresentationEditor = class _PresentationEditor2 extends EventEmitter$1 {
75585
76444
  __privateSet(this, _session, { mode: "body" });
75586
76445
  __privateSet(this, _activeHeaderFooterEditor, null);
75587
76446
  __privateSet(this, _domPainter, null);
75588
- __privateGet$1(this, _selectionOverlay)?.remove();
76447
+ __privateGet$1(this, _selectionOverlay2)?.remove();
75589
76448
  __privateGet$1(this, _painterHost)?.remove();
75590
76449
  __privateGet$1(this, _hiddenHost)?.remove();
75591
76450
  __privateSet(this, _hoverOverlay, null);
@@ -75607,7 +76466,7 @@ _editor3 = /* @__PURE__ */ new WeakMap();
75607
76466
  _visibleHost = /* @__PURE__ */ new WeakMap();
75608
76467
  _viewportHost = /* @__PURE__ */ new WeakMap();
75609
76468
  _painterHost = /* @__PURE__ */ new WeakMap();
75610
- _selectionOverlay = /* @__PURE__ */ new WeakMap();
76469
+ _selectionOverlay2 = /* @__PURE__ */ new WeakMap();
75611
76470
  _hiddenHost = /* @__PURE__ */ new WeakMap();
75612
76471
  _layoutOptions = /* @__PURE__ */ new WeakMap();
75613
76472
  _layoutState = /* @__PURE__ */ new WeakMap();
@@ -75642,6 +76501,7 @@ _headerRegions = /* @__PURE__ */ new WeakMap();
75642
76501
  _footerRegions = /* @__PURE__ */ new WeakMap();
75643
76502
  _session = /* @__PURE__ */ new WeakMap();
75644
76503
  _activeHeaderFooterEditor = /* @__PURE__ */ new WeakMap();
76504
+ _overlayManager = /* @__PURE__ */ new WeakMap();
75645
76505
  _hoverOverlay = /* @__PURE__ */ new WeakMap();
75646
76506
  _hoverTooltip = /* @__PURE__ */ new WeakMap();
75647
76507
  _modeBanner = /* @__PURE__ */ new WeakMap();
@@ -76007,9 +76867,14 @@ initHeaderFooterRegistry_fn = function() {
76007
76867
  __privateSet(this, _headerFooterManagerCleanups, []);
76008
76868
  __privateGet$1(this, _headerFooterAdapter)?.clear();
76009
76869
  __privateGet$1(this, _headerFooterManager)?.destroy();
76870
+ __privateGet$1(this, _overlayManager)?.destroy();
76010
76871
  __privateSet(this, _session, { mode: "body" });
76011
76872
  __privateSet(this, _activeHeaderFooterEditor, null);
76012
76873
  __privateGet$1(this, _inputBridge)?.notifyTargetChanged();
76874
+ __privateSet(this, _overlayManager, new EditorOverlayManager(__privateGet$1(this, _painterHost), __privateGet$1(this, _visibleHost), __privateGet$1(this, _selectionOverlay2)));
76875
+ __privateGet$1(this, _overlayManager).setOnDimmingClick(() => {
76876
+ __privateMethod$1(this, _PresentationEditor_instances, exitHeaderFooterMode_fn).call(this);
76877
+ });
76013
76878
  const converter = __privateGet$1(this, _editor3).converter;
76014
76879
  __privateSet(this, _headerFooterIdentifier, extractIdentifierFromConverter(converter));
76015
76880
  __privateSet(this, _headerFooterManager, new HeaderFooterEditorManager(__privateGet$1(this, _editor3)));
@@ -76358,6 +77223,9 @@ scheduleSelectionUpdate_fn = function() {
76358
77223
  });
76359
77224
  };
76360
77225
  updateSelection_fn = function() {
77226
+ if (__privateGet$1(this, _session).mode !== "body") {
77227
+ return;
77228
+ }
76361
77229
  if (!__privateGet$1(this, _localSelectionLayer)) {
76362
77230
  return;
76363
77231
  }
@@ -76367,22 +77235,6 @@ updateSelection_fn = function() {
76367
77235
  if (!selection) {
76368
77236
  return;
76369
77237
  }
76370
- if (__privateGet$1(this, _session).mode !== "body") {
76371
- if (!layout) {
76372
- return;
76373
- }
76374
- if (selection.from === selection.to) {
76375
- const caretLayout = __privateMethod$1(this, _PresentationEditor_instances, computeHeaderFooterCaretRect_fn).call(this, selection.from);
76376
- if (!caretLayout) {
76377
- return;
76378
- }
76379
- __privateMethod$1(this, _PresentationEditor_instances, renderCaretOverlay_fn).call(this, caretLayout);
76380
- return;
76381
- }
76382
- const rects2 = __privateMethod$1(this, _PresentationEditor_instances, computeHeaderFooterSelectionRects_fn).call(this, selection.from, selection.to);
76383
- __privateMethod$1(this, _PresentationEditor_instances, renderSelectionRects_fn).call(this, rects2);
76384
- return;
76385
- }
76386
77238
  if (!layout) {
76387
77239
  return;
76388
77240
  }
@@ -76617,46 +77469,168 @@ activateHeaderFooterRegion_fn = function(region) {
76617
77469
  void __privateMethod$1(this, _PresentationEditor_instances, enterHeaderFooterMode_fn).call(this, region);
76618
77470
  };
76619
77471
  enterHeaderFooterMode_fn = async function(region) {
76620
- if (!__privateGet$1(this, _headerFooterManager)) {
76621
- __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
76622
- return;
76623
- }
76624
- const descriptor = __privateMethod$1(this, _PresentationEditor_instances, resolveDescriptorForRegion_fn).call(this, region);
76625
- if (!descriptor) {
76626
- console.warn("[PresentationEditor] No descriptor found for region:", region);
76627
- __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
76628
- return;
76629
- }
76630
- if (!descriptor.id) {
76631
- console.warn("[PresentationEditor] Descriptor missing id:", descriptor);
76632
- __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
76633
- return;
76634
- }
76635
- const editor = await __privateGet$1(this, _headerFooterManager).ensureEditor(descriptor);
76636
- if (!editor) {
76637
- console.warn("[PresentationEditor] Failed to ensure editor for descriptor:", descriptor);
77472
+ try {
77473
+ if (!__privateGet$1(this, _headerFooterManager) || !__privateGet$1(this, _overlayManager)) {
77474
+ __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
77475
+ return;
77476
+ }
77477
+ const descriptor = __privateMethod$1(this, _PresentationEditor_instances, resolveDescriptorForRegion_fn).call(this, region);
77478
+ if (!descriptor) {
77479
+ console.warn("[PresentationEditor] No descriptor found for region:", region);
77480
+ __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
77481
+ return;
77482
+ }
77483
+ if (!descriptor.id) {
77484
+ console.warn("[PresentationEditor] Descriptor missing id:", descriptor);
77485
+ __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
77486
+ return;
77487
+ }
77488
+ let pageElement = __privateMethod$1(this, _PresentationEditor_instances, getPageElement_fn).call(this, region.pageIndex);
77489
+ if (!pageElement) {
77490
+ try {
77491
+ __privateMethod$1(this, _PresentationEditor_instances, scrollPageIntoView_fn).call(this, region.pageIndex);
77492
+ const mounted = await __privateMethod$1(this, _PresentationEditor_instances, waitForPageMount_fn).call(this, region.pageIndex, { timeout: 2e3 });
77493
+ if (!mounted) {
77494
+ console.error("[PresentationEditor] Failed to mount page for header/footer editing");
77495
+ __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
77496
+ this.emit("error", {
77497
+ error: new Error("Failed to mount page for editing"),
77498
+ context: "enterHeaderFooterMode"
77499
+ });
77500
+ return;
77501
+ }
77502
+ pageElement = __privateMethod$1(this, _PresentationEditor_instances, getPageElement_fn).call(this, region.pageIndex);
77503
+ } catch (scrollError) {
77504
+ console.error("[PresentationEditor] Error mounting page:", scrollError);
77505
+ __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
77506
+ this.emit("error", {
77507
+ error: scrollError,
77508
+ context: "enterHeaderFooterMode.pageMount"
77509
+ });
77510
+ return;
77511
+ }
77512
+ }
77513
+ if (!pageElement) {
77514
+ console.error("[PresentationEditor] Page element not found after mount attempt");
77515
+ __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
77516
+ this.emit("error", {
77517
+ error: new Error("Page element not found after mount"),
77518
+ context: "enterHeaderFooterMode"
77519
+ });
77520
+ return;
77521
+ }
77522
+ const { success, editorHost, reason } = __privateGet$1(this, _overlayManager).showEditingOverlay(
77523
+ pageElement,
77524
+ region,
77525
+ __privateGet$1(this, _layoutOptions).zoom ?? 1
77526
+ );
77527
+ if (!success || !editorHost) {
77528
+ console.error("[PresentationEditor] Failed to create editor host:", reason);
77529
+ __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
77530
+ this.emit("error", {
77531
+ error: new Error(`Failed to create editor host: ${reason}`),
77532
+ context: "enterHeaderFooterMode.showOverlay"
77533
+ });
77534
+ return;
77535
+ }
77536
+ const layout = __privateGet$1(this, _layoutState).layout;
77537
+ let editor;
77538
+ try {
77539
+ editor = await __privateGet$1(this, _headerFooterManager).ensureEditor(descriptor, {
77540
+ editorHost,
77541
+ availableWidth: region.width,
77542
+ availableHeight: region.height,
77543
+ currentPageNumber: region.pageNumber,
77544
+ totalPageCount: layout?.pages?.length ?? 1
77545
+ });
77546
+ } catch (editorError) {
77547
+ console.error("[PresentationEditor] Error creating editor:", editorError);
77548
+ __privateGet$1(this, _overlayManager).hideEditingOverlay();
77549
+ __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
77550
+ this.emit("error", {
77551
+ error: editorError,
77552
+ context: "enterHeaderFooterMode.ensureEditor"
77553
+ });
77554
+ return;
77555
+ }
77556
+ if (!editor) {
77557
+ console.warn("[PresentationEditor] Failed to ensure editor for descriptor:", descriptor);
77558
+ __privateGet$1(this, _overlayManager).hideEditingOverlay();
77559
+ __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
77560
+ this.emit("error", {
77561
+ error: new Error("Failed to create editor instance"),
77562
+ context: "enterHeaderFooterMode.ensureEditor"
77563
+ });
77564
+ return;
77565
+ }
77566
+ try {
77567
+ editor.setEditable(true);
77568
+ editor.setOptions({ documentMode: "editing" });
77569
+ try {
77570
+ const doc2 = editor.state?.doc;
77571
+ if (doc2) {
77572
+ const endPos = doc2.content.size - 1;
77573
+ editor.commands?.setTextSelection?.(Math.max(1, endPos));
77574
+ }
77575
+ } catch (cursorError) {
77576
+ console.warn("[PresentationEditor] Could not set cursor to end:", cursorError);
77577
+ }
77578
+ } catch (editableError) {
77579
+ console.error("[PresentationEditor] Error setting editor editable:", editableError);
77580
+ __privateGet$1(this, _overlayManager).hideEditingOverlay();
77581
+ __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
77582
+ this.emit("error", {
77583
+ error: editableError,
77584
+ context: "enterHeaderFooterMode.setEditable"
77585
+ });
77586
+ return;
77587
+ }
77588
+ __privateGet$1(this, _overlayManager).hideSelectionOverlay();
77589
+ __privateSet(this, _activeHeaderFooterEditor, editor);
77590
+ __privateSet(this, _session, {
77591
+ mode: region.kind,
77592
+ kind: region.kind,
77593
+ headerId: descriptor.id,
77594
+ sectionType: descriptor.variant ?? region.sectionType ?? null,
77595
+ pageIndex: region.pageIndex,
77596
+ pageNumber: region.pageNumber
77597
+ });
76638
77598
  __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
76639
- return;
77599
+ try {
77600
+ editor.view?.focus();
77601
+ } catch (focusError) {
77602
+ console.warn("[PresentationEditor] Could not focus editor:", focusError);
77603
+ }
77604
+ __privateMethod$1(this, _PresentationEditor_instances, emitHeaderFooterModeChanged_fn).call(this);
77605
+ __privateMethod$1(this, _PresentationEditor_instances, emitHeaderFooterEditingContext_fn).call(this, editor);
77606
+ __privateGet$1(this, _inputBridge)?.notifyTargetChanged();
77607
+ } catch (error) {
77608
+ console.error("[PresentationEditor] Unexpected error in enterHeaderFooterMode:", error);
77609
+ try {
77610
+ __privateGet$1(this, _overlayManager)?.hideEditingOverlay();
77611
+ __privateGet$1(this, _overlayManager)?.showSelectionOverlay();
77612
+ __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
77613
+ __privateSet(this, _activeHeaderFooterEditor, null);
77614
+ __privateSet(this, _session, { mode: "body" });
77615
+ } catch (cleanupError) {
77616
+ console.error("[PresentationEditor] Error during cleanup:", cleanupError);
77617
+ }
77618
+ this.emit("error", {
77619
+ error,
77620
+ context: "enterHeaderFooterMode"
77621
+ });
76640
77622
  }
76641
- __privateSet(this, _activeHeaderFooterEditor, editor);
76642
- __privateSet(this, _session, {
76643
- mode: region.kind,
76644
- kind: region.kind,
76645
- headerId: descriptor.id,
76646
- sectionType: descriptor.variant ?? region.sectionType ?? null,
76647
- pageIndex: region.pageIndex,
76648
- pageNumber: region.pageNumber
76649
- });
76650
- __privateMethod$1(this, _PresentationEditor_instances, clearHoverRegion_fn).call(this);
76651
- __privateMethod$1(this, _PresentationEditor_instances, emitHeaderFooterModeChanged_fn).call(this);
76652
- __privateMethod$1(this, _PresentationEditor_instances, emitHeaderFooterEditingContext_fn).call(this, editor);
76653
- __privateGet$1(this, _inputBridge)?.notifyTargetChanged();
76654
- editor.view?.focus();
76655
77623
  };
76656
77624
  exitHeaderFooterMode_fn = function() {
76657
77625
  if (__privateGet$1(this, _session).mode === "body") return;
76658
- __privateSet(this, _session, { mode: "body" });
77626
+ if (__privateGet$1(this, _activeHeaderFooterEditor)) {
77627
+ __privateGet$1(this, _activeHeaderFooterEditor).setEditable(false);
77628
+ __privateGet$1(this, _activeHeaderFooterEditor).setOptions({ documentMode: "viewing" });
77629
+ }
77630
+ __privateGet$1(this, _overlayManager)?.hideEditingOverlay();
77631
+ __privateGet$1(this, _overlayManager)?.showSelectionOverlay();
76659
77632
  __privateSet(this, _activeHeaderFooterEditor, null);
77633
+ __privateSet(this, _session, { mode: "body" });
76660
77634
  __privateMethod$1(this, _PresentationEditor_instances, emitHeaderFooterModeChanged_fn).call(this);
76661
77635
  __privateMethod$1(this, _PresentationEditor_instances, emitHeaderFooterEditingContext_fn).call(this, __privateGet$1(this, _editor3));
76662
77636
  __privateGet$1(this, _inputBridge)?.notifyTargetChanged();
@@ -76752,6 +77726,75 @@ resolveDescriptorForRegion_fn = function(region) {
76752
77726
  }
76753
77727
  return descriptors[0];
76754
77728
  };
77729
+ createDefaultHeaderFooter_fn = function(region) {
77730
+ const converter = __privateGet$1(this, _editor3).converter;
77731
+ if (!converter) {
77732
+ console.error("[PresentationEditor] Converter not available for creating header/footer");
77733
+ return;
77734
+ }
77735
+ const variant = region.sectionType ?? "default";
77736
+ try {
77737
+ if (region.kind === "header") {
77738
+ if (typeof converter.createDefaultHeader === "function") {
77739
+ const headerId = converter.createDefaultHeader(variant);
77740
+ console.log(`[PresentationEditor] Created default header: ${headerId}`);
77741
+ } else {
77742
+ console.error("[PresentationEditor] converter.createDefaultHeader is not a function");
77743
+ }
77744
+ } else if (region.kind === "footer") {
77745
+ if (typeof converter.createDefaultFooter === "function") {
77746
+ const footerId = converter.createDefaultFooter(variant);
77747
+ console.log(`[PresentationEditor] Created default footer: ${footerId}`);
77748
+ } else {
77749
+ console.error("[PresentationEditor] converter.createDefaultFooter is not a function");
77750
+ }
77751
+ }
77752
+ } catch (error) {
77753
+ console.error("[PresentationEditor] Failed to create default header/footer:", error);
77754
+ }
77755
+ };
77756
+ getPageElement_fn = function(pageIndex) {
77757
+ if (!__privateGet$1(this, _painterHost)) return null;
77758
+ const pageElements = __privateGet$1(this, _painterHost).querySelectorAll("[data-page-index]");
77759
+ for (let i = 0; i < pageElements.length; i++) {
77760
+ const el = pageElements[i];
77761
+ const dataPageIndex = el.getAttribute("data-page-index");
77762
+ if (dataPageIndex && parseInt(dataPageIndex, 10) === pageIndex) {
77763
+ return el;
77764
+ }
77765
+ }
77766
+ return null;
77767
+ };
77768
+ scrollPageIntoView_fn = function(pageIndex) {
77769
+ const layout = __privateGet$1(this, _layoutState).layout;
77770
+ if (!layout) return;
77771
+ const pageHeight = layout.pageSize?.h ?? DEFAULT_PAGE_SIZE.h;
77772
+ const virtualGap = __privateGet$1(this, _layoutOptions).virtualization?.gap ?? 0;
77773
+ const yPosition = pageIndex * (pageHeight + virtualGap);
77774
+ if (__privateGet$1(this, _visibleHost)) {
77775
+ __privateGet$1(this, _visibleHost).scrollTop = yPosition;
77776
+ }
77777
+ };
77778
+ waitForPageMount_fn = async function(pageIndex, options = {}) {
77779
+ const timeout2 = options.timeout ?? 2e3;
77780
+ const startTime = performance.now();
77781
+ return new Promise((resolve) => {
77782
+ const checkPage = () => {
77783
+ const pageElement = __privateMethod$1(this, _PresentationEditor_instances, getPageElement_fn).call(this, pageIndex);
77784
+ if (pageElement) {
77785
+ resolve(true);
77786
+ return;
77787
+ }
77788
+ const elapsed = performance.now() - startTime;
77789
+ if (elapsed >= timeout2) {
77790
+ resolve(false);
77791
+ return;
77792
+ }
77793
+ requestAnimationFrame(checkPage);
77794
+ };
77795
+ checkPage();
77796
+ });
77797
+ };
76755
77798
  getBodyPageHeight_fn = function() {
76756
77799
  return __privateGet$1(this, _layoutState).layout?.pageSize?.h ?? __privateGet$1(this, _layoutOptions).pageSize?.h ?? DEFAULT_PAGE_SIZE.h;
76757
77800
  };
@@ -76805,7 +77848,7 @@ renderHoverRegion_fn = function(region) {
76805
77848
  __privateGet$1(this, _hoverOverlay).style.top = `${coords.y}px`;
76806
77849
  __privateGet$1(this, _hoverOverlay).style.width = `${region.width * zoom}px`;
76807
77850
  __privateGet$1(this, _hoverOverlay).style.height = `${region.height * zoom}px`;
76808
- const tooltipText = `Double-click to edit ${region.kind === "header" ? "Header" : "Footer"} (${region.sectionType ?? "default"})`;
77851
+ const tooltipText = `Double-click to edit ${region.kind === "header" ? "header" : "footer"}`;
76809
77852
  __privateGet$1(this, _hoverTooltip).textContent = tooltipText;
76810
77853
  __privateGet$1(this, _hoverTooltip).style.display = "block";
76811
77854
  __privateGet$1(this, _hoverTooltip).style.left = `${coords.x}px`;
@@ -76911,33 +77954,6 @@ computeHeaderFooterSelectionRects_fn = function(from2, to) {
76911
77954
  };
76912
77955
  });
76913
77956
  };
76914
- computeHeaderFooterCaretRect_fn = function(pos) {
76915
- const context = __privateMethod$1(this, _PresentationEditor_instances, getHeaderFooterContext_fn).call(this);
76916
- if (!context) return null;
76917
- const hit = getFragmentAtPosition(context.layout, context.blocks, context.measures, pos);
76918
- if (!hit) return null;
76919
- const block = hit.block;
76920
- const measure = hit.measure;
76921
- if (!block || block.kind !== "paragraph" || measure?.kind !== "paragraph" || hit.fragment.kind !== "para")
76922
- return null;
76923
- const lineInfo = __privateMethod$1(this, _PresentationEditor_instances, findLineContainingPos_fn).call(this, block, measure, hit.fragment.fromLine, hit.fragment.toLine, pos);
76924
- if (!lineInfo) return null;
76925
- const { line, index: index2 } = lineInfo;
76926
- const range2 = computeLinePmRange$1(block, line);
76927
- if (range2.pmStart == null || range2.pmEnd == null) return null;
76928
- const pmCharsInLine = Math.max(1, range2.pmEnd - range2.pmStart);
76929
- const pmOffset = Math.max(0, Math.min(pmCharsInLine, pos - range2.pmStart));
76930
- const localX = hit.fragment.x + measureCharacterX(block, line, pmOffset);
76931
- const lineOffset = __privateMethod$1(this, _PresentationEditor_instances, lineHeightBeforeIndex_fn).call(this, measure.lines, hit.fragment.fromLine, index2);
76932
- const headerPageHeight = context.layout.pageSize?.h ?? context.region.height ?? 1;
76933
- const headerLocalY = hit.pageIndex * headerPageHeight + (hit.fragment.y + lineOffset);
76934
- return {
76935
- pageIndex: context.region.pageIndex,
76936
- x: context.region.localX + localX,
76937
- y: context.region.localY + headerLocalY,
76938
- height: line.lineHeight
76939
- };
76940
- };
76941
77957
  syncTrackedChangesPreferences_fn = function() {
76942
77958
  const mode = __privateMethod$1(this, _PresentationEditor_instances, deriveTrackedChangesMode_fn).call(this);
76943
77959
  const enabled = __privateMethod$1(this, _PresentationEditor_instances, deriveTrackedChangesEnabled_fn).call(this);
@@ -77044,7 +78060,7 @@ convertPageLocalToOverlayCoords_fn = function(pageIndex, pageLocalX, pageLocalY)
77044
78060
  return null;
77045
78061
  }
77046
78062
  const pageRect = pageEl.getBoundingClientRect();
77047
- const overlayRect = __privateGet$1(this, _selectionOverlay).getBoundingClientRect();
78063
+ const overlayRect = __privateGet$1(this, _selectionOverlay2).getBoundingClientRect();
77048
78064
  const zoom = __privateGet$1(this, _layoutOptions).zoom ?? 1;
77049
78065
  return {
77050
78066
  x: pageRect.left - overlayRect.left + pageLocalX * zoom,
@@ -81914,22 +82930,53 @@ function calculateTabLayout(request, measurement, view) {
81914
82930
  tabs
81915
82931
  };
81916
82932
  }
82933
+ const MAX_WALK_DEPTH = 50;
81917
82934
  function applyLayoutResult(result, paragraph, paragraphPos) {
81918
82935
  const decorations = [];
81919
82936
  let tabIndex = 0;
81920
- paragraph.forEach((node, offset2) => {
81921
- if (node.type.name !== "tab") return;
81922
- const pos = paragraphPos + offset2 + 1;
81923
- const tabId = tabIdForIndex(result.paragraphId, tabIndex++);
81924
- const layout = result.tabs[tabId];
81925
- if (!layout) return;
81926
- let style2 = `width: ${layout.width}px;`;
81927
- if (layout.height) style2 += ` height: ${layout.height};`;
81928
- if (layout.leader && leaderStyles[layout.leader]) {
81929
- style2 += ` ${leaderStyles[layout.leader]}`;
81930
- }
81931
- decorations.push(Decoration.node(pos, pos + node.nodeSize, { style: style2 }));
81932
- });
82937
+ const walk = (node, pos, depth = 0) => {
82938
+ if (depth > MAX_WALK_DEPTH) {
82939
+ console.error(`applyLayoutResult: Maximum recursion depth (${MAX_WALK_DEPTH}) exceeded`);
82940
+ return;
82941
+ }
82942
+ if (!node?.type?.name) {
82943
+ console.error("applyLayoutResult: Node missing type.name", { node, pos, depth });
82944
+ return;
82945
+ }
82946
+ if (typeof node.nodeSize !== "number" || node.nodeSize < 0 || !Number.isFinite(node.nodeSize)) {
82947
+ console.error("applyLayoutResult: Invalid nodeSize", { nodeSize: node.nodeSize, nodeName: node.type.name, pos });
82948
+ return;
82949
+ }
82950
+ if (node.type.name === "tab") {
82951
+ const tabId = tabIdForIndex(result.paragraphId, tabIndex++);
82952
+ const layout = result.tabs[tabId];
82953
+ if (layout) {
82954
+ let style2 = `width: ${layout.width}px;`;
82955
+ if (layout.height) style2 += ` height: ${layout.height};`;
82956
+ if (layout.leader && leaderStyles[layout.leader]) {
82957
+ style2 += ` ${leaderStyles[layout.leader]}`;
82958
+ }
82959
+ decorations.push(Decoration.node(pos, pos + node.nodeSize, { style: style2 }));
82960
+ }
82961
+ return;
82962
+ }
82963
+ try {
82964
+ let offset2 = 0;
82965
+ node.forEach((child) => {
82966
+ const childPos = pos + 1 + offset2;
82967
+ walk(child, childPos, depth + 1);
82968
+ offset2 += child.nodeSize;
82969
+ });
82970
+ } catch (error) {
82971
+ console.error("applyLayoutResult: Error during recursion", {
82972
+ error,
82973
+ nodeName: node.type.name,
82974
+ pos,
82975
+ depth
82976
+ });
82977
+ }
82978
+ };
82979
+ walk(paragraph, paragraphPos);
81933
82980
  return decorations;
81934
82981
  }
81935
82982
  function collectFollowingText(spans, startIndex) {
@@ -82477,8 +83524,8 @@ const createColGroup = (node, cellMinWidth2, overrideCol, overrideValue) => {
82477
83524
  colgroupValues
82478
83525
  };
82479
83526
  };
82480
- var readFromCache;
82481
- var addToCache;
83527
+ let readFromCache;
83528
+ let addToCache;
82482
83529
  if (typeof WeakMap != "undefined") {
82483
83530
  let cache2 = /* @__PURE__ */ new WeakMap();
82484
83531
  readFromCache = (key2) => cache2.get(key2);
@@ -82491,8 +83538,7 @@ if (typeof WeakMap != "undefined") {
82491
83538
  const cacheSize = 10;
82492
83539
  let cachePos = 0;
82493
83540
  readFromCache = (key2) => {
82494
- for (let i = 0; i < cache2.length; i += 2)
82495
- if (cache2[i] == key2) return cache2[i + 1];
83541
+ for (let i = 0; i < cache2.length; i += 2) if (cache2[i] == key2) return cache2[i + 1];
82496
83542
  };
82497
83543
  addToCache = (key2, value) => {
82498
83544
  if (cachePos == cacheSize) cachePos = 0;
@@ -82507,7 +83553,6 @@ var TableMap = class {
82507
83553
  this.map = map22;
82508
83554
  this.problems = problems;
82509
83555
  }
82510
- // Find the dimensions of the cell at the given position.
82511
83556
  findCell(pos) {
82512
83557
  for (let i = 0; i < this.map.length; i++) {
82513
83558
  const curPos = this.map[i];
@@ -82516,27 +83561,21 @@ var TableMap = class {
82516
83561
  const top2 = i / this.width | 0;
82517
83562
  let right2 = left2 + 1;
82518
83563
  let bottom2 = top2 + 1;
82519
- for (let j2 = 1; right2 < this.width && this.map[i + j2] == curPos; j2++) {
82520
- right2++;
82521
- }
82522
- for (let j2 = 1; bottom2 < this.height && this.map[i + this.width * j2] == curPos; j2++) {
82523
- bottom2++;
82524
- }
82525
- return { left: left2, top: top2, right: right2, bottom: bottom2 };
83564
+ for (let j2 = 1; right2 < this.width && this.map[i + j2] == curPos; j2++) right2++;
83565
+ for (let j2 = 1; bottom2 < this.height && this.map[i + this.width * j2] == curPos; j2++) bottom2++;
83566
+ return {
83567
+ left: left2,
83568
+ top: top2,
83569
+ right: right2,
83570
+ bottom: bottom2
83571
+ };
82526
83572
  }
82527
83573
  throw new RangeError(`No cell with offset ${pos} found`);
82528
83574
  }
82529
- // Find the left side of the cell at the given position.
82530
83575
  colCount(pos) {
82531
- for (let i = 0; i < this.map.length; i++) {
82532
- if (this.map[i] == pos) {
82533
- return i % this.width;
82534
- }
82535
- }
83576
+ for (let i = 0; i < this.map.length; i++) if (this.map[i] == pos) return i % this.width;
82536
83577
  throw new RangeError(`No cell with offset ${pos} found`);
82537
83578
  }
82538
- // Find the next cell in the given direction, starting from the cell
82539
- // at `pos`, if any.
82540
83579
  nextCell(pos, axis, dir) {
82541
83580
  const { left: left2, right: right2, top: top2, bottom: bottom2 } = this.findCell(pos);
82542
83581
  if (axis == "horiz") {
@@ -82547,20 +83586,9 @@ var TableMap = class {
82547
83586
  return this.map[left2 + this.width * (dir < 0 ? top2 - 1 : bottom2)];
82548
83587
  }
82549
83588
  }
82550
- // Get the rectangle spanning the two given cells.
82551
83589
  rectBetween(a, b2) {
82552
- const {
82553
- left: leftA,
82554
- right: rightA,
82555
- top: topA,
82556
- bottom: bottomA
82557
- } = this.findCell(a);
82558
- const {
82559
- left: leftB,
82560
- right: rightB,
82561
- top: topB,
82562
- bottom: bottomB
82563
- } = this.findCell(b2);
83590
+ const { left: leftA, right: rightA, top: topA, bottom: bottomA } = this.findCell(a);
83591
+ const { left: leftB, right: rightB, top: topB, bottom: bottomB } = this.findCell(b2);
82564
83592
  return {
82565
83593
  left: Math.min(leftA, leftB),
82566
83594
  top: Math.min(topA, topB),
@@ -82568,27 +83596,19 @@ var TableMap = class {
82568
83596
  bottom: Math.max(bottomA, bottomB)
82569
83597
  };
82570
83598
  }
82571
- // Return the position of all cells that have the top left corner in
82572
- // the given rectangle.
82573
83599
  cellsInRect(rect) {
82574
83600
  const result = [];
82575
83601
  const seen = {};
82576
- for (let row = rect.top; row < rect.bottom; row++) {
82577
- for (let col = rect.left; col < rect.right; col++) {
82578
- const index2 = row * this.width + col;
82579
- const pos = this.map[index2];
82580
- if (seen[pos]) continue;
82581
- seen[pos] = true;
82582
- if (col == rect.left && col && this.map[index2 - 1] == pos || row == rect.top && row && this.map[index2 - this.width] == pos) {
82583
- continue;
82584
- }
82585
- result.push(pos);
82586
- }
83602
+ for (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {
83603
+ const index2 = row * this.width + col;
83604
+ const pos = this.map[index2];
83605
+ if (seen[pos]) continue;
83606
+ seen[pos] = true;
83607
+ if (col == rect.left && col && this.map[index2 - 1] == pos || row == rect.top && row && this.map[index2 - this.width] == pos) continue;
83608
+ result.push(pos);
82587
83609
  }
82588
83610
  return result;
82589
83611
  }
82590
- // Return the position at which the cell at the given row and column
82591
- // starts, or would start, if a cell started there.
82592
83612
  positionAt(row, col, table) {
82593
83613
  for (let i = 0, rowStart = 0; ; i++) {
82594
83614
  const rowEnd = rowStart + table.child(i).nodeSize;
@@ -82601,14 +83621,12 @@ var TableMap = class {
82601
83621
  rowStart = rowEnd;
82602
83622
  }
82603
83623
  }
82604
- // Find the table map for the given table node.
82605
83624
  static get(table) {
82606
83625
  return readFromCache(table) || addToCache(table, computeMap(table));
82607
83626
  }
82608
83627
  };
82609
83628
  function computeMap(table) {
82610
- if (table.type.spec.tableRole != "table")
82611
- throw new RangeError("Not a table node: " + table.type.name);
83629
+ if (table.type.spec.tableRole != "table") throw new RangeError("Not a table node: " + table.type.name);
82612
83630
  const width = findWidth(table), height = table.childCount;
82613
83631
  const map22 = [];
82614
83632
  let mapPos = 0;
@@ -82635,22 +83653,19 @@ function computeMap(table) {
82635
83653
  const start2 = mapPos + h * width;
82636
83654
  for (let w2 = 0; w2 < colspan; w2++) {
82637
83655
  if (map22[start2 + w2] == 0) map22[start2 + w2] = pos;
82638
- else
82639
- (problems || (problems = [])).push({
82640
- type: "collision",
82641
- row,
82642
- pos,
82643
- n: colspan - w2
82644
- });
83656
+ else (problems || (problems = [])).push({
83657
+ type: "collision",
83658
+ row,
83659
+ pos,
83660
+ n: colspan - w2
83661
+ });
82645
83662
  const colW = colwidth && colwidth[w2];
82646
83663
  if (colW) {
82647
83664
  const widthIndex = (start2 + w2) % width * 2, prev = colWidths[widthIndex];
82648
83665
  if (prev == null || prev != colW && colWidths[widthIndex + 1] == 1) {
82649
83666
  colWidths[widthIndex] = colW;
82650
83667
  colWidths[widthIndex + 1] = 1;
82651
- } else if (prev == colW) {
82652
- colWidths[widthIndex + 1]++;
82653
- }
83668
+ } else if (prev == colW) colWidths[widthIndex + 1]++;
82654
83669
  }
82655
83670
  }
82656
83671
  }
@@ -82660,16 +83675,17 @@ function computeMap(table) {
82660
83675
  const expectedPos = (row + 1) * width;
82661
83676
  let missing = 0;
82662
83677
  while (mapPos < expectedPos) if (map22[mapPos++] == 0) missing++;
82663
- if (missing)
82664
- (problems || (problems = [])).push({ type: "missing", row, n: missing });
83678
+ if (missing) (problems || (problems = [])).push({
83679
+ type: "missing",
83680
+ row,
83681
+ n: missing
83682
+ });
82665
83683
  pos++;
82666
83684
  }
82667
- if (width === 0 || height === 0)
82668
- (problems || (problems = [])).push({ type: "zero_sized" });
83685
+ if (width === 0 || height === 0) (problems || (problems = [])).push({ type: "zero_sized" });
82669
83686
  const tableMap = new TableMap(width, height, map22, problems);
82670
83687
  let badWidths = false;
82671
- for (let i = 0; !badWidths && i < colWidths.length; i += 2)
82672
- if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true;
83688
+ for (let i = 0; !badWidths && i < colWidths.length; i += 2) if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true;
82673
83689
  if (badWidths) findBadColWidths(tableMap, colWidths, table);
82674
83690
  return tableMap;
82675
83691
  }
@@ -82679,14 +83695,13 @@ function findWidth(table) {
82679
83695
  for (let row = 0; row < table.childCount; row++) {
82680
83696
  const rowNode = table.child(row);
82681
83697
  let rowWidth = 0;
82682
- if (hasRowSpan)
82683
- for (let j2 = 0; j2 < row; j2++) {
82684
- const prevRow = table.child(j2);
82685
- for (let i = 0; i < prevRow.childCount; i++) {
82686
- const cell = prevRow.child(i);
82687
- if (j2 + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan;
82688
- }
83698
+ if (hasRowSpan) for (let j2 = 0; j2 < row; j2++) {
83699
+ const prevRow = table.child(j2);
83700
+ for (let i = 0; i < prevRow.childCount; i++) {
83701
+ const cell = prevRow.child(i);
83702
+ if (j2 + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan;
82689
83703
  }
83704
+ }
82690
83705
  for (let i = 0; i < rowNode.childCount; i++) {
82691
83706
  const cell = rowNode.child(i);
82692
83707
  rowWidth += cell.attrs.colspan;
@@ -82705,23 +83720,18 @@ function findBadColWidths(map22, colWidths, table) {
82705
83720
  if (seen[pos]) continue;
82706
83721
  seen[pos] = true;
82707
83722
  const node = table.nodeAt(pos);
82708
- if (!node) {
82709
- throw new RangeError(`No cell with offset ${pos} found`);
82710
- }
83723
+ if (!node) throw new RangeError(`No cell with offset ${pos} found`);
82711
83724
  let updated = null;
82712
83725
  const attrs = node.attrs;
82713
83726
  for (let j2 = 0; j2 < attrs.colspan; j2++) {
82714
- const col = (i + j2) % map22.width;
82715
- const colWidth = colWidths[col * 2];
82716
- if (colWidth != null && (!attrs.colwidth || attrs.colwidth[j2] != colWidth))
82717
- (updated || (updated = freshColWidth(attrs)))[j2] = colWidth;
82718
- }
82719
- if (updated)
82720
- map22.problems.unshift({
82721
- type: "colwidth mismatch",
82722
- pos,
82723
- colwidth: updated
82724
- });
83727
+ const colWidth = colWidths[(i + j2) % map22.width * 2];
83728
+ if (colWidth != null && (!attrs.colwidth || attrs.colwidth[j2] != colWidth)) (updated || (updated = freshColWidth(attrs)))[j2] = colWidth;
83729
+ }
83730
+ if (updated) map22.problems.unshift({
83731
+ type: "colwidth mismatch",
83732
+ pos,
83733
+ colwidth: updated
83734
+ });
82725
83735
  }
82726
83736
  }
82727
83737
  function freshColWidth(attrs) {
@@ -82741,11 +83751,9 @@ function tableNodeTypes(schema) {
82741
83751
  }
82742
83752
  return result;
82743
83753
  }
82744
- var tableEditingKey = new PluginKey("selectingCells");
83754
+ const tableEditingKey = new PluginKey("selectingCells");
82745
83755
  function cellAround$1($pos) {
82746
- for (let d2 = $pos.depth - 1; d2 > 0; d2--)
82747
- if ($pos.node(d2).type.spec.tableRole == "row")
82748
- return $pos.node(0).resolve($pos.before(d2 + 1));
83756
+ for (let d2 = $pos.depth - 1; d2 > 0; d2--) if ($pos.node(d2).type.spec.tableRole == "row") return $pos.node(0).resolve($pos.before(d2 + 1));
82749
83757
  return null;
82750
83758
  }
82751
83759
  function cellWrapping$1($pos) {
@@ -82757,21 +83765,15 @@ function cellWrapping$1($pos) {
82757
83765
  }
82758
83766
  function isInTable(state2) {
82759
83767
  const $head = state2.selection.$head;
82760
- for (let d2 = $head.depth; d2 > 0; d2--)
82761
- if ($head.node(d2).type.spec.tableRole == "row") return true;
83768
+ for (let d2 = $head.depth; d2 > 0; d2--) if ($head.node(d2).type.spec.tableRole == "row") return true;
82762
83769
  return false;
82763
83770
  }
82764
83771
  function selectionCell(state2) {
82765
83772
  const sel = state2.selection;
82766
- if ("$anchorCell" in sel && sel.$anchorCell) {
82767
- return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;
82768
- } else if ("node" in sel && sel.node && sel.node.type.spec.tableRole == "cell") {
82769
- return sel.$anchor;
82770
- }
83773
+ if ("$anchorCell" in sel && sel.$anchorCell) return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;
83774
+ else if ("node" in sel && sel.node && sel.node.type.spec.tableRole == "cell") return sel.$anchor;
82771
83775
  const $cell = cellAround$1(sel.$head) || cellNear(sel.$head);
82772
- if ($cell) {
82773
- return $cell;
82774
- }
83776
+ if ($cell) return $cell;
82775
83777
  throw new RangeError(`No cell found around position ${sel.head}`);
82776
83778
  }
82777
83779
  function cellNear($pos) {
@@ -82781,8 +83783,7 @@ function cellNear($pos) {
82781
83783
  }
82782
83784
  for (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {
82783
83785
  const role = before.type.spec.tableRole;
82784
- if (role == "cell" || role == "header_cell")
82785
- return $pos.doc.resolve(pos - before.nodeSize);
83786
+ if (role == "cell" || role == "header_cell") return $pos.doc.resolve(pos - before.nodeSize);
82786
83787
  }
82787
83788
  }
82788
83789
  function pointsAtCell($pos) {
@@ -82802,7 +83803,10 @@ function nextCell($pos, axis, dir) {
82802
83803
  return moved == null ? null : $pos.node(0).resolve(tableStart + moved);
82803
83804
  }
82804
83805
  function removeColSpan(attrs, pos, n = 1) {
82805
- const result = { ...attrs, colspan: attrs.colspan - n };
83806
+ const result = {
83807
+ ...attrs,
83808
+ colspan: attrs.colspan - n
83809
+ };
82806
83810
  if (result.colwidth) {
82807
83811
  result.colwidth = result.colwidth.slice();
82808
83812
  result.colwidth.splice(pos, n);
@@ -82811,7 +83815,10 @@ function removeColSpan(attrs, pos, n = 1) {
82811
83815
  return result;
82812
83816
  }
82813
83817
  function addColSpan(attrs, pos, n = 1) {
82814
- const result = { ...attrs, colspan: attrs.colspan + n };
83818
+ const result = {
83819
+ ...attrs,
83820
+ colspan: attrs.colspan + n
83821
+ };
82815
83822
  if (result.colwidth) {
82816
83823
  result.colwidth = result.colwidth.slice();
82817
83824
  for (let i = 0; i < n; i++) result.colwidth.splice(pos, 0, 0);
@@ -82820,37 +83827,23 @@ function addColSpan(attrs, pos, n = 1) {
82820
83827
  }
82821
83828
  function columnIsHeader(map22, table, col) {
82822
83829
  const headerCell = tableNodeTypes(table.type.schema).header_cell;
82823
- for (let row = 0; row < map22.height; row++)
82824
- if (table.nodeAt(map22.map[col + row * map22.width]).type != headerCell)
82825
- return false;
83830
+ for (let row = 0; row < map22.height; row++) if (table.nodeAt(map22.map[col + row * map22.width]).type != headerCell) return false;
82826
83831
  return true;
82827
83832
  }
82828
- var CellSelection = class _CellSelection extends Selection {
82829
- // A table selection is identified by its anchor and head cells. The
82830
- // positions given to this constructor should point _before_ two
82831
- // cells in the same table. They may be the same, to select a single
82832
- // cell.
83833
+ var CellSelection = class CellSelection2 extends Selection {
82833
83834
  constructor($anchorCell, $headCell = $anchorCell) {
82834
83835
  const table = $anchorCell.node(-1);
82835
83836
  const map22 = TableMap.get(table);
82836
83837
  const tableStart = $anchorCell.start(-1);
82837
- const rect = map22.rectBetween(
82838
- $anchorCell.pos - tableStart,
82839
- $headCell.pos - tableStart
82840
- );
83838
+ const rect = map22.rectBetween($anchorCell.pos - tableStart, $headCell.pos - tableStart);
82841
83839
  const doc2 = $anchorCell.node(0);
82842
83840
  const cells = map22.cellsInRect(rect).filter((p) => p != $headCell.pos - tableStart);
82843
83841
  cells.unshift($headCell.pos - tableStart);
82844
83842
  const ranges = cells.map((pos) => {
82845
83843
  const cell = table.nodeAt(pos);
82846
- if (!cell) {
82847
- throw RangeError(`No cell with offset ${pos} found`);
82848
- }
83844
+ if (!cell) throw new RangeError(`No cell with offset ${pos} found`);
82849
83845
  const from2 = tableStart + pos + 1;
82850
- return new SelectionRange(
82851
- doc2.resolve(from2),
82852
- doc2.resolve(from2 + cell.content.size)
82853
- );
83846
+ return new SelectionRange(doc2.resolve(from2), doc2.resolve(from2 + cell.content.size));
82854
83847
  });
82855
83848
  super(ranges[0].$from, ranges[0].$to, ranges);
82856
83849
  this.$anchorCell = $anchorCell;
@@ -82861,24 +83854,17 @@ var CellSelection = class _CellSelection extends Selection {
82861
83854
  const $headCell = doc2.resolve(mapping.map(this.$headCell.pos));
82862
83855
  if (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {
82863
83856
  const tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1);
82864
- if (tableChanged && this.isRowSelection())
82865
- return _CellSelection.rowSelection($anchorCell, $headCell);
82866
- else if (tableChanged && this.isColSelection())
82867
- return _CellSelection.colSelection($anchorCell, $headCell);
82868
- else return new _CellSelection($anchorCell, $headCell);
83857
+ if (tableChanged && this.isRowSelection()) return CellSelection2.rowSelection($anchorCell, $headCell);
83858
+ else if (tableChanged && this.isColSelection()) return CellSelection2.colSelection($anchorCell, $headCell);
83859
+ else return new CellSelection2($anchorCell, $headCell);
82869
83860
  }
82870
83861
  return TextSelection$1.between($anchorCell, $headCell);
82871
83862
  }
82872
- // Returns a rectangular slice of table rows containing the selected
82873
- // cells.
82874
83863
  content() {
82875
83864
  const table = this.$anchorCell.node(-1);
82876
83865
  const map22 = TableMap.get(table);
82877
83866
  const tableStart = this.$anchorCell.start(-1);
82878
- const rect = map22.rectBetween(
82879
- this.$anchorCell.pos - tableStart,
82880
- this.$headCell.pos - tableStart
82881
- );
83867
+ const rect = map22.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart);
82882
83868
  const seen = {};
82883
83869
  const rows = [];
82884
83870
  for (let row = rect.top; row < rect.bottom; row++) {
@@ -82889,44 +83875,25 @@ var CellSelection = class _CellSelection extends Selection {
82889
83875
  seen[pos] = true;
82890
83876
  const cellRect = map22.findCell(pos);
82891
83877
  let cell = table.nodeAt(pos);
82892
- if (!cell) {
82893
- throw RangeError(`No cell with offset ${pos} found`);
82894
- }
83878
+ if (!cell) throw new RangeError(`No cell with offset ${pos} found`);
82895
83879
  const extraLeft = rect.left - cellRect.left;
82896
83880
  const extraRight = cellRect.right - rect.right;
82897
83881
  if (extraLeft > 0 || extraRight > 0) {
82898
83882
  let attrs = cell.attrs;
82899
- if (extraLeft > 0) {
82900
- attrs = removeColSpan(attrs, 0, extraLeft);
82901
- }
82902
- if (extraRight > 0) {
82903
- attrs = removeColSpan(
82904
- attrs,
82905
- attrs.colspan - extraRight,
82906
- extraRight
82907
- );
82908
- }
83883
+ if (extraLeft > 0) attrs = removeColSpan(attrs, 0, extraLeft);
83884
+ if (extraRight > 0) attrs = removeColSpan(attrs, attrs.colspan - extraRight, extraRight);
82909
83885
  if (cellRect.left < rect.left) {
82910
83886
  cell = cell.type.createAndFill(attrs);
82911
- if (!cell) {
82912
- throw RangeError(
82913
- `Could not create cell with attrs ${JSON.stringify(attrs)}`
82914
- );
82915
- }
82916
- } else {
82917
- cell = cell.type.create(attrs, cell.content);
82918
- }
83887
+ if (!cell) throw new RangeError(`Could not create cell with attrs ${JSON.stringify(attrs)}`);
83888
+ } else cell = cell.type.create(attrs, cell.content);
82919
83889
  }
82920
83890
  if (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {
82921
83891
  const attrs = {
82922
83892
  ...cell.attrs,
82923
83893
  rowspan: Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top)
82924
83894
  };
82925
- if (cellRect.top < rect.top) {
82926
- cell = cell.type.createAndFill(attrs);
82927
- } else {
82928
- cell = cell.type.create(attrs, cell.content);
82929
- }
83895
+ if (cellRect.top < rect.top) cell = cell.type.createAndFill(attrs);
83896
+ else cell = cell.type.create(attrs, cell.content);
82930
83897
  }
82931
83898
  rowContent.push(cell);
82932
83899
  }
@@ -82939,16 +83906,9 @@ var CellSelection = class _CellSelection extends Selection {
82939
83906
  const mapFrom = tr.steps.length, ranges = this.ranges;
82940
83907
  for (let i = 0; i < ranges.length; i++) {
82941
83908
  const { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);
82942
- tr.replace(
82943
- mapping.map($from.pos),
82944
- mapping.map($to.pos),
82945
- i ? Slice.empty : content
82946
- );
83909
+ tr.replace(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);
82947
83910
  }
82948
- const sel = Selection.findFrom(
82949
- tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)),
82950
- -1
82951
- );
83911
+ const sel = Selection.findFrom(tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)), -1);
82952
83912
  if (sel) tr.setSelection(sel);
82953
83913
  }
82954
83914
  replaceWith(tr, node) {
@@ -82958,18 +83918,9 @@ var CellSelection = class _CellSelection extends Selection {
82958
83918
  const table = this.$anchorCell.node(-1);
82959
83919
  const map22 = TableMap.get(table);
82960
83920
  const tableStart = this.$anchorCell.start(-1);
82961
- const cells = map22.cellsInRect(
82962
- map22.rectBetween(
82963
- this.$anchorCell.pos - tableStart,
82964
- this.$headCell.pos - tableStart
82965
- )
82966
- );
82967
- for (let i = 0; i < cells.length; i++) {
82968
- f2(table.nodeAt(cells[i]), tableStart + cells[i]);
82969
- }
83921
+ const cells = map22.cellsInRect(map22.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart));
83922
+ for (let i = 0; i < cells.length; i++) f2(table.nodeAt(cells[i]), tableStart + cells[i]);
82970
83923
  }
82971
- // True if this selection goes all the way from the top to the
82972
- // bottom of the table.
82973
83924
  isColSelection() {
82974
83925
  const anchorTop = this.$anchorCell.index(-1);
82975
83926
  const headTop = this.$headCell.index(-1);
@@ -82978,8 +83929,6 @@ var CellSelection = class _CellSelection extends Selection {
82978
83929
  const headBottom = headTop + this.$headCell.nodeAfter.attrs.rowspan;
82979
83930
  return Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount;
82980
83931
  }
82981
- // Returns the smallest column selection that covers the given anchor
82982
- // and head cell.
82983
83932
  static colSelection($anchorCell, $headCell = $anchorCell) {
82984
83933
  const table = $anchorCell.node(-1);
82985
83934
  const map22 = TableMap.get(table);
@@ -82988,24 +83937,14 @@ var CellSelection = class _CellSelection extends Selection {
82988
83937
  const headRect = map22.findCell($headCell.pos - tableStart);
82989
83938
  const doc2 = $anchorCell.node(0);
82990
83939
  if (anchorRect.top <= headRect.top) {
82991
- if (anchorRect.top > 0)
82992
- $anchorCell = doc2.resolve(tableStart + map22.map[anchorRect.left]);
82993
- if (headRect.bottom < map22.height)
82994
- $headCell = doc2.resolve(
82995
- tableStart + map22.map[map22.width * (map22.height - 1) + headRect.right - 1]
82996
- );
83940
+ if (anchorRect.top > 0) $anchorCell = doc2.resolve(tableStart + map22.map[anchorRect.left]);
83941
+ if (headRect.bottom < map22.height) $headCell = doc2.resolve(tableStart + map22.map[map22.width * (map22.height - 1) + headRect.right - 1]);
82997
83942
  } else {
82998
- if (headRect.top > 0)
82999
- $headCell = doc2.resolve(tableStart + map22.map[headRect.left]);
83000
- if (anchorRect.bottom < map22.height)
83001
- $anchorCell = doc2.resolve(
83002
- tableStart + map22.map[map22.width * (map22.height - 1) + anchorRect.right - 1]
83003
- );
83943
+ if (headRect.top > 0) $headCell = doc2.resolve(tableStart + map22.map[headRect.left]);
83944
+ if (anchorRect.bottom < map22.height) $anchorCell = doc2.resolve(tableStart + map22.map[map22.width * (map22.height - 1) + anchorRect.right - 1]);
83004
83945
  }
83005
- return new _CellSelection($anchorCell, $headCell);
83946
+ return new CellSelection2($anchorCell, $headCell);
83006
83947
  }
83007
- // True if this selection goes all the way from the left to the
83008
- // right of the table.
83009
83948
  isRowSelection() {
83010
83949
  const table = this.$anchorCell.node(-1);
83011
83950
  const map22 = TableMap.get(table);
@@ -83018,10 +83957,8 @@ var CellSelection = class _CellSelection extends Selection {
83018
83957
  return Math.max(anchorRight, headRight) == map22.width;
83019
83958
  }
83020
83959
  eq(other) {
83021
- return other instanceof _CellSelection && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos;
83960
+ return other instanceof CellSelection2 && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos;
83022
83961
  }
83023
- // Returns the smallest row selection that covers the given anchor
83024
- // and head cell.
83025
83962
  static rowSelection($anchorCell, $headCell = $anchorCell) {
83026
83963
  const table = $anchorCell.node(-1);
83027
83964
  const map22 = TableMap.get(table);
@@ -83030,23 +83967,13 @@ var CellSelection = class _CellSelection extends Selection {
83030
83967
  const headRect = map22.findCell($headCell.pos - tableStart);
83031
83968
  const doc2 = $anchorCell.node(0);
83032
83969
  if (anchorRect.left <= headRect.left) {
83033
- if (anchorRect.left > 0)
83034
- $anchorCell = doc2.resolve(
83035
- tableStart + map22.map[anchorRect.top * map22.width]
83036
- );
83037
- if (headRect.right < map22.width)
83038
- $headCell = doc2.resolve(
83039
- tableStart + map22.map[map22.width * (headRect.top + 1) - 1]
83040
- );
83970
+ if (anchorRect.left > 0) $anchorCell = doc2.resolve(tableStart + map22.map[anchorRect.top * map22.width]);
83971
+ if (headRect.right < map22.width) $headCell = doc2.resolve(tableStart + map22.map[map22.width * (headRect.top + 1) - 1]);
83041
83972
  } else {
83042
- if (headRect.left > 0)
83043
- $headCell = doc2.resolve(tableStart + map22.map[headRect.top * map22.width]);
83044
- if (anchorRect.right < map22.width)
83045
- $anchorCell = doc2.resolve(
83046
- tableStart + map22.map[map22.width * (anchorRect.top + 1) - 1]
83047
- );
83973
+ if (headRect.left > 0) $headCell = doc2.resolve(tableStart + map22.map[headRect.top * map22.width]);
83974
+ if (anchorRect.right < map22.width) $anchorCell = doc2.resolve(tableStart + map22.map[map22.width * (anchorRect.top + 1) - 1]);
83048
83975
  }
83049
- return new _CellSelection($anchorCell, $headCell);
83976
+ return new CellSelection2($anchorCell, $headCell);
83050
83977
  }
83051
83978
  toJSON() {
83052
83979
  return {
@@ -83056,10 +83983,10 @@ var CellSelection = class _CellSelection extends Selection {
83056
83983
  };
83057
83984
  }
83058
83985
  static fromJSON(doc2, json) {
83059
- return new _CellSelection(doc2.resolve(json.anchor), doc2.resolve(json.head));
83986
+ return new CellSelection2(doc2.resolve(json.anchor), doc2.resolve(json.head));
83060
83987
  }
83061
83988
  static create(doc2, anchorCell, headCell = anchorCell) {
83062
- return new _CellSelection(doc2.resolve(anchorCell), doc2.resolve(headCell));
83989
+ return new CellSelection2(doc2.resolve(anchorCell), doc2.resolve(headCell));
83063
83990
  }
83064
83991
  getBookmark() {
83065
83992
  return new CellBookmark(this.$anchorCell.pos, this.$headCell.pos);
@@ -83067,18 +83994,17 @@ var CellSelection = class _CellSelection extends Selection {
83067
83994
  };
83068
83995
  CellSelection.prototype.visible = false;
83069
83996
  Selection.jsonID("cell", CellSelection);
83070
- var CellBookmark = class _CellBookmark {
83997
+ var CellBookmark = class CellBookmark2 {
83071
83998
  constructor(anchor, head) {
83072
83999
  this.anchor = anchor;
83073
84000
  this.head = head;
83074
84001
  }
83075
84002
  map(mapping) {
83076
- return new _CellBookmark(mapping.map(this.anchor), mapping.map(this.head));
84003
+ return new CellBookmark2(mapping.map(this.anchor), mapping.map(this.head));
83077
84004
  }
83078
84005
  resolve(doc2) {
83079
84006
  const $anchorCell = doc2.resolve(this.anchor), $headCell = doc2.resolve(this.head);
83080
- if ($anchorCell.parent.type.spec.tableRole == "row" && $headCell.parent.type.spec.tableRole == "row" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell))
83081
- return new CellSelection($anchorCell, $headCell);
84007
+ if ($anchorCell.parent.type.spec.tableRole == "row" && $headCell.parent.type.spec.tableRole == "row" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell)) return new CellSelection($anchorCell, $headCell);
83082
84008
  else return Selection.near($headCell, 1);
83083
84009
  }
83084
84010
  };
@@ -83086,9 +84012,7 @@ function drawCellSelection(state2) {
83086
84012
  if (!(state2.selection instanceof CellSelection)) return null;
83087
84013
  const cells = [];
83088
84014
  state2.selection.forEachCell((node, pos) => {
83089
- cells.push(
83090
- Decoration.node(pos, pos + node.nodeSize, { class: "selectedCell" })
83091
- );
84015
+ cells.push(Decoration.node(pos, pos + node.nodeSize, { class: "selectedCell" }));
83092
84016
  });
83093
84017
  return DecorationSet.create(state2.doc, cells);
83094
84018
  }
@@ -83097,10 +84021,8 @@ function isCellBoundarySelection({ $from, $to }) {
83097
84021
  let afterFrom = $from.pos;
83098
84022
  let beforeTo = $to.pos;
83099
84023
  let depth = $from.depth;
83100
- for (; depth >= 0; depth--, afterFrom++)
83101
- if ($from.after(depth + 1) < $from.end(depth)) break;
83102
- for (let d2 = $to.depth; d2 >= 0; d2--, beforeTo--)
83103
- if ($to.before(d2 + 1) > $to.start(d2)) break;
84024
+ for (; depth >= 0; depth--, afterFrom++) if ($from.after(depth + 1) < $from.end(depth)) break;
84025
+ for (let d2 = $to.depth; d2 >= 0; d2--, beforeTo--) if ($to.before(d2 + 1) > $to.start(d2)) break;
83104
84026
  return afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole);
83105
84027
  }
83106
84028
  function isTextSelectionAcrossCells({ $from, $to }) {
@@ -83128,9 +84050,8 @@ function normalizeSelection(state2, tr, allowTableNodeSelection) {
83128
84050
  let normalize2;
83129
84051
  let role;
83130
84052
  if (sel instanceof NodeSelection && (role = sel.node.type.spec.tableRole)) {
83131
- if (role == "cell" || role == "header_cell") {
83132
- normalize2 = CellSelection.create(doc2, sel.from);
83133
- } else if (role == "row") {
84053
+ if (role == "cell" || role == "header_cell") normalize2 = CellSelection.create(doc2, sel.from);
84054
+ else if (role == "row") {
83134
84055
  const $cell = doc2.resolve(sel.from + 1);
83135
84056
  normalize2 = CellSelection.rowSelection($cell, $cell);
83136
84057
  } else if (!allowTableNodeSelection) {
@@ -83139,29 +84060,23 @@ function normalizeSelection(state2, tr, allowTableNodeSelection) {
83139
84060
  const lastCell = start2 + map22.map[map22.width * map22.height - 1];
83140
84061
  normalize2 = CellSelection.create(doc2, start2 + 1, lastCell);
83141
84062
  }
83142
- } else if (sel instanceof TextSelection$1 && isCellBoundarySelection(sel)) {
83143
- normalize2 = TextSelection$1.create(doc2, sel.from);
83144
- } else if (sel instanceof TextSelection$1 && isTextSelectionAcrossCells(sel)) {
83145
- normalize2 = TextSelection$1.create(doc2, sel.$from.start(), sel.$from.end());
83146
- }
84063
+ } else if (sel instanceof TextSelection$1 && isCellBoundarySelection(sel)) normalize2 = TextSelection$1.create(doc2, sel.from);
84064
+ else if (sel instanceof TextSelection$1 && isTextSelectionAcrossCells(sel)) normalize2 = TextSelection$1.create(doc2, sel.$from.start(), sel.$from.end());
83147
84065
  if (normalize2) (tr || (tr = state2.tr)).setSelection(normalize2);
83148
84066
  return tr;
83149
84067
  }
83150
- var fixTablesKey = new PluginKey("fix-tables");
84068
+ const fixTablesKey = new PluginKey("fix-tables");
83151
84069
  function changedDescendants(old, cur, offset2, f2) {
83152
84070
  const oldSize = old.childCount, curSize = cur.childCount;
83153
84071
  outer: for (let i = 0, j2 = 0; i < curSize; i++) {
83154
84072
  const child = cur.child(i);
83155
- for (let scan = j2, e = Math.min(oldSize, i + 3); scan < e; scan++) {
83156
- if (old.child(scan) == child) {
83157
- j2 = scan + 1;
83158
- offset2 += child.nodeSize;
83159
- continue outer;
83160
- }
84073
+ for (let scan = j2, e = Math.min(oldSize, i + 3); scan < e; scan++) if (old.child(scan) == child) {
84074
+ j2 = scan + 1;
84075
+ offset2 += child.nodeSize;
84076
+ continue outer;
83161
84077
  }
83162
84078
  f2(child, offset2);
83163
- if (j2 < oldSize && old.child(j2).sameMarkup(child))
83164
- changedDescendants(old.child(j2), child, offset2 + 1, f2);
84079
+ if (j2 < oldSize && old.child(j2).sameMarkup(child)) changedDescendants(old.child(j2), child, offset2 + 1, f2);
83165
84080
  else child.nodesBetween(0, child.content.size, f2, offset2 + 1);
83166
84081
  offset2 += child.nodeSize;
83167
84082
  }
@@ -83169,12 +84084,10 @@ function changedDescendants(old, cur, offset2, f2) {
83169
84084
  function fixTables(state2, oldState) {
83170
84085
  let tr;
83171
84086
  const check = (node, pos) => {
83172
- if (node.type.spec.tableRole == "table")
83173
- tr = fixTable(state2, node, pos, tr);
84087
+ if (node.type.spec.tableRole == "table") tr = fixTable(state2, node, pos, tr);
83174
84088
  };
83175
84089
  if (!oldState) state2.doc.descendants(check);
83176
- else if (oldState.doc != state2.doc)
83177
- changedDescendants(oldState.doc, state2.doc, 0, check);
84090
+ else if (oldState.doc != state2.doc) changedDescendants(oldState.doc, state2.doc, 0, check);
83178
84091
  return tr;
83179
84092
  }
83180
84093
  function fixTable(state2, table, tablePos, tr) {
@@ -83190,14 +84103,9 @@ function fixTable(state2, table, tablePos, tr) {
83190
84103
  if (!cell) continue;
83191
84104
  const attrs = cell.attrs;
83192
84105
  for (let j2 = 0; j2 < attrs.rowspan; j2++) mustAdd[prob.row + j2] += prob.n;
83193
- tr.setNodeMarkup(
83194
- tr.mapping.map(tablePos + 1 + prob.pos),
83195
- null,
83196
- removeColSpan(attrs, attrs.colspan - prob.n, prob.n)
83197
- );
83198
- } else if (prob.type == "missing") {
83199
- mustAdd[prob.row] += prob.n;
83200
- } else if (prob.type == "overlong_rowspan") {
84106
+ tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, removeColSpan(attrs, attrs.colspan - prob.n, prob.n));
84107
+ } else if (prob.type == "missing") mustAdd[prob.row] += prob.n;
84108
+ else if (prob.type == "overlong_rowspan") {
83201
84109
  const cell = table.nodeAt(prob.pos);
83202
84110
  if (!cell) continue;
83203
84111
  tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {
@@ -83217,20 +84125,17 @@ function fixTable(state2, table, tablePos, tr) {
83217
84125
  }
83218
84126
  }
83219
84127
  let first2, last;
83220
- for (let i = 0; i < mustAdd.length; i++)
83221
- if (mustAdd[i]) {
83222
- if (first2 == null) first2 = i;
83223
- last = i;
83224
- }
84128
+ for (let i = 0; i < mustAdd.length; i++) if (mustAdd[i]) {
84129
+ if (first2 == null) first2 = i;
84130
+ last = i;
84131
+ }
83225
84132
  for (let i = 0, pos = tablePos + 1; i < map22.height; i++) {
83226
84133
  const row = table.child(i);
83227
84134
  const end2 = pos + row.nodeSize;
83228
84135
  const add = mustAdd[i];
83229
84136
  if (add > 0) {
83230
84137
  let role = "cell";
83231
- if (row.firstChild) {
83232
- role = row.firstChild.type.spec.tableRole;
83233
- }
84138
+ if (row.firstChild) role = row.firstChild.type.spec.tableRole;
83234
84139
  const nodes = [];
83235
84140
  for (let j2 = 0; j2 < add; j2++) {
83236
84141
  const node = tableNodeTypes(state2.schema)[role].createAndFill();
@@ -83249,27 +84154,22 @@ function selectedRect(state2) {
83249
84154
  const table = $pos.node(-1);
83250
84155
  const tableStart = $pos.start(-1);
83251
84156
  const map22 = TableMap.get(table);
83252
- const rect = sel instanceof CellSelection ? map22.rectBetween(
83253
- sel.$anchorCell.pos - tableStart,
83254
- sel.$headCell.pos - tableStart
83255
- ) : map22.findCell($pos.pos - tableStart);
83256
- return { ...rect, tableStart, map: map22, table };
84157
+ return {
84158
+ ...sel instanceof CellSelection ? map22.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart) : map22.findCell($pos.pos - tableStart),
84159
+ tableStart,
84160
+ map: map22,
84161
+ table
84162
+ };
83257
84163
  }
83258
84164
  function addColumn(tr, { map: map22, tableStart, table }, col) {
83259
84165
  let refColumn = col > 0 ? -1 : 0;
83260
- if (columnIsHeader(map22, table, col + refColumn)) {
83261
- refColumn = col == 0 || col == map22.width ? null : 0;
83262
- }
84166
+ if (columnIsHeader(map22, table, col + refColumn)) refColumn = col == 0 || col == map22.width ? null : 0;
83263
84167
  for (let row = 0; row < map22.height; row++) {
83264
84168
  const index2 = row * map22.width + col;
83265
84169
  if (col > 0 && col < map22.width && map22.map[index2 - 1] == map22.map[index2]) {
83266
84170
  const pos = map22.map[index2];
83267
84171
  const cell = table.nodeAt(pos);
83268
- tr.setNodeMarkup(
83269
- tr.mapping.map(tableStart + pos),
83270
- null,
83271
- addColSpan(cell.attrs, col - map22.colCount(pos))
83272
- );
84172
+ tr.setNodeMarkup(tr.mapping.map(tableStart + pos), null, addColSpan(cell.attrs, col - map22.colCount(pos)));
83273
84173
  row += cell.attrs.rowspan - 1;
83274
84174
  } else {
83275
84175
  const type2 = refColumn == null ? tableNodeTypes(table.type.schema).cell : table.nodeAt(map22.map[index2 + refColumn]).type;
@@ -83302,13 +84202,8 @@ function removeColumn(tr, { map: map22, table, tableStart }, col) {
83302
84202
  const pos = map22.map[index2];
83303
84203
  const cell = table.nodeAt(pos);
83304
84204
  const attrs = cell.attrs;
83305
- if (col > 0 && map22.map[index2 - 1] == pos || col < map22.width - 1 && map22.map[index2 + 1] == pos) {
83306
- tr.setNodeMarkup(
83307
- tr.mapping.slice(mapStart).map(tableStart + pos),
83308
- null,
83309
- removeColSpan(attrs, col - map22.colCount(pos))
83310
- );
83311
- } else {
84205
+ if (col > 0 && map22.map[index2 - 1] == pos || col < map22.width - 1 && map22.map[index2 + 1] == pos) tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + pos), null, removeColSpan(attrs, col - map22.colCount(pos)));
84206
+ else {
83312
84207
  const start2 = tr.mapping.slice(mapStart).map(tableStart + pos);
83313
84208
  tr.delete(start2, start2 + cell.nodeSize);
83314
84209
  }
@@ -83325,9 +84220,7 @@ function deleteColumn(state2, dispatch) {
83325
84220
  removeColumn(tr, rect, i);
83326
84221
  if (i == rect.left) break;
83327
84222
  const table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;
83328
- if (!table) {
83329
- throw RangeError("No table found");
83330
- }
84223
+ if (!table) throw new RangeError("No table found");
83331
84224
  rect.table = table;
83332
84225
  rect.map = TableMap.get(table);
83333
84226
  }
@@ -83336,35 +84229,30 @@ function deleteColumn(state2, dispatch) {
83336
84229
  return true;
83337
84230
  }
83338
84231
  function rowIsHeader(map22, table, row) {
83339
- var _a2;
84232
+ var _table$nodeAt;
83340
84233
  const headerCell = tableNodeTypes(table.type.schema).header_cell;
83341
- for (let col = 0; col < map22.width; col++)
83342
- if (((_a2 = table.nodeAt(map22.map[col + row * map22.width])) == null ? void 0 : _a2.type) != headerCell)
83343
- return false;
84234
+ for (let col = 0; col < map22.width; col++) if (((_table$nodeAt = table.nodeAt(map22.map[col + row * map22.width])) === null || _table$nodeAt === void 0 ? void 0 : _table$nodeAt.type) != headerCell) return false;
83344
84235
  return true;
83345
84236
  }
83346
84237
  function addRow(tr, { map: map22, tableStart, table }, row) {
83347
- var _a2;
83348
84238
  let rowPos = tableStart;
83349
84239
  for (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;
83350
84240
  const cells = [];
83351
84241
  let refRow = row > 0 ? -1 : 0;
83352
- if (rowIsHeader(map22, table, row + refRow))
83353
- refRow = row == 0 || row == map22.height ? null : 0;
83354
- for (let col = 0, index2 = map22.width * row; col < map22.width; col++, index2++) {
83355
- if (row > 0 && row < map22.height && map22.map[index2] == map22.map[index2 - map22.width]) {
83356
- const pos = map22.map[index2];
83357
- const attrs = table.nodeAt(pos).attrs;
83358
- tr.setNodeMarkup(tableStart + pos, null, {
83359
- ...attrs,
83360
- rowspan: attrs.rowspan + 1
83361
- });
83362
- col += attrs.colspan - 1;
83363
- } else {
83364
- const type2 = refRow == null ? tableNodeTypes(table.type.schema).cell : (_a2 = table.nodeAt(map22.map[index2 + refRow * map22.width])) == null ? void 0 : _a2.type;
83365
- const node = type2 == null ? void 0 : type2.createAndFill();
83366
- if (node) cells.push(node);
83367
- }
84242
+ if (rowIsHeader(map22, table, row + refRow)) refRow = row == 0 || row == map22.height ? null : 0;
84243
+ for (let col = 0, index2 = map22.width * row; col < map22.width; col++, index2++) if (row > 0 && row < map22.height && map22.map[index2] == map22.map[index2 - map22.width]) {
84244
+ const pos = map22.map[index2];
84245
+ const attrs = table.nodeAt(pos).attrs;
84246
+ tr.setNodeMarkup(tableStart + pos, null, {
84247
+ ...attrs,
84248
+ rowspan: attrs.rowspan + 1
84249
+ });
84250
+ col += attrs.colspan - 1;
84251
+ } else {
84252
+ var _table$nodeAt2;
84253
+ const type2 = refRow == null ? tableNodeTypes(table.type.schema).cell : (_table$nodeAt2 = table.nodeAt(map22.map[index2 + refRow * map22.width])) === null || _table$nodeAt2 === void 0 ? void 0 : _table$nodeAt2.type;
84254
+ const node = type2 === null || type2 === void 0 ? void 0 : type2.createAndFill();
84255
+ if (node) cells.push(node);
83368
84256
  }
83369
84257
  tr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells));
83370
84258
  return tr;
@@ -83406,10 +84294,10 @@ function removeRow(tr, { map: map22, table, tableStart }, row) {
83406
84294
  } else if (row < map22.height && pos == map22.map[index2 + map22.width]) {
83407
84295
  const cell = table.nodeAt(pos);
83408
84296
  const attrs = cell.attrs;
83409
- const copy2 = cell.type.create(
83410
- { ...attrs, rowspan: cell.attrs.rowspan - 1 },
83411
- cell.content
83412
- );
84297
+ const copy2 = cell.type.create({
84298
+ ...attrs,
84299
+ rowspan: cell.attrs.rowspan - 1
84300
+ }, cell.content);
83413
84301
  const newPos = map22.positionAt(row + 1, col, table);
83414
84302
  tr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy2);
83415
84303
  col += attrs.colspan - 1;
@@ -83425,9 +84313,7 @@ function deleteRow(state2, dispatch) {
83425
84313
  removeRow(tr, rect, i);
83426
84314
  if (i == rect.top) break;
83427
84315
  const table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;
83428
- if (!table) {
83429
- throw RangeError("No table found");
83430
- }
84316
+ if (!table) throw new RangeError("No table found");
83431
84317
  rect.table = table;
83432
84318
  rect.map = TableMap.get(rect.table);
83433
84319
  }
@@ -83443,14 +84329,12 @@ function cellsOverlapRectangle({ width, height, map: map22 }, rect) {
83443
84329
  let indexTop = rect.top * width + rect.left, indexLeft = indexTop;
83444
84330
  let indexBottom = (rect.bottom - 1) * width + rect.left, indexRight = indexTop + (rect.right - rect.left - 1);
83445
84331
  for (let i = rect.top; i < rect.bottom; i++) {
83446
- if (rect.left > 0 && map22[indexLeft] == map22[indexLeft - 1] || rect.right < width && map22[indexRight] == map22[indexRight + 1])
83447
- return true;
84332
+ if (rect.left > 0 && map22[indexLeft] == map22[indexLeft - 1] || rect.right < width && map22[indexRight] == map22[indexRight + 1]) return true;
83448
84333
  indexLeft += width;
83449
84334
  indexRight += width;
83450
84335
  }
83451
84336
  for (let i = rect.left; i < rect.right; i++) {
83452
- if (rect.top > 0 && map22[indexTop] == map22[indexTop - width] || rect.bottom < height && map22[indexBottom] == map22[indexBottom + width])
83453
- return true;
84337
+ if (rect.top > 0 && map22[indexTop] == map22[indexTop - width] || rect.bottom < height && map22[indexBottom] == map22[indexBottom + width]) return true;
83454
84338
  indexTop++;
83455
84339
  indexBottom++;
83456
84340
  }
@@ -83458,8 +84342,7 @@ function cellsOverlapRectangle({ width, height, map: map22 }, rect) {
83458
84342
  }
83459
84343
  function mergeCells(state2, dispatch) {
83460
84344
  const sel = state2.selection;
83461
- if (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos)
83462
- return false;
84345
+ if (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos) return false;
83463
84346
  const rect = selectedRect(state2), { map: map22 } = rect;
83464
84347
  if (cellsOverlapRectangle(map22, rect)) return false;
83465
84348
  if (dispatch) {
@@ -83468,41 +84351,31 @@ function mergeCells(state2, dispatch) {
83468
84351
  let content = Fragment.empty;
83469
84352
  let mergedPos;
83470
84353
  let mergedCell;
83471
- for (let row = rect.top; row < rect.bottom; row++) {
83472
- for (let col = rect.left; col < rect.right; col++) {
83473
- const cellPos = map22.map[row * map22.width + col];
83474
- const cell = rect.table.nodeAt(cellPos);
83475
- if (seen[cellPos] || !cell) continue;
83476
- seen[cellPos] = true;
83477
- if (mergedPos == null) {
83478
- mergedPos = cellPos;
83479
- mergedCell = cell;
83480
- } else {
83481
- if (!isEmpty(cell)) content = content.append(cell.content);
83482
- const mapped = tr.mapping.map(cellPos + rect.tableStart);
83483
- tr.delete(mapped, mapped + cell.nodeSize);
83484
- }
84354
+ for (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {
84355
+ const cellPos = map22.map[row * map22.width + col];
84356
+ const cell = rect.table.nodeAt(cellPos);
84357
+ if (seen[cellPos] || !cell) continue;
84358
+ seen[cellPos] = true;
84359
+ if (mergedPos == null) {
84360
+ mergedPos = cellPos;
84361
+ mergedCell = cell;
84362
+ } else {
84363
+ if (!isEmpty(cell)) content = content.append(cell.content);
84364
+ const mapped = tr.mapping.map(cellPos + rect.tableStart);
84365
+ tr.delete(mapped, mapped + cell.nodeSize);
83485
84366
  }
83486
84367
  }
83487
- if (mergedPos == null || mergedCell == null) {
83488
- return true;
83489
- }
84368
+ if (mergedPos == null || mergedCell == null) return true;
83490
84369
  tr.setNodeMarkup(mergedPos + rect.tableStart, null, {
83491
- ...addColSpan(
83492
- mergedCell.attrs,
83493
- mergedCell.attrs.colspan,
83494
- rect.right - rect.left - mergedCell.attrs.colspan
83495
- ),
84370
+ ...addColSpan(mergedCell.attrs, mergedCell.attrs.colspan, rect.right - rect.left - mergedCell.attrs.colspan),
83496
84371
  rowspan: rect.bottom - rect.top
83497
84372
  });
83498
- if (content.size) {
84373
+ if (content.size > 0) {
83499
84374
  const end2 = mergedPos + 1 + mergedCell.content.size;
83500
84375
  const start2 = isEmpty(mergedCell) ? mergedPos + 1 : end2;
83501
84376
  tr.replaceWith(start2 + rect.tableStart, end2 + rect.tableStart, content);
83502
84377
  }
83503
- tr.setSelection(
83504
- new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart))
83505
- );
84378
+ tr.setSelection(new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart)));
83506
84379
  dispatch(tr);
83507
84380
  }
83508
84381
  return true;
@@ -83515,63 +84388,57 @@ function splitCell(state2, dispatch) {
83515
84388
  }
83516
84389
  function splitCellWithType(getCellType2) {
83517
84390
  return (state2, dispatch) => {
83518
- var _a2;
83519
84391
  const sel = state2.selection;
83520
84392
  let cellNode;
83521
84393
  let cellPos;
83522
84394
  if (!(sel instanceof CellSelection)) {
84395
+ var _cellAround;
83523
84396
  cellNode = cellWrapping$1(sel.$from);
83524
84397
  if (!cellNode) return false;
83525
- cellPos = (_a2 = cellAround$1(sel.$from)) == null ? void 0 : _a2.pos;
84398
+ cellPos = (_cellAround = cellAround$1(sel.$from)) === null || _cellAround === void 0 ? void 0 : _cellAround.pos;
83526
84399
  } else {
83527
84400
  if (sel.$anchorCell.pos != sel.$headCell.pos) return false;
83528
84401
  cellNode = sel.$anchorCell.nodeAfter;
83529
84402
  cellPos = sel.$anchorCell.pos;
83530
84403
  }
83531
- if (cellNode == null || cellPos == null) {
83532
- return false;
83533
- }
83534
- if (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) {
83535
- return false;
83536
- }
84404
+ if (cellNode == null || cellPos == null) return false;
84405
+ if (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) return false;
83537
84406
  if (dispatch) {
83538
84407
  let baseAttrs = cellNode.attrs;
83539
84408
  const attrs = [];
83540
84409
  const colwidth = baseAttrs.colwidth;
83541
- if (baseAttrs.rowspan > 1) baseAttrs = { ...baseAttrs, rowspan: 1 };
83542
- if (baseAttrs.colspan > 1) baseAttrs = { ...baseAttrs, colspan: 1 };
84410
+ if (baseAttrs.rowspan > 1) baseAttrs = {
84411
+ ...baseAttrs,
84412
+ rowspan: 1
84413
+ };
84414
+ if (baseAttrs.colspan > 1) baseAttrs = {
84415
+ ...baseAttrs,
84416
+ colspan: 1
84417
+ };
83543
84418
  const rect = selectedRect(state2), tr = state2.tr;
83544
- for (let i = 0; i < rect.right - rect.left; i++)
83545
- attrs.push(
83546
- colwidth ? {
83547
- ...baseAttrs,
83548
- colwidth: colwidth && colwidth[i] ? [colwidth[i]] : null
83549
- } : baseAttrs
83550
- );
84419
+ for (let i = 0; i < rect.right - rect.left; i++) attrs.push(colwidth ? {
84420
+ ...baseAttrs,
84421
+ colwidth: colwidth && colwidth[i] ? [colwidth[i]] : null
84422
+ } : baseAttrs);
83551
84423
  let lastCell;
83552
84424
  for (let row = rect.top; row < rect.bottom; row++) {
83553
84425
  let pos = rect.map.positionAt(row, rect.left, rect.table);
83554
84426
  if (row == rect.top) pos += cellNode.nodeSize;
83555
84427
  for (let col = rect.left, i = 0; col < rect.right; col++, i++) {
83556
84428
  if (col == rect.left && row == rect.top) continue;
83557
- tr.insert(
83558
- lastCell = tr.mapping.map(pos + rect.tableStart, 1),
83559
- getCellType2({ node: cellNode, row, col }).createAndFill(attrs[i])
83560
- );
83561
- }
83562
- }
83563
- tr.setNodeMarkup(
83564
- cellPos,
83565
- getCellType2({ node: cellNode, row: rect.top, col: rect.left }),
83566
- attrs[0]
83567
- );
83568
- if (sel instanceof CellSelection)
83569
- tr.setSelection(
83570
- new CellSelection(
83571
- tr.doc.resolve(sel.$anchorCell.pos),
83572
- lastCell ? tr.doc.resolve(lastCell) : void 0
83573
- )
83574
- );
84429
+ tr.insert(lastCell = tr.mapping.map(pos + rect.tableStart, 1), getCellType2({
84430
+ node: cellNode,
84431
+ row,
84432
+ col
84433
+ }).createAndFill(attrs[i]));
84434
+ }
84435
+ }
84436
+ tr.setNodeMarkup(cellPos, getCellType2({
84437
+ node: cellNode,
84438
+ row: rect.top,
84439
+ col: rect.left
84440
+ }), attrs[0]);
84441
+ if (sel instanceof CellSelection) tr.setSelection(new CellSelection(tr.doc.resolve(sel.$anchorCell.pos), lastCell ? tr.doc.resolve(lastCell) : void 0));
83575
84442
  dispatch(tr);
83576
84443
  }
83577
84444
  return true;
@@ -83584,19 +84451,16 @@ function setCellAttr(name, value) {
83584
84451
  if ($cell.nodeAfter.attrs[name] === value) return false;
83585
84452
  if (dispatch) {
83586
84453
  const tr = state2.tr;
83587
- if (state2.selection instanceof CellSelection)
83588
- state2.selection.forEachCell((node, pos) => {
83589
- if (node.attrs[name] !== value)
83590
- tr.setNodeMarkup(pos, null, {
83591
- ...node.attrs,
83592
- [name]: value
83593
- });
83594
- });
83595
- else
83596
- tr.setNodeMarkup($cell.pos, null, {
83597
- ...$cell.nodeAfter.attrs,
84454
+ if (state2.selection instanceof CellSelection) state2.selection.forEachCell((node, pos) => {
84455
+ if (node.attrs[name] !== value) tr.setNodeMarkup(pos, null, {
84456
+ ...node.attrs,
83598
84457
  [name]: value
83599
84458
  });
84459
+ });
84460
+ else tr.setNodeMarkup($cell.pos, null, {
84461
+ ...$cell.nodeAfter.attrs,
84462
+ [name]: value
84463
+ });
83600
84464
  dispatch(tr);
83601
84465
  }
83602
84466
  return true;
@@ -83608,34 +84472,20 @@ function deprecated_toggleHeader(type2) {
83608
84472
  if (dispatch) {
83609
84473
  const types2 = tableNodeTypes(state2.schema);
83610
84474
  const rect = selectedRect(state2), tr = state2.tr;
83611
- const cells = rect.map.cellsInRect(
83612
- type2 == "column" ? {
83613
- left: rect.left,
83614
- top: 0,
83615
- right: rect.right,
83616
- bottom: rect.map.height
83617
- } : type2 == "row" ? {
83618
- left: 0,
83619
- top: rect.top,
83620
- right: rect.map.width,
83621
- bottom: rect.bottom
83622
- } : rect
83623
- );
84475
+ const cells = rect.map.cellsInRect(type2 == "column" ? {
84476
+ left: rect.left,
84477
+ top: 0,
84478
+ right: rect.right,
84479
+ bottom: rect.map.height
84480
+ } : type2 == "row" ? {
84481
+ left: 0,
84482
+ top: rect.top,
84483
+ right: rect.map.width,
84484
+ bottom: rect.bottom
84485
+ } : rect);
83624
84486
  const nodes = cells.map((pos) => rect.table.nodeAt(pos));
83625
- for (let i = 0; i < cells.length; i++)
83626
- if (nodes[i].type == types2.header_cell)
83627
- tr.setNodeMarkup(
83628
- rect.tableStart + cells[i],
83629
- types2.cell,
83630
- nodes[i].attrs
83631
- );
83632
- if (tr.steps.length == 0)
83633
- for (let i = 0; i < cells.length; i++)
83634
- tr.setNodeMarkup(
83635
- rect.tableStart + cells[i],
83636
- types2.header_cell,
83637
- nodes[i].attrs
83638
- );
84487
+ for (let i = 0; i < cells.length; i++) if (nodes[i].type == types2.header_cell) tr.setNodeMarkup(rect.tableStart + cells[i], types2.cell, nodes[i].attrs);
84488
+ if (tr.steps.length === 0) for (let i = 0; i < cells.length; i++) tr.setNodeMarkup(rect.tableStart + cells[i], types2.header_cell, nodes[i].attrs);
83639
84489
  dispatch(tr);
83640
84490
  }
83641
84491
  return true;
@@ -83650,9 +84500,7 @@ function isHeaderEnabledByType(type2, rect, types2) {
83650
84500
  });
83651
84501
  for (let i = 0; i < cellPositions.length; i++) {
83652
84502
  const cell = rect.table.nodeAt(cellPositions[i]);
83653
- if (cell && cell.type !== types2.header_cell) {
83654
- return false;
83655
- }
84503
+ if (cell && cell.type !== types2.header_cell) return false;
83656
84504
  }
83657
84505
  return true;
83658
84506
  }
@@ -83665,13 +84513,8 @@ function toggleHeader(type2, options) {
83665
84513
  const types2 = tableNodeTypes(state2.schema);
83666
84514
  const rect = selectedRect(state2), tr = state2.tr;
83667
84515
  const isHeaderRowEnabled = isHeaderEnabledByType("row", rect, types2);
83668
- const isHeaderColumnEnabled = isHeaderEnabledByType(
83669
- "column",
83670
- rect,
83671
- types2
83672
- );
83673
- const isHeaderEnabled = type2 === "column" ? isHeaderRowEnabled : type2 === "row" ? isHeaderColumnEnabled : false;
83674
- const selectionStartsAt = isHeaderEnabled ? 1 : 0;
84516
+ const isHeaderColumnEnabled = isHeaderEnabledByType("column", rect, types2);
84517
+ const selectionStartsAt = (type2 === "column" ? isHeaderRowEnabled : type2 === "row" ? isHeaderColumnEnabled : false) ? 1 : 0;
83675
84518
  const cellsRect = type2 == "column" ? {
83676
84519
  left: 0,
83677
84520
  top: selectionStartsAt,
@@ -83687,24 +84530,16 @@ function toggleHeader(type2, options) {
83687
84530
  rect.map.cellsInRect(cellsRect).forEach((relativeCellPos) => {
83688
84531
  const cellPos = relativeCellPos + rect.tableStart;
83689
84532
  const cell = tr.doc.nodeAt(cellPos);
83690
- if (cell) {
83691
- tr.setNodeMarkup(cellPos, newType, cell.attrs);
83692
- }
84533
+ if (cell) tr.setNodeMarkup(cellPos, newType, cell.attrs);
83693
84534
  });
83694
84535
  dispatch(tr);
83695
84536
  }
83696
84537
  return true;
83697
84538
  };
83698
84539
  }
83699
- toggleHeader("row", {
83700
- useDeprecatedLogic: true
83701
- });
83702
- toggleHeader("column", {
83703
- useDeprecatedLogic: true
83704
- });
83705
- var toggleHeaderCell = toggleHeader("cell", {
83706
- useDeprecatedLogic: true
83707
- });
84540
+ toggleHeader("row", { useDeprecatedLogic: true });
84541
+ toggleHeader("column", { useDeprecatedLogic: true });
84542
+ const toggleHeaderCell = toggleHeader("cell", { useDeprecatedLogic: true });
83708
84543
  function findNextCell($cell, dir) {
83709
84544
  if (dir < 0) {
83710
84545
  const before = $cell.nodeBefore;
@@ -83712,15 +84547,11 @@ function findNextCell($cell, dir) {
83712
84547
  for (let row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) {
83713
84548
  const rowNode = $cell.node(-1).child(row);
83714
84549
  const lastChild = rowNode.lastChild;
83715
- if (lastChild) {
83716
- return rowEnd - 1 - lastChild.nodeSize;
83717
- }
84550
+ if (lastChild) return rowEnd - 1 - lastChild.nodeSize;
83718
84551
  rowEnd -= rowNode.nodeSize;
83719
84552
  }
83720
84553
  } else {
83721
- if ($cell.index() < $cell.parent.childCount - 1) {
83722
- return $cell.pos + $cell.nodeAfter.nodeSize;
83723
- }
84554
+ if ($cell.index() < $cell.parent.childCount - 1) return $cell.pos + $cell.nodeAfter.nodeSize;
83724
84555
  const table = $cell.node(-1);
83725
84556
  for (let row = $cell.indexAfter(-1), rowStart = $cell.after(); row < table.childCount; row++) {
83726
84557
  const rowNode = table.child(row);
@@ -83737,24 +84568,16 @@ function goToNextCell(direction) {
83737
84568
  if (cell == null) return false;
83738
84569
  if (dispatch) {
83739
84570
  const $cell = state2.doc.resolve(cell);
83740
- dispatch(
83741
- state2.tr.setSelection(TextSelection$1.between($cell, moveCellForward($cell))).scrollIntoView()
83742
- );
84571
+ dispatch(state2.tr.setSelection(TextSelection$1.between($cell, moveCellForward($cell))).scrollIntoView());
83743
84572
  }
83744
84573
  return true;
83745
84574
  };
83746
84575
  }
83747
84576
  function deleteTable(state2, dispatch) {
83748
84577
  const $pos = state2.selection.$anchor;
83749
- for (let d2 = $pos.depth; d2 > 0; d2--) {
83750
- const node = $pos.node(d2);
83751
- if (node.type.spec.tableRole == "table") {
83752
- if (dispatch)
83753
- dispatch(
83754
- state2.tr.delete($pos.before(d2), $pos.after(d2)).scrollIntoView()
83755
- );
83756
- return true;
83757
- }
84578
+ for (let d2 = $pos.depth; d2 > 0; d2--) if ($pos.node(d2).type.spec.tableRole == "table") {
84579
+ if (dispatch) dispatch(state2.tr.delete($pos.before(d2), $pos.after(d2)).scrollIntoView());
84580
+ return true;
83758
84581
  }
83759
84582
  return false;
83760
84583
  }
@@ -83765,19 +84588,14 @@ function deleteCellSelection(state2, dispatch) {
83765
84588
  const tr = state2.tr;
83766
84589
  const baseContent = tableNodeTypes(state2.schema).cell.createAndFill().content;
83767
84590
  sel.forEachCell((cell, pos) => {
83768
- if (!cell.content.eq(baseContent))
83769
- tr.replace(
83770
- tr.mapping.map(pos + 1),
83771
- tr.mapping.map(pos + cell.nodeSize - 1),
83772
- new Slice(baseContent, 0, 0)
83773
- );
84591
+ if (!cell.content.eq(baseContent)) tr.replace(tr.mapping.map(pos + 1), tr.mapping.map(pos + cell.nodeSize - 1), new Slice(baseContent, 0, 0));
83774
84592
  });
83775
84593
  if (tr.docChanged) dispatch(tr);
83776
84594
  }
83777
84595
  return true;
83778
84596
  }
83779
84597
  function pastedCells(slice2) {
83780
- if (!slice2.size) return null;
84598
+ if (slice2.size === 0) return null;
83781
84599
  let { content, openStart, openEnd } = slice2;
83782
84600
  while (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.child(0).type.spec.tableRole == "table")) {
83783
84601
  openStart--;
@@ -83787,28 +84605,15 @@ function pastedCells(slice2) {
83787
84605
  const first2 = content.child(0);
83788
84606
  const role = first2.type.spec.tableRole;
83789
84607
  const schema = first2.type.schema, rows = [];
83790
- if (role == "row") {
83791
- for (let i = 0; i < content.childCount; i++) {
83792
- let cells = content.child(i).content;
83793
- const left2 = i ? 0 : Math.max(0, openStart - 1);
83794
- const right2 = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);
83795
- if (left2 || right2)
83796
- cells = fitSlice(
83797
- tableNodeTypes(schema).row,
83798
- new Slice(cells, left2, right2)
83799
- ).content;
83800
- rows.push(cells);
83801
- }
83802
- } else if (role == "cell" || role == "header_cell") {
83803
- rows.push(
83804
- openStart || openEnd ? fitSlice(
83805
- tableNodeTypes(schema).row,
83806
- new Slice(content, openStart, openEnd)
83807
- ).content : content
83808
- );
83809
- } else {
83810
- return null;
83811
- }
84608
+ if (role == "row") for (let i = 0; i < content.childCount; i++) {
84609
+ let cells = content.child(i).content;
84610
+ const left2 = i ? 0 : Math.max(0, openStart - 1);
84611
+ const right2 = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);
84612
+ if (left2 || right2) cells = fitSlice(tableNodeTypes(schema).row, new Slice(cells, left2, right2)).content;
84613
+ rows.push(cells);
84614
+ }
84615
+ else if (role == "cell" || role == "header_cell") rows.push(openStart || openEnd ? fitSlice(tableNodeTypes(schema).row, new Slice(content, openStart, openEnd)).content : content);
84616
+ else return null;
83812
84617
  return ensureRectangular(schema, rows);
83813
84618
  }
83814
84619
  function ensureRectangular(schema, rows) {
@@ -83817,8 +84622,7 @@ function ensureRectangular(schema, rows) {
83817
84622
  const row = rows[i];
83818
84623
  for (let j2 = row.childCount - 1; j2 >= 0; j2--) {
83819
84624
  const { rowspan, colspan } = row.child(j2).attrs;
83820
- for (let r2 = i; r2 < i + rowspan; r2++)
83821
- widths[r2] = (widths[r2] || 0) + colspan;
84625
+ for (let r2 = i; r2 < i + rowspan; r2++) widths[r2] = (widths[r2] || 0) + colspan;
83822
84626
  }
83823
84627
  }
83824
84628
  let width = 0;
@@ -83828,18 +84632,19 @@ function ensureRectangular(schema, rows) {
83828
84632
  if (widths[r2] < width) {
83829
84633
  const empty2 = tableNodeTypes(schema).cell.createAndFill();
83830
84634
  const cells = [];
83831
- for (let i = widths[r2]; i < width; i++) {
83832
- cells.push(empty2);
83833
- }
84635
+ for (let i = widths[r2]; i < width; i++) cells.push(empty2);
83834
84636
  rows[r2] = rows[r2].append(Fragment.from(cells));
83835
84637
  }
83836
84638
  }
83837
- return { height: rows.length, width, rows };
84639
+ return {
84640
+ height: rows.length,
84641
+ width,
84642
+ rows
84643
+ };
83838
84644
  }
83839
84645
  function fitSlice(nodeType, slice2) {
83840
84646
  const node = nodeType.createAndFill();
83841
- const tr = new Transform(node).replace(0, node.content.size, slice2);
83842
- return tr.doc;
84647
+ return new Transform(node).replace(0, node.content.size, slice2).doc;
83843
84648
  }
83844
84649
  function clipCells({ width, height, rows }, newWidth, newHeight) {
83845
84650
  if (width != newWidth) {
@@ -83849,19 +84654,10 @@ function clipCells({ width, height, rows }, newWidth, newHeight) {
83849
84654
  const frag = rows[row], cells = [];
83850
84655
  for (let col = added[row] || 0, i = 0; col < newWidth; i++) {
83851
84656
  let cell = frag.child(i % frag.childCount);
83852
- if (col + cell.attrs.colspan > newWidth)
83853
- cell = cell.type.createChecked(
83854
- removeColSpan(
83855
- cell.attrs,
83856
- cell.attrs.colspan,
83857
- col + cell.attrs.colspan - newWidth
83858
- ),
83859
- cell.content
83860
- );
84657
+ if (col + cell.attrs.colspan > newWidth) cell = cell.type.createChecked(removeColSpan(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content);
83861
84658
  cells.push(cell);
83862
84659
  col += cell.attrs.colspan;
83863
- for (let j2 = 1; j2 < cell.attrs.rowspan; j2++)
83864
- added[row + j2] = (added[row + j2] || 0) + cell.attrs.colspan;
84660
+ for (let j2 = 1; j2 < cell.attrs.rowspan; j2++) added[row + j2] = (added[row + j2] || 0) + cell.attrs.colspan;
83865
84661
  }
83866
84662
  newRows.push(Fragment.from(cells));
83867
84663
  }
@@ -83874,14 +84670,10 @@ function clipCells({ width, height, rows }, newWidth, newHeight) {
83874
84670
  const cells = [], source = rows[i % height];
83875
84671
  for (let j2 = 0; j2 < source.childCount; j2++) {
83876
84672
  let cell = source.child(j2);
83877
- if (row + cell.attrs.rowspan > newHeight)
83878
- cell = cell.type.create(
83879
- {
83880
- ...cell.attrs,
83881
- rowspan: Math.max(1, newHeight - cell.attrs.rowspan)
83882
- },
83883
- cell.content
83884
- );
84673
+ if (row + cell.attrs.rowspan > newHeight) cell = cell.type.create({
84674
+ ...cell.attrs,
84675
+ rowspan: Math.max(1, newHeight - cell.attrs.rowspan)
84676
+ }, cell.content);
83885
84677
  cells.push(cell);
83886
84678
  }
83887
84679
  newRows.push(Fragment.from(cells));
@@ -83889,33 +84681,32 @@ function clipCells({ width, height, rows }, newWidth, newHeight) {
83889
84681
  rows = newRows;
83890
84682
  height = newHeight;
83891
84683
  }
83892
- return { width, height, rows };
84684
+ return {
84685
+ width,
84686
+ height,
84687
+ rows
84688
+ };
83893
84689
  }
83894
84690
  function growTable(tr, map22, table, start2, width, height, mapFrom) {
83895
84691
  const schema = tr.doc.type.schema;
83896
84692
  const types2 = tableNodeTypes(schema);
83897
84693
  let empty2;
83898
84694
  let emptyHead;
83899
- if (width > map22.width) {
83900
- for (let row = 0, rowEnd = 0; row < map22.height; row++) {
83901
- const rowNode = table.child(row);
83902
- rowEnd += rowNode.nodeSize;
83903
- const cells = [];
83904
- let add;
83905
- if (rowNode.lastChild == null || rowNode.lastChild.type == types2.cell)
83906
- add = empty2 || (empty2 = types2.cell.createAndFill());
83907
- else add = emptyHead || (emptyHead = types2.header_cell.createAndFill());
83908
- for (let i = map22.width; i < width; i++) cells.push(add);
83909
- tr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start2), cells);
83910
- }
84695
+ if (width > map22.width) for (let row = 0, rowEnd = 0; row < map22.height; row++) {
84696
+ const rowNode = table.child(row);
84697
+ rowEnd += rowNode.nodeSize;
84698
+ const cells = [];
84699
+ let add;
84700
+ if (rowNode.lastChild == null || rowNode.lastChild.type == types2.cell) add = empty2 || (empty2 = types2.cell.createAndFill());
84701
+ else add = emptyHead || (emptyHead = types2.header_cell.createAndFill());
84702
+ for (let i = map22.width; i < width; i++) cells.push(add);
84703
+ tr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start2), cells);
83911
84704
  }
83912
84705
  if (height > map22.height) {
83913
84706
  const cells = [];
83914
- for (let i = 0, start22 = (map22.height - 1) * map22.width; i < Math.max(map22.width, width); i++) {
83915
- const header = i >= map22.width ? false : table.nodeAt(map22.map[start22 + i]).type == types2.header_cell;
83916
- cells.push(
83917
- header ? emptyHead || (emptyHead = types2.header_cell.createAndFill()) : empty2 || (empty2 = types2.cell.createAndFill())
83918
- );
84707
+ for (let i = 0, start$1 = (map22.height - 1) * map22.width; i < Math.max(map22.width, width); i++) {
84708
+ const header = i >= map22.width ? false : table.nodeAt(map22.map[start$1 + i]).type == types2.header_cell;
84709
+ cells.push(header ? emptyHead || (emptyHead = types2.header_cell.createAndFill()) : empty2 || (empty2 = types2.cell.createAndFill()));
83919
84710
  }
83920
84711
  const emptyRow = types2.row.create(null, Fragment.from(cells)), rows = [];
83921
84712
  for (let i = map22.height; i < height; i++) rows.push(emptyRow);
@@ -83936,13 +84727,10 @@ function isolateHorizontal(tr, map22, table, start2, left2, right2, top2, mapFro
83936
84727
  ...cell.attrs,
83937
84728
  rowspan: top2 - cellTop
83938
84729
  });
83939
- tr.insert(
83940
- tr.mapping.slice(mapFrom).map(map22.positionAt(top2, cellLeft, table)),
83941
- cell.type.createAndFill({
83942
- ...cell.attrs,
83943
- rowspan: cellTop + cell.attrs.rowspan - top2
83944
- })
83945
- );
84730
+ tr.insert(tr.mapping.slice(mapFrom).map(map22.positionAt(top2, cellLeft, table)), cell.type.createAndFill({
84731
+ ...cell.attrs,
84732
+ rowspan: cellTop + cell.attrs.rowspan - top2
84733
+ }));
83946
84734
  col += cell.attrs.colspan - 1;
83947
84735
  }
83948
84736
  }
@@ -83958,21 +84746,8 @@ function isolateVertical(tr, map22, table, start2, top2, bottom2, left2, mapFrom
83958
84746
  const cell = table.nodeAt(pos);
83959
84747
  const cellLeft = map22.colCount(pos);
83960
84748
  const updatePos = tr.mapping.slice(mapFrom).map(pos + start2);
83961
- tr.setNodeMarkup(
83962
- updatePos,
83963
- null,
83964
- removeColSpan(
83965
- cell.attrs,
83966
- left2 - cellLeft,
83967
- cell.attrs.colspan - (left2 - cellLeft)
83968
- )
83969
- );
83970
- tr.insert(
83971
- updatePos + cell.nodeSize,
83972
- cell.type.createAndFill(
83973
- removeColSpan(cell.attrs, 0, left2 - cellLeft)
83974
- )
83975
- );
84749
+ tr.setNodeMarkup(updatePos, null, removeColSpan(cell.attrs, left2 - cellLeft, cell.attrs.colspan - (left2 - cellLeft)));
84750
+ tr.insert(updatePos + cell.nodeSize, cell.type.createAndFill(removeColSpan(cell.attrs, 0, left2 - cellLeft)));
83976
84751
  row += cell.attrs.rowspan - 1;
83977
84752
  }
83978
84753
  }
@@ -83980,9 +84755,7 @@ function isolateVertical(tr, map22, table, start2, top2, bottom2, left2, mapFrom
83980
84755
  }
83981
84756
  function insertCells(state2, dispatch, tableStart, rect, cells) {
83982
84757
  let table = tableStart ? state2.doc.nodeAt(tableStart - 1) : state2.doc;
83983
- if (!table) {
83984
- throw new Error("No table found");
83985
- }
84758
+ if (!table) throw new Error("No table found");
83986
84759
  let map22 = TableMap.get(table);
83987
84760
  const { top: top2, left: left2 } = rect;
83988
84761
  const right2 = left2 + cells.width, bottom2 = top2 + cells.height;
@@ -83990,39 +84763,24 @@ function insertCells(state2, dispatch, tableStart, rect, cells) {
83990
84763
  let mapFrom = 0;
83991
84764
  function recomp() {
83992
84765
  table = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;
83993
- if (!table) {
83994
- throw new Error("No table found");
83995
- }
84766
+ if (!table) throw new Error("No table found");
83996
84767
  map22 = TableMap.get(table);
83997
84768
  mapFrom = tr.mapping.maps.length;
83998
84769
  }
83999
84770
  if (growTable(tr, map22, table, tableStart, right2, bottom2, mapFrom)) recomp();
84000
- if (isolateHorizontal(tr, map22, table, tableStart, left2, right2, top2, mapFrom))
84001
- recomp();
84002
- if (isolateHorizontal(tr, map22, table, tableStart, left2, right2, bottom2, mapFrom))
84003
- recomp();
84004
- if (isolateVertical(tr, map22, table, tableStart, top2, bottom2, left2, mapFrom))
84005
- recomp();
84006
- if (isolateVertical(tr, map22, table, tableStart, top2, bottom2, right2, mapFrom))
84007
- recomp();
84771
+ if (isolateHorizontal(tr, map22, table, tableStart, left2, right2, top2, mapFrom)) recomp();
84772
+ if (isolateHorizontal(tr, map22, table, tableStart, left2, right2, bottom2, mapFrom)) recomp();
84773
+ if (isolateVertical(tr, map22, table, tableStart, top2, bottom2, left2, mapFrom)) recomp();
84774
+ if (isolateVertical(tr, map22, table, tableStart, top2, bottom2, right2, mapFrom)) recomp();
84008
84775
  for (let row = top2; row < bottom2; row++) {
84009
84776
  const from2 = map22.positionAt(row, left2, table), to = map22.positionAt(row, right2, table);
84010
- tr.replace(
84011
- tr.mapping.slice(mapFrom).map(from2 + tableStart),
84012
- tr.mapping.slice(mapFrom).map(to + tableStart),
84013
- new Slice(cells.rows[row - top2], 0, 0)
84014
- );
84777
+ tr.replace(tr.mapping.slice(mapFrom).map(from2 + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart), new Slice(cells.rows[row - top2], 0, 0));
84015
84778
  }
84016
84779
  recomp();
84017
- tr.setSelection(
84018
- new CellSelection(
84019
- tr.doc.resolve(tableStart + map22.positionAt(top2, left2, table)),
84020
- tr.doc.resolve(tableStart + map22.positionAt(bottom2 - 1, right2 - 1, table))
84021
- )
84022
- );
84780
+ tr.setSelection(new CellSelection(tr.doc.resolve(tableStart + map22.positionAt(top2, left2, table)), tr.doc.resolve(tableStart + map22.positionAt(bottom2 - 1, right2 - 1, table))));
84023
84781
  dispatch(tr);
84024
84782
  }
84025
- var handleKeyDown = keydownHandler({
84783
+ const handleKeyDown = keydownHandler({
84026
84784
  ArrowLeft: arrow$2("horiz", -1),
84027
84785
  ArrowRight: arrow$2("horiz", 1),
84028
84786
  ArrowUp: arrow$2("vert", -1),
@@ -84045,29 +84803,17 @@ function arrow$2(axis, dir) {
84045
84803
  return (state2, dispatch, view) => {
84046
84804
  if (!view) return false;
84047
84805
  const sel = state2.selection;
84048
- if (sel instanceof CellSelection) {
84049
- return maybeSetSelection(
84050
- state2,
84051
- dispatch,
84052
- Selection.near(sel.$headCell, dir)
84053
- );
84054
- }
84806
+ if (sel instanceof CellSelection) return maybeSetSelection(state2, dispatch, Selection.near(sel.$headCell, dir));
84055
84807
  if (axis != "horiz" && !sel.empty) return false;
84056
84808
  const end2 = atEndOfCell(view, axis, dir);
84057
84809
  if (end2 == null) return false;
84058
- if (axis == "horiz") {
84059
- return maybeSetSelection(
84060
- state2,
84061
- dispatch,
84062
- Selection.near(state2.doc.resolve(sel.head + dir), dir)
84063
- );
84064
- } else {
84810
+ if (axis == "horiz") return maybeSetSelection(state2, dispatch, Selection.near(state2.doc.resolve(sel.head + dir), dir));
84811
+ else {
84065
84812
  const $cell = state2.doc.resolve(end2);
84066
84813
  const $next = nextCell($cell, axis, dir);
84067
84814
  let newSel;
84068
84815
  if ($next) newSel = Selection.near($next, 1);
84069
- else if (dir < 0)
84070
- newSel = Selection.near(state2.doc.resolve($cell.before(-1)), -1);
84816
+ else if (dir < 0) newSel = Selection.near(state2.doc.resolve($cell.before(-1)), -1);
84071
84817
  else newSel = Selection.near(state2.doc.resolve($cell.after(-1)), 1);
84072
84818
  return maybeSetSelection(state2, dispatch, newSel);
84073
84819
  }
@@ -84078,20 +84824,15 @@ function shiftArrow(axis, dir) {
84078
84824
  if (!view) return false;
84079
84825
  const sel = state2.selection;
84080
84826
  let cellSel;
84081
- if (sel instanceof CellSelection) {
84082
- cellSel = sel;
84083
- } else {
84827
+ if (sel instanceof CellSelection) cellSel = sel;
84828
+ else {
84084
84829
  const end2 = atEndOfCell(view, axis, dir);
84085
84830
  if (end2 == null) return false;
84086
84831
  cellSel = new CellSelection(state2.doc.resolve(end2));
84087
84832
  }
84088
84833
  const $head = nextCell(cellSel.$headCell, axis, dir);
84089
84834
  if (!$head) return false;
84090
- return maybeSetSelection(
84091
- state2,
84092
- dispatch,
84093
- new CellSelection(cellSel.$anchorCell, $head)
84094
- );
84835
+ return maybeSetSelection(state2, dispatch, new CellSelection(cellSel.$anchorCell, $head));
84095
84836
  };
84096
84837
  }
84097
84838
  function handleTripleClick(view, pos) {
@@ -84105,65 +84846,45 @@ function handlePaste(view, _2, slice2) {
84105
84846
  let cells = pastedCells(slice2);
84106
84847
  const sel = view.state.selection;
84107
84848
  if (sel instanceof CellSelection) {
84108
- if (!cells)
84109
- cells = {
84110
- width: 1,
84111
- height: 1,
84112
- rows: [
84113
- Fragment.from(
84114
- fitSlice(tableNodeTypes(view.state.schema).cell, slice2)
84115
- )
84116
- ]
84117
- };
84849
+ if (!cells) cells = {
84850
+ width: 1,
84851
+ height: 1,
84852
+ rows: [Fragment.from(fitSlice(tableNodeTypes(view.state.schema).cell, slice2))]
84853
+ };
84118
84854
  const table = sel.$anchorCell.node(-1);
84119
84855
  const start2 = sel.$anchorCell.start(-1);
84120
- const rect = TableMap.get(table).rectBetween(
84121
- sel.$anchorCell.pos - start2,
84122
- sel.$headCell.pos - start2
84123
- );
84856
+ const rect = TableMap.get(table).rectBetween(sel.$anchorCell.pos - start2, sel.$headCell.pos - start2);
84124
84857
  cells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top);
84125
84858
  insertCells(view.state, view.dispatch, start2, rect, cells);
84126
84859
  return true;
84127
84860
  } else if (cells) {
84128
84861
  const $cell = selectionCell(view.state);
84129
84862
  const start2 = $cell.start(-1);
84130
- insertCells(
84131
- view.state,
84132
- view.dispatch,
84133
- start2,
84134
- TableMap.get($cell.node(-1)).findCell($cell.pos - start2),
84135
- cells
84136
- );
84863
+ insertCells(view.state, view.dispatch, start2, TableMap.get($cell.node(-1)).findCell($cell.pos - start2), cells);
84137
84864
  return true;
84138
- } else {
84139
- return false;
84140
- }
84865
+ } else return false;
84141
84866
  }
84142
84867
  function handleMouseDown(view, startEvent) {
84143
- var _a2;
84868
+ var _cellUnderMouse;
84144
84869
  if (startEvent.ctrlKey || startEvent.metaKey) return;
84145
84870
  const startDOMCell = domInCell(view, startEvent.target);
84146
84871
  let $anchor;
84147
84872
  if (startEvent.shiftKey && view.state.selection instanceof CellSelection) {
84148
84873
  setCellSelection(view.state.selection.$anchorCell, startEvent);
84149
84874
  startEvent.preventDefault();
84150
- } else if (startEvent.shiftKey && startDOMCell && ($anchor = cellAround$1(view.state.selection.$anchor)) != null && ((_a2 = cellUnderMouse(view, startEvent)) == null ? void 0 : _a2.pos) != $anchor.pos) {
84875
+ } else if (startEvent.shiftKey && startDOMCell && ($anchor = cellAround$1(view.state.selection.$anchor)) != null && ((_cellUnderMouse = cellUnderMouse(view, startEvent)) === null || _cellUnderMouse === void 0 ? void 0 : _cellUnderMouse.pos) != $anchor.pos) {
84151
84876
  setCellSelection($anchor, startEvent);
84152
84877
  startEvent.preventDefault();
84153
- } else if (!startDOMCell) {
84154
- return;
84155
- }
84156
- function setCellSelection($anchor2, event) {
84878
+ } else if (!startDOMCell) return;
84879
+ function setCellSelection($anchor$1, event) {
84157
84880
  let $head = cellUnderMouse(view, event);
84158
84881
  const starting = tableEditingKey.getState(view.state) == null;
84159
- if (!$head || !inSameTable($anchor2, $head)) {
84160
- if (starting) $head = $anchor2;
84161
- else return;
84162
- }
84163
- const selection = new CellSelection($anchor2, $head);
84882
+ if (!$head || !inSameTable($anchor$1, $head)) if (starting) $head = $anchor$1;
84883
+ else return;
84884
+ const selection = new CellSelection($anchor$1, $head);
84164
84885
  if (starting || !view.state.selection.eq(selection)) {
84165
84886
  const tr = view.state.tr.setSelection(selection);
84166
- if (starting) tr.setMeta(tableEditingKey, $anchor2.pos);
84887
+ if (starting) tr.setMeta(tableEditingKey, $anchor$1.pos);
84167
84888
  view.dispatch(tr);
84168
84889
  }
84169
84890
  }
@@ -84171,20 +84892,18 @@ function handleMouseDown(view, startEvent) {
84171
84892
  view.root.removeEventListener("mouseup", stop);
84172
84893
  view.root.removeEventListener("dragstart", stop);
84173
84894
  view.root.removeEventListener("mousemove", move2);
84174
- if (tableEditingKey.getState(view.state) != null)
84175
- view.dispatch(view.state.tr.setMeta(tableEditingKey, -1));
84895
+ if (tableEditingKey.getState(view.state) != null) view.dispatch(view.state.tr.setMeta(tableEditingKey, -1));
84176
84896
  }
84177
84897
  function move2(_event) {
84178
84898
  const event = _event;
84179
84899
  const anchor = tableEditingKey.getState(view.state);
84180
- let $anchor2;
84181
- if (anchor != null) {
84182
- $anchor2 = view.state.doc.resolve(anchor);
84183
- } else if (domInCell(view, event.target) != startDOMCell) {
84184
- $anchor2 = cellUnderMouse(view, startEvent);
84185
- if (!$anchor2) return stop();
84900
+ let $anchor$1;
84901
+ if (anchor != null) $anchor$1 = view.state.doc.resolve(anchor);
84902
+ else if (domInCell(view, event.target) != startDOMCell) {
84903
+ $anchor$1 = cellUnderMouse(view, startEvent);
84904
+ if (!$anchor$1) return stop();
84186
84905
  }
84187
- if ($anchor2) setCellSelection($anchor2, event);
84906
+ if ($anchor$1) setCellSelection($anchor$1, event);
84188
84907
  }
84189
84908
  view.root.addEventListener("mouseup", stop);
84190
84909
  view.root.addEventListener("dragstart", stop);
@@ -84194,8 +84913,8 @@ function atEndOfCell(view, axis, dir) {
84194
84913
  if (!(view.state.selection instanceof TextSelection$1)) return null;
84195
84914
  const { $head } = view.state.selection;
84196
84915
  for (let d2 = $head.depth - 1; d2 >= 0; d2--) {
84197
- const parent = $head.node(d2), index2 = dir < 0 ? $head.index(d2) : $head.indexAfter(d2);
84198
- if (index2 != (dir < 0 ? 0 : parent.childCount)) return null;
84916
+ const parent = $head.node(d2);
84917
+ if ((dir < 0 ? $head.index(d2) : $head.indexAfter(d2)) != (dir < 0 ? 0 : parent.childCount)) return null;
84199
84918
  if (parent.type.spec.tableRole == "cell" || parent.type.spec.tableRole == "header_cell") {
84200
84919
  const cellPos = $head.before(d2);
84201
84920
  const dirStr = axis == "vert" ? dir > 0 ? "down" : "up" : dir > 0 ? "right" : "left";
@@ -84205,11 +84924,7 @@ function atEndOfCell(view, axis, dir) {
84205
84924
  return null;
84206
84925
  }
84207
84926
  function domInCell(view, dom) {
84208
- for (; dom && dom != view.dom; dom = dom.parentNode) {
84209
- if (dom.nodeName == "TD" || dom.nodeName == "TH") {
84210
- return dom;
84211
- }
84212
- }
84927
+ for (; dom && dom != view.dom; dom = dom.parentNode) if (dom.nodeName == "TD" || dom.nodeName == "TH") return dom;
84213
84928
  return null;
84214
84929
  }
84215
84930
  function cellUnderMouse(view, event) {
@@ -84218,7 +84933,8 @@ function cellUnderMouse(view, event) {
84218
84933
  top: event.clientY
84219
84934
  });
84220
84935
  if (!mousePos) return null;
84221
- return mousePos ? cellAround$1(view.state.doc.resolve(mousePos.pos)) : null;
84936
+ const pos = mousePos.inside >= 0 ? mousePos.inside : mousePos.pos;
84937
+ return cellAround$1(view.state.doc.resolve(pos));
84222
84938
  }
84223
84939
  var TableView = class {
84224
84940
  constructor(node, defaultCellMinWidth) {
@@ -84227,10 +84943,7 @@ var TableView = class {
84227
84943
  this.dom = document.createElement("div");
84228
84944
  this.dom.className = "tableWrapper";
84229
84945
  this.table = this.dom.appendChild(document.createElement("table"));
84230
- this.table.style.setProperty(
84231
- "--default-cell-min-width",
84232
- `${defaultCellMinWidth}px`
84233
- );
84946
+ this.table.style.setProperty("--default-cell-min-width", `${defaultCellMinWidth}px`);
84234
84947
  this.colgroup = this.table.appendChild(document.createElement("colgroup"));
84235
84948
  updateColumnsOnResize(node, this.colgroup, this.table, defaultCellMinWidth);
84236
84949
  this.contentDOM = this.table.appendChild(document.createElement("tbody"));
@@ -84238,12 +84951,7 @@ var TableView = class {
84238
84951
  update(node) {
84239
84952
  if (node.type != this.node.type) return false;
84240
84953
  this.node = node;
84241
- updateColumnsOnResize(
84242
- node,
84243
- this.colgroup,
84244
- this.table,
84245
- this.defaultCellMinWidth
84246
- );
84954
+ updateColumnsOnResize(node, this.colgroup, this.table, this.defaultCellMinWidth);
84247
84955
  return true;
84248
84956
  }
84249
84957
  ignoreMutation(record) {
@@ -84251,7 +84959,6 @@ var TableView = class {
84251
84959
  }
84252
84960
  };
84253
84961
  function updateColumnsOnResize(node, colgroup, table, defaultCellMinWidth, overrideCol, overrideValue) {
84254
- var _a2;
84255
84962
  let totalWidth = 0;
84256
84963
  let fixedWidth = true;
84257
84964
  let nextDOM = colgroup.firstChild;
@@ -84265,20 +84972,19 @@ function updateColumnsOnResize(node, colgroup, table, defaultCellMinWidth, overr
84265
84972
  totalWidth += hasWidth || defaultCellMinWidth;
84266
84973
  if (!hasWidth) fixedWidth = false;
84267
84974
  if (!nextDOM) {
84268
- const col2 = document.createElement("col");
84269
- col2.style.width = cssWidth;
84270
- colgroup.appendChild(col2);
84975
+ const col$1 = document.createElement("col");
84976
+ col$1.style.width = cssWidth;
84977
+ colgroup.appendChild(col$1);
84271
84978
  } else {
84272
- if (nextDOM.style.width != cssWidth) {
84273
- nextDOM.style.width = cssWidth;
84274
- }
84979
+ if (nextDOM.style.width != cssWidth) nextDOM.style.width = cssWidth;
84275
84980
  nextDOM = nextDOM.nextSibling;
84276
84981
  }
84277
84982
  }
84278
84983
  }
84279
84984
  while (nextDOM) {
84985
+ var _nextDOM$parentNode;
84280
84986
  const after = nextDOM.nextSibling;
84281
- (_a2 = nextDOM.parentNode) == null ? void 0 : _a2.removeChild(nextDOM);
84987
+ (_nextDOM$parentNode = nextDOM.parentNode) === null || _nextDOM$parentNode === void 0 || _nextDOM$parentNode.removeChild(nextDOM);
84282
84988
  nextDOM = after;
84283
84989
  }
84284
84990
  if (fixedWidth) {
@@ -84289,28 +84995,18 @@ function updateColumnsOnResize(node, colgroup, table, defaultCellMinWidth, overr
84289
84995
  table.style.minWidth = totalWidth + "px";
84290
84996
  }
84291
84997
  }
84292
- var columnResizingPluginKey = new PluginKey(
84293
- "tableColumnResizing"
84294
- );
84295
- function columnResizing({
84296
- handleWidth = 5,
84297
- cellMinWidth: cellMinWidth2 = 25,
84298
- defaultCellMinWidth = 100,
84299
- View = TableView,
84300
- lastColumnResizable = true
84301
- } = {}) {
84998
+ const columnResizingPluginKey = new PluginKey("tableColumnResizing");
84999
+ function columnResizing({ handleWidth = 5, cellMinWidth: cellMinWidth2 = 25, defaultCellMinWidth = 100, View = TableView, lastColumnResizable = true } = {}) {
84302
85000
  const plugin2 = new Plugin({
84303
85001
  key: columnResizingPluginKey,
84304
85002
  state: {
84305
85003
  init(_2, state2) {
84306
- var _a2, _b;
84307
- const nodeViews = (_b = (_a2 = plugin2.spec) == null ? void 0 : _a2.props) == null ? void 0 : _b.nodeViews;
85004
+ var _plugin$spec;
85005
+ const nodeViews = (_plugin$spec = plugin2.spec) === null || _plugin$spec === void 0 || (_plugin$spec = _plugin$spec.props) === null || _plugin$spec === void 0 ? void 0 : _plugin$spec.nodeViews;
84308
85006
  const tableName = tableNodeTypes(state2.schema).table.name;
84309
- if (View && nodeViews) {
84310
- nodeViews[tableName] = (node, view) => {
84311
- return new View(node, defaultCellMinWidth, view);
84312
- };
84313
- }
85007
+ if (View && nodeViews) nodeViews[tableName] = (node, view) => {
85008
+ return new View(node, defaultCellMinWidth, view);
85009
+ };
84314
85010
  return new ResizeState(-1, false);
84315
85011
  },
84316
85012
  apply(tr, prev) {
@@ -84330,21 +85026,19 @@ function columnResizing({
84330
85026
  handleMouseLeave(view);
84331
85027
  },
84332
85028
  mousedown: (view, event) => {
84333
- handleMouseDown2(view, event, cellMinWidth2, defaultCellMinWidth);
85029
+ handleMouseDown$1(view, event, cellMinWidth2, defaultCellMinWidth);
84334
85030
  }
84335
85031
  },
84336
85032
  decorations: (state2) => {
84337
85033
  const pluginState = columnResizingPluginKey.getState(state2);
84338
- if (pluginState && pluginState.activeHandle > -1) {
84339
- return handleDecorations(state2, pluginState.activeHandle);
84340
- }
85034
+ if (pluginState && pluginState.activeHandle > -1) return handleDecorations(state2, pluginState.activeHandle);
84341
85035
  },
84342
85036
  nodeViews: {}
84343
85037
  }
84344
85038
  });
84345
85039
  return plugin2;
84346
85040
  }
84347
- var ResizeState = class _ResizeState {
85041
+ var ResizeState = class ResizeState2 {
84348
85042
  constructor(activeHandle, dragging) {
84349
85043
  this.activeHandle = activeHandle;
84350
85044
  this.dragging = dragging;
@@ -84352,16 +85046,12 @@ var ResizeState = class _ResizeState {
84352
85046
  apply(tr) {
84353
85047
  const state2 = this;
84354
85048
  const action = tr.getMeta(columnResizingPluginKey);
84355
- if (action && action.setHandle != null)
84356
- return new _ResizeState(action.setHandle, false);
84357
- if (action && action.setDragging !== void 0)
84358
- return new _ResizeState(state2.activeHandle, action.setDragging);
85049
+ if (action && action.setHandle != null) return new ResizeState2(action.setHandle, false);
85050
+ if (action && action.setDragging !== void 0) return new ResizeState2(state2.activeHandle, action.setDragging);
84359
85051
  if (state2.activeHandle > -1 && tr.docChanged) {
84360
85052
  let handle = tr.mapping.map(state2.activeHandle, -1);
84361
- if (!pointsAtCell(tr.doc.resolve(handle))) {
84362
- handle = -1;
84363
- }
84364
- return new _ResizeState(handle, state2.dragging);
85053
+ if (!pointsAtCell(tr.doc.resolve(handle))) handle = -1;
85054
+ return new ResizeState2(handle, state2.dragging);
84365
85055
  }
84366
85056
  return state2;
84367
85057
  }
@@ -84375,10 +85065,8 @@ function handleMouseMove(view, event, handleWidth, lastColumnResizable) {
84375
85065
  let cell = -1;
84376
85066
  if (target) {
84377
85067
  const { left: left2, right: right2 } = target.getBoundingClientRect();
84378
- if (event.clientX - left2 <= handleWidth)
84379
- cell = edgeCell(view, event, "left", handleWidth);
84380
- else if (right2 - event.clientX <= handleWidth)
84381
- cell = edgeCell(view, event, "right", handleWidth);
85068
+ if (event.clientX - left2 <= handleWidth) cell = edgeCell(view, event, "left", handleWidth);
85069
+ else if (right2 - event.clientX <= handleWidth) cell = edgeCell(view, event, "right", handleWidth);
84382
85070
  }
84383
85071
  if (cell != pluginState.activeHandle) {
84384
85072
  if (!lastColumnResizable && cell !== -1) {
@@ -84386,10 +85074,7 @@ function handleMouseMove(view, event, handleWidth, lastColumnResizable) {
84386
85074
  const table = $cell.node(-1);
84387
85075
  const map22 = TableMap.get(table);
84388
85076
  const tableStart = $cell.start(-1);
84389
- const col = map22.colCount($cell.pos - tableStart) + $cell.nodeAfter.attrs.colspan - 1;
84390
- if (col == map22.width - 1) {
84391
- return;
84392
- }
85077
+ if (map22.colCount($cell.pos - tableStart) + $cell.nodeAfter.attrs.colspan - 1 == map22.width - 1) return;
84393
85078
  }
84394
85079
  updateHandle(view, cell);
84395
85080
  }
@@ -84398,58 +85083,39 @@ function handleMouseMove(view, event, handleWidth, lastColumnResizable) {
84398
85083
  function handleMouseLeave(view) {
84399
85084
  if (!view.editable) return;
84400
85085
  const pluginState = columnResizingPluginKey.getState(view.state);
84401
- if (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging)
84402
- updateHandle(view, -1);
85086
+ if (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging) updateHandle(view, -1);
84403
85087
  }
84404
- function handleMouseDown2(view, event, cellMinWidth2, defaultCellMinWidth) {
84405
- var _a2;
85088
+ function handleMouseDown$1(view, event, cellMinWidth2, defaultCellMinWidth) {
85089
+ var _view$dom$ownerDocume;
84406
85090
  if (!view.editable) return false;
84407
- const win = (_a2 = view.dom.ownerDocument.defaultView) != null ? _a2 : window;
85091
+ const win = (_view$dom$ownerDocume = view.dom.ownerDocument.defaultView) !== null && _view$dom$ownerDocume !== void 0 ? _view$dom$ownerDocume : window;
84408
85092
  const pluginState = columnResizingPluginKey.getState(view.state);
84409
- if (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging)
84410
- return false;
85093
+ if (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging) return false;
84411
85094
  const cell = view.state.doc.nodeAt(pluginState.activeHandle);
84412
85095
  const width = currentColWidth(view, pluginState.activeHandle, cell.attrs);
84413
- view.dispatch(
84414
- view.state.tr.setMeta(columnResizingPluginKey, {
84415
- setDragging: { startX: event.clientX, startWidth: width }
84416
- })
84417
- );
84418
- function finish(event2) {
85096
+ view.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: {
85097
+ startX: event.clientX,
85098
+ startWidth: width
85099
+ } }));
85100
+ function finish(event$1) {
84419
85101
  win.removeEventListener("mouseup", finish);
84420
85102
  win.removeEventListener("mousemove", move2);
84421
- const pluginState2 = columnResizingPluginKey.getState(view.state);
84422
- if (pluginState2 == null ? void 0 : pluginState2.dragging) {
84423
- updateColumnWidth(
84424
- view,
84425
- pluginState2.activeHandle,
84426
- draggedWidth(pluginState2.dragging, event2, cellMinWidth2)
84427
- );
84428
- view.dispatch(
84429
- view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null })
84430
- );
85103
+ const pluginState$1 = columnResizingPluginKey.getState(view.state);
85104
+ if (pluginState$1 === null || pluginState$1 === void 0 ? void 0 : pluginState$1.dragging) {
85105
+ updateColumnWidth(view, pluginState$1.activeHandle, draggedWidth(pluginState$1.dragging, event$1, cellMinWidth2));
85106
+ view.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null }));
84431
85107
  }
84432
85108
  }
84433
- function move2(event2) {
84434
- if (!event2.which) return finish(event2);
84435
- const pluginState2 = columnResizingPluginKey.getState(view.state);
84436
- if (!pluginState2) return;
84437
- if (pluginState2.dragging) {
84438
- const dragged = draggedWidth(pluginState2.dragging, event2, cellMinWidth2);
84439
- displayColumnWidth(
84440
- view,
84441
- pluginState2.activeHandle,
84442
- dragged,
84443
- defaultCellMinWidth
84444
- );
85109
+ function move2(event$1) {
85110
+ if (!event$1.which) return finish(event$1);
85111
+ const pluginState$1 = columnResizingPluginKey.getState(view.state);
85112
+ if (!pluginState$1) return;
85113
+ if (pluginState$1.dragging) {
85114
+ const dragged = draggedWidth(pluginState$1.dragging, event$1, cellMinWidth2);
85115
+ displayColumnWidth(view, pluginState$1.activeHandle, dragged, defaultCellMinWidth);
84445
85116
  }
84446
85117
  }
84447
- displayColumnWidth(
84448
- view,
84449
- pluginState.activeHandle,
84450
- width,
84451
- defaultCellMinWidth
84452
- );
85118
+ displayColumnWidth(view, pluginState.activeHandle, width, defaultCellMinWidth);
84453
85119
  win.addEventListener("mouseup", finish);
84454
85120
  win.addEventListener("mousemove", move2);
84455
85121
  event.preventDefault();
@@ -84459,20 +85125,17 @@ function currentColWidth(view, cellPos, { colspan, colwidth }) {
84459
85125
  const width = colwidth && colwidth[colwidth.length - 1];
84460
85126
  if (width) return width;
84461
85127
  const dom = view.domAtPos(cellPos);
84462
- const node = dom.node.childNodes[dom.offset];
84463
- let domWidth = node.offsetWidth, parts = colspan;
85128
+ let domWidth = dom.node.childNodes[dom.offset].offsetWidth, parts = colspan;
84464
85129
  if (colwidth) {
84465
- for (let i = 0; i < colspan; i++)
84466
- if (colwidth[i]) {
84467
- domWidth -= colwidth[i];
84468
- parts--;
84469
- }
85130
+ for (let i = 0; i < colspan; i++) if (colwidth[i]) {
85131
+ domWidth -= colwidth[i];
85132
+ parts--;
85133
+ }
84470
85134
  }
84471
85135
  return domWidth / parts;
84472
85136
  }
84473
85137
  function domCellAround(target) {
84474
- while (target && target.nodeName != "TD" && target.nodeName != "TH")
84475
- target = target.classList && target.classList.contains("ProseMirror") ? null : target.parentNode;
85138
+ while (target && target.nodeName != "TD" && target.nodeName != "TH") target = target.classList && target.classList.contains("ProseMirror") ? null : target.parentNode;
84476
85139
  return target;
84477
85140
  }
84478
85141
  function edgeCell(view, event, side, handleWidth) {
@@ -84495,9 +85158,7 @@ function draggedWidth(dragging, event, resizeMinWidth) {
84495
85158
  return Math.max(resizeMinWidth, dragging.startWidth + offset2);
84496
85159
  }
84497
85160
  function updateHandle(view, value) {
84498
- view.dispatch(
84499
- view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value })
84500
- );
85161
+ view.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value }));
84501
85162
  }
84502
85163
  function updateColumnWidth(view, cell, width) {
84503
85164
  const $cell = view.state.doc.resolve(cell);
@@ -84513,7 +85174,10 @@ function updateColumnWidth(view, cell, width) {
84513
85174
  if (attrs.colwidth && attrs.colwidth[index2] == width) continue;
84514
85175
  const colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan);
84515
85176
  colwidth[index2] = width;
84516
- tr.setNodeMarkup(start2 + pos, null, { ...attrs, colwidth });
85177
+ tr.setNodeMarkup(start2 + pos, null, {
85178
+ ...attrs,
85179
+ colwidth
85180
+ });
84517
85181
  }
84518
85182
  if (tr.docChanged) view.dispatch(tr);
84519
85183
  }
@@ -84522,64 +85186,38 @@ function displayColumnWidth(view, cell, width, defaultCellMinWidth) {
84522
85186
  const table = $cell.node(-1), start2 = $cell.start(-1);
84523
85187
  const col = TableMap.get(table).colCount($cell.pos - start2) + $cell.nodeAfter.attrs.colspan - 1;
84524
85188
  let dom = view.domAtPos($cell.start(-1)).node;
84525
- while (dom && dom.nodeName != "TABLE") {
84526
- dom = dom.parentNode;
84527
- }
85189
+ while (dom && dom.nodeName != "TABLE") dom = dom.parentNode;
84528
85190
  if (!dom) return;
84529
- updateColumnsOnResize(
84530
- table,
84531
- dom.firstChild,
84532
- dom,
84533
- defaultCellMinWidth,
84534
- col,
84535
- width
84536
- );
85191
+ updateColumnsOnResize(table, dom.firstChild, dom, defaultCellMinWidth, col, width);
84537
85192
  }
84538
85193
  function zeroes(n) {
84539
85194
  return Array(n).fill(0);
84540
85195
  }
84541
85196
  function handleDecorations(state2, cell) {
84542
- var _a2;
84543
85197
  const decorations = [];
84544
85198
  const $cell = state2.doc.resolve(cell);
84545
85199
  const table = $cell.node(-1);
84546
- if (!table) {
84547
- return DecorationSet.empty;
84548
- }
85200
+ if (!table) return DecorationSet.empty;
84549
85201
  const map22 = TableMap.get(table);
84550
85202
  const start2 = $cell.start(-1);
84551
85203
  const col = map22.colCount($cell.pos - start2) + $cell.nodeAfter.attrs.colspan - 1;
84552
85204
  for (let row = 0; row < map22.height; row++) {
84553
85205
  const index2 = col + row * map22.width;
84554
85206
  if ((col == map22.width - 1 || map22.map[index2] != map22.map[index2 + 1]) && (row == 0 || map22.map[index2] != map22.map[index2 - map22.width])) {
85207
+ var _columnResizingPlugin;
84555
85208
  const cellPos = map22.map[index2];
84556
85209
  const pos = start2 + cellPos + table.nodeAt(cellPos).nodeSize - 1;
84557
85210
  const dom = document.createElement("div");
84558
85211
  dom.className = "column-resize-handle";
84559
- if ((_a2 = columnResizingPluginKey.getState(state2)) == null ? void 0 : _a2.dragging) {
84560
- decorations.push(
84561
- Decoration.node(
84562
- start2 + cellPos,
84563
- start2 + cellPos + table.nodeAt(cellPos).nodeSize,
84564
- {
84565
- class: "column-resize-dragging"
84566
- }
84567
- )
84568
- );
84569
- }
85212
+ if ((_columnResizingPlugin = columnResizingPluginKey.getState(state2)) === null || _columnResizingPlugin === void 0 ? void 0 : _columnResizingPlugin.dragging) decorations.push(Decoration.node(start2 + cellPos, start2 + cellPos + table.nodeAt(cellPos).nodeSize, { class: "column-resize-dragging" }));
84570
85213
  decorations.push(Decoration.widget(pos, dom));
84571
85214
  }
84572
85215
  }
84573
85216
  return DecorationSet.create(state2.doc, decorations);
84574
85217
  }
84575
- function tableEditing({
84576
- allowTableNodeSelection = false
84577
- } = {}) {
85218
+ function tableEditing({ allowTableNodeSelection = false } = {}) {
84578
85219
  return new Plugin({
84579
85220
  key: tableEditingKey,
84580
- // This piece of state is used to remember when a mouse-drag
84581
- // cell-selection is happening, so that it can continue even as
84582
- // transactions (which might move its anchor cell) come in.
84583
85221
  state: {
84584
85222
  init() {
84585
85223
  return null;
@@ -84594,9 +85232,7 @@ function tableEditing({
84594
85232
  },
84595
85233
  props: {
84596
85234
  decorations: drawCellSelection,
84597
- handleDOMEvents: {
84598
- mousedown: handleMouseDown
84599
- },
85235
+ handleDOMEvents: { mousedown: handleMouseDown },
84600
85236
  createSelectionBetween(view) {
84601
85237
  return tableEditingKey.getState(view.state) != null ? view.state.selection : null;
84602
85238
  },
@@ -84605,11 +85241,7 @@ function tableEditing({
84605
85241
  handlePaste
84606
85242
  },
84607
85243
  appendTransaction(_2, oldState, state2) {
84608
- return normalizeSelection(
84609
- state2,
84610
- fixTables(state2, oldState),
84611
- allowTableNodeSelection
84612
- );
85244
+ return normalizeSelection(state2, fixTables(state2, oldState), allowTableNodeSelection);
84613
85245
  }
84614
85246
  });
84615
85247
  }
@@ -95684,7 +96316,7 @@ const _hoisted_2$c = { key: 0 };
95684
96316
  const _hoisted_3$a = { key: 0 };
95685
96317
  const _hoisted_4$6 = { key: 1 };
95686
96318
  const _hoisted_5$5 = { key: 1 };
95687
- const _sfc_main$j = {
96319
+ const _sfc_main$k = {
95688
96320
  __name: "Mentions",
95689
96321
  props: {
95690
96322
  users: {
@@ -95767,7 +96399,7 @@ const _sfc_main$j = {
95767
96399
  };
95768
96400
  }
95769
96401
  };
95770
- const Mentions = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-bcae18cf"]]);
96402
+ const Mentions = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-bcae18cf"]]);
95771
96403
  const popoverPluginKey = new PluginKey("popoverPlugin");
95772
96404
  const PopoverPlugin = Extension.create({
95773
96405
  name: "popoverPlugin",
@@ -106919,7 +107551,7 @@ const _sfc_main$1$1 = {
106919
107551
  }
106920
107552
  };
106921
107553
  const ButtonGroup = /* @__PURE__ */ _export_sfc(_sfc_main$1$1, [["__scopeId", "data-v-c80a1e51"]]);
106922
- const _sfc_main$i = {
107554
+ const _sfc_main$j = {
106923
107555
  __name: "Toolbar",
106924
107556
  emits: ["command", "toggle", "select"],
106925
107557
  setup(__props, { emit: __emit }) {
@@ -107001,7 +107633,7 @@ const _sfc_main$i = {
107001
107633
  };
107002
107634
  }
107003
107635
  };
107004
- const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-3f5ec271"]]);
107636
+ const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-3f5ec271"]]);
107005
107637
  const DEFAULT_API_ENDPOINT = "https://sd-dev-express-gateway-i6xtm.ondigitalocean.app/insights";
107006
107638
  const SYSTEM_PROMPT = "You are an expert copywriter and you are immersed in a document editor. You are to provide document related text responses based on the user prompts. Only write what is asked for. Do not provide explanations. Try to keep placeholders as short as possible. Do not output your prompt. Your instructions are: ";
107007
107639
  async function baseInsightsFetch(payload, options = {}) {
@@ -107242,7 +107874,7 @@ const _hoisted_2$a = ["innerHTML"];
107242
107874
  const _hoisted_3$8 = ["placeholder"];
107243
107875
  const _hoisted_4$4 = { class: "ai-loader" };
107244
107876
  const _hoisted_5$3 = ["innerHTML"];
107245
- const _sfc_main$h = {
107877
+ const _sfc_main$i = {
107246
107878
  __name: "AIWriter",
107247
107879
  props: {
107248
107880
  selectedText: {
@@ -107518,7 +108150,7 @@ const _sfc_main$h = {
107518
108150
  };
107519
108151
  }
107520
108152
  };
107521
- const AIWriter = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-d869be75"]]);
108153
+ const AIWriter = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-d869be75"]]);
107522
108154
  async function createZip(blobs, fileNames) {
107523
108155
  const zip = new JSZip();
107524
108156
  blobs.forEach((blob, index2) => {
@@ -107832,7 +108464,7 @@ const useToolbarItem = (options) => {
107832
108464
  };
107833
108465
  };
107834
108466
  const _hoisted_1$f = ["onClick", "innerHTML", "aria-label", "onKeydown"];
107835
- const _sfc_main$g = {
108467
+ const _sfc_main$h = {
107836
108468
  __name: "AlignmentButtons",
107837
108469
  emits: ["select"],
107838
108470
  setup(__props, { emit: __emit }) {
@@ -107923,14 +108555,14 @@ const _sfc_main$g = {
107923
108555
  };
107924
108556
  }
107925
108557
  };
107926
- const AlignmentButtons = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-d84f57b6"]]);
108558
+ const AlignmentButtons = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-d84f57b6"]]);
107927
108559
  const _hoisted_1$e = ["onClick", "onKeydown"];
107928
108560
  const _hoisted_2$9 = { class: "document-mode-column icon-column" };
107929
108561
  const _hoisted_3$7 = ["innerHTML"];
107930
108562
  const _hoisted_4$3 = { class: "document-mode-column text-column" };
107931
108563
  const _hoisted_5$2 = { class: "document-mode-type" };
107932
108564
  const _hoisted_6$1 = { class: "document-mode-description" };
107933
- const _sfc_main$f = {
108565
+ const _sfc_main$g = {
107934
108566
  __name: "DocumentMode",
107935
108567
  props: {
107936
108568
  options: {
@@ -108010,14 +108642,14 @@ const _sfc_main$f = {
108010
108642
  };
108011
108643
  }
108012
108644
  };
108013
- const DocumentMode = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-8730b752"]]);
108645
+ const DocumentMode = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-8730b752"]]);
108014
108646
  const _hoisted_1$d = {
108015
108647
  key: 0,
108016
108648
  class: "linked-style-buttons",
108017
108649
  "data-editor-ui-surface": ""
108018
108650
  };
108019
108651
  const _hoisted_2$8 = ["onClick", "onKeydown", "aria-label"];
108020
- const _sfc_main$e = {
108652
+ const _sfc_main$f = {
108021
108653
  __name: "LinkedStyle",
108022
108654
  props: {
108023
108655
  editor: {
@@ -108093,7 +108725,7 @@ const _sfc_main$e = {
108093
108725
  };
108094
108726
  }
108095
108727
  };
108096
- const LinkedStyle = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-ecb78965"]]);
108728
+ const LinkedStyle = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-ecb78965"]]);
108097
108729
  const _hoisted_1$c = {
108098
108730
  key: 0,
108099
108731
  class: "link-title"
@@ -108122,7 +108754,7 @@ const _hoisted_13 = {
108122
108754
  key: 4,
108123
108755
  class: "input-row go-to-anchor clickable"
108124
108756
  };
108125
- const _sfc_main$d = {
108757
+ const _sfc_main$e = {
108126
108758
  __name: "LinkInput",
108127
108759
  props: {
108128
108760
  showInput: {
@@ -108328,12 +108960,12 @@ const _sfc_main$d = {
108328
108960
  };
108329
108961
  }
108330
108962
  };
108331
- const LinkInput = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-ba50627b"]]);
108963
+ const LinkInput = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-ba50627b"]]);
108332
108964
  const _hoisted_1$b = ["aria-label", "onClick", "onKeydown"];
108333
108965
  const _hoisted_2$6 = ["innerHTML"];
108334
108966
  const _hoisted_3$5 = ["innerHTML"];
108335
108967
  const ROW_SIZE$1 = 7;
108336
- const _sfc_main$c = {
108968
+ const _sfc_main$d = {
108337
108969
  __name: "IconGridRow",
108338
108970
  props: {
108339
108971
  icons: {
@@ -108466,12 +109098,12 @@ const _sfc_main$c = {
108466
109098
  };
108467
109099
  }
108468
109100
  };
108469
- const IconGridRow = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-0f479b6c"]]);
109101
+ const IconGridRow = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-0f479b6c"]]);
108470
109102
  const DropIcon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M320 512c53.2 0 101.4-21.6 136.1-56.6l-298.3-235C140 257.1 128 292.3 128 320c0 106 86 192 192 192zM505.2 370.7c4.4-16.2 6.8-33.1 6.8-50.7c0-91.2-130.2-262.3-166.6-308.3C339.4 4.2 330.5 0 320.9 0l-1.8 0c-9.6 0-18.5 4.2-24.5 11.7C277.8 33 240.7 81.3 205.8 136L38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L505.2 370.7zM224 336c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16s16 7.2 16 16z"/></svg>\n';
108471
109103
  const _hoisted_1$a = { class: "options-grid-wrap" };
108472
109104
  const _hoisted_2$5 = ["innerHTML"];
108473
109105
  const _hoisted_3$4 = { class: "option-grid-ctn" };
108474
- const _sfc_main$b = {
109106
+ const _sfc_main$c = {
108475
109107
  __name: "IconGrid",
108476
109108
  props: {
108477
109109
  icons: {
@@ -108531,7 +109163,7 @@ const _sfc_main$b = {
108531
109163
  };
108532
109164
  }
108533
109165
  };
108534
- const IconGrid = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-3d19fedf"]]);
109166
+ const IconGrid = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-3d19fedf"]]);
108535
109167
  const closeDropdown$1 = (dropdown) => {
108536
109168
  dropdown.expand.value = false;
108537
109169
  };
@@ -108643,7 +109275,7 @@ const getAvailableColorOptions = () => {
108643
109275
  const _hoisted_1$9 = ["data-cols", "data-rows", "onKeydown", "onClick"];
108644
109276
  const _hoisted_2$4 = ["aria-valuetext"];
108645
109277
  const ROW_SIZE = 5;
108646
- const _sfc_main$a = {
109278
+ const _sfc_main$b = {
108647
109279
  __name: "TableGrid",
108648
109280
  emits: ["select", "clickoutside"],
108649
109281
  setup(__props, { emit: __emit }) {
@@ -108772,13 +109404,13 @@ const _sfc_main$a = {
108772
109404
  };
108773
109405
  }
108774
109406
  };
108775
- const TableGrid = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-92e8d5fb"]]);
109407
+ const TableGrid = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-92e8d5fb"]]);
108776
109408
  const _hoisted_1$8 = { class: "toolbar-table-actions" };
108777
109409
  const _hoisted_2$3 = ["onClick", "data-item", "ariaLabel"];
108778
109410
  const _hoisted_3$3 = { class: "toolbar-table-actions__icon" };
108779
109411
  const _hoisted_4$1 = ["innerHTML"];
108780
109412
  const _hoisted_5 = { class: "toolbar-table-actions__label" };
108781
- const _sfc_main$9 = {
109413
+ const _sfc_main$a = {
108782
109414
  __name: "TableActions",
108783
109415
  props: {
108784
109416
  options: {
@@ -108814,7 +109446,7 @@ const _sfc_main$9 = {
108814
109446
  };
108815
109447
  }
108816
109448
  };
108817
- const TableActions = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-990b9a25"]]);
109449
+ const TableActions = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-990b9a25"]]);
108818
109450
  function getScrollableParent(element) {
108819
109451
  let currentElement = element;
108820
109452
  while (currentElement) {
@@ -108841,7 +109473,7 @@ const checkIconSvg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 5
108841
109473
  const _hoisted_1$7 = { class: "search-input-ctn" };
108842
109474
  const _hoisted_2$2 = { class: "row" };
108843
109475
  const _hoisted_3$2 = ["onKeydown"];
108844
- const _sfc_main$8 = {
109476
+ const _sfc_main$9 = {
108845
109477
  __name: "SearchInput",
108846
109478
  props: {
108847
109479
  searchRef: {
@@ -108880,7 +109512,7 @@ const _sfc_main$8 = {
108880
109512
  };
108881
109513
  }
108882
109514
  };
108883
- const SearchInput = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-957cbcf2"]]);
109515
+ const SearchInput = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-957cbcf2"]]);
108884
109516
  const TOOLBAR_FONTS = [
108885
109517
  {
108886
109518
  label: "Georgia",
@@ -111655,7 +112287,7 @@ const _hoisted_2$1 = {
111655
112287
  };
111656
112288
  const _hoisted_3$1 = ["onClick"];
111657
112289
  const _hoisted_4 = ["innerHTML"];
111658
- const _sfc_main$7 = {
112290
+ const _sfc_main$8 = {
111659
112291
  __name: "SlashMenu",
111660
112292
  props: {
111661
112293
  editor: {
@@ -112007,7 +112639,7 @@ const _sfc_main$7 = {
112007
112639
  }
112008
112640
  };
112009
112641
  const _hoisted_1$5 = ["accept"];
112010
- const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
112642
+ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
112011
112643
  __name: "BasicUpload",
112012
112644
  props: {
112013
112645
  accept: { default: ".docx, .pdf, .html, .md" }
@@ -112036,7 +112668,7 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
112036
112668
  const _hoisted_1$4 = { class: "numbering" };
112037
112669
  const MIN_WIDTH = 200;
112038
112670
  const alignment = "flex-end";
112039
- const _sfc_main$5 = {
112671
+ const _sfc_main$6 = {
112040
112672
  __name: "Ruler",
112041
112673
  props: {
112042
112674
  orientation: {
@@ -112127,7 +112759,7 @@ const _sfc_main$5 = {
112127
112759
  minHeight: `${editorBounds.height}px`
112128
112760
  };
112129
112761
  });
112130
- const handleMouseDown3 = (event) => {
112762
+ const handleMouseDown2 = (event) => {
112131
112763
  isDragging.value = true;
112132
112764
  setRulerHandleActive();
112133
112765
  const itemId = event.currentTarget.id;
@@ -112202,13 +112834,13 @@ const _sfc_main$5 = {
112202
112834
  vue.createBaseVNode("div", {
112203
112835
  class: "margin-handle handle-left",
112204
112836
  id: "left-margin-handle",
112205
- onMousedown: handleMouseDown3,
112837
+ onMousedown: handleMouseDown2,
112206
112838
  style: vue.normalizeStyle(getHandlePosition.value("left"))
112207
112839
  }, null, 36),
112208
112840
  vue.createBaseVNode("div", {
112209
112841
  class: "margin-handle handle-right",
112210
112842
  id: "right-margin-handle",
112211
- onMousedown: handleMouseDown3,
112843
+ onMousedown: handleMouseDown2,
112212
112844
  style: vue.normalizeStyle(getHandlePosition.value("right"))
112213
112845
  }, null, 36),
112214
112846
  showVerticalIndicator.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -112241,8 +112873,8 @@ const _sfc_main$5 = {
112241
112873
  };
112242
112874
  }
112243
112875
  };
112244
- const Ruler = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-79f9a944"]]);
112245
- const _sfc_main$4 = {
112876
+ const Ruler = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-79f9a944"]]);
112877
+ const _sfc_main$5 = {
112246
112878
  __name: "GenericPopover",
112247
112879
  props: {
112248
112880
  editor: { type: Object, required: true },
@@ -112270,22 +112902,22 @@ const _sfc_main$4 = {
112270
112902
  () => props.visible,
112271
112903
  (val) => {
112272
112904
  if (val) {
112273
- document.addEventListener("mousedown", handleClickOutside2);
112905
+ document.addEventListener("pointerdown", handleClickOutside2);
112274
112906
  document.addEventListener("keydown", handleEscape);
112275
112907
  } else {
112276
- document.removeEventListener("mousedown", handleClickOutside2);
112908
+ document.removeEventListener("pointerdown", handleClickOutside2);
112277
112909
  document.removeEventListener("keydown", handleEscape);
112278
112910
  }
112279
112911
  }
112280
112912
  );
112281
112913
  vue.onMounted(() => {
112282
112914
  if (props.visible) {
112283
- document.addEventListener("mousedown", handleClickOutside2);
112915
+ document.addEventListener("pointerdown", handleClickOutside2);
112284
112916
  document.addEventListener("keydown", handleEscape);
112285
112917
  }
112286
112918
  });
112287
112919
  vue.onBeforeUnmount(() => {
112288
- document.removeEventListener("mousedown", handleClickOutside2);
112920
+ document.removeEventListener("pointerdown", handleClickOutside2);
112289
112921
  document.removeEventListener("keydown", handleEscape);
112290
112922
  });
112291
112923
  const derivedStyles = vue.computed(() => ({
@@ -112300,7 +112932,7 @@ const _sfc_main$4 = {
112300
112932
  style: vue.normalizeStyle(derivedStyles.value),
112301
112933
  ref_key: "popover",
112302
112934
  ref: popover,
112303
- onMousedown: _cache[0] || (_cache[0] = vue.withModifiers(() => {
112935
+ onPointerdown: _cache[0] || (_cache[0] = vue.withModifiers(() => {
112304
112936
  }, ["stop"])),
112305
112937
  onClick: _cache[1] || (_cache[1] = vue.withModifiers(() => {
112306
112938
  }, ["stop"]))
@@ -112310,7 +112942,7 @@ const _sfc_main$4 = {
112310
112942
  };
112311
112943
  }
112312
112944
  };
112313
- const GenericPopover = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-cbddcc0f"]]);
112945
+ const GenericPopover = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-157855b5"]]);
112314
112946
  const _hoisted_1$3 = ["data-boundary-index", "data-boundary-type", "onMousedown"];
112315
112947
  const RESIZE_HANDLE_WIDTH_PX = 9;
112316
112948
  const RESIZE_HANDLE_OFFSET_PX = 4;
@@ -112318,7 +112950,7 @@ const DRAG_OVERLAY_EXTENSION_PX = 1e3;
112318
112950
  const MIN_DRAG_OVERLAY_WIDTH_PX = 2e3;
112319
112951
  const THROTTLE_INTERVAL_MS = 16;
112320
112952
  const MIN_RESIZE_DELTA_PX = 1;
112321
- const _sfc_main$3 = {
112953
+ const _sfc_main$4 = {
112322
112954
  __name: "TableResizeOverlay",
112323
112955
  props: {
112324
112956
  /** Editor instance for dispatching transactions */
@@ -112842,7 +113474,7 @@ const _sfc_main$3 = {
112842
113474
  };
112843
113475
  }
112844
113476
  };
112845
- const TableResizeOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-2fdf7836"]]);
113477
+ const TableResizeOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-2fdf7836"]]);
112846
113478
  const _hoisted_1$2 = ["data-handle-position", "onMousedown"];
112847
113479
  const OVERLAY_EXPANSION_PX = 2e3;
112848
113480
  const RESIZE_HANDLE_SIZE_PX = 12;
@@ -112851,7 +113483,7 @@ const DIMENSION_CHANGE_THRESHOLD_PX = 1;
112851
113483
  const Z_INDEX_OVERLAY = 10;
112852
113484
  const Z_INDEX_HANDLE = 15;
112853
113485
  const Z_INDEX_GUIDELINE = 20;
112854
- const _sfc_main$2 = {
113486
+ const _sfc_main$3 = {
112855
113487
  __name: "ImageResizeOverlay",
112856
113488
  props: {
112857
113489
  /** Editor instance for dispatching transactions */
@@ -113275,7 +113907,81 @@ const _sfc_main$2 = {
113275
113907
  };
113276
113908
  }
113277
113909
  };
113278
- const ImageResizeOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-e66ec7bb"]]);
113910
+ const ImageResizeOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-e66ec7bb"]]);
113911
+ const _sfc_main$2 = {
113912
+ __name: "LinkClickHandler",
113913
+ props: {
113914
+ editor: {
113915
+ type: Object,
113916
+ required: true
113917
+ },
113918
+ openPopover: {
113919
+ type: Function,
113920
+ required: true
113921
+ },
113922
+ closePopover: {
113923
+ type: Function,
113924
+ required: true
113925
+ },
113926
+ popoverVisible: {
113927
+ type: Boolean,
113928
+ default: false
113929
+ }
113930
+ },
113931
+ setup(__props) {
113932
+ const props = __props;
113933
+ const handleLinkClick = (event) => {
113934
+ if (props.popoverVisible) {
113935
+ props.closePopover();
113936
+ return;
113937
+ }
113938
+ if (!props.editor || !props.editor.state) {
113939
+ return;
113940
+ }
113941
+ const surface = getEditorSurfaceElement(props.editor);
113942
+ if (!surface) {
113943
+ return;
113944
+ }
113945
+ moveCursorToMouseEvent(event.detail, props.editor);
113946
+ setTimeout(() => {
113947
+ const currentState = props.editor.state;
113948
+ const hasLink = selectionHasNodeOrMark(currentState, "link", { requireEnds: true });
113949
+ if (hasLink) {
113950
+ const surfaceRect = surface.getBoundingClientRect();
113951
+ if (!surfaceRect) return;
113952
+ props.openPopover(
113953
+ vue.markRaw(LinkInput),
113954
+ {
113955
+ showInput: true,
113956
+ editor: props.editor,
113957
+ closePopover: props.closePopover
113958
+ },
113959
+ {
113960
+ left: `${event.detail.clientX - surfaceRect.left}px`,
113961
+ top: `${event.detail.clientY - surfaceRect.top + 15}px`
113962
+ }
113963
+ );
113964
+ }
113965
+ }, 10);
113966
+ };
113967
+ let surfaceElement = null;
113968
+ vue.onMounted(() => {
113969
+ if (!props.editor) return;
113970
+ surfaceElement = getEditorSurfaceElement(props.editor);
113971
+ if (surfaceElement) {
113972
+ surfaceElement.addEventListener("superdoc-link-click", handleLinkClick);
113973
+ }
113974
+ });
113975
+ vue.onBeforeUnmount(() => {
113976
+ if (surfaceElement) {
113977
+ surfaceElement.removeEventListener("superdoc-link-click", handleLinkClick);
113978
+ }
113979
+ });
113980
+ return (_ctx, _cache) => {
113981
+ return null;
113982
+ };
113983
+ }
113984
+ };
113279
113985
  function adjustPaginationBreaks(editorElem, editor) {
113280
113986
  if (!editorElem.value || !editor?.value?.options?.scale || isHeadless(editor)) return;
113281
113987
  const zoom = editor.value.options.scale;
@@ -113617,21 +114323,28 @@ const _sfc_main$1 = {
113617
114323
  class: "editor-element super-editor__element",
113618
114324
  role: "presentation"
113619
114325
  }, null, 512),
113620
- !contextMenuDisabled.value && editorReady.value && activeEditor.value ? (vue.openBlock(), vue.createBlock(_sfc_main$7, {
114326
+ !contextMenuDisabled.value && editorReady.value && activeEditor.value ? (vue.openBlock(), vue.createBlock(_sfc_main$8, {
113621
114327
  key: 0,
113622
114328
  editor: activeEditor.value,
113623
114329
  popoverControls,
113624
114330
  openPopover,
113625
114331
  closePopover
113626
114332
  }, null, 8, ["editor", "popoverControls"])) : vue.createCommentVNode("", true),
113627
- editorReady.value && activeEditor.value ? (vue.openBlock(), vue.createBlock(TableResizeOverlay, {
114333
+ editorReady.value && activeEditor.value ? (vue.openBlock(), vue.createBlock(_sfc_main$2, {
113628
114334
  key: 1,
113629
114335
  editor: activeEditor.value,
114336
+ openPopover,
114337
+ closePopover,
114338
+ popoverVisible: popoverControls.visible
114339
+ }, null, 8, ["editor", "popoverVisible"])) : vue.createCommentVNode("", true),
114340
+ editorReady.value && activeEditor.value ? (vue.openBlock(), vue.createBlock(TableResizeOverlay, {
114341
+ key: 2,
114342
+ editor: activeEditor.value,
113630
114343
  visible: tableResizeState.visible,
113631
114344
  tableElement: tableResizeState.tableElement
113632
114345
  }, null, 8, ["editor", "visible", "tableElement"])) : vue.createCommentVNode("", true),
113633
114346
  editorReady.value && activeEditor.value ? (vue.openBlock(), vue.createBlock(ImageResizeOverlay, {
113634
- key: 2,
114347
+ key: 3,
113635
114348
  editor: activeEditor.value,
113636
114349
  visible: imageResizeState.visible,
113637
114350
  imageElement: imageResizeState.imageElement
@@ -113698,7 +114411,7 @@ const _sfc_main$1 = {
113698
114411
  };
113699
114412
  }
113700
114413
  };
113701
- const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-a84087aa"]]);
114414
+ const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-08b32c3d"]]);
113702
114415
  const _hoisted_1 = ["innerHTML"];
113703
114416
  const _sfc_main = {
113704
114417
  __name: "SuperInput",
@@ -113815,8 +114528,8 @@ exports.SuperInput = SuperInput;
113815
114528
  exports.SuperToolbar = SuperToolbar;
113816
114529
  exports.Toolbar = Toolbar;
113817
114530
  exports.TrackChangesBasePluginKey = TrackChangesBasePluginKey;
113818
- exports._sfc_main$6 = _sfc_main$6;
113819
114531
  exports._sfc_main$7 = _sfc_main$7;
114532
+ exports._sfc_main$8 = _sfc_main$8;
113820
114533
  exports.createZip = createZip;
113821
114534
  exports.getActiveFormatting = getActiveFormatting;
113822
114535
  exports.getAllowedImageDimensions = getAllowedImageDimensions;