superdoc 1.0.0-beta.17 → 1.0.0-beta.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/chunks/{PdfViewer-BIlJaTm7.cjs → PdfViewer-BLFV17De.cjs} +1 -1
  2. package/dist/chunks/{PdfViewer-cvzMUtBh.es.js → PdfViewer-D_4g-jsZ.es.js} +1 -1
  3. package/dist/chunks/{index-VCeRjVPO-FBgR9qxX.es.js → index-CRpn1mWd-B4eH8Zok.es.js} +1 -1
  4. package/dist/chunks/{index-VCeRjVPO-DjkejB6t.cjs → index-CRpn1mWd-BUbbd3Jq.cjs} +1 -1
  5. package/dist/chunks/{index-CrIfBvBN.es.js → index-NPXppXmC.es.js} +8 -4
  6. package/dist/chunks/{index-DDx90Dl3.cjs → index-k02voMEs.cjs} +8 -4
  7. package/dist/chunks/{super-editor.es-00SpI-wK.es.js → super-editor.es-CHU4dmes.es.js} +1844 -1123
  8. package/dist/chunks/{super-editor.es-Mlj7AGyt.cjs → super-editor.es-C_Gk8cDd.cjs} +1843 -1122
  9. package/dist/packages/superdoc/src/components/CommentsLayer/use-comment.d.ts.map +1 -1
  10. package/dist/packages/superdoc/src/stores/comments-store.d.ts.map +1 -1
  11. package/dist/style.css +7 -7
  12. package/dist/super-editor/ai-writer.es.js +2 -2
  13. package/dist/super-editor/chunks/{converter-B9zUZjYT.js → converter-Cu26_LdN.js} +207 -15
  14. package/dist/super-editor/chunks/{docx-zipper-r5KdE_SA.js → docx-zipper-C8lozSFd.js} +1 -1
  15. package/dist/super-editor/chunks/{editor-D2k2BwSG.js → editor-BXC2Hzba.js} +1574 -1062
  16. package/dist/super-editor/chunks/{index-VCeRjVPO.js → index-CRpn1mWd.js} +1 -1
  17. package/dist/super-editor/chunks/{toolbar-8o_LgoiW.js → toolbar-BglLOe8y.js} +2 -2
  18. package/dist/super-editor/converter.es.js +1 -1
  19. package/dist/super-editor/docx-zipper.es.js +2 -2
  20. package/dist/super-editor/editor.es.js +3 -3
  21. package/dist/super-editor/file-zipper.es.js +1 -1
  22. package/dist/super-editor/style.css +7 -7
  23. package/dist/super-editor/super-editor.es.js +126 -45
  24. package/dist/super-editor/toolbar.es.js +2 -2
  25. package/dist/super-editor.cjs +3 -3
  26. package/dist/super-editor.es.js +1 -1
  27. package/dist/superdoc.cjs +2 -2
  28. package/dist/superdoc.es.js +2 -2
  29. package/dist/superdoc.umd.js +1842 -1117
  30. package/dist/superdoc.umd.js.map +1 -1
  31. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"use-comment.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CommentsLayer/use-comment.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,2CAHW,MAAM,GACJ,MAAM,CAoRlB"}
1
+ {"version":3,"file":"use-comment.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CommentsLayer/use-comment.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,2CAHW,MAAM,GACJ,MAAM,CA0RlB"}
@@ -1 +1 @@
1
- {"version":3,"file":"comments-store.d.ts","sourceRoot":"","sources":["../../../../../src/stores/comments-store.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA2Ca,MAAM,KACJ,IAAI;qBAiBN,MAAM,KACJ,MAAM;0CAUR,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFA8Ld;QAAuB,SAAS,EAAxB,MAAM;QACS,UAAU;QACV,eAAe;KACtC,KAAU,MAAM;;0DAqDhB;QAAuB,QAAQ,EAAvB,MAAM;KACd,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DAwHJ,IAAI;sDA/ad;QAAuB,QAAQ,EAAvB,MAAM;QACS,MAAM,EAArB,MAAM;KACd,KAAU,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAxDN,MAAM,KACJ,IAAI;qBAiBN,MAAM,KACJ,MAAM;0CAUR,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFA8Ld;QAAuB,SAAS,EAAxB,MAAM;QACS,UAAU;QACV,eAAe;KACtC,KAAU,MAAM;;0DAqDhB;QAAuB,QAAQ,EAAvB,MAAM;KACd,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DAwHJ,IAAI;sDA/ad;QAAuB,QAAQ,EAAvB,MAAM;QACS,MAAM,EAArB,MAAM;KACd,KAAU,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAxDN,MAAM,KACJ,IAAI;qBAiBN,MAAM,KACJ,MAAM;0CAUR,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFA8Ld;QAAuB,SAAS,EAAxB,MAAM;QACS,UAAU;QACV,eAAe;KACtC,KAAU,MAAM;;0DAqDhB;QAAuB,QAAQ,EAAvB,MAAM;KACd,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DAwHJ,IAAI;sDA/ad;QAAuB,QAAQ,EAAvB,MAAM;QACS,MAAM,EAArB,MAAM;KACd,KAAU,IAAI;wUAujBhB"}
1
+ {"version":3,"file":"comments-store.d.ts","sourceRoot":"","sources":["../../../../../src/stores/comments-store.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA2Ca,MAAM,KACJ,IAAI;qBAiBN,MAAM,KACJ,MAAM;0CAUR,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFA8Ld;QAAuB,SAAS,EAAxB,MAAM;QACS,UAAU;QACV,eAAe;KACtC,KAAU,MAAM;;0DAqDhB;QAAuB,QAAQ,EAAvB,MAAM;KACd,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DA4HJ,IAAI;sDAnbd;QAAuB,QAAQ,EAAvB,MAAM;QACS,MAAM,EAArB,MAAM;KACd,KAAU,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAxDN,MAAM,KACJ,IAAI;qBAiBN,MAAM,KACJ,MAAM;0CAUR,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFA8Ld;QAAuB,SAAS,EAAxB,MAAM;QACS,UAAU;QACV,eAAe;KACtC,KAAU,MAAM;;0DAqDhB;QAAuB,QAAQ,EAAvB,MAAM;KACd,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DA4HJ,IAAI;sDAnbd;QAAuB,QAAQ,EAAvB,MAAM;QACS,MAAM,EAArB,MAAM;KACd,KAAU,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAxDN,MAAM,KACJ,IAAI;qBAiBN,MAAM,KACJ,MAAM;0CAUR,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFA8Ld;QAAuB,SAAS,EAAxB,MAAM;QACS,UAAU;QACV,eAAe;KACtC,KAAU,MAAM;;0DAqDhB;QAAuB,QAAQ,EAAvB,MAAM;KACd,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DA4HJ,IAAI;sDAnbd;QAAuB,QAAQ,EAAvB,MAAM;QACS,MAAM,EAArB,MAAM;KACd,KAAU,IAAI;wUA2jBhB"}
package/dist/style.css CHANGED
@@ -2250,7 +2250,7 @@ https://github.com/ProseMirror/prosemirror-tables/blob/master/demo/index.html
2250
2250
  }
2251
2251
 
2252
2252
  /* @remarks - popover adds a slight shadow, this can be removed if needed */
2253
- .generic-popover[data-v-cbddcc0f] {
2253
+ .generic-popover[data-v-157855b5] {
2254
2254
  /* @remarks - this should ideally be handled by the content or component - but some are missing */
2255
2255
  background-color: white;
2256
2256
  position: absolute;
@@ -2343,10 +2343,10 @@ https://github.com/ProseMirror/prosemirror-tables/blob/master/demo/index.html
2343
2343
  box-shadow: 0 0 4px rgba(74, 144, 226, 0.5);
2344
2344
  }
2345
2345
 
2346
- .editor-element[data-v-a84087aa] {
2346
+ .editor-element[data-v-08b32c3d] {
2347
2347
  position: relative;
2348
2348
  }
2349
- .super-editor-container[data-v-a84087aa] {
2349
+ .super-editor-container[data-v-08b32c3d] {
2350
2350
  width: auto;
2351
2351
  height: auto;
2352
2352
  min-width: 8in;
@@ -2355,14 +2355,14 @@ https://github.com/ProseMirror/prosemirror-tables/blob/master/demo/index.html
2355
2355
  display: flex;
2356
2356
  flex-direction: column;
2357
2357
  }
2358
- .ruler[data-v-a84087aa] {
2358
+ .ruler[data-v-08b32c3d] {
2359
2359
  margin-bottom: 2px;
2360
2360
  }
2361
- .super-editor[data-v-a84087aa] {
2361
+ .super-editor[data-v-08b32c3d] {
2362
2362
  color: initial;
2363
2363
  overflow: hidden;
2364
2364
  }
2365
- .placeholder-editor[data-v-a84087aa] {
2365
+ .placeholder-editor[data-v-08b32c3d] {
2366
2366
  position: absolute;
2367
2367
  top: 0;
2368
2368
  left: 0;
@@ -2374,7 +2374,7 @@ https://github.com/ProseMirror/prosemirror-tables/blob/master/demo/index.html
2374
2374
  background-color: white;
2375
2375
  box-sizing: border-box;
2376
2376
  }
2377
- .placeholder-title[data-v-a84087aa] {
2377
+ .placeholder-title[data-v-08b32c3d] {
2378
2378
  display: flex;
2379
2379
  justify-content: center;
2380
2380
  margin-bottom: 40px;
@@ -1,6 +1,6 @@
1
1
  import { ref, onMounted, onUnmounted, computed, createElementBlock, openBlock, withModifiers, createElementVNode, withDirectives, unref, vModelText, createCommentVNode, nextTick } from "vue";
2
- import { T as TextSelection } from "./chunks/converter-B9zUZjYT.js";
3
- import { _ as _export_sfc } from "./chunks/editor-D2k2BwSG.js";
2
+ import { T as TextSelection } from "./chunks/converter-Cu26_LdN.js";
3
+ import { _ as _export_sfc } from "./chunks/editor-BXC2Hzba.js";
4
4
  const DEFAULT_API_ENDPOINT = "https://sd-dev-express-gateway-i6xtm.ondigitalocean.app/insights";
5
5
  const SYSTEM_PROMPT = "You are an expert copywriter and you are immersed in a document editor. You are to provide document related text responses based on the user prompts. Only write what is asked for. Do not provide explanations. Try to keep placeholders as short as possible. Do not output your prompt. Your instructions are: ";
6
6
  async function baseInsightsFetch(payload, options = {}) {
@@ -19180,6 +19180,7 @@ function getUnderlineCssString({ type: type2 = "single", color = null, thickness
19180
19180
  if (color) add("text-decoration-color", color);
19181
19181
  return parts.join("; ");
19182
19182
  }
19183
+ const INLINE_OVERRIDE_PROPERTIES = ["fontSize", "bold", "italic", "strike", "underline", "letterSpacing"];
19183
19184
  const resolveRunProperties = (params, inlineRpr, resolvedPpr, isListNumber = false, numberingDefinedInline = false) => {
19184
19185
  const paragraphStyleId = resolvedPpr?.styleId;
19185
19186
  const paragraphStyleProps = resolveStyleChain(params, paragraphStyleId, translator$1N);
@@ -19216,6 +19217,11 @@ const resolveRunProperties = (params, inlineRpr, resolvedPpr, isListNumber = fal
19216
19217
  styleChain = [...styleChain, paragraphStyleProps, runStyleProps, inlineRpr];
19217
19218
  }
19218
19219
  const finalProps = combineProperties(styleChain, ["fontFamily", "color"]);
19220
+ for (const prop of INLINE_OVERRIDE_PROPERTIES) {
19221
+ if (inlineRpr?.[prop] != null) {
19222
+ finalProps[prop] = inlineRpr[prop];
19223
+ }
19224
+ }
19219
19225
  return finalProps;
19220
19226
  };
19221
19227
  function resolveParagraphProperties(params, inlineProps, insideTable = false, overrideInlineStyleId = false, tableStyleId = null) {
@@ -25023,8 +25029,8 @@ function handleImageNode(node, params, isAnchor) {
25023
25029
  horizontal: positionHValue,
25024
25030
  top: positionVValue
25025
25031
  };
25026
- const useSimplePos = attributes["simplePos"] === "1" || attributes["simplePos"] === 1;
25027
- const simplePos = useSimplePos ? node.elements.find((el) => el.name === "wp:simplePos") : null;
25032
+ const useSimplePos = attributes["simplePos"] === "1" || attributes["simplePos"] === 1 || attributes["simplePos"] === true;
25033
+ const simplePosNode = node.elements.find((el) => el.name === "wp:simplePos");
25028
25034
  const wrapNode = isAnchor ? node.elements.find(
25029
25035
  (el) => ["wp:wrapNone", "wp:wrapSquare", "wp:wrapThrough", "wp:wrapTight", "wp:wrapTopAndBottom"].includes(el.name)
25030
25036
  ) : null;
@@ -25164,10 +25170,10 @@ function handleImageNode(node, params, isAnchor) {
25164
25170
  anchorData,
25165
25171
  isAnchor,
25166
25172
  transformData,
25167
- ...simplePos && {
25173
+ ...useSimplePos && {
25168
25174
  simplePos: {
25169
- x: simplePos.attributes.x,
25170
- y: simplePos.attributes.y
25175
+ x: simplePosNode.attributes?.x,
25176
+ y: simplePosNode.attributes?.y
25171
25177
  }
25172
25178
  },
25173
25179
  wrap: wrap2,
@@ -30925,12 +30931,13 @@ function translateShapeGroup(params) {
30925
30931
  function translateAnchorNode(params) {
30926
30932
  const { attrs } = params.node;
30927
30933
  const anchorElements = [];
30928
- if (attrs.simplePos) {
30934
+ const hasSimplePos = attrs.simplePos || attrs.originalAttributes?.simplePos;
30935
+ if (hasSimplePos) {
30929
30936
  anchorElements.push({
30930
30937
  name: "wp:simplePos",
30931
30938
  attributes: {
30932
- x: 0,
30933
- y: 0
30939
+ x: attrs.simplePos?.x ?? 0,
30940
+ y: attrs.simplePos?.y ?? 0
30934
30941
  }
30935
30942
  });
30936
30943
  }
@@ -30982,8 +30989,8 @@ function translateAnchorNode(params) {
30982
30989
  }
30983
30990
  if (attrs.originalAttributes?.simplePos !== void 0) {
30984
30991
  inlineAttrs.simplePos = attrs.originalAttributes.simplePos;
30985
- } else if (attrs.simplePos !== void 0) {
30986
- inlineAttrs.simplePos = attrs.simplePos;
30992
+ } else if (hasSimplePos) {
30993
+ inlineAttrs.simplePos = "1";
30987
30994
  }
30988
30995
  if (attrs.originalAttributes?.locked !== void 0) {
30989
30996
  inlineAttrs.locked = attrs.originalAttributes.locked;
@@ -33748,7 +33755,7 @@ const handlePassthroughNode = (params) => {
33748
33755
  const { nodes = [] } = params;
33749
33756
  const node = nodes[0];
33750
33757
  if (!node) return { nodes: [], consumed: 0 };
33751
- if (registeredHandlers[node.name]) {
33758
+ if (registeredHandlers[node.name] || node.name === "w:commentReference") {
33752
33759
  return { nodes: [], consumed: 0 };
33753
33760
  }
33754
33761
  const originalXml = carbonCopy(node) || {};
@@ -34048,7 +34055,11 @@ function importCommentData({ docx, editor, converter }) {
34048
34055
  const generateCommentsWithExtendedData = ({ docx, comments }) => {
34049
34056
  if (!comments?.length) return [];
34050
34057
  const commentsExtended = docx["word/commentsExtended.xml"];
34051
- if (!commentsExtended) return comments.map((comment) => ({ ...comment, isDone: comment.isDone ?? false }));
34058
+ if (!commentsExtended) {
34059
+ const commentRanges = extractCommentRangesFromDocument(docx);
34060
+ const commentsWithThreading = detectThreadingFromRanges(comments, commentRanges);
34061
+ return commentsWithThreading.map((comment) => ({ ...comment, isDone: comment.isDone ?? false }));
34062
+ }
34052
34063
  const { elements: initialElements = [] } = commentsExtended;
34053
34064
  if (!initialElements?.length) return comments.map((comment) => ({ ...comment, isDone: comment.isDone ?? false }));
34054
34065
  const { elements = [] } = initialElements[0] ?? {};
@@ -34074,6 +34085,79 @@ const getExtendedDetails = (commentEx) => {
34074
34085
  const paraIdParent = attributes["w15:paraIdParent"];
34075
34086
  return { paraId, isDone, paraIdParent };
34076
34087
  };
34088
+ const extractCommentRangesFromDocument = (docx) => {
34089
+ const documentXml = docx["word/document.xml"];
34090
+ if (!documentXml) {
34091
+ return [];
34092
+ }
34093
+ const pendingComments = [];
34094
+ const walkElements = (elements) => {
34095
+ if (!elements || !Array.isArray(elements)) return;
34096
+ elements.forEach((element) => {
34097
+ if (element.name === "w:commentRangeStart") {
34098
+ const commentId = element.attributes?.["w:id"];
34099
+ if (commentId !== void 0) {
34100
+ pendingComments.push({
34101
+ type: "start",
34102
+ commentId: String(commentId)
34103
+ });
34104
+ }
34105
+ } else if (element.name === "w:commentRangeEnd") {
34106
+ const commentId = element.attributes?.["w:id"];
34107
+ if (commentId !== void 0) {
34108
+ pendingComments.push({
34109
+ type: "end",
34110
+ commentId: String(commentId)
34111
+ });
34112
+ }
34113
+ }
34114
+ if (element.elements && Array.isArray(element.elements)) {
34115
+ walkElements(element.elements);
34116
+ }
34117
+ });
34118
+ };
34119
+ if (documentXml.elements && documentXml.elements.length > 0) {
34120
+ const body = documentXml.elements[0];
34121
+ if (body.elements) {
34122
+ walkElements(body.elements);
34123
+ }
34124
+ }
34125
+ return pendingComments;
34126
+ };
34127
+ const detectThreadingFromRanges = (comments, rangeEvents) => {
34128
+ if (!rangeEvents || rangeEvents.length === 0) {
34129
+ return comments;
34130
+ }
34131
+ const openRanges = [];
34132
+ const parentMap = /* @__PURE__ */ new Map();
34133
+ rangeEvents.forEach((event) => {
34134
+ if (event.type === "start") {
34135
+ if (openRanges.length > 0) {
34136
+ const parentCommentId = openRanges[openRanges.length - 1];
34137
+ parentMap.set(event.commentId, parentCommentId);
34138
+ }
34139
+ openRanges.push(event.commentId);
34140
+ } else if (event.type === "end") {
34141
+ const index2 = openRanges.lastIndexOf(event.commentId);
34142
+ if (index2 !== -1) {
34143
+ openRanges.splice(index2, 1);
34144
+ }
34145
+ }
34146
+ });
34147
+ return comments.map((comment) => {
34148
+ const parentCommentId = parentMap.get(comment.importedId);
34149
+ if (parentCommentId) {
34150
+ const parentComment = comments.find((c) => c.importedId === parentCommentId);
34151
+ if (parentComment) {
34152
+ return {
34153
+ ...comment,
34154
+ parentCommentId: parentComment.commentId
34155
+ };
34156
+ }
34157
+ }
34158
+ return comment;
34159
+ });
34160
+ };
34077
34161
  const RELATIONSHIP_TYPES = (
34078
34162
  /** @type {const} */
34079
34163
  {
@@ -36189,10 +36273,12 @@ const toIsoNoFractional = (unixMillis) => {
36189
36273
  const updateCommentsXml = (commentDefs = [], commentsXml) => {
36190
36274
  const newCommentsXml = carbonCopy(commentsXml);
36191
36275
  commentDefs.forEach((commentDef) => {
36192
- const elements = commentDef.elements[0].elements;
36276
+ const paraNode = commentDef.elements[0];
36277
+ if (!paraNode.attributes) paraNode.attributes = {};
36278
+ const elements = paraNode.elements;
36193
36279
  elements.unshift(COMMENT_REF);
36194
36280
  const paraId = commentDef.attributes["w15:paraId"];
36195
- commentDef.elements[0].attributes["w14:paraId"] = paraId;
36281
+ paraNode.attributes["w14:paraId"] = paraId;
36196
36282
  commentDef.attributes = {
36197
36283
  "w:id": commentDef.attributes["w:id"],
36198
36284
  "w:author": commentDef.attributes["w:author"],
@@ -36566,7 +36652,7 @@ const _SuperConverter = class _SuperConverter {
36566
36652
  static getStoredSuperdocVersion(docx) {
36567
36653
  return _SuperConverter.getStoredCustomProperty(docx, "SuperdocVersion");
36568
36654
  }
36569
- static setStoredSuperdocVersion(docx = this.convertedXml, version = "1.0.0-beta.17") {
36655
+ static setStoredSuperdocVersion(docx = this.convertedXml, version = "1.0.0-beta.19") {
36570
36656
  return _SuperConverter.setStoredCustomProperty(docx, "SuperdocVersion", version, false);
36571
36657
  }
36572
36658
  /**
@@ -36907,6 +36993,112 @@ const _SuperConverter = class _SuperConverter {
36907
36993
  });
36908
36994
  return { result, params };
36909
36995
  }
36996
+ /**
36997
+ * Creates a default empty header for the specified variant.
36998
+ *
36999
+ * This method programmatically creates a new header section with an empty ProseMirror
37000
+ * document. The header is added to the converter's data structures and will be included
37001
+ * in subsequent DOCX exports.
37002
+ *
37003
+ * @param {('default' | 'first' | 'even' | 'odd')} variant - The header variant to create
37004
+ * @returns {string} The relationship ID of the created header
37005
+ *
37006
+ * @throws {Error} If variant is invalid or header already exists for this variant
37007
+ *
37008
+ * @example
37009
+ * ```javascript
37010
+ * const headerId = converter.createDefaultHeader('default');
37011
+ * // headerId: 'rId-header-default'
37012
+ * // converter.headers['rId-header-default'] contains empty PM doc
37013
+ * // converter.headerIds.default === 'rId-header-default'
37014
+ * ```
37015
+ */
37016
+ createDefaultHeader(variant = "default") {
37017
+ if (typeof variant !== "string") {
37018
+ throw new TypeError(`variant must be a string, received ${typeof variant}`);
37019
+ }
37020
+ const validVariants = ["default", "first", "even", "odd"];
37021
+ if (!validVariants.includes(variant)) {
37022
+ throw new Error(`Invalid header variant: ${variant}. Must be one of: ${validVariants.join(", ")}`);
37023
+ }
37024
+ if (this.headerIds[variant]) {
37025
+ console.warn(`[SuperConverter] Header already exists for variant '${variant}': ${this.headerIds[variant]}`);
37026
+ return this.headerIds[variant];
37027
+ }
37028
+ const rId = `rId-header-${variant}`;
37029
+ const emptyDoc = {
37030
+ type: "doc",
37031
+ content: [
37032
+ {
37033
+ type: "paragraph",
37034
+ content: []
37035
+ }
37036
+ ]
37037
+ };
37038
+ this.headers[rId] = emptyDoc;
37039
+ this.headerIds[variant] = rId;
37040
+ if (!this.headerIds.ids) {
37041
+ this.headerIds.ids = [];
37042
+ }
37043
+ if (!this.headerIds.ids.includes(rId)) {
37044
+ this.headerIds.ids.push(rId);
37045
+ }
37046
+ this.documentModified = true;
37047
+ return rId;
37048
+ }
37049
+ /**
37050
+ * Creates a default empty footer for the specified variant.
37051
+ *
37052
+ * This method programmatically creates a new footer section with an empty ProseMirror
37053
+ * document. The footer is added to the converter's data structures and will be included
37054
+ * in subsequent DOCX exports.
37055
+ *
37056
+ * @param {('default' | 'first' | 'even' | 'odd')} variant - The footer variant to create
37057
+ * @returns {string} The relationship ID of the created footer
37058
+ *
37059
+ * @throws {Error} If variant is invalid or footer already exists for this variant
37060
+ *
37061
+ * @example
37062
+ * ```javascript
37063
+ * const footerId = converter.createDefaultFooter('default');
37064
+ * // footerId: 'rId-footer-default'
37065
+ * // converter.footers['rId-footer-default'] contains empty PM doc
37066
+ * // converter.footerIds.default === 'rId-footer-default'
37067
+ * ```
37068
+ */
37069
+ createDefaultFooter(variant = "default") {
37070
+ if (typeof variant !== "string") {
37071
+ throw new TypeError(`variant must be a string, received ${typeof variant}`);
37072
+ }
37073
+ const validVariants = ["default", "first", "even", "odd"];
37074
+ if (!validVariants.includes(variant)) {
37075
+ throw new Error(`Invalid footer variant: ${variant}. Must be one of: ${validVariants.join(", ")}`);
37076
+ }
37077
+ if (this.footerIds[variant]) {
37078
+ console.warn(`[SuperConverter] Footer already exists for variant '${variant}': ${this.footerIds[variant]}`);
37079
+ return this.footerIds[variant];
37080
+ }
37081
+ const rId = `rId-footer-${variant}`;
37082
+ const emptyDoc = {
37083
+ type: "doc",
37084
+ content: [
37085
+ {
37086
+ type: "paragraph",
37087
+ content: []
37088
+ }
37089
+ ]
37090
+ };
37091
+ this.footers[rId] = emptyDoc;
37092
+ this.footerIds[variant] = rId;
37093
+ if (!this.footerIds.ids) {
37094
+ this.footerIds.ids = [];
37095
+ }
37096
+ if (!this.footerIds.ids.includes(rId)) {
37097
+ this.footerIds.ids.push(rId);
37098
+ }
37099
+ this.documentModified = true;
37100
+ return rId;
37101
+ }
36910
37102
  // Deprecated methods for backward compatibility
36911
37103
  static getStoredSuperdocId(docx) {
36912
37104
  console.warn("getStoredSuperdocId is deprecated, use getDocumentGuid instead");
@@ -1,4 +1,4 @@
1
- import { p as process$1, aJ as commonjsGlobal, B as Buffer, aK as getDefaultExportFromCjs, aL as getContentTypesFromXml, aM as xmljs } from "./converter-B9zUZjYT.js";
1
+ import { p as process$1, aJ as commonjsGlobal, B as Buffer, aK as getDefaultExportFromCjs, aL as getContentTypesFromXml, aM as xmljs } from "./converter-Cu26_LdN.js";
2
2
  function commonjsRequire(path) {
3
3
  throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
4
4
  }