@eigenpal/docx-editor-vue 1.3.2 → 1.4.0

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.
@@ -1,26 +1,26 @@
1
1
  import { computed as e, onBeforeUnmount as t, onMounted as n, ref as r, shallowRef as i, unref as a, watch as o } from "vue";
2
2
  import { EditorState as s } from "prosemirror-state";
3
3
  import { getColumns as c, getMargins as l, getPageSize as u, measureTableBlock as d, resolveHeaderFooter as f } from "@eigenpal/docx-editor-core/layout-bridge";
4
- import { schema as p } from "@eigenpal/docx-editor-core/prosemirror";
5
- import { applySdtFocus as m, buildBlockLookup as h, enclosingSdtGroupIds as g } from "@eigenpal/docx-editor-core/layout-painter";
6
- import { createEmptyDoc as _, headerFooterToProseDoc as v, proseDocToBlocks as y, toProseDoc as b } from "@eigenpal/docx-editor-core/prosemirror/conversion";
4
+ import { ensureParaIdsInState as p, schema as m } from "@eigenpal/docx-editor-core/prosemirror";
5
+ import { applySdtFocus as h, buildBlockLookup as g, enclosingSdtGroupIds as _ } from "@eigenpal/docx-editor-core/layout-painter";
6
+ import { createEmptyDoc as ee, headerFooterToProseDoc as v, proseDocToBlocks as y, toProseDoc as b } from "@eigenpal/docx-editor-core/prosemirror/conversion";
7
7
  import { EditorView as x } from "prosemirror-view";
8
- import { parseDocx as ee } from "@eigenpal/docx-editor-core/docx/parser";
9
- import { fromProseDoc as S } from "@eigenpal/docx-editor-core/prosemirror/conversion/fromProseDoc";
10
- import { singletonManager as C } from "@eigenpal/docx-editor-core/prosemirror/schema";
11
- import { createDocumentStylesPlugin as w, createSuggestionModePlugin as T, setSuggestionMode as E } from "@eigenpal/docx-editor-core/prosemirror/plugins";
12
- import { ExtensionManager as te, createStarterKit as ne } from "@eigenpal/docx-editor-core/prosemirror/extensions";
8
+ import { parseDocx as S } from "@eigenpal/docx-editor-core/docx/parser";
9
+ import { fromProseDoc as C } from "@eigenpal/docx-editor-core/prosemirror/conversion/fromProseDoc";
10
+ import { singletonManager as w } from "@eigenpal/docx-editor-core/prosemirror/schema";
11
+ import { createDocumentStylesPlugin as T, createSuggestionModePlugin as E, setSuggestionMode as te } from "@eigenpal/docx-editor-core/prosemirror/plugins";
12
+ import { ExtensionManager as ne, createStarterKit as re } from "@eigenpal/docx-editor-core/prosemirror/extensions";
13
13
  import { measureBlocksWithFloats as D, measureParagraph as O } from "@eigenpal/docx-editor-core/layout-bridge/measuring";
14
- import { computeLayout as re, createLayoutScheduler as k, stripScrollFlag as ie } from "@eigenpal/docx-editor-core/editor";
15
- import { DEFAULT_TEXTBOX_MARGINS as A, DEFAULT_TEXTBOX_WIDTH as j, assertExhaustiveFlowBlock as M } from "@eigenpal/docx-editor-core/layout-engine";
16
- import { renderPages as ae } from "@eigenpal/docx-editor-core/layout-painter/renderPage";
14
+ import { computeLayout as ie, createLayoutScheduler as ae, stripScrollFlag as oe } from "@eigenpal/docx-editor-core/editor";
15
+ import { DEFAULT_TEXTBOX_MARGINS as k, DEFAULT_TEXTBOX_WIDTH as A, assertExhaustiveFlowBlock as j } from "@eigenpal/docx-editor-core/layout-engine";
16
+ import { renderPages as se } from "@eigenpal/docx-editor-core/layout-painter/renderPage";
17
17
  import "prosemirror-view/style/prosemirror.css";
18
18
  import "@eigenpal/docx-editor-core/prosemirror/editor.css";
19
- import { MIN_CELL_WIDTH_TWIPS as N, MIN_ROW_HEIGHT_TWIPS as P, TWIPS_PER_PIXEL as F, commitColumnResize as oe, commitRightEdgeResize as I, commitRowResize as L, readColumnWidthAt as R, readColumnWidths as z, readRowHeight as B } from "@eigenpal/docx-editor-core/prosemirror/tableResize";
19
+ import { MIN_CELL_WIDTH_TWIPS as M, MIN_ROW_HEIGHT_TWIPS as N, TWIPS_PER_PIXEL as P, commitColumnResize as F, commitRightEdgeResize as I, commitRowResize as L, readColumnWidthAt as R, readColumnWidths as z, readRowHeight as B } from "@eigenpal/docx-editor-core/prosemirror/tableResize";
20
20
  import { findVerticalScrollParent as V } from "@eigenpal/docx-editor-core/utils/findVerticalScrollParent";
21
21
  import { AUTO_SCROLL_EDGE_ZONE as H, computeAutoScrollDelta as U } from "@eigenpal/docx-editor-core/utils/autoScroll";
22
22
  //#region src/composables/useDocxEditor.ts
23
- var se = 24;
23
+ var ce = 24;
24
24
  function W(e, t, n, r) {
25
25
  switch (e.kind) {
26
26
  case "paragraph": return O(e, t, {
@@ -37,10 +37,10 @@ function W(e, t, n, r) {
37
37
  };
38
38
  }
39
39
  case "textBox": {
40
- let t = e, n = t.margins ?? A, r = (t.width ?? j) - n.left - n.right, i = t.content.map((e) => O(e, r)), a = i.reduce((e, t) => e + t.totalHeight, 0), o = t.height ?? a + n.top + n.bottom;
40
+ let t = e, n = t.margins ?? k, r = (t.width ?? A) - n.left - n.right, i = t.content.map((e) => O(e, r)), a = i.reduce((e, t) => e + t.totalHeight, 0), o = t.height ?? a + n.top + n.bottom;
41
41
  return {
42
42
  kind: "textBox",
43
- width: t.width ?? j,
43
+ width: t.width ?? A,
44
44
  height: o,
45
45
  innerMeasures: i
46
46
  };
@@ -48,125 +48,129 @@ function W(e, t, n, r) {
48
48
  case "pageBreak": return { kind: "pageBreak" };
49
49
  case "columnBreak": return { kind: "columnBreak" };
50
50
  case "sectionBreak": return { kind: "sectionBreak" };
51
- default: M(e, "vue useDocxEditor measureBlock");
51
+ default: j(e, "vue useDocxEditor measureBlock");
52
52
  }
53
53
  }
54
- function ce(e, t, n) {
54
+ function le(e, t, n) {
55
55
  return D(e, t, W, n);
56
56
  }
57
57
  function G(e) {
58
- let { hiddenContainer: n, pagesContainer: d, readOnly: D = !1, pageGap: O = se, onChange: A, onError: j, onSelectionUpdate: M, externalPlugins: N = [], syncCoordinator: P, editorMode: F, author: oe } = e, I = i(null), L = i(null), R = i(null), z = r(!1), B = r(null), V = i(null), H = C;
58
+ let { hiddenContainer: n, pagesContainer: d, readOnly: D = !1, pageGap: O = ce, onChange: k, onError: A, onSelectionUpdate: j, externalPlugins: M = [], syncCoordinator: N, editorMode: P, author: F } = e, I = i(null), L = i(null), R = i(null), z = r(!1), B = r(null), V = i(null), H = w;
59
59
  function U(e) {
60
60
  let t = d.value;
61
61
  if (!t || !I.value) return;
62
- let n = P?.getStateSeq() ?? 0;
63
- P?.onLayoutStart();
64
- let r = I.value.package?.document, i = r?.sections?.[0]?.properties ?? r?.finalSectionProperties ?? null, a = r?.finalSectionProperties ?? i, o = u(i), s = l(i), p = u(a), _ = l(a), v = c(i), y = c(a), b = o.w - s.left - s.right, x = I.value.package?.theme ?? null, ee = I.value.package?.styles ?? null;
62
+ let n = N?.getStateSeq() ?? 0;
63
+ N?.onLayoutStart();
64
+ let r = I.value.package?.document, i = r?.sections?.[0]?.properties ?? r?.finalSectionProperties ?? null, a = r?.finalSectionProperties ?? i, o = u(i), s = l(i), p = u(a), m = l(a), ee = c(i), v = c(a), y = o.w - s.left - s.right, b = I.value.package?.theme ?? null, x = I.value.package?.styles ?? null;
65
65
  try {
66
- let { header: n, footer: r, firstHeader: c, firstFooter: l } = f(I.value, i), { blocks: u, measures: d, layout: S, headerContentForRender: C, footerContentForRender: w, firstPageHeaderForRender: T, firstPageFooterForRender: E, hasTitlePg: te, watermark: ne, footnotesByPage: D } = re({
66
+ let { header: n, footer: r, firstHeader: c, firstFooter: l } = f(I.value, i), { blocks: u, measures: d, layout: S, headerContentForRender: C, footerContentForRender: w, firstPageHeaderForRender: T, firstPageFooterForRender: E, hasTitlePg: te, watermark: ne, footnotesByPage: re } = ie({
67
67
  state: e,
68
68
  document: I.value,
69
69
  pageSize: o,
70
70
  margins: s,
71
- columns: v,
71
+ columns: ee,
72
72
  finalPageSize: p,
73
- finalMargins: _,
74
- finalColumns: y,
73
+ finalMargins: m,
74
+ finalColumns: v,
75
75
  pageGap: O,
76
- contentWidth: b,
77
- theme: x,
78
- styles: ee,
76
+ contentWidth: y,
77
+ theme: b,
78
+ styles: x,
79
79
  sectionProperties: i,
80
80
  finalSectionProperties: a,
81
81
  headerContent: n,
82
82
  footerContent: r,
83
83
  firstPageHeaderContent: c,
84
84
  firstPageFooterContent: l,
85
- measureBlocks: ce,
85
+ measureBlocks: le,
86
86
  getHfPmDoc: (e) => X(e)?.state.doc ?? null
87
87
  });
88
88
  V.value = S;
89
- let k = h(u, d);
90
- ae(S.pages, t, {
89
+ let D = g(u, d);
90
+ se(S.pages, t, {
91
91
  pageGap: O,
92
92
  showShadow: !0,
93
93
  pageBackground: "#fff",
94
- blockLookup: k,
95
- theme: x,
94
+ blockLookup: D,
95
+ theme: b,
96
96
  headerContent: C,
97
97
  footerContent: w,
98
98
  firstPageHeaderContent: T,
99
99
  firstPageFooterContent: E,
100
100
  titlePage: te,
101
101
  watermark: ne,
102
- footnotesByPage: D
102
+ footnotesByPage: re
103
103
  }), t.style.overflowY = "auto", t.style.minHeight = "0";
104
104
  for (let e of Array.from(t.children)) e.style.flexShrink = "0";
105
- m(t, g(e.doc, e.selection.from, e.selection.to));
105
+ h(t, _(e.doc, e.selection.from, e.selection.to));
106
106
  } catch (e) {
107
- console.error("[useDocxEditor] Layout pipeline error:", e), j?.(e instanceof Error ? e : Error(String(e)));
107
+ console.error("[useDocxEditor] Layout pipeline error:", e), A?.(e instanceof Error ? e : Error(String(e)));
108
108
  } finally {
109
- P?.onLayoutComplete(n);
109
+ N?.onLayoutComplete(n);
110
110
  }
111
111
  }
112
- let W = k(U);
112
+ let W = ae(U);
113
113
  function G() {
114
114
  let e = n.value;
115
115
  if (!e) return;
116
- let t = I.value?.package?.styles, r = I.value ? b(I.value, { styles: t ?? void 0 }) : _(), i = T(!1), o = w(t), c = [
116
+ let t = I.value?.package?.styles, r = I.value ? b(I.value, { styles: t ?? void 0 }) : ee(), i = E(!1), o = T(t), c = [
117
117
  i,
118
- ...N,
118
+ ...M,
119
119
  ...H.getPlugins() ?? [],
120
120
  o
121
- ], l = s.create({
121
+ ], l = p(s.create({
122
122
  doc: r,
123
123
  schema: H.getSchema(),
124
124
  plugins: c
125
- });
126
- R.value = l;
125
+ }));
126
+ if (R.value = l, I.value) try {
127
+ I.value = C(l.doc, I.value);
128
+ } catch (e) {
129
+ console.error("[useDocxEditor] paraId cache sync error:", e);
130
+ }
127
131
  let u = new x(e, {
128
132
  state: l,
129
133
  editable: () => !a(D),
130
134
  dispatchTransaction(e) {
131
135
  if (!u) return;
132
- ie(e, u.state.tr);
136
+ oe(e, u.state.tr);
133
137
  let t = u.state.apply(e);
134
138
  if (u.updateState(t), R.value = t, e.docChanged) {
135
- P?.incrementStateSeq(), W.schedule(t);
139
+ N?.incrementStateSeq(), W.schedule(t);
136
140
  try {
137
141
  if (I.value) {
138
- let e = S(t.doc, I.value);
139
- I.value = e, A?.(e);
142
+ let e = C(t.doc, I.value);
143
+ I.value = e, k?.(e);
140
144
  }
141
145
  } catch (e) {
142
146
  console.error("[useDocxEditor] fromProseDoc error:", e);
143
147
  }
144
148
  }
145
- if (P?.requestRender(), M?.(), !e.docChanged) {
149
+ if (N?.requestRender(), j?.(), !e.docChanged) {
146
150
  let e = d.value;
147
- e && m(e, g(t.doc, t.selection.from, t.selection.to));
151
+ e && h(e, _(t.doc, t.selection.from, t.selection.to));
148
152
  }
149
153
  }
150
154
  });
151
- L.value = u, z.value = !0, U(l), P?.requestRender();
155
+ L.value = u, z.value = !0, U(l), N?.requestRender();
152
156
  }
153
157
  o([
158
+ () => a(P),
154
159
  () => a(F),
155
- () => a(oe),
156
160
  L
157
161
  ], ([e, t, n]) => {
158
- n && E(e === "suggesting", n.state, n.dispatch, t);
162
+ n && te(e === "suggesting", n.state, n.dispatch, t);
159
163
  }, { immediate: !0 });
160
164
  function K() {
161
165
  W.cancel(), L.value &&= (L.value.destroy(), null), R.value = null, z.value = !1;
162
166
  }
163
167
  let q = { current: null }, J = /* @__PURE__ */ new Map(), Y = /* @__PURE__ */ new Map();
164
- function le() {
168
+ function ue() {
165
169
  if (q.current && q.current.isConnected) return q.current;
166
170
  let e = window.document.createElement("div");
167
171
  return e.dataset.hfHost = "true", e.style.cssText = "position: fixed; left: -9999px; top: 0; opacity: 0; z-index: -1; pointer-events: none;", window.document.body.appendChild(e), q.current = e, e;
168
172
  }
169
- function ue(e) {
173
+ function de(e) {
170
174
  let t = I.value?.package;
171
175
  if (!t) return null;
172
176
  if (t.headers) {
@@ -178,11 +182,11 @@ function G(e) {
178
182
  return null;
179
183
  }
180
184
  function X(e) {
181
- let t = ue(e);
185
+ let t = de(e);
182
186
  return t ? J.get(t) ?? null : null;
183
187
  }
184
188
  function Z() {
185
- let e = I.value?.package, t = le(), n = /* @__PURE__ */ new Set();
189
+ let e = I.value?.package, t = ue(), n = /* @__PURE__ */ new Set();
186
190
  if (e?.headers) for (let t of e.headers.keys()) n.add(t);
187
191
  if (e?.footers) for (let t of e.footers.keys()) n.add(t);
188
192
  for (let [e, t] of J) n.has(e) || (t.destroy(), t.dom.parentElement?.remove(), Y.get(e)?.destroy(), Y.delete(e), J.delete(e));
@@ -192,7 +196,7 @@ function G(e) {
192
196
  if (J.has(o)) continue;
193
197
  let n = e.headers?.get(o) ?? e.footers?.get(o);
194
198
  if (!n) continue;
195
- let c = e.headers?.has(o) ? "header" : "footer", l = new te(ne());
199
+ let c = e.headers?.has(o) ? "header" : "footer", l = new ne(re());
196
200
  l.buildSchema(), l.initializeRuntime(), Y.set(o, l);
197
201
  let u = window.document.createElement("div");
198
202
  u.dataset.hfRId = o, u.dataset.hfKind = c, t.appendChild(u);
@@ -200,12 +204,12 @@ function G(e) {
200
204
  styles: r ?? void 0,
201
205
  theme: i,
202
206
  defaultTabStopTwips: a
203
- }), f = w(r), m = s.create({
207
+ }), f = T(r), p = s.create({
204
208
  doc: d,
205
- schema: p,
209
+ schema: m,
206
210
  plugins: [...l.getPlugins(), f]
207
211
  }), h = c, g = new x(u, {
208
- state: m,
212
+ state: p,
209
213
  dispatchTransaction(e) {
210
214
  let t = g.state.apply(e);
211
215
  if (g.updateState(t), e.docChanged) {
@@ -225,42 +229,42 @@ function G(e) {
225
229
  Y.clear(), q.current &&= (q.current.remove(), null);
226
230
  }
227
231
  let $ = { value: null };
228
- function de(e) {
232
+ function fe(e) {
229
233
  $.value = e;
230
234
  }
231
- async function fe(e) {
235
+ async function pe(e) {
232
236
  B.value = null, z.value = !1;
233
237
  try {
234
238
  let t;
235
- t = e instanceof Blob || e instanceof File ? await e.arrayBuffer() : e instanceof Uint8Array ? e.buffer.slice(e.byteOffset, e.byteOffset + e.byteLength) : e, I.value = await ee(t), K(), Q(), G(), Z();
239
+ t = e instanceof Blob || e instanceof File ? await e.arrayBuffer() : e instanceof Uint8Array ? e.buffer.slice(e.byteOffset, e.byteOffset + e.byteLength) : e, I.value = await S(t), K(), Q(), G(), Z();
236
240
  } catch (e) {
237
241
  let t = e instanceof Error ? e : Error(String(e));
238
- B.value = t.message, j?.(t);
242
+ B.value = t.message, A?.(t);
239
243
  }
240
244
  }
241
- function pe(e) {
245
+ function me(e) {
242
246
  B.value = null, I.value = e, K(), Q(), G(), Z();
243
247
  }
244
- async function me() {
248
+ async function he() {
245
249
  if (!L.value || !I.value) return null;
246
- let { repackDocx: e, createDocx: t } = await import("@eigenpal/docx-editor-core/docx/rezip"), { injectReplyRangeMarkers: n, injectTCReplyRangeMarkers: r } = await import("@eigenpal/docx-editor-core/docx"), i = S(L.value.state.doc, I.value), a = i.package.document?.comments ?? [];
250
+ let { repackDocx: e, createDocx: t } = await import("@eigenpal/docx-editor-core/docx/rezip"), { injectReplyRangeMarkers: n, injectTCReplyRangeMarkers: r } = await import("@eigenpal/docx-editor-core/docx"), i = C(L.value.state.doc, I.value), a = i.package.document?.comments ?? [];
247
251
  i.package.document?.content && a.length > 0 && (n(i.package.document.content, a), r(i.package.document.content, a));
248
252
  let o;
249
253
  return o = i.originalBuffer ? await e(i) : await t(i), new Blob([o], { type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" });
250
254
  }
251
- function he() {
255
+ function ge() {
252
256
  L.value?.focus();
253
257
  }
254
- function ge() {
258
+ function _e() {
255
259
  K(), Q(), I.value = null;
256
260
  }
257
- function _e() {
261
+ function ve() {
258
262
  return I.value;
259
263
  }
260
264
  t(() => {
261
- ge();
265
+ _e();
262
266
  });
263
- function ve() {
267
+ function ye() {
264
268
  return H.getCommands();
265
269
  }
266
270
  return {
@@ -269,19 +273,19 @@ function G(e) {
269
273
  isReady: z,
270
274
  parseError: B,
271
275
  layout: V,
272
- loadBuffer: fe,
273
- loadDocument: pe,
274
- save: me,
275
- focus: he,
276
- destroy: ge,
277
- getDocument: _e,
278
- getCommands: ve,
276
+ loadBuffer: pe,
277
+ loadDocument: me,
278
+ save: he,
279
+ focus: ge,
280
+ destroy: _e,
281
+ getDocument: ve,
282
+ getCommands: ye,
279
283
  reLayout() {
280
284
  L.value && U(L.value.state);
281
285
  },
282
286
  getHfPmView: X,
283
287
  syncHfPMs: Z,
284
- setHfTransactionListener: de,
288
+ setHfTransactionListener: fe,
285
289
  setDocument(e) {
286
290
  I.value = e;
287
291
  }
@@ -300,7 +304,7 @@ var K = .25, q = 4, J = .1, Y = [
300
304
  3,
301
305
  4
302
306
  ];
303
- function le(i = 1) {
307
+ function ue(i = 1) {
304
308
  let a = r(Math.max(K, Math.min(q, i))), o = e(() => Math.round(a.value * 100)), s = e(() => a.value <= K), c = e(() => a.value >= q);
305
309
  function l(e) {
306
310
  a.value = Math.max(K, Math.min(q, Math.round(e * 100) / 100));
@@ -340,7 +344,7 @@ function le(i = 1) {
340
344
  }
341
345
  //#endregion
342
346
  //#region src/composables/useTableResize.ts
343
- function ue() {
347
+ function de() {
344
348
  let e = {
345
349
  active: !1,
346
350
  startX: 0,
@@ -379,8 +383,8 @@ function ue() {
379
383
  r.preventDefault();
380
384
  let t = r.clientX - e.startX, n = parseFloat(e.handle.style.left);
381
385
  e.handle.style.left = `${n + t}px`, e.startX = r.clientX;
382
- let i = Math.round(t * F), a = e.origWidths.left + i, o = e.origWidths.right - i;
383
- a >= N && o >= N && (e.origWidths = {
386
+ let i = Math.round(t * P), a = e.origWidths.left + i, o = e.origWidths.right - i;
387
+ a >= M && o >= M && (e.origWidths = {
384
388
  left: a,
385
389
  right: o
386
390
  });
@@ -390,21 +394,21 @@ function ue() {
390
394
  r.preventDefault();
391
395
  let e = r.clientY - t.startY, n = parseFloat(t.handle.style.top);
392
396
  t.handle.style.top = `${n + e}px`, t.startY = r.clientY;
393
- let i = Math.round(e * F), a = t.origHeight + i;
394
- a >= P && (t.origHeight = a);
397
+ let i = Math.round(e * P), a = t.origHeight + i;
398
+ a >= N && (t.origHeight = a);
395
399
  return;
396
400
  }
397
401
  if (n.active && n.handle) {
398
402
  r.preventDefault();
399
403
  let e = r.clientX - n.startX, t = parseFloat(n.handle.style.left);
400
404
  n.handle.style.left = `${t + e}px`, n.startX = r.clientX;
401
- let i = Math.round(e * F), a = n.origWidth + i;
402
- a >= N && (n.origWidth = a);
405
+ let i = Math.round(e * P), a = n.origWidth + i;
406
+ a >= M && (n.origWidth = a);
403
407
  }
404
408
  }
405
409
  function s(i) {
406
410
  if (e.active) {
407
- e.active = !1, e.handle?.classList.remove("dragging"), r && oe(r, {
411
+ e.active = !1, e.handle?.classList.remove("dragging"), r && F(r, {
408
412
  pmStart: e.tablePmStart,
409
413
  colIdx: e.columnIndex,
410
414
  newLeft: e.origWidths.left,
@@ -448,7 +452,7 @@ function Z(e, t, n) {
448
452
  return;
449
453
  }
450
454
  let i = n.closest(".layout-table")?.querySelector(`[data-row-index="${t.rowIndex}"]`), a = i ? i.getBoundingClientRect().height : 30;
451
- t.origHeight = Math.round(a * F);
455
+ t.origHeight = Math.round(a * P);
452
456
  }
453
457
  function Q(e, t) {
454
458
  let n = R(e, t.tablePmStart, t.columnIndex);
@@ -490,4 +494,4 @@ function $({ pagesContainer: e, onScrollExtendSelection: n }) {
490
494
  };
491
495
  }
492
496
  //#endregion
493
- export { G as i, ue as n, le as r, $ as t };
497
+ export { G as i, de as n, ue as r, $ as t };
@@ -0,0 +1 @@
1
+ let e=require(`vue`),t=require(`prosemirror-state`),n=require(`@eigenpal/docx-editor-core/layout-bridge`),r=require(`@eigenpal/docx-editor-core/prosemirror`),i=require(`@eigenpal/docx-editor-core/layout-painter`),a=require(`@eigenpal/docx-editor-core/prosemirror/conversion`),o=require(`prosemirror-view`),s=require(`@eigenpal/docx-editor-core/docx/parser`),c=require(`@eigenpal/docx-editor-core/prosemirror/conversion/fromProseDoc`),l=require(`@eigenpal/docx-editor-core/prosemirror/schema`),u=require(`@eigenpal/docx-editor-core/prosemirror/plugins`),d=require(`@eigenpal/docx-editor-core/prosemirror/extensions`),f=require(`@eigenpal/docx-editor-core/layout-bridge/measuring`),p=require(`@eigenpal/docx-editor-core/editor`),m=require(`@eigenpal/docx-editor-core/layout-engine`),h=require(`@eigenpal/docx-editor-core/layout-painter/renderPage`);require(`prosemirror-view/style/prosemirror.css`),require(`@eigenpal/docx-editor-core/prosemirror/editor.css`);let g=require(`@eigenpal/docx-editor-core/prosemirror/tableResize`),_=require(`@eigenpal/docx-editor-core/utils/findVerticalScrollParent`),v=require(`@eigenpal/docx-editor-core/utils/autoScroll`);var y=24;function b(e,t,r,i){switch(e.kind){case`paragraph`:return(0,f.measureParagraph)(e,t,{floatingZones:r,paragraphYOffset:i??0});case`table`:return(0,n.measureTableBlock)(e,t,b);case`image`:{let t=e;return{kind:`image`,width:t.width??100,height:t.height??100}}case`textBox`:{let t=e,n=t.margins??m.DEFAULT_TEXTBOX_MARGINS,r=(t.width??m.DEFAULT_TEXTBOX_WIDTH)-n.left-n.right,i=t.content.map(e=>(0,f.measureParagraph)(e,r)),a=i.reduce((e,t)=>e+t.totalHeight,0),o=t.height??a+n.top+n.bottom;return{kind:`textBox`,width:t.width??m.DEFAULT_TEXTBOX_WIDTH,height:o,innerMeasures:i}}case`pageBreak`:return{kind:`pageBreak`};case`columnBreak`:return{kind:`columnBreak`};case`sectionBreak`:return{kind:`sectionBreak`};default:(0,m.assertExhaustiveFlowBlock)(e,`vue useDocxEditor measureBlock`)}}function x(e,t,n){return(0,f.measureBlocksWithFloats)(e,t,b,n)}function S(f){let{hiddenContainer:m,pagesContainer:g,readOnly:_=!1,pageGap:v=y,onChange:b,onError:S,onSelectionUpdate:C,externalPlugins:w=[],syncCoordinator:T,editorMode:E,author:D}=f,O=(0,e.shallowRef)(null),k=(0,e.shallowRef)(null),A=(0,e.shallowRef)(null),j=(0,e.ref)(!1),M=(0,e.ref)(null),N=(0,e.shallowRef)(null),P=l.singletonManager;function F(e){let t=g.value;if(!t||!O.value)return;let r=T?.getStateSeq()??0;T?.onLayoutStart();let a=O.value.package?.document,o=a?.sections?.[0]?.properties??a?.finalSectionProperties??null,s=a?.finalSectionProperties??o,c=(0,n.getPageSize)(o),l=(0,n.getMargins)(o),u=(0,n.getPageSize)(s),d=(0,n.getMargins)(s),f=(0,n.getColumns)(o),m=(0,n.getColumns)(s),_=c.w-l.left-l.right,y=O.value.package?.theme??null,b=O.value.package?.styles??null;try{let{header:r,footer:a,firstHeader:g,firstFooter:S}=(0,n.resolveHeaderFooter)(O.value,o),{blocks:C,measures:w,layout:T,headerContentForRender:E,footerContentForRender:D,firstPageHeaderForRender:k,firstPageFooterForRender:A,hasTitlePg:j,watermark:M,footnotesByPage:P}=(0,p.computeLayout)({state:e,document:O.value,pageSize:c,margins:l,columns:f,finalPageSize:u,finalMargins:d,finalColumns:m,pageGap:v,contentWidth:_,theme:y,styles:b,sectionProperties:o,finalSectionProperties:s,headerContent:r,footerContent:a,firstPageHeaderContent:g,firstPageFooterContent:S,measureBlocks:x,getHfPmDoc:e=>W(e)?.state.doc??null});N.value=T;let F=(0,i.buildBlockLookup)(C,w);(0,h.renderPages)(T.pages,t,{pageGap:v,showShadow:!0,pageBackground:`#fff`,blockLookup:F,theme:y,headerContent:E,footerContent:D,firstPageHeaderContent:k,firstPageFooterContent:A,titlePage:j,watermark:M,footnotesByPage:P}),t.style.overflowY=`auto`,t.style.minHeight=`0`;for(let e of Array.from(t.children))e.style.flexShrink=`0`;(0,i.applySdtFocus)(t,(0,i.enclosingSdtGroupIds)(e.doc,e.selection.from,e.selection.to))}catch(e){console.error(`[useDocxEditor] Layout pipeline error:`,e),S?.(e instanceof Error?e:Error(String(e)))}finally{T?.onLayoutComplete(r)}}let I=(0,p.createLayoutScheduler)(F);function L(){let n=m.value;if(!n)return;let s=O.value?.package?.styles,l=O.value?(0,a.toProseDoc)(O.value,{styles:s??void 0}):(0,a.createEmptyDoc)(),d=(0,u.createSuggestionModePlugin)(!1),f=(0,u.createDocumentStylesPlugin)(s),h=[d,...w,...P.getPlugins()??[],f],v=(0,r.ensureParaIdsInState)(t.EditorState.create({doc:l,schema:P.getSchema(),plugins:h}));if(A.value=v,O.value)try{O.value=(0,c.fromProseDoc)(v.doc,O.value)}catch(e){console.error(`[useDocxEditor] paraId cache sync error:`,e)}let y=new o.EditorView(n,{state:v,editable:()=>!(0,e.unref)(_),dispatchTransaction(e){if(!y)return;(0,p.stripScrollFlag)(e,y.state.tr);let t=y.state.apply(e);if(y.updateState(t),A.value=t,e.docChanged){T?.incrementStateSeq(),I.schedule(t);try{if(O.value){let e=(0,c.fromProseDoc)(t.doc,O.value);O.value=e,b?.(e)}}catch(e){console.error(`[useDocxEditor] fromProseDoc error:`,e)}}if(T?.requestRender(),C?.(),!e.docChanged){let e=g.value;e&&(0,i.applySdtFocus)(e,(0,i.enclosingSdtGroupIds)(t.doc,t.selection.from,t.selection.to))}}});k.value=y,j.value=!0,F(v),T?.requestRender()}(0,e.watch)([()=>(0,e.unref)(E),()=>(0,e.unref)(D),k],([e,t,n])=>{n&&(0,u.setSuggestionMode)(e===`suggesting`,n.state,n.dispatch,t)},{immediate:!0});function R(){I.cancel(),k.value&&=(k.value.destroy(),null),A.value=null,j.value=!1}let z={current:null},B=new Map,V=new Map;function H(){if(z.current&&z.current.isConnected)return z.current;let e=window.document.createElement(`div`);return e.dataset.hfHost=`true`,e.style.cssText=`position: fixed; left: -9999px; top: 0; opacity: 0; z-index: -1; pointer-events: none;`,window.document.body.appendChild(e),z.current=e,e}function U(e){let t=O.value?.package;if(!t)return null;if(t.headers){for(let[n,r]of t.headers)if(r===e)return n}if(t.footers){for(let[n,r]of t.footers)if(r===e)return n}return null}function W(e){let t=U(e);return t?B.get(t)??null:null}function G(){let e=O.value?.package,n=H(),i=new Set;if(e?.headers)for(let t of e.headers.keys())i.add(t);if(e?.footers)for(let t of e.footers.keys())i.add(t);for(let[e,t]of B)i.has(e)||(t.destroy(),t.dom.parentElement?.remove(),V.get(e)?.destroy(),V.delete(e),B.delete(e));if(!e)return;let s=e.styles??null,c=e.theme??null,l=e.settings?.defaultTabStop??null;for(let f of i){if(B.has(f))continue;let i=e.headers?.get(f)??e.footers?.get(f);if(!i)continue;let p=e.headers?.has(f)?`header`:`footer`,m=new d.ExtensionManager((0,d.createStarterKit)());m.buildSchema(),m.initializeRuntime(),V.set(f,m);let h=window.document.createElement(`div`);h.dataset.hfRId=f,h.dataset.hfKind=p,n.appendChild(h);let g=(0,a.headerFooterToProseDoc)(i.content,{styles:s??void 0,theme:c,defaultTabStopTwips:l}),_=(0,u.createDocumentStylesPlugin)(s),v=t.EditorState.create({doc:g,schema:r.schema,plugins:[...m.getPlugins(),_]}),y=p,b=new o.EditorView(h,{state:v,dispatchTransaction(e){let t=b.state.apply(e);if(b.updateState(t),e.docChanged){let e=O.value?.package,n=(y===`header`?e?.headers:e?.footers)?.get(f);n&&(n.content=(0,a.proseDocToBlocks)(t.doc))}e.docChanged&&A.value&&F(A.value),q.value?.(f,b,e.docChanged)}});B.set(f,b)}}function K(){for(let e of B.values())e.destroy(),e.dom.parentElement?.remove();B.clear();for(let e of V.values())e.destroy();V.clear(),z.current&&=(z.current.remove(),null)}let q={value:null};function J(e){q.value=e}async function Y(e){M.value=null,j.value=!1;try{let t;t=e instanceof Blob||e instanceof File?await e.arrayBuffer():e instanceof Uint8Array?e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength):e,O.value=await(0,s.parseDocx)(t),R(),K(),L(),G()}catch(e){let t=e instanceof Error?e:Error(String(e));M.value=t.message,S?.(t)}}function X(e){M.value=null,O.value=e,R(),K(),L(),G()}async function Z(){if(!k.value||!O.value)return null;let{repackDocx:e,createDocx:t}=await import(`@eigenpal/docx-editor-core/docx/rezip`),{injectReplyRangeMarkers:n,injectTCReplyRangeMarkers:r}=await import(`@eigenpal/docx-editor-core/docx`),i=(0,c.fromProseDoc)(k.value.state.doc,O.value),a=i.package.document?.comments??[];i.package.document?.content&&a.length>0&&(n(i.package.document.content,a),r(i.package.document.content,a));let o;return o=i.originalBuffer?await e(i):await t(i),new Blob([o],{type:`application/vnd.openxmlformats-officedocument.wordprocessingml.document`})}function Q(){k.value?.focus()}function $(){R(),K(),O.value=null}function ee(){return O.value}(0,e.onBeforeUnmount)(()=>{$()});function te(){return P.getCommands()}return{editorView:k,editorState:A,isReady:j,parseError:M,layout:N,loadBuffer:Y,loadDocument:X,save:Z,focus:Q,destroy:$,getDocument:ee,getCommands:te,reLayout(){k.value&&F(k.value.state)},getHfPmView:W,syncHfPMs:G,setHfTransactionListener:J,setDocument(e){O.value=e}}}var C=.25,w=4,T=.1,E=[.25,.5,.75,1,1.25,1.5,2,3,4];function D(t=1){let n=(0,e.ref)(Math.max(C,Math.min(w,t))),r=(0,e.computed)(()=>Math.round(n.value*100)),i=(0,e.computed)(()=>n.value<=C),a=(0,e.computed)(()=>n.value>=w);function o(e){n.value=Math.max(C,Math.min(w,Math.round(e*100)/100))}function s(){o(n.value+T)}function c(){o(n.value-T)}function l(){o(1)}function u(e){(e.ctrlKey||e.metaKey)&&(e.preventDefault(),e.deltaY<0?s():c())}function d(e){(e.ctrlKey||e.metaKey)&&(e.shiftKey||e.altKey||(e.key===`=`||e.key===`+`?(e.preventDefault(),s()):e.key===`-`?(e.preventDefault(),c()):e.key===`0`&&(e.preventDefault(),l())))}function f(){(0,e.onMounted)(()=>document.addEventListener(`keydown`,d)),(0,e.onBeforeUnmount)(()=>document.removeEventListener(`keydown`,d))}return{zoom:n,zoomPercent:r,isMinZoom:i,isMaxZoom:a,setZoom:o,zoomIn:s,zoomOut:c,resetZoom:l,handleWheel:u,handleKeyDown:d,installShortcuts:f,ZOOM_PRESETS:E}}function O(){let e={active:!1,startX:0,handle:null,columnIndex:0,tablePmStart:0,origWidths:{left:0,right:0}},t={active:!1,startY:0,handle:null,rowIndex:0,isEdge:!1,tablePmStart:0,origHeight:0},n={active:!1,startX:0,handle:null,columnIndex:0,tablePmStart:0,origWidth:0},r=null;function i(){return e.active||t.active||n.active}function a(i,a){let o=i.target;return o?.classList?o.classList.contains(`layout-table-resize-handle`)?(i.preventDefault(),i.stopPropagation(),r=a,e.active=!0,e.startX=i.clientX,e.handle=o,o.classList.add(`dragging`),e.columnIndex=parseInt(o.dataset.columnIndex??`0`,10),e.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),k(a,e),!0):o.classList.contains(`layout-table-row-resize-handle`)||o.classList.contains(`layout-table-edge-handle-bottom`)?(i.preventDefault(),i.stopPropagation(),r=a,t.active=!0,t.startY=i.clientY,t.handle=o,t.isEdge=o.dataset.isEdge===`bottom`,o.classList.add(`dragging`),t.rowIndex=parseInt(o.dataset.rowIndex??`0`,10),t.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),A(a,t,o),!0):o.classList.contains(`layout-table-edge-handle-right`)?(i.preventDefault(),i.stopPropagation(),r=a,n.active=!0,n.startX=i.clientX,n.handle=o,o.classList.add(`dragging`),n.columnIndex=parseInt(o.dataset.columnIndex??`0`,10),n.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),j(a,n),!0):!1:!1}function o(r){if(e.active&&e.handle){r.preventDefault();let t=r.clientX-e.startX,n=parseFloat(e.handle.style.left);e.handle.style.left=`${n+t}px`,e.startX=r.clientX;let i=Math.round(t*g.TWIPS_PER_PIXEL),a=e.origWidths.left+i,o=e.origWidths.right-i;a>=g.MIN_CELL_WIDTH_TWIPS&&o>=g.MIN_CELL_WIDTH_TWIPS&&(e.origWidths={left:a,right:o});return}if(t.active&&t.handle){r.preventDefault();let e=r.clientY-t.startY,n=parseFloat(t.handle.style.top);t.handle.style.top=`${n+e}px`,t.startY=r.clientY;let i=Math.round(e*g.TWIPS_PER_PIXEL),a=t.origHeight+i;a>=g.MIN_ROW_HEIGHT_TWIPS&&(t.origHeight=a);return}if(n.active&&n.handle){r.preventDefault();let e=r.clientX-n.startX,t=parseFloat(n.handle.style.left);n.handle.style.left=`${t+e}px`,n.startX=r.clientX;let i=Math.round(e*g.TWIPS_PER_PIXEL),a=n.origWidth+i;a>=g.MIN_CELL_WIDTH_TWIPS&&(n.origWidth=a)}}function s(i){if(e.active){e.active=!1,e.handle?.classList.remove(`dragging`),r&&(0,g.commitColumnResize)(r,{pmStart:e.tablePmStart,colIdx:e.columnIndex,newLeft:e.origWidths.left,newRight:e.origWidths.right}),e.handle=null;return}if(t.active){t.active=!1,t.handle?.classList.remove(`dragging`),r&&(0,g.commitRowResize)(r,{pmStart:t.tablePmStart,rowIdx:t.rowIndex,newHeight:t.origHeight}),t.handle=null;return}n.active&&(n.active=!1,n.handle?.classList.remove(`dragging`),r&&(0,g.commitRightEdgeResize)(r,{pmStart:n.tablePmStart,colIdx:n.columnIndex,newWidth:n.origWidth}),n.handle=null)}function c(){return document.addEventListener(`mousemove`,o),document.addEventListener(`mouseup`,s),()=>{document.removeEventListener(`mousemove`,o),document.removeEventListener(`mouseup`,s)}}return{tryStartResize:a,install:c,isResizing:i}}function k(e,t){let n=(0,g.readColumnWidths)(e,t.tablePmStart,t.columnIndex);n&&(t.origWidths=n)}function A(e,t,n){let r=(0,g.readRowHeight)(e,t.tablePmStart,t.rowIndex);if(r!=null){t.origHeight=r;return}let i=n.closest(`.layout-table`)?.querySelector(`[data-row-index="${t.rowIndex}"]`),a=i?i.getBoundingClientRect().height:30;t.origHeight=Math.round(a*g.TWIPS_PER_PIXEL)}function j(e,t){let n=(0,g.readColumnWidthAt)(e,t.tablePmStart,t.columnIndex);n!=null&&(t.origWidth=n)}function M({pagesContainer:t,onScrollExtendSelection:n}){let r=null,i=0,a=0,o=!1,s=null;function c(){if(s)return s;let e=t.value;return e?(s=(0,_.findVerticalScrollParent)(e),s):null}function l(){o=!1,r!==null&&(cancelAnimationFrame(r),r=null)}function u(){if(!o)return;let e=c();if(!e)return;let t=(0,v.computeAutoScrollDelta)(e.getBoundingClientRect(),a);t!==0&&(e.scrollTop+=t,n(i,a)),r=requestAnimationFrame(u)}function d(){o||(o=!0,r=requestAnimationFrame(u))}function f(e,t){if(i=e,a=t,!o){let e=c();if(!e)return;let n=e.getBoundingClientRect();(t<n.top+v.AUTO_SCROLL_EDGE_ZONE||t>n.bottom-v.AUTO_SCROLL_EDGE_ZONE)&&d()}}return(0,e.onBeforeUnmount)(()=>l()),{updateMousePosition:f,stopAutoScroll:l}}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return M}});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eigenpal/docx-editor-vue",
3
- "version": "1.3.2",
3
+ "version": "1.4.0",
4
4
  "description": "Vue 3 DOCX editor adapter for @eigenpal/docx-editor-core.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -83,9 +83,9 @@
83
83
  "vue": "^3.3.0"
84
84
  },
85
85
  "dependencies": {
86
- "@eigenpal/docx-editor-agents": "^1.3.2",
87
- "@eigenpal/docx-editor-core": "^1.3.2",
88
- "@eigenpal/docx-editor-i18n": "^1.3.2"
86
+ "@eigenpal/docx-editor-agents": "^1.4.0",
87
+ "@eigenpal/docx-editor-core": "^1.4.0",
88
+ "@eigenpal/docx-editor-i18n": "^1.4.0"
89
89
  },
90
90
  "keywords": [
91
91
  "docx",
@@ -1 +0,0 @@
1
- let e=require(`vue`),t=require(`prosemirror-state`),n=require(`@eigenpal/docx-editor-core/layout-bridge`),r=require(`@eigenpal/docx-editor-core/prosemirror`),i=require(`@eigenpal/docx-editor-core/layout-painter`),a=require(`@eigenpal/docx-editor-core/prosemirror/conversion`),o=require(`prosemirror-view`),s=require(`@eigenpal/docx-editor-core/docx/parser`),c=require(`@eigenpal/docx-editor-core/prosemirror/conversion/fromProseDoc`),l=require(`@eigenpal/docx-editor-core/prosemirror/schema`),u=require(`@eigenpal/docx-editor-core/prosemirror/plugins`),d=require(`@eigenpal/docx-editor-core/prosemirror/extensions`),f=require(`@eigenpal/docx-editor-core/layout-bridge/measuring`),p=require(`@eigenpal/docx-editor-core/editor`),m=require(`@eigenpal/docx-editor-core/layout-engine`),h=require(`@eigenpal/docx-editor-core/layout-painter/renderPage`);require(`prosemirror-view/style/prosemirror.css`),require(`@eigenpal/docx-editor-core/prosemirror/editor.css`);let g=require(`@eigenpal/docx-editor-core/prosemirror/tableResize`),_=require(`@eigenpal/docx-editor-core/utils/findVerticalScrollParent`),v=require(`@eigenpal/docx-editor-core/utils/autoScroll`);var y=24;function b(e,t,r,i){switch(e.kind){case`paragraph`:return(0,f.measureParagraph)(e,t,{floatingZones:r,paragraphYOffset:i??0});case`table`:return(0,n.measureTableBlock)(e,t,b);case`image`:{let t=e;return{kind:`image`,width:t.width??100,height:t.height??100}}case`textBox`:{let t=e,n=t.margins??m.DEFAULT_TEXTBOX_MARGINS,r=(t.width??m.DEFAULT_TEXTBOX_WIDTH)-n.left-n.right,i=t.content.map(e=>(0,f.measureParagraph)(e,r)),a=i.reduce((e,t)=>e+t.totalHeight,0),o=t.height??a+n.top+n.bottom;return{kind:`textBox`,width:t.width??m.DEFAULT_TEXTBOX_WIDTH,height:o,innerMeasures:i}}case`pageBreak`:return{kind:`pageBreak`};case`columnBreak`:return{kind:`columnBreak`};case`sectionBreak`:return{kind:`sectionBreak`};default:(0,m.assertExhaustiveFlowBlock)(e,`vue useDocxEditor measureBlock`)}}function x(e,t,n){return(0,f.measureBlocksWithFloats)(e,t,b,n)}function S(f){let{hiddenContainer:m,pagesContainer:g,readOnly:_=!1,pageGap:v=y,onChange:b,onError:S,onSelectionUpdate:C,externalPlugins:w=[],syncCoordinator:T,editorMode:E,author:D}=f,O=(0,e.shallowRef)(null),k=(0,e.shallowRef)(null),A=(0,e.shallowRef)(null),j=(0,e.ref)(!1),M=(0,e.ref)(null),N=(0,e.shallowRef)(null),P=l.singletonManager;function F(e){let t=g.value;if(!t||!O.value)return;let r=T?.getStateSeq()??0;T?.onLayoutStart();let a=O.value.package?.document,o=a?.sections?.[0]?.properties??a?.finalSectionProperties??null,s=a?.finalSectionProperties??o,c=(0,n.getPageSize)(o),l=(0,n.getMargins)(o),u=(0,n.getPageSize)(s),d=(0,n.getMargins)(s),f=(0,n.getColumns)(o),m=(0,n.getColumns)(s),_=c.w-l.left-l.right,y=O.value.package?.theme??null,b=O.value.package?.styles??null;try{let{header:r,footer:a,firstHeader:g,firstFooter:S}=(0,n.resolveHeaderFooter)(O.value,o),{blocks:C,measures:w,layout:T,headerContentForRender:E,footerContentForRender:D,firstPageHeaderForRender:k,firstPageFooterForRender:A,hasTitlePg:j,watermark:M,footnotesByPage:P}=(0,p.computeLayout)({state:e,document:O.value,pageSize:c,margins:l,columns:f,finalPageSize:u,finalMargins:d,finalColumns:m,pageGap:v,contentWidth:_,theme:y,styles:b,sectionProperties:o,finalSectionProperties:s,headerContent:r,footerContent:a,firstPageHeaderContent:g,firstPageFooterContent:S,measureBlocks:x,getHfPmDoc:e=>W(e)?.state.doc??null});N.value=T;let F=(0,i.buildBlockLookup)(C,w);(0,h.renderPages)(T.pages,t,{pageGap:v,showShadow:!0,pageBackground:`#fff`,blockLookup:F,theme:y,headerContent:E,footerContent:D,firstPageHeaderContent:k,firstPageFooterContent:A,titlePage:j,watermark:M,footnotesByPage:P}),t.style.overflowY=`auto`,t.style.minHeight=`0`;for(let e of Array.from(t.children))e.style.flexShrink=`0`;(0,i.applySdtFocus)(t,(0,i.enclosingSdtGroupIds)(e.doc,e.selection.from,e.selection.to))}catch(e){console.error(`[useDocxEditor] Layout pipeline error:`,e),S?.(e instanceof Error?e:Error(String(e)))}finally{T?.onLayoutComplete(r)}}let I=(0,p.createLayoutScheduler)(F);function L(){let n=m.value;if(!n)return;let r=O.value?.package?.styles,s=O.value?(0,a.toProseDoc)(O.value,{styles:r??void 0}):(0,a.createEmptyDoc)(),l=(0,u.createSuggestionModePlugin)(!1),d=(0,u.createDocumentStylesPlugin)(r),f=[l,...w,...P.getPlugins()??[],d],h=t.EditorState.create({doc:s,schema:P.getSchema(),plugins:f});A.value=h;let v=new o.EditorView(n,{state:h,editable:()=>!(0,e.unref)(_),dispatchTransaction(e){if(!v)return;(0,p.stripScrollFlag)(e,v.state.tr);let t=v.state.apply(e);if(v.updateState(t),A.value=t,e.docChanged){T?.incrementStateSeq(),I.schedule(t);try{if(O.value){let e=(0,c.fromProseDoc)(t.doc,O.value);O.value=e,b?.(e)}}catch(e){console.error(`[useDocxEditor] fromProseDoc error:`,e)}}if(T?.requestRender(),C?.(),!e.docChanged){let e=g.value;e&&(0,i.applySdtFocus)(e,(0,i.enclosingSdtGroupIds)(t.doc,t.selection.from,t.selection.to))}}});k.value=v,j.value=!0,F(h),T?.requestRender()}(0,e.watch)([()=>(0,e.unref)(E),()=>(0,e.unref)(D),k],([e,t,n])=>{n&&(0,u.setSuggestionMode)(e===`suggesting`,n.state,n.dispatch,t)},{immediate:!0});function R(){I.cancel(),k.value&&=(k.value.destroy(),null),A.value=null,j.value=!1}let z={current:null},B=new Map,V=new Map;function H(){if(z.current&&z.current.isConnected)return z.current;let e=window.document.createElement(`div`);return e.dataset.hfHost=`true`,e.style.cssText=`position: fixed; left: -9999px; top: 0; opacity: 0; z-index: -1; pointer-events: none;`,window.document.body.appendChild(e),z.current=e,e}function U(e){let t=O.value?.package;if(!t)return null;if(t.headers){for(let[n,r]of t.headers)if(r===e)return n}if(t.footers){for(let[n,r]of t.footers)if(r===e)return n}return null}function W(e){let t=U(e);return t?B.get(t)??null:null}function G(){let e=O.value?.package,n=H(),i=new Set;if(e?.headers)for(let t of e.headers.keys())i.add(t);if(e?.footers)for(let t of e.footers.keys())i.add(t);for(let[e,t]of B)i.has(e)||(t.destroy(),t.dom.parentElement?.remove(),V.get(e)?.destroy(),V.delete(e),B.delete(e));if(!e)return;let s=e.styles??null,c=e.theme??null,l=e.settings?.defaultTabStop??null;for(let f of i){if(B.has(f))continue;let i=e.headers?.get(f)??e.footers?.get(f);if(!i)continue;let p=e.headers?.has(f)?`header`:`footer`,m=new d.ExtensionManager((0,d.createStarterKit)());m.buildSchema(),m.initializeRuntime(),V.set(f,m);let h=window.document.createElement(`div`);h.dataset.hfRId=f,h.dataset.hfKind=p,n.appendChild(h);let g=(0,a.headerFooterToProseDoc)(i.content,{styles:s??void 0,theme:c,defaultTabStopTwips:l}),_=(0,u.createDocumentStylesPlugin)(s),v=t.EditorState.create({doc:g,schema:r.schema,plugins:[...m.getPlugins(),_]}),y=p,b=new o.EditorView(h,{state:v,dispatchTransaction(e){let t=b.state.apply(e);if(b.updateState(t),e.docChanged){let e=O.value?.package,n=(y===`header`?e?.headers:e?.footers)?.get(f);n&&(n.content=(0,a.proseDocToBlocks)(t.doc))}e.docChanged&&A.value&&F(A.value),q.value?.(f,b,e.docChanged)}});B.set(f,b)}}function K(){for(let e of B.values())e.destroy(),e.dom.parentElement?.remove();B.clear();for(let e of V.values())e.destroy();V.clear(),z.current&&=(z.current.remove(),null)}let q={value:null};function J(e){q.value=e}async function Y(e){M.value=null,j.value=!1;try{let t;t=e instanceof Blob||e instanceof File?await e.arrayBuffer():e instanceof Uint8Array?e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength):e,O.value=await(0,s.parseDocx)(t),R(),K(),L(),G()}catch(e){let t=e instanceof Error?e:Error(String(e));M.value=t.message,S?.(t)}}function X(e){M.value=null,O.value=e,R(),K(),L(),G()}async function Z(){if(!k.value||!O.value)return null;let{repackDocx:e,createDocx:t}=await import(`@eigenpal/docx-editor-core/docx/rezip`),{injectReplyRangeMarkers:n,injectTCReplyRangeMarkers:r}=await import(`@eigenpal/docx-editor-core/docx`),i=(0,c.fromProseDoc)(k.value.state.doc,O.value),a=i.package.document?.comments??[];i.package.document?.content&&a.length>0&&(n(i.package.document.content,a),r(i.package.document.content,a));let o;return o=i.originalBuffer?await e(i):await t(i),new Blob([o],{type:`application/vnd.openxmlformats-officedocument.wordprocessingml.document`})}function Q(){k.value?.focus()}function $(){R(),K(),O.value=null}function ee(){return O.value}(0,e.onBeforeUnmount)(()=>{$()});function te(){return P.getCommands()}return{editorView:k,editorState:A,isReady:j,parseError:M,layout:N,loadBuffer:Y,loadDocument:X,save:Z,focus:Q,destroy:$,getDocument:ee,getCommands:te,reLayout(){k.value&&F(k.value.state)},getHfPmView:W,syncHfPMs:G,setHfTransactionListener:J,setDocument(e){O.value=e}}}var C=.25,w=4,T=.1,E=[.25,.5,.75,1,1.25,1.5,2,3,4];function D(t=1){let n=(0,e.ref)(Math.max(C,Math.min(w,t))),r=(0,e.computed)(()=>Math.round(n.value*100)),i=(0,e.computed)(()=>n.value<=C),a=(0,e.computed)(()=>n.value>=w);function o(e){n.value=Math.max(C,Math.min(w,Math.round(e*100)/100))}function s(){o(n.value+T)}function c(){o(n.value-T)}function l(){o(1)}function u(e){(e.ctrlKey||e.metaKey)&&(e.preventDefault(),e.deltaY<0?s():c())}function d(e){(e.ctrlKey||e.metaKey)&&(e.shiftKey||e.altKey||(e.key===`=`||e.key===`+`?(e.preventDefault(),s()):e.key===`-`?(e.preventDefault(),c()):e.key===`0`&&(e.preventDefault(),l())))}function f(){(0,e.onMounted)(()=>document.addEventListener(`keydown`,d)),(0,e.onBeforeUnmount)(()=>document.removeEventListener(`keydown`,d))}return{zoom:n,zoomPercent:r,isMinZoom:i,isMaxZoom:a,setZoom:o,zoomIn:s,zoomOut:c,resetZoom:l,handleWheel:u,handleKeyDown:d,installShortcuts:f,ZOOM_PRESETS:E}}function O(){let e={active:!1,startX:0,handle:null,columnIndex:0,tablePmStart:0,origWidths:{left:0,right:0}},t={active:!1,startY:0,handle:null,rowIndex:0,isEdge:!1,tablePmStart:0,origHeight:0},n={active:!1,startX:0,handle:null,columnIndex:0,tablePmStart:0,origWidth:0},r=null;function i(){return e.active||t.active||n.active}function a(i,a){let o=i.target;return o?.classList?o.classList.contains(`layout-table-resize-handle`)?(i.preventDefault(),i.stopPropagation(),r=a,e.active=!0,e.startX=i.clientX,e.handle=o,o.classList.add(`dragging`),e.columnIndex=parseInt(o.dataset.columnIndex??`0`,10),e.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),k(a,e),!0):o.classList.contains(`layout-table-row-resize-handle`)||o.classList.contains(`layout-table-edge-handle-bottom`)?(i.preventDefault(),i.stopPropagation(),r=a,t.active=!0,t.startY=i.clientY,t.handle=o,t.isEdge=o.dataset.isEdge===`bottom`,o.classList.add(`dragging`),t.rowIndex=parseInt(o.dataset.rowIndex??`0`,10),t.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),A(a,t,o),!0):o.classList.contains(`layout-table-edge-handle-right`)?(i.preventDefault(),i.stopPropagation(),r=a,n.active=!0,n.startX=i.clientX,n.handle=o,o.classList.add(`dragging`),n.columnIndex=parseInt(o.dataset.columnIndex??`0`,10),n.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),j(a,n),!0):!1:!1}function o(r){if(e.active&&e.handle){r.preventDefault();let t=r.clientX-e.startX,n=parseFloat(e.handle.style.left);e.handle.style.left=`${n+t}px`,e.startX=r.clientX;let i=Math.round(t*g.TWIPS_PER_PIXEL),a=e.origWidths.left+i,o=e.origWidths.right-i;a>=g.MIN_CELL_WIDTH_TWIPS&&o>=g.MIN_CELL_WIDTH_TWIPS&&(e.origWidths={left:a,right:o});return}if(t.active&&t.handle){r.preventDefault();let e=r.clientY-t.startY,n=parseFloat(t.handle.style.top);t.handle.style.top=`${n+e}px`,t.startY=r.clientY;let i=Math.round(e*g.TWIPS_PER_PIXEL),a=t.origHeight+i;a>=g.MIN_ROW_HEIGHT_TWIPS&&(t.origHeight=a);return}if(n.active&&n.handle){r.preventDefault();let e=r.clientX-n.startX,t=parseFloat(n.handle.style.left);n.handle.style.left=`${t+e}px`,n.startX=r.clientX;let i=Math.round(e*g.TWIPS_PER_PIXEL),a=n.origWidth+i;a>=g.MIN_CELL_WIDTH_TWIPS&&(n.origWidth=a)}}function s(i){if(e.active){e.active=!1,e.handle?.classList.remove(`dragging`),r&&(0,g.commitColumnResize)(r,{pmStart:e.tablePmStart,colIdx:e.columnIndex,newLeft:e.origWidths.left,newRight:e.origWidths.right}),e.handle=null;return}if(t.active){t.active=!1,t.handle?.classList.remove(`dragging`),r&&(0,g.commitRowResize)(r,{pmStart:t.tablePmStart,rowIdx:t.rowIndex,newHeight:t.origHeight}),t.handle=null;return}n.active&&(n.active=!1,n.handle?.classList.remove(`dragging`),r&&(0,g.commitRightEdgeResize)(r,{pmStart:n.tablePmStart,colIdx:n.columnIndex,newWidth:n.origWidth}),n.handle=null)}function c(){return document.addEventListener(`mousemove`,o),document.addEventListener(`mouseup`,s),()=>{document.removeEventListener(`mousemove`,o),document.removeEventListener(`mouseup`,s)}}return{tryStartResize:a,install:c,isResizing:i}}function k(e,t){let n=(0,g.readColumnWidths)(e,t.tablePmStart,t.columnIndex);n&&(t.origWidths=n)}function A(e,t,n){let r=(0,g.readRowHeight)(e,t.tablePmStart,t.rowIndex);if(r!=null){t.origHeight=r;return}let i=n.closest(`.layout-table`)?.querySelector(`[data-row-index="${t.rowIndex}"]`),a=i?i.getBoundingClientRect().height:30;t.origHeight=Math.round(a*g.TWIPS_PER_PIXEL)}function j(e,t){let n=(0,g.readColumnWidthAt)(e,t.tablePmStart,t.columnIndex);n!=null&&(t.origWidth=n)}function M({pagesContainer:t,onScrollExtendSelection:n}){let r=null,i=0,a=0,o=!1,s=null;function c(){if(s)return s;let e=t.value;return e?(s=(0,_.findVerticalScrollParent)(e),s):null}function l(){o=!1,r!==null&&(cancelAnimationFrame(r),r=null)}function u(){if(!o)return;let e=c();if(!e)return;let t=(0,v.computeAutoScrollDelta)(e.getBoundingClientRect(),a);t!==0&&(e.scrollTop+=t,n(i,a)),r=requestAnimationFrame(u)}function d(){o||(o=!0,r=requestAnimationFrame(u))}function f(e,t){if(i=e,a=t,!o){let e=c();if(!e)return;let n=e.getBoundingClientRect();(t<n.top+v.AUTO_SCROLL_EDGE_ZONE||t>n.bottom-v.AUTO_SCROLL_EDGE_ZONE)&&d()}}return(0,e.onBeforeUnmount)(()=>l()),{updateMousePosition:f,stopAutoScroll:l}}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return M}});