@xcrong/docx-editor-vue 1.10.1

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 (110) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +116 -0
  3. package/dist/KeyboardShortcutsDialog-60tuBVsM.js +2799 -0
  4. package/dist/KeyboardShortcutsDialog-BcNYSl3S.cjs +1 -0
  5. package/dist/RenderedDomContext-CuV0wMPx.js +2 -0
  6. package/dist/TablePropertiesDialog-CG6Yj6KO.js +1145 -0
  7. package/dist/TablePropertiesDialog-CzY5A22W.cjs +1 -0
  8. package/dist/_plugin-vue_export-helper-B52Kst-M.js +8 -0
  9. package/dist/_plugin-vue_export-helper-CX7YVcP6.cjs +1 -0
  10. package/dist/components/DocxEditor/types.d.ts +193 -0
  11. package/dist/components/EditorToolbarContext.d.ts +9 -0
  12. package/dist/components/Toolbar/presets.d.ts +20 -0
  13. package/dist/components/dialogs/index.d.ts +27 -0
  14. package/dist/components/imageContextMenuTypes.d.ts +30 -0
  15. package/dist/components/imageSelectionTypes.d.ts +14 -0
  16. package/dist/components/insertTableState.d.ts +9 -0
  17. package/dist/components/sidebar/cardStyles.d.ts +3 -0
  18. package/dist/components/sidebar/cardUtils.d.ts +1 -0
  19. package/dist/components/sidebar/resolveItemPositions.d.ts +4 -0
  20. package/dist/components/sidebar/sidebarUtils.d.ts +4 -0
  21. package/dist/components/tableStylePresets.d.ts +53 -0
  22. package/dist/components/toolbarUtils.d.ts +1 -0
  23. package/dist/components/ui/Icons.d.ts +1 -0
  24. package/dist/components/ui/fontPickerValue.d.ts +1 -0
  25. package/dist/components/ui/fontPickerValue.test.d.ts +1 -0
  26. package/dist/components/ui/hyperlinkPopupTypes.d.ts +20 -0
  27. package/dist/composables/fileOpen.test.d.ts +1 -0
  28. package/dist/composables/imageOverlayRect.d.ts +44 -0
  29. package/dist/composables/imageOverlayRect.test.d.ts +1 -0
  30. package/dist/composables/index.d.ts +30 -0
  31. package/dist/composables/useAutoSave.d.ts +40 -0
  32. package/dist/composables/useClipboard.d.ts +22 -0
  33. package/dist/composables/useColorMode.d.ts +8 -0
  34. package/dist/composables/useCommentLifecycle.d.ts +62 -0
  35. package/dist/composables/useCommentManagement.d.ts +68 -0
  36. package/dist/composables/useCommentSidebarItems.d.ts +24 -0
  37. package/dist/composables/useCommentSidebarItems.test.d.ts +1 -0
  38. package/dist/composables/useContextMenus.cut.test.d.ts +1 -0
  39. package/dist/composables/useContextMenus.d.ts +39 -0
  40. package/dist/composables/useControllableBoolean.d.ts +16 -0
  41. package/dist/composables/useControllableBoolean.test.d.ts +1 -0
  42. package/dist/composables/useDocumentLifecycle.d.ts +11 -0
  43. package/dist/composables/useDocxEditor.d.ts +96 -0
  44. package/dist/composables/useDocxEditorRefApi.d.ts +53 -0
  45. package/dist/composables/useDragAutoScroll.d.ts +11 -0
  46. package/dist/composables/useFileIO.d.ts +41 -0
  47. package/dist/composables/useFindReplace.d.ts +34 -0
  48. package/dist/composables/useFixedDropdown.d.ts +14 -0
  49. package/dist/composables/useFontLifecycle.d.ts +12 -0
  50. package/dist/composables/useFormattingActions.d.ts +31 -0
  51. package/dist/composables/useHistory.d.ts +9 -0
  52. package/dist/composables/useHostCallbacks.d.ts +7 -0
  53. package/dist/composables/useHyperlinkManagement.d.ts +38 -0
  54. package/dist/composables/useImageActions.d.ts +24 -0
  55. package/dist/composables/useKeyboardShortcuts.d.ts +25 -0
  56. package/dist/composables/useMenuActions.d.ts +26 -0
  57. package/dist/composables/useOutlineSidebar.d.ts +24 -0
  58. package/dist/composables/useOutlineSidebar.test.d.ts +1 -0
  59. package/dist/composables/usePageSetupControls.d.ts +22 -0
  60. package/dist/composables/usePagesPointer.d.ts +86 -0
  61. package/dist/composables/useParagraphStyleOptions.d.ts +18 -0
  62. package/dist/composables/usePortalClass.d.ts +8 -0
  63. package/dist/composables/useSelectionHighlight.d.ts +19 -0
  64. package/dist/composables/useSelectionSync.d.ts +37 -0
  65. package/dist/composables/useTableResize.d.ts +7 -0
  66. package/dist/composables/useTableSelection.d.ts +10 -0
  67. package/dist/composables/useToolbarDropdowns.d.ts +15 -0
  68. package/dist/composables/useToolbarFontSize.d.ts +15 -0
  69. package/dist/composables/useTrackedChanges.d.ts +12 -0
  70. package/dist/composables/useVisualLineNavigation.d.ts +11 -0
  71. package/dist/composables/useWatermarkControls.d.ts +15 -0
  72. package/dist/composables/useWheelZoom.d.ts +10 -0
  73. package/dist/composables/useZoom.d.ts +16 -0
  74. package/dist/composables.cjs +1 -0
  75. package/dist/composables.js +401 -0
  76. package/dist/dialogs.cjs +1 -0
  77. package/dist/dialogs.js +3 -0
  78. package/dist/docx-editor-vue.css +2 -0
  79. package/dist/i18n/LocaleContext.d.ts +1 -0
  80. package/dist/i18n/index.d.ts +26 -0
  81. package/dist/index.cjs +19 -0
  82. package/dist/index.d.ts +24 -0
  83. package/dist/index.js +4506 -0
  84. package/dist/lib/utils.d.ts +10 -0
  85. package/dist/plugin-api/RenderedDomContext.d.ts +1 -0
  86. package/dist/plugin-api/index.d.ts +18 -0
  87. package/dist/plugin-api/types.d.ts +28 -0
  88. package/dist/plugin-api.cjs +1 -0
  89. package/dist/plugin-api.js +62 -0
  90. package/dist/renderAsync.d.ts +31 -0
  91. package/dist/styles/index.d.ts +12 -0
  92. package/dist/styles/zIndex.d.ts +24 -0
  93. package/dist/styles.cjs +1 -0
  94. package/dist/styles.js +5 -0
  95. package/dist/ui.cjs +18 -0
  96. package/dist/ui.d.ts +79 -0
  97. package/dist/ui.js +986 -0
  98. package/dist/useCommentSidebarItems-DBeGKNGA.cjs +1 -0
  99. package/dist/useCommentSidebarItems-DXbF857R.js +45 -0
  100. package/dist/useDragAutoScroll-BzP7c_lM.cjs +1 -0
  101. package/dist/useDragAutoScroll-DOXQJ0os.js +520 -0
  102. package/dist/usePortalClass-C91WJPlr.js +3534 -0
  103. package/dist/usePortalClass-Ciqvd8GU.cjs +4 -0
  104. package/dist/utils/domQueries.d.ts +46 -0
  105. package/dist/utils/domQueries.test.d.ts +1 -0
  106. package/dist/utils/imageClipboard.d.ts +9 -0
  107. package/dist/utils/refApiQueries.d.ts +10 -0
  108. package/dist/zIndex-CH0jZ7U7.cjs +1 -0
  109. package/dist/zIndex-CxELVe_L.js +12 -0
  110. package/package.json +119 -0
package/dist/index.js ADDED
@@ -0,0 +1,4506 @@
1
+ import { a as e, c as t, d as n, f as r, i, l as a, n as o, o as s, r as c, s as l, t as u, u as d } from "./KeyboardShortcutsDialog-60tuBVsM.js";
2
+ import { C as f, _ as p, c as m, l as h, n as g, o as _, r as v, s as y, t as b, u as ee } from "./usePortalClass-C91WJPlr.js";
3
+ import { t as x } from "./_plugin-vue_export-helper-B52Kst-M.js";
4
+ import { n as S } from "./RenderedDomContext-CuV0wMPx.js";
5
+ import { t as C } from "./zIndex-CxELVe_L.js";
6
+ import { i as te, n as ne, r as re, t as ie } from "./useDragAutoScroll-DOXQJ0os.js";
7
+ import { Fragment as w, Teleport as T, computed as E, createApp as ae, createBlock as D, createCommentVNode as O, createElementBlock as k, createElementVNode as A, createSlots as oe, createStaticVNode as se, createTextVNode as ce, createVNode as j, defineComponent as M, h as le, isRef as ue, nextTick as de, normalizeClass as N, normalizeStyle as P, onBeforeUnmount as F, onMounted as I, openBlock as L, ref as R, renderList as z, renderSlot as B, resolveDynamicComponent as V, shallowRef as fe, toDisplayString as H, unref as U, vModelCheckbox as W, vModelSelect as pe, vModelText as G, watch as K, watchEffect as me, withCtx as he, withDirectives as q, withKeys as J, withModifiers as Y } from "vue";
8
+ import { NodeSelection as ge, TextSelection as _e } from "prosemirror-state";
9
+ import { applyCellSelectionHighlight as ve, clickToPositionDom as X, computeHfCaretRectFromView as ye, computeHfSelectionRectsFromView as be, findBodyPmAnchor as xe, findBodyPmSpans as Se, resetImeCaretAnchor as Ce, syncImeCaretAnchor as we } from "@xcrong/docx-editor-core/layout-bridge";
10
+ import { clampRangeToDoc as Te, findChangeRange as Ee, findCommentRange as De, findInDocument as Oe, getPageContent as ke, getSelectionInfo as Ae } from "@xcrong/docx-editor-core/prosemirror/queries";
11
+ import { LayoutSelectionGate as je, addRepeatingSectionItemTr as Me, extractSelectionState as Ne, findContentControlPos as Z, findContentControlsInPM as Pe, removeContentControlTr as Fe, removeRepeatingSectionItemTr as Ie, schema as Le, setContentControlContentTr as Re, setContentControlValueAtPosTr as ze, setContentControlValueTr as Be } from "@xcrong/docx-editor-core/prosemirror";
12
+ import { findPageIndexContainingPmPos as Ve } from "@xcrong/docx-editor-core/layout-engine";
13
+ import { SIDEBAR_DOCUMENT_SHIFT as He, findWordBoundaries as Ue, flashParagraphFragmentsByParaId as Q, loadFontDefinitions as We, onFontError as Ge, pixelsToEmu as Ke, prefersColorSchemeDark as qe, readDocxFileFromInput as Je, resolveIsDark as Ye, subscribeSystemDark as Xe, toArrayBuffer as Ze } from "@xcrong/docx-editor-core/utils";
14
+ import { extractSelectionContext as Qe } from "@xcrong/docx-editor-core/prosemirror/plugins/selectionTracker";
15
+ import { clearFormatting as $e, findHyperlinkRangeAt as et } from "@xcrong/docx-editor-core/prosemirror/commands/formatting";
16
+ import { getTableContext as tt } from "@xcrong/docx-editor-core/prosemirror/extensions/nodes/TableExtension";
17
+ import { clickToPositionDom as nt, getCaretPositionFromDom as rt, getSelectionRectsFromDom as it } from "@xcrong/docx-editor-core/layout-bridge/clickToPositionDom";
18
+ import { calculateResizedImageDimensions as at, commitImageFloatMove as ot, commitImageInlineMove as st, commitImageResize as ct, isFloatingImage as lt } from "@xcrong/docx-editor-core/prosemirror/imageCommit";
19
+ import { IMAGE_LAYOUT_OPTIONS as ut, captureInlinePositionEmu as dt, deriveLayoutChoice as ft, findImageElement as pt, isImageLayoutOptionEnabled as mt, renderAllPagesNow as ht, toolbarValueToLayoutTarget as gt } from "@xcrong/docx-editor-core/layout-painter";
20
+ import { proseDocToBlocks as _t } from "@xcrong/docx-editor-core/prosemirror/conversion";
21
+ import { twipsToPixels as vt } from "@xcrong/docx-editor-core/utils/units";
22
+ import { DEFAULT_WATERMARK_PRESETS as yt, pictureWatermarkDisplayEmu as bt } from "@xcrong/docx-editor-core/types/document";
23
+ import { makeRevisionInfo as xt } from "@xcrong/docx-editor-core/prosemirror/plugins";
24
+ import { acceptChange as St, acceptChangeById as Ct, getWatermarkFromState as wt, insertImageFromFile as Tt, rejectChange as Et, rejectChangeById as Dt, setWatermark as Ot } from "@xcrong/docx-editor-core/prosemirror/commands";
25
+ import { applyStyle as kt, removeTabStop as At, setIndentFirstLine as jt, setIndentLeft as Mt, setIndentRight as Nt } from "@xcrong/docx-editor-core/prosemirror/commands/paragraph";
26
+ import { createStyleResolver as Pt } from "@xcrong/docx-editor-core/prosemirror/styles";
27
+ import { getCachedNumberingMap as Ft } from "@xcrong/docx-editor-core/docx";
28
+ import { insertPageBreak as It } from "@xcrong/docx-editor-core/prosemirror/commands/pageBreak";
29
+ import { insertSectionBreakContinuous as Lt, insertSectionBreakNextPage as Rt } from "@xcrong/docx-editor-core/prosemirror/commands/sectionBreak";
30
+ import { applyFormatting as zt, insertBreak as Bt, setParagraphStyle as Vt } from "@xcrong/docx-editor-core/prosemirror/applyFormatting";
31
+ import { collectHeadings as Ht } from "@xcrong/docx-editor-core/utils/headingCollector";
32
+ import { extractTrackedChanges as Ut } from "@xcrong/docx-editor-core/prosemirror/utils/extractTrackedChanges";
33
+ import { addCommentToRange as Wt, applyProposedChange as Gt, createComment as Kt } from "@xcrong/docx-editor-core/prosemirror/commentOps";
34
+ import { PENDING_COMMENT_ID as qt, createCommentIdAllocator as Jt, seedCommentAllocator as Yt } from "@xcrong/docx-editor-core/prosemirror/commentIdAllocator";
35
+ import { TABLE_INSERT_HIDE_DELAY_MS as Xt, detectTableInsertHover as Zt } from "@xcrong/docx-editor-core/layout-bridge/tableInsertHover";
36
+ import { createCellDragTracker as Qt, findCellPosFromPmPos as $t } from "@xcrong/docx-editor-core/prosemirror/cellDragSelection";
37
+ import { openReportIssue as en } from "@xcrong/docx-editor-core/utils/reportIssue";
38
+ import { ContentControlNotFoundError as tn } from "@xcrong/docx-editor-core/agent";
39
+ import { findParaIdRange as nn } from "@xcrong/docx-editor-core/prosemirror/paraText";
40
+ import { createDocumentWithText as rn, createEmptyDocument as an } from "@xcrong/docx-editor-core";
41
+ //#region src/utils/domQueries.ts
42
+ function on(e) {
43
+ let t = window.document.querySelectorAll(`.layout-page-${e}`);
44
+ if (t.length === 0) return null;
45
+ let n = window.innerHeight / 2, r = t[0], i = Infinity;
46
+ for (let e of Array.from(t)) {
47
+ let t = e.getBoundingClientRect(), a = Math.abs((t.top + t.bottom) / 2 - n);
48
+ a < i && (i = a, r = e);
49
+ }
50
+ return r;
51
+ }
52
+ function sn(e, t, n) {
53
+ let r = n ? Array.from(e.querySelectorAll(`.layout-page-${n} span[data-pm-start][data-pm-end]`)) : Se(e);
54
+ for (let e of r) {
55
+ let n = Number(e.dataset.pmStart), r = Number(e.dataset.pmEnd);
56
+ if (!isNaN(n) && !isNaN(r) && t >= n && t <= r) return e;
57
+ }
58
+ return null;
59
+ }
60
+ var cn = 48;
61
+ function ln(e, t) {
62
+ let n = xe(e, t);
63
+ if (n) return n;
64
+ for (let n of Se(e)) {
65
+ let e = Number(n.dataset.pmStart), r = Number(n.dataset.pmEnd);
66
+ if (Number.isFinite(e) && Number.isFinite(r) && t >= e && t <= r) return n;
67
+ }
68
+ return null;
69
+ }
70
+ function un(e, t) {
71
+ let n = e.getBoundingClientRect(), r = t.getBoundingClientRect();
72
+ e.scrollTo({
73
+ top: r.top - n.top + e.scrollTop - cn,
74
+ behavior: "smooth"
75
+ });
76
+ }
77
+ function dn(e, t, n, r) {
78
+ if (!e || !t) return;
79
+ let i = ln(e, n);
80
+ if (i) {
81
+ un(t, i);
82
+ return;
83
+ }
84
+ if (!r) return;
85
+ let a = Ve(r, n);
86
+ if (a == null) return;
87
+ let o = e.querySelectorAll(".layout-page")[a];
88
+ if (!o) return;
89
+ un(t, o);
90
+ let s = 0, c = () => {
91
+ if (!e.isConnected || s >= 3) return;
92
+ s++;
93
+ let r = ln(e, n);
94
+ if (r) {
95
+ un(t, r);
96
+ return;
97
+ }
98
+ requestAnimationFrame(c);
99
+ };
100
+ requestAnimationFrame(c);
101
+ }
102
+ function fn(e, t, n, r) {
103
+ if (!e || !t) return null;
104
+ let i = X(e, n, r, 1);
105
+ return i === null || i < 0 ? null : Math.min(i, t.state.doc.content.size);
106
+ }
107
+ function pn(e, t, n, r) {
108
+ if (!e) return;
109
+ let i = sn(e, t, r);
110
+ if (!i) return;
111
+ let a = i.textContent || "", o = Number(i.dataset.pmStart) || 0, [s, c] = Ue(a, t - o), l = o + s, u = o + c;
112
+ l < u && n(l, u);
113
+ }
114
+ function mn(e, t, n, r) {
115
+ if (!e) return;
116
+ let i = sn(e, t, r);
117
+ if (!i) return;
118
+ let a = i.closest(".layout-paragraph");
119
+ if (!a) return;
120
+ let o = Number(a.dataset.pmStart), s = Number(a.dataset.pmEnd);
121
+ !isNaN(o) && !isNaN(s) && o < s && n(o, s);
122
+ }
123
+ //#endregion
124
+ //#region src/components/DecorationLayer.vue
125
+ var hn = /* @__PURE__ */ M({
126
+ __name: "DecorationLayer",
127
+ props: {
128
+ getView: { type: Function },
129
+ getPagesContainer: { type: Function },
130
+ zoom: {},
131
+ transactionVersion: {},
132
+ syncCoordinator: {}
133
+ },
134
+ setup(e) {
135
+ let t = e, n = R(null), r = R(0), i = null, a = null;
136
+ function o() {
137
+ i !== null && cancelAnimationFrame(i), i = requestAnimationFrame(() => {
138
+ i = null;
139
+ let e = t.getView(), r = t.getPagesContainer(), a = n.value;
140
+ !e || !r || !a || t.syncCoordinator.isSafeToRender() && s(e, r, a, t.zoom);
141
+ });
142
+ }
143
+ I(() => {
144
+ a = t.syncCoordinator.onRender(() => {
145
+ r.value++;
146
+ }), o();
147
+ }), F(() => {
148
+ i !== null && (cancelAnimationFrame(i), i = null), a?.();
149
+ }), K(() => [
150
+ t.zoom,
151
+ t.transactionVersion,
152
+ r.value
153
+ ], () => o());
154
+ function s(e, t, n, r) {
155
+ let i = c(e.state);
156
+ if (i.length === 0) {
157
+ n.firstChild && n.replaceChildren();
158
+ return;
159
+ }
160
+ let a = S(t, r), o = a.getContainerOffset(), s = document.createDocumentFragment();
161
+ for (let { decoration: t, from: n, to: r } of i) {
162
+ if (n === r) {
163
+ let r = l(t, e);
164
+ if (!r) continue;
165
+ let i = a.getCoordinatesForPosition(n);
166
+ if (!i) continue;
167
+ let c = document.createElement("div");
168
+ c.style.cssText = `position:absolute;left:${i.x + o.x}px;top:${i.y + o.y}px;height:${i.height}px;`, c.appendChild(r), s.appendChild(c);
169
+ continue;
170
+ }
171
+ let i = u(t);
172
+ if (!i) continue;
173
+ let c = a.getRectsForRange(n, r);
174
+ for (let e of c) {
175
+ let t = document.createElement("div");
176
+ for (let [e, n] of Object.entries(i)) e !== "nodeName" && t.setAttribute(e, n);
177
+ let n = `position:absolute;left:${e.x + o.x}px;top:${e.y + o.y}px;width:${e.width}px;height:${e.height}px;`;
178
+ t.style.cssText = n + (i.style ?? ""), s.appendChild(t);
179
+ }
180
+ }
181
+ n.replaceChildren(s);
182
+ }
183
+ function c(e) {
184
+ let t = [];
185
+ for (let n of e.plugins) {
186
+ let r = n.props.decorations;
187
+ if (!r) continue;
188
+ let i = r.call(n, e);
189
+ i && i.forEachSet((e) => {
190
+ e.find().forEach((e) => {
191
+ e.spec?.noOverlay || t.push({
192
+ decoration: e,
193
+ from: e.from,
194
+ to: e.to
195
+ });
196
+ });
197
+ });
198
+ }
199
+ return t;
200
+ }
201
+ function l(e, t) {
202
+ let n = e.type;
203
+ if (!n) return null;
204
+ let r = n.toDOM;
205
+ return typeof r == "function" ? r(t, () => e.from) : r instanceof HTMLElement ? r.cloneNode(!0) : null;
206
+ }
207
+ function u(e) {
208
+ return e.type?.attrs ?? null;
209
+ }
210
+ return (e, t) => (L(), k("div", {
211
+ ref_key: "overlayRef",
212
+ ref: n,
213
+ class: "paged-editor__decoration-overlay",
214
+ "aria-hidden": "true"
215
+ }, null, 512));
216
+ }
217
+ });
218
+ //#endregion
219
+ //#region src/composables/imageOverlayRect.ts
220
+ function gn(e) {
221
+ let t = Math.max(0, e.parentOffsetWidth - e.parentClientWidth) / 2, n = e.zoom || 1;
222
+ return {
223
+ left: (e.imageRect.left - e.parentRect.left - t + e.scrollLeft) / n,
224
+ top: (e.imageRect.top - e.parentRect.top + e.scrollTop) / n,
225
+ width: e.imageRect.width / n,
226
+ height: e.imageRect.height / n
227
+ };
228
+ }
229
+ //#endregion
230
+ //#region src/components/ImageSelectionOverlay.vue?vue&type=script&setup=true&lang.ts
231
+ var _n = ["data-handle", "onMousedown"], vn = ["title"], yn = {
232
+ key: 0,
233
+ class: "image-overlay__dim"
234
+ }, bn = {
235
+ key: 1,
236
+ class: "image-overlay__dim image-overlay__dim--rotate"
237
+ }, xn = 4, Sn = 15, Cn = 250, wn = 700, Tn = /* @__PURE__ */ x(/* @__PURE__ */ M({
238
+ __name: "ImageSelectionOverlay",
239
+ props: {
240
+ imageInfo: {},
241
+ zoom: {},
242
+ view: {}
243
+ },
244
+ emits: [
245
+ "deselect",
246
+ "interact-start",
247
+ "interact-end",
248
+ "context-menu"
249
+ ],
250
+ setup(e, { emit: t }) {
251
+ let { t: n } = d(), r = e, i = t, a = R(null), o = R(!1), s = R(!1), c = R(!1), l = R(0), u = R(0), f = R(0), p = R(null), m = "se", h = 0, g = 0, _ = 0, v = 0, y = null, b = null, ee = null, x = null;
252
+ function S(e, t) {
253
+ if (!e) return null;
254
+ try {
255
+ let n = e.state.doc.nodeAt(t);
256
+ return n && n.type.name === "image" ? n : null;
257
+ } catch {
258
+ return null;
259
+ }
260
+ }
261
+ function te() {
262
+ return a.value?.closest(".docx-editor-vue__pages-viewport")?.querySelector(".docx-editor-vue__pages") ?? null;
263
+ }
264
+ function ne() {
265
+ let e = r.imageInfo;
266
+ if (!e) return null;
267
+ if (e.element.isConnected) return e.element;
268
+ let t = te();
269
+ if (!t) return null;
270
+ let n = xe(t, e.pmPos);
271
+ return n ? pt(n) : null;
272
+ }
273
+ function re() {
274
+ let e = ne();
275
+ if (!e || !a.value) {
276
+ p.value = null;
277
+ return;
278
+ }
279
+ let t = a.value.offsetParent;
280
+ if (!t) {
281
+ p.value = null;
282
+ return;
283
+ }
284
+ let n = t.getBoundingClientRect();
285
+ p.value = gn({
286
+ imageRect: e.getBoundingClientRect(),
287
+ parentRect: n,
288
+ scrollLeft: t.scrollLeft,
289
+ scrollTop: t.scrollTop,
290
+ parentOffsetWidth: t.offsetWidth,
291
+ parentClientWidth: t.clientWidth,
292
+ zoom: r.zoom
293
+ });
294
+ }
295
+ let ie = null;
296
+ function T() {
297
+ ie?.();
298
+ let e = 0, t = "", n = 0, r = 0, i = (a) => {
299
+ r === 0 && (r = a);
300
+ let o = a - r;
301
+ re();
302
+ let s = p.value, c = s ? `${s.left}|${s.top}|${s.width}|${s.height}` : "";
303
+ n = c === t ? n + 1 : 0, t = c, !(o >= Cn && n >= 2) && o < wn && (e = requestAnimationFrame(i));
304
+ };
305
+ e = requestAnimationFrame(i);
306
+ let a = setTimeout(re, Cn);
307
+ ie = () => {
308
+ cancelAnimationFrame(e), clearTimeout(a);
309
+ };
310
+ }
311
+ K(() => r.imageInfo, (e, t, n) => {
312
+ if (!r.imageInfo) {
313
+ p.value = null;
314
+ return;
315
+ }
316
+ T(), n(() => ie?.());
317
+ }, { immediate: !0 }), K(() => r.zoom, () => {
318
+ r.imageInfo && T();
319
+ }), K(() => r.imageInfo, (e, t, n) => {
320
+ if (!r.imageInfo) return;
321
+ let i = () => {
322
+ b && cancelAnimationFrame(b), b = requestAnimationFrame(re);
323
+ }, o = a.value?.closest(".docx-editor-vue__pages-viewport");
324
+ o?.addEventListener("scroll", i, { passive: !0 }), window.addEventListener("resize", i, { passive: !0 });
325
+ let s = null, c = !1;
326
+ de(() => {
327
+ if (c || !r.imageInfo) return;
328
+ let e = te();
329
+ e && (s = new MutationObserver(() => T()), s.observe(e, {
330
+ attributes: !0,
331
+ attributeFilter: ["style"]
332
+ }));
333
+ }), n(() => {
334
+ c = !0, o?.removeEventListener("scroll", i), window.removeEventListener("resize", i), s?.disconnect(), b && cancelAnimationFrame(b);
335
+ });
336
+ }, { immediate: !0 });
337
+ let ae = E(() => o.value ? l.value : p.value?.width || 0), D = E(() => o.value ? u.value : p.value?.height || 0), oe = E(() => {
338
+ let e = p.value;
339
+ if (!e) return {
340
+ position: "absolute",
341
+ top: "0px",
342
+ left: "0px",
343
+ visibility: "hidden",
344
+ pointerEvents: "none"
345
+ };
346
+ let t = o.value ? l.value : e.width, n = o.value ? u.value : e.height, i = r.zoom || 1;
347
+ return {
348
+ position: "absolute",
349
+ left: `${e.left * i}px`,
350
+ top: `${e.top * i}px`,
351
+ width: `${t}px`,
352
+ height: `${n}px`,
353
+ transform: i === 1 ? void 0 : `scale(${i})`,
354
+ transformOrigin: "top left",
355
+ zIndex: C.imageOverlay,
356
+ pointerEvents: "auto"
357
+ };
358
+ }), se = E(() => {
359
+ let e = ae.value, t = D.value, n = `${e / 2 - 5}px`, r = `${t / 2 - 5}px`, i = `${e - 5}px`, a = `${t - 5}px`, o = "-5px";
360
+ return [
361
+ {
362
+ pos: "nw",
363
+ style: {
364
+ left: o,
365
+ top: o,
366
+ cursor: "nwse-resize"
367
+ }
368
+ },
369
+ {
370
+ pos: "n",
371
+ style: {
372
+ left: n,
373
+ top: o,
374
+ cursor: "ns-resize"
375
+ }
376
+ },
377
+ {
378
+ pos: "ne",
379
+ style: {
380
+ left: i,
381
+ top: o,
382
+ cursor: "nesw-resize"
383
+ }
384
+ },
385
+ {
386
+ pos: "e",
387
+ style: {
388
+ left: i,
389
+ top: r,
390
+ cursor: "ew-resize"
391
+ }
392
+ },
393
+ {
394
+ pos: "se",
395
+ style: {
396
+ left: i,
397
+ top: a,
398
+ cursor: "nwse-resize"
399
+ }
400
+ },
401
+ {
402
+ pos: "s",
403
+ style: {
404
+ left: n,
405
+ top: a,
406
+ cursor: "ns-resize"
407
+ }
408
+ },
409
+ {
410
+ pos: "sw",
411
+ style: {
412
+ left: o,
413
+ top: a,
414
+ cursor: "nesw-resize"
415
+ }
416
+ },
417
+ {
418
+ pos: "w",
419
+ style: {
420
+ left: o,
421
+ top: r,
422
+ cursor: "ew-resize"
423
+ }
424
+ }
425
+ ];
426
+ });
427
+ function ce(e, t) {
428
+ !r.imageInfo || !p.value || (m = t, h = e.clientX, g = e.clientY, _ = p.value.width, v = p.value.height, y = { ...p.value }, l.value = Math.round(_), u.value = Math.round(v), o.value = !0, i("interact-start"), document.addEventListener("mousemove", j), document.addEventListener("mouseup", M));
429
+ }
430
+ function j(e) {
431
+ let t = r.zoom, n = (e.clientX - h) / t, i = (e.clientY - g) / t, a = !e.shiftKey, o = at(m, n, i, _, v, a);
432
+ l.value = Math.round(o.width), u.value = Math.round(o.height);
433
+ let s = y;
434
+ s && (p.value = {
435
+ left: m.includes("w") ? s.left + (s.width - o.width) : s.left,
436
+ top: m.includes("n") ? s.top + (s.height - o.height) : s.top,
437
+ width: s.width,
438
+ height: s.height
439
+ });
440
+ }
441
+ function M() {
442
+ document.removeEventListener("mousemove", j), document.removeEventListener("mouseup", M), o.value = !1, y = null, i("interact-end");
443
+ let e = r.view, t = r.imageInfo;
444
+ if (!e || !t) {
445
+ re();
446
+ return;
447
+ }
448
+ let n = ct(e, t.pmPos, l.value, u.value);
449
+ n !== null && ve(n), de(() => re());
450
+ }
451
+ let le = 0, ue = 0, N = 0, I = 0, B = null, V = null;
452
+ function fe(e) {
453
+ if (!e) return 0;
454
+ let t = e.match(/rotate\((-?\d+(?:\.\d+)?)deg\)/);
455
+ return t ? parseFloat(t[1]) : 0;
456
+ }
457
+ function W(e, t) {
458
+ let n = /scaleX\(-1\)/.test(e || ""), r = /scaleY\(-1\)/.test(e || ""), i = [], a = (t % 360 + 360) % 360;
459
+ return a !== 0 && i.push(`rotate(${a}deg)`), n && i.push("scaleX(-1)"), r && i.push("scaleY(-1)"), i.length > 0 ? i.join(" ") : null;
460
+ }
461
+ function pe(e, t) {
462
+ return Math.atan2(e - le, -(t - ue)) * 180 / Math.PI;
463
+ }
464
+ function G(e) {
465
+ if (!r.imageInfo) return;
466
+ let t = r.imageInfo.element.getBoundingClientRect();
467
+ le = t.left + t.width / 2, ue = t.top + t.height / 2;
468
+ let n = S(r.view, r.imageInfo.pmPos);
469
+ B = n && n.attrs.transform || null, I = fe(B), V = r.imageInfo.element.querySelector("img"), N = pe(e.clientX, e.clientY), f.value = I, c.value = !0, i("interact-start"), document.addEventListener("mousemove", me), document.addEventListener("mouseup", he);
470
+ }
471
+ function me(e) {
472
+ let t = pe(e.clientX, e.clientY) - N, n = I + t;
473
+ e.shiftKey || (n = Math.round(n / Sn) * Sn), f.value = (n % 360 + 360) % 360, V && (V.style.transform = W(B, f.value) || "");
474
+ }
475
+ function he() {
476
+ document.removeEventListener("mousemove", me), document.removeEventListener("mouseup", he), c.value = !1, i("interact-end");
477
+ let e = r.view, t = r.imageInfo;
478
+ try {
479
+ let n = e && t ? S(e, t.pmPos) : null;
480
+ e && t && n && (e.dispatch(e.state.tr.setNodeMarkup(t.pmPos, void 0, {
481
+ ...n.attrs,
482
+ transform: W(n.attrs.transform, f.value)
483
+ })), ve(t.pmPos));
484
+ } catch {} finally {
485
+ V && (V.style.transform = ""), V = null, B = null;
486
+ }
487
+ de(() => re());
488
+ }
489
+ let q = null;
490
+ function J(e) {
491
+ if (!r.imageInfo || !p.value) return;
492
+ let t = e.clientX, n = e.clientY, a = p.value, o = !1, c = (e) => {
493
+ let c = e.clientX - t, l = e.clientY - n;
494
+ if (!(!o && Math.sqrt(c * c + l * l) < xn)) {
495
+ if (!o) {
496
+ o = !0, s.value = !0, i("interact-start"), q = document.createElement("div"), q.style.cssText = "position: fixed; pointer-events: none; z-index: 10000; opacity: 0.5; border: 2px dashed #2563eb; border-radius: 4px; background: rgba(37, 99, 235, 0.1);";
497
+ let e = r.zoom;
498
+ q.style.width = `${a.width * e}px`, q.style.height = `${a.height * e}px`, document.body.appendChild(q);
499
+ }
500
+ if (q) {
501
+ let t = r.zoom;
502
+ q.style.left = `${e.clientX - a.width * t / 2}px`, q.style.top = `${e.clientY - a.height * t / 2}px`;
503
+ }
504
+ }
505
+ }, l = (e) => {
506
+ document.removeEventListener("mousemove", c), document.removeEventListener("mouseup", l), ee = null, x = null, q &&= (q.remove(), null), s.value = !1, o && (i("interact-end"), _e(e.clientX, e.clientY));
507
+ };
508
+ ee = c, x = l, document.addEventListener("mousemove", c), document.addEventListener("mouseup", l);
509
+ }
510
+ function _e(e, t) {
511
+ let n = r.view, i = r.imageInfo;
512
+ if (!n || !i) return;
513
+ let o = S(n, i.pmPos);
514
+ if (o) {
515
+ if (lt(o)) {
516
+ let o = (a.value?.closest(".docx-editor-vue__pages-viewport"))?.querySelectorAll(".layout-page");
517
+ if (!o || o.length === 0) return;
518
+ let s = null;
519
+ for (let e of o) {
520
+ let n = e.getBoundingClientRect();
521
+ if (t >= n.top && t <= n.bottom) {
522
+ s = e.querySelector(".layout-page-content");
523
+ break;
524
+ }
525
+ }
526
+ if (s ||= o[o.length - 1].querySelector(".layout-page-content"), !s) return;
527
+ let c = s.getBoundingClientRect(), l = r.zoom, u = Ke((e - c.left) / l), d = Ke((t - c.top) / l), f = ot(n, i.pmPos, u, d);
528
+ f !== null && ve(f);
529
+ } else {
530
+ let r = te();
531
+ if (!r) return;
532
+ let a = nt(r, e, t, 1);
533
+ if (a == null || a < 0) return;
534
+ let o = st(n, i.pmPos, a);
535
+ o !== null && ve(o);
536
+ }
537
+ de(() => re());
538
+ }
539
+ }
540
+ function ve(e) {
541
+ let t = r.view;
542
+ if (t) try {
543
+ let n = ge.create(t.state.doc, e);
544
+ t.dispatch(t.state.tr.setSelection(n));
545
+ } catch {}
546
+ }
547
+ return F(() => {
548
+ document.removeEventListener("mousemove", j), document.removeEventListener("mouseup", M), document.removeEventListener("mousemove", me), document.removeEventListener("mouseup", he), ee && document.removeEventListener("mousemove", ee), x && document.removeEventListener("mouseup", x), q &&= (q.remove(), null), b && cancelAnimationFrame(b), ie?.();
549
+ }), (t, r) => e.imageInfo ? (L(), k("div", {
550
+ key: 0,
551
+ ref_key: "overlayRootRef",
552
+ ref: a,
553
+ class: "image-overlay",
554
+ style: P(oe.value),
555
+ onMousedown: r[3] ||= Y(() => {}, ["stop"])
556
+ }, [
557
+ r[4] ||= A("div", { class: "image-overlay__border" }, null, -1),
558
+ A("div", {
559
+ class: "image-overlay__body",
560
+ style: P({ cursor: s.value ? "grabbing" : "grab" }),
561
+ onMousedown: r[0] ||= Y((e) => J(e), ["prevent", "stop"]),
562
+ onContextmenu: r[1] ||= Y((e) => t.$emit("context-menu", e), ["prevent", "stop"])
563
+ }, null, 36),
564
+ (L(!0), k(w, null, z(se.value, (e) => (L(), k("div", {
565
+ key: e.pos,
566
+ class: "image-overlay__handle",
567
+ style: P(e.style),
568
+ "data-handle": e.pos,
569
+ onMousedown: Y((t) => ce(t, e.pos), ["prevent", "stop"])
570
+ }, null, 44, _n))), 128)),
571
+ r[5] ||= A("div", { class: "image-overlay__rotate-line" }, null, -1),
572
+ A("div", {
573
+ class: "image-overlay__rotate-handle",
574
+ style: P({ left: `${ae.value / 2 - 7}px` }),
575
+ title: U(n)("imageOverlay.rotate"),
576
+ onMousedown: r[2] ||= Y((e) => G(e), ["prevent", "stop"])
577
+ }, null, 44, vn),
578
+ o.value ? (L(), k("div", yn, H(Math.round(l.value)) + " × " + H(Math.round(u.value)), 1)) : O("", !0),
579
+ c.value ? (L(), k("div", bn, H(Math.round(f.value)) + "° ", 1)) : O("", !0)
580
+ ], 36)) : O("", !0);
581
+ }
582
+ }), [["__scopeId", "data-v-5cc149b4"]]), En = { class: "doc-outline__header" }, Dn = { class: "doc-outline__body" }, On = {
583
+ key: 0,
584
+ class: "doc-outline__empty"
585
+ }, kn = ["onMousedown"], An = /* @__PURE__ */ x(/* @__PURE__ */ M({
586
+ __name: "DocumentOutline",
587
+ props: {
588
+ isOpen: { type: Boolean },
589
+ headings: {},
590
+ leftOffset: { default: 12 },
591
+ topPx: { default: 24 }
592
+ },
593
+ emits: ["close", "navigate"],
594
+ setup(e) {
595
+ let t = e, n = E(() => t.headings.length ? Math.min(...t.headings.map((e) => e.level)) : 0);
596
+ return (t, i) => e.isOpen ? (L(), k("nav", {
597
+ key: 0,
598
+ class: "doc-outline",
599
+ style: P({
600
+ left: e.leftOffset + "px",
601
+ top: e.topPx + "px"
602
+ }),
603
+ role: "navigation",
604
+ "aria-label": "Document outline",
605
+ onMousedown: i[1] ||= Y(() => {}, ["stop"])
606
+ }, [A("div", En, [A("button", {
607
+ class: "doc-outline__back",
608
+ title: "Close outline",
609
+ "aria-label": "Close outline",
610
+ onClick: i[0] ||= (e) => t.$emit("close")
611
+ }, [j(r, {
612
+ name: "arrow_back",
613
+ size: 20
614
+ })]), i[2] ||= A("span", { class: "doc-outline__title" }, "Document Outline", -1)]), A("div", Dn, [e.headings.length === 0 ? (L(), k("div", On, "No headings found")) : O("", !0), (L(!0), k(w, null, z(e.headings, (e, r) => (L(), k("button", {
615
+ key: r,
616
+ class: "doc-outline__item",
617
+ style: P({ paddingLeft: 8 + (e.level - n.value) * 16 + "px" }),
618
+ onMousedown: Y((n) => t.$emit("navigate", e.pmPos), ["prevent"])
619
+ }, H(e.text || "(untitled)"), 45, kn))), 128))])], 36)) : O("", !0);
620
+ }
621
+ }), [["__scopeId", "data-v-8aa023b1"]]), jn = ["title", "aria-label"], Mn = /* @__PURE__ */ M({
622
+ __name: "OutlineToggleButton",
623
+ props: {
624
+ leftOffset: {},
625
+ topPx: { default: 24 }
626
+ },
627
+ emits: ["toggle"],
628
+ setup(e) {
629
+ let { t } = d();
630
+ return (n, i) => (L(), k("button", {
631
+ type: "button",
632
+ class: "docx-outline-toggle docx-editor-vue__outline-toggle",
633
+ style: P({
634
+ left: e.leftOffset + "px",
635
+ top: e.topPx + "px"
636
+ }),
637
+ title: U(t)("editor.showDocumentOutline"),
638
+ "aria-label": U(t)("editor.showDocumentOutline"),
639
+ onClick: i[0] ||= (e) => n.$emit("toggle"),
640
+ onMousedown: i[1] ||= Y(() => {}, ["stop"])
641
+ }, [j(r, {
642
+ name: "format_list_bulleted",
643
+ size: 20
644
+ })], 44, jn));
645
+ }
646
+ }), Nn = /* @__PURE__ */ x(/* @__PURE__ */ M({
647
+ __name: "PageIndicator",
648
+ props: {
649
+ currentPage: {},
650
+ totalPages: {},
651
+ visible: { type: Boolean }
652
+ },
653
+ setup(e) {
654
+ let { t } = d();
655
+ return (n, r) => (L(), k("div", {
656
+ class: "docx-editor-vue__page-indicator",
657
+ style: P({ opacity: +!!e.visible }),
658
+ "aria-live": "polite",
659
+ role: "status"
660
+ }, H(U(t)("viewer.pageIndicator", {
661
+ current: e.currentPage,
662
+ total: e.totalPages
663
+ })), 5));
664
+ }
665
+ }), [["__scopeId", "data-v-877b9ee2"]]), Pn = { class: "hf-editor__label" }, Fn = {
666
+ class: "hf-editor__actions",
667
+ style: { position: "relative" }
668
+ }, In = /* @__PURE__ */ x(/* @__PURE__ */ M({
669
+ __name: "InlineHeaderFooterEditor",
670
+ props: {
671
+ isOpen: { type: Boolean },
672
+ position: {},
673
+ view: {},
674
+ targetRect: {}
675
+ },
676
+ emits: [
677
+ "save",
678
+ "close",
679
+ "remove"
680
+ ],
681
+ setup(e, { emit: t }) {
682
+ let n = e, r = t, i = R({}), a = R(!1);
683
+ function o(e) {
684
+ let t = n.view;
685
+ if (!t) return;
686
+ let { $from: r, from: i } = t.state.selection, a = t.state.storedMarks || r.marks(), o = Le.nodes.field.create({
687
+ fieldType: e,
688
+ instruction: ` ${e} \\* MERGEFORMAT `,
689
+ fieldKind: "simple",
690
+ dirty: !0
691
+ });
692
+ t.dispatch(t.state.tr.insert(i, o.mark(a))), t.focus();
693
+ }
694
+ function s() {
695
+ let e = n.targetRect;
696
+ e && (i.value = {
697
+ position: "absolute",
698
+ top: `${e.top}px`,
699
+ left: `${e.left}px`,
700
+ width: `${e.width}px`,
701
+ height: `${e.height}px`,
702
+ zIndex: "100",
703
+ pointerEvents: "none"
704
+ });
705
+ }
706
+ K(() => n.isOpen, (e) => {
707
+ e && (s(), n.view?.focus());
708
+ }), K(() => n.targetRect, () => {
709
+ n.isOpen && s();
710
+ }, { deep: !0 });
711
+ function c() {
712
+ n.view && (r("save", _t(n.view.state.doc)), r("close"));
713
+ }
714
+ return (t, n) => e.isOpen ? (L(), k("div", {
715
+ key: 0,
716
+ class: "hf-editor",
717
+ style: P(i.value)
718
+ }, [A("div", {
719
+ class: N(["hf-editor__toolbar", e.position === "footer" ? "hf-editor__toolbar--below" : "hf-editor__toolbar--above"]),
720
+ onMousedown: n[8] ||= Y(() => {}, ["stop"]),
721
+ onContextmenu: n[9] ||= Y(() => {}, ["stop"])
722
+ }, [A("span", Pn, H(e.position === "header" ? "Header" : "Footer"), 1), A("div", Fn, [
723
+ A("button", {
724
+ class: "hf-editor__btn",
725
+ title: "Options",
726
+ onMousedown: n[0] ||= Y(() => {}, ["prevent"]),
727
+ onClick: n[1] ||= (e) => a.value = !a.value
728
+ }, " Options ▾ ", 32),
729
+ a.value ? (L(), k("div", {
730
+ key: 0,
731
+ class: "hf-editor__dropdown",
732
+ onMousedown: n[4] ||= Y(() => {}, ["stop"]),
733
+ onContextmenu: n[5] ||= Y(() => {}, ["stop"])
734
+ }, [A("button", {
735
+ type: "button",
736
+ class: "hf-editor__dropdown-item",
737
+ onClick: n[2] ||= (e) => {
738
+ a.value = !1, o("PAGE");
739
+ }
740
+ }, " Insert current page number "), A("button", {
741
+ type: "button",
742
+ class: "hf-editor__dropdown-item",
743
+ onClick: n[3] ||= (e) => {
744
+ a.value = !1, o("NUMPAGES");
745
+ }
746
+ }, " Insert total page count ")], 32)) : O("", !0),
747
+ A("button", {
748
+ class: "hf-editor__btn",
749
+ title: "Remove",
750
+ onMousedown: n[6] ||= Y((e) => t.$emit("remove"), ["prevent"])
751
+ }, " Remove ", 32),
752
+ A("button", {
753
+ class: "hf-editor__btn hf-editor__btn--primary",
754
+ title: "Save",
755
+ onMousedown: Y(c, ["prevent"])
756
+ }, " Save ", 32),
757
+ A("button", {
758
+ class: "hf-editor__btn",
759
+ title: "Cancel",
760
+ onMousedown: n[7] ||= Y((e) => t.$emit("close"), ["prevent"])
761
+ }, " Cancel ", 32)
762
+ ])], 34)], 4)) : O("", !0);
763
+ }
764
+ }), [["__scopeId", "data-v-3dfa7b39"]]), Ln = ["role"], Rn = {
765
+ key: 0,
766
+ class: "layout-sdt-widget-empty"
767
+ }, zn = ["aria-selected", "onClick"], Bn = ["value"], Vn = ".layout-sdt-widget, .layout-inline-sdt-widget", Hn = /* @__PURE__ */ M({
768
+ __name: "ContentControlWidgets",
769
+ props: {
770
+ container: {},
771
+ view: {}
772
+ },
773
+ setup(e) {
774
+ function t(e) {
775
+ let t = /^sdt@(\d+)$/.exec(e ?? "");
776
+ return t ? Number(t[1]) : null;
777
+ }
778
+ function n(e) {
779
+ if (e == null || e === "") return null;
780
+ let t = Number(e);
781
+ return Number.isFinite(t) ? t : null;
782
+ }
783
+ function r(e) {
784
+ let r = t(e.dataset.sdtGroupId) ?? n(e.dataset.sdtPos), i = e.dataset.sdtTag;
785
+ return r == null ? i ? { tag: i } : null : i ? {
786
+ pos: r,
787
+ tag: i
788
+ } : { pos: r };
789
+ }
790
+ let i = e, a = R(null), o = R(null);
791
+ function s(e, t) {
792
+ let n = i.view;
793
+ if (n) try {
794
+ let r = e.pos == null ? e.tag ? Be(n.state, { tag: e.tag }, t) : null : ze(n.state, e.pos, t);
795
+ if (!r) return;
796
+ n.dispatch(r), n.focus();
797
+ } catch {}
798
+ a.value = null;
799
+ }
800
+ function c(e) {
801
+ let n = i.view, r = t(e.dataset.sdtGroupId);
802
+ if (!(!n || r == null)) try {
803
+ let t = e.dataset.sdtRepeat === "add" ? Me(n.state, r) : Ie(n.state, r);
804
+ n.dispatch(t), n.focus();
805
+ } catch {}
806
+ }
807
+ function l(e) {
808
+ let t = e.target;
809
+ (t?.closest?.(Vn) || t?.closest?.(".layout-sdt-repeat-btn")) && e.preventDefault();
810
+ }
811
+ function u(e) {
812
+ let t = i.view, n = e.dataset.sdtWidget, o = r(e);
813
+ if (!t || !n || !o) return;
814
+ let c = o.pos == null ? o.tag ? Pe(t.state.doc, { tag: o.tag })[0] : void 0 : Pe(t.state.doc).find((e) => e.pos === o.pos), l = e.getBoundingClientRect();
815
+ n === "checkbox" ? s(o, {
816
+ kind: "checkbox",
817
+ checked: !c?.checked
818
+ }) : n === "dropdown" ? a.value = {
819
+ kind: "dropdown",
820
+ target: o,
821
+ items: c?.listItems ?? [],
822
+ current: c?.text ?? "",
823
+ x: l.left,
824
+ y: l.bottom + 2
825
+ } : n === "date" && (a.value = {
826
+ kind: "date",
827
+ target: o,
828
+ current: c?.dateValue ?? "",
829
+ x: l.left,
830
+ y: l.bottom + 2
831
+ });
832
+ }
833
+ function d(e) {
834
+ let t = e.target?.closest?.(".layout-sdt-repeat-btn");
835
+ if (t) {
836
+ e.preventDefault(), e.stopPropagation(), c(t);
837
+ return;
838
+ }
839
+ let n = e.target?.closest?.(Vn);
840
+ n && (e.preventDefault(), e.stopPropagation(), u(n));
841
+ }
842
+ function f(e) {
843
+ if (e.key !== "Enter" && e.key !== " ") return;
844
+ let t = e.target?.closest?.(Vn);
845
+ t && (e.preventDefault(), u(t));
846
+ }
847
+ function p(e) {
848
+ a.value && !o.value?.contains(e.target) && (a.value = null);
849
+ }
850
+ function m(e) {
851
+ e.key === "Escape" && (a.value = null);
852
+ }
853
+ let h = null;
854
+ K(() => i.container, (e) => {
855
+ h && (h.removeEventListener("mousedown", l), h.removeEventListener("click", d), h.removeEventListener("keydown", f)), h = e ?? null, h && (h.addEventListener("mousedown", l), h.addEventListener("click", d), h.addEventListener("keydown", f));
856
+ }, { immediate: !0 }), K(a, (e) => {
857
+ e ? (document.addEventListener("mousedown", p), document.addEventListener("keydown", m), e.kind === "dropdown" && de(() => {
858
+ let e = o.value?.querySelectorAll(".layout-sdt-widget-option");
859
+ e?.length && ([...e].find((e) => e.getAttribute("aria-selected") === "true") ?? e[0]).focus();
860
+ })) : (document.removeEventListener("mousedown", p), document.removeEventListener("keydown", m));
861
+ });
862
+ function g(e) {
863
+ if (e.key !== "ArrowDown" && e.key !== "ArrowUp") return;
864
+ let t = [...o.value?.querySelectorAll(".layout-sdt-widget-option") ?? []];
865
+ if (!t.length) return;
866
+ e.preventDefault();
867
+ let n = t.indexOf(document.activeElement);
868
+ t[e.key === "ArrowDown" ? (n + 1) % t.length : (n - 1 + t.length) % t.length].focus();
869
+ }
870
+ F(() => {
871
+ h && (h.removeEventListener("mousedown", l), h.removeEventListener("click", d), h.removeEventListener("keydown", f)), document.removeEventListener("mousedown", p), document.removeEventListener("keydown", m);
872
+ });
873
+ function _(e) {
874
+ let t = e.target.value;
875
+ t && a.value && s(a.value.target, {
876
+ kind: "date",
877
+ date: t
878
+ });
879
+ }
880
+ return (e, t) => a.value ? (L(), k("div", {
881
+ key: 0,
882
+ ref_key: "popupEl",
883
+ ref: o,
884
+ class: "layout-sdt-widget-popup",
885
+ role: a.value.kind === "dropdown" ? "listbox" : void 0,
886
+ style: P({
887
+ position: "fixed",
888
+ top: a.value.y + "px",
889
+ left: a.value.x + "px",
890
+ zIndex: 1e3
891
+ }),
892
+ onKeydown: g,
893
+ onMousedown: t[0] ||= Y(() => {}, ["prevent"])
894
+ }, [a.value.kind === "dropdown" ? (L(), k(w, { key: 0 }, [a.value.items.length === 0 ? (L(), k("div", Rn, "No options")) : O("", !0), (L(!0), k(w, null, z(a.value.items, (e) => (L(), k("button", {
895
+ key: e.value,
896
+ type: "button",
897
+ role: "option",
898
+ "aria-selected": e.displayText === a.value.current,
899
+ class: N(["layout-sdt-widget-option", { "is-selected": e.displayText === a.value.current }]),
900
+ onClick: (t) => s(a.value.target, {
901
+ kind: "dropdown",
902
+ value: e.value
903
+ })
904
+ }, H(e.displayText), 11, zn))), 128))], 64)) : (L(), k("input", {
905
+ key: 1,
906
+ type: "date",
907
+ class: "layout-sdt-widget-date",
908
+ value: a.value.current,
909
+ onChange: _
910
+ }, null, 40, Bn))], 44, Ln)) : O("", !0);
911
+ }
912
+ }), $ = {
913
+ key: 0,
914
+ class: "docx-editor-vue__title-bar"
915
+ }, Un = { class: "docx-editor-vue__title-bar-left" }, Wn = { class: "docx-editor-vue__title-bar-center" }, Gn = { class: "docx-editor-vue__title-bar-right" }, Kn = /* @__PURE__ */ M({
916
+ __name: "DocxEditorMenuBar",
917
+ props: {
918
+ showMenuBar: { type: Boolean },
919
+ documentName: {},
920
+ documentNameEditable: {
921
+ type: Boolean,
922
+ default: !0
923
+ },
924
+ showFileOpen: {
925
+ type: Boolean,
926
+ default: !0
927
+ },
928
+ showHelpMenu: {
929
+ type: Boolean,
930
+ default: !0
931
+ },
932
+ renderLogo: {},
933
+ renderTitleBarRight: {}
934
+ },
935
+ emits: [
936
+ "rename",
937
+ "menu-action",
938
+ "insert-table"
939
+ ],
940
+ setup(e, { emit: t }) {
941
+ let n = t;
942
+ return (t, r) => e.showMenuBar ? (L(), k("div", $, [
943
+ A("div", Un, [e.renderLogo ? (L(), D(V(e.renderLogo), { key: 0 })) : O("", !0), B(t.$slots, "title-bar-left")]),
944
+ A("div", Wn, [j(_, {
945
+ "model-value": e.documentName,
946
+ editable: e.documentNameEditable,
947
+ "onUpdate:modelValue": r[0] ||= (e) => n("rename", e)
948
+ }, null, 8, ["model-value", "editable"]), j(v, {
949
+ "show-file-open": e.showFileOpen,
950
+ "show-help-menu": e.showHelpMenu,
951
+ onAction: r[1] ||= (e) => n("menu-action", e),
952
+ onInsertTable: r[2] ||= (e, t) => n("insert-table", e, t)
953
+ }, null, 8, ["show-file-open", "show-help-menu"])]),
954
+ A("div", Gn, [B(t.$slots, "title-bar-right"), e.renderTitleBarRight ? (L(), D(V(e.renderTitleBarRight), { key: 0 })) : O("", !0)])
955
+ ])) : O("", !0);
956
+ }
957
+ }), qn = ["aria-label"], Jn = { class: "wm-header" }, Yn = { class: "wm-body" }, Xn = { class: "wm-radio-row" }, Zn = ["checked"], Qn = {
958
+ for: "wm-none",
959
+ class: "wm-inline-label"
960
+ }, $n = { class: "wm-radio-row" }, er = ["checked"], tr = {
961
+ for: "wm-picture",
962
+ class: "wm-inline-label"
963
+ }, nr = {
964
+ key: 0,
965
+ class: "wm-subform"
966
+ }, rr = { class: "wm-row" }, ir = {
967
+ key: 0,
968
+ class: "wm-row"
969
+ }, ar = ["src"], or = { class: "wm-row" }, sr = { class: "wm-label" }, cr = { class: "wm-inline-label" }, lr = { class: "wm-radio-row" }, ur = ["checked"], dr = {
970
+ for: "wm-text",
971
+ class: "wm-inline-label"
972
+ }, fr = {
973
+ key: 1,
974
+ class: "wm-subform"
975
+ }, pr = {
976
+ key: 0,
977
+ class: "wm-row"
978
+ }, mr = { class: "wm-label" }, hr = ["value"], gr = ["value"], _r = { class: "wm-row" }, vr = { class: "wm-label" }, yr = { class: "wm-row" }, br = { class: "wm-label" }, xr = ["value"], Sr = { class: "wm-row" }, Cr = { class: "wm-label" }, wr = { class: "wm-inline-label" }, Tr = { class: "wm-row" }, Er = { class: "wm-label" }, Dr = { class: "wm-row" }, Or = { class: "wm-label" }, kr = { class: "wm-inline-label" }, Ar = ["checked"], jr = { class: "wm-inline-label" }, Mr = ["checked"], Nr = { class: "wm-inline-label" }, Pr = { class: "wm-footer" }, Fr = ["disabled"], Ir = /* @__PURE__ */ x(/* @__PURE__ */ M({
979
+ __name: "WatermarkDialog",
980
+ props: {
981
+ isOpen: { type: Boolean },
982
+ current: {},
983
+ presets: { default: () => yt }
984
+ },
985
+ emits: ["close", "apply"],
986
+ setup(e, { emit: t }) {
987
+ let n = [
988
+ "Calibri",
989
+ "Arial",
990
+ "Times New Roman",
991
+ "Georgia",
992
+ "Verdana",
993
+ "Courier New"
994
+ ], { t: r } = d(), i = e, a = E(() => i.presets), o = t, s = R("none"), c = R(i.presets[0] ?? "CONFIDENTIAL"), l = R("Calibri"), u = R(!0), f = R(54), p = R("#C0C0C0"), m = R("diagonal"), h = R(!0), g = R(void 0), _ = R(void 0), v = R(100), y = R(!0);
995
+ K(() => i.isOpen, (e) => {
996
+ if (!e) return;
997
+ let t = i.current;
998
+ t?.kind === "text" ? (s.value = "text", c.value = t.text, l.value = t.font || "Calibri", u.value = t.fontSize === void 0, t.fontSize !== void 0 && (f.value = t.fontSize), p.value = t.color || "#C0C0C0", m.value = t.layout, h.value = t.semitransparent) : t?.kind === "picture" ? (s.value = "picture", g.value = t.dataUrl, _.value = t.widthEmu !== void 0 && t.heightEmu !== void 0 ? {
999
+ widthEmu: t.widthEmu,
1000
+ heightEmu: t.heightEmu
1001
+ } : void 0, v.value = Math.round((t.scale || 1) * 100), y.value = t.washout) : s.value = "none";
1002
+ }, { immediate: !0 });
1003
+ let b = E(() => s.value === "picture" && !g.value);
1004
+ function ee(e) {
1005
+ let t = e.target.value;
1006
+ t && (c.value = t);
1007
+ }
1008
+ function x(e) {
1009
+ let t = e.target.files?.[0];
1010
+ if (!t) return;
1011
+ let n = new FileReader();
1012
+ n.onload = () => {
1013
+ let e = typeof n.result == "string" ? n.result : void 0;
1014
+ if (g.value = e, _.value = void 0, !e) return;
1015
+ let t = new Image();
1016
+ t.onload = () => {
1017
+ _.value = bt(t.naturalWidth, t.naturalHeight);
1018
+ }, t.src = e;
1019
+ }, n.readAsDataURL(t);
1020
+ }
1021
+ function S() {
1022
+ o("close");
1023
+ }
1024
+ function C() {
1025
+ if (s.value === "none") o("apply", null);
1026
+ else if (s.value === "text") o("apply", {
1027
+ kind: "text",
1028
+ text: c.value,
1029
+ font: l.value,
1030
+ color: p.value,
1031
+ semitransparent: h.value,
1032
+ layout: m.value,
1033
+ fontSize: u.value ? void 0 : f.value
1034
+ });
1035
+ else {
1036
+ if (!g.value) return;
1037
+ o("apply", {
1038
+ kind: "picture",
1039
+ dataUrl: g.value,
1040
+ scale: v.value / 100,
1041
+ washout: y.value,
1042
+ ..._.value ?? {}
1043
+ });
1044
+ }
1045
+ S();
1046
+ }
1047
+ function te(e) {
1048
+ e.key === "Escape" && S();
1049
+ }
1050
+ return (t, i) => e.isOpen ? (L(), k("div", {
1051
+ key: 0,
1052
+ class: "wm-overlay",
1053
+ onMousedown: Y(S, ["self"]),
1054
+ onKeydown: te
1055
+ }, [A("div", {
1056
+ class: "wm-dialog",
1057
+ role: "dialog",
1058
+ "aria-label": U(r)("dialogs.watermark.title"),
1059
+ onMousedown: i[13] ||= Y(() => {}, ["stop"])
1060
+ }, [
1061
+ A("div", Jn, H(U(r)("dialogs.watermark.title")), 1),
1062
+ A("div", Yn, [
1063
+ A("div", Xn, [A("input", {
1064
+ id: "wm-none",
1065
+ type: "radio",
1066
+ checked: s.value === "none",
1067
+ onChange: i[0] ||= (e) => s.value = "none"
1068
+ }, null, 40, Zn), A("label", Qn, H(U(r)("dialogs.watermark.noWatermark")), 1)]),
1069
+ A("div", $n, [A("input", {
1070
+ id: "wm-picture",
1071
+ type: "radio",
1072
+ checked: s.value === "picture",
1073
+ onChange: i[1] ||= (e) => s.value = "picture"
1074
+ }, null, 40, er), A("label", tr, H(U(r)("dialogs.watermark.picture")), 1)]),
1075
+ s.value === "picture" ? (L(), k("div", nr, [
1076
+ A("div", rr, [A("input", {
1077
+ type: "file",
1078
+ accept: "image/*",
1079
+ onChange: x
1080
+ }, null, 32)]),
1081
+ g.value ? (L(), k("div", ir, [A("img", {
1082
+ src: g.value,
1083
+ alt: "",
1084
+ class: "wm-preview"
1085
+ }, null, 8, ar)])) : O("", !0),
1086
+ A("div", or, [
1087
+ A("span", sr, H(U(r)("dialogs.watermark.scale")), 1),
1088
+ q(A("input", {
1089
+ class: "wm-input wm-input--narrow",
1090
+ type: "number",
1091
+ min: "10",
1092
+ max: "500",
1093
+ "onUpdate:modelValue": i[2] ||= (e) => v.value = e
1094
+ }, null, 512), [[
1095
+ G,
1096
+ v.value,
1097
+ void 0,
1098
+ { number: !0 }
1099
+ ]]),
1100
+ i[14] ||= A("span", { class: "wm-unit" }, "%", -1)
1101
+ ]),
1102
+ A("label", cr, [q(A("input", {
1103
+ type: "checkbox",
1104
+ "onUpdate:modelValue": i[3] ||= (e) => y.value = e
1105
+ }, null, 512), [[W, y.value]]), ce(" " + H(U(r)("dialogs.watermark.washout")), 1)])
1106
+ ])) : O("", !0),
1107
+ A("div", lr, [A("input", {
1108
+ id: "wm-text",
1109
+ type: "radio",
1110
+ checked: s.value === "text",
1111
+ onChange: i[4] ||= (e) => s.value = "text"
1112
+ }, null, 40, ur), A("label", dr, H(U(r)("dialogs.watermark.text")), 1)]),
1113
+ s.value === "text" ? (L(), k("div", fr, [
1114
+ a.value.length > 0 ? (L(), k("div", pr, [A("span", mr, H(U(r)("dialogs.watermark.presetLabel")), 1), A("select", {
1115
+ class: "wm-input",
1116
+ value: a.value.includes(c.value) ? c.value : "",
1117
+ onChange: ee
1118
+ }, [i[15] ||= A("option", { value: "" }, "—", -1), (L(!0), k(w, null, z(a.value, (e) => (L(), k("option", {
1119
+ key: e,
1120
+ value: e
1121
+ }, H(e), 9, gr))), 128))], 40, hr)])) : O("", !0),
1122
+ A("div", _r, [A("span", vr, H(U(r)("dialogs.watermark.textLabel")), 1), q(A("input", {
1123
+ class: "wm-input",
1124
+ "onUpdate:modelValue": i[5] ||= (e) => c.value = e
1125
+ }, null, 512), [[G, c.value]])]),
1126
+ A("div", yr, [A("span", br, H(U(r)("dialogs.watermark.fontLabel")), 1), q(A("select", {
1127
+ class: "wm-input",
1128
+ "onUpdate:modelValue": i[6] ||= (e) => l.value = e
1129
+ }, [(L(), k(w, null, z(n, (e) => A("option", {
1130
+ key: e,
1131
+ value: e
1132
+ }, H(e), 9, xr)), 64))], 512), [[pe, l.value]])]),
1133
+ A("div", Sr, [
1134
+ A("span", Cr, H(U(r)("dialogs.watermark.sizeLabel")), 1),
1135
+ A("label", wr, [q(A("input", {
1136
+ type: "checkbox",
1137
+ "onUpdate:modelValue": i[7] ||= (e) => u.value = e
1138
+ }, null, 512), [[W, u.value]]), ce(" " + H(U(r)("dialogs.watermark.sizeAuto")), 1)]),
1139
+ u.value ? O("", !0) : q((L(), k("input", {
1140
+ key: 0,
1141
+ class: "wm-input wm-input--narrow",
1142
+ type: "number",
1143
+ min: "8",
1144
+ max: "200",
1145
+ "onUpdate:modelValue": i[8] ||= (e) => f.value = e
1146
+ }, null, 512)), [[
1147
+ G,
1148
+ f.value,
1149
+ void 0,
1150
+ { number: !0 }
1151
+ ]])
1152
+ ]),
1153
+ A("div", Tr, [A("span", Er, H(U(r)("dialogs.watermark.colorLabel")), 1), q(A("input", {
1154
+ type: "color",
1155
+ "onUpdate:modelValue": i[9] ||= (e) => p.value = e
1156
+ }, null, 512), [[G, p.value]])]),
1157
+ A("div", Dr, [
1158
+ A("span", Or, H(U(r)("dialogs.watermark.layoutLabel")), 1),
1159
+ A("label", kr, [A("input", {
1160
+ type: "radio",
1161
+ name: "wm-layout",
1162
+ checked: m.value === "diagonal",
1163
+ onChange: i[10] ||= (e) => m.value = "diagonal"
1164
+ }, null, 40, Ar), ce(" " + H(U(r)("dialogs.watermark.diagonal")), 1)]),
1165
+ A("label", jr, [A("input", {
1166
+ type: "radio",
1167
+ name: "wm-layout",
1168
+ checked: m.value === "horizontal",
1169
+ onChange: i[11] ||= (e) => m.value = "horizontal"
1170
+ }, null, 40, Mr), ce(" " + H(U(r)("dialogs.watermark.horizontal")), 1)])
1171
+ ]),
1172
+ A("label", Nr, [q(A("input", {
1173
+ type: "checkbox",
1174
+ "onUpdate:modelValue": i[12] ||= (e) => h.value = e
1175
+ }, null, 512), [[W, h.value]]), ce(" " + H(U(r)("dialogs.watermark.semitransparent")), 1)])
1176
+ ])) : O("", !0)
1177
+ ]),
1178
+ A("div", Pr, [A("button", {
1179
+ type: "button",
1180
+ class: "wm-btn",
1181
+ onClick: S
1182
+ }, H(U(r)("dialogs.watermark.cancelButton")), 1), A("button", {
1183
+ type: "button",
1184
+ class: N(["wm-btn wm-btn--primary", { "wm-btn--disabled": b.value }]),
1185
+ disabled: b.value,
1186
+ onClick: C
1187
+ }, H(U(r)("dialogs.watermark.applyButton")), 11, Fr)])
1188
+ ], 40, qn)], 32)) : O("", !0);
1189
+ }
1190
+ }), [["__scopeId", "data-v-da04955b"]]), Lr = /* @__PURE__ */ M({
1191
+ __name: "DocxEditorDialogs",
1192
+ props: {
1193
+ view: {},
1194
+ bookmarks: {},
1195
+ selectedImagePmPos: {},
1196
+ sectionProperties: {},
1197
+ scrollVisiblePositionIntoView: { type: Function },
1198
+ showFindReplace: { type: Boolean },
1199
+ showHyperlink: { type: Boolean },
1200
+ showInsertSymbol: { type: Boolean },
1201
+ showImageProperties: { type: Boolean },
1202
+ showPageSetup: { type: Boolean },
1203
+ showWatermark: { type: Boolean },
1204
+ currentWatermark: {},
1205
+ watermarkPresets: {},
1206
+ showKeyboardShortcuts: { type: Boolean }
1207
+ },
1208
+ emits: [
1209
+ "update:showFindReplace",
1210
+ "update:showHyperlink",
1211
+ "update:showInsertSymbol",
1212
+ "update:showImageProperties",
1213
+ "update:showPageSetup",
1214
+ "update:showWatermark",
1215
+ "update:showKeyboardShortcuts",
1216
+ "insert-symbol",
1217
+ "hyperlink-submit",
1218
+ "hyperlink-remove",
1219
+ "page-setup-apply",
1220
+ "watermark-apply"
1221
+ ],
1222
+ setup(t, { emit: n }) {
1223
+ let r = n;
1224
+ return (n, a) => (L(), k(w, null, [
1225
+ j(s, {
1226
+ "is-open": t.showFindReplace,
1227
+ view: t.view,
1228
+ "scroll-visible-position-into-view": t.scrollVisiblePositionIntoView,
1229
+ onClose: a[0] ||= (e) => r("update:showFindReplace", !1)
1230
+ }, null, 8, [
1231
+ "is-open",
1232
+ "view",
1233
+ "scroll-visible-position-into-view"
1234
+ ]),
1235
+ j(e, {
1236
+ "is-open": t.showHyperlink,
1237
+ view: t.view,
1238
+ bookmarks: t.bookmarks,
1239
+ onClose: a[1] ||= (e) => r("update:showHyperlink", !1),
1240
+ onSubmit: a[2] ||= (e) => r("hyperlink-submit", e),
1241
+ onRemove: a[3] ||= (e) => r("hyperlink-remove")
1242
+ }, null, 8, [
1243
+ "is-open",
1244
+ "view",
1245
+ "bookmarks"
1246
+ ]),
1247
+ j(i, {
1248
+ "is-open": t.showInsertSymbol,
1249
+ onClose: a[4] ||= (e) => r("update:showInsertSymbol", !1),
1250
+ onInsert: a[5] ||= (e) => r("insert-symbol", e)
1251
+ }, null, 8, ["is-open"]),
1252
+ j(c, {
1253
+ "is-open": t.showImageProperties,
1254
+ view: t.view,
1255
+ "pm-pos": t.selectedImagePmPos,
1256
+ onClose: a[6] ||= (e) => r("update:showImageProperties", !1)
1257
+ }, null, 8, [
1258
+ "is-open",
1259
+ "view",
1260
+ "pm-pos"
1261
+ ]),
1262
+ j(o, {
1263
+ "is-open": t.showPageSetup,
1264
+ "section-properties": t.sectionProperties,
1265
+ onClose: a[7] ||= (e) => r("update:showPageSetup", !1),
1266
+ onApply: a[8] ||= (e) => r("page-setup-apply", e)
1267
+ }, null, 8, ["is-open", "section-properties"]),
1268
+ j(Ir, {
1269
+ "is-open": t.showWatermark,
1270
+ current: t.currentWatermark,
1271
+ presets: t.watermarkPresets,
1272
+ onClose: a[9] ||= (e) => r("update:showWatermark", !1),
1273
+ onApply: a[10] ||= (e) => r("watermark-apply", e)
1274
+ }, null, 8, [
1275
+ "is-open",
1276
+ "current",
1277
+ "presets"
1278
+ ]),
1279
+ j(u, {
1280
+ "is-open": t.showKeyboardShortcuts,
1281
+ onClose: a[11] ||= (e) => r("update:showKeyboardShortcuts", !1)
1282
+ }, null, 8, ["is-open"])
1283
+ ], 64));
1284
+ }
1285
+ }), Rr = ["disabled", "onMousedown"], zr = { class: "ctx-menu__label" }, Br = {
1286
+ key: 0,
1287
+ class: "ctx-menu__shortcut"
1288
+ }, Vr = 220, Hr = 32, Ur = 10, Wr = /* @__PURE__ */ x(/* @__PURE__ */ M({
1289
+ __name: "TextContextMenu",
1290
+ props: {
1291
+ isOpen: { type: Boolean },
1292
+ position: {},
1293
+ hasSelection: { type: Boolean },
1294
+ isEditable: { type: Boolean },
1295
+ inTable: { type: Boolean },
1296
+ onImage: { type: Boolean },
1297
+ canMergeCells: { type: Boolean },
1298
+ canSplitCell: { type: Boolean }
1299
+ },
1300
+ emits: ["close", "action"],
1301
+ setup(e, { emit: t }) {
1302
+ let n = e, r = t, { t: i } = d(), a = g(), o = R(null), s = E(() => {
1303
+ let e = [
1304
+ {
1305
+ id: "cut",
1306
+ label: i("contextMenu.cut"),
1307
+ action: "cut",
1308
+ shortcut: i("contextMenu.cutShortcut"),
1309
+ disabled: !n.hasSelection || !n.isEditable
1310
+ },
1311
+ {
1312
+ id: "copy",
1313
+ label: i("contextMenu.copy"),
1314
+ action: "copy",
1315
+ shortcut: i("contextMenu.copyShortcut"),
1316
+ disabled: !n.hasSelection
1317
+ },
1318
+ {
1319
+ id: "paste",
1320
+ label: i("contextMenu.paste"),
1321
+ action: "paste",
1322
+ shortcut: i("contextMenu.pasteShortcut"),
1323
+ disabled: !n.isEditable
1324
+ },
1325
+ {
1326
+ id: "pasteAsPlainText",
1327
+ label: i("contextMenu.pastePlainText"),
1328
+ action: "pasteAsPlainText",
1329
+ shortcut: i("contextMenu.pastePlainTextShortcut"),
1330
+ disabled: !n.isEditable
1331
+ },
1332
+ {
1333
+ id: "div1",
1334
+ label: "",
1335
+ action: "",
1336
+ divider: !0
1337
+ },
1338
+ {
1339
+ id: "delete",
1340
+ label: i("contextMenu.delete"),
1341
+ action: "delete",
1342
+ shortcut: i("contextMenu.deleteShortcut"),
1343
+ disabled: !n.hasSelection || !n.isEditable
1344
+ },
1345
+ {
1346
+ id: "selectAll",
1347
+ label: i("contextMenu.selectAll"),
1348
+ action: "selectAll",
1349
+ shortcut: i("contextMenu.selectAllShortcut")
1350
+ }
1351
+ ];
1352
+ return n.onImage && n.isEditable && e.push({
1353
+ id: "div-img",
1354
+ label: "",
1355
+ action: "",
1356
+ divider: !0
1357
+ }, {
1358
+ id: "replaceImage",
1359
+ label: i("imageOverlay.replaceImage"),
1360
+ action: "replaceImage"
1361
+ }, {
1362
+ id: "imageProperties",
1363
+ label: i("imageWrap.menu.imageProperties"),
1364
+ action: "imageProperties"
1365
+ }, {
1366
+ id: "deleteImage",
1367
+ label: i("imageOverlay.deleteImage"),
1368
+ action: "deleteImage",
1369
+ shortcut: i("contextMenu.deleteShortcut")
1370
+ }), n.inTable && n.isEditable && e.push({
1371
+ id: "div2",
1372
+ label: "",
1373
+ action: "",
1374
+ divider: !0
1375
+ }, {
1376
+ id: "addRowAbove",
1377
+ label: i("table.insertRowAbove"),
1378
+ action: "addRowAbove"
1379
+ }, {
1380
+ id: "addRowBelow",
1381
+ label: i("table.insertRowBelow"),
1382
+ action: "addRowBelow"
1383
+ }, {
1384
+ id: "deleteRow",
1385
+ label: i("table.deleteRow"),
1386
+ action: "deleteRow"
1387
+ }, {
1388
+ id: "div3",
1389
+ label: "",
1390
+ action: "",
1391
+ divider: !0
1392
+ }, {
1393
+ id: "addColLeft",
1394
+ label: i("table.insertColumnLeft"),
1395
+ action: "addColumnLeft"
1396
+ }, {
1397
+ id: "addColRight",
1398
+ label: i("table.insertColumnRight"),
1399
+ action: "addColumnRight"
1400
+ }, {
1401
+ id: "deleteCol",
1402
+ label: i("table.deleteColumn"),
1403
+ action: "deleteColumn"
1404
+ }, {
1405
+ id: "div4",
1406
+ label: "",
1407
+ action: "",
1408
+ divider: !0
1409
+ }, {
1410
+ id: "mergeCells",
1411
+ label: i("table.mergeCells"),
1412
+ action: "mergeCells",
1413
+ disabled: !n.canMergeCells
1414
+ }, {
1415
+ id: "splitCell",
1416
+ label: i("table.splitCell"),
1417
+ action: "splitCell",
1418
+ disabled: !n.canSplitCell
1419
+ }, {
1420
+ id: "div5",
1421
+ label: "",
1422
+ action: "",
1423
+ divider: !0
1424
+ }, {
1425
+ id: "selectTable",
1426
+ label: i("table.selectTable"),
1427
+ action: "selectTable"
1428
+ }, {
1429
+ id: "deleteTable",
1430
+ label: i("table.deleteTable"),
1431
+ action: "deleteTable"
1432
+ }), e;
1433
+ }), c = E(() => {
1434
+ let e = n.position.x, t = n.position.y, r = s.value.filter((e) => !e.divider).length, i = s.value.filter((e) => e.divider).length, a = r * Hr + i * 9;
1435
+ return typeof window < "u" && (e + Vr + Ur > window.innerWidth && (e = window.innerWidth - Vr - Ur), t + a + Ur > window.innerHeight && (t = window.innerHeight - a - Ur)), {
1436
+ position: "fixed",
1437
+ left: `${e}px`,
1438
+ top: `${t}px`,
1439
+ zIndex: 400
1440
+ };
1441
+ });
1442
+ function l(e) {
1443
+ e && (r("action", e), r("close"));
1444
+ }
1445
+ function u(e) {
1446
+ e.key === "Escape" && r("close");
1447
+ }
1448
+ return K(() => n.isOpen, (e) => {
1449
+ e && de(() => o.value?.focus());
1450
+ }), (t, n) => (L(), D(T, { to: "body" }, [e.isOpen ? (L(), k("div", {
1451
+ key: 0,
1452
+ class: "ctx-menu-backdrop",
1453
+ onMousedown: n[0] ||= (e) => t.$emit("close"),
1454
+ onContextmenu: n[1] ||= Y((e) => t.$emit("close"), ["prevent"])
1455
+ }, null, 32)) : O("", !0), e.isOpen ? (L(), k("div", {
1456
+ key: 1,
1457
+ ref_key: "menuRef",
1458
+ ref: o,
1459
+ class: N(["ctx-menu", U(a)]),
1460
+ style: P(c.value),
1461
+ onContextmenu: n[2] ||= Y(() => {}, ["prevent"]),
1462
+ onKeydown: u
1463
+ }, [(L(!0), k(w, null, z(s.value, (e, t) => (L(), k("button", {
1464
+ key: e.id || t,
1465
+ class: N(["ctx-menu__item", {
1466
+ "ctx-menu__item--disabled": e.disabled,
1467
+ "ctx-menu__item--divider": e.divider
1468
+ }]),
1469
+ disabled: e.disabled,
1470
+ onMousedown: Y((t) => l(e.action), ["prevent"])
1471
+ }, [A("span", zr, H(e.label), 1), e.shortcut ? (L(), k("span", Br, H(e.shortcut), 1)) : O("", !0)], 42, Rr))), 128))], 38)) : O("", !0)]));
1472
+ }
1473
+ }), [["__scopeId", "data-v-6d4a567b"]]), Gr = ["aria-label"], Kr = { class: "image-ctx-menu__icon" }, qr = { class: "image-ctx-menu__label" }, Jr = {
1474
+ key: 1,
1475
+ class: "image-ctx-menu__divider",
1476
+ role: "separator"
1477
+ }, Yr = [
1478
+ "data-wrap-type",
1479
+ "data-current",
1480
+ "data-disabled",
1481
+ "disabled",
1482
+ "title",
1483
+ "onClick"
1484
+ ], Xr = { class: "image-ctx-menu__icon" }, Zr = { class: "image-ctx-menu__label" }, Qr = ["aria-label"], $r = ["disabled", "onClick"], ei = { class: "image-ctx-menu__label" }, ti = {
1485
+ key: 0,
1486
+ class: "image-ctx-menu__shortcut"
1487
+ }, ni = {
1488
+ key: 0,
1489
+ class: "image-ctx-menu__divider",
1490
+ role: "separator"
1491
+ }, ri = 18, ii = 260, ai = 10, oi = /* @__PURE__ */ x(/* @__PURE__ */ M({
1492
+ __name: "ImageContextMenu",
1493
+ props: {
1494
+ state: {},
1495
+ textActions: {},
1496
+ canOpenProperties: {
1497
+ type: Boolean,
1498
+ default: !1
1499
+ }
1500
+ },
1501
+ emits: [
1502
+ "close",
1503
+ "select",
1504
+ "text-action",
1505
+ "open-properties"
1506
+ ],
1507
+ setup(e, { emit: t }) {
1508
+ let n = e, i = t;
1509
+ function a() {
1510
+ i("open-properties"), i("close");
1511
+ }
1512
+ let { t: o } = d(), s = g(), c = R(null), l = ut, u = E(() => n.state ? ft(n.state.currentWrapType, n.state.currentCssFloat ?? null) : null), f = {
1513
+ inline: "wrap_text",
1514
+ squareLeft: "format_image_left",
1515
+ squareRight: "format_image_right",
1516
+ behind: "flip_to_back",
1517
+ inFront: "flip_to_front"
1518
+ };
1519
+ function p(e) {
1520
+ return f[e];
1521
+ }
1522
+ let m = E(() => {
1523
+ if (!n.state) return {};
1524
+ let e = ut.length * 36 + 16, t = n.state.position.x, r = n.state.position.y;
1525
+ return typeof window < "u" && (t + ii > window.innerWidth && (t = window.innerWidth - ii - ai), r + e > window.innerHeight && (r = window.innerHeight - e - ai), t < ai && (t = ai), r < ai && (r = ai)), {
1526
+ position: "fixed",
1527
+ left: `${t}px`,
1528
+ top: `${r}px`,
1529
+ minWidth: `${ii}px`,
1530
+ zIndex: 400
1531
+ };
1532
+ });
1533
+ function h(e) {
1534
+ return n.state ? mt(e, n.state.currentWrapType) : !1;
1535
+ }
1536
+ function _(e) {
1537
+ h(e) && (i("select", e.choice), i("close"));
1538
+ }
1539
+ function v(e) {
1540
+ e.disabled || (i("text-action", e.action), i("close"));
1541
+ }
1542
+ function y(e) {
1543
+ e.preventDefault(), i("close");
1544
+ }
1545
+ function b(e) {
1546
+ e.key === "Escape" && (e.preventDefault(), i("close"));
1547
+ }
1548
+ return (t, n) => (L(), D(T, { to: "body" }, [e.state && e.state.open ? (L(), k("div", {
1549
+ key: 0,
1550
+ class: "image-ctx-menu-backdrop",
1551
+ onMousedown: y,
1552
+ onContextmenu: n[0] ||= Y((e) => t.$emit("close"), ["prevent"])
1553
+ }, null, 32)) : O("", !0), e.state && e.state.open ? (L(), k("div", {
1554
+ key: 1,
1555
+ ref_key: "menuRef",
1556
+ ref: c,
1557
+ class: N(["image-ctx-menu", U(s)]),
1558
+ role: "menu",
1559
+ "aria-label": U(o)("imageWrap.menu.ariaLabel"),
1560
+ "data-testid": "image-context-menu",
1561
+ style: P(m.value),
1562
+ onContextmenu: n[4] ||= Y(() => {}, ["prevent"]),
1563
+ onKeydown: b
1564
+ }, [
1565
+ e.canOpenProperties ? (L(), k("button", {
1566
+ key: 0,
1567
+ type: "button",
1568
+ role: "menuitem",
1569
+ class: "image-ctx-menu__item",
1570
+ "data-action": "open-properties",
1571
+ onMousedown: n[1] ||= Y(() => {}, ["prevent"]),
1572
+ onClick: a
1573
+ }, [A("span", Kr, [j(r, {
1574
+ name: "settings",
1575
+ size: ri
1576
+ })]), A("span", qr, H(U(o)("imageWrap.menu.imageProperties")), 1)], 32)) : O("", !0),
1577
+ e.canOpenProperties ? (L(), k("div", Jr)) : O("", !0),
1578
+ (L(!0), k(w, null, z(U(l), (e) => (L(), k("button", {
1579
+ key: e.choice,
1580
+ type: "button",
1581
+ role: "menuitem",
1582
+ class: N(["image-ctx-menu__item", { "image-ctx-menu__item--current": e.choice === u.value }]),
1583
+ "data-wrap-type": e.choice,
1584
+ "data-current": e.choice === u.value ? "true" : "false",
1585
+ "data-disabled": h(e) ? "false" : "true",
1586
+ disabled: !h(e),
1587
+ title: U(o)(`imageWrap.menuDesc.${e.i18nDescKey}`),
1588
+ onMousedown: n[2] ||= Y(() => {}, ["prevent"]),
1589
+ onClick: (t) => _(e)
1590
+ }, [
1591
+ A("span", Xr, [j(r, {
1592
+ name: p(e.iconHint),
1593
+ size: ri
1594
+ }, null, 8, ["name"])]),
1595
+ A("span", Zr, H(U(o)(`imageWrap.menu.${e.i18nLabelKey}`)), 1),
1596
+ e.choice === u.value ? (L(), k("span", {
1597
+ key: 0,
1598
+ class: "image-ctx-menu__current-dot",
1599
+ "aria-label": U(o)("imageWrap.menu.ariaLabel")
1600
+ }, "●", 8, Qr)) : O("", !0)
1601
+ ], 42, Yr))), 128)),
1602
+ e.textActions && e.textActions.length > 0 ? (L(), k(w, { key: 2 }, [n[5] ||= A("div", {
1603
+ class: "image-ctx-menu__divider",
1604
+ role: "separator"
1605
+ }, null, -1), (L(!0), k(w, null, z(e.textActions, (e, t) => (L(), k(w, { key: `${e.action}-${t}` }, [A("button", {
1606
+ type: "button",
1607
+ role: "menuitem",
1608
+ class: "image-ctx-menu__item image-ctx-menu__item--text",
1609
+ disabled: e.disabled,
1610
+ onMousedown: n[3] ||= Y(() => {}, ["prevent"]),
1611
+ onClick: (t) => v(e)
1612
+ }, [A("span", ei, H(e.label), 1), e.shortcut ? (L(), k("span", ti, H(e.shortcut), 1)) : O("", !0)], 40, $r), e.dividerAfter ? (L(), k("div", ni)) : O("", !0)], 64))), 128))], 64)) : O("", !0)
1613
+ ], 46, Gr)) : O("", !0)]));
1614
+ }
1615
+ }), [["__scopeId", "data-v-18e35b1b"]]), si = /* @__PURE__ */ M({
1616
+ __name: "DocxEditorOverlays",
1617
+ props: {
1618
+ readOnly: { type: Boolean },
1619
+ contextMenu: {},
1620
+ imageContextMenu: {},
1621
+ imageContextMenuTextActions: {},
1622
+ canOpenImageProperties: { type: Boolean }
1623
+ },
1624
+ emits: [
1625
+ "context-menu-action",
1626
+ "close-context-menu",
1627
+ "image-wrap-select",
1628
+ "close-image-context-menu",
1629
+ "open-image-properties"
1630
+ ],
1631
+ setup(e, { emit: t }) {
1632
+ let n = t;
1633
+ return (t, r) => (L(), k(w, null, [j(Wr, {
1634
+ "is-open": e.contextMenu.isOpen,
1635
+ position: e.contextMenu.position,
1636
+ "has-selection": e.contextMenu.hasSelection,
1637
+ "is-editable": !e.readOnly,
1638
+ "in-table": e.contextMenu.inTable,
1639
+ "on-image": e.contextMenu.onImage,
1640
+ "can-merge-cells": e.contextMenu.canMergeCells,
1641
+ "can-split-cell": e.contextMenu.canSplitCell,
1642
+ onAction: r[0] ||= (e) => n("context-menu-action", e),
1643
+ onClose: r[1] ||= (e) => n("close-context-menu")
1644
+ }, null, 8, [
1645
+ "is-open",
1646
+ "position",
1647
+ "has-selection",
1648
+ "is-editable",
1649
+ "in-table",
1650
+ "on-image",
1651
+ "can-merge-cells",
1652
+ "can-split-cell"
1653
+ ]), j(oi, {
1654
+ state: e.imageContextMenu,
1655
+ "text-actions": e.imageContextMenuTextActions,
1656
+ "can-open-properties": e.canOpenImageProperties,
1657
+ onClose: r[2] ||= (e) => n("close-image-context-menu"),
1658
+ onSelect: r[3] ||= (e) => n("image-wrap-select", e),
1659
+ onTextAction: r[4] ||= (e) => n("context-menu-action", e),
1660
+ onOpenProperties: r[5] ||= (e) => n("open-image-properties")
1661
+ }, null, 8, [
1662
+ "state",
1663
+ "text-actions",
1664
+ "can-open-properties"
1665
+ ])], 64));
1666
+ }
1667
+ }), ci = ["href", "title"], li = ["title"], ui = ["title"], di = ["title"], fi = { class: "docx-hyperlink-popup__edit-row" }, pi = ["placeholder", "onKeydown"], mi = { class: "docx-hyperlink-popup__edit-row" }, hi = ["onKeydown"], gi = ["disabled"], _i = /* @__PURE__ */ x(/* @__PURE__ */ M({
1668
+ __name: "HyperlinkPopup",
1669
+ props: {
1670
+ data: {},
1671
+ readOnly: { type: Boolean }
1672
+ },
1673
+ emits: [
1674
+ "navigate",
1675
+ "copy",
1676
+ "edit",
1677
+ "remove",
1678
+ "close"
1679
+ ],
1680
+ setup(e, { emit: t }) {
1681
+ let { t: n } = d(), r = e, i = t, a = R(!1), o = R(""), s = R(""), c = R(null), l = E(() => ({
1682
+ left: (r.data?.position.left ?? 0) + "px",
1683
+ top: (r.data?.position.top ?? 0) + "px"
1684
+ }));
1685
+ K(() => r.data?.href, () => {
1686
+ a.value = !1;
1687
+ });
1688
+ let u = null, f = null;
1689
+ function p() {
1690
+ f &&= (clearTimeout(f), null), u &&= (document.removeEventListener("mousedown", u), null);
1691
+ }
1692
+ K(() => r.data, (e) => {
1693
+ p(), e && (u = (e) => {
1694
+ let t = c.value;
1695
+ t && !t.contains(e.target) && i("close");
1696
+ }, f = setTimeout(() => {
1697
+ u && document.addEventListener("mousedown", u);
1698
+ }, 0));
1699
+ }, { immediate: !0 }), F(p);
1700
+ function m() {
1701
+ r.data && (o.value = r.data.displayText, s.value = r.data.href, a.value = !0);
1702
+ }
1703
+ function h() {
1704
+ s.value.trim() && (i("edit", o.value, s.value), a.value = !1);
1705
+ }
1706
+ function g() {
1707
+ r.data && (i("copy", r.data.href), typeof navigator < "u" && navigator.clipboard && navigator.clipboard.writeText(r.data.href).catch(() => {}));
1708
+ }
1709
+ return (t, r) => e.data ? (L(), k("div", {
1710
+ key: 0,
1711
+ ref_key: "popupRef",
1712
+ ref: c,
1713
+ class: N(["docx-hyperlink-popup", { "docx-hyperlink-popup--edit": a.value }]),
1714
+ style: P(l.value),
1715
+ onMousedown: r[6] ||= Y(() => {}, ["stop"])
1716
+ }, [a.value ? (L(), k(w, { key: 1 }, [A("div", fi, [q(A("input", {
1717
+ class: "docx-hyperlink-popup__input",
1718
+ placeholder: U(n)("hyperlinkPopup.displayTextPlaceholder"),
1719
+ "onUpdate:modelValue": r[2] ||= (e) => o.value = e,
1720
+ onKeydown: [J(Y(h, ["prevent"]), ["enter"]), r[3] ||= J((e) => t.$emit("close"), ["esc"])]
1721
+ }, null, 40, pi), [[G, o.value]])]), A("div", mi, [q(A("input", {
1722
+ class: "docx-hyperlink-popup__input",
1723
+ placeholder: "https://...",
1724
+ "onUpdate:modelValue": r[4] ||= (e) => s.value = e,
1725
+ onKeydown: [J(Y(h, ["prevent"]), ["enter"]), r[5] ||= J((e) => t.$emit("close"), ["esc"])]
1726
+ }, null, 40, hi), [[G, s.value]]), A("button", {
1727
+ class: "docx-hyperlink-popup__apply",
1728
+ disabled: !s.value.trim(),
1729
+ onClick: Y(h, ["prevent"])
1730
+ }, H(U(n)("common.apply")), 9, gi)])], 64)) : (L(), k(w, { key: 0 }, [
1731
+ r[10] ||= se("<span class=\"docx-hyperlink-popup__icon\" aria-hidden data-v-084b4288><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" data-v-084b4288><circle cx=\"12\" cy=\"12\" r=\"10\" data-v-084b4288></circle><path d=\"M2 12h20\" data-v-084b4288></path><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" data-v-084b4288></path></svg></span>", 1),
1732
+ A("a", {
1733
+ class: "docx-hyperlink-popup__url",
1734
+ href: e.data.href,
1735
+ title: e.data.href,
1736
+ onClick: r[0] ||= Y((n) => t.$emit("navigate", e.data.href), ["prevent"])
1737
+ }, H(e.data.href), 9, ci),
1738
+ r[11] ||= A("span", { class: "docx-hyperlink-popup__sep" }, null, -1),
1739
+ A("button", {
1740
+ class: "docx-hyperlink-popup__btn",
1741
+ title: U(n)("hyperlinkPopup.copyLink"),
1742
+ onClick: Y(g, ["prevent"])
1743
+ }, [...r[7] ||= [A("svg", {
1744
+ width: "18",
1745
+ height: "18",
1746
+ viewBox: "0 0 24 24",
1747
+ fill: "none",
1748
+ stroke: "currentColor",
1749
+ "stroke-width": "2",
1750
+ "stroke-linecap": "round",
1751
+ "stroke-linejoin": "round"
1752
+ }, [A("rect", {
1753
+ x: "9",
1754
+ y: "9",
1755
+ width: "13",
1756
+ height: "13",
1757
+ rx: "2",
1758
+ ry: "2"
1759
+ }), A("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })], -1)]], 8, li),
1760
+ e.readOnly ? O("", !0) : (L(), k("button", {
1761
+ key: 0,
1762
+ class: "docx-hyperlink-popup__btn",
1763
+ title: U(n)("hyperlinkPopup.editLink"),
1764
+ onClick: Y(m, ["prevent"])
1765
+ }, [...r[8] ||= [A("svg", {
1766
+ width: "18",
1767
+ height: "18",
1768
+ viewBox: "0 0 24 24",
1769
+ fill: "none",
1770
+ stroke: "currentColor",
1771
+ "stroke-width": "2",
1772
+ "stroke-linecap": "round",
1773
+ "stroke-linejoin": "round"
1774
+ }, [A("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }), A("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })], -1)]], 8, ui)),
1775
+ e.readOnly ? O("", !0) : (L(), k("button", {
1776
+ key: 1,
1777
+ class: "docx-hyperlink-popup__btn",
1778
+ title: U(n)("hyperlinkPopup.removeLink"),
1779
+ onClick: r[1] ||= Y((e) => t.$emit("remove"), ["prevent"])
1780
+ }, [...r[9] ||= [se("<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" data-v-084b4288><path d=\"M18.84 12.25l1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71\" data-v-084b4288></path><path d=\"M5.17 11.75l-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71\" data-v-084b4288></path><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"5\" data-v-084b4288></line><line x1=\"2\" y1=\"8\" x2=\"5\" y2=\"8\" data-v-084b4288></line><line x1=\"16\" y1=\"19\" x2=\"16\" y2=\"22\" data-v-084b4288></line><line x1=\"19\" y1=\"16\" x2=\"22\" y2=\"16\" data-v-084b4288></line></svg>", 1)]], 8, di))
1781
+ ], 64))], 38)) : O("", !0);
1782
+ }
1783
+ }), [["__scopeId", "data-v-084b4288"]]);
1784
+ //#endregion
1785
+ //#region src/composables/useFileIO.ts
1786
+ function vi(e) {
1787
+ let t = R(null), n = R(null);
1788
+ function r(t) {
1789
+ let n = t.target, r = n.files?.[0], i = e.getActiveView();
1790
+ r && i && Tt(i, r, { onError: (t) => e.emit("error", t instanceof Error ? t : /* @__PURE__ */ Error("Failed to insert image")) }), n.value = "";
1791
+ }
1792
+ async function i() {
1793
+ await e.nextTick(), e.extractCommentsAndChanges(), e.emit("ready");
1794
+ }
1795
+ async function a(t) {
1796
+ if (e.onOpen) {
1797
+ let n = t.target, r = n.files?.[0];
1798
+ if (n.value = "", !r) return;
1799
+ try {
1800
+ await e.onOpen(r);
1801
+ } catch (t) {
1802
+ e.emit("error", t instanceof Error ? t : /* @__PURE__ */ Error("Failed to open document"));
1803
+ }
1804
+ return;
1805
+ }
1806
+ try {
1807
+ let n = await Je(t);
1808
+ if (!n) return;
1809
+ await e.loadBuffer(n.buffer), e.emit("update:document", e.getDocument()), e.emit("rename", n.name), await i();
1810
+ } catch (t) {
1811
+ e.emit("error", t instanceof Error ? t : /* @__PURE__ */ Error("Failed to open document"));
1812
+ }
1813
+ }
1814
+ function o(t) {
1815
+ e.onDocumentNameChange?.(t), e.emit("rename", t);
1816
+ }
1817
+ async function s() {
1818
+ let t = await e.saveBlob();
1819
+ if (!t) return;
1820
+ let n = (e.documentName() ?? "").trim() || "document", r = URL.createObjectURL(t), i = window.document.createElement("a");
1821
+ i.href = r, i.download = `${n.replace(/\.docx$/i, "")}.docx`, i.click(), setTimeout(() => URL.revokeObjectURL(r), 0);
1822
+ }
1823
+ async function c(t) {
1824
+ await e.loadBuffer(t), e.emit("update:document", e.getDocument()), await i();
1825
+ }
1826
+ function l(t) {
1827
+ e.loadParsedDocument(t), e.emit("update:document", t), i();
1828
+ }
1829
+ async function u() {
1830
+ let t = await e.saveBlob();
1831
+ return t ? t.arrayBuffer() : null;
1832
+ }
1833
+ return {
1834
+ docxInputRef: t,
1835
+ imageInputRef: n,
1836
+ handleImageFileChange: r,
1837
+ handleDocxFileChange: a,
1838
+ handleDocumentNameChange: o,
1839
+ downloadCurrentDocument: s,
1840
+ emitReadyAfterSidebarStateRefresh: i,
1841
+ loadDocumentBuffer: c,
1842
+ loadDocument: l,
1843
+ save: u
1844
+ };
1845
+ }
1846
+ //#endregion
1847
+ //#region src/composables/useHyperlinkManagement.ts
1848
+ function yi(e) {
1849
+ let t = R(null);
1850
+ function n(t) {
1851
+ let n = e.editorView.value;
1852
+ if (!n) return;
1853
+ let r = e.getCommands(), { empty: i } = n.state.selection, a = t.bookmark ? `#${t.bookmark}` : t.url;
1854
+ if (a) {
1855
+ if (i && t.displayText) {
1856
+ let e = r.insertHyperlink;
1857
+ e && e(t.displayText, a, t.tooltip || void 0)(n.state, (e) => n.dispatch(e), n);
1858
+ } else {
1859
+ let e = r.setHyperlink;
1860
+ e && e(a, t.tooltip || void 0)(n.state, (e) => n.dispatch(e), n);
1861
+ }
1862
+ n.focus();
1863
+ }
1864
+ }
1865
+ function r() {
1866
+ let t = e.editorView.value;
1867
+ if (!t) return;
1868
+ let n = e.getCommands().removeHyperlink;
1869
+ n && n()(t.state, (e) => t.dispatch(e), t), t.focus();
1870
+ }
1871
+ function i(e) {
1872
+ window.open(e, "_blank", "noopener,noreferrer"), t.value = null;
1873
+ }
1874
+ function a(n, r) {
1875
+ let i = e.editorView.value;
1876
+ if (!i) return;
1877
+ let a = et(i.state);
1878
+ if (!a) {
1879
+ t.value = null;
1880
+ return;
1881
+ }
1882
+ let o = i.state.schema.marks.hyperlink, { $from: s } = i.state.selection, c = o.create({
1883
+ href: r,
1884
+ tooltip: a.mark.attrs.tooltip
1885
+ }), l = s.marks().filter((e) => e.type !== o), u = i.state.schema.text(n, [...l, c]), d = i.state.tr.replaceWith(a.start, a.end, u);
1886
+ i.dispatch(d.scrollIntoView()), t.value = null, i.focus();
1887
+ }
1888
+ function o() {
1889
+ let n = e.editorView.value;
1890
+ if (!n) return;
1891
+ let r = et(n.state, t.value?.href);
1892
+ if (!r) {
1893
+ t.value = null;
1894
+ return;
1895
+ }
1896
+ let i = n.state.schema.marks.hyperlink, a = n.state.tr.removeMark(r.start, r.end, i);
1897
+ n.dispatch(a.scrollIntoView()), t.value = null, n.focus();
1898
+ }
1899
+ return {
1900
+ hyperlinkPopupData: t,
1901
+ handleHyperlinkSubmit: n,
1902
+ handleHyperlinkRemove: r,
1903
+ handleHyperlinkPopupNavigate: i,
1904
+ handleHyperlinkPopupEdit: a,
1905
+ handleHyperlinkPopupRemove: o
1906
+ };
1907
+ }
1908
+ //#endregion
1909
+ //#region src/composables/useFormattingActions.ts
1910
+ function bi(e) {
1911
+ let t = () => e.activeView?.value ?? e.editorView.value;
1912
+ function n() {
1913
+ let e = t();
1914
+ e && ($e(e.state, e.dispatch, e), e.focus());
1915
+ }
1916
+ function r(n) {
1917
+ let r = t();
1918
+ if (!r) return;
1919
+ let i = e.getDocument(), a = i?.package?.styles;
1920
+ if (a) {
1921
+ let e = Pt(a).resolveParagraphStyle(n);
1922
+ kt(n, {
1923
+ paragraphFormatting: e.paragraphFormatting,
1924
+ runFormatting: e.runFormatting,
1925
+ numbering: i?.package?.numbering ? Ft(i.package.numbering) : null
1926
+ })(r.state, (e) => r.dispatch(e));
1927
+ } else kt(n)(r.state, (e) => r.dispatch(e));
1928
+ r.focus();
1929
+ }
1930
+ function i() {
1931
+ let t = e.editorView.value;
1932
+ t && (It(t.state, (e) => t.dispatch(e), t), t.focus());
1933
+ }
1934
+ function a() {
1935
+ let t = e.editorView.value;
1936
+ t && (Rt(t.state, (e) => t.dispatch(e), t), t.focus());
1937
+ }
1938
+ function o() {
1939
+ let t = e.editorView.value;
1940
+ t && (Lt(t.state, (e) => t.dispatch(e), t), t.focus());
1941
+ }
1942
+ function s(e) {
1943
+ let n = t();
1944
+ if (!n) return;
1945
+ let { from: r } = n.state.selection, i = n.state.tr.insertText(e, r);
1946
+ n.dispatch(i.scrollIntoView()), n.focus();
1947
+ }
1948
+ function c(t) {
1949
+ let n = e.editorView.value;
1950
+ return n ? zt(n, t) : !1;
1951
+ }
1952
+ function l(t) {
1953
+ let n = e.editorView.value;
1954
+ if (!n) return !1;
1955
+ let r = e.getDocument();
1956
+ return Vt(n, t, {
1957
+ styleResolver: r?.package?.styles ? Pt(r.package.styles) : null,
1958
+ numbering: r?.package?.numbering ? Ft(r.package.numbering) : null
1959
+ });
1960
+ }
1961
+ function u(t) {
1962
+ let n = e.editorView.value;
1963
+ return n ? Bt(n, t) : !1;
1964
+ }
1965
+ return {
1966
+ handleClearFormatting: n,
1967
+ handleApplyStyle: r,
1968
+ handleInsertPageBreak: i,
1969
+ handleInsertSectionBreakNextPage: a,
1970
+ handleInsertSectionBreakContinuous: o,
1971
+ handleInsertSymbol: s,
1972
+ applyFormatting: c,
1973
+ setParagraphStyle: l,
1974
+ insertBreak: u
1975
+ };
1976
+ }
1977
+ //#endregion
1978
+ //#region src/composables/usePageSetupControls.ts
1979
+ function xi(e) {
1980
+ function t(t) {
1981
+ let n = e.getDocument();
1982
+ if (!n?.package?.document) return;
1983
+ let r = n.package.document.finalSectionProperties ?? {};
1984
+ n.package.document.finalSectionProperties = {
1985
+ ...r,
1986
+ ...t
1987
+ }, e.stateTick.value++, e.reLayout(), e.emit("change", n);
1988
+ }
1989
+ function n(n, r) {
1990
+ e.readOnly.value || t({ [n]: r });
1991
+ }
1992
+ function r(e) {
1993
+ n("marginLeft", e);
1994
+ }
1995
+ function i(e) {
1996
+ n("marginRight", e);
1997
+ }
1998
+ function a(e) {
1999
+ n("marginTop", e);
2000
+ }
2001
+ function o(e) {
2002
+ n("marginBottom", e);
2003
+ }
2004
+ function s(t) {
2005
+ let n = e.editorView.value;
2006
+ n && Mt(t)(n.state, n.dispatch);
2007
+ }
2008
+ function c(t) {
2009
+ let n = e.editorView.value;
2010
+ n && Nt(t)(n.state, n.dispatch);
2011
+ }
2012
+ function l(t) {
2013
+ let n = e.editorView.value;
2014
+ n && (t < 0 ? jt(-t, !0)(n.state, n.dispatch) : jt(t, !1)(n.state, n.dispatch));
2015
+ }
2016
+ function u(t) {
2017
+ let n = e.editorView.value;
2018
+ n && At(t)(n.state, n.dispatch);
2019
+ }
2020
+ return {
2021
+ handlePageSetupApply: t,
2022
+ handleLeftMarginChange: r,
2023
+ handleRightMarginChange: i,
2024
+ handleTopMarginChange: a,
2025
+ handleBottomMarginChange: o,
2026
+ handleIndentLeftChange: s,
2027
+ handleIndentRightChange: c,
2028
+ handleFirstLineIndentChange: l,
2029
+ handleTabStopRemove: u
2030
+ };
2031
+ }
2032
+ //#endregion
2033
+ //#region src/composables/useWatermarkControls.ts
2034
+ function Si(e) {
2035
+ let t = R(!1), n = E(() => {
2036
+ e.stateTick.value;
2037
+ let t = e.editorView.value;
2038
+ return t ? wt(t.state) ?? void 0 : void 0;
2039
+ });
2040
+ function r(t) {
2041
+ if (e.readOnly.value) return;
2042
+ let n = e.editorView.value;
2043
+ n && (Ot(t)(n.state, n.dispatch), e.stateTick.value++, n.focus());
2044
+ }
2045
+ return {
2046
+ showWatermark: t,
2047
+ currentWatermark: n,
2048
+ handleWatermarkApply: r
2049
+ };
2050
+ }
2051
+ //#endregion
2052
+ //#region src/composables/useOutlineSidebar.ts
2053
+ function Ci(e) {
2054
+ function t() {
2055
+ if (!e.showOutline.value) {
2056
+ let t = e.editorView.value;
2057
+ t && (e.outlineHeadings.value = Ht(t.state.doc));
2058
+ }
2059
+ e.showOutline.value = !e.showOutline.value;
2060
+ }
2061
+ function n(t) {
2062
+ let n = e.editorView.value;
2063
+ if (!n) return;
2064
+ let r = n.state.doc.resolve(Math.min(t + 1, n.state.doc.content.size)), i = _e.near(r);
2065
+ n.dispatch(n.state.tr.setSelection(i)), e.scrollToVisiblePosition(t), n.focus();
2066
+ }
2067
+ function r() {
2068
+ e.showSidebar.value || e.extractCommentsAndChanges(), e.showSidebar.value = !e.showSidebar.value;
2069
+ }
2070
+ function i(t) {
2071
+ let n = t.target;
2072
+ n && (n.closest(".paged-editor__pages") || n.closest(".unified-sidebar") || n.closest(".docx-comment-margin-markers") || (e.activeSidebarItem.value = null));
2073
+ }
2074
+ return {
2075
+ handleToggleOutline: t,
2076
+ handleOutlineNavigate: n,
2077
+ handleToggleSidebar: r,
2078
+ handleEditorScrollMouseDown: i
2079
+ };
2080
+ }
2081
+ //#endregion
2082
+ //#region src/composables/useKeyboardShortcuts.ts
2083
+ function wi(e) {
2084
+ function t(t) {
2085
+ if (t.key === "F1") {
2086
+ t.preventDefault(), e.showKeyboardShortcuts.value = !0;
2087
+ return;
2088
+ }
2089
+ if (e.handleZoomKeyDown(t), t.ctrlKey || t.metaKey) {
2090
+ if (t.key === "o") {
2091
+ if (!e.showFileOpen?.() || !e.onOpenDocument) return;
2092
+ t.preventDefault(), e.onOpenDocument();
2093
+ return;
2094
+ }
2095
+ e.disableFindReplaceShortcuts?.() && (t.key === "f" || t.key === "h") || (t.key === "f" || t.key === "h" ? (t.preventDefault(), e.showFindReplace.value = !0) : t.key === "k" ? (t.preventDefault(), e.showHyperlink.value = !0) : t.key === "/" && (t.preventDefault(), e.showKeyboardShortcuts.value = !e.showKeyboardShortcuts.value));
2096
+ }
2097
+ }
2098
+ return I(() => window.addEventListener("keydown", t)), F(() => window.removeEventListener("keydown", t)), { handleKeyDown: t };
2099
+ }
2100
+ //#endregion
2101
+ //#region src/composables/useCommentManagement.ts
2102
+ function Ti(e) {
2103
+ let t = () => U(e.author) ?? "User";
2104
+ function n(t) {
2105
+ e.comments.value = t, e.commentCallbacks?.onCommentsChange?.(t);
2106
+ }
2107
+ function r() {
2108
+ Yt(e.commentIdAllocator, e.getDocument()?.package?.document?.comments, e.editorView.value);
2109
+ }
2110
+ function i(t, n, i) {
2111
+ return r(), Kt(e.commentIdAllocator, t, n, i);
2112
+ }
2113
+ function a(t) {
2114
+ let i = e.getDocument(), a = e.editorView.value;
2115
+ if (!i?.package?.document || !a) return null;
2116
+ i.package.document.comments || (i.package.document.comments = []), r();
2117
+ let o = Wt(a, t, e.commentIdAllocator);
2118
+ return o ? (i.package.document.comments.push(o), n([...i.package.document.comments]), e.showSidebar.value = !0, e.emit("change", i), e.contentChangeSubscribers.forEach((e) => e(i)), o.id) : null;
2119
+ }
2120
+ function o(t, r, a) {
2121
+ let o = e.getDocument();
2122
+ if (!o?.package?.document?.comments || !o.package.document.comments.some((e) => e.id === t)) return null;
2123
+ let s = i(r, a, t);
2124
+ return o.package.document.comments.push(s), n([...o.package.document.comments]), e.emit("change", o), e.contentChangeSubscribers.forEach((e) => e(o)), s.id;
2125
+ }
2126
+ function s(t) {
2127
+ let r = e.getDocument();
2128
+ if (!r?.package?.document?.comments) return;
2129
+ let i = r.package.document.comments.find((e) => e.id === t);
2130
+ i && (i.done = !0, n([...r.package.document.comments]), e.emit("change", r), e.contentChangeSubscribers.forEach((e) => e(r)));
2131
+ }
2132
+ function c(t) {
2133
+ let n = e.editorView.value;
2134
+ if (!n) return !1;
2135
+ r();
2136
+ let i = Gt(n, t, e.commentIdAllocator);
2137
+ return i && (e.extractCommentsAndChanges(), e.showSidebar.value = !0), i;
2138
+ }
2139
+ function l(n, r) {
2140
+ let i = e.getDocument(), a = i?.package?.document?.comments?.find((e) => e.id === n), s = o(n, r, t());
2141
+ if (s == null || !a) return;
2142
+ let c = i?.package?.document?.comments?.find((e) => e.id === s);
2143
+ c && e.commentCallbacks?.onCommentReply?.(c, a);
2144
+ }
2145
+ function u(t) {
2146
+ let n = e.getDocument()?.package?.document?.comments?.find((e) => e.id === t);
2147
+ s(t), n && e.commentCallbacks?.onCommentResolve?.({ ...n });
2148
+ }
2149
+ function d(t) {
2150
+ let r = e.getDocument();
2151
+ if (!r?.package?.document?.comments) return;
2152
+ let i = r.package.document.comments.find((e) => e.id === t);
2153
+ i && (i.done = !1), n([...r.package.document.comments]), e.emit("change", r);
2154
+ }
2155
+ function f(t) {
2156
+ let r = e.getDocument();
2157
+ if (!r?.package?.document?.comments) return;
2158
+ let i = r.package.document.comments.find((e) => e.id === t);
2159
+ r.package.document.comments = r.package.document.comments.filter((e) => e.id !== t && e.parentId !== t), n([...r.package.document.comments]), i && e.commentCallbacks?.onCommentDelete?.(i), e.emit("change", r);
2160
+ }
2161
+ function p(t, n) {
2162
+ let r = e.editorView.value;
2163
+ r && (St(t, n)(r.state, r.dispatch), e.extractCommentsAndChanges(), r.focus());
2164
+ }
2165
+ function m(t, n) {
2166
+ let r = e.editorView.value;
2167
+ r && (Et(t, n)(r.state, r.dispatch), e.extractCommentsAndChanges(), r.focus());
2168
+ }
2169
+ function h(t) {
2170
+ let n = e.getHfPmViews?.(), r = null;
2171
+ if (n) for (let e of n.values()) {
2172
+ let { entries: n } = Ut(e.state);
2173
+ if (n.some((e) => e.revisionId === t || e.insertionRevisionId === t || e.coalescedRevisionIds?.includes(t))) {
2174
+ r = e;
2175
+ break;
2176
+ }
2177
+ }
2178
+ let i = r || e.editorView.value;
2179
+ i && (Ct(t)(i.state, i.dispatch), e.extractCommentsAndChanges(), i.focus());
2180
+ }
2181
+ function g(t) {
2182
+ let n = e.getHfPmViews?.(), r = null;
2183
+ if (n) for (let e of n.values()) {
2184
+ let { entries: n } = Ut(e.state);
2185
+ if (n.some((e) => e.revisionId === t || e.insertionRevisionId === t || e.coalescedRevisionIds?.includes(t))) {
2186
+ r = e;
2187
+ break;
2188
+ }
2189
+ }
2190
+ let i = r || e.editorView.value;
2191
+ i && (Dt(t)(i.state, i.dispatch), e.extractCommentsAndChanges(), i.focus());
2192
+ }
2193
+ function _(r, a) {
2194
+ let o = e.getDocument();
2195
+ if (!o?.package?.document) return;
2196
+ o.package.document.comments || (o.package.document.comments = []);
2197
+ let s = i(a, t(), r);
2198
+ o.package.document.comments.push(s), n([...o.package.document.comments]), e.emit("change", o);
2199
+ }
2200
+ return {
2201
+ addComment: a,
2202
+ replyToComment: o,
2203
+ resolveComment: s,
2204
+ proposeChange: c,
2205
+ handleCommentReply: l,
2206
+ handleCommentResolve: u,
2207
+ handleCommentUnresolve: d,
2208
+ handleCommentDelete: f,
2209
+ handleAcceptChange: p,
2210
+ handleRejectChange: m,
2211
+ handleAcceptChangeById: h,
2212
+ handleRejectChangeById: g,
2213
+ handleTrackedChangeReply: _
2214
+ };
2215
+ }
2216
+ //#endregion
2217
+ //#region src/composables/useHostCallbacks.ts
2218
+ function Ei(e, t) {
2219
+ return K(t, (t) => t && e.onEditorViewReady?.(t), { immediate: !0 }), { commentCallbacks: {
2220
+ onCommentAdd: (t) => e.onCommentAdd?.(t),
2221
+ onCommentResolve: (t) => e.onCommentResolve?.(t),
2222
+ onCommentDelete: (t) => e.onCommentDelete?.(t),
2223
+ onCommentReply: (t, n) => e.onCommentReply?.(t, n),
2224
+ onCommentsChange: (t) => e.onCommentsChange?.(t)
2225
+ } };
2226
+ }
2227
+ //#endregion
2228
+ //#region src/composables/useCommentLifecycle.ts
2229
+ function Di(e) {
2230
+ let t = R(null), n = R(null), r = R(null), i = R(!1);
2231
+ function a() {
2232
+ let t = e.getDocument(), n = e.editorView.value;
2233
+ if (!t || !n) return;
2234
+ e.comments.value = [...t.package?.document?.comments ?? []];
2235
+ let r = [...Ut(n.state).entries];
2236
+ if (e.getHfPmViews) {
2237
+ let t = e.getHfPmViews();
2238
+ for (let [e, n] of t.entries()) {
2239
+ let t = Ut(n.state);
2240
+ for (let n of t.entries) n.hfRid = e, r.push(n);
2241
+ }
2242
+ }
2243
+ e.trackedChanges.value = r, !i.value && (e.comments.value.length > 0 || e.trackedChanges.value.length > 0) && (e.showSidebar.value = !0, i.value = !0);
2244
+ }
2245
+ function o() {
2246
+ e.stateTick.value;
2247
+ let n = e.editorView.value;
2248
+ if (!n || e.isAddingComment.value || e.readOnly.value) {
2249
+ t.value = null;
2250
+ return;
2251
+ }
2252
+ let { from: r, to: i } = n.state.selection;
2253
+ if (r === i) {
2254
+ t.value = null;
2255
+ return;
2256
+ }
2257
+ let a = e.pagesRef.value, o = e.pagesViewportRef.value;
2258
+ if (!a || !o) {
2259
+ t.value = null;
2260
+ return;
2261
+ }
2262
+ let s = o.getBoundingClientRect(), c = sn(a, r);
2263
+ if (!c) {
2264
+ t.value = null;
2265
+ return;
2266
+ }
2267
+ let l = c.getBoundingClientRect().top - s.top + o.scrollTop, u = a.querySelector(".layout-page");
2268
+ if (!u) {
2269
+ t.value = null;
2270
+ return;
2271
+ }
2272
+ t.value = {
2273
+ top: l,
2274
+ left: u.getBoundingClientRect().right - s.left + 8
2275
+ };
2276
+ }
2277
+ function s() {
2278
+ e.stateTick.value;
2279
+ let t = e.editorView.value;
2280
+ if (!t) return;
2281
+ let n = t.state.selection.$from, r = [
2282
+ ...t.state.storedMarks ?? [],
2283
+ ...n.nodeAfter?.marks ?? [],
2284
+ ...n.nodeBefore?.marks ?? [],
2285
+ ...n.marks()
2286
+ ], i = null;
2287
+ for (let t of r) {
2288
+ if (t.type.name === "comment" && t.attrs.commentId != null) {
2289
+ let n = t.attrs.commentId;
2290
+ if (n === qt || e.resolvedCommentIds.value.has(n)) continue;
2291
+ i = `comment-${n}`;
2292
+ break;
2293
+ }
2294
+ if ((t.type.name === "insertion" || t.type.name === "deletion") && t.attrs.revisionId != null) {
2295
+ let n = String(t.attrs.revisionId), r = e.trackedChanges.value.findIndex((e) => String(e.revisionId) === n || String(e.insertionRevisionId ?? "") === n);
2296
+ if (r >= 0) {
2297
+ i = `tc-${e.trackedChanges.value[r].revisionId}-${r}`;
2298
+ break;
2299
+ }
2300
+ }
2301
+ }
2302
+ i && (e.showSidebar.value = !0), e.activeSidebarItem.value = i;
2303
+ }
2304
+ function c() {
2305
+ let i = e.editorView.value;
2306
+ if (!i) return;
2307
+ let { from: a, to: o } = i.state.selection;
2308
+ if (a === o) return;
2309
+ n.value = {
2310
+ from: a,
2311
+ to: o
2312
+ }, r.value = t.value?.top ?? null;
2313
+ let s = i.state.schema.marks.comment;
2314
+ if (s) {
2315
+ let e = i.state.tr.addMark(a, o, s.create({ commentId: qt }));
2316
+ i.dispatch(e);
2317
+ }
2318
+ e.showSidebar.value = !0, e.isAddingComment.value = !0, t.value = null;
2319
+ }
2320
+ function l(t) {
2321
+ let i = e.getDocument(), a = e.editorView.value;
2322
+ if (!i?.package) return;
2323
+ i.package.document.comments || (i.package.document.comments = []), Yt(e.commentIdAllocator, i.package.document.comments, a);
2324
+ let o = Kt(e.commentIdAllocator, t, U(e.author) ?? "User");
2325
+ i.package.document.comments.push(o), e.comments.value = [...i.package.document.comments], e.commentCallbacks?.onCommentsChange?.(e.comments.value), e.commentCallbacks?.onCommentAdd?.(o);
2326
+ let s = n.value;
2327
+ if (a && s && s.from !== s.to) {
2328
+ let e = a.state.schema.marks.comment;
2329
+ if (e) {
2330
+ let t = a.state.tr.removeMark(s.from, s.to, e);
2331
+ t = t.addMark(s.from, s.to, e.create({ commentId: o.id })), a.dispatch(t);
2332
+ }
2333
+ }
2334
+ n.value = null, r.value = null, e.isAddingComment.value = !1, e.emit("change", i);
2335
+ }
2336
+ function u() {
2337
+ let t = e.editorView.value, i = n.value;
2338
+ if (t && i && i.from !== i.to) {
2339
+ let e = t.state.schema.marks.comment;
2340
+ e && t.dispatch(t.state.tr.removeMark(i.from, i.to, e));
2341
+ }
2342
+ n.value = null, r.value = null, e.isAddingComment.value = !1;
2343
+ }
2344
+ function d(t) {
2345
+ e.showSidebar.value = !0;
2346
+ }
2347
+ K([
2348
+ e.stateTick,
2349
+ e.isAddingComment,
2350
+ e.zoom
2351
+ ], () => o()), K(e.stateTick, () => s()), K(e.stateTick, () => a());
2352
+ let f = null;
2353
+ return I(() => {
2354
+ f = new ResizeObserver(() => o()), e.pagesRef.value && f.observe(e.pagesRef.value), window.addEventListener("resize", o);
2355
+ }), F(() => {
2356
+ f?.disconnect(), window.removeEventListener("resize", o);
2357
+ }), {
2358
+ floatingCommentBtn: t,
2359
+ pendingCommentRange: n,
2360
+ addCommentYPosition: r,
2361
+ sidebarAutoOpenedRef: i,
2362
+ extractCommentsAndChanges: a,
2363
+ handleAddComment: l,
2364
+ handleCancelAddComment: u,
2365
+ handleStartAddComment: c,
2366
+ handleMarkerClick: d,
2367
+ recomputeFloatingCommentBtn: o,
2368
+ recomputeActiveSidebarItem: s
2369
+ };
2370
+ }
2371
+ //#endregion
2372
+ //#region src/composables/useImageActions.ts
2373
+ function Oi(e) {
2374
+ let t = fe(null), n = R(!1), r = E(() => {
2375
+ e.stateTick.value;
2376
+ let n = e.editorView.value, r = t.value;
2377
+ if (!n || !r) return null;
2378
+ let i = n.state.doc.nodeAt(r.pmPos);
2379
+ return !i || i.type.name !== "image" ? null : {
2380
+ wrapType: i.attrs.wrapType ?? "inline",
2381
+ displayMode: i.attrs.displayMode ?? "inline",
2382
+ cssFloat: i.attrs.cssFloat ?? null
2383
+ };
2384
+ });
2385
+ function i(n) {
2386
+ let r = e.editorView.value, i = t.value;
2387
+ if (!r || !i) return;
2388
+ let a = gt(n);
2389
+ if (!a) return;
2390
+ let o = r.state.doc.nodeAt(i.pmPos), s = e.getCommands(), c = o?.attrs.wrapType === "inline" && a !== "inline" ? { initialPositionEmu: dt(i.element, e.zoom.value) } : void 0, l = s.setImageWrapType?.(i.pmPos, a, c);
2391
+ l && (l(r.state, (e) => r.dispatch(e), r), r.focus());
2392
+ }
2393
+ function a(n) {
2394
+ let r = e.editorView.value, i = t.value;
2395
+ if (!r || !i) return;
2396
+ let a = r.state.doc.nodeAt(i.pmPos);
2397
+ if (!a || a.type.name !== "image") return;
2398
+ let o = a.attrs.transform || "", s = o.match(/rotate\((-?\d+(?:\.\d+)?)deg\)/), c = s ? parseFloat(s[1]) : 0, l = /scaleX\(-1\)/.test(o), u = /scaleY\(-1\)/.test(o);
2399
+ n === "rotateCW" ? c = (c + 90) % 360 : n === "rotateCCW" ? c = (c - 90 + 360) % 360 : n === "flipH" ? l = !l : n === "flipV" && (u = !u);
2400
+ let d = [];
2401
+ c !== 0 && d.push(`rotate(${c}deg)`), l && d.push("scaleX(-1)"), u && d.push("scaleY(-1)");
2402
+ let f = d.length > 0 ? d.join(" ") : null, p = r.state.tr.setNodeMarkup(i.pmPos, void 0, {
2403
+ ...a.attrs,
2404
+ transform: f
2405
+ });
2406
+ r.dispatch(p.scrollIntoView()), r.focus();
2407
+ }
2408
+ return {
2409
+ selectedImage: t,
2410
+ imageInteracting: n,
2411
+ imageToolbarContext: r,
2412
+ handleToolbarImageWrap: i,
2413
+ handleImageTransform: a
2414
+ };
2415
+ }
2416
+ //#endregion
2417
+ //#region src/utils/imageClipboard.ts
2418
+ function ki(e, t, n) {
2419
+ let r = xt(e.state), i = e.state.schema.marks.insertion;
2420
+ if (!r || !i) return;
2421
+ let a = t.selection.from, o = a - n.nodeSize;
2422
+ o < 0 || t.addMark(o, a, i.create({
2423
+ revisionId: r.revisionId,
2424
+ author: r.author,
2425
+ date: r.date
2426
+ }));
2427
+ }
2428
+ function Ai(e, t) {
2429
+ return e.getBlob(t);
2430
+ }
2431
+ function ji(e, t) {
2432
+ let n = e.state.doc.nodeAt(t);
2433
+ if (!n || n.type.name !== "image") return;
2434
+ let r = `<img src="${n.attrs.src}" data-pm-image="true" data-width="${n.attrs.width ?? ""}" data-height="${n.attrs.height ?? ""}" data-wrap-type="${n.attrs.wrapType ?? ""}" data-display-mode="${n.attrs.displayMode ?? ""}" data-rid="${n.attrs.rId ?? ""}" />`, i = new ClipboardItem({
2435
+ "text/html": new Blob([r], { type: "text/html" }),
2436
+ "text/plain": new Blob(["[image]"], { type: "text/plain" })
2437
+ });
2438
+ navigator.clipboard.write([i]).catch(() => {
2439
+ let e = document.createElement("textarea");
2440
+ e.value = r, document.body.appendChild(e), e.select(), document.execCommand("copy"), document.body.removeChild(e);
2441
+ });
2442
+ }
2443
+ function Mi(e) {
2444
+ return new Promise((t, n) => {
2445
+ let r = new FileReader();
2446
+ r.onload = () => t(r.result), r.onerror = n, r.readAsDataURL(e);
2447
+ });
2448
+ }
2449
+ function Ni(e) {
2450
+ return new Promise((t) => {
2451
+ let n = new Image();
2452
+ n.onload = () => t({
2453
+ width: n.naturalWidth,
2454
+ height: n.naturalHeight
2455
+ }), n.onerror = () => t({
2456
+ width: 200,
2457
+ height: 200
2458
+ }), n.src = e;
2459
+ });
2460
+ }
2461
+ function Pi(e) {
2462
+ return e.includes("data-pm-image=\"true\"");
2463
+ }
2464
+ async function Fi(e) {
2465
+ try {
2466
+ let t = await navigator.clipboard.read(), n = "", r = "";
2467
+ for (let e of t) !n && e.types.includes("text/html") && (n = await (await Ai(e, "text/html")).text()), !r && e.types.includes("text/plain") && (r = await (await Ai(e, "text/plain")).text());
2468
+ if (n.trim().length > 0 && !Pi(n)) {
2469
+ let t = new DataTransfer();
2470
+ t.items.add(n, "text/html"), r && t.items.add(r, "text/plain");
2471
+ let i = new ClipboardEvent("paste", {
2472
+ clipboardData: t,
2473
+ bubbles: !0,
2474
+ cancelable: !0
2475
+ });
2476
+ e.dom.dispatchEvent(i);
2477
+ return;
2478
+ }
2479
+ for (let n of t) {
2480
+ let t = n.types.find((e) => e.startsWith("image/"));
2481
+ if (t) {
2482
+ let r = await Mi(await Ai(n, t)), i = await Ni(r), a = i.width, o = i.height;
2483
+ a > 612 && (o = Math.round(612 / a * o), a = 612);
2484
+ let s = e.state.schema.nodes.image.create({
2485
+ src: r,
2486
+ width: a,
2487
+ height: o,
2488
+ rId: `rId_img_${Date.now()}`,
2489
+ wrapType: "inline",
2490
+ displayMode: "inline"
2491
+ }), c = e.state.tr.replaceSelectionWith(s);
2492
+ ki(e, c, s), e.dispatch(c);
2493
+ return;
2494
+ }
2495
+ if (n.types.includes("text/html")) {
2496
+ let t = await (await Ai(n, "text/html")).text(), r = t.match(/<img[^>]+src="([^"]+)"[^>]*>/i);
2497
+ if (r && r[1]) {
2498
+ let n = r[1], i = t.match(/data-width="(\d+)"/), a = t.match(/data-height="(\d+)"/), o = i ? Number(i[1]) : 200, s = a ? Number(a[1]) : 200, c = e.state.schema.nodes.image.create({
2499
+ src: n,
2500
+ width: o || 200,
2501
+ height: s || 200,
2502
+ rId: `rId_img_${Date.now()}`,
2503
+ wrapType: "inline",
2504
+ displayMode: "inline"
2505
+ }), l = e.state.tr.replaceSelectionWith(c);
2506
+ ki(e, l, c), e.dispatch(l);
2507
+ return;
2508
+ }
2509
+ }
2510
+ if (n.types.includes("text/plain")) {
2511
+ let t = await (await Ai(n, "text/plain")).text();
2512
+ if (t && t !== "[image]") {
2513
+ let { from: n } = e.state.selection;
2514
+ e.dispatch(e.state.tr.insertText(t, n));
2515
+ }
2516
+ return;
2517
+ }
2518
+ }
2519
+ } catch {
2520
+ let t = await navigator.clipboard?.readText();
2521
+ if (t) {
2522
+ let { from: n } = e.state.selection;
2523
+ e.dispatch(e.state.tr.insertText(t, n));
2524
+ }
2525
+ }
2526
+ }
2527
+ function Ii(e, t) {
2528
+ let n = e.state.doc.nodeAt(t);
2529
+ if (!n || n.type.name !== "image") return;
2530
+ let r = document.createElement("input");
2531
+ r.type = "file", r.accept = "image/*", r.onchange = async () => {
2532
+ let i = r.files?.[0];
2533
+ if (!i) return;
2534
+ let a = await Mi(i), o = await Ni(a), s = n.attrs.width || o.width, c = n.attrs.height || o.height, l = Math.min(s / o.width, c / o.height), u = Math.round(o.width * l), d = Math.round(o.height * l);
2535
+ try {
2536
+ let r = e.state.tr.setNodeMarkup(t, void 0, {
2537
+ ...n.attrs,
2538
+ src: a,
2539
+ width: u,
2540
+ height: d,
2541
+ rId: `rId_img_${Date.now()}`
2542
+ });
2543
+ e.dispatch(r);
2544
+ } catch {}
2545
+ }, r.click();
2546
+ }
2547
+ //#endregion
2548
+ //#region src/composables/useContextMenus.ts
2549
+ function Li(e) {
2550
+ let { t } = d(), n = R({
2551
+ isOpen: !1,
2552
+ position: {
2553
+ x: 0,
2554
+ y: 0
2555
+ },
2556
+ hasSelection: !1,
2557
+ inTable: !1,
2558
+ onImage: !1,
2559
+ canMergeCells: !1,
2560
+ canSplitCell: !1
2561
+ }), r = R(null), i = E(() => [
2562
+ {
2563
+ action: "cut",
2564
+ label: t("contextMenu.cut"),
2565
+ shortcut: t("contextMenu.cutShortcut")
2566
+ },
2567
+ {
2568
+ action: "copy",
2569
+ label: t("contextMenu.copy"),
2570
+ shortcut: t("contextMenu.copyShortcut")
2571
+ },
2572
+ {
2573
+ action: "paste",
2574
+ label: t("contextMenu.paste"),
2575
+ shortcut: t("contextMenu.pasteShortcut"),
2576
+ dividerAfter: !0
2577
+ },
2578
+ {
2579
+ action: "delete",
2580
+ label: t("contextMenu.delete"),
2581
+ shortcut: t("contextMenu.deleteShortcut")
2582
+ }
2583
+ ]);
2584
+ function a(t) {
2585
+ let i = e.editorView.value;
2586
+ if (!i) return;
2587
+ let a = t.target, o = pt(a);
2588
+ if (o) {
2589
+ let a = Number(o.dataset.pmStart);
2590
+ if (!isNaN(a)) {
2591
+ try {
2592
+ let e = ge.create(i.state.doc, a);
2593
+ i.dispatch(i.state.tr.setSelection(e));
2594
+ } catch {}
2595
+ e.selectedImage.value = {
2596
+ element: o,
2597
+ pmPos: a,
2598
+ width: o.offsetWidth,
2599
+ height: o.offsetHeight
2600
+ }, e.clearOverlay();
2601
+ let s = i.state.doc.nodeAt(a);
2602
+ if (s && s.type.name === "image") {
2603
+ let i = s.attrs.wrapType ?? "inline", c = s.attrs.cssFloat;
2604
+ r.value = {
2605
+ open: !0,
2606
+ position: {
2607
+ x: t.clientX,
2608
+ y: t.clientY
2609
+ },
2610
+ pmPos: a,
2611
+ currentWrapType: i,
2612
+ currentCssFloat: c ?? null,
2613
+ inlinePositionEmu: i === "inline" ? dt(o, e.zoom.value) : void 0
2614
+ }, n.value.isOpen = !1;
2615
+ return;
2616
+ }
2617
+ }
2618
+ }
2619
+ {
2620
+ let { from: n, to: r } = i.state.selection, a = e.resolvePos(t.clientX, t.clientY);
2621
+ if (a !== null && (a < n || a > r)) try {
2622
+ e.setPmSelection(a);
2623
+ } catch {}
2624
+ }
2625
+ let s = tt(i.state), { empty: c } = i.state.selection;
2626
+ r.value &&= null, n.value = {
2627
+ isOpen: !0,
2628
+ position: {
2629
+ x: t.clientX,
2630
+ y: t.clientY
2631
+ },
2632
+ hasSelection: !c,
2633
+ inTable: s.isInTable,
2634
+ onImage: !!o,
2635
+ canMergeCells: !!s.hasMultiCellSelection,
2636
+ canSplitCell: !!s.canSplitCell
2637
+ };
2638
+ }
2639
+ function o(t) {
2640
+ let i = e.editorView.value, a = e.selectedImage.value;
2641
+ if (!i || !a) return;
2642
+ let o = i.state.doc.nodeAt(a.pmPos);
2643
+ if (!o || o.type.name !== "image") return;
2644
+ let s = o.attrs.wrapType ?? "inline", c = o.attrs.cssFloat;
2645
+ r.value = {
2646
+ open: !0,
2647
+ position: {
2648
+ x: t.clientX,
2649
+ y: t.clientY
2650
+ },
2651
+ pmPos: a.pmPos,
2652
+ currentWrapType: s,
2653
+ currentCssFloat: c ?? null,
2654
+ inlinePositionEmu: s === "inline" ? dt(a.element, e.zoom.value) : void 0
2655
+ }, n.value.isOpen = !1;
2656
+ }
2657
+ function s(t) {
2658
+ let n = e.editorView.value, i = r.value;
2659
+ if (!n || !i) return;
2660
+ let a = e.getCommands(), o = i.inlinePositionEmu && t !== "inline" ? { initialPositionEmu: i.inlinePositionEmu } : void 0, s = a.setImageWrapType?.(i.pmPos, t, o);
2661
+ s && (s(n.state, (e) => n.dispatch(e), n), n.focus());
2662
+ }
2663
+ function c(t) {
2664
+ let n = e.editorView.value;
2665
+ if (!n) return;
2666
+ let r = e.getCommands();
2667
+ switch (t) {
2668
+ case "cut":
2669
+ if (e.selectedImage.value) {
2670
+ ji(n, e.selectedImage.value.pmPos);
2671
+ let t = e.selectedImage.value.pmPos, r = n.state.doc.nodeAt(t);
2672
+ r && (n.dispatch(n.state.tr.delete(t, t + r.nodeSize)), e.selectedImage.value = null);
2673
+ } else n.focus(), document.execCommand("cut");
2674
+ break;
2675
+ case "copy":
2676
+ e.selectedImage.value ? ji(n, e.selectedImage.value.pmPos) : (n.focus(), document.execCommand("copy"));
2677
+ break;
2678
+ case "paste":
2679
+ Fi(n);
2680
+ break;
2681
+ case "pasteAsPlainText":
2682
+ navigator.clipboard.readText().then((e) => {
2683
+ e && n.dispatch(n.state.tr.insertText(e).scrollIntoView());
2684
+ }).catch(() => {});
2685
+ break;
2686
+ case "delete": {
2687
+ let { from: e, to: t } = n.state.selection;
2688
+ e !== t && n.dispatch(n.state.tr.delete(e, t));
2689
+ break;
2690
+ }
2691
+ case "selectAll": {
2692
+ let e = _e.create(n.state.doc, 0, n.state.doc.content.size);
2693
+ n.dispatch(n.state.tr.setSelection(e));
2694
+ break;
2695
+ }
2696
+ case "imageProperties":
2697
+ e.selectedImage.value && (e.showImageProperties.value = !0);
2698
+ break;
2699
+ case "replaceImage":
2700
+ e.selectedImage.value && Ii(n, e.selectedImage.value.pmPos);
2701
+ break;
2702
+ case "deleteImage":
2703
+ if (e.selectedImage.value) {
2704
+ let t = e.selectedImage.value.pmPos, r = n.state.doc.nodeAt(t);
2705
+ r && (n.dispatch(n.state.tr.delete(t, t + r.nodeSize)), e.selectedImage.value = null);
2706
+ }
2707
+ break;
2708
+ case "addRowAbove":
2709
+ case "addRowBelow":
2710
+ case "deleteRow":
2711
+ case "addColumnLeft":
2712
+ case "addColumnRight":
2713
+ case "deleteColumn":
2714
+ case "mergeCells":
2715
+ case "splitCell":
2716
+ case "selectTable":
2717
+ case "deleteTable": {
2718
+ let e = r[t];
2719
+ e && e()(n.state, (e) => n.dispatch(e), n);
2720
+ break;
2721
+ }
2722
+ }
2723
+ n.focus();
2724
+ }
2725
+ return {
2726
+ contextMenu: n,
2727
+ imageContextMenu: r,
2728
+ imageContextMenuTextActions: i,
2729
+ handleContextMenu: a,
2730
+ handleSelectedImageContextMenu: o,
2731
+ handleImageWrapSelect: s,
2732
+ handleContextMenuAction: c
2733
+ };
2734
+ }
2735
+ //#endregion
2736
+ //#region src/composables/usePagesPointer.ts
2737
+ var Ri = 500;
2738
+ function zi(e) {
2739
+ let t = R(null), n = null;
2740
+ function r() {
2741
+ n !== null && (clearTimeout(n), n = null);
2742
+ }
2743
+ let i = fe(null), a = 0, o = null, s = 0, c = !1, l = null, u = Qt(), d = ie({
2744
+ pagesContainer: e.pagesRef,
2745
+ onScrollExtendSelection: (e, t) => {
2746
+ if (!c || l === null) return;
2747
+ let n = m(e, t);
2748
+ n !== null && n !== l && g(l, n);
2749
+ }
2750
+ }), f = R({
2751
+ currentPage: 1,
2752
+ totalPages: 1,
2753
+ visible: !1
2754
+ }), p = null;
2755
+ function m(t, n) {
2756
+ return fn(e.pagesRef.value, e.editorView.value, t, n);
2757
+ }
2758
+ function h() {
2759
+ let t = i.value;
2760
+ if (t?.headerFooter && e.getHfPmView) {
2761
+ let n = e.getHfPmView(t.headerFooter);
2762
+ if (n) return n;
2763
+ }
2764
+ return e.editorView.value;
2765
+ }
2766
+ function g(e, t) {
2767
+ let n = h();
2768
+ if (n) try {
2769
+ let r = n.state.doc.resolve(e), i = t === void 0 ? r : n.state.doc.resolve(t), a = _e.between(r, i);
2770
+ n.dispatch(n.state.tr.setSelection(a));
2771
+ } catch {}
2772
+ }
2773
+ function _(t) {
2774
+ dn(e.pagesRef.value, e.pagesViewportRef.value, t, e.layout.value);
2775
+ }
2776
+ function v(t) {
2777
+ pn(e.pagesRef.value, t, g, i.value?.position);
2778
+ }
2779
+ function y(t) {
2780
+ mn(e.pagesRef.value, t, g, i.value?.position);
2781
+ }
2782
+ function b(t) {
2783
+ let n = e.editorView.value;
2784
+ if (!n) return;
2785
+ let r = null;
2786
+ if (n.state.doc.descendants((e, n) => r === null ? (e.attrs?.bookmarks)?.some((e) => e.name === t) ? (r = n, !1) : !0 : !1), r !== null) {
2787
+ _(r);
2788
+ try {
2789
+ g(Math.min(r + 1, n.state.doc.content.size));
2790
+ } catch {
2791
+ g(r);
2792
+ }
2793
+ }
2794
+ }
2795
+ function ee(a) {
2796
+ if (e.readOnly.value || c) return;
2797
+ let o = e.pagesRef.value;
2798
+ if (!o) return;
2799
+ let s = e.pagesViewportRef.value;
2800
+ if (!s) return;
2801
+ let l = Zt({
2802
+ mouseX: a.clientX,
2803
+ mouseY: a.clientY,
2804
+ pagesContainer: o,
2805
+ target: a.target,
2806
+ hfEditMode: i.value?.position ?? null
2807
+ });
2808
+ if (!l) {
2809
+ n === null && (n = setTimeout(() => {
2810
+ t.value = null, n = null;
2811
+ }, Xt));
2812
+ return;
2813
+ }
2814
+ let u = e.zoom.value || 1, d = s.getBoundingClientRect();
2815
+ t.value = {
2816
+ type: l.type,
2817
+ x: (l.clientX - d.left) / u,
2818
+ y: (l.clientY - d.top) / u,
2819
+ cellPmPos: l.cellPmPos
2820
+ }, r();
2821
+ }
2822
+ function x(n) {
2823
+ n.preventDefault(), n.stopPropagation();
2824
+ let r = t.value, i = e.editorView.value;
2825
+ if (!r || !i) return;
2826
+ let a = i.state.tr.setSelection(_e.create(i.state.doc, r.cellPmPos + 1));
2827
+ i.dispatch(a);
2828
+ let o = e.getCommands(), s = r.type === "row" ? o.addRowBelow?.() : o.addColumnRight?.();
2829
+ s && (s(i.state, (e) => i.dispatch(e), i), t.value = null, i.focus());
2830
+ }
2831
+ function S(t) {
2832
+ let n = t.target?.closest("a[href]");
2833
+ if (!n) return;
2834
+ t.preventDefault();
2835
+ let r = n.getAttribute("href") || "";
2836
+ if (r.startsWith("#")) {
2837
+ let e = r.slice(1);
2838
+ e && b(e);
2839
+ return;
2840
+ }
2841
+ let i = h();
2842
+ if (i && i.state.selection.from !== i.state.selection.to) return;
2843
+ let a = e.pagesViewportRef.value;
2844
+ if (!a) return;
2845
+ let o = a.getBoundingClientRect(), s = n.getBoundingClientRect();
2846
+ e.hyperlinkPopupData.value = {
2847
+ href: r,
2848
+ displayText: n.textContent || "",
2849
+ tooltip: n.getAttribute("title") || void 0,
2850
+ position: {
2851
+ top: s.bottom - o.top + a.scrollTop + 4,
2852
+ left: s.left - o.left + a.scrollLeft
2853
+ }
2854
+ };
2855
+ }
2856
+ function C(t) {
2857
+ let n = t.target, r = n.closest(".layout-page-header"), a = n.closest(".layout-page-footer"), o = r ?? a;
2858
+ if (!o) return;
2859
+ let s = r ? "header" : "footer", c = e.getDocument();
2860
+ if (!c?.package) return;
2861
+ let l = c.package.document?.sections?.[0]?.properties ?? c.package.document?.finalSectionProperties ?? null, u = s === "header" ? l?.headerReferences : l?.footerReferences, d = s === "header" ? c.package.headers : c.package.footers, f = (u?.find((e) => e.type === "default") ?? u?.find((e) => e.type === "first") ?? null)?.rId ?? null, p = f ? d?.get(f) ?? null : null;
2862
+ if (!p) {
2863
+ if (!l) return;
2864
+ let t = "default", n = `rId_new_${s}_${t}`, r = {
2865
+ type: s,
2866
+ hdrFtrType: t,
2867
+ content: [{
2868
+ type: "paragraph",
2869
+ content: []
2870
+ }]
2871
+ }, i = s === "header" ? "headers" : "footers", a = s === "header" ? "headerReferences" : "footerReferences", o = new Map(c.package[i] ?? []);
2872
+ o.set(n, r);
2873
+ let u = c.package.relationships, d = /* @__PURE__ */ new Set();
2874
+ for (let e of u?.values() ?? []) e.target && d.add(e.target);
2875
+ let m = 1;
2876
+ for (; d.has(`${s}${m}.xml`);) m++;
2877
+ let h = s === "header" ? "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header" : "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", g = new Map(u);
2878
+ g.set(n, {
2879
+ id: n,
2880
+ type: h,
2881
+ target: `${s}${m}.xml`
2882
+ });
2883
+ let _ = {
2884
+ type: t,
2885
+ rId: n
2886
+ }, v = l && {
2887
+ ...l,
2888
+ [a]: [...l[a] ?? [], _]
2889
+ }, y = {
2890
+ ...c,
2891
+ package: {
2892
+ ...c.package,
2893
+ [i]: o,
2894
+ relationships: g,
2895
+ document: c.package.document ? {
2896
+ ...c.package.document,
2897
+ sections: c.package.document.sections?.map((e, t) => t === 0 ? {
2898
+ ...e,
2899
+ properties: v ?? e.properties
2900
+ } : e),
2901
+ finalSectionProperties: c.package.document.finalSectionProperties === l ? v : c.package.document.finalSectionProperties
2902
+ } : c.package.document
2903
+ }
2904
+ };
2905
+ f = n, p = r, e.setDocument?.(y), e.syncHfPMs?.(), e.reLayout(), e.emit("change", y);
2906
+ }
2907
+ let m = e.pagesViewportRef.value;
2908
+ if (!m) return;
2909
+ let h = o.getBoundingClientRect(), g = m.getBoundingClientRect(), _ = e.zoom.value || 1;
2910
+ i.value = {
2911
+ position: s,
2912
+ rId: f,
2913
+ headerFooter: p,
2914
+ targetRect: {
2915
+ top: (h.top - g.top + m.scrollTop) / _,
2916
+ left: (h.left - g.left + m.scrollLeft) / _,
2917
+ width: h.width / _,
2918
+ height: h.height / _
2919
+ }
2920
+ };
2921
+ }
2922
+ function te(t) {
2923
+ let n = e.getDocument(), r = i.value;
2924
+ if (!n?.package || !r) return;
2925
+ let a = r.position === "header" ? n.package.headers : n.package.footers;
2926
+ if (!a || !r.rId) return;
2927
+ let o = a.get(r.rId);
2928
+ o && (o.content = t, o.verbatimXml = void 0), e.syncHfPMs?.(), e.reLayout(), e.emit("change", n);
2929
+ }
2930
+ function ne() {
2931
+ let t = e.getDocument(), n = i.value;
2932
+ if (!t?.package || !n || !n.rId) {
2933
+ i.value = null;
2934
+ return;
2935
+ }
2936
+ let r = n.position === "header" ? "headers" : "footers", a = n.position === "header" ? "headerReferences" : "footerReferences", o = n.rId, s = new Map(t.package[r] ?? []);
2937
+ s.delete(o);
2938
+ let c = (e) => ({
2939
+ ...e,
2940
+ [a]: (e[a] ?? []).filter((e) => e.rId !== o)
2941
+ }), l = (e) => "sectionProperties" in e && e.sectionProperties ? {
2942
+ ...e,
2943
+ sectionProperties: c(e.sectionProperties)
2944
+ } : e, u = t.package.document, d = {
2945
+ ...t,
2946
+ package: {
2947
+ ...t.package,
2948
+ [r]: s,
2949
+ document: u && {
2950
+ ...u,
2951
+ content: u.content.map(l),
2952
+ sections: u.sections?.map((e) => ({
2953
+ ...e,
2954
+ properties: c(e.properties)
2955
+ })),
2956
+ finalSectionProperties: u.finalSectionProperties ? c(u.finalSectionProperties) : u.finalSectionProperties
2957
+ }
2958
+ }
2959
+ };
2960
+ i.value = null, e.setDocument?.(d), e.syncHfPMs?.(), e.reLayout(), e.emit("change", d);
2961
+ }
2962
+ function re(t) {
2963
+ if (t.button !== 0 || e.imageInteracting.value) return;
2964
+ let n = e.editorView.value;
2965
+ if (!n) return;
2966
+ let r = t.target;
2967
+ i.value && (r.closest(".layout-page-header") || r.closest(".layout-page-footer") || r.closest(".hf-editor") || (i.value = null, n.focus()));
2968
+ let d = h() ?? n;
2969
+ if (!e.readOnly.value && e.tableResize.tryStartResize(t, d)) return;
2970
+ let f = pt(r);
2971
+ if (f) {
2972
+ t.preventDefault(), t.stopPropagation();
2973
+ let n = Number(f.dataset.pmStart);
2974
+ if (!isNaN(n)) {
2975
+ try {
2976
+ d.dispatch(d.state.tr.setSelection(ge.create(d.state.doc, n)));
2977
+ } catch {}
2978
+ e.selectedImage.value = {
2979
+ element: f,
2980
+ pmPos: n,
2981
+ width: f.offsetWidth,
2982
+ height: f.offsetHeight
2983
+ }, e.clearOverlay();
2984
+ }
2985
+ d.focus();
2986
+ return;
2987
+ }
2988
+ e.selectedImage.value = null, t.preventDefault();
2989
+ let p = m(t.clientX, t.clientY);
2990
+ if (p === null) {
2991
+ d.focus();
2992
+ return;
2993
+ }
2994
+ let _ = Date.now();
2995
+ if (_ - a < Ri && o === p ? s++ : s = 1, a = _, o = p, s === 2) v(p);
2996
+ else if (s >= 3) y(p), s = 0;
2997
+ else {
2998
+ if (t.shiftKey) {
2999
+ let { from: e } = d.state.selection;
3000
+ g(e, p);
3001
+ } else g(p);
3002
+ l = p, c = !0, u.begin($t(d, p));
3003
+ }
3004
+ d.focus();
3005
+ }
3006
+ function w(e) {
3007
+ if (!c || l === null) return;
3008
+ let t = m(e.clientX, e.clientY);
3009
+ if (t !== null) {
3010
+ let n = h();
3011
+ if (n && u.update(n, t, e.clientX)) {
3012
+ d.updateMousePosition(e.clientX, e.clientY);
3013
+ return;
3014
+ }
3015
+ t !== l && g(l, t);
3016
+ }
3017
+ d.updateMousePosition(e.clientX, e.clientY);
3018
+ }
3019
+ function T() {
3020
+ c = !1, u.end(), d.stopAutoScroll();
3021
+ }
3022
+ function E() {
3023
+ let t = e.pagesViewportRef.value, n = e.layout.value;
3024
+ if (!t || !n || n.pages.length === 0) return;
3025
+ let r = t.scrollTop, i = n.pages.length, a = r + t.clientHeight / 2, o = 24, s = 1;
3026
+ for (let e = 0; e < n.pages.length; e++) {
3027
+ let t = n.pages[e].size.h, r = o + t;
3028
+ if (a < r) {
3029
+ s = e + 1;
3030
+ break;
3031
+ }
3032
+ o = r + 24, s = e + 2;
3033
+ }
3034
+ s = Math.min(s, i), f.value = {
3035
+ currentPage: s,
3036
+ totalPages: i,
3037
+ visible: !0
3038
+ }, p && clearTimeout(p), p = setTimeout(() => {
3039
+ f.value = {
3040
+ ...f.value,
3041
+ visible: !1
3042
+ };
3043
+ }, 600);
3044
+ }
3045
+ return I(() => {
3046
+ window.addEventListener("mousemove", w), window.addEventListener("mouseup", T), e.pagesViewportRef.value?.addEventListener("scroll", E, { passive: !0 });
3047
+ }), F(() => {
3048
+ r(), window.removeEventListener("mousemove", w), window.removeEventListener("mouseup", T), e.pagesViewportRef.value?.removeEventListener("scroll", E), p && clearTimeout(p);
3049
+ }), {
3050
+ tableInsertButton: t,
3051
+ hfEdit: i,
3052
+ scrollPageInfo: f,
3053
+ resolvePos: m,
3054
+ setPmSelection: g,
3055
+ scrollVisiblePositionIntoView: _,
3056
+ navigateToBookmark: b,
3057
+ handlePagesMouseDown: re,
3058
+ handlePagesMouseMove: ee,
3059
+ handlePagesClick: S,
3060
+ handlePagesDoubleClick: C,
3061
+ handleTableInsertClick: x,
3062
+ clearTableInsertTimer: r,
3063
+ handleHfSave: te,
3064
+ handleHfRemove: ne
3065
+ };
3066
+ }
3067
+ //#endregion
3068
+ //#region src/composables/useSelectionSync.ts
3069
+ function Bi(e) {
3070
+ let t = null, n = null, r = null;
3071
+ function i() {
3072
+ let r = e.pagesRef.value;
3073
+ r && (r.querySelectorAll(".vue-sel-rect, .vue-caret").forEach((e) => e.remove()), t !== null && (clearInterval(t), t = null), n = null);
3074
+ }
3075
+ function a() {
3076
+ r !== null && cancelAnimationFrame(r), r = requestAnimationFrame(() => {
3077
+ r = null;
3078
+ let t = e.pagesRef.value, n = e.editorView.value;
3079
+ if (!t || !n || e.isHfEditing?.value) return;
3080
+ let i = n.state.selection;
3081
+ if (i instanceof ge && i.node.type.name === "image") {
3082
+ let n = xe(t, i.from), r = n ? pt(n) : null;
3083
+ if (r) {
3084
+ let t = e.selectedImage.value;
3085
+ (!t || t.element !== r || t.pmPos !== i.from || t.width !== r.offsetWidth || t.height !== r.offsetHeight) && (e.selectedImage.value = {
3086
+ element: r,
3087
+ pmPos: i.from,
3088
+ width: r.offsetWidth,
3089
+ height: r.offsetHeight
3090
+ });
3091
+ return;
3092
+ }
3093
+ }
3094
+ e.imageInteracting?.value || (e.selectedImage.value = null);
3095
+ });
3096
+ }
3097
+ function o() {
3098
+ let r = e.pagesRef.value, o = e.editorView.value;
3099
+ if (!r || !o) return;
3100
+ if (i(), e.isHfEditing?.value) {
3101
+ Ce(e.hiddenContainer?.value);
3102
+ return;
3103
+ }
3104
+ a(), ve(r, o.state);
3105
+ let s = o.state.selection;
3106
+ if (s instanceof ge && s.node.type.name === "image") {
3107
+ Ce(e.hiddenContainer?.value);
3108
+ return;
3109
+ }
3110
+ let { from: c, to: l, empty: u } = s, d = r.scrollTop, f = r.scrollLeft, p = e.zoom.value || 1;
3111
+ if (u) {
3112
+ let i = r.getBoundingClientRect(), a = rt(r, c, i, p);
3113
+ if (a) {
3114
+ we({
3115
+ hiddenHost: e.hiddenContainer?.value,
3116
+ editorView: o,
3117
+ visibleCaret: {
3118
+ left: i.left + a.x,
3119
+ top: i.top + a.y
3120
+ }
3121
+ });
3122
+ let s = document.createElement("div");
3123
+ s.className = "vue-caret", s.style.cssText = `
3124
+ position: absolute;
3125
+ left: ${a.x / p + f}px;
3126
+ top: ${a.y / p + d}px;
3127
+ width: 2px;
3128
+ height: ${a.height}px;
3129
+ background: var(--doc-caret, #000);
3130
+ pointer-events: none;
3131
+ z-index: ${C.selectionOverlay};
3132
+ `, r.appendChild(s), n = s;
3133
+ let c = !0;
3134
+ t = setInterval(() => {
3135
+ c = !c, n && (n.style.opacity = c ? "1" : "0");
3136
+ }, 530);
3137
+ } else o.composing || Ce(e.hiddenContainer?.value);
3138
+ return;
3139
+ }
3140
+ o.composing || Ce(e.hiddenContainer?.value);
3141
+ let m = it(r, c, l, r.getBoundingClientRect());
3142
+ for (let e of m) {
3143
+ let t = document.createElement("div");
3144
+ t.className = "vue-sel-rect", t.style.cssText = `
3145
+ position: absolute;
3146
+ left: ${e.x / p + f}px;
3147
+ top: ${e.y / p + d}px;
3148
+ width: ${e.width / p}px;
3149
+ height: ${e.height / p}px;
3150
+ background: rgba(66, 133, 244, 0.3);
3151
+ pointer-events: none;
3152
+ z-index: ${C.selectionOverlay};
3153
+ `, r.appendChild(t);
3154
+ }
3155
+ }
3156
+ return F(() => {
3157
+ r !== null && cancelAnimationFrame(r), i();
3158
+ }), {
3159
+ clearOverlay: i,
3160
+ updateSelectionOverlay: o
3161
+ };
3162
+ }
3163
+ //#endregion
3164
+ //#region src/composables/useMenuActions.ts
3165
+ function Vi(e) {
3166
+ function t(t) {
3167
+ let n = e.editorView.value;
3168
+ if (!n) return;
3169
+ let r = e.getCommands()[t];
3170
+ r && (r()(n.state, (e) => n.dispatch(e), n), n.focus());
3171
+ }
3172
+ function n(t, n) {
3173
+ let r = e.editorView.value;
3174
+ if (!r) return;
3175
+ let i = e.getCommands().insertTable;
3176
+ i && (i(t, n)(r.state, (e) => r.dispatch(e), r), r.focus());
3177
+ }
3178
+ function r(n) {
3179
+ switch (n) {
3180
+ case "open":
3181
+ e.docxInputRef.value?.click(), e.emit("menu-action", "open");
3182
+ break;
3183
+ case "save":
3184
+ e.emit("menu-action", "save"), e.downloadCurrentDocument();
3185
+ break;
3186
+ case "pageSetup":
3187
+ e.showPageSetup.value = !0;
3188
+ break;
3189
+ case "watermark":
3190
+ e.showWatermark.value = !0;
3191
+ break;
3192
+ case "clearFormatting":
3193
+ e.handleClearFormatting();
3194
+ break;
3195
+ case "insertImage":
3196
+ e.imageInputRef.value?.click();
3197
+ break;
3198
+ case "insertLink":
3199
+ e.showHyperlink.value = !0;
3200
+ break;
3201
+ case "insertSymbol":
3202
+ e.showInsertSymbol.value = !0;
3203
+ break;
3204
+ case "insertPageBreak":
3205
+ e.handleInsertPageBreak();
3206
+ break;
3207
+ case "insertSectionBreakNextPage":
3208
+ e.handleInsertSectionBreakNextPage();
3209
+ break;
3210
+ case "insertSectionBreakContinuous":
3211
+ e.handleInsertSectionBreakContinuous();
3212
+ break;
3213
+ case "insertTOC":
3214
+ t("generateTOC");
3215
+ break;
3216
+ case "outline":
3217
+ e.handleToggleOutline();
3218
+ break;
3219
+ case "sidebar":
3220
+ e.handleToggleSidebar();
3221
+ break;
3222
+ case "shortcuts":
3223
+ e.showKeyboardShortcuts.value = !0;
3224
+ break;
3225
+ case "reportIssue":
3226
+ en();
3227
+ break;
3228
+ case "dirLTR":
3229
+ t("setLtr");
3230
+ break;
3231
+ case "dirRTL":
3232
+ t("setRtl");
3233
+ break;
3234
+ }
3235
+ }
3236
+ return {
3237
+ handleMenuAction: r,
3238
+ handleMenuTableInsert: n,
3239
+ execSimpleCommand: t
3240
+ };
3241
+ }
3242
+ //#endregion
3243
+ //#region src/composables/useDocumentLifecycle.ts
3244
+ function Hi(e) {
3245
+ async function t(t) {
3246
+ e.sidebarAutoOpenedRef.value = !1, await e.loadDocumentBuffer(t);
3247
+ }
3248
+ function n(t) {
3249
+ e.sidebarAutoOpenedRef.value = !1, e.loadDocument(t);
3250
+ }
3251
+ K(e.documentBuffer, (e) => {
3252
+ e && t(e);
3253
+ }), K(e.document, (e) => {
3254
+ e && n(e);
3255
+ }), I(async () => {
3256
+ await de();
3257
+ let r = e.documentBuffer(), i = e.document();
3258
+ r ? await t(r) : i && n(i);
3259
+ });
3260
+ }
3261
+ //#endregion
3262
+ //#region src/composables/useDocxEditorRefApi.ts
3263
+ function Ui(e) {
3264
+ function t() {
3265
+ let t = e.pagesRef.value;
3266
+ t && ht(t), e.onPrint?.(), window.print();
3267
+ }
3268
+ function n() {
3269
+ t();
3270
+ }
3271
+ function r() {
3272
+ return e.zoom.value;
3273
+ }
3274
+ function i(t) {
3275
+ if (!Number.isInteger(t) || t < 1) return;
3276
+ let n = e.pagesViewportRef.value, r = e.pagesRef.value?.querySelector(`[data-page-number="${t}"]`);
3277
+ if (!n || !r) return;
3278
+ let i = n.getBoundingClientRect(), a = r.getBoundingClientRect();
3279
+ n.scrollTo({
3280
+ top: a.top - i.top + n.scrollTop - 24,
3281
+ behavior: "smooth"
3282
+ });
3283
+ }
3284
+ function a(t) {
3285
+ Number.isFinite(t) && e.scrollVisiblePositionIntoView(t);
3286
+ }
3287
+ function o() {
3288
+ return e.editorView.value ? {
3289
+ getDocument: e.getDocument,
3290
+ getView: () => e.editorView.value,
3291
+ getState: () => e.editorView.value?.state ?? null
3292
+ } : null;
3293
+ }
3294
+ function s() {
3295
+ return e.layout.value?.pages.length ?? 0;
3296
+ }
3297
+ function c() {
3298
+ let t = e.layout.value, n = e.editorView.value;
3299
+ if (!t || !n) return 0;
3300
+ let r = Ve(t, n.state.selection.from);
3301
+ return r == null ? 0 : r + 1;
3302
+ }
3303
+ function l(t, n) {
3304
+ let r = e.editorView.value;
3305
+ if (!r) return !1;
3306
+ let i = nn(r.state.doc, t);
3307
+ if (!i) return !1;
3308
+ if (e.scrollVisiblePositionIntoView(i.from + 1), n?.highlight) {
3309
+ let r = () => {
3310
+ let r = e.pagesRef.value;
3311
+ r && Q(r, t, n.highlight);
3312
+ };
3313
+ r(), requestAnimationFrame(() => requestAnimationFrame(r));
3314
+ }
3315
+ return !0;
3316
+ }
3317
+ function u(t, n) {
3318
+ return Oe(e.editorView.value, t, n);
3319
+ }
3320
+ function d() {
3321
+ return Ae(e.editorView.value);
3322
+ }
3323
+ function f() {
3324
+ return e.comments.value;
3325
+ }
3326
+ function p(t) {
3327
+ let n = e.editorView.value;
3328
+ return n ? Pe(n.state.doc, t ?? {}) : [];
3329
+ }
3330
+ function m(t) {
3331
+ let n = e.editorView.value;
3332
+ if (!n) return !1;
3333
+ let r = Z(n.state.doc, t);
3334
+ return r == null ? !1 : (a(r), !0);
3335
+ }
3336
+ function h(t, n, r) {
3337
+ let i = _e.between(t.state.doc.resolve(n), t.state.doc.resolve(r));
3338
+ t.dispatch(t.state.tr.setSelection(i)), e.scrollVisiblePositionIntoView(n);
3339
+ }
3340
+ function g(t, n) {
3341
+ let r = e.editorView.value;
3342
+ if (!r) return;
3343
+ let i = Te(r.state.doc, t, n);
3344
+ i && h(r, i.from, i.to);
3345
+ }
3346
+ function _(t) {
3347
+ let n = e.editorView.value;
3348
+ if (!n) return !1;
3349
+ let r = De(n, t);
3350
+ return r ? (h(n, r.from, r.to), !0) : !1;
3351
+ }
3352
+ function v(t) {
3353
+ let n = e.editorView.value;
3354
+ if (!n) return !1;
3355
+ let r = Ee(n, t);
3356
+ return r ? (h(n, r.from, r.to), !0) : !1;
3357
+ }
3358
+ function y(t, n, r) {
3359
+ let i = e.editorView.value;
3360
+ if (!i) return !1;
3361
+ try {
3362
+ return i.dispatch(Re(i.state, t, n, r)), !0;
3363
+ } catch (e) {
3364
+ if (e instanceof tn) return !1;
3365
+ throw e;
3366
+ }
3367
+ }
3368
+ function b(t, n) {
3369
+ let r = e.editorView.value;
3370
+ if (!r) return !1;
3371
+ try {
3372
+ return r.dispatch(Fe(r.state, t, n)), !0;
3373
+ } catch (e) {
3374
+ if (e instanceof tn) return !1;
3375
+ throw e;
3376
+ }
3377
+ }
3378
+ function ee(t, n, r) {
3379
+ let i = e.editorView.value;
3380
+ if (!i) return !1;
3381
+ try {
3382
+ return i.dispatch(Be(i.state, t, n, r)), !0;
3383
+ } catch (e) {
3384
+ if (e instanceof tn) return !1;
3385
+ throw e;
3386
+ }
3387
+ }
3388
+ function x(t) {
3389
+ return ke(e.editorView.value, e.layout.value, t);
3390
+ }
3391
+ function S(t) {
3392
+ return e.contentChangeSubscribers.add(t), () => e.contentChangeSubscribers.delete(t);
3393
+ }
3394
+ function C(t) {
3395
+ return e.selectionChangeSubscribers.add(t), () => e.selectionChangeSubscribers.delete(t);
3396
+ }
3397
+ return { exposed: {
3398
+ getAgent: () => null,
3399
+ save: e.save,
3400
+ setZoom: e.setZoom,
3401
+ getZoom: r,
3402
+ focus: e.focus,
3403
+ scrollToPage: i,
3404
+ scrollToPosition: a,
3405
+ openPrintPreview: n,
3406
+ print: t,
3407
+ loadDocument: e.loadDocument,
3408
+ loadDocumentBuffer: e.loadDocumentBuffer,
3409
+ destroy: e.destroy,
3410
+ getDocument: e.getDocument,
3411
+ getEditorRef: o,
3412
+ addComment: e.addComment,
3413
+ replyToComment: e.replyToComment,
3414
+ resolveComment: e.resolveComment,
3415
+ proposeChange: e.proposeChange,
3416
+ scrollToParaId: l,
3417
+ scrollToCommentId: _,
3418
+ scrollToChangeId: v,
3419
+ highlightRange: g,
3420
+ findInDocument: u,
3421
+ getSelectionInfo: d,
3422
+ getComments: f,
3423
+ getContentControls: p,
3424
+ scrollToContentControl: m,
3425
+ setContentControlContent: y,
3426
+ removeContentControl: b,
3427
+ setContentControlValue: ee,
3428
+ applyFormatting: e.applyFormatting,
3429
+ setParagraphStyle: e.setParagraphStyle,
3430
+ insertBreak: e.insertBreak,
3431
+ getPageContent: x,
3432
+ getTotalPages: s,
3433
+ getCurrentPage: c,
3434
+ onContentChange: S,
3435
+ onSelectionChange: C
3436
+ } };
3437
+ }
3438
+ //#endregion
3439
+ //#region src/composables/useControllableBoolean.ts
3440
+ function Wi(e, t, n = !1) {
3441
+ let r = R(n);
3442
+ return E({
3443
+ get() {
3444
+ let t = e();
3445
+ return t === void 0 ? r.value : t;
3446
+ },
3447
+ set(n) {
3448
+ let i = e();
3449
+ n !== (i === void 0 ? r.value : i) && (i === void 0 && (r.value = n), t?.(n));
3450
+ }
3451
+ });
3452
+ }
3453
+ //#endregion
3454
+ //#region src/composables/useColorMode.ts
3455
+ function Gi(e) {
3456
+ let t = R(qe());
3457
+ return me((n) => {
3458
+ e() === "system" && n(Xe((e) => {
3459
+ t.value = e;
3460
+ }));
3461
+ }), E(() => Ye(e(), t.value));
3462
+ }
3463
+ //#endregion
3464
+ //#region src/composables/useFontLifecycle.ts
3465
+ function Ki(e, t) {
3466
+ K(e, (e) => {
3467
+ We(e);
3468
+ }, { immediate: !0 });
3469
+ let n = Ge(t);
3470
+ F(() => n());
3471
+ }
3472
+ //#endregion
3473
+ //#region src/components/DocxEditor.vue?vue&type=script&setup=true&lang.ts
3474
+ var qi = { class: "docx-editor-vue__toolbar-shell" }, Ji = {
3475
+ key: 0,
3476
+ class: "docx-editor-vue__error"
3477
+ }, Yi = {
3478
+ key: 1,
3479
+ class: "docx-editor-vue__loading"
3480
+ }, Xi = { class: "docx-editor-vue__editor-area" }, Zi = {
3481
+ key: 0,
3482
+ class: "docx-editor-vue__vertical-ruler"
3483
+ }, Qi = ["title"], $i = ["title", "aria-label"], ea = 268, ta = 64, na = 20, ra = 816, ia = /* @__PURE__ */ M({
3484
+ __name: "DocxEditor",
3485
+ props: {
3486
+ documentBuffer: { default: null },
3487
+ document: { default: null },
3488
+ showToolbar: {
3489
+ type: Boolean,
3490
+ default: !0
3491
+ },
3492
+ showFileOpen: {
3493
+ type: Boolean,
3494
+ default: !0
3495
+ },
3496
+ showHelpMenu: {
3497
+ type: Boolean,
3498
+ default: !0
3499
+ },
3500
+ showMenuBar: {
3501
+ type: Boolean,
3502
+ default: !0
3503
+ },
3504
+ showRuler: {
3505
+ type: Boolean,
3506
+ default: !0
3507
+ },
3508
+ documentName: { default: "" },
3509
+ readOnly: {
3510
+ type: Boolean,
3511
+ default: !1
3512
+ },
3513
+ author: { default: "User" },
3514
+ mode: { default: "editing" },
3515
+ onModeChange: {},
3516
+ commentsSidebarOpen: {
3517
+ type: Boolean,
3518
+ default: void 0
3519
+ },
3520
+ onCommentsSidebarOpenChange: {},
3521
+ i18n: { default: void 0 },
3522
+ theme: { default: null },
3523
+ colorMode: { default: "light" },
3524
+ externalPlugins: { default: () => [] },
3525
+ showZoomControl: {
3526
+ type: Boolean,
3527
+ default: !0
3528
+ },
3529
+ initialZoom: { default: 1 },
3530
+ toolbarExtra: {
3531
+ type: Function,
3532
+ default: void 0
3533
+ },
3534
+ className: { default: "" },
3535
+ style: {
3536
+ type: [
3537
+ Boolean,
3538
+ null,
3539
+ String,
3540
+ Object,
3541
+ Array
3542
+ ],
3543
+ default: void 0
3544
+ },
3545
+ showOutline: {
3546
+ type: Boolean,
3547
+ default: !1
3548
+ },
3549
+ showOutlineButton: {
3550
+ type: Boolean,
3551
+ default: !0
3552
+ },
3553
+ fontFamilies: { default: void 0 },
3554
+ fonts: {},
3555
+ watermarkPresets: { default: void 0 },
3556
+ onPrint: {
3557
+ type: Function,
3558
+ default: void 0
3559
+ },
3560
+ onOpen: {
3561
+ type: Function,
3562
+ default: void 0
3563
+ },
3564
+ disableFindReplaceShortcuts: {
3565
+ type: Boolean,
3566
+ default: !1
3567
+ },
3568
+ renderLogo: {
3569
+ type: Function,
3570
+ default: void 0
3571
+ },
3572
+ onDocumentNameChange: {
3573
+ type: Function,
3574
+ default: void 0
3575
+ },
3576
+ documentNameEditable: {
3577
+ type: Boolean,
3578
+ default: !0
3579
+ },
3580
+ renderTitleBarRight: {
3581
+ type: Function,
3582
+ default: void 0
3583
+ },
3584
+ onChange: {},
3585
+ onError: {},
3586
+ onSelectionChange: {},
3587
+ onEditorViewReady: {},
3588
+ onCommentAdd: {},
3589
+ onCommentResolve: {},
3590
+ onCommentDelete: {},
3591
+ onCommentReply: {},
3592
+ onCommentsChange: {}
3593
+ },
3594
+ emits: [
3595
+ "change",
3596
+ "update:document",
3597
+ "error",
3598
+ "ready",
3599
+ "rename",
3600
+ "menu-action",
3601
+ "mode-change",
3602
+ "comments-sidebar-open-change"
3603
+ ],
3604
+ setup(e, { expose: t, emit: n }) {
3605
+ let i = e, o = n, s = Gi(() => i.colorMode), c = R(i.mode), u = E(() => i.readOnly || c.value === "viewing"), d = E(() => i.author);
3606
+ a(E(() => i.i18n));
3607
+ let { t: g } = l(E(() => i.i18n));
3608
+ b(s);
3609
+ let _ = R(null), v = R(null), x = R(null), S = R(0), C = /* @__PURE__ */ new Set(), ie = /* @__PURE__ */ new Set(), T = new je(), ae = R(!1), se = R(!1), ce = R(!1), M = R(!1), le = R(!1), W = R(i.showOutline), pe = R(!1), G = Wi(() => i.commentsSidebarOpen, (e) => o("comments-sidebar-open-change", e)), me = R(!1), q = R(null), J = fe([]), ge = fe([]), ve = fe([]), { zoom: X, zoomPercent: xe, isMinZoom: Se, isMaxZoom: Ce, setZoom: we, zoomIn: Te, zoomOut: Ee, handleWheel: De, handleKeyDown: Oe, installShortcuts: ke, ZOOM_PRESETS: Me } = re(i.initialZoom);
3610
+ ke();
3611
+ let { editorView: Z, isReady: Pe, parseError: Fe, documentFonts: Ie, layout: Le, loadBuffer: Re, loadDocument: ze, save: Be, focus: Ve, destroy: Ue, getDocument: Q, getCommands: We, reLayout: Ge, getHfPmView: Ke, getHfPmViews: qe, syncHfPMs: Je, setHfTransactionListener: Ye, setDocument: Xe } = te({
3612
+ hiddenContainer: _,
3613
+ pagesContainer: v,
3614
+ readOnly: u,
3615
+ externalPlugins: i.externalPlugins,
3616
+ syncCoordinator: T,
3617
+ editorMode: c,
3618
+ author: d,
3619
+ onChange: (e) => {
3620
+ o("change", e), o("update:document", e), i.onChange?.(e), C.forEach((t) => t(e));
3621
+ },
3622
+ onError: (e) => {
3623
+ o("error", e), i.onError?.(e);
3624
+ },
3625
+ onSelectionUpdate: () => {
3626
+ S.value++;
3627
+ let e = Z.value;
3628
+ i.onSelectionChange?.(e ? Ne(e.state) : null);
3629
+ let t = Ae(e);
3630
+ ie.forEach((e) => e(t));
3631
+ }
3632
+ }), { commentCallbacks: Ze } = Ei(i, Z), $e = E(() => {
3633
+ S.value;
3634
+ let e = Q();
3635
+ if (!e?.package?.document) return null;
3636
+ let t = e.package.document;
3637
+ return t.finalSectionProperties ?? t.sections?.[0]?.properties ?? null;
3638
+ }), et = E(() => {
3639
+ S.value;
3640
+ let e = Z.value, t = e ? Qe(e.state).paragraphFormatting : {};
3641
+ return {
3642
+ indentLeft: t.indentLeft ?? 0,
3643
+ indentRight: t.indentRight ?? 0,
3644
+ firstLineIndent: t.indentFirstLine ?? 0,
3645
+ hangingIndent: t.hangingIndent ?? !1,
3646
+ tabStops: t.tabs ?? null
3647
+ };
3648
+ }), tt = E(() => (S.value, Q()?.package?.theme ?? i.theme ?? null)), nt = E(() => (S.value, Q()?.package?.styles?.styles ?? void 0)), rt = R(null), it = R([]);
3649
+ function at(e, t) {
3650
+ rt.value = ye(e, t), it.value = be(e, t);
3651
+ }
3652
+ function ot() {
3653
+ rt.value = null, it.value = [];
3654
+ }
3655
+ Ki(() => i.fonts, (e) => {
3656
+ o("error", e), i.onError?.(e);
3657
+ });
3658
+ let st = E(() => $.value?.headerFooter ? Ke($.value.headerFooter) ?? null : null), ct = E(() => st.value ?? Z.value);
3659
+ I(() => {
3660
+ Ye((e, t) => {
3661
+ S.value++, requestAnimationFrame(() => {
3662
+ let e = $.value;
3663
+ if (!e) return;
3664
+ at(t, e.position);
3665
+ let n = on(e.position), r = x.value;
3666
+ if (!n || !r) return;
3667
+ let i = n.getBoundingClientRect(), a = r.getBoundingClientRect(), o = X.value || 1;
3668
+ $.value = {
3669
+ ...e,
3670
+ targetRect: {
3671
+ top: (i.top - a.top + r.scrollTop) / o,
3672
+ left: (i.left - a.left + r.scrollLeft) / o,
3673
+ width: i.width / o,
3674
+ height: i.height / o
3675
+ }
3676
+ };
3677
+ });
3678
+ }), K(() => $.value, (e) => {
3679
+ if (!e) {
3680
+ ot();
3681
+ return;
3682
+ }
3683
+ let t = Z.value;
3684
+ if (t) {
3685
+ try {
3686
+ let e = t.state.tr.setSelection(_e.create(t.state.doc, 0));
3687
+ t.dispatch(e);
3688
+ } catch {}
3689
+ t.dom.blur?.();
3690
+ }
3691
+ gr.updateSelectionOverlay();
3692
+ });
3693
+ let e = 0;
3694
+ function t() {
3695
+ !$.value || e || (e = requestAnimationFrame(() => {
3696
+ e = 0;
3697
+ let t = $.value;
3698
+ if (!t?.headerFooter) return;
3699
+ let n = Ke(t.headerFooter);
3700
+ n && at(n, t.position);
3701
+ }));
3702
+ }
3703
+ window.addEventListener("scroll", t, !0), window.addEventListener("resize", t), F(() => {
3704
+ e && cancelAnimationFrame(e), window.removeEventListener("scroll", t, !0), window.removeEventListener("resize", t);
3705
+ });
3706
+ });
3707
+ let lt = E(() => {
3708
+ S.value;
3709
+ let e = (W.value ? ea : i.showOutlineButton ? ta : 20) + (i.showRuler && (W.value || i.showOutlineButton) ? na : 0), t = Q()?.package?.document, n = [t?.finalSectionProperties?.pageWidth, ...t?.sections?.map((e) => e.properties?.pageWidth) ?? []].filter((e) => typeof e == "number" && e > 0), r = n.length ? Math.round(Math.max(...n) / 15) : ra;
3710
+ return 2 * e + r + (G.value ? He * 2 : 0);
3711
+ }), ut = E(() => {
3712
+ let e = [];
3713
+ return G.value && e.push(`translateX(-${He}px)`), X.value !== 1 && e.push(`scale(${X.value})`), {
3714
+ transform: e.length > 0 ? e.join(" ") : void 0,
3715
+ transformOrigin: "top center",
3716
+ transition: "transform 0.2s ease"
3717
+ };
3718
+ }), dt = E(() => ({
3719
+ paddingLeft: "20px",
3720
+ paddingRight: 20 + (G.value ? He * 2 : 0) + "px",
3721
+ transition: "padding 0.2s ease",
3722
+ minWidth: lt.value + "px"
3723
+ })), ft = E(() => {
3724
+ let e = $e.value;
3725
+ return vt(e?.pageWidth ?? 12240) * X.value;
3726
+ }), pt = E(() => new Set(J.value.filter((e) => e.parentId == null && e.done).map((e) => e.id))), mt = E(() => {
3727
+ S.value;
3728
+ let e = Z.value;
3729
+ if (!e) return [];
3730
+ let t = /* @__PURE__ */ new Set(), n = [];
3731
+ return e.state.doc.descendants((e) => {
3732
+ let r = e.attrs?.bookmarks;
3733
+ if (!r) return !0;
3734
+ for (let e of r) {
3735
+ let r = e.name;
3736
+ !r || r.startsWith("_") || t.has(r) || (t.add(r), n.push({
3737
+ name: r,
3738
+ label: r
3739
+ }));
3740
+ }
3741
+ return !0;
3742
+ }), n.sort((e, t) => e.name.localeCompare(t.name));
3743
+ }), ht = Jt(), { floatingCommentBtn: gt, pendingCommentRange: _t, addCommentYPosition: yt, sidebarAutoOpenedRef: bt, extractCommentsAndChanges: xt, handleAddComment: St, handleCancelAddComment: Ct, handleStartAddComment: wt, handleMarkerClick: Tt } = Di({
3744
+ editorView: Z,
3745
+ getDocument: Q,
3746
+ comments: J,
3747
+ trackedChanges: ge,
3748
+ resolvedCommentIds: pt,
3749
+ activeSidebarItem: q,
3750
+ showSidebar: G,
3751
+ isAddingComment: me,
3752
+ readOnly: u,
3753
+ zoom: X,
3754
+ stateTick: S,
3755
+ pagesRef: v,
3756
+ pagesViewportRef: x,
3757
+ emit: o,
3758
+ commentIdAllocator: ht,
3759
+ author: d,
3760
+ commentCallbacks: Ze,
3761
+ getHfPmViews: qe
3762
+ }), { docxInputRef: Et, imageInputRef: Dt, handleImageFileChange: Ot, handleDocxFileChange: kt, handleDocumentNameChange: At, downloadCurrentDocument: jt, loadDocumentBuffer: Mt, loadDocument: Nt, save: Pt } = vi({
3763
+ loadBuffer: Re,
3764
+ onOpen: i.onOpen,
3765
+ loadParsedDocument: ze,
3766
+ getDocument: Q,
3767
+ saveBlob: Be,
3768
+ extractCommentsAndChanges: xt,
3769
+ emit: o,
3770
+ documentName: () => i.documentName,
3771
+ onDocumentNameChange: i.onDocumentNameChange,
3772
+ getActiveView: () => ct.value,
3773
+ nextTick: de
3774
+ }), { hyperlinkPopupData: Ft, handleHyperlinkSubmit: It, handleHyperlinkRemove: Lt, handleHyperlinkPopupNavigate: Rt, handleHyperlinkPopupEdit: zt, handleHyperlinkPopupRemove: Bt } = yi({
3775
+ editorView: Z,
3776
+ getCommands: We
3777
+ }), { handleClearFormatting: Vt, handleApplyStyle: Ht, handleInsertPageBreak: Ut, handleInsertSectionBreakNextPage: Wt, handleInsertSectionBreakContinuous: Gt, handleInsertSymbol: Kt, applyFormatting: qt, setParagraphStyle: Yt, insertBreak: Xt } = bi({
3778
+ editorView: Z,
3779
+ activeView: ct,
3780
+ getDocument: Q
3781
+ }), { handlePageSetupApply: Zt, handleLeftMarginChange: Qt, handleRightMarginChange: $t, handleTopMarginChange: en, handleBottomMarginChange: tn, handleIndentLeftChange: nn, handleIndentRightChange: rn, handleFirstLineIndentChange: an, handleTabStopRemove: sn } = xi({
3782
+ editorView: Z,
3783
+ getDocument: Q,
3784
+ readOnly: u,
3785
+ stateTick: S,
3786
+ reLayout: Ge,
3787
+ emit: o
3788
+ }), { showWatermark: cn, currentWatermark: ln, handleWatermarkApply: un } = Si({
3789
+ editorView: Z,
3790
+ readOnly: u,
3791
+ stateTick: S
3792
+ }), { handleToggleOutline: dn, handleOutlineNavigate: fn, handleToggleSidebar: pn, handleEditorScrollMouseDown: mn } = Ci({
3793
+ editorView: Z,
3794
+ showOutline: W,
3795
+ showSidebar: G,
3796
+ outlineHeadings: ve,
3797
+ activeSidebarItem: q,
3798
+ extractCommentsAndChanges: xt,
3799
+ scrollToVisiblePosition: (e) => qn(e)
3800
+ });
3801
+ wi({
3802
+ showKeyboardShortcuts: pe,
3803
+ showFindReplace: ae,
3804
+ showHyperlink: se,
3805
+ handleZoomKeyDown: Oe,
3806
+ disableFindReplaceShortcuts: () => i.disableFindReplaceShortcuts,
3807
+ showFileOpen: () => i.showFileOpen,
3808
+ onOpenDocument: () => Et.value?.click()
3809
+ });
3810
+ let { addComment: gn, replyToComment: _n, resolveComment: vn, proposeChange: yn, handleCommentReply: bn, handleCommentResolve: xn, handleCommentUnresolve: Sn, handleCommentDelete: Cn, handleAcceptChange: wn, handleRejectChange: En, handleAcceptChangeById: Dn, handleRejectChangeById: On, handleTrackedChangeReply: kn } = Ti({
3811
+ editorView: Z,
3812
+ getDocument: Q,
3813
+ comments: J,
3814
+ trackedChanges: ge,
3815
+ showSidebar: G,
3816
+ isAddingComment: me,
3817
+ pendingCommentRange: _t,
3818
+ contentChangeSubscribers: C,
3819
+ extractCommentsAndChanges: xt,
3820
+ emit: o,
3821
+ commentIdAllocator: ht,
3822
+ author: d,
3823
+ commentCallbacks: Ze,
3824
+ getHfPmViews: qe
3825
+ }), { selectedImage: jn, imageInteracting: Pn, imageToolbarContext: Fn, handleToolbarImageWrap: Ln, handleImageTransform: Rn } = Oi({
3826
+ editorView: Z,
3827
+ zoom: X,
3828
+ stateTick: S,
3829
+ getCommands: We
3830
+ }), zn = ne(), Bn = null, { tableInsertButton: Vn, hfEdit: $, scrollPageInfo: Un, resolvePos: Wn, setPmSelection: Gn, scrollVisiblePositionIntoView: qn, handlePagesMouseDown: Jn, handlePagesMouseMove: Yn, handlePagesClick: Xn, handlePagesDoubleClick: Zn, handleTableInsertClick: Qn, clearTableInsertTimer: $n, handleHfSave: er, handleHfRemove: tr } = zi({
3831
+ editorView: Z,
3832
+ pagesRef: v,
3833
+ pagesViewportRef: x,
3834
+ selectedImage: jn,
3835
+ imageInteracting: Pn,
3836
+ hyperlinkPopupData: Ft,
3837
+ readOnly: u,
3838
+ zoom: X,
3839
+ layout: Le,
3840
+ tableResize: zn,
3841
+ getCommands: We,
3842
+ getDocument: Q,
3843
+ reLayout: Ge,
3844
+ emit: o,
3845
+ clearOverlay: mr,
3846
+ syncHfPMs: Je,
3847
+ getHfPmView: Ke,
3848
+ setDocument: Xe
3849
+ }), { contextMenu: nr, imageContextMenu: rr, imageContextMenuTextActions: ir, handleContextMenu: ar, handleSelectedImageContextMenu: or, handleImageWrapSelect: sr, handleContextMenuAction: cr } = Li({
3850
+ editorView: Z,
3851
+ selectedImage: jn,
3852
+ zoom: X,
3853
+ showImageProperties: M,
3854
+ getCommands: We,
3855
+ clearOverlay: mr,
3856
+ setPmSelection: Gn,
3857
+ resolvePos: Wn
3858
+ }), { handleMenuAction: lr, handleMenuTableInsert: ur } = Vi({
3859
+ editorView: Z,
3860
+ getCommands: We,
3861
+ docxInputRef: Et,
3862
+ imageInputRef: Dt,
3863
+ showPageSetup: le,
3864
+ showWatermark: cn,
3865
+ showHyperlink: se,
3866
+ showInsertSymbol: ce,
3867
+ showKeyboardShortcuts: pe,
3868
+ handleClearFormatting: Vt,
3869
+ handleInsertPageBreak: Ut,
3870
+ handleInsertSectionBreakNextPage: Wt,
3871
+ handleInsertSectionBreakContinuous: Gt,
3872
+ handleToggleOutline: dn,
3873
+ handleToggleSidebar: pn,
3874
+ downloadCurrentDocument: jt,
3875
+ emit: o
3876
+ });
3877
+ Hi({
3878
+ documentBuffer: () => i.documentBuffer,
3879
+ document: () => i.document,
3880
+ loadDocumentBuffer: Mt,
3881
+ loadDocument: Nt,
3882
+ sidebarAutoOpenedRef: bt
3883
+ });
3884
+ let dr = () => Z.value, fr = () => v.value;
3885
+ K(() => i.mode, (e) => {
3886
+ e && e !== c.value && (c.value = e);
3887
+ }), K(() => i.showOutline, (e) => {
3888
+ W.value = !!e;
3889
+ });
3890
+ function pr(e) {
3891
+ c.value !== e && (c.value = e, o("mode-change", e));
3892
+ }
3893
+ I(() => {
3894
+ Bn = zn.install();
3895
+ }), F(() => {
3896
+ Bn?.();
3897
+ });
3898
+ function mr() {
3899
+ gr.clearOverlay();
3900
+ }
3901
+ function hr() {
3902
+ gr.updateSelectionOverlay();
3903
+ }
3904
+ let gr = Bi({
3905
+ editorView: Z,
3906
+ hiddenContainer: _,
3907
+ pagesRef: v,
3908
+ zoom: X,
3909
+ selectedImage: jn,
3910
+ isHfEditing: E(() => $.value !== null),
3911
+ imageInteracting: Pn
3912
+ }), _r = T.onRender(() => hr());
3913
+ hr(), F(() => {
3914
+ _r(), mr();
3915
+ });
3916
+ let { exposed: vr } = Ui({
3917
+ editorView: Z,
3918
+ layout: Le,
3919
+ pagesRef: v,
3920
+ pagesViewportRef: x,
3921
+ zoom: X,
3922
+ comments: J,
3923
+ focus: Ve,
3924
+ destroy: Ue,
3925
+ getDocument: Q,
3926
+ setZoom: we,
3927
+ save: Pt,
3928
+ loadDocument: Nt,
3929
+ loadDocumentBuffer: Mt,
3930
+ addComment: gn,
3931
+ replyToComment: _n,
3932
+ resolveComment: vn,
3933
+ proposeChange: yn,
3934
+ applyFormatting: qt,
3935
+ setParagraphStyle: Yt,
3936
+ insertBreak: Xt,
3937
+ scrollVisiblePositionIntoView: qn,
3938
+ contentChangeSubscribers: C,
3939
+ selectionChangeSubscribers: ie,
3940
+ onPrint: i.onPrint
3941
+ });
3942
+ return t(vr), (t, n) => (L(), k("div", {
3943
+ class: N([
3944
+ "docx-editor-vue ep-root paged-editor",
3945
+ U(s) ? "dark" : "",
3946
+ e.className,
3947
+ {
3948
+ "paged-editor--readonly": u.value,
3949
+ "paged-editor--hf-editing": U($) !== null,
3950
+ "paged-editor--editing-header": U($)?.position === "header",
3951
+ "paged-editor--editing-footer": U($)?.position === "footer"
3952
+ }
3953
+ ]),
3954
+ style: P(e.style)
3955
+ }, [
3956
+ A("div", qi, [j(Kn, {
3957
+ "show-menu-bar": e.showMenuBar,
3958
+ "document-name": e.documentName,
3959
+ "document-name-editable": e.documentNameEditable,
3960
+ "show-file-open": e.showFileOpen,
3961
+ "show-help-menu": e.showHelpMenu,
3962
+ "render-logo": e.renderLogo,
3963
+ "render-title-bar-right": e.renderTitleBarRight,
3964
+ onRename: U(At),
3965
+ onMenuAction: U(lr),
3966
+ onInsertTable: U(ur)
3967
+ }, {
3968
+ "title-bar-left": he(() => [B(t.$slots, "title-bar-left")]),
3969
+ "title-bar-right": he(() => [B(t.$slots, "title-bar-right")]),
3970
+ _: 3
3971
+ }, 8, [
3972
+ "show-menu-bar",
3973
+ "document-name",
3974
+ "document-name-editable",
3975
+ "show-file-open",
3976
+ "show-help-menu",
3977
+ "render-logo",
3978
+ "render-title-bar-right",
3979
+ "onRename",
3980
+ "onMenuAction",
3981
+ "onInsertTable"
3982
+ ]), e.showToolbar ? (L(), D(f, {
3983
+ key: 0,
3984
+ view: ct.value,
3985
+ "get-commands": U(We),
3986
+ "state-tick": S.value,
3987
+ "zoom-percent": U(xe),
3988
+ "is-min-zoom": U(Se),
3989
+ "is-max-zoom": U(Ce),
3990
+ "zoom-presets": U(Me),
3991
+ "show-zoom-control": e.showZoomControl,
3992
+ "editor-mode": c.value,
3993
+ "comments-sidebar-open": U(G),
3994
+ "image-context": U(Fn),
3995
+ theme: tt.value,
3996
+ "font-families": e.fontFamilies,
3997
+ "document-fonts": U(Ie),
3998
+ "document-styles": nt.value,
3999
+ onInsertLink: n[0] ||= (e) => se.value = !0,
4000
+ onApplyStyle: U(Ht),
4001
+ onZoomIn: U(Te),
4002
+ onZoomOut: U(Ee),
4003
+ onZoomSet: U(we),
4004
+ onToggleSidebar: U(pn),
4005
+ onModeChange: pr,
4006
+ onImageWrapType: U(Ln),
4007
+ onImageProperties: n[1] ||= (e) => M.value = !0,
4008
+ onImageTransform: U(Rn)
4009
+ }, oe({
4010
+ "table-context": he(() => [j(p, {
4011
+ view: ct.value,
4012
+ "get-commands": U(We),
4013
+ "state-tick": S.value,
4014
+ theme: tt.value
4015
+ }, null, 8, [
4016
+ "view",
4017
+ "get-commands",
4018
+ "state-tick",
4019
+ "theme"
4020
+ ])]),
4021
+ _: 2
4022
+ }, [e.toolbarExtra ? {
4023
+ name: "toolbar-extra",
4024
+ fn: he(() => [(L(), D(V(e.toolbarExtra)))]),
4025
+ key: "0"
4026
+ } : {
4027
+ name: "toolbar-extra",
4028
+ fn: he(() => [B(t.$slots, "toolbar-extra")]),
4029
+ key: "1"
4030
+ }]), 1032, [
4031
+ "view",
4032
+ "get-commands",
4033
+ "state-tick",
4034
+ "zoom-percent",
4035
+ "is-min-zoom",
4036
+ "is-max-zoom",
4037
+ "zoom-presets",
4038
+ "show-zoom-control",
4039
+ "editor-mode",
4040
+ "comments-sidebar-open",
4041
+ "image-context",
4042
+ "theme",
4043
+ "font-families",
4044
+ "document-fonts",
4045
+ "document-styles",
4046
+ "onApplyStyle",
4047
+ "onZoomIn",
4048
+ "onZoomOut",
4049
+ "onZoomSet",
4050
+ "onToggleSidebar",
4051
+ "onImageWrapType",
4052
+ "onImageTransform"
4053
+ ])) : O("", !0)]),
4054
+ j(Lr, {
4055
+ "show-find-replace": ae.value,
4056
+ "onUpdate:showFindReplace": n[2] ||= (e) => ae.value = e,
4057
+ "show-hyperlink": se.value,
4058
+ "onUpdate:showHyperlink": n[3] ||= (e) => se.value = e,
4059
+ "show-insert-symbol": ce.value,
4060
+ "onUpdate:showInsertSymbol": n[4] ||= (e) => ce.value = e,
4061
+ "show-image-properties": M.value,
4062
+ "onUpdate:showImageProperties": n[5] ||= (e) => M.value = e,
4063
+ "show-page-setup": le.value,
4064
+ "onUpdate:showPageSetup": n[6] ||= (e) => le.value = e,
4065
+ "show-watermark": U(cn),
4066
+ "onUpdate:showWatermark": n[7] ||= (e) => ue(cn) ? cn.value = e : null,
4067
+ "show-keyboard-shortcuts": pe.value,
4068
+ "onUpdate:showKeyboardShortcuts": n[8] ||= (e) => pe.value = e,
4069
+ view: U(Z),
4070
+ bookmarks: mt.value,
4071
+ "selected-image-pm-pos": U(jn)?.pmPos ?? null,
4072
+ "section-properties": $e.value,
4073
+ "current-watermark": U(ln),
4074
+ "watermark-presets": e.watermarkPresets,
4075
+ "scroll-visible-position-into-view": U(qn),
4076
+ onInsertSymbol: U(Kt),
4077
+ onHyperlinkSubmit: U(It),
4078
+ onHyperlinkRemove: U(Lt),
4079
+ onPageSetupApply: U(Zt),
4080
+ onWatermarkApply: U(un)
4081
+ }, null, 8, [
4082
+ "show-find-replace",
4083
+ "show-hyperlink",
4084
+ "show-insert-symbol",
4085
+ "show-image-properties",
4086
+ "show-page-setup",
4087
+ "show-watermark",
4088
+ "show-keyboard-shortcuts",
4089
+ "view",
4090
+ "bookmarks",
4091
+ "selected-image-pm-pos",
4092
+ "section-properties",
4093
+ "current-watermark",
4094
+ "watermark-presets",
4095
+ "scroll-visible-position-into-view",
4096
+ "onInsertSymbol",
4097
+ "onHyperlinkSubmit",
4098
+ "onHyperlinkRemove",
4099
+ "onPageSetupApply",
4100
+ "onWatermarkApply"
4101
+ ]),
4102
+ U(Fe) ? (L(), k("div", Ji, H(U(Fe)), 1)) : O("", !0),
4103
+ !U(Pe) && !U(Fe) ? (L(), k("div", Yi, "Loading...")) : O("", !0),
4104
+ A("div", {
4105
+ ref_key: "hiddenPmRef",
4106
+ ref: _,
4107
+ class: "docx-editor-vue__hidden-pm paged-editor__hidden-pm"
4108
+ }, null, 512),
4109
+ A("div", {
4110
+ class: "docx-editor-vue__editor-scroll",
4111
+ onMousedown: n[29] ||= (...e) => U(mn) && U(mn)(...e)
4112
+ }, [A("div", Xi, [
4113
+ A("div", {
4114
+ ref_key: "pagesViewportRef",
4115
+ ref: x,
4116
+ class: "docx-editor-vue__pages-viewport",
4117
+ onMousedown: n[22] ||= (...e) => U(Jn) && U(Jn)(...e),
4118
+ onMousemove: n[23] ||= (...e) => U(Yn) && U(Yn)(...e),
4119
+ onClick: n[24] ||= (...e) => U(Xn) && U(Xn)(...e),
4120
+ onDblclick: n[25] ||= (...e) => U(Zn) && U(Zn)(...e),
4121
+ onContextmenu: n[26] ||= Y((...e) => U(ar) && U(ar)(...e), ["prevent"]),
4122
+ onWheel: n[27] ||= (...e) => U(De) && U(De)(...e)
4123
+ }, [
4124
+ e.showRuler && $e.value ? (L(), k("div", {
4125
+ key: 0,
4126
+ class: "docx-editor-vue__ruler-row",
4127
+ style: P(dt.value)
4128
+ }, [j(m, {
4129
+ "section-props": $e.value,
4130
+ zoom: U(X),
4131
+ editable: !u.value,
4132
+ "indent-left": et.value.indentLeft,
4133
+ "indent-right": et.value.indentRight,
4134
+ "first-line-indent": et.value.firstLineIndent,
4135
+ "hanging-indent": et.value.hangingIndent,
4136
+ "tab-stops": et.value.tabStops,
4137
+ onLeftMarginChange: U(Qt),
4138
+ onRightMarginChange: U($t),
4139
+ onIndentLeftChange: U(nn),
4140
+ onIndentRightChange: U(rn),
4141
+ onFirstLineIndentChange: U(an),
4142
+ onTabStopRemove: U(sn)
4143
+ }, null, 8, [
4144
+ "section-props",
4145
+ "zoom",
4146
+ "editable",
4147
+ "indent-left",
4148
+ "indent-right",
4149
+ "first-line-indent",
4150
+ "hanging-indent",
4151
+ "tab-stops",
4152
+ "onLeftMarginChange",
4153
+ "onRightMarginChange",
4154
+ "onIndentLeftChange",
4155
+ "onIndentRightChange",
4156
+ "onFirstLineIndentChange",
4157
+ "onTabStopRemove"
4158
+ ])], 4)) : O("", !0),
4159
+ A("div", {
4160
+ class: "docx-editor-vue__editor-content-wrapper",
4161
+ style: P({
4162
+ position: "relative",
4163
+ display: "flex",
4164
+ flex: "1 0 auto",
4165
+ flexDirection: "column",
4166
+ minHeight: "100%",
4167
+ minWidth: lt.value + "px"
4168
+ })
4169
+ }, [e.showRuler && $e.value ? (L(), k("div", Zi, [j(y, {
4170
+ "section-props": $e.value,
4171
+ zoom: U(X),
4172
+ editable: !u.value,
4173
+ onTopMarginChange: U(en),
4174
+ onBottomMarginChange: U(tn)
4175
+ }, null, 8, [
4176
+ "section-props",
4177
+ "zoom",
4178
+ "editable",
4179
+ "onTopMarginChange",
4180
+ "onBottomMarginChange"
4181
+ ])])) : O("", !0), A("div", {
4182
+ ref_key: "pagesRef",
4183
+ ref: v,
4184
+ class: "docx-editor-vue__pages paged-editor__pages",
4185
+ style: P(ut.value)
4186
+ }, null, 4)], 4),
4187
+ u.value ? O("", !0) : (L(), D(Hn, {
4188
+ key: 1,
4189
+ container: v.value,
4190
+ view: U(Z)
4191
+ }, null, 8, ["container", "view"])),
4192
+ j(In, {
4193
+ "is-open": U($) !== null,
4194
+ position: U($)?.position ?? "header",
4195
+ view: st.value,
4196
+ "target-rect": U($)?.targetRect ?? null,
4197
+ onSave: U(er),
4198
+ onClose: n[9] ||= (e) => $.value = null,
4199
+ onRemove: U(tr)
4200
+ }, null, 8, [
4201
+ "is-open",
4202
+ "position",
4203
+ "view",
4204
+ "target-rect",
4205
+ "onSave",
4206
+ "onRemove"
4207
+ ]),
4208
+ (L(!0), k(w, null, z(U($) ? it.value : [], (e, t) => (L(), k("div", {
4209
+ key: `hf-sel-${t}-${e.top}-${e.left}`,
4210
+ class: "vue-hf-sel-rect",
4211
+ "aria-hidden": "true",
4212
+ style: P({
4213
+ position: "fixed",
4214
+ top: `${e.top}px`,
4215
+ left: `${e.left}px`,
4216
+ width: `${e.width}px`,
4217
+ height: `${e.height}px`,
4218
+ background: "var(--doc-selection)",
4219
+ pointerEvents: "none",
4220
+ zIndex: 9998
4221
+ })
4222
+ }, null, 4))), 128)),
4223
+ U($) && rt.value ? (L(), k("div", {
4224
+ key: 2,
4225
+ "aria-hidden": "true",
4226
+ style: P({
4227
+ position: "fixed",
4228
+ top: `${rt.value.top}px`,
4229
+ left: `${rt.value.left}px`,
4230
+ width: "2px",
4231
+ height: `${rt.value.height}px`,
4232
+ background: "#4285f4",
4233
+ pointerEvents: "none",
4234
+ zIndex: 9999,
4235
+ animation: "hf-caret-blink 1.06s steps(1) infinite"
4236
+ })
4237
+ }, null, 4)) : O("", !0),
4238
+ j(Tn, {
4239
+ "image-info": U(jn),
4240
+ zoom: U(X),
4241
+ view: U(Z),
4242
+ onOpenProperties: n[10] ||= (e) => M.value = !0,
4243
+ onDeselect: n[11] ||= (e) => jn.value = null,
4244
+ onInteractStart: n[12] ||= (e) => Pn.value = !0,
4245
+ onInteractEnd: n[13] ||= (e) => Pn.value = !1,
4246
+ onContextMenu: U(or)
4247
+ }, null, 8, [
4248
+ "image-info",
4249
+ "zoom",
4250
+ "view",
4251
+ "onContextMenu"
4252
+ ]),
4253
+ j(hn, {
4254
+ "get-view": dr,
4255
+ "get-pages-container": fr,
4256
+ zoom: U(X),
4257
+ "transaction-version": S.value,
4258
+ "sync-coordinator": U(T)
4259
+ }, null, 8, [
4260
+ "zoom",
4261
+ "transaction-version",
4262
+ "sync-coordinator"
4263
+ ]),
4264
+ U(gt) && !me.value && !u.value ? (L(), k("button", {
4265
+ key: 3,
4266
+ type: "button",
4267
+ class: "docx-editor-vue__floating-comment",
4268
+ style: P({
4269
+ top: U(gt).top + "px",
4270
+ left: U(gt).left + "px"
4271
+ }),
4272
+ title: U(g)("comments.addComment"),
4273
+ onMousedown: n[14] ||= Y((...e) => U(wt) && U(wt)(...e), ["prevent", "stop"])
4274
+ }, [j(r, {
4275
+ name: "add_comment",
4276
+ size: 16
4277
+ })], 44, Qi)) : O("", !0),
4278
+ U(Vn) && !u.value ? (L(), k("button", {
4279
+ key: 4,
4280
+ type: "button",
4281
+ class: "docx-editor-vue__table-insert-btn",
4282
+ style: P({
4283
+ left: U(Vn).x + "px",
4284
+ top: U(Vn).y + "px"
4285
+ }),
4286
+ title: U(Vn).type === "row" ? "Insert row below" : "Insert column to the right",
4287
+ "aria-label": U(Vn).type === "row" ? "Insert row below" : "Insert column to the right",
4288
+ onMousedown: n[15] ||= (...e) => U(Qn) && U(Qn)(...e),
4289
+ onMouseenter: n[16] ||= (...e) => U($n) && U($n)(...e),
4290
+ onMouseleave: n[17] ||= (e) => Vn.value = null
4291
+ }, [...n[35] ||= [A("svg", {
4292
+ width: "12",
4293
+ height: "12",
4294
+ viewBox: "0 0 12 12",
4295
+ fill: "none"
4296
+ }, [A("path", {
4297
+ d: "M6 1v10M1 6h10",
4298
+ stroke: "currentColor",
4299
+ "stroke-width": "1.5",
4300
+ "stroke-linecap": "round"
4301
+ })], -1)]], 44, $i)) : O("", !0),
4302
+ j(h, {
4303
+ comments: J.value,
4304
+ "pages-container": v.value,
4305
+ zoom: U(X),
4306
+ "page-width-px": ft.value,
4307
+ "sidebar-open": U(G),
4308
+ "resolved-comment-ids": pt.value,
4309
+ onMarkerClick: U(Tt)
4310
+ }, null, 8, [
4311
+ "comments",
4312
+ "pages-container",
4313
+ "zoom",
4314
+ "page-width-px",
4315
+ "sidebar-open",
4316
+ "resolved-comment-ids",
4317
+ "onMarkerClick"
4318
+ ]),
4319
+ j(ee, {
4320
+ "is-open": U(G),
4321
+ comments: J.value,
4322
+ "tracked-changes": ge.value,
4323
+ "is-adding-comment": me.value,
4324
+ "add-comment-y-position": U(yt),
4325
+ "show-resolved": !0,
4326
+ "pages-container": v.value,
4327
+ "page-width-px": ft.value,
4328
+ zoom: U(X),
4329
+ "active-item-id": q.value,
4330
+ onClose: n[18] ||= (e) => G.value = !1,
4331
+ onAddComment: U(St),
4332
+ onCancelAddComment: U(Ct),
4333
+ onCommentReply: U(bn),
4334
+ onCommentResolve: U(xn),
4335
+ onCommentUnresolve: U(Sn),
4336
+ onCommentDelete: U(Cn),
4337
+ onAcceptChange: U(wn),
4338
+ onRejectChange: U(En),
4339
+ onAcceptChangeById: U(Dn),
4340
+ onRejectChangeById: U(On),
4341
+ onTrackedChangeReply: U(kn),
4342
+ "onUpdate:activeItemId": n[19] ||= (e) => q.value = e
4343
+ }, null, 8, [
4344
+ "is-open",
4345
+ "comments",
4346
+ "tracked-changes",
4347
+ "is-adding-comment",
4348
+ "add-comment-y-position",
4349
+ "pages-container",
4350
+ "page-width-px",
4351
+ "zoom",
4352
+ "active-item-id",
4353
+ "onAddComment",
4354
+ "onCancelAddComment",
4355
+ "onCommentReply",
4356
+ "onCommentResolve",
4357
+ "onCommentUnresolve",
4358
+ "onCommentDelete",
4359
+ "onAcceptChange",
4360
+ "onRejectChange",
4361
+ "onAcceptChangeById",
4362
+ "onRejectChangeById",
4363
+ "onTrackedChangeReply"
4364
+ ]),
4365
+ j(_i, {
4366
+ data: U(Ft),
4367
+ "read-only": u.value,
4368
+ onNavigate: U(Rt),
4369
+ onCopy: n[20] ||= (e) => Ft.value = null,
4370
+ onEdit: U(zt),
4371
+ onRemove: U(Bt),
4372
+ onClose: n[21] ||= (e) => Ft.value = null
4373
+ }, null, 8, [
4374
+ "data",
4375
+ "read-only",
4376
+ "onNavigate",
4377
+ "onEdit",
4378
+ "onRemove"
4379
+ ])
4380
+ ], 544),
4381
+ !W.value && e.showOutlineButton ? (L(), D(Mn, {
4382
+ key: 0,
4383
+ "left-offset": e.showRuler ? 32 : 12,
4384
+ "top-px": e.showRuler ? 54 : 24,
4385
+ onToggle: U(dn)
4386
+ }, null, 8, [
4387
+ "left-offset",
4388
+ "top-px",
4389
+ "onToggle"
4390
+ ])) : O("", !0),
4391
+ U(Un).totalPages > 1 ? (L(), D(Nn, {
4392
+ key: 1,
4393
+ "current-page": U(Un).currentPage,
4394
+ "total-pages": U(Un).totalPages,
4395
+ visible: U(Un).visible
4396
+ }, null, 8, [
4397
+ "current-page",
4398
+ "total-pages",
4399
+ "visible"
4400
+ ])) : O("", !0),
4401
+ j(An, {
4402
+ "is-open": W.value,
4403
+ headings: ve.value,
4404
+ "left-offset": e.showRuler ? 32 : 12,
4405
+ "top-px": e.showRuler ? 54 : 24,
4406
+ onClose: n[28] ||= (e) => W.value = !1,
4407
+ onNavigate: U(fn)
4408
+ }, null, 8, [
4409
+ "is-open",
4410
+ "headings",
4411
+ "left-offset",
4412
+ "top-px",
4413
+ "onNavigate"
4414
+ ])
4415
+ ])], 32),
4416
+ A("input", {
4417
+ ref_key: "docxInputRef",
4418
+ ref: Et,
4419
+ type: "file",
4420
+ accept: ".docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document",
4421
+ style: { display: "none" },
4422
+ onChange: n[30] ||= (...e) => U(kt) && U(kt)(...e)
4423
+ }, null, 544),
4424
+ A("input", {
4425
+ ref_key: "imageInputRef",
4426
+ ref: Dt,
4427
+ type: "file",
4428
+ accept: "image/*",
4429
+ style: { display: "none" },
4430
+ onChange: n[31] ||= (...e) => U(Ot) && U(Ot)(...e)
4431
+ }, null, 544),
4432
+ j(si, {
4433
+ "read-only": u.value,
4434
+ "context-menu": U(nr),
4435
+ "image-context-menu": U(rr),
4436
+ "image-context-menu-text-actions": U(ir),
4437
+ "can-open-image-properties": !!U(jn),
4438
+ onContextMenuAction: U(cr),
4439
+ onCloseContextMenu: n[32] ||= (e) => U(nr).isOpen = !1,
4440
+ onImageWrapSelect: U(sr),
4441
+ onCloseImageContextMenu: n[33] ||= (e) => rr.value = null,
4442
+ onOpenImageProperties: n[34] ||= (e) => M.value = !0
4443
+ }, null, 8, [
4444
+ "read-only",
4445
+ "context-menu",
4446
+ "image-context-menu",
4447
+ "image-context-menu-text-actions",
4448
+ "can-open-image-properties",
4449
+ "onContextMenuAction",
4450
+ "onImageWrapSelect"
4451
+ ])
4452
+ ], 6));
4453
+ }
4454
+ });
4455
+ //#endregion
4456
+ //#region src/renderAsync.ts
4457
+ async function aa(e, t, n = {}) {
4458
+ let r = e instanceof ArrayBuffer ? e : await Ze(e), i = null, a = null, o = !1, s = {
4459
+ save: async () => {
4460
+ let e = await (i?.save() ?? Promise.resolve(null));
4461
+ return e ? new Blob([e], { type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" }) : null;
4462
+ },
4463
+ getDocument: () => i?.getDocument() ?? null,
4464
+ focus: () => {
4465
+ i?.focus();
4466
+ },
4467
+ setZoom: (e) => {
4468
+ i?.setZoom(e);
4469
+ },
4470
+ scrollToParaId: (e, t) => i?.scrollToParaId(e, t) ?? !1,
4471
+ scrollToPosition: (e) => {
4472
+ i?.scrollToPosition(e);
4473
+ },
4474
+ destroy: () => {
4475
+ i?.destroy(), a?.unmount(), a = null;
4476
+ }
4477
+ };
4478
+ return new Promise((e, c) => {
4479
+ a = ae({ setup() {
4480
+ return () => le(ia, {
4481
+ ...n,
4482
+ documentBuffer: r,
4483
+ showToolbar: n.showToolbar ?? !0,
4484
+ readOnly: n.readOnly ?? !1,
4485
+ ref: (e) => {
4486
+ i = e ?? null;
4487
+ },
4488
+ onReady: () => {
4489
+ n.onReady?.(), o || (o = !0, e(s));
4490
+ },
4491
+ onError: (e) => {
4492
+ n.onError?.(e), o || (o = !0, c(e));
4493
+ },
4494
+ onChange: n.onChange,
4495
+ onRename: n.onRename,
4496
+ onMenuAction: n.onMenuAction,
4497
+ onModeChange: n.onModeChange
4498
+ });
4499
+ } }), a.mount(t);
4500
+ });
4501
+ }
4502
+ //#endregion
4503
+ //#region src/index.ts
4504
+ var oa = "0.0.2";
4505
+ //#endregion
4506
+ export { ia as DocxEditor, oa as VERSION, rn as createDocumentWithText, an as createEmptyDocument, n as defaultLocale, t as i18nPlugin, a as provideLocale, aa as renderAsync, d as useTranslation };