@harbour-enterprises/superdoc 0.21.0-next.8 → 0.21.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 (35) hide show
  1. package/dist/chunks/{PdfViewer-BR9iwva-.cjs → PdfViewer-B507M2sz.cjs} +1 -1
  2. package/dist/chunks/{PdfViewer-CwVW7MVJ.es.js → PdfViewer-DCKxnML6.es.js} +1 -1
  3. package/dist/chunks/{index-CjQDYBP2.es.js → index-DWR8syta.es.js} +40 -20
  4. package/dist/chunks/{index-BNA5J__D.cjs → index-djqw1MEc.cjs} +40 -20
  5. package/dist/chunks/{super-editor.es-C5dhT0uU.es.js → super-editor.es-D__G4K0i.es.js} +429 -115
  6. package/dist/chunks/{super-editor.es-Ct59l8tt.cjs → super-editor.es-HekVJogH.cjs} +429 -115
  7. package/dist/core/SuperDoc.d.ts +5 -0
  8. package/dist/core/SuperDoc.d.ts.map +1 -1
  9. package/dist/core/types/index.d.ts +4 -4
  10. package/dist/core/types/index.d.ts.map +1 -1
  11. package/dist/super-editor/ai-writer.es.js +2 -2
  12. package/dist/super-editor/chunks/{converter-DYAHhSrg.js → converter-B_pO-5Ls.js} +291 -67
  13. package/dist/super-editor/chunks/{docx-zipper-BDbCmfbE.js → docx-zipper-WaO3WaIz.js} +73 -12
  14. package/dist/super-editor/chunks/{editor-B1W7AdgQ.js → editor-DInvq7gF.js} +68 -30
  15. package/dist/super-editor/chunks/{toolbar-CCvglB_X.js → toolbar-C15EomPB.js} +2 -2
  16. package/dist/super-editor/converter.es.js +1 -1
  17. package/dist/super-editor/docx-zipper.es.js +2 -2
  18. package/dist/super-editor/editor.es.js +3 -3
  19. package/dist/super-editor/file-zipper.es.js +1 -1
  20. package/dist/super-editor/src/core/DocxZipper.d.ts +1 -1
  21. package/dist/super-editor/src/core/super-converter/SuperConverter.d.ts +1 -13
  22. package/dist/super-editor/src/core/super-converter/exporter.d.ts +1 -0
  23. package/dist/super-editor/src/core/super-converter/helpers/tableFallbackHelpers.d.ts +24 -0
  24. package/dist/super-editor/src/extensions/custom-selection/custom-selection.d.ts +5 -1
  25. package/dist/super-editor/src/utils/contextmenu-helpers.d.ts +24 -0
  26. package/dist/super-editor/super-editor.es.js +7 -15
  27. package/dist/super-editor/toolbar.es.js +2 -2
  28. package/dist/super-editor.cjs +1 -1
  29. package/dist/super-editor.es.js +1 -1
  30. package/dist/superdoc.cjs +2 -2
  31. package/dist/superdoc.es.js +2 -2
  32. package/dist/superdoc.umd.js +467 -133
  33. package/dist/superdoc.umd.js.map +1 -1
  34. package/package.json +2 -5
  35. package/dist/super-editor/src/components/slash-menu/contextmenu-helpers.d.ts +0 -1
@@ -1,4 +1,4 @@
1
- import { p as process$1, au as commonjsGlobal, B as Buffer, av as getDefaultExportFromCjs, aw as getContentTypesFromXml, ax as xmljs } from "./converter-DYAHhSrg.js";
1
+ import { p as process$1, au as commonjsGlobal, B as Buffer, av as getDefaultExportFromCjs, aw as getContentTypesFromXml, ax as xmljs } from "./converter-B_pO-5Ls.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
  }
@@ -2414,14 +2414,19 @@ class DocxZipper {
2414
2414
  /**
2415
2415
  * Update [Content_Types].xml with extensions of new Image annotations
2416
2416
  */
2417
- async updateContentTypes(docx, media, fromJson) {
2417
+ async updateContentTypes(docx, media, fromJson, updatedDocs = {}) {
2418
+ const additionalPartNames = Object.keys(updatedDocs || {});
2418
2419
  const newMediaTypes = Object.keys(media).map((name) => {
2419
2420
  return this.getFileExtension(name);
2420
2421
  }).filter(Boolean);
2421
2422
  const contentTypesPath = "[Content_Types].xml";
2422
2423
  let contentTypesXml;
2423
2424
  if (fromJson) {
2424
- contentTypesXml = docx.files.find((file) => file.name === contentTypesPath)?.content || "";
2425
+ if (Array.isArray(docx.files)) {
2426
+ contentTypesXml = docx.files.find((file) => file.name === contentTypesPath)?.content || "";
2427
+ } else {
2428
+ contentTypesXml = docx.files?.[contentTypesPath] || "";
2429
+ }
2425
2430
  } else contentTypesXml = await docx.file(contentTypesPath).async("string");
2426
2431
  let typesString = "";
2427
2432
  const defaultMediaTypes = getContentTypesFromXml(contentTypesXml);
@@ -2447,24 +2452,39 @@ class DocxZipper {
2447
2452
  const hasCommentsExtensible = types.elements?.some(
2448
2453
  (el) => el.name === "Override" && el.attributes.PartName === "/word/commentsExtensible.xml"
2449
2454
  );
2450
- if (docx.files["word/comments.xml"]) {
2455
+ const hasFile = (filename) => {
2456
+ if (!docx?.files) return false;
2457
+ if (!fromJson) return Boolean(docx.files[filename]);
2458
+ if (Array.isArray(docx.files)) return docx.files.some((file) => file.name === filename);
2459
+ return Boolean(docx.files[filename]);
2460
+ };
2461
+ if (hasFile("word/comments.xml")) {
2451
2462
  const commentsDef = `<Override PartName="/word/comments.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml" />`;
2452
2463
  if (!hasComments) typesString += commentsDef;
2453
2464
  }
2454
- if (docx.files["word/commentsExtended.xml"]) {
2465
+ if (hasFile("word/commentsExtended.xml")) {
2455
2466
  const commentsExtendedDef = `<Override PartName="/word/commentsExtended.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml" />`;
2456
2467
  if (!hasCommentsExtended) typesString += commentsExtendedDef;
2457
2468
  }
2458
- if (docx.files["word/commentsIds.xml"]) {
2469
+ if (hasFile("word/commentsIds.xml")) {
2459
2470
  const commentsIdsDef = `<Override PartName="/word/commentsIds.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.commentsIds+xml" />`;
2460
2471
  if (!hasCommentsIds) typesString += commentsIdsDef;
2461
2472
  }
2462
- if (docx.files["word/commentsExtensible.xml"]) {
2473
+ if (hasFile("word/commentsExtensible.xml")) {
2463
2474
  const commentsExtendedDef = `<Override PartName="/word/commentsExtensible.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtensible+xml" />`;
2464
2475
  if (!hasCommentsExtensible) typesString += commentsExtendedDef;
2465
2476
  }
2466
- Object.keys(docx.files).forEach((name) => {
2467
- if (name.includes(".rels") || !name.includes("header") && !name.includes("footer")) return;
2477
+ const partNames = new Set(additionalPartNames);
2478
+ if (docx?.files) {
2479
+ if (fromJson && Array.isArray(docx.files)) {
2480
+ docx.files.forEach((file) => partNames.add(file.name));
2481
+ } else {
2482
+ Object.keys(docx.files).forEach((key) => partNames.add(key));
2483
+ }
2484
+ }
2485
+ partNames.forEach((name) => {
2486
+ if (name.includes(".rels")) return;
2487
+ if (!name.includes("header") && !name.includes("footer")) return;
2468
2488
  const hasExtensible = types.elements?.some(
2469
2489
  (el) => el.name === "Override" && el.attributes.PartName === `/${name}`
2470
2490
  );
@@ -2475,7 +2495,48 @@ class DocxZipper {
2475
2495
  }
2476
2496
  });
2477
2497
  const beginningString = '<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">';
2478
- const updatedContentTypesXml = contentTypesXml.replace(beginningString, `${beginningString}${typesString}`);
2498
+ let updatedContentTypesXml = contentTypesXml.replace(beginningString, `${beginningString}${typesString}`);
2499
+ let relationshipsXml = updatedDocs["word/_rels/document.xml.rels"];
2500
+ if (!relationshipsXml) {
2501
+ if (fromJson) {
2502
+ if (Array.isArray(docx.files)) {
2503
+ relationshipsXml = docx.files.find((file) => file.name === "word/_rels/document.xml.rels")?.content;
2504
+ } else {
2505
+ relationshipsXml = docx.files?.["word/_rels/document.xml.rels"];
2506
+ }
2507
+ } else {
2508
+ relationshipsXml = await docx.file("word/_rels/document.xml.rels")?.async("string");
2509
+ }
2510
+ }
2511
+ if (relationshipsXml) {
2512
+ try {
2513
+ const relJson = xmljs.xml2js(relationshipsXml, { compact: false });
2514
+ const relationships = relJson.elements?.find((el) => el.name === "Relationships");
2515
+ relationships?.elements?.forEach((rel) => {
2516
+ const type = rel.attributes?.Type;
2517
+ const target = rel.attributes?.Target;
2518
+ if (!type || !target) return;
2519
+ const isHeader = type.includes("/header");
2520
+ const isFooter = type.includes("/footer");
2521
+ if (!isHeader && !isFooter) return;
2522
+ let sanitizedTarget = target.replace(/^\.\//, "");
2523
+ if (sanitizedTarget.startsWith("../")) sanitizedTarget = sanitizedTarget.slice(3);
2524
+ if (sanitizedTarget.startsWith("/")) sanitizedTarget = sanitizedTarget.slice(1);
2525
+ const partName = sanitizedTarget.startsWith("word/") ? sanitizedTarget : `word/${sanitizedTarget}`;
2526
+ partNames.add(partName);
2527
+ });
2528
+ } catch (error) {
2529
+ console.warn("Failed to parse document relationships while updating content types", error);
2530
+ }
2531
+ }
2532
+ partNames.forEach((name) => {
2533
+ if (name.includes(".rels")) return;
2534
+ if (!name.includes("header") && !name.includes("footer")) return;
2535
+ if (updatedContentTypesXml.includes(`PartName="/${name}"`)) return;
2536
+ const type = name.includes("header") ? "header" : "footer";
2537
+ const extendedDef = `<Override PartName="/${name}" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.${type}+xml"/>`;
2538
+ updatedContentTypesXml = updatedContentTypesXml.replace("</Types>", `${extendedDef}</Types>`);
2539
+ });
2479
2540
  if (fromJson) return updatedContentTypesXml;
2480
2541
  docx.file(contentTypesPath, updatedContentTypesXml);
2481
2542
  }
@@ -2516,7 +2577,7 @@ class DocxZipper {
2516
2577
  for (const [fontName, fontUintArray] of Object.entries(fonts)) {
2517
2578
  zip.file(fontName, fontUintArray);
2518
2579
  }
2519
- await this.updateContentTypes(zip, media);
2580
+ await this.updateContentTypes(zip, media, false, updatedDocs);
2520
2581
  return zip;
2521
2582
  }
2522
2583
  /**
@@ -2542,7 +2603,7 @@ class DocxZipper {
2542
2603
  Object.keys(media).forEach((path) => {
2543
2604
  unzippedOriginalDocx.file(path, media[path]);
2544
2605
  });
2545
- await this.updateContentTypes(unzippedOriginalDocx, media);
2606
+ await this.updateContentTypes(unzippedOriginalDocx, media, false, updatedDocs);
2546
2607
  return unzippedOriginalDocx;
2547
2608
  }
2548
2609
  }
@@ -12,9 +12,9 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
12
12
  var _Attribute_static, getGlobalAttributes_fn, getNodeAndMarksAttributes_fn, _Schema_static, createNodesSchema_fn, createMarksSchema_fn, _events, _ExtensionService_instances, setupExtensions_fn, attachEditorEvents_fn, _editor, _stateValidators, _xmlValidators, _requiredNodeTypes, _requiredMarkTypes, _SuperValidator_instances, initializeValidators_fn, collectValidatorRequirements_fn, analyzeDocument_fn, _commandService, _Editor_instances, initContainerElement_fn, init_fn, initRichText_fn, onFocus_fn, checkHeadless_fn, registerCopyHandler_fn, insertNewFileData_fn, registerPluginByNameIfNotExists_fn, createExtensionService_fn, createCommandService_fn, createConverter_fn, initMedia_fn, initFonts_fn, createSchema_fn, generatePmData_fn, createView_fn, onCollaborationReady_fn, initComments_fn, initPagination_fn, dispatchTransaction_fn, handleNodeSelection_fn, prepareDocumentForImport_fn, prepareDocumentForExport_fn, endCollaboration_fn, validateDocumentInit_fn, validateDocumentExport_fn, initDevTools_fn, _ListItemNodeView_instances, init_fn2, _FieldAnnotationView_instances, createAnnotation_fn, _AutoPageNumberNodeView_instances, renderDom_fn, scheduleUpdateNodeStyle_fn, _DocumentSectionView_instances, init_fn3, addToolTip_fn;
13
13
  import * as Y from "yjs";
14
14
  import { UndoManager, Item as Item$1, ContentType, Text as Text$1, XmlElement, encodeStateAsUpdate } from "yjs";
15
- import { P as PluginKey, a as Plugin, M as Mapping, N as NodeSelection, S as Selection, T as TextSelection, b as Slice, D as DOMSerializer, F as Fragment, c as DOMParser$1, d as Mark$1, e as dropPoint, A as AllSelection, p as process$1, B as Buffer2, f as callOrGet, g as getExtensionConfigField, h as getMarkType, i as getMarksFromSelection, j as getNodeType, k as getSchemaTypeNameByName, l as Schema$1, m as cleanSchemaItem, n as canSplit, o as defaultBlockAt$1, q as liftTarget, r as canJoin, s as joinPoint, t as replaceStep$1, R as ReplaceAroundStep$1, u as isTextSelection, v as getMarkRange, w as isMarkActive, x as isNodeActive, y as deleteProps, z as processContent, C as ReplaceStep, E as NodeRange, G as findWrapping, L as ListHelpers, H as findParentNode, I as isMacOS, J as isIOS, K as getSchemaTypeByName, O as inputRulesPlugin, Q as TrackDeleteMarkName, U as TrackInsertMarkName, V as v4, W as TrackFormatMarkName, X as comments_module_events, Y as findMark, Z as objectIncludes, _ as AddMarkStep, $ as RemoveMarkStep, a0 as twipsToLines, a1 as pixelsToTwips, a2 as helpers, a3 as posToDOMRect, a4 as CommandService, a5 as SuperConverter, a6 as createDocument, a7 as createDocFromMarkdown, a8 as createDocFromHTML, a9 as EditorState, aa as hasSomeParentWithClass, ab as isActive, ac as unflattenListsInHtml, ad as parseSizeUnit, ae as minMax, af as getLineHeightValueString, ag as InputRule, ah as kebabCase, ai as findParentNodeClosestToPos, aj as getListItemStyleDefinitions, ak as docxNumberigHelpers, al as parseIndentElement, am as combineIndents, an as SelectionRange, ao as Transform, ap as isInTable$1, aq as generateDocxRandomId, ar as insertNewRelationship, as as updateDOMAttributes, at as htmlHandler } from "./converter-DYAHhSrg.js";
15
+ import { P as PluginKey, a as Plugin, M as Mapping, N as NodeSelection, S as Selection, T as TextSelection, b as Slice, D as DOMSerializer, F as Fragment, c as DOMParser$1, d as Mark$1, e as dropPoint, A as AllSelection, p as process$1, B as Buffer2, f as callOrGet, g as getExtensionConfigField, h as getMarkType, i as getMarksFromSelection, j as getNodeType, k as getSchemaTypeNameByName, l as Schema$1, m as cleanSchemaItem, n as canSplit, o as defaultBlockAt$1, q as liftTarget, r as canJoin, s as joinPoint, t as replaceStep$1, R as ReplaceAroundStep$1, u as isTextSelection, v as getMarkRange, w as isMarkActive, x as isNodeActive, y as deleteProps, z as processContent, C as ReplaceStep, E as NodeRange, G as findWrapping, L as ListHelpers, H as findParentNode, I as isMacOS, J as isIOS, K as getSchemaTypeByName, O as inputRulesPlugin, Q as TrackDeleteMarkName, U as TrackInsertMarkName, V as v4, W as TrackFormatMarkName, X as comments_module_events, Y as findMark, Z as objectIncludes, _ as AddMarkStep, $ as RemoveMarkStep, a0 as twipsToLines, a1 as pixelsToTwips, a2 as helpers, a3 as posToDOMRect, a4 as CommandService, a5 as SuperConverter, a6 as createDocument, a7 as createDocFromMarkdown, a8 as createDocFromHTML, a9 as EditorState, aa as hasSomeParentWithClass, ab as isActive, ac as unflattenListsInHtml, ad as parseSizeUnit, ae as minMax, af as getLineHeightValueString, ag as InputRule, ah as kebabCase, ai as findParentNodeClosestToPos, aj as getListItemStyleDefinitions, ak as docxNumberigHelpers, al as parseIndentElement, am as combineIndents, an as SelectionRange, ao as Transform, ap as isInTable$1, aq as generateDocxRandomId, ar as insertNewRelationship, as as updateDOMAttributes, at as htmlHandler } from "./converter-B_pO-5Ls.js";
16
16
  import { ref, computed, createElementBlock, openBlock, withModifiers, Fragment as Fragment$1, renderList, normalizeClass, createCommentVNode, toDisplayString, createElementVNode, createApp } from "vue";
17
- import { D as DocxZipper } from "./docx-zipper-BDbCmfbE.js";
17
+ import { D as DocxZipper } from "./docx-zipper-WaO3WaIz.js";
18
18
  var GOOD_LEAF_SIZE = 200;
19
19
  var RopeSequence = function RopeSequence2() {
20
20
  };
@@ -11675,9 +11675,11 @@ const toggleHeaderFooterEditMode = ({ editor, focusedSectionEditor, isEditMode,
11675
11675
  item.editor.view.dom.setAttribute("documentmode", documentMode);
11676
11676
  });
11677
11677
  if (isEditMode) {
11678
- const pm = document.querySelector(".ProseMirror");
11679
- pm.classList.add("header-footer-edit");
11680
- pm.setAttribute("aria-readonly", true);
11678
+ const pm = editor.view?.dom || editor.options.element?.querySelector?.(".ProseMirror");
11679
+ if (pm) {
11680
+ pm.classList.add("header-footer-edit");
11681
+ pm.setAttribute("aria-readonly", true);
11682
+ }
11681
11683
  }
11682
11684
  if (focusedSectionEditor) {
11683
11685
  focusedSectionEditor.view.focus();
@@ -12707,6 +12709,7 @@ const generateTableIfNecessary = ({ tableNode, annotationValues, tr, state }) =>
12707
12709
  const mappedRowStart = tr.mapping.map(absoluteRowStart);
12708
12710
  const rowEnd = mappedRowStart + rowNode.nodeSize;
12709
12711
  tr.replaceWith(mappedRowStart, rowEnd, Fragment.from(newRows));
12712
+ tr.setMeta("tableGeneration", true);
12710
12713
  } catch (error) {
12711
12714
  console.error("Error during row generation:", error);
12712
12715
  throw error;
@@ -13111,7 +13114,7 @@ function findFieldAnnotationsBetween(from2, to, doc2) {
13111
13114
  }
13112
13115
  function findRemovedFieldAnnotations(tr) {
13113
13116
  let removedNodes = [];
13114
- if (!tr.steps.length || tr.meta && !Object.keys(tr.meta).every((meta) => ["inputType", "uiEvent", "paste"].includes(meta)) || ["historyUndo", "historyRedo"].includes(tr.getMeta("inputType")) || ["drop"].includes(tr.getMeta("uiEvent")) || tr.getMeta("fieldAnnotationUpdate") === true) {
13117
+ if (!tr.steps.length || tr.meta && !Object.keys(tr.meta).every((meta) => ["inputType", "uiEvent", "paste"].includes(meta)) || ["historyUndo", "historyRedo"].includes(tr.getMeta("inputType")) || ["drop"].includes(tr.getMeta("uiEvent")) || tr.getMeta("fieldAnnotationUpdate") === true || tr.getMeta("tableGeneration") === true) {
13115
13118
  return removedNodes;
13116
13119
  }
13117
13120
  const hasDeletion = transactionDeletedAnything(tr);
@@ -14332,7 +14335,7 @@ const _Editor = class _Editor extends EventEmitter {
14332
14335
  setDocumentMode(documentMode) {
14333
14336
  let cleanedMode = documentMode?.toLowerCase() || "editing";
14334
14337
  if (!this.extensionService || !this.state) return;
14335
- const pm = document.querySelector(".ProseMirror");
14338
+ const pm = this.view?.dom || this.options.element?.querySelector?.(".ProseMirror");
14336
14339
  if (this.options.role === "viewer") cleanedMode = "viewing";
14337
14340
  if (this.options.role === "suggester" && cleanedMode === "editing") cleanedMode = "suggesting";
14338
14341
  if (cleanedMode === "viewing") {
@@ -14820,7 +14823,8 @@ const _Editor = class _Editor extends EventEmitter {
14820
14823
  files: this.options.content
14821
14824
  },
14822
14825
  media,
14823
- true
14826
+ true,
14827
+ updatedDocs
14824
14828
  );
14825
14829
  return updatedDocs;
14826
14830
  }
@@ -14886,7 +14890,7 @@ const _Editor = class _Editor extends EventEmitter {
14886
14890
  * @returns {Object | void} Migration results
14887
14891
  */
14888
14892
  processCollaborationMigrations() {
14889
- console.debug("[checkVersionMigrations] Current editor version", "0.20.2");
14893
+ console.debug("[checkVersionMigrations] Current editor version", "0.21.1");
14890
14894
  if (!this.options.ydoc) return;
14891
14895
  const metaMap = this.options.ydoc.getMap("meta");
14892
14896
  let docVersion = metaMap.get("version");
@@ -15380,9 +15384,11 @@ createView_fn = function(element) {
15380
15384
  isEditMode: false,
15381
15385
  documentMode: this.options.documentMode
15382
15386
  });
15383
- const pm = document.querySelector(".ProseMirror");
15384
- pm.classList.remove("header-footer-edit");
15385
- pm.setAttribute("aria-readonly", false);
15387
+ const pm = this.view?.dom || this.options.element?.querySelector?.(".ProseMirror");
15388
+ if (pm) {
15389
+ pm.classList.remove("header-footer-edit");
15390
+ pm.setAttribute("aria-readonly", false);
15391
+ }
15386
15392
  }
15387
15393
  setWordSelection(view, pos);
15388
15394
  }
@@ -17480,15 +17486,31 @@ const intToJapaneseCounting = (num) => {
17480
17486
  }
17481
17487
  return result;
17482
17488
  };
17483
- const CustomSelectionPluginKey = new PluginKey("CustomSelection");
17484
- const shouldAllowNativeContextMenu = (event) => {
17489
+ const isKeyboardInvocation = (event) => {
17490
+ return event.type === "contextmenu" && typeof event.detail === "number" && event.detail === 0 && (event.button === 0 || event.button === void 0) && event.clientX === 0 && event.clientY === 0;
17491
+ };
17492
+ const prefersNativeMenu = (event) => {
17485
17493
  if (!event) return false;
17486
17494
  if (event.ctrlKey || event.metaKey) {
17487
17495
  return true;
17488
17496
  }
17489
- const isKeyboardInvocation = event.type === "contextmenu" && typeof event.detail === "number" && event.detail === 0 && (event.button === 0 || event.button === void 0) && event.clientX === 0 && event.clientY === 0;
17490
- return Boolean(isKeyboardInvocation);
17497
+ return isKeyboardInvocation(event);
17491
17498
  };
17499
+ const shouldAllowNativeContextMenu = (event) => {
17500
+ return prefersNativeMenu(event);
17501
+ };
17502
+ const shouldBypassContextMenu = shouldAllowNativeContextMenu;
17503
+ const DEFAULT_SELECTION_STATE = Object.freeze({
17504
+ focused: false,
17505
+ preservedSelection: null,
17506
+ showVisualSelection: false,
17507
+ skipFocusReset: false
17508
+ });
17509
+ const normalizeSelectionState = (state = {}) => ({
17510
+ ...DEFAULT_SELECTION_STATE,
17511
+ ...state
17512
+ });
17513
+ const CustomSelectionPluginKey = new PluginKey("CustomSelection");
17492
17514
  const handleClickOutside = (event, editor) => {
17493
17515
  const editorElem = editor?.options?.element;
17494
17516
  if (!editorElem) return;
@@ -17525,11 +17547,7 @@ const CustomSelection = Extension.create({
17525
17547
  const customSelectionPlugin = new Plugin({
17526
17548
  key: CustomSelectionPluginKey,
17527
17549
  state: {
17528
- init: () => ({
17529
- focused: false,
17530
- preservedSelection: null,
17531
- showVisualSelection: false
17532
- }),
17550
+ init: () => ({ ...DEFAULT_SELECTION_STATE }),
17533
17551
  apply: (tr, value) => {
17534
17552
  const meta = getFocusMeta(tr);
17535
17553
  if (meta !== void 0) {
@@ -17560,7 +17578,8 @@ const CustomSelection = Extension.create({
17560
17578
  setFocusMeta(view.state.tr, {
17561
17579
  focused: true,
17562
17580
  preservedSelection: selection,
17563
- showVisualSelection: true
17581
+ showVisualSelection: true,
17582
+ skipFocusReset: true
17564
17583
  })
17565
17584
  );
17566
17585
  }
@@ -17581,7 +17600,8 @@ const CustomSelection = Extension.create({
17581
17600
  setFocusMeta(view.state.tr, {
17582
17601
  focused: true,
17583
17602
  preservedSelection: selection2,
17584
- showVisualSelection: true
17603
+ showVisualSelection: true,
17604
+ skipFocusReset: true
17585
17605
  })
17586
17606
  );
17587
17607
  this.editor.setOptions({
@@ -17604,7 +17624,8 @@ const CustomSelection = Extension.create({
17604
17624
  setFocusMeta(view.state.tr, {
17605
17625
  focused: true,
17606
17626
  preservedSelection: selection,
17607
- showVisualSelection: true
17627
+ showVisualSelection: true,
17628
+ skipFocusReset: false
17608
17629
  })
17609
17630
  );
17610
17631
  this.editor.setOptions({
@@ -17622,7 +17643,8 @@ const CustomSelection = Extension.create({
17622
17643
  setFocusMeta(view.state.tr, {
17623
17644
  focused: true,
17624
17645
  preservedSelection: selection,
17625
- showVisualSelection: true
17646
+ showVisualSelection: true,
17647
+ skipFocusReset: false
17626
17648
  })
17627
17649
  );
17628
17650
  }
@@ -17633,7 +17655,8 @@ const CustomSelection = Extension.create({
17633
17655
  setFocusMeta(view.state.tr, {
17634
17656
  focused: false,
17635
17657
  preservedSelection: null,
17636
- showVisualSelection: false
17658
+ showVisualSelection: false,
17659
+ skipFocusReset: false
17637
17660
  })
17638
17661
  );
17639
17662
  if (!selection.empty && !this.editor.options.element?.contains(target)) {
@@ -17650,12 +17673,20 @@ const CustomSelection = Extension.create({
17650
17673
  const isElement2 = target instanceof Element;
17651
17674
  const isToolbarBtn = isElement2 && isToolbarButton(target);
17652
17675
  const isToolbarInp = isElement2 && isToolbarInput(target);
17676
+ const focusState = getFocusState(view.state);
17677
+ if (focusState?.skipFocusReset) {
17678
+ view.dispatch(
17679
+ setFocusMeta(view.state.tr, normalizeSelectionState({ ...focusState, skipFocusReset: false }))
17680
+ );
17681
+ return false;
17682
+ }
17653
17683
  if (!isToolbarBtn && !isToolbarInp) {
17654
17684
  view.dispatch(
17655
17685
  setFocusMeta(view.state.tr, {
17656
17686
  focused: false,
17657
17687
  preservedSelection: null,
17658
- showVisualSelection: false
17688
+ showVisualSelection: false,
17689
+ skipFocusReset: false
17659
17690
  })
17660
17691
  );
17661
17692
  }
@@ -17666,12 +17697,16 @@ const CustomSelection = Extension.create({
17666
17697
  const isToolbarBtn = isElement2 && isToolbarButton(target);
17667
17698
  const isToolbarInp = isElement2 && isToolbarInput(target);
17668
17699
  const state = getFocusState(view.state);
17700
+ if (state?.skipFocusReset) {
17701
+ return false;
17702
+ }
17669
17703
  if (isToolbarBtn || isToolbarInp) {
17670
17704
  view.dispatch(
17671
17705
  setFocusMeta(view.state.tr, {
17672
17706
  focused: true,
17673
17707
  preservedSelection: state.preservedSelection || view.state.selection,
17674
- showVisualSelection: true
17708
+ showVisualSelection: true,
17709
+ skipFocusReset: false
17675
17710
  })
17676
17711
  );
17677
17712
  } else {
@@ -17679,7 +17714,8 @@ const CustomSelection = Extension.create({
17679
17714
  setFocusMeta(view.state.tr, {
17680
17715
  focused: false,
17681
17716
  preservedSelection: null,
17682
- showVisualSelection: false
17717
+ showVisualSelection: false,
17718
+ skipFocusReset: false
17683
17719
  })
17684
17720
  );
17685
17721
  }
@@ -33454,7 +33490,8 @@ const nodeResizer = (nodeNames = ["image"], editor) => {
33454
33490
  const prevSelection = prevState.selection;
33455
33491
  if (selection.from !== prevSelection.from || selection.to !== prevSelection.to) {
33456
33492
  setTimeout(() => {
33457
- const selectedResizableWrapper = document.querySelector(".sd-editor-resizable-wrapper");
33493
+ const searchRoot = editorView?.dom;
33494
+ const selectedResizableWrapper = searchRoot?.querySelector(".sd-editor-resizable-wrapper");
33458
33495
  if (selectedResizableWrapper) {
33459
33496
  showResizeHandles(view2, selectedResizableWrapper);
33460
33497
  } else {
@@ -33768,6 +33805,7 @@ export {
33768
33805
  SectionHelpers as o,
33769
33806
  getAllowedImageDimensions as p,
33770
33807
  replaceSelectionWithImagePlaceholder as r,
33808
+ shouldBypassContextMenu as s,
33771
33809
  useHighContrastMode as u,
33772
33810
  yUndoPluginKey as y
33773
33811
  };
@@ -1,6 +1,6 @@
1
1
  import { computed, createElementBlock, openBlock, createElementVNode, createCommentVNode, normalizeClass, normalizeStyle, ref, withKeys, unref, withModifiers, createBlock, toDisplayString, withDirectives, vModelText, nextTick, getCurrentInstance, createVNode, readonly, watch, onMounted, onBeforeUnmount, reactive, onBeforeMount, inject, onActivated, onDeactivated, createTextVNode, Fragment, Comment, defineComponent, provide, h, Teleport, toRef, renderSlot, isVNode, shallowRef, watchEffect, mergeProps, Transition, vShow, cloneVNode, Text, renderList, withCtx } from "vue";
2
- import { p as process$1 } from "./converter-DYAHhSrg.js";
3
- import { _ as _export_sfc, u as useHighContrastMode, g as global$1 } from "./editor-B1W7AdgQ.js";
2
+ import { p as process$1 } from "./converter-B_pO-5Ls.js";
3
+ import { _ as _export_sfc, u as useHighContrastMode, g as global$1 } from "./editor-DInvq7gF.js";
4
4
  const sanitizeNumber = (value, defaultNumber) => {
5
5
  let sanitized = value.replace(/[^0-9.]/g, "");
6
6
  sanitized = parseFloat(sanitized);
@@ -1,4 +1,4 @@
1
- import { a5 } from "./chunks/converter-DYAHhSrg.js";
1
+ import { a5 } from "./chunks/converter-B_pO-5Ls.js";
2
2
  import "vue";
3
3
  export {
4
4
  a5 as SuperConverter
@@ -1,5 +1,5 @@
1
- import "./chunks/converter-DYAHhSrg.js";
2
- import { D } from "./chunks/docx-zipper-BDbCmfbE.js";
1
+ import "./chunks/converter-B_pO-5Ls.js";
2
+ import { D } from "./chunks/docx-zipper-WaO3WaIz.js";
3
3
  export {
4
4
  D as default
5
5
  };
@@ -1,6 +1,6 @@
1
- import { E } from "./chunks/editor-B1W7AdgQ.js";
2
- import "./chunks/converter-DYAHhSrg.js";
3
- import "./chunks/docx-zipper-BDbCmfbE.js";
1
+ import { E } from "./chunks/editor-DInvq7gF.js";
2
+ import "./chunks/converter-B_pO-5Ls.js";
3
+ import "./chunks/docx-zipper-WaO3WaIz.js";
4
4
  export {
5
5
  E as Editor
6
6
  };
@@ -1,4 +1,4 @@
1
- import { J as JSZip } from "./chunks/docx-zipper-BDbCmfbE.js";
1
+ import { J as JSZip } from "./chunks/docx-zipper-WaO3WaIz.js";
2
2
  async function createZip(blobs, fileNames) {
3
3
  const zip = new JSZip();
4
4
  blobs.forEach((blob, index) => {
@@ -33,7 +33,7 @@ declare class DocxZipper {
33
33
  /**
34
34
  * Update [Content_Types].xml with extensions of new Image annotations
35
35
  */
36
- updateContentTypes(docx: any, media: any, fromJson: any): Promise<any>;
36
+ updateContentTypes(docx: any, media: any, fromJson: any, updatedDocs?: {}): Promise<any>;
37
37
  unzip(file: any): Promise<any>;
38
38
  updateZip({ docx, updatedDocs, originalDocxFile, media, fonts, isHeadless }: {
39
39
  docx: any;
@@ -98,19 +98,7 @@ export class SuperConverter {
98
98
  get docxHelpers(): any;
99
99
  parseFromXml(): void;
100
100
  parseXmlToJson(xml: any): any;
101
- getDocumentDefaultStyles(): {
102
- fontSizePt?: undefined;
103
- kern?: undefined;
104
- typeface?: undefined;
105
- panose?: undefined;
106
- fontFamilyCss?: undefined;
107
- } | {
108
- fontSizePt: number;
109
- kern: any;
110
- typeface: any;
111
- panose: any;
112
- fontFamilyCss: any;
113
- };
101
+ getDocumentDefaultStyles(): {};
114
102
  getDocumentFonts(): string;
115
103
  getDocumentInternalId(): void;
116
104
  createDocumentIdElement(): {
@@ -103,6 +103,7 @@ export function translateHardBreak(params: any): {
103
103
  };
104
104
  }[];
105
105
  };
106
+ export function ensureSectionLayoutDefaults(sectPr: any, converter: any): any;
106
107
  export function isLineBreakOnlyRun(node: any): any;
107
108
  export class DocxExporter {
108
109
  constructor(converter: any);
@@ -0,0 +1,24 @@
1
+ export const DEFAULT_PAGE_WIDTH_TWIPS: 12240;
2
+ export const DEFAULT_PAGE_MARGIN_TWIPS: 1440;
3
+ export const DEFAULT_CONTENT_WIDTH_TWIPS: number;
4
+ export const MIN_COLUMN_WIDTH_TWIPS: number;
5
+ export function pctToPercent(value: any): number;
6
+ export function resolveContentWidthTwips(): number;
7
+ export function resolveMeasurementWidthPx(measurement: any): number;
8
+ export function countColumnsInRow(row: any): any;
9
+ export function buildFallbackGridForTable({ params, rows, tableWidth, tableWidthMeasurement }: {
10
+ params: Partial<import("@translator").SCDecoderConfig>;
11
+ rows: any[];
12
+ tableWidth?: {
13
+ width?: number | null;
14
+ };
15
+ tableWidthMeasurement?: {
16
+ value?: number;
17
+ type?: string;
18
+ };
19
+ }): {
20
+ grid: Array<{
21
+ col: number;
22
+ }>;
23
+ columnWidths: number[];
24
+ } | null;
@@ -4,6 +4,7 @@
4
4
  * @property {boolean} focused - Whether editor is focused
5
5
  * @property {Object|null} preservedSelection - Stored selection
6
6
  * @property {boolean} showVisualSelection - Whether to show selection decoration
7
+ * @property {boolean} skipFocusReset - Whether to skip clearing selection on next focus
7
8
  */
8
9
  /**
9
10
  * Configuration options for CustomSelection
@@ -22,7 +23,6 @@
22
23
  * @private
23
24
  */
24
25
  export const CustomSelectionPluginKey: PluginKey<any>;
25
- export function shouldAllowNativeContextMenu(event: MouseEvent): boolean;
26
26
  /**
27
27
  * @module CustomSelection
28
28
  * @sidebarTitle Custom Selection
@@ -45,6 +45,10 @@ export type SelectionState = {
45
45
  * - Whether to show selection decoration
46
46
  */
47
47
  showVisualSelection: boolean;
48
+ /**
49
+ * - Whether to skip clearing selection on next focus
50
+ */
51
+ skipFocusReset: boolean;
48
52
  };
49
53
  /**
50
54
  * Configuration options for CustomSelection
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Determine if the native context menu should be allowed to appear.
3
+ * We bypass the custom menu when the user explicitly requests the system menu
4
+ * via modifier keys or when the event originated from a keyboard invocation.
5
+ * @param {MouseEvent} event
6
+ * @returns {boolean}
7
+ */
8
+ export function shouldBypassContextMenu(event: MouseEvent): boolean;
9
+ /**
10
+ * Determine if the native context menu should be allowed to appear.
11
+ * We bypass the custom menu when the user explicitly requests the system menu
12
+ * via modifier keys or when the event originated from a keyboard invocation.
13
+ * @param {MouseEvent} event
14
+ * @returns {boolean}
15
+ */
16
+ export function shouldUseNativeContextMenu(event: MouseEvent): boolean;
17
+ /**
18
+ * Determine if the native context menu should be allowed to appear.
19
+ * We bypass the custom menu when the user explicitly requests the system menu
20
+ * via modifier keys or when the event originated from a keyboard invocation.
21
+ * @param {MouseEvent} event
22
+ * @returns {boolean}
23
+ */
24
+ export function shouldAllowNativeContextMenu(event: MouseEvent): boolean;
@@ -9,14 +9,14 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
9
9
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
10
10
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
11
11
  var _SuperToolbar_instances, initToolbarGroups_fn, _interceptedCommands, makeToolbarItems_fn, initDefaultFonts_fn, updateHighlightColors_fn, deactivateAll_fn, updateToolbarHistory_fn, runCommandWithArgumentOnly_fn;
12
- import { av as getDefaultExportFromCjs, V as v4, T as TextSelection$1, v as getMarkRange, ay as vClickOutside, H as findParentNode, az as getActiveFormatting, ap as isInTable, aA as readFromClipboard, aB as handleClipboardPaste, aC as getFileObject, aD as runPropertyTranslators, aE as translator, aF as translator$1, aG as translator$2, aH as translator$3, aI as translator$4, aJ as translator$5, aK as translator$6, aL as translator$7, aM as translator$8, aN as translator$9, aO as translator$a, aP as translator$b, aQ as translator$c, aR as translator$d, aS as translator$e, aT as translator$f, aU as translator$g, aV as translator$h, aW as translator$i, aX as translator$j, aY as translator$k, aZ as translator$l, a_ as translator$m, a$ as translator$n, b0 as translator$o, b1 as translator$p, b2 as translator$q, b3 as translator$r, b4 as translator$s, b5 as translator$t, b6 as translator$u, b7 as translator$v, b8 as translator$w, b9 as translator$x, ba as translator$y, bb as translator$z, bc as translator$A, bd as translator$B, be as translator$C, bf as translator$D, bg as translator$E, bh as translator$F, bi as translator$G, bj as translator$H, bk as translator$I, bl as translator$J, bm as translator$K, bn as translator$L, bo as translator$M, bp as translator$N, bq as translator$O, br as translator$P, bs as translator$Q, bt as translator$R, bu as translator$S, bv as translator$T, bw as translator$U, bx as translator$V, by as translator$W, bz as translator$X, bA as translator$Y, bB as translator$Z, bC as translator$_, bD as translator$$, bE as translator$10, a as Plugin } from "./chunks/converter-DYAHhSrg.js";
13
- import { bF, a5, i, a2 } from "./chunks/converter-DYAHhSrg.js";
14
- import { _ as _export_sfc, u as useHighContrastMode, a as getQuickFormatList, b as generateLinkedStyleString, c as getFileOpener, d as checkAndProcessImage, r as replaceSelectionWithImagePlaceholder, e as uploadAndInsertImage, y as yUndoPluginKey, f as undoDepth, h as redoDepth, S as SlashMenuPluginKey, E as Editor, i as getStarterExtensions, P as Placeholder, j as getRichTextExtensions, M as Mark, k as Extension, A as Attribute, N as Node } from "./chunks/editor-B1W7AdgQ.js";
15
- import { n, C, o, T, l, p, m } from "./chunks/editor-B1W7AdgQ.js";
12
+ import { av as getDefaultExportFromCjs, V as v4, T as TextSelection$1, v as getMarkRange, ay as vClickOutside, H as findParentNode, az as getActiveFormatting, ap as isInTable, aA as readFromClipboard, aB as handleClipboardPaste, aC as getFileObject, aD as runPropertyTranslators, aE as translator, aF as translator$1, aG as translator$2, aH as translator$3, aI as translator$4, aJ as translator$5, aK as translator$6, aL as translator$7, aM as translator$8, aN as translator$9, aO as translator$a, aP as translator$b, aQ as translator$c, aR as translator$d, aS as translator$e, aT as translator$f, aU as translator$g, aV as translator$h, aW as translator$i, aX as translator$j, aY as translator$k, aZ as translator$l, a_ as translator$m, a$ as translator$n, b0 as translator$o, b1 as translator$p, b2 as translator$q, b3 as translator$r, b4 as translator$s, b5 as translator$t, b6 as translator$u, b7 as translator$v, b8 as translator$w, b9 as translator$x, ba as translator$y, bb as translator$z, bc as translator$A, bd as translator$B, be as translator$C, bf as translator$D, bg as translator$E, bh as translator$F, bi as translator$G, bj as translator$H, bk as translator$I, bl as translator$J, bm as translator$K, bn as translator$L, bo as translator$M, bp as translator$N, bq as translator$O, br as translator$P, bs as translator$Q, bt as translator$R, bu as translator$S, bv as translator$T, bw as translator$U, bx as translator$V, by as translator$W, bz as translator$X, bA as translator$Y, bB as translator$Z, bC as translator$_, bD as translator$$, bE as translator$10, a as Plugin } from "./chunks/converter-B_pO-5Ls.js";
13
+ import { bF, a5, i, a2 } from "./chunks/converter-B_pO-5Ls.js";
14
+ import { _ as _export_sfc, u as useHighContrastMode, a as getQuickFormatList, b as generateLinkedStyleString, c as getFileOpener, d as checkAndProcessImage, r as replaceSelectionWithImagePlaceholder, e as uploadAndInsertImage, y as yUndoPluginKey, f as undoDepth, h as redoDepth, s as shouldBypassContextMenu, S as SlashMenuPluginKey, E as Editor, i as getStarterExtensions, P as Placeholder, j as getRichTextExtensions, M as Mark, k as Extension, A as Attribute, N as Node } from "./chunks/editor-DInvq7gF.js";
15
+ import { n, C, o, T, l, p, m } from "./chunks/editor-DInvq7gF.js";
16
16
  import { ref, onMounted, createElementBlock, openBlock, normalizeClass, unref, Fragment, renderList, createElementVNode, withModifiers, toDisplayString, createCommentVNode, normalizeStyle, computed, watch, withDirectives, withKeys, vModelText, createTextVNode, createVNode, h, createApp, markRaw, nextTick, onBeforeUnmount, reactive, onUnmounted, renderSlot, shallowRef, createBlock, withCtx, resolveDynamicComponent, normalizeProps, guardReactiveProps } from "vue";
17
- import { t as toolbarIcons, s as sanitizeNumber, T as Toolbar, m as magicWandIcon, p as plusIconSvg, a as trashIconSvg, l as linkIconSvg, b as tableIconSvg, c as scissorsIconSvg, d as copyIconSvg, e as pasteIconSvg, f as borderNoneIconSvg, g as arrowsToDotIconSvg, h as arrowsLeftRightIconSvg, w as wrenchIconSvg, u as useMessage, N as NSkeleton } from "./chunks/toolbar-CCvglB_X.js";
17
+ import { t as toolbarIcons, s as sanitizeNumber, T as Toolbar, m as magicWandIcon, p as plusIconSvg, a as trashIconSvg, l as linkIconSvg, b as tableIconSvg, c as scissorsIconSvg, d as copyIconSvg, e as pasteIconSvg, f as borderNoneIconSvg, g as arrowsToDotIconSvg, h as arrowsLeftRightIconSvg, w as wrenchIconSvg, u as useMessage, N as NSkeleton } from "./chunks/toolbar-C15EomPB.js";
18
18
  import AIWriter from "./ai-writer.es.js";
19
- import { D } from "./chunks/docx-zipper-BDbCmfbE.js";
19
+ import { D } from "./chunks/docx-zipper-WaO3WaIz.js";
20
20
  import { createZip } from "./file-zipper.es.js";
21
21
  var eventemitter3 = { exports: {} };
22
22
  var hasRequiredEventemitter3;
@@ -2584,7 +2584,7 @@ class SuperToolbar extends EventEmitter {
2584
2584
  if (!argument) return;
2585
2585
  item.onActivate({ zoom: argument });
2586
2586
  this.emit("superdoc-command", { item, argument });
2587
- const layers = document.querySelector(this.superdoc.config.selector)?.querySelector(".layers");
2587
+ const layers = this.superdoc.element?.querySelector(".layers");
2588
2588
  if (!layers) return;
2589
2589
  const isMobileDevice = typeof screen.orientation !== "undefined";
2590
2590
  const isSmallScreen = window.matchMedia("(max-width: 834px)").matches;
@@ -3695,14 +3695,6 @@ function getStructureFromResolvedPos(state, pos) {
3695
3695
  return null;
3696
3696
  }
3697
3697
  }
3698
- const shouldBypassContextMenu = (event) => {
3699
- if (!event) return false;
3700
- if (event.ctrlKey || event.metaKey) {
3701
- return true;
3702
- }
3703
- const isKeyboardInvocation = event.type === "contextmenu" && typeof event.detail === "number" && event.detail === 0 && (event.button === 0 || event.button === void 0) && event.clientX === 0 && event.clientY === 0;
3704
- return Boolean(isKeyboardInvocation);
3705
- };
3706
3698
  const isModuleEnabled = (editorOptions, moduleName) => {
3707
3699
  switch (moduleName) {
3708
3700
  case "ai":
@@ -1,6 +1,6 @@
1
1
  import "vue";
2
- import { T } from "./chunks/toolbar-CCvglB_X.js";
3
- import "./chunks/editor-B1W7AdgQ.js";
2
+ import { T } from "./chunks/toolbar-C15EomPB.js";
3
+ import "./chunks/editor-DInvq7gF.js";
4
4
  export {
5
5
  T as default
6
6
  };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const superEditor_es = require("./chunks/super-editor.es-Ct59l8tt.cjs");
3
+ const superEditor_es = require("./chunks/super-editor.es-HekVJogH.cjs");
4
4
  require("./chunks/vue-DWle4Cai.cjs");
5
5
  exports.AIWriter = superEditor_es.AIWriter;
6
6
  exports.AnnotatorHelpers = superEditor_es.AnnotatorHelpers;
@@ -1,4 +1,4 @@
1
- import { A, a, _, C, D, E, b, S, c, d, e, f, g, T, h, i, j, k, l, m, n, o, p, r, q } from "./chunks/super-editor.es-C5dhT0uU.es.js";
1
+ import { A, a, _, C, D, E, b, S, c, d, e, f, g, T, h, i, j, k, l, m, n, o, p, r, q } from "./chunks/super-editor.es-D__G4K0i.es.js";
2
2
  import "./chunks/vue-CXxsqYcP.es.js";
3
3
  export {
4
4
  A as AIWriter,