@harbour-enterprises/superdoc 0.20.0-next.10 → 0.20.0-next.11

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,5 +1,5 @@
1
1
  import { m as defineComponent, B as h, O as Transition, $ as process$1, I as watchEffect, d as computed, r as ref, j as onMounted, W as onUnmounted, c as createElementBlock, o as openBlock, a as createBaseVNode, f as createCommentVNode, v as createVNode, x as unref } from "./vue-CXxsqYcP.es.js";
2
- import { d as derived, c, a as cB, f as fadeInTransition, b as cM, N as NBaseLoading, w as warnOnce, u as useConfig, e as useTheme, p as pxfy, g as createKey, h as useThemeClass, i as useCompitable, _ as _export_sfc, j as useSuperdocStore, s as storeToRefs, k as useSelection } from "./index-BWLk-GjX.es.js";
2
+ import { d as derived, c, a as cB, f as fadeInTransition, b as cM, N as NBaseLoading, w as warnOnce, u as useConfig, e as useTheme, p as pxfy, g as createKey, h as useThemeClass, i as useCompitable, _ as _export_sfc, j as useSuperdocStore, s as storeToRefs, k as useSelection } from "./index-CFeCZJDO.es.js";
3
3
  function self(vars) {
4
4
  const {
5
5
  opacityDisabled,
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const vue = require("./vue-DWle4Cai.cjs");
4
- const superdoc = require("./index-BbzkKu8K.cjs");
4
+ const superdoc = require("./index-C--co6k8.cjs");
5
5
  function self(vars) {
6
6
  const {
7
7
  opacityDisabled,
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- const superEditor_es = require("./super-editor.es--aCMUiMA.cjs");
2
+ const superEditor_es = require("./super-editor.es-BNRMY4Gs.cjs");
3
3
  const vue = require("./vue-DWle4Cai.cjs");
4
4
  const jszip = require("./jszip-b7l8QkfH.cjs");
5
5
  const blankDocx = require("./blank-docx-CPqX9RF5.cjs");
@@ -17386,7 +17386,7 @@ const _sfc_main = {
17386
17386
  __name: "SuperDoc",
17387
17387
  emits: ["selection-update"],
17388
17388
  setup(__props, { emit: __emit }) {
17389
- const PdfViewer = vue.defineAsyncComponent(() => Promise.resolve().then(() => require("./PdfViewer-DOggjrQG.cjs")));
17389
+ const PdfViewer = vue.defineAsyncComponent(() => Promise.resolve().then(() => require("./PdfViewer-BVxDiIC8.cjs")));
17390
17390
  const superdocStore = useSuperdocStore();
17391
17391
  const commentsStore = useCommentsStore();
17392
17392
  const {
@@ -1,4 +1,4 @@
1
- import { q as index$1, C as CommentsPluginKey, h as TrackChangesBasePluginKey, E as Editor, n as getRichTextExtensions, f as SuperInput, e as SuperEditor, A as AIWriter, g as SuperToolbar, i as createZip } from "./super-editor.es-Czm6AhQx.es.js";
1
+ import { q as index$1, C as CommentsPluginKey, h as TrackChangesBasePluginKey, E as Editor, n as getRichTextExtensions, f as SuperInput, e as SuperEditor, A as AIWriter, g as SuperToolbar, i as createZip } from "./super-editor.es-C1EWiBwN.es.js";
2
2
  import { a0 as effectScope, r as ref, _ as markRaw, $ as process$1, a1 as toRaw, d as computed, a2 as isRef, a3 as isReactive, C as toRef, i as inject, p as getCurrentInstance, l as watch, x as unref, a4 as hasInjectionContext, M as reactive, s as nextTick, a5 as getCurrentScope, a6 as onScopeDispose, a7 as toRefs, g as global$1, J as shallowRef, N as readonly, j as onMounted, k as onBeforeUnmount, h as onBeforeMount, S as onActivated, q as onDeactivated, z as createTextVNode, F as Fragment, Q as Comment, m as defineComponent, D as provide, H as withDirectives, B as h, U as Teleport, R as renderSlot, V as isVNode, I as watchEffect, O as Transition, a8 as TransitionGroup, E as mergeProps, P as vShow, G as cloneVNode, T as Text, c as createElementBlock, o as openBlock, t as toDisplayString, v as createVNode, y as withCtx, a as createBaseVNode, A as normalizeStyle, f as createCommentVNode, u as createBlock, w as withModifiers, n as normalizeClass, a9 as resolveDirective, e as renderList, b as createApp, X as resolveDynamicComponent, aa as defineAsyncComponent } from "./vue-CXxsqYcP.es.js";
3
3
  import { B as Buffer$2 } from "./jszip-B8KIZSNe.es.js";
4
4
  import { B as BlankDOCX } from "./blank-docx-iwdyG9RH.es.js";
@@ -17369,7 +17369,7 @@ const _sfc_main = {
17369
17369
  __name: "SuperDoc",
17370
17370
  emits: ["selection-update"],
17371
17371
  setup(__props, { emit: __emit }) {
17372
- const PdfViewer = defineAsyncComponent(() => import("./PdfViewer-Dqmc7nRW.es.js"));
17372
+ const PdfViewer = defineAsyncComponent(() => import("./PdfViewer-B5kpcQ0M.es.js"));
17373
17373
  const superdocStore = useSuperdocStore();
17374
17374
  const commentsStore = useCommentsStore();
17375
17375
  const {
@@ -30569,15 +30569,90 @@ const lineBreakNodeHandlerEntity = {
30569
30569
  handlerName: "lineBreakNodeHandler",
30570
30570
  handler
30571
30571
  };
30572
+ const handleBookmarkNode = (params2) => {
30573
+ const { nodes, nodeListHandler, editor } = params2;
30574
+ if (nodes.length === 0 || nodes[0].name !== "w:bookmarkStart") {
30575
+ return { nodes: [], consumed: 0 };
30576
+ }
30577
+ const node = nodes[0];
30578
+ const handleStandardNode2 = nodeListHandler.handlerEntities.find(
30579
+ (e) => e.handlerName === "standardNodeHandler"
30580
+ )?.handler;
30581
+ if (!handleStandardNode2) {
30582
+ console.error("Standard node handler not found");
30583
+ return { nodes: [], consumed: 0 };
30584
+ }
30585
+ const customMarks = editor?.extensionService?.extensions?.filter((e) => e.isExternal === true) || [];
30586
+ const bookmarkName = node.attributes["w:name"]?.split(";")[0];
30587
+ const customMark = customMarks.find((mark) => mark.name === bookmarkName);
30588
+ if (customMark) {
30589
+ const bookmarkEndIndex = nodes.findIndex(
30590
+ (n) => n.name === "w:bookmarkEnd" && n.attributes["w:id"] === node.attributes["w:id"]
30591
+ );
30592
+ const textNodes = nodes.slice(1, bookmarkEndIndex);
30593
+ const nodeListHandler2 = params2.nodeListHandler;
30594
+ const attrs = {};
30595
+ node.attributes["w:name"].split(";").forEach((name) => {
30596
+ const [key2, value] = name.split("=");
30597
+ if (key2 && value) {
30598
+ attrs[key2] = value;
30599
+ }
30600
+ });
30601
+ const translatedText = nodeListHandler2.handler({
30602
+ ...params2,
30603
+ nodes: textNodes,
30604
+ path: [...params2.path || [], node]
30605
+ });
30606
+ translatedText.forEach((n) => {
30607
+ n.marks.push({
30608
+ type: customMark.name,
30609
+ attrs
30610
+ });
30611
+ });
30612
+ return {
30613
+ nodes: translatedText,
30614
+ consumed: translatedText.length + 2
30615
+ };
30616
+ }
30617
+ const updatedParams = { ...params2, nodes: [node] };
30618
+ const result = handleStandardNode2(updatedParams);
30619
+ if (result.nodes.length === 1) {
30620
+ result.nodes[0].attrs.name = node.attributes["w:name"];
30621
+ result.nodes[0].attrs.id = node.attributes["w:id"];
30622
+ }
30623
+ return result;
30624
+ };
30572
30625
  const handleBookmarkStartNode = (params2) => {
30573
30626
  const { nodes } = params2;
30574
30627
  if (!nodes.length || nodes[0].name !== "w:bookmarkStart") {
30575
30628
  return { nodes: [], consumed: 0 };
30576
30629
  }
30630
+ if (isCustomMarkBookmark(nodes[0], params2.editor)) {
30631
+ return handleBookmarkNode(params2);
30632
+ }
30577
30633
  const node = translator$3.encode(params2);
30578
30634
  if (!node) return { nodes: [], consumed: 0 };
30579
30635
  return { nodes: [node], consumed: 1 };
30580
30636
  };
30637
+ const isCustomMarkBookmark = (bookmarkStartNode, editor) => {
30638
+ if (!bookmarkStartNode?.attributes || !editor?.extensionService?.extensions) {
30639
+ return false;
30640
+ }
30641
+ const rawBookmarkName = bookmarkStartNode.attributes["w:name"];
30642
+ if (!rawBookmarkName || typeof rawBookmarkName !== "string") {
30643
+ return false;
30644
+ }
30645
+ const [bookmarkName, ...bookmarkPayloadParts] = rawBookmarkName.split(";");
30646
+ if (!bookmarkName) {
30647
+ return false;
30648
+ }
30649
+ const customMarks = editor.extensionService.extensions.filter((extension) => extension.isExternal === true);
30650
+ const matchesCustomMarkName = customMarks.some((mark) => mark.name === bookmarkName);
30651
+ if (!matchesCustomMarkName) {
30652
+ return false;
30653
+ }
30654
+ return bookmarkPayloadParts.some((part) => part && part.includes("="));
30655
+ };
30581
30656
  const bookmarkStartNodeHandlerEntity = {
30582
30657
  handlerName: "w:bookmarkStartTranslator",
30583
30658
  handler: handleBookmarkStartNode
@@ -31614,6 +31689,7 @@ function filterOutRootInlineNodes(content = []) {
31614
31689
  const INLINE_TYPES = /* @__PURE__ */ new Set([
31615
31690
  "text",
31616
31691
  "bookmarkStart",
31692
+ "bookmarkEnd",
31617
31693
  "lineBreak",
31618
31694
  "hardBreak",
31619
31695
  "pageNumber",
@@ -30552,15 +30552,90 @@ const lineBreakNodeHandlerEntity = {
30552
30552
  handlerName: "lineBreakNodeHandler",
30553
30553
  handler
30554
30554
  };
30555
+ const handleBookmarkNode = (params2) => {
30556
+ const { nodes, nodeListHandler, editor } = params2;
30557
+ if (nodes.length === 0 || nodes[0].name !== "w:bookmarkStart") {
30558
+ return { nodes: [], consumed: 0 };
30559
+ }
30560
+ const node = nodes[0];
30561
+ const handleStandardNode2 = nodeListHandler.handlerEntities.find(
30562
+ (e) => e.handlerName === "standardNodeHandler"
30563
+ )?.handler;
30564
+ if (!handleStandardNode2) {
30565
+ console.error("Standard node handler not found");
30566
+ return { nodes: [], consumed: 0 };
30567
+ }
30568
+ const customMarks = editor?.extensionService?.extensions?.filter((e) => e.isExternal === true) || [];
30569
+ const bookmarkName = node.attributes["w:name"]?.split(";")[0];
30570
+ const customMark = customMarks.find((mark) => mark.name === bookmarkName);
30571
+ if (customMark) {
30572
+ const bookmarkEndIndex = nodes.findIndex(
30573
+ (n) => n.name === "w:bookmarkEnd" && n.attributes["w:id"] === node.attributes["w:id"]
30574
+ );
30575
+ const textNodes = nodes.slice(1, bookmarkEndIndex);
30576
+ const nodeListHandler2 = params2.nodeListHandler;
30577
+ const attrs = {};
30578
+ node.attributes["w:name"].split(";").forEach((name) => {
30579
+ const [key2, value] = name.split("=");
30580
+ if (key2 && value) {
30581
+ attrs[key2] = value;
30582
+ }
30583
+ });
30584
+ const translatedText = nodeListHandler2.handler({
30585
+ ...params2,
30586
+ nodes: textNodes,
30587
+ path: [...params2.path || [], node]
30588
+ });
30589
+ translatedText.forEach((n) => {
30590
+ n.marks.push({
30591
+ type: customMark.name,
30592
+ attrs
30593
+ });
30594
+ });
30595
+ return {
30596
+ nodes: translatedText,
30597
+ consumed: translatedText.length + 2
30598
+ };
30599
+ }
30600
+ const updatedParams = { ...params2, nodes: [node] };
30601
+ const result = handleStandardNode2(updatedParams);
30602
+ if (result.nodes.length === 1) {
30603
+ result.nodes[0].attrs.name = node.attributes["w:name"];
30604
+ result.nodes[0].attrs.id = node.attributes["w:id"];
30605
+ }
30606
+ return result;
30607
+ };
30555
30608
  const handleBookmarkStartNode = (params2) => {
30556
30609
  const { nodes } = params2;
30557
30610
  if (!nodes.length || nodes[0].name !== "w:bookmarkStart") {
30558
30611
  return { nodes: [], consumed: 0 };
30559
30612
  }
30613
+ if (isCustomMarkBookmark(nodes[0], params2.editor)) {
30614
+ return handleBookmarkNode(params2);
30615
+ }
30560
30616
  const node = translator$3.encode(params2);
30561
30617
  if (!node) return { nodes: [], consumed: 0 };
30562
30618
  return { nodes: [node], consumed: 1 };
30563
30619
  };
30620
+ const isCustomMarkBookmark = (bookmarkStartNode, editor) => {
30621
+ if (!bookmarkStartNode?.attributes || !editor?.extensionService?.extensions) {
30622
+ return false;
30623
+ }
30624
+ const rawBookmarkName = bookmarkStartNode.attributes["w:name"];
30625
+ if (!rawBookmarkName || typeof rawBookmarkName !== "string") {
30626
+ return false;
30627
+ }
30628
+ const [bookmarkName, ...bookmarkPayloadParts] = rawBookmarkName.split(";");
30629
+ if (!bookmarkName) {
30630
+ return false;
30631
+ }
30632
+ const customMarks = editor.extensionService.extensions.filter((extension) => extension.isExternal === true);
30633
+ const matchesCustomMarkName = customMarks.some((mark) => mark.name === bookmarkName);
30634
+ if (!matchesCustomMarkName) {
30635
+ return false;
30636
+ }
30637
+ return bookmarkPayloadParts.some((part) => part && part.includes("="));
30638
+ };
30564
30639
  const bookmarkStartNodeHandlerEntity = {
30565
30640
  handlerName: "w:bookmarkStartTranslator",
30566
30641
  handler: handleBookmarkStartNode
@@ -31597,6 +31672,7 @@ function filterOutRootInlineNodes(content = []) {
31597
31672
  const INLINE_TYPES = /* @__PURE__ */ new Set([
31598
31673
  "text",
31599
31674
  "bookmarkStart",
31675
+ "bookmarkEnd",
31600
31676
  "lineBreak",
31601
31677
  "hardBreak",
31602
31678
  "pageNumber",
@@ -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-CJg7BSkp.js";
3
- import { _ as _export_sfc } from "./chunks/editor-CZE0QdnY.js";
2
+ import { T as TextSelection } from "./chunks/converter-DhWdHs1e.js";
3
+ import { _ as _export_sfc } from "./chunks/editor-ByzXx8DR.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 = {}) {
@@ -30559,15 +30559,90 @@ const lineBreakNodeHandlerEntity = {
30559
30559
  handlerName: "lineBreakNodeHandler",
30560
30560
  handler
30561
30561
  };
30562
+ const handleBookmarkNode = (params) => {
30563
+ const { nodes, nodeListHandler, editor } = params;
30564
+ if (nodes.length === 0 || nodes[0].name !== "w:bookmarkStart") {
30565
+ return { nodes: [], consumed: 0 };
30566
+ }
30567
+ const node = nodes[0];
30568
+ const handleStandardNode2 = nodeListHandler.handlerEntities.find(
30569
+ (e) => e.handlerName === "standardNodeHandler"
30570
+ )?.handler;
30571
+ if (!handleStandardNode2) {
30572
+ console.error("Standard node handler not found");
30573
+ return { nodes: [], consumed: 0 };
30574
+ }
30575
+ const customMarks = editor?.extensionService?.extensions?.filter((e) => e.isExternal === true) || [];
30576
+ const bookmarkName = node.attributes["w:name"]?.split(";")[0];
30577
+ const customMark = customMarks.find((mark) => mark.name === bookmarkName);
30578
+ if (customMark) {
30579
+ const bookmarkEndIndex = nodes.findIndex(
30580
+ (n) => n.name === "w:bookmarkEnd" && n.attributes["w:id"] === node.attributes["w:id"]
30581
+ );
30582
+ const textNodes = nodes.slice(1, bookmarkEndIndex);
30583
+ const nodeListHandler2 = params.nodeListHandler;
30584
+ const attrs = {};
30585
+ node.attributes["w:name"].split(";").forEach((name) => {
30586
+ const [key, value] = name.split("=");
30587
+ if (key && value) {
30588
+ attrs[key] = value;
30589
+ }
30590
+ });
30591
+ const translatedText = nodeListHandler2.handler({
30592
+ ...params,
30593
+ nodes: textNodes,
30594
+ path: [...params.path || [], node]
30595
+ });
30596
+ translatedText.forEach((n) => {
30597
+ n.marks.push({
30598
+ type: customMark.name,
30599
+ attrs
30600
+ });
30601
+ });
30602
+ return {
30603
+ nodes: translatedText,
30604
+ consumed: translatedText.length + 2
30605
+ };
30606
+ }
30607
+ const updatedParams = { ...params, nodes: [node] };
30608
+ const result = handleStandardNode2(updatedParams);
30609
+ if (result.nodes.length === 1) {
30610
+ result.nodes[0].attrs.name = node.attributes["w:name"];
30611
+ result.nodes[0].attrs.id = node.attributes["w:id"];
30612
+ }
30613
+ return result;
30614
+ };
30562
30615
  const handleBookmarkStartNode = (params) => {
30563
30616
  const { nodes } = params;
30564
30617
  if (!nodes.length || nodes[0].name !== "w:bookmarkStart") {
30565
30618
  return { nodes: [], consumed: 0 };
30566
30619
  }
30620
+ if (isCustomMarkBookmark(nodes[0], params.editor)) {
30621
+ return handleBookmarkNode(params);
30622
+ }
30567
30623
  const node = translator$3.encode(params);
30568
30624
  if (!node) return { nodes: [], consumed: 0 };
30569
30625
  return { nodes: [node], consumed: 1 };
30570
30626
  };
30627
+ const isCustomMarkBookmark = (bookmarkStartNode, editor) => {
30628
+ if (!bookmarkStartNode?.attributes || !editor?.extensionService?.extensions) {
30629
+ return false;
30630
+ }
30631
+ const rawBookmarkName = bookmarkStartNode.attributes["w:name"];
30632
+ if (!rawBookmarkName || typeof rawBookmarkName !== "string") {
30633
+ return false;
30634
+ }
30635
+ const [bookmarkName, ...bookmarkPayloadParts] = rawBookmarkName.split(";");
30636
+ if (!bookmarkName) {
30637
+ return false;
30638
+ }
30639
+ const customMarks = editor.extensionService.extensions.filter((extension) => extension.isExternal === true);
30640
+ const matchesCustomMarkName = customMarks.some((mark) => mark.name === bookmarkName);
30641
+ if (!matchesCustomMarkName) {
30642
+ return false;
30643
+ }
30644
+ return bookmarkPayloadParts.some((part) => part && part.includes("="));
30645
+ };
30571
30646
  const bookmarkStartNodeHandlerEntity = {
30572
30647
  handlerName: "w:bookmarkStartTranslator",
30573
30648
  handler: handleBookmarkStartNode
@@ -31604,6 +31679,7 @@ function filterOutRootInlineNodes(content = []) {
31604
31679
  const INLINE_TYPES = /* @__PURE__ */ new Set([
31605
31680
  "text",
31606
31681
  "bookmarkStart",
31682
+ "bookmarkEnd",
31607
31683
  "lineBreak",
31608
31684
  "hardBreak",
31609
31685
  "pageNumber",
@@ -1,4 +1,4 @@
1
- import { p as process$1, av as commonjsGlobal, B as Buffer, aw as getDefaultExportFromCjs, ax as getContentTypesFromXml, ay as xmljs } from "./converter-CJg7BSkp.js";
1
+ import { p as process$1, av as commonjsGlobal, B as Buffer, aw as getDefaultExportFromCjs, ax as getContentTypesFromXml, ay as xmljs } from "./converter-DhWdHs1e.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
  }
@@ -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 StepMap, ao as SelectionRange, ap as Transform, aq as isInTable$1, ar as generateDocxRandomId, as as insertNewRelationship, at as updateDOMAttributes, au as htmlHandler } from "./converter-CJg7BSkp.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 StepMap, ao as SelectionRange, ap as Transform, aq as isInTable$1, ar as generateDocxRandomId, as as insertNewRelationship, at as updateDOMAttributes, au as htmlHandler } from "./converter-DhWdHs1e.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-D56KgEUM.js";
17
+ import { D as DocxZipper } from "./docx-zipper-BH3Y9ODp.js";
18
18
  var GOOD_LEAF_SIZE = 200;
19
19
  var RopeSequence = function RopeSequence2() {
20
20
  };
@@ -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-CJg7BSkp.js";
3
- import { _ as _export_sfc, u as useHighContrastMode, g as global$1 } from "./editor-CZE0QdnY.js";
2
+ import { p as process$1 } from "./converter-DhWdHs1e.js";
3
+ import { _ as _export_sfc, u as useHighContrastMode, g as global$1 } from "./editor-ByzXx8DR.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-CJg7BSkp.js";
1
+ import { a5 } from "./chunks/converter-DhWdHs1e.js";
2
2
  import "vue";
3
3
  export {
4
4
  a5 as SuperConverter
@@ -1,5 +1,5 @@
1
- import "./chunks/converter-CJg7BSkp.js";
2
- import { D } from "./chunks/docx-zipper-D56KgEUM.js";
1
+ import "./chunks/converter-DhWdHs1e.js";
2
+ import { D } from "./chunks/docx-zipper-BH3Y9ODp.js";
3
3
  export {
4
4
  D as default
5
5
  };
@@ -1,6 +1,6 @@
1
- import { E } from "./chunks/editor-CZE0QdnY.js";
2
- import "./chunks/converter-CJg7BSkp.js";
3
- import "./chunks/docx-zipper-D56KgEUM.js";
1
+ import { E } from "./chunks/editor-ByzXx8DR.js";
2
+ import "./chunks/converter-DhWdHs1e.js";
3
+ import "./chunks/docx-zipper-BH3Y9ODp.js";
4
4
  export {
5
5
  E as Editor
6
6
  };
@@ -1,4 +1,4 @@
1
- import { J as JSZip } from "./chunks/docx-zipper-D56KgEUM.js";
1
+ import { J as JSZip } from "./chunks/docx-zipper-BH3Y9ODp.js";
2
2
  async function createZip(blobs, fileNames) {
3
3
  const zip = new JSZip();
4
4
  blobs.forEach((blob, index) => {
@@ -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 { aw as getDefaultExportFromCjs, V as v4, T as TextSelection$1, v as getMarkRange, az as vClickOutside, H as findParentNode, aA as getActiveFormatting, aq as isInTable, aB as readFromClipboard, aC as handleClipboardPaste, aD as getFileObject, a as Plugin } from "./chunks/converter-CJg7BSkp.js";
13
- import { aE, a5, i, a2, aF } from "./chunks/converter-CJg7BSkp.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-CZE0QdnY.js";
15
- import { n, C, o, T, l, p, m } from "./chunks/editor-CZE0QdnY.js";
12
+ import { aw as getDefaultExportFromCjs, V as v4, T as TextSelection$1, v as getMarkRange, az as vClickOutside, H as findParentNode, aA as getActiveFormatting, aq as isInTable, aB as readFromClipboard, aC as handleClipboardPaste, aD as getFileObject, a as Plugin } from "./chunks/converter-DhWdHs1e.js";
13
+ import { aE, a5, i, a2, aF } from "./chunks/converter-DhWdHs1e.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-ByzXx8DR.js";
15
+ import { n, C, o, T, l, p, m } from "./chunks/editor-ByzXx8DR.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-YvqMpKof.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-BgZD9aZZ.js";
18
18
  import AIWriter from "./ai-writer.es.js";
19
- import { D } from "./chunks/docx-zipper-D56KgEUM.js";
19
+ import { D } from "./chunks/docx-zipper-BH3Y9ODp.js";
20
20
  import { createZip } from "./file-zipper.es.js";
21
21
  var eventemitter3 = { exports: {} };
22
22
  var hasRequiredEventemitter3;
@@ -1,6 +1,6 @@
1
1
  import "vue";
2
- import { T } from "./chunks/toolbar-YvqMpKof.js";
3
- import "./chunks/editor-CZE0QdnY.js";
2
+ import { T } from "./chunks/toolbar-BgZD9aZZ.js";
3
+ import "./chunks/editor-ByzXx8DR.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--aCMUiMA.cjs");
3
+ const superEditor_es = require("./chunks/super-editor.es-BNRMY4Gs.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-Czm6AhQx.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-C1EWiBwN.es.js";
2
2
  import "./chunks/vue-CXxsqYcP.es.js";
3
3
  export {
4
4
  A as AIWriter,
package/dist/superdoc.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const superEditor_es = require("./chunks/super-editor.es--aCMUiMA.cjs");
4
- const superdoc = require("./chunks/index-BbzkKu8K.cjs");
3
+ const superEditor_es = require("./chunks/super-editor.es-BNRMY4Gs.cjs");
4
+ const superdoc = require("./chunks/index-C--co6k8.cjs");
5
5
  require("./chunks/vue-DWle4Cai.cjs");
6
6
  require("./chunks/jszip-b7l8QkfH.cjs");
7
7
  const blankDocx = require("./chunks/blank-docx-CPqX9RF5.cjs");
@@ -1,5 +1,5 @@
1
- import { a, E, b, S, d, i, j, n, r, p, q } from "./chunks/super-editor.es-Czm6AhQx.es.js";
2
- import { D, H, P, S as S2, m, l } from "./chunks/index-BWLk-GjX.es.js";
1
+ import { a, E, b, S, d, i, j, n, r, p, q } from "./chunks/super-editor.es-C1EWiBwN.es.js";
2
+ import { D, H, P, S as S2, m, l } from "./chunks/index-CFeCZJDO.es.js";
3
3
  import "./chunks/vue-CXxsqYcP.es.js";
4
4
  import "./chunks/jszip-B8KIZSNe.es.js";
5
5
  import { B } from "./chunks/blank-docx-iwdyG9RH.es.js";
@@ -38294,15 +38294,90 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38294
38294
  handlerName: "lineBreakNodeHandler",
38295
38295
  handler
38296
38296
  };
38297
+ const handleBookmarkNode = (params2) => {
38298
+ const { nodes, nodeListHandler, editor } = params2;
38299
+ if (nodes.length === 0 || nodes[0].name !== "w:bookmarkStart") {
38300
+ return { nodes: [], consumed: 0 };
38301
+ }
38302
+ const node = nodes[0];
38303
+ const handleStandardNode2 = nodeListHandler.handlerEntities.find(
38304
+ (e) => e.handlerName === "standardNodeHandler"
38305
+ )?.handler;
38306
+ if (!handleStandardNode2) {
38307
+ console.error("Standard node handler not found");
38308
+ return { nodes: [], consumed: 0 };
38309
+ }
38310
+ const customMarks = editor?.extensionService?.extensions?.filter((e) => e.isExternal === true) || [];
38311
+ const bookmarkName = node.attributes["w:name"]?.split(";")[0];
38312
+ const customMark = customMarks.find((mark) => mark.name === bookmarkName);
38313
+ if (customMark) {
38314
+ const bookmarkEndIndex = nodes.findIndex(
38315
+ (n) => n.name === "w:bookmarkEnd" && n.attributes["w:id"] === node.attributes["w:id"]
38316
+ );
38317
+ const textNodes = nodes.slice(1, bookmarkEndIndex);
38318
+ const nodeListHandler2 = params2.nodeListHandler;
38319
+ const attrs = {};
38320
+ node.attributes["w:name"].split(";").forEach((name) => {
38321
+ const [key2, value] = name.split("=");
38322
+ if (key2 && value) {
38323
+ attrs[key2] = value;
38324
+ }
38325
+ });
38326
+ const translatedText = nodeListHandler2.handler({
38327
+ ...params2,
38328
+ nodes: textNodes,
38329
+ path: [...params2.path || [], node]
38330
+ });
38331
+ translatedText.forEach((n) => {
38332
+ n.marks.push({
38333
+ type: customMark.name,
38334
+ attrs
38335
+ });
38336
+ });
38337
+ return {
38338
+ nodes: translatedText,
38339
+ consumed: translatedText.length + 2
38340
+ };
38341
+ }
38342
+ const updatedParams = { ...params2, nodes: [node] };
38343
+ const result = handleStandardNode2(updatedParams);
38344
+ if (result.nodes.length === 1) {
38345
+ result.nodes[0].attrs.name = node.attributes["w:name"];
38346
+ result.nodes[0].attrs.id = node.attributes["w:id"];
38347
+ }
38348
+ return result;
38349
+ };
38297
38350
  const handleBookmarkStartNode = (params2) => {
38298
38351
  const { nodes } = params2;
38299
38352
  if (!nodes.length || nodes[0].name !== "w:bookmarkStart") {
38300
38353
  return { nodes: [], consumed: 0 };
38301
38354
  }
38355
+ if (isCustomMarkBookmark(nodes[0], params2.editor)) {
38356
+ return handleBookmarkNode(params2);
38357
+ }
38302
38358
  const node = translator$3.encode(params2);
38303
38359
  if (!node) return { nodes: [], consumed: 0 };
38304
38360
  return { nodes: [node], consumed: 1 };
38305
38361
  };
38362
+ const isCustomMarkBookmark = (bookmarkStartNode, editor) => {
38363
+ if (!bookmarkStartNode?.attributes || !editor?.extensionService?.extensions) {
38364
+ return false;
38365
+ }
38366
+ const rawBookmarkName = bookmarkStartNode.attributes["w:name"];
38367
+ if (!rawBookmarkName || typeof rawBookmarkName !== "string") {
38368
+ return false;
38369
+ }
38370
+ const [bookmarkName, ...bookmarkPayloadParts] = rawBookmarkName.split(";");
38371
+ if (!bookmarkName) {
38372
+ return false;
38373
+ }
38374
+ const customMarks = editor.extensionService.extensions.filter((extension) => extension.isExternal === true);
38375
+ const matchesCustomMarkName = customMarks.some((mark) => mark.name === bookmarkName);
38376
+ if (!matchesCustomMarkName) {
38377
+ return false;
38378
+ }
38379
+ return bookmarkPayloadParts.some((part) => part && part.includes("="));
38380
+ };
38306
38381
  const bookmarkStartNodeHandlerEntity = {
38307
38382
  handlerName: "w:bookmarkStartTranslator",
38308
38383
  handler: handleBookmarkStartNode
@@ -39312,6 +39387,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39312
39387
  const INLINE_TYPES = /* @__PURE__ */ new Set([
39313
39388
  "text",
39314
39389
  "bookmarkStart",
39390
+ "bookmarkEnd",
39315
39391
  "lineBreak",
39316
39392
  "hardBreak",
39317
39393
  "pageNumber",