@harbour-enterprises/superdoc 0.12.31 → 0.12.34-next.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 (66) hide show
  1. package/dist/chunks/{super-editor.es-BxaiA9ut.cjs → super-editor.es-C2uZFYse.cjs} +599 -269
  2. package/dist/chunks/{super-editor.es-CYH3KblY.es.js → super-editor.es-mtzaNl_I.es.js} +613 -283
  3. package/dist/composables/use-high-contrast-mode.d.ts +5 -0
  4. package/dist/composables/use-high-contrast-mode.d.ts.map +1 -0
  5. package/dist/core/SuperDoc.d.ts +7 -0
  6. package/dist/core/SuperDoc.d.ts.map +1 -1
  7. package/dist/core/create-app.d.ts.map +1 -1
  8. package/dist/index.d.ts +2 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/style.css +299 -245
  11. package/dist/super-editor/ai-writer.es.js +2 -2
  12. package/dist/super-editor/chunks/{converter-Dm2_Htrh.js → converter-CenRPnts.js} +2 -2
  13. package/dist/super-editor/chunks/{docx-zipper-CU11jH41.js → docx-zipper-DdgXH9QX.js} +7 -3
  14. package/dist/super-editor/chunks/{editor-CISWiQkg.js → editor-B44D-Ttm.js} +190 -67
  15. package/dist/super-editor/chunks/{toolbar-Dgo3wQvN.js → toolbar-DmkQTZha.js} +80 -36
  16. package/dist/super-editor/components/toolbar/defaultItems.d.ts.map +1 -1
  17. package/dist/super-editor/composables/use-high-contrast-mode.d.ts +5 -0
  18. package/dist/super-editor/composables/use-high-contrast-mode.d.ts.map +1 -0
  19. package/dist/super-editor/converter.es.js +1 -1
  20. package/dist/super-editor/core/DocxZipper.d.ts +1 -1
  21. package/dist/super-editor/core/DocxZipper.d.ts.map +1 -1
  22. package/dist/super-editor/core/Editor.d.ts +2 -1
  23. package/dist/super-editor/core/Editor.d.ts.map +1 -1
  24. package/dist/super-editor/core/InputRule.d.ts.map +1 -1
  25. package/dist/super-editor/core/helpers/annotator.d.ts +17 -3
  26. package/dist/super-editor/core/helpers/annotator.d.ts.map +1 -1
  27. package/dist/super-editor/docx-zipper.es.js +2 -2
  28. package/dist/super-editor/editor.es.js +3 -3
  29. package/dist/super-editor/extensions/ai/ai-nodes.d.ts.map +1 -1
  30. package/dist/super-editor/extensions/bookmarks/bookmarks.d.ts.map +1 -1
  31. package/dist/super-editor/extensions/bullet-list/bullet-list.d.ts.map +1 -1
  32. package/dist/super-editor/extensions/collaboration/collaboration-helpers.d.ts.map +1 -1
  33. package/dist/super-editor/extensions/comment/comment.d.ts.map +1 -1
  34. package/dist/super-editor/extensions/document/document.d.ts.map +1 -1
  35. package/dist/super-editor/extensions/field-annotation/field-annotation.d.ts.map +1 -1
  36. package/dist/super-editor/extensions/field-annotation/fieldAnnotationHelpers/getHeaderFooterAnnotations.d.ts +2 -0
  37. package/dist/super-editor/extensions/field-annotation/fieldAnnotationHelpers/getHeaderFooterAnnotations.d.ts.map +1 -0
  38. package/dist/super-editor/extensions/field-annotation/fieldAnnotationHelpers/index.d.ts +1 -0
  39. package/dist/super-editor/extensions/heading/heading.d.ts.map +1 -1
  40. package/dist/super-editor/extensions/image/image.d.ts.map +1 -1
  41. package/dist/super-editor/extensions/line-break/line-break.d.ts.map +1 -1
  42. package/dist/super-editor/extensions/list-item/list-item.d.ts.map +1 -1
  43. package/dist/super-editor/extensions/mention/mention.d.ts.map +1 -1
  44. package/dist/super-editor/extensions/ordered-list/ordered-list.d.ts.map +1 -1
  45. package/dist/super-editor/extensions/page-number/page-number.d.ts.map +1 -1
  46. package/dist/super-editor/extensions/pagination/pagination-helpers.d.ts.map +1 -1
  47. package/dist/super-editor/extensions/run-item/run-item.d.ts.map +1 -1
  48. package/dist/super-editor/extensions/shape-container/shape-container.d.ts.map +1 -1
  49. package/dist/super-editor/extensions/shape-textbox/shape-textbox.d.ts.map +1 -1
  50. package/dist/super-editor/extensions/structured-content/structured-content.d.ts.map +1 -1
  51. package/dist/super-editor/extensions/table/table.d.ts.map +1 -1
  52. package/dist/super-editor/extensions/table-cell/table-cell.d.ts.map +1 -1
  53. package/dist/super-editor/extensions/table-header/table-header.d.ts.map +1 -1
  54. package/dist/super-editor/extensions/table-row/table-row.d.ts.map +1 -1
  55. package/dist/super-editor/file-zipper.es.js +1 -1
  56. package/dist/super-editor/index.d.ts +1 -1
  57. package/dist/super-editor/style.css +243 -196
  58. package/dist/super-editor/super-editor.es.js +335 -174
  59. package/dist/super-editor/toolbar.es.js +2 -2
  60. package/dist/super-editor.cjs +2 -1
  61. package/dist/super-editor.es.js +15 -14
  62. package/dist/superdoc.cjs +35 -9
  63. package/dist/superdoc.es.js +233 -207
  64. package/dist/superdoc.umd.js +636 -281
  65. package/dist/superdoc.umd.js.map +1 -1
  66. package/package.json +2 -2
@@ -23307,7 +23307,7 @@ const _SuperConverter = class _SuperConverter2 {
23307
23307
  return;
23308
23308
  }
23309
23309
  }
23310
- static updateDocumentVersion(docx = this.convertedXml, version2 = "0.12.31") {
23310
+ static updateDocumentVersion(docx = this.convertedXml, version2 = "0.12.34-next.1") {
23311
23311
  const customLocation = "docProps/custom.xml";
23312
23312
  if (!docx[customLocation]) {
23313
23313
  docx[customLocation] = generateCustomXml();
@@ -23773,7 +23773,7 @@ function storeSuperdocVersion(docx) {
23773
23773
  function generateCustomXml() {
23774
23774
  return DEFAULT_CUSTOM_XML;
23775
23775
  }
23776
- function generateSuperdocVersion(pid = 2, version2 = "0.12.31") {
23776
+ function generateSuperdocVersion(pid = 2, version2 = "0.12.34-next.1") {
23777
23777
  return {
23778
23778
  type: "element",
23779
23779
  name: "property",
@@ -26173,12 +26173,15 @@ class DocxZipper {
26173
26173
  /**
26174
26174
  * Update [Content_Types].xml with extensions of new Image annotations
26175
26175
  */
26176
- async updateContentTypes(docx, media) {
26176
+ async updateContentTypes(docx, media, fromJson) {
26177
26177
  const newMediaTypes = Object.keys(media).map((name) => {
26178
26178
  return this.getFileExtension(name);
26179
26179
  });
26180
26180
  const contentTypesPath = "[Content_Types].xml";
26181
- const contentTypesXml = await docx.file(contentTypesPath).async("string");
26181
+ let contentTypesXml;
26182
+ if (fromJson) {
26183
+ contentTypesXml = docx.files.find((file) => file.name === contentTypesPath)?.content || "";
26184
+ } else contentTypesXml = await docx.file(contentTypesPath).async("string");
26182
26185
  let typesString = "";
26183
26186
  const defaultMediaTypes = getContentTypesFromXml(contentTypesXml);
26184
26187
  const seenTypes = /* @__PURE__ */ new Set();
@@ -26222,6 +26225,7 @@ class DocxZipper {
26222
26225
  });
26223
26226
  const beginningString = '<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">';
26224
26227
  const updatedContentTypesXml = contentTypesXml.replace(beginningString, `${beginningString}${typesString}`);
26228
+ if (fromJson) return updatedContentTypesXml;
26225
26229
  docx.file(contentTypesPath, updatedContentTypesXml);
26226
26230
  }
26227
26231
  async unzip(file) {
@@ -38221,6 +38225,10 @@ const inputRulesPlugin = ({ editor, rules }) => {
38221
38225
  const clipboard = event.clipboardData;
38222
38226
  const html = clipboard.getData("text/html");
38223
38227
  clipboard.getData("text/plain");
38228
+ const fieldAnnotationContent = slice2.content.content.filter((item) => item.type.name === "fieldAnnotation");
38229
+ if (fieldAnnotationContent.length) {
38230
+ return false;
38231
+ }
38224
38232
  let source;
38225
38233
  if (!html) {
38226
38234
  source = "plain-text";
@@ -38999,16 +39007,14 @@ const updateYdocDocxData = async (editor) => {
38999
39007
  const docx = [...metaMap.get("docx")];
39000
39008
  const newXml = await editor.exportDocx({ getUpdatedDocs: true });
39001
39009
  Object.keys(newXml).forEach((key) => {
39002
- if (key.includes("header") || key.includes("footer")) {
39003
- const fileIndex = docx.findIndex((item) => item.name === key);
39004
- if (fileIndex > -1) {
39005
- docx.splice(fileIndex, 1);
39006
- }
39007
- docx.push({
39008
- name: key,
39009
- content: newXml[key]
39010
- });
39010
+ const fileIndex = docx.findIndex((item) => item.name === key);
39011
+ if (fileIndex > -1) {
39012
+ docx.splice(fileIndex, 1);
39011
39013
  }
39014
+ docx.push({
39015
+ name: key,
39016
+ content: newXml[key]
39017
+ });
39012
39018
  });
39013
39019
  editor.options.ydoc.transact(() => {
39014
39020
  metaMap.set("docx", docx);
@@ -39118,6 +39124,9 @@ const createHeaderFooterEditor = ({
39118
39124
  pm.style.minHeight = "100%";
39119
39125
  pm.style.outline = "none";
39120
39126
  pm.style.border = "none";
39127
+ pm.setAttribute("role", "textbox");
39128
+ pm.setAttribute("aria-multiline", true);
39129
+ pm.setAttribute("aria-label", `${type2} content area. Double click to start typing.`);
39121
39130
  return headerFooterEditor;
39122
39131
  };
39123
39132
  const broadcastEditorEvents = (editor, sectionEditor) => {
@@ -39139,13 +39148,16 @@ const broadcastEditorEvents = (editor, sectionEditor) => {
39139
39148
  const toggleHeaderFooterEditMode = (editor, focusedSectionEditor, isEditMode) => {
39140
39149
  editor.converter.headerEditors.forEach((item) => {
39141
39150
  item.editor.setEditable(isEditMode, false);
39151
+ item.editor.view.dom.setAttribute("aria-readonly", !isEditMode);
39142
39152
  });
39143
39153
  editor.converter.footerEditors.forEach((item) => {
39144
39154
  item.editor.setEditable(isEditMode, false);
39155
+ item.editor.view.dom.setAttribute("aria-readonly", !isEditMode);
39145
39156
  });
39146
39157
  if (isEditMode) {
39147
39158
  const pm = document.querySelector(".ProseMirror");
39148
39159
  pm.classList.add("header-footer-edit");
39160
+ pm.setAttribute("aria-readonly", true);
39149
39161
  }
39150
39162
  if (focusedSectionEditor) {
39151
39163
  focusedSectionEditor.view.focus();
@@ -40064,11 +40076,12 @@ const generateTableIfNecessary = ({ tableNode, annotationValues, tr, state: stat
40064
40076
  const getAnnotationValue = (id, annotationValues) => {
40065
40077
  return annotationValues.find((value) => value.input_id === id)?.input_value || null;
40066
40078
  };
40067
- const annotateHeadersAndFooters = ({ editor, annotationValues = [], hiddenFieldIds = [] }) => {
40079
+ const getAllHeaderFooterEditors = (editor) => {
40068
40080
  const sections = {
40069
40081
  header: editor.converter.headers || {},
40070
40082
  footer: editor.converter.footers || {}
40071
40083
  };
40084
+ const allEditors = [];
40072
40085
  Object.entries(sections).forEach(([type2, items]) => {
40073
40086
  const editorsKey = `${type2}Editors`;
40074
40087
  Object.entries(items).forEach(([sectionId, data]) => {
@@ -40086,25 +40099,38 @@ const annotateHeadersAndFooters = ({ editor, annotationValues = [], hiddenFieldI
40086
40099
  })
40087
40100
  };
40088
40101
  editor.converter[editorsKey].push(sectionEditor);
40102
+ allEditors.push({
40103
+ ...sectionEditor,
40104
+ key: editorsKey,
40105
+ type: type2,
40106
+ sectionId
40107
+ });
40089
40108
  }
40090
- sectionEditor.editor.annotate(annotationValues, hiddenFieldIds);
40091
- onHeaderFooterDataUpdate(
40092
- { editor: sectionEditor.editor },
40093
- editor,
40094
- sectionId,
40095
- type2
40096
- );
40097
40109
  });
40098
40110
  });
40111
+ return allEditors;
40112
+ };
40113
+ const annotateHeadersAndFooters = ({ editor, annotationValues = [], hiddenFieldIds = [], removeEmptyFields = false }) => {
40114
+ const allEditors = getAllHeaderFooterEditors(editor);
40115
+ allEditors.forEach(({ sectionId, editor: sectionEditor, type: type2 }) => {
40116
+ sectionEditor.annotate(annotationValues, hiddenFieldIds, removeEmptyFields);
40117
+ onHeaderFooterDataUpdate(
40118
+ { editor: sectionEditor },
40119
+ editor,
40120
+ sectionId,
40121
+ type2
40122
+ );
40123
+ });
40099
40124
  };
40100
40125
  const annotateDocument = ({
40101
40126
  annotationValues = [],
40102
40127
  hiddenFieldIds = [],
40128
+ removeEmptyFields = false,
40103
40129
  schema,
40104
40130
  tr,
40105
40131
  editor
40106
40132
  }) => {
40107
- annotateHeadersAndFooters({ editor, annotationValues, hiddenFieldIds });
40133
+ annotateHeadersAndFooters({ editor, annotationValues, hiddenFieldIds, removeEmptyFields });
40108
40134
  const annotations = [];
40109
40135
  const FieldType = schema.nodes.fieldAnnotation;
40110
40136
  tr.doc.descendants((node2, pos) => {
@@ -40157,11 +40183,13 @@ const annotateDocument = ({
40157
40183
  });
40158
40184
  }
40159
40185
  }
40160
- Array.from(toDelete).sort((a, b) => b - a).forEach((pos) => {
40161
- const ann = annotations.find((a) => a.pos === pos);
40162
- if (!ann) return;
40163
- tr = tr.delete(pos, pos + ann.node.nodeSize);
40164
- });
40186
+ if (removeEmptyFields) {
40187
+ Array.from(toDelete).sort((a, b) => b - a).forEach((pos) => {
40188
+ const ann = annotations.find((a) => a.pos === pos);
40189
+ if (!ann) return;
40190
+ tr = tr.delete(pos, pos + ann.node.nodeSize);
40191
+ });
40192
+ }
40165
40193
  return tr;
40166
40194
  };
40167
40195
  const getFormattedDate = (input = null, format = "") => {
@@ -40179,11 +40207,40 @@ const getFormattedDate = (input = null, format = "") => {
40179
40207
  // e.g. “2025”
40180
40208
  });
40181
40209
  };
40182
- const AnnotatorServices = {
40210
+ const updateHeaderFooterFieldAnnotations = ({ editor, fieldIdOrArray, attrs = {} }) => {
40211
+ if (!editor) return;
40212
+ const sectionEditors = getAllHeaderFooterEditors(editor);
40213
+ sectionEditors.forEach(({ editor: sectionEditor, sectionId, type: type2 }) => {
40214
+ sectionEditor.commands.updateFieldAnnotations(fieldIdOrArray, attrs);
40215
+ onHeaderFooterDataUpdate(
40216
+ { editor: sectionEditor },
40217
+ editor,
40218
+ sectionId,
40219
+ type2
40220
+ );
40221
+ });
40222
+ };
40223
+ const deleteHeaderFooterFieldAnnotations = ({ editor, fieldIdOrArray }) => {
40224
+ if (!editor) return;
40225
+ const sectionEditors = getAllHeaderFooterEditors(editor);
40226
+ sectionEditors.forEach(({ editor: sectionEditor, sectionId, type: type2 }) => {
40227
+ sectionEditor.commands.deleteFieldAnnotations(fieldIdOrArray);
40228
+ onHeaderFooterDataUpdate(
40229
+ { editor: sectionEditor },
40230
+ editor,
40231
+ sectionId,
40232
+ type2
40233
+ );
40234
+ });
40235
+ };
40236
+ const AnnotatorHelpers = {
40183
40237
  getFieldAttrs,
40184
40238
  processTables,
40185
40239
  annotateDocument,
40186
- annotateHeadersAndFooters
40240
+ annotateHeadersAndFooters,
40241
+ getAllHeaderFooterEditors,
40242
+ updateHeaderFooterFieldAnnotations,
40243
+ deleteHeaderFooterFieldAnnotations
40187
40244
  };
40188
40245
  const CollaborationPluginKey = new PluginKey("collaboration");
40189
40246
  const Collaboration = Extension.create({
@@ -40333,6 +40390,16 @@ const generateCollaborationData = (editor) => {
40333
40390
  initializeMetaMap(ydoc, editor);
40334
40391
  return Y.encodeStateAsUpdate(ydoc);
40335
40392
  };
40393
+ const isHighContrastMode = vue.ref(false);
40394
+ function useHighContrastMode() {
40395
+ const setHighContrastMode = (value) => {
40396
+ isHighContrastMode.value = value;
40397
+ };
40398
+ return {
40399
+ isHighContrastMode,
40400
+ setHighContrastMode
40401
+ };
40402
+ }
40336
40403
  const _Editor = class _Editor2 extends EventEmitter$1 {
40337
40404
  /**
40338
40405
  * Create a new Editor instance
@@ -40425,6 +40492,8 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
40425
40492
  }
40426
40493
  };
40427
40494
  let initMode = modes[this.options.mode] ?? modes.default;
40495
+ const { setHighContrastMode } = useHighContrastMode();
40496
+ this.setHighContrastMode = setHighContrastMode;
40428
40497
  initMode();
40429
40498
  }
40430
40499
  /**
@@ -40721,6 +40790,10 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
40721
40790
  if (!proseMirror || !pageSize || !pageMargins) {
40722
40791
  return;
40723
40792
  }
40793
+ proseMirror.setAttribute("role", "document");
40794
+ proseMirror.setAttribute("aria-multiline", true);
40795
+ proseMirror.setAttribute("aria-label", "Main content area, start typing to enter text.");
40796
+ proseMirror.setAttribute("aria-description", "");
40724
40797
  element.style.width = pageSize.width + "in";
40725
40798
  element.style.minWidth = pageSize.width + "in";
40726
40799
  element.style.minHeight = pageSize.height + "in";
@@ -40929,8 +41002,13 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
40929
41002
  updatedDocs["word/commentsExtensible.xml"] = String(commentsExtensibleXml);
40930
41003
  updatedDocs["word/commentsIds.xml"] = String(commentsIdsXml);
40931
41004
  }
40932
- if (getUpdatedDocs) return updatedDocs;
40933
41005
  const zipper = new DocxZipper();
41006
+ if (getUpdatedDocs) {
41007
+ updatedDocs["[Content_Types].xml"] = await zipper.updateContentTypes({
41008
+ files: this.options.content
41009
+ }, media, true);
41010
+ return updatedDocs;
41011
+ }
40934
41012
  const result = await zipper.updateZip({
40935
41013
  docx: this.options.content,
40936
41014
  updatedDocs,
@@ -40972,7 +41050,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
40972
41050
  * @returns {Object | void} Migration results
40973
41051
  */
40974
41052
  processCollaborationMigrations() {
40975
- console.debug("[checkVersionMigrations] Current editor version", "0.12.31");
41053
+ console.debug("[checkVersionMigrations] Current editor version", "0.12.34-next.1");
40976
41054
  if (!this.options.ydoc) return;
40977
41055
  const metaMap = this.options.ydoc.getMap("meta");
40978
41056
  let docVersion = metaMap.get("version");
@@ -41061,10 +41139,8 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
41061
41139
  */
41062
41140
  prepareForAnnotations(annotationValues = []) {
41063
41141
  const { tr } = this.state;
41064
- const { dispatch } = this.view;
41065
- const newTr = AnnotatorServices.processTables({ state: this.state, tr, annotationValues });
41142
+ const newTr = AnnotatorHelpers.processTables({ state: this.state, tr, annotationValues });
41066
41143
  this.view.dispatch(newTr);
41067
- AnnotatorServices.annotateHeadersAndFooters({ editor: this, annotationValues });
41068
41144
  }
41069
41145
  /**
41070
41146
  * Annotate the document with the given annotation values.
@@ -41073,15 +41149,16 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
41073
41149
  * @param {String[]} hiddenIds List of field ids to remove from the document.
41074
41150
  * @returns {void}
41075
41151
  */
41076
- annotate(annotationValues = [], hiddenIds = []) {
41152
+ annotate(annotationValues = [], hiddenIds = [], removeEmptyFields = false) {
41077
41153
  const { state: state2, view, schema } = this;
41078
41154
  let tr = state2.tr;
41079
- tr = AnnotatorServices.processTables({ state: this.state, tr, annotationValues });
41080
- tr = AnnotatorServices.annotateDocument({
41155
+ tr = AnnotatorHelpers.processTables({ state: this.state, tr, annotationValues });
41156
+ tr = AnnotatorHelpers.annotateDocument({
41081
41157
  tr,
41082
41158
  schema,
41083
41159
  annotationValues,
41084
41160
  hiddenFieldIds: hiddenIds,
41161
+ removeEmptyFields,
41085
41162
  editor: this
41086
41163
  });
41087
41164
  if (tr.docChanged) view.dispatch(tr.scrollIntoView());
@@ -41336,6 +41413,7 @@ createView_fn = function() {
41336
41413
  toggleHeaderFooterEditMode(this, null, false);
41337
41414
  const pm = document.querySelector(".ProseMirror");
41338
41415
  pm.classList.remove("header-footer-edit");
41416
+ pm.setAttribute("aria-readonly", false);
41339
41417
  }
41340
41418
  }
41341
41419
  });
@@ -42308,7 +42386,8 @@ const AiLoaderNode = Node$1.create({
42308
42386
  return {
42309
42387
  htmlAttributes: {
42310
42388
  class: "sd-ai-loader",
42311
- contentEditable: "false"
42389
+ contentEditable: "false",
42390
+ "aria-label": "AI loader node"
42312
42391
  }
42313
42392
  };
42314
42393
  },
@@ -42504,7 +42583,8 @@ const Document = Node$1.create({
42504
42583
  addAttributes() {
42505
42584
  return {
42506
42585
  attributes: {
42507
- rendered: false
42586
+ rendered: false,
42587
+ "aria-label": "Document node"
42508
42588
  }
42509
42589
  };
42510
42590
  }
@@ -42528,7 +42608,8 @@ const RunItem = Node$1.create({
42528
42608
  addAttributes() {
42529
42609
  return {
42530
42610
  attributes: {
42531
- rendered: false
42611
+ rendered: false,
42612
+ "aria-label": "Run node"
42532
42613
  }
42533
42614
  };
42534
42615
  }
@@ -42581,7 +42662,9 @@ const BulletList = Node$1.create({
42581
42662
  addOptions() {
42582
42663
  return {
42583
42664
  itemTypeName: "listItem",
42584
- htmlAttributes: {},
42665
+ htmlAttributes: {
42666
+ "aria-label": "Bullet list node"
42667
+ },
42585
42668
  keepMarks: true,
42586
42669
  keepAttributes: false
42587
42670
  };
@@ -42872,7 +42955,9 @@ const OrderedList = Node$1.create({
42872
42955
  addOptions() {
42873
42956
  return {
42874
42957
  itemTypeName: "listItem",
42875
- htmlAttributes: {},
42958
+ htmlAttributes: {
42959
+ "aria-label": "Ordered list node"
42960
+ },
42876
42961
  keepMarks: true,
42877
42962
  keepAttributes: false,
42878
42963
  listStyleTypes: ["decimal", "lowerAlpha", "lowerRoman"]
@@ -43272,7 +43357,9 @@ const ListItem = Node$1.create({
43272
43357
  // to run listItem commands first
43273
43358
  addOptions() {
43274
43359
  return {
43275
- htmlAttributes: {},
43360
+ htmlAttributes: {
43361
+ "aria-label": "List item node"
43362
+ },
43276
43363
  bulletListTypeName: "bulletList",
43277
43364
  orderedListTypeName: "orderedList"
43278
43365
  };
@@ -43794,7 +43881,9 @@ const Heading = Node$1.create({
43794
43881
  addOptions() {
43795
43882
  return {
43796
43883
  levels: [1, 2, 3, 4, 5, 6],
43797
- htmlAttributes: {}
43884
+ htmlAttributes: {
43885
+ "aria-label": "Heading node"
43886
+ }
43798
43887
  };
43799
43888
  },
43800
43889
  addAttributes() {
@@ -43855,7 +43944,8 @@ const CommentRangeStart = Node$1.create({
43855
43944
  addOptions() {
43856
43945
  return {
43857
43946
  htmlAttributes: {
43858
- contentEditable: "false"
43947
+ contentEditable: "false",
43948
+ "aria-label": "Comment range start node"
43859
43949
  }
43860
43950
  };
43861
43951
  },
@@ -43884,7 +43974,8 @@ const CommentRangeEnd = Node$1.create({
43884
43974
  addOptions() {
43885
43975
  return {
43886
43976
  htmlAttributes: {
43887
- contentEditable: "false"
43977
+ contentEditable: "false",
43978
+ "aria-label": "Comment range end node"
43888
43979
  }
43889
43980
  };
43890
43981
  },
@@ -43912,7 +44003,8 @@ const CommentReference = Node$1.create({
43912
44003
  addOptions() {
43913
44004
  return {
43914
44005
  htmlAttributes: {
43915
- contentEditable: "false"
44006
+ contentEditable: "false",
44007
+ "aria-label": "Comment reference node"
43916
44008
  }
43917
44009
  };
43918
44010
  },
@@ -44087,7 +44179,9 @@ const HardBreak = Node$1.create({
44087
44179
  return {
44088
44180
  htmlAttributes: {
44089
44181
  contentEditable: "false",
44090
- lineBreakType: "page"
44182
+ lineBreakType: "page",
44183
+ "aria-hidden": "true",
44184
+ "aria-label": "Hard break node"
44091
44185
  }
44092
44186
  };
44093
44187
  },
@@ -46445,7 +46539,9 @@ const Table = Node$1.create({
46445
46539
  tableRole: "table",
46446
46540
  addOptions() {
46447
46541
  return {
46448
- htmlAttributes: {},
46542
+ htmlAttributes: {
46543
+ "aria-label": "Table node"
46544
+ },
46449
46545
  resizable: true,
46450
46546
  handleWidth: 5,
46451
46547
  cellMinWidth: 25,
@@ -46695,7 +46791,9 @@ const TableHeader = Node$1.create({
46695
46791
  isolating: true,
46696
46792
  addOptions() {
46697
46793
  return {
46698
- htmlAttributes: {}
46794
+ htmlAttributes: {
46795
+ "aria-label": "Table head node"
46796
+ }
46699
46797
  };
46700
46798
  },
46701
46799
  addAttributes() {
@@ -46735,7 +46833,9 @@ const TableRow = Node$1.create({
46735
46833
  tableRole: "row",
46736
46834
  addOptions() {
46737
46835
  return {
46738
- htmlAttributes: {}
46836
+ htmlAttributes: {
46837
+ "aria-label": "Table row node"
46838
+ }
46739
46839
  };
46740
46840
  },
46741
46841
  addAttributes() {
@@ -46763,7 +46863,9 @@ const TableCell = Node$1.create({
46763
46863
  isolating: true,
46764
46864
  addOptions() {
46765
46865
  return {
46766
- htmlAttributes: {}
46866
+ htmlAttributes: {
46867
+ "aria-label": "Table cell node"
46868
+ }
46767
46869
  };
46768
46870
  },
46769
46871
  addAttributes() {
@@ -47305,6 +47407,15 @@ function findFieldAnnotationsBetween(from2, to, doc2) {
47305
47407
  });
47306
47408
  return fieldAnnotations;
47307
47409
  }
47410
+ const getHeaderFooterAnnotations = (editor) => {
47411
+ const editors = getAllHeaderFooterEditors(editor);
47412
+ const allAnnotations = [];
47413
+ editors.forEach(({ id, editor: editor2 }) => {
47414
+ const annotations = getAllFieldAnnotations(editor2.state);
47415
+ allAnnotations.push(...annotations);
47416
+ });
47417
+ return allAnnotations;
47418
+ };
47308
47419
  const index$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
47309
47420
  __proto__: null,
47310
47421
  findFieldAnnotations,
@@ -47314,6 +47425,7 @@ const index$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
47314
47425
  findRemovedFieldAnnotations,
47315
47426
  getAllFieldAnnotations,
47316
47427
  getAllFieldAnnotationsWithRect,
47428
+ getHeaderFooterAnnotations,
47317
47429
  trackFieldAnnotationsDeletion
47318
47430
  }, Symbol.toStringTag, { value: "Module" }));
47319
47431
  function guard(low, high, value) {
@@ -47444,7 +47556,8 @@ const FieldAnnotation = Node$1.create({
47444
47556
  addOptions() {
47445
47557
  return {
47446
47558
  htmlAttributes: {
47447
- class: annotationClass
47559
+ class: annotationClass,
47560
+ "aria-label": "Field annotation node"
47448
47561
  },
47449
47562
  annotationClass,
47450
47563
  annotationContentClass,
@@ -48386,7 +48499,8 @@ const Image = Node$1.create({
48386
48499
  return {
48387
48500
  allowBase64: true,
48388
48501
  htmlAttributes: {
48389
- style: "display: inline-block;"
48502
+ style: "display: inline-block;",
48503
+ "aria-label": "Image node"
48390
48504
  }
48391
48505
  };
48392
48506
  },
@@ -48502,7 +48616,11 @@ const BookmarkStart = Node$1.create({
48502
48616
  inline: true,
48503
48617
  addOptions() {
48504
48618
  return {
48505
- htmlAttributes: { style: "height: 0; width: 0;" }
48619
+ htmlAttributes: {
48620
+ style: "height: 0; width: 0;",
48621
+ "aria-label": "Bookmark start node",
48622
+ role: "link"
48623
+ }
48506
48624
  };
48507
48625
  },
48508
48626
  addAttributes() {
@@ -48536,7 +48654,8 @@ const Mention = Node$1.create({
48536
48654
  addOptions() {
48537
48655
  return {
48538
48656
  htmlAttributes: {
48539
- class: "sd-editor-mention"
48657
+ class: "sd-editor-mention",
48658
+ "aria-label": "Mention node"
48540
48659
  }
48541
48660
  };
48542
48661
  },
@@ -48574,7 +48693,8 @@ const PageNumber = Node$1.create({
48574
48693
  addOptions() {
48575
48694
  return {
48576
48695
  htmlAttributes: {
48577
- "data-id": "auto-page-number"
48696
+ "data-id": "auto-page-number",
48697
+ "aria-label": "Page number node"
48578
48698
  }
48579
48699
  };
48580
48700
  },
@@ -48593,7 +48713,8 @@ const TotalPageCount = Node$1.create({
48593
48713
  addOptions() {
48594
48714
  return {
48595
48715
  htmlAttributes: {
48596
- "data-id": "auto-total-pages"
48716
+ "data-id": "auto-total-pages",
48717
+ "aria-label": "Total page count node"
48597
48718
  }
48598
48719
  };
48599
48720
  },
@@ -48612,7 +48733,8 @@ const ShapeContainer = Node$1.create({
48612
48733
  addOptions() {
48613
48734
  return {
48614
48735
  htmlAttributes: {
48615
- class: "sd-editor-shape-container"
48736
+ class: "sd-editor-shape-container",
48737
+ "aria-label": "Shape container node"
48616
48738
  }
48617
48739
  };
48618
48740
  },
@@ -48665,7 +48787,8 @@ const ShapeTextbox = Node$1.create({
48665
48787
  addOptions() {
48666
48788
  return {
48667
48789
  htmlAttributes: {
48668
- class: "sd-editor-shape-textbox"
48790
+ class: "sd-editor-shape-textbox",
48791
+ "aria-label": "Shape textbox node"
48669
48792
  }
48670
48793
  };
48671
48794
  },
@@ -48757,7 +48880,9 @@ const StructuredContent = Node$1.create({
48757
48880
  addOptions() {
48758
48881
  return {
48759
48882
  annotationClass: "sd-structured-content-tag",
48760
- htmlAttributes: {}
48883
+ htmlAttributes: {
48884
+ "aria-label": "Structured content node"
48885
+ }
48761
48886
  };
48762
48887
  },
48763
48888
  parseDOM() {
@@ -52217,9 +52342,9 @@ const _export_sfc = (sfc, props) => {
52217
52342
  };
52218
52343
  const _hoisted_1$e = ["onClick", "onMouseenter"];
52219
52344
  const _hoisted_2$c = { key: 0 };
52220
- const _hoisted_3$b = { key: 0 };
52345
+ const _hoisted_3$a = { key: 0 };
52221
52346
  const _hoisted_4$6 = { key: 1 };
52222
- const _hoisted_5$6 = { key: 1 };
52347
+ const _hoisted_5$5 = { key: 1 };
52223
52348
  const _sfc_main$f = {
52224
52349
  __name: "Mentions",
52225
52350
  props: {
@@ -52292,9 +52417,9 @@ const _sfc_main$f = {
52292
52417
  class: vue.normalizeClass(["user-row", { selected: activeUserIndex.value === index2 }])
52293
52418
  }, [
52294
52419
  user.name ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$c, [
52295
- user.name ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$b, vue.toDisplayString(user.name), 1)) : vue.createCommentVNode("", true),
52420
+ user.name ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$a, vue.toDisplayString(user.name), 1)) : vue.createCommentVNode("", true),
52296
52421
  user.name && user.email ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$6, " (" + vue.toDisplayString(user.email) + ")", 1)) : vue.createCommentVNode("", true)
52297
- ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$6, [
52422
+ ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$5, [
52298
52423
  vue.createBaseVNode("span", null, vue.toDisplayString(user.email), 1)
52299
52424
  ]))
52300
52425
  ], 42, _hoisted_1$e);
@@ -53605,15 +53730,16 @@ const _sfc_main$5$1 = {
53605
53730
  }
53606
53731
  };
53607
53732
  const ToolbarButtonIcon = /* @__PURE__ */ _export_sfc(_sfc_main$5$1, [["__scopeId", "data-v-6d7523ab"]]);
53608
- const _hoisted_1$3$1 = ["data-item"];
53609
- const _hoisted_2$2$1 = {
53733
+ const _hoisted_1$3$1 = ["role"];
53734
+ const _hoisted_2$2$1 = ["data-item", "aria-label"];
53735
+ const _hoisted_3$2$1 = {
53610
53736
  key: 1,
53611
53737
  class: "button-label"
53612
53738
  };
53613
- const _hoisted_3$2$1 = { key: 2 };
53614
- const _hoisted_4$5 = ["placeholder", "onKeydown", "id"];
53615
- const _hoisted_5$5 = ["placeholder", "onKeydown", "id"];
53616
- const _hoisted_6$2 = ["innerHTML"];
53739
+ const _hoisted_4$5 = { key: 2 };
53740
+ const _hoisted_5$4 = ["placeholder", "onKeydown", "id"];
53741
+ const _hoisted_6$2 = ["placeholder", "onKeydown", "id"];
53742
+ const _hoisted_7$1 = ["innerHTML"];
53617
53743
  const _sfc_main$4$1 = {
53618
53744
  __name: "ToolbarButton",
53619
53745
  props: {
@@ -53640,6 +53766,10 @@ const _sfc_main$4$1 = {
53640
53766
  defaultLabel: {
53641
53767
  type: String,
53642
53768
  default: null
53769
+ },
53770
+ isOverflowItem: {
53771
+ type: Boolean,
53772
+ default: false
53643
53773
  }
53644
53774
  },
53645
53775
  emits: ["buttonClick", "textSubmit"],
@@ -53663,6 +53793,7 @@ const _sfc_main$4$1 = {
53663
53793
  } = props.toolbarItem;
53664
53794
  const inlineTextInput = vue.ref(props.defaultLabel);
53665
53795
  const inlineInput = vue.ref(null);
53796
+ const { isHighContrastMode: isHighContrastMode2 } = useHighContrastMode();
53666
53797
  const handleClick2 = () => {
53667
53798
  if (hasInlineTextInput) {
53668
53799
  inlineInput.value?.focus();
@@ -53690,12 +53821,15 @@ const _sfc_main$4$1 = {
53690
53821
  return (_ctx, _cache) => {
53691
53822
  return vue.openBlock(), vue.createElementBlock("div", {
53692
53823
  class: vue.normalizeClass(["toolbar-item", vue.unref(attributes).className]),
53693
- style: vue.normalizeStyle(getStyle.value)
53824
+ style: vue.normalizeStyle(getStyle.value),
53825
+ role: __props.isOverflowItem ? "menuitem" : ""
53694
53826
  }, [
53695
53827
  vue.createBaseVNode("div", {
53696
53828
  onClick: handleClick2,
53697
- class: vue.normalizeClass(["toolbar-button", { active: vue.unref(active), disabled: vue.unref(disabled), narrow: __props.isNarrow, wide: __props.isWide, "has-inline-text-input": vue.unref(hasInlineTextInput) }]),
53698
- "data-item": `btn-${vue.unref(name) || ""}`
53829
+ class: vue.normalizeClass(["toolbar-button", { active: vue.unref(active), disabled: vue.unref(disabled), narrow: __props.isNarrow, wide: __props.isWide, "has-inline-text-input": vue.unref(hasInlineTextInput), "high-contrast": vue.unref(isHighContrastMode2) }]),
53830
+ "data-item": `btn-${vue.unref(name) || ""}`,
53831
+ "aria-label": vue.unref(attributes).ariaLabel,
53832
+ role: "button"
53699
53833
  }, [
53700
53834
  vue.unref(icon) ? (vue.openBlock(), vue.createBlock(ToolbarButtonIcon, {
53701
53835
  key: 0,
@@ -53704,8 +53838,8 @@ const _sfc_main$4$1 = {
53704
53838
  icon: vue.unref(icon),
53705
53839
  name: vue.unref(name)
53706
53840
  }, null, 8, ["color", "icon", "name"])) : vue.createCommentVNode("", true),
53707
- vue.unref(label) && !vue.unref(hideLabel) && !vue.unref(inlineTextInputVisible) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$2$1, vue.toDisplayString(vue.unref(label)), 1)) : vue.createCommentVNode("", true),
53708
- vue.unref(inlineTextInputVisible) ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$2$1, [
53841
+ vue.unref(label) && !vue.unref(hideLabel) && !vue.unref(inlineTextInputVisible) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$2$1, vue.toDisplayString(vue.unref(label)), 1)) : vue.createCommentVNode("", true),
53842
+ vue.unref(inlineTextInputVisible) ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$5, [
53709
53843
  vue.unref(name) === "fontSize" ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", {
53710
53844
  key: 0,
53711
53845
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => inlineTextInput.value = $event),
@@ -53713,12 +53847,12 @@ const _sfc_main$4$1 = {
53713
53847
  placeholder: vue.unref(label),
53714
53848
  onKeydown: vue.withKeys(vue.withModifiers(handleInputSubmit, ["prevent"]), ["enter"]),
53715
53849
  type: "text",
53716
- class: "button-text-input",
53850
+ class: vue.normalizeClass(["button-text-input", { "high-contrast": vue.unref(isHighContrastMode2) }]),
53717
53851
  id: "inlineTextInput-" + vue.unref(name),
53718
53852
  autoccomplete: "off",
53719
53853
  ref_key: "inlineInput",
53720
53854
  ref: inlineInput
53721
- }, null, 40, _hoisted_4$5)), [
53855
+ }, null, 42, _hoisted_5$4)), [
53722
53856
  [vue.vModelText, inlineTextInput.value]
53723
53857
  ]) : vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", {
53724
53858
  key: 1,
@@ -53731,7 +53865,7 @@ const _sfc_main$4$1 = {
53731
53865
  autoccomplete: "off",
53732
53866
  ref_key: "inlineInput",
53733
53867
  ref: inlineInput
53734
- }, null, 40, _hoisted_5$5)), [
53868
+ }, null, 40, _hoisted_6$2)), [
53735
53869
  [vue.vModelText, inlineTextInput.value]
53736
53870
  ])
53737
53871
  ])) : vue.createCommentVNode("", true),
@@ -53740,14 +53874,18 @@ const _sfc_main$4$1 = {
53740
53874
  class: "dropdown-caret",
53741
53875
  innerHTML: caretIcon.value,
53742
53876
  style: vue.normalizeStyle({ opacity: vue.unref(disabled) ? 0.6 : 1 })
53743
- }, null, 12, _hoisted_6$2)) : vue.createCommentVNode("", true)
53744
- ], 10, _hoisted_1$3$1)
53745
- ], 6);
53877
+ }, null, 12, _hoisted_7$1)) : vue.createCommentVNode("", true)
53878
+ ], 10, _hoisted_2$2$1)
53879
+ ], 14, _hoisted_1$3$1);
53746
53880
  };
53747
53881
  }
53748
53882
  };
53749
- const ToolbarButton = /* @__PURE__ */ _export_sfc(_sfc_main$4$1, [["__scopeId", "data-v-62bb3747"]]);
53750
- const _hoisted_1$2$1 = { class: "toolbar-separator" };
53883
+ const ToolbarButton = /* @__PURE__ */ _export_sfc(_sfc_main$4$1, [["__scopeId", "data-v-6eb57404"]]);
53884
+ const _hoisted_1$2$1 = {
53885
+ class: "toolbar-separator",
53886
+ role: "separator",
53887
+ "aria-label": "Toolbar separator"
53888
+ };
53751
53889
  const _sfc_main$3$1 = {
53752
53890
  __name: "ToolbarSeparator",
53753
53891
  props: {
@@ -53758,19 +53896,30 @@ const _sfc_main$3$1 = {
53758
53896
  },
53759
53897
  emits: ["command"],
53760
53898
  setup(__props, { emit: __emit }) {
53899
+ const { isHighContrastMode: isHighContrastMode2 } = useHighContrastMode();
53900
+ const getSeparatorColor = () => {
53901
+ if (isHighContrastMode2.value) {
53902
+ return "#000";
53903
+ }
53904
+ return "#dbdbdb";
53905
+ };
53761
53906
  return (_ctx, _cache) => {
53762
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2$1, _cache[0] || (_cache[0] = [
53763
- vue.createBaseVNode("div", { class: "separator-inner" }, null, -1)
53764
- ]));
53907
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2$1, [
53908
+ vue.createBaseVNode("div", {
53909
+ class: "separator-inner",
53910
+ style: vue.normalizeStyle({ backgroundColor: getSeparatorColor() })
53911
+ }, null, 4)
53912
+ ]);
53765
53913
  };
53766
53914
  }
53767
53915
  };
53768
- const ToolbarSeparator = /* @__PURE__ */ _export_sfc(_sfc_main$3$1, [["__scopeId", "data-v-ac2ee4f9"]]);
53916
+ const ToolbarSeparator = /* @__PURE__ */ _export_sfc(_sfc_main$3$1, [["__scopeId", "data-v-b240fc3a"]]);
53769
53917
  const _hoisted_1$1$1 = { class: "overflow-menu" };
53770
53918
  const _hoisted_2$1$1 = { class: "overflow-menu-trigger" };
53771
53919
  const _hoisted_3$1$1 = {
53772
53920
  key: 0,
53773
- class: "overflow-menu_items"
53921
+ class: "overflow-menu_items",
53922
+ role: "group"
53774
53923
  };
53775
53924
  const _sfc_main$2$1 = {
53776
53925
  __name: "OverflowMenu",
@@ -53808,16 +53957,17 @@ const _sfc_main$2$1 = {
53808
53957
  ]),
53809
53958
  isDropdownOpened.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$1$1, [
53810
53959
  vue.createVNode(ButtonGroup, {
53960
+ class: "superdoc-toolbar-overflow",
53811
53961
  "toolbar-items": __props.overflowItems,
53812
- onCommand: handleCommand,
53813
- class: "superdoc-toolbar-overflow"
53962
+ "from-overflow": "",
53963
+ onCommand: handleCommand
53814
53964
  }, null, 8, ["toolbar-items"])
53815
53965
  ])) : vue.createCommentVNode("", true)
53816
53966
  ]);
53817
53967
  };
53818
53968
  }
53819
53969
  };
53820
- const OverflowMenu = /* @__PURE__ */ _export_sfc(_sfc_main$2$1, [["__scopeId", "data-v-ca29bf1d"]]);
53970
+ const OverflowMenu = /* @__PURE__ */ _export_sfc(_sfc_main$2$1, [["__scopeId", "data-v-c637209b"]]);
53821
53971
  function plugin$1(options2) {
53822
53972
  let _bPrefix = ".";
53823
53973
  let _ePrefix = "__";
@@ -63150,7 +63300,7 @@ const NSkeleton = vue.defineComponent({
63150
63300
  });
63151
63301
  const _hoisted_1$d = { key: 0 };
63152
63302
  const _hoisted_2$b = { key: 0 };
63153
- const _hoisted_3$a = { key: 0 };
63303
+ const _hoisted_3$9 = { key: 0 };
63154
63304
  const _sfc_main$1$1 = {
63155
63305
  __name: "ButtonGroup",
63156
63306
  props: {
@@ -63165,6 +63315,10 @@ const _sfc_main$1$1 = {
63165
63315
  position: {
63166
63316
  type: String,
63167
63317
  default: "left"
63318
+ },
63319
+ fromOverflow: {
63320
+ type: Boolean,
63321
+ default: false
63168
63322
  }
63169
63323
  },
63170
63324
  emits: ["command"],
@@ -63172,6 +63326,7 @@ const _sfc_main$1$1 = {
63172
63326
  const emit = __emit;
63173
63327
  const props = __props;
63174
63328
  const currentItem = vue.ref(null);
63329
+ const { isHighContrastMode: isHighContrastMode2 } = useHighContrastMode();
63175
63330
  const isMobile = window.matchMedia("(max-width: 768px)").matches;
63176
63331
  const styleMap = {
63177
63332
  left: {
@@ -63230,13 +63385,20 @@ const _sfc_main$1$1 = {
63230
63385
  };
63231
63386
  });
63232
63387
  };
63388
+ const getDropdownAttributes = (option, item) => {
63389
+ return {
63390
+ role: "menuitem",
63391
+ ariaLabel: `${item.attributes.value.ariaLabel} - ${option.label}`
63392
+ };
63393
+ };
63233
63394
  const handleClickOutside = (e) => {
63234
63395
  closeDropdowns();
63235
63396
  };
63236
63397
  return (_ctx, _cache) => {
63237
63398
  return vue.openBlock(), vue.createElementBlock("div", {
63238
63399
  style: vue.normalizeStyle(getPositionStyle.value),
63239
- class: "button-group"
63400
+ class: "button-group",
63401
+ role: "group"
63240
63402
  }, [
63241
63403
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.toolbarItems, (item) => {
63242
63404
  return vue.openBlock(), vue.createElementBlock("div", {
@@ -63257,10 +63419,14 @@ const _sfc_main$1$1 = {
63257
63419
  show: item.expand.value,
63258
63420
  size: "medium",
63259
63421
  placement: "bottom-start",
63260
- class: "toolbar-button toolbar-dropdown sd-editor-toolbar-dropdown",
63422
+ class: vue.normalizeClass(["toolbar-button toolbar-dropdown sd-editor-toolbar-dropdown", { "high-contrast": vue.unref(isHighContrastMode2) }]),
63261
63423
  onSelect: (key, option) => handleSelect(item, option),
63262
63424
  onClickoutside: handleClickOutside,
63263
- style: vue.normalizeStyle(item.dropdownStyles.value)
63425
+ style: vue.normalizeStyle(item.dropdownStyles.value),
63426
+ "menu-props": () => ({
63427
+ role: "menu"
63428
+ }),
63429
+ "node-props": (option) => getDropdownAttributes(option, item)
63264
63430
  }, {
63265
63431
  default: vue.withCtx(() => [
63266
63432
  vue.createVNode(vue.unref(NTooltip), {
@@ -63284,7 +63450,7 @@ const _sfc_main$1$1 = {
63284
63450
  }, 1032, ["disabled"])
63285
63451
  ]),
63286
63452
  _: 2
63287
- }, 1032, ["options", "trigger", "show", "onSelect", "style"])) : isButton(item) ? (vue.openBlock(), vue.createBlock(vue.unref(NTooltip), {
63453
+ }, 1032, ["options", "trigger", "show", "class", "onSelect", "style", "node-props"])) : isButton(item) ? (vue.openBlock(), vue.createBlock(vue.unref(NTooltip), {
63288
63454
  key: 2,
63289
63455
  trigger: "hover",
63290
63456
  class: "sd-editor-toolbar-tooltip"
@@ -63292,14 +63458,15 @@ const _sfc_main$1$1 = {
63292
63458
  trigger: vue.withCtx(() => [
63293
63459
  vue.createVNode(ToolbarButton, {
63294
63460
  "toolbar-item": item,
63461
+ "is-overflow-item": __props.fromOverflow,
63295
63462
  onTextSubmit: ($event) => handleToolbarButtonTextSubmit(item, $event),
63296
63463
  onButtonClick: ($event) => handleToolbarButtonClick(item)
63297
- }, null, 8, ["toolbar-item", "onTextSubmit", "onButtonClick"])
63464
+ }, null, 8, ["toolbar-item", "is-overflow-item", "onTextSubmit", "onButtonClick"])
63298
63465
  ]),
63299
63466
  default: vue.withCtx(() => [
63300
63467
  item.tooltip ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$b, [
63301
63468
  vue.createTextVNode(vue.toDisplayString(item.tooltip) + " ", 1),
63302
- item.disabled.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$a, "(disabled)")) : vue.createCommentVNode("", true)
63469
+ item.disabled.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$9, "(disabled)")) : vue.createCommentVNode("", true)
63303
63470
  ])) : vue.createCommentVNode("", true)
63304
63471
  ]),
63305
63472
  _: 2
@@ -63315,7 +63482,7 @@ const _sfc_main$1$1 = {
63315
63482
  };
63316
63483
  }
63317
63484
  };
63318
- const ButtonGroup = /* @__PURE__ */ _export_sfc(_sfc_main$1$1, [["__scopeId", "data-v-7751c4e5"]]);
63485
+ const ButtonGroup = /* @__PURE__ */ _export_sfc(_sfc_main$1$1, [["__scopeId", "data-v-b09e5a20"]]);
63319
63486
  const _sfc_main$e = {
63320
63487
  __name: "Toolbar",
63321
63488
  emits: ["command", "toggle", "select"],
@@ -63360,7 +63527,9 @@ const _sfc_main$e = {
63360
63527
  return (_ctx, _cache) => {
63361
63528
  return vue.openBlock(), vue.createElementBlock("div", {
63362
63529
  class: "superdoc-toolbar",
63363
- key: vue.unref(toolbarKey)
63530
+ key: vue.unref(toolbarKey),
63531
+ role: "toolbar",
63532
+ "aria-label": "Toolbar"
63364
63533
  }, [
63365
63534
  vue.unref(showLeftSide) ? (vue.openBlock(), vue.createBlock(ButtonGroup, {
63366
63535
  key: 0,
@@ -63386,7 +63555,7 @@ const _sfc_main$e = {
63386
63555
  };
63387
63556
  }
63388
63557
  };
63389
- const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-abd0fb95"]]);
63558
+ const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-2a400574"]]);
63390
63559
  const DEFAULT_API_ENDPOINT = "https://sd-dev-express-gateway-i6xtm.ondigitalocean.app/insights";
63391
63560
  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: ";
63392
63561
  async function baseInsightsFetch(payload, options2 = {}) {
@@ -63623,9 +63792,9 @@ const edit = '<!-- @note: includes color gradient for inline svg AI Writer -->\n
63623
63792
  const paperPlane = '<!-- @note: includes color gradient for inline svg AI Writer -->\n<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->\n <defs>\n <linearGradient id="gradient" x1="125%" y1="50%" x2="-25%" y2="50%">\n <stop offset="-20%" stop-color="rgba(218, 215, 118, 0.5)" />\n <stop offset="30%" stop-color="rgb(191, 100, 100)" />\n <stop offset="60%" stop-color="rgb(77, 82, 217)" />\n <stop offset="150%" stop-color="rgb(255, 219, 102)" />\n </linearGradient>\n </defs>\n <path fill="url(#gradient)" d="M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z"/>\n</svg>';
63624
63793
  const _hoisted_1$c = { class: "ai-user-input-field" };
63625
63794
  const _hoisted_2$a = ["innerHTML"];
63626
- const _hoisted_3$9 = ["placeholder"];
63795
+ const _hoisted_3$8 = ["placeholder"];
63627
63796
  const _hoisted_4$4 = { class: "ai-loader" };
63628
- const _hoisted_5$4 = ["innerHTML"];
63797
+ const _hoisted_5$3 = ["innerHTML"];
63629
63798
  const _sfc_main$d = {
63630
63799
  __name: "AIWriter",
63631
63800
  props: {
@@ -63901,7 +64070,7 @@ const _sfc_main$d = {
63901
64070
  onInput: handleInput,
63902
64071
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => promptText.value = $event),
63903
64072
  rows: "4"
63904
- }, null, 40, _hoisted_3$9), [
64073
+ }, null, 40, _hoisted_3$8), [
63905
64074
  [vue.vModelText, promptText.value]
63906
64075
  ])
63907
64076
  ]),
@@ -63911,7 +64080,7 @@ const _sfc_main$d = {
63911
64080
  class: "ai-textarea-icon ai-submit-button",
63912
64081
  onClick: vue.withModifiers(handleSubmit, ["stop"]),
63913
64082
  innerHTML: vue.unref(paperPlane)
63914
- }, null, 8, _hoisted_5$4)) : vue.createCommentVNode("", true)
64083
+ }, null, 8, _hoisted_5$3)) : vue.createCommentVNode("", true)
63915
64084
  ])
63916
64085
  ], 544);
63917
64086
  };
@@ -64246,71 +64415,80 @@ const useToolbarItem = (options2) => {
64246
64415
  onDeactivate
64247
64416
  };
64248
64417
  };
64249
- const _hoisted_1$b = { class: "alignment-buttons" };
64418
+ const _hoisted_1$b = ["innerHTML"];
64250
64419
  const _hoisted_2$9 = ["innerHTML"];
64251
- const _hoisted_3$8 = ["innerHTML"];
64420
+ const _hoisted_3$7 = ["innerHTML"];
64252
64421
  const _hoisted_4$3 = ["innerHTML"];
64253
- const _hoisted_5$3 = ["innerHTML"];
64254
64422
  const _sfc_main$c = {
64255
64423
  __name: "AlignmentButtons",
64256
64424
  emits: ["select"],
64257
64425
  setup(__props, { emit: __emit }) {
64426
+ const { isHighContrastMode: isHighContrastMode2 } = useHighContrastMode();
64258
64427
  const emit = __emit;
64259
64428
  const select = (alignment2) => {
64260
64429
  emit("select", alignment2);
64261
64430
  };
64262
64431
  return (_ctx, _cache) => {
64263
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
64432
+ return vue.openBlock(), vue.createElementBlock("div", {
64433
+ class: vue.normalizeClass(["alignment-buttons", { "high-contrast": vue.unref(isHighContrastMode2) }])
64434
+ }, [
64264
64435
  vue.createBaseVNode("div", {
64265
64436
  class: "button-icon",
64266
64437
  onClick: _cache[0] || (_cache[0] = ($event) => select("left")),
64267
64438
  innerHTML: vue.unref(toolbarIcons).alignLeft,
64268
- "data-item": "btn-textAlign-option"
64269
- }, null, 8, _hoisted_2$9),
64439
+ "data-item": "btn-textAlign-option",
64440
+ role: "menuitem",
64441
+ "aria-label": "Align left"
64442
+ }, null, 8, _hoisted_1$b),
64270
64443
  vue.createBaseVNode("div", {
64271
64444
  class: "button-icon",
64272
64445
  onClick: _cache[1] || (_cache[1] = ($event) => select("center")),
64273
64446
  innerHTML: vue.unref(toolbarIcons).alignCenter,
64274
- "data-item": "btn-textAlign-option"
64275
- }, null, 8, _hoisted_3$8),
64447
+ "data-item": "btn-textAlign-option",
64448
+ role: "menuitem",
64449
+ "aria-label": "Align center"
64450
+ }, null, 8, _hoisted_2$9),
64276
64451
  vue.createBaseVNode("div", {
64277
64452
  class: "button-icon",
64278
64453
  onClick: _cache[2] || (_cache[2] = ($event) => select("right")),
64279
64454
  innerHTML: vue.unref(toolbarIcons).alignRight,
64280
- "data-item": "btn-textAlign-option"
64281
- }, null, 8, _hoisted_4$3),
64455
+ "data-item": "btn-textAlign-option",
64456
+ role: "menuitem",
64457
+ "aria-label": "Align right"
64458
+ }, null, 8, _hoisted_3$7),
64282
64459
  vue.createBaseVNode("div", {
64283
64460
  class: "button-icon",
64284
64461
  onClick: _cache[3] || (_cache[3] = ($event) => select("justify")),
64285
64462
  innerHTML: vue.unref(toolbarIcons).alignJustify,
64286
- "data-item": "btn-textAlign-option"
64287
- }, null, 8, _hoisted_5$3)
64288
- ]);
64463
+ "data-item": "btn-textAlign-option",
64464
+ role: "menuitem",
64465
+ "aria-label": "Justify"
64466
+ }, null, 8, _hoisted_4$3)
64467
+ ], 2);
64289
64468
  };
64290
64469
  }
64291
64470
  };
64292
- const AlignmentButtons = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-932a4937"]]);
64293
- const _hoisted_1$a = { class: "link-input-ctn" };
64294
- const _hoisted_2$8 = {
64471
+ const AlignmentButtons = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-58d8a9bb"]]);
64472
+ const _hoisted_1$a = {
64295
64473
  key: 0,
64296
64474
  class: "link-title"
64297
64475
  };
64298
- const _hoisted_3$7 = {
64476
+ const _hoisted_2$8 = {
64299
64477
  key: 1,
64300
64478
  class: "link-title"
64301
64479
  };
64302
- const _hoisted_4$2 = {
64480
+ const _hoisted_3$6 = {
64303
64481
  key: 2,
64304
64482
  class: "link-title"
64305
64483
  };
64306
- const _hoisted_5$2 = { key: 3 };
64307
- const _hoisted_6$1 = { class: "input-row" };
64308
- const _hoisted_7$1 = ["innerHTML"];
64309
- const _hoisted_8 = ["onKeydown"];
64310
- const _hoisted_9 = ["innerHTML"];
64311
- const _hoisted_10 = { class: "input-row link-buttons" };
64312
- const _hoisted_11 = ["innerHTML"];
64313
- const _hoisted_12 = {
64484
+ const _hoisted_4$2 = { key: 3 };
64485
+ const _hoisted_5$2 = { class: "input-row" };
64486
+ const _hoisted_6$1 = ["innerHTML"];
64487
+ const _hoisted_7 = ["onKeydown"];
64488
+ const _hoisted_8 = ["innerHTML"];
64489
+ const _hoisted_9 = { class: "input-row link-buttons" };
64490
+ const _hoisted_10 = ["innerHTML"];
64491
+ const _hoisted_11 = {
64314
64492
  key: 4,
64315
64493
  class: "input-row go-to-anchor clickable"
64316
64494
  };
@@ -64343,6 +64521,7 @@ const _sfc_main$b = {
64343
64521
  setup(__props, { emit: __emit }) {
64344
64522
  const emit = __emit;
64345
64523
  const props = __props;
64524
+ const { isHighContrastMode: isHighContrastMode2 } = useHighContrastMode();
64346
64525
  const { proxy } = vue.getCurrentInstance();
64347
64526
  const handleSubmit = () => {
64348
64527
  if (proxy?.$submit instanceof Function) proxy.$submit();
@@ -64393,16 +64572,19 @@ const _sfc_main$b = {
64393
64572
  if (props.showInput) focusInput();
64394
64573
  });
64395
64574
  return (_ctx, _cache) => {
64396
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
64397
- !__props.href ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$8, "Add link")) : isAnchor.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$7, "Page anchor")) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$2, "Edit link")),
64398
- __props.showInput && !isAnchor.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$2, [
64399
- vue.createBaseVNode("div", _hoisted_6$1, [
64575
+ return vue.openBlock(), vue.createElementBlock("div", {
64576
+ class: vue.normalizeClass(["link-input-ctn", { "high-contrast": vue.unref(isHighContrastMode2) }])
64577
+ }, [
64578
+ !__props.href ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, "Add link")) : isAnchor.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$8, "Page anchor")) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$6, "Edit link")),
64579
+ __props.showInput && !isAnchor.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$2, [
64580
+ vue.createBaseVNode("div", _hoisted_5$2, [
64400
64581
  vue.createBaseVNode("div", {
64401
64582
  class: "input-icon",
64402
64583
  innerHTML: vue.unref(toolbarIcons).linkInput
64403
- }, null, 8, _hoisted_7$1),
64584
+ }, null, 8, _hoisted_6$1),
64404
64585
  vue.withDirectives(vue.createBaseVNode("input", {
64405
64586
  type: "text",
64587
+ name: "link",
64406
64588
  placeholder: "Type or paste a link",
64407
64589
  class: vue.normalizeClass({ error: urlError.value }),
64408
64590
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => rawUrl.value = $event),
@@ -64410,7 +64592,7 @@ const _sfc_main$b = {
64410
64592
  vue.withKeys(vue.withModifiers(handleSubmit, ["stop", "prevent"]), ["enter"]),
64411
64593
  _cache[1] || (_cache[1] = ($event) => urlError.value = false)
64412
64594
  ]
64413
- }, null, 42, _hoisted_8), [
64595
+ }, null, 42, _hoisted_7), [
64414
64596
  [vue.vModelText, rawUrl.value]
64415
64597
  ]),
64416
64598
  vue.createBaseVNode("div", {
@@ -64418,9 +64600,9 @@ const _sfc_main$b = {
64418
64600
  innerHTML: vue.unref(toolbarIcons).openLink,
64419
64601
  onClick: openLink,
64420
64602
  "data-item": "btn-link-open"
64421
- }, null, 10, _hoisted_9)
64603
+ }, null, 10, _hoisted_8)
64422
64604
  ]),
64423
- vue.createBaseVNode("div", _hoisted_10, [
64605
+ vue.createBaseVNode("div", _hoisted_9, [
64424
64606
  __props.href ? (vue.openBlock(), vue.createElementBlock("button", {
64425
64607
  key: 0,
64426
64608
  class: "remove-btn",
@@ -64430,7 +64612,7 @@ const _sfc_main$b = {
64430
64612
  vue.createBaseVNode("div", {
64431
64613
  class: "remove-btn__icon",
64432
64614
  innerHTML: vue.unref(toolbarIcons).removeLink
64433
- }, null, 8, _hoisted_11),
64615
+ }, null, 8, _hoisted_10),
64434
64616
  _cache[3] || (_cache[3] = vue.createTextVNode(" Remove "))
64435
64617
  ])) : vue.createCommentVNode("", true),
64436
64618
  showApply.value ? (vue.openBlock(), vue.createElementBlock("button", {
@@ -64440,23 +64622,22 @@ const _sfc_main$b = {
64440
64622
  "data-item": "btn-link-apply"
64441
64623
  }, vue.toDisplayString(getApplyText.value), 3)) : vue.createCommentVNode("", true)
64442
64624
  ])
64443
- ])) : isAnchor.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12, [
64625
+ ])) : isAnchor.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_11, [
64444
64626
  vue.createBaseVNode("a", {
64445
64627
  onClick: _cache[2] || (_cache[2] = vue.withModifiers((...args) => __props.goToAnchor && __props.goToAnchor(...args), ["stop", "prevent"]))
64446
64628
  }, "Go to " + vue.toDisplayString(__props.href.startsWith("#_") ? __props.href.substring(2) : __props.href), 1)
64447
64629
  ])) : vue.createCommentVNode("", true)
64448
- ]);
64630
+ ], 2);
64449
64631
  };
64450
64632
  }
64451
64633
  };
64452
- const LinkInput = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-04bac853"]]);
64453
- const _hoisted_1$9 = { class: "document-mode" };
64454
- const _hoisted_2$7 = ["onClick"];
64455
- const _hoisted_3$6 = { class: "document-mode-column icon-column" };
64456
- const _hoisted_4$1 = ["innerHTML"];
64457
- const _hoisted_5$1 = { class: "document-mode-column text-column" };
64458
- const _hoisted_6 = { class: "document-mode-type" };
64459
- const _hoisted_7 = { class: "document-mode-description" };
64634
+ const LinkInput = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-64aa14bc"]]);
64635
+ const _hoisted_1$9 = ["onClick"];
64636
+ const _hoisted_2$7 = { class: "document-mode-column icon-column" };
64637
+ const _hoisted_3$5 = ["innerHTML"];
64638
+ const _hoisted_4$1 = { class: "document-mode-column text-column" };
64639
+ const _hoisted_5$1 = { class: "document-mode-type" };
64640
+ const _hoisted_6 = { class: "document-mode-description" };
64460
64641
  const _sfc_main$a = {
64461
64642
  __name: "DocumentMode",
64462
64643
  props: {
@@ -64467,34 +64648,38 @@ const _sfc_main$a = {
64467
64648
  emits: ["select"],
64468
64649
  setup(__props, { emit: __emit }) {
64469
64650
  const emit = __emit;
64651
+ const { isHighContrastMode: isHighContrastMode2 } = useHighContrastMode();
64470
64652
  const handleClick2 = (item) => {
64471
64653
  emit("select", item);
64472
64654
  };
64473
64655
  return (_ctx, _cache) => {
64474
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [
64656
+ return vue.openBlock(), vue.createElementBlock("div", {
64657
+ class: vue.normalizeClass(["document-mode", { "high-contrast": vue.unref(isHighContrastMode2) }])
64658
+ }, [
64475
64659
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.options, (option) => {
64476
64660
  return vue.openBlock(), vue.createElementBlock("div", {
64477
64661
  class: vue.normalizeClass(["option-item", { disabled: option.disabled }]),
64478
64662
  onClick: ($event) => handleClick2(option),
64479
- "data-item": "btn-documentMode-option"
64663
+ "data-item": "btn-documentMode-option",
64664
+ role: "menuitem"
64480
64665
  }, [
64481
- vue.createBaseVNode("div", _hoisted_3$6, [
64666
+ vue.createBaseVNode("div", _hoisted_2$7, [
64482
64667
  vue.createBaseVNode("div", {
64483
64668
  class: "icon-column__icon",
64484
64669
  innerHTML: option.icon
64485
- }, null, 8, _hoisted_4$1)
64670
+ }, null, 8, _hoisted_3$5)
64486
64671
  ]),
64487
- vue.createBaseVNode("div", _hoisted_5$1, [
64488
- vue.createBaseVNode("div", _hoisted_6, vue.toDisplayString(option.label), 1),
64489
- vue.createBaseVNode("div", _hoisted_7, vue.toDisplayString(option.description), 1)
64672
+ vue.createBaseVNode("div", _hoisted_4$1, [
64673
+ vue.createBaseVNode("div", _hoisted_5$1, vue.toDisplayString(option.label), 1),
64674
+ vue.createBaseVNode("div", _hoisted_6, vue.toDisplayString(option.description), 1)
64490
64675
  ])
64491
- ], 10, _hoisted_2$7);
64676
+ ], 10, _hoisted_1$9);
64492
64677
  }), 256))
64493
- ]);
64678
+ ], 2);
64494
64679
  };
64495
64680
  }
64496
64681
  };
64497
- const DocumentMode = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-8afd7fbb"]]);
64682
+ const DocumentMode = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-050d9d49"]]);
64498
64683
  const _hoisted_1$8 = {
64499
64684
  key: 0,
64500
64685
  class: "linked-style-buttons"
@@ -64537,9 +64722,9 @@ const _sfc_main$9 = {
64537
64722
  }
64538
64723
  };
64539
64724
  const LinkedStyle = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-bf5a8c1e"]]);
64540
- const _hoisted_1$7 = ["onClick"];
64725
+ const _hoisted_1$7 = ["aria-label", "onClick"];
64541
64726
  const _hoisted_2$5 = ["innerHTML"];
64542
- const _hoisted_3$5 = ["innerHTML"];
64727
+ const _hoisted_3$4 = ["innerHTML"];
64543
64728
  const _sfc_main$8 = {
64544
64729
  __name: "IconGridRow",
64545
64730
  props: {
@@ -64576,12 +64761,15 @@ const _sfc_main$8 = {
64576
64761
  return vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.icons, (row, rowIndex) => {
64577
64762
  return vue.openBlock(), vue.createElementBlock("div", {
64578
64763
  class: "option-row",
64579
- key: rowIndex
64764
+ key: rowIndex,
64765
+ role: "group"
64580
64766
  }, [
64581
64767
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(row, (option, optionIndex) => {
64582
64768
  return vue.openBlock(), vue.createElementBlock("div", {
64583
64769
  class: "option",
64584
64770
  key: optionIndex,
64771
+ "aria-label": option.label,
64772
+ role: "menuitem",
64585
64773
  onClick: vue.withModifiers(($event) => handleClick2(option), ["stop", "prevent"])
64586
64774
  }, [
64587
64775
  vue.createBaseVNode("div", {
@@ -64594,7 +64782,7 @@ const _sfc_main$8 = {
64594
64782
  class: "option__check",
64595
64783
  innerHTML: vue.unref(toolbarIcons).colorOptionCheck,
64596
64784
  style: vue.normalizeStyle(getCheckStyle(option.value, optionIndex))
64597
- }, null, 12, _hoisted_3$5)) : vue.createCommentVNode("", true)
64785
+ }, null, 12, _hoisted_3$4)) : vue.createCommentVNode("", true)
64598
64786
  ], 8, _hoisted_1$7);
64599
64787
  }), 128))
64600
64788
  ]);
@@ -64602,11 +64790,11 @@ const _sfc_main$8 = {
64602
64790
  };
64603
64791
  }
64604
64792
  };
64605
- const IconGridRow = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-6a2a9a40"]]);
64793
+ const IconGridRow = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-d96a82fa"]]);
64606
64794
  const DropIcon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M320 512c53.2 0 101.4-21.6 136.1-56.6l-298.3-235C140 257.1 128 292.3 128 320c0 106 86 192 192 192zM505.2 370.7c4.4-16.2 6.8-33.1 6.8-50.7c0-91.2-130.2-262.3-166.6-308.3C339.4 4.2 330.5 0 320.9 0l-1.8 0c-9.6 0-18.5 4.2-24.5 11.7C277.8 33 240.7 81.3 205.8 136L38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L505.2 370.7zM224 336c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16s16 7.2 16 16z"/></svg>\n';
64607
64795
  const _hoisted_1$6 = { class: "options-grid-wrap" };
64608
64796
  const _hoisted_2$4 = ["innerHTML"];
64609
- const _hoisted_3$4 = { class: "option-grid-ctn" };
64797
+ const _hoisted_3$3 = { class: "option-grid-ctn" };
64610
64798
  const _sfc_main$7 = {
64611
64799
  __name: "IconGrid",
64612
64800
  props: {
@@ -64638,6 +64826,8 @@ const _sfc_main$7 = {
64638
64826
  __props.hasNoneIcon ? (vue.openBlock(), vue.createElementBlock("div", {
64639
64827
  key: 0,
64640
64828
  class: "none-option",
64829
+ role: "menuitem",
64830
+ "aria-label": "Clear color selection",
64641
64831
  onClick: _cache[0] || (_cache[0] = ($event) => handleSelect("none"))
64642
64832
  }, [
64643
64833
  vue.createBaseVNode("span", {
@@ -64646,7 +64836,7 @@ const _sfc_main$7 = {
64646
64836
  }, null, 8, _hoisted_2$4),
64647
64837
  _cache[1] || (_cache[1] = vue.createTextVNode(" None "))
64648
64838
  ])) : vue.createCommentVNode("", true),
64649
- vue.createBaseVNode("div", _hoisted_3$4, [
64839
+ vue.createBaseVNode("div", _hoisted_3$3, [
64650
64840
  vue.createVNode(IconGridRow, {
64651
64841
  icons: __props.icons,
64652
64842
  "active-color": __props.activeColor,
@@ -64665,7 +64855,7 @@ const _sfc_main$7 = {
64665
64855
  };
64666
64856
  }
64667
64857
  };
64668
- const IconGrid = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-47b783db"]]);
64858
+ const IconGrid = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-9246bdef"]]);
64669
64859
  const closeDropdown$1 = (dropdown) => {
64670
64860
  dropdown.expand.value = false;
64671
64861
  };
@@ -64699,84 +64889,83 @@ const renderColorOptions = (superToolbar, button, customIcons = [], hasNoneIcon
64699
64889
  };
64700
64890
  const icons = [
64701
64891
  [
64702
- makeColorOption("#111111"),
64703
- makeColorOption("#333333"),
64704
- makeColorOption("#5C5C5C"),
64705
- makeColorOption("#858585"),
64706
- makeColorOption("#ADADAD"),
64707
- makeColorOption("#D6D6D6"),
64708
- makeColorOption("#FFFFFF")
64892
+ makeColorOption("#111111", "black"),
64893
+ makeColorOption("#333333", "dark gray"),
64894
+ makeColorOption("#5C5C5C", "medium gray"),
64895
+ makeColorOption("#858585", "light gray"),
64896
+ makeColorOption("#ADADAD", "very light gray"),
64897
+ makeColorOption("#D6D6D6", "transparent gray"),
64898
+ makeColorOption("#FFFFFF", "white")
64709
64899
  ],
64710
64900
  [
64711
- makeColorOption("#860028"),
64712
- makeColorOption("#D2003F"),
64713
- makeColorOption("#DB3365"),
64714
- makeColorOption("#E4668C"),
64715
- makeColorOption("#ED99B2"),
64716
- makeColorOption("#F6CCD9"),
64717
- makeColorOption("#FF004D")
64901
+ makeColorOption("#860028", "dark red"),
64902
+ makeColorOption("#D2003F", "red"),
64903
+ makeColorOption("#DB3365", "coral red"),
64904
+ makeColorOption("#E4668C", "light red"),
64905
+ makeColorOption("#ED99B2", "pale pink"),
64906
+ makeColorOption("#F6CCD9", "transparent pink"),
64907
+ makeColorOption("#FF004D", "bright pink")
64718
64908
  ],
64719
64909
  [
64720
- makeColorOption("#83015E"),
64721
- makeColorOption("#CD0194"),
64722
- makeColorOption("#D734A9"),
64723
- makeColorOption("#E167BF"),
64724
- makeColorOption("#EB99D4"),
64725
- makeColorOption("#F5CCEA"),
64726
- makeColorOption("#FF00A8")
64910
+ makeColorOption("#83015E", "dark purple"),
64911
+ makeColorOption("#CD0194", "purple"),
64912
+ makeColorOption("#D734A9", "orchid"),
64913
+ makeColorOption("#E167BF", "light purple"),
64914
+ makeColorOption("#EB99D4", "lavender"),
64915
+ makeColorOption("#F5CCEA", "transparent pink"),
64916
+ makeColorOption("#FF00A8", "neon pink")
64727
64917
  ],
64728
64918
  [
64729
- makeColorOption("#8E220A"),
64730
- makeColorOption("#DD340F"),
64731
- makeColorOption("#E45C3F"),
64732
- makeColorOption("#EB856F"),
64733
- makeColorOption("#F1AE9F"),
64734
- makeColorOption("#F8D6CF"),
64735
- makeColorOption("#FF7A00")
64919
+ makeColorOption("#8E220A", "maroon"),
64920
+ makeColorOption("#DD340F", "red-orange"),
64921
+ makeColorOption("#E45C3F", "burnt orange"),
64922
+ makeColorOption("#EB856F", "peach"),
64923
+ makeColorOption("#F1AE9F", "pale peach"),
64924
+ makeColorOption("#F8D6CF", "transparent peach"),
64925
+ makeColorOption("#FF7A00", "orange")
64736
64926
  ],
64737
64927
  [
64738
- makeColorOption("#947D02"),
64739
- makeColorOption("#E7C302"),
64740
- makeColorOption("#ECCF35"),
64741
- makeColorOption("#F1DB67"),
64742
- makeColorOption("#F5E79A"),
64743
- makeColorOption("#FAF3CC"),
64744
- makeColorOption("#FAFF09")
64928
+ makeColorOption("#947D02", "olive"),
64929
+ makeColorOption("#E7C302", "mustard yellow"),
64930
+ makeColorOption("#ECCF35", "yellow"),
64931
+ makeColorOption("#F1DB67", "light yellow"),
64932
+ makeColorOption("#F5E79A", "very pale yellow"),
64933
+ makeColorOption("#FAF3CC", "transparent yellow"),
64934
+ makeColorOption("#FAFF09", "neon yellow")
64745
64935
  ],
64746
64936
  [
64747
- makeColorOption("#055432"),
64748
- makeColorOption("#07834F"),
64749
- makeColorOption("#399C72"),
64750
- makeColorOption("#6AB595"),
64751
- makeColorOption("#9CCDB9"),
64752
- makeColorOption("#CDE6DC"),
64753
- makeColorOption("#05F38F")
64937
+ makeColorOption("#055432", "forest green"),
64938
+ makeColorOption("#07834F", "green"),
64939
+ makeColorOption("#399C72", "medium green"),
64940
+ makeColorOption("#6AB595", "light green"),
64941
+ makeColorOption("#9CCDB9", "mint"),
64942
+ makeColorOption("#CDE6DC", "transparent mint"),
64943
+ makeColorOption("#05F38F", "bright teal")
64754
64944
  ],
64755
64945
  [
64756
- makeColorOption("#063E7E"),
64757
- makeColorOption("#0A60C5"),
64758
- makeColorOption("#3B80D1"),
64759
- makeColorOption("#6CA0DC"),
64760
- makeColorOption("#9DBFE8"),
64761
- makeColorOption("#CEDFF3"),
64762
- makeColorOption("#21c8ce")
64946
+ makeColorOption("#063E7E", "navy blue"),
64947
+ makeColorOption("#0A60C5", "blue"),
64948
+ makeColorOption("#3B80D1", "sky blue"),
64949
+ makeColorOption("#6CA0DC", "cornflower blue"),
64950
+ makeColorOption("#9DBFE8", "light blue"),
64951
+ makeColorOption("#CEDFF3", "very light blue"),
64952
+ makeColorOption("#21c8ce", "cyan")
64763
64953
  ],
64764
64954
  [
64765
- makeColorOption("#3E027A"),
64766
- makeColorOption("#6103BF"),
64767
- makeColorOption("#8136CC"),
64768
- makeColorOption("#A068D9"),
64769
- makeColorOption("#C09AE6"),
64770
- makeColorOption("#DFCDF2"),
64771
- makeColorOption("#A91DFF")
64955
+ makeColorOption("#3E027A", "deep purple"),
64956
+ makeColorOption("#6103BF", "indigo"),
64957
+ makeColorOption("#8136CC", "violet"),
64958
+ makeColorOption("#A068D9", "lavender pink"),
64959
+ makeColorOption("#C09AE6", "light lilac"),
64960
+ makeColorOption("#DFCDF2", "transparent lilac"),
64961
+ makeColorOption("#A91DFF", "neon purple")
64772
64962
  ]
64773
64963
  ];
64774
64964
  const getAvailableColorOptions = () => {
64775
64965
  return icons.flat().map((item) => item.value);
64776
64966
  };
64777
- const _hoisted_1$5 = { class: "toolbar-table-grid-wrapper" };
64778
- const _hoisted_2$3 = ["data-cols", "data-rows", "onClick"];
64779
- const _hoisted_3$3 = { class: "toolbar-table-grid-value" };
64967
+ const _hoisted_1$5 = ["data-cols", "data-rows", "onClick"];
64968
+ const _hoisted_2$3 = ["aria-valuetext"];
64780
64969
  const _sfc_main$6 = {
64781
64970
  __name: "TableGrid",
64782
64971
  emits: ["select", "clickoutside"],
@@ -64784,6 +64973,7 @@ const _sfc_main$6 = {
64784
64973
  const emit = __emit;
64785
64974
  const selectedRows = vue.ref(0);
64786
64975
  const selectedCols = vue.ref(0);
64976
+ const { isHighContrastMode: isHighContrastMode2 } = useHighContrastMode();
64787
64977
  const onTableGridMouseOver = (event) => {
64788
64978
  let target = event.target;
64789
64979
  let isGrid = !!target.dataset.grid;
@@ -64811,7 +65001,9 @@ const _sfc_main$6 = {
64811
65001
  emit("select", { cols, rows });
64812
65002
  };
64813
65003
  return (_ctx, _cache) => {
64814
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
65004
+ return vue.openBlock(), vue.createElementBlock("div", {
65005
+ class: vue.normalizeClass(["toolbar-table-grid-wrapper", { "high-contrast": vue.unref(isHighContrastMode2) }])
65006
+ }, [
64815
65007
  vue.createBaseVNode("div", {
64816
65008
  class: "toolbar-table-grid",
64817
65009
  onMouseover: onTableGridMouseOver,
@@ -64827,19 +65019,22 @@ const _sfc_main$6 = {
64827
65019
  "data-rows": i,
64828
65020
  "data-item": "true",
64829
65021
  onClick: vue.withModifiers(($event) => handleClick2({ cols: n2, rows: i }), ["stop", "prevent"])
64830
- }, null, 8, _hoisted_2$3);
65022
+ }, null, 8, _hoisted_1$5);
64831
65023
  }), 64))
64832
65024
  ], 64);
64833
65025
  }), 64))
64834
65026
  ], 32),
64835
- vue.createBaseVNode("div", _hoisted_3$3, vue.toDisplayString(selectedRows.value) + " x " + vue.toDisplayString(selectedCols.value), 1)
64836
- ]);
65027
+ vue.createBaseVNode("div", {
65028
+ class: "toolbar-table-grid-value",
65029
+ "aria-valuetext": `${selectedRows.value} x ${selectedCols.value}`
65030
+ }, vue.toDisplayString(selectedRows.value) + " x " + vue.toDisplayString(selectedCols.value), 9, _hoisted_2$3)
65031
+ ], 2);
64837
65032
  };
64838
65033
  }
64839
65034
  };
64840
- const TableGrid = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-06352ab9"]]);
65035
+ const TableGrid = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-617bf152"]]);
64841
65036
  const _hoisted_1$4 = { class: "toolbar-table-actions" };
64842
- const _hoisted_2$2 = ["onClick", "data-item"];
65037
+ const _hoisted_2$2 = ["onClick", "data-item", "ariaLabel"];
64843
65038
  const _hoisted_3$2 = { class: "toolbar-table-actions__icon" };
64844
65039
  const _hoisted_4 = ["innerHTML"];
64845
65040
  const _hoisted_5 = { class: "toolbar-table-actions__label" };
@@ -64862,7 +65057,9 @@ const _sfc_main$5 = {
64862
65057
  return vue.openBlock(), vue.createElementBlock("div", {
64863
65058
  class: vue.normalizeClass(["toolbar-table-actions__item", { "toolbar-table-actions__item--border": option.bottomBorder }]),
64864
65059
  onClick: ($event) => handleClick2(option),
64865
- "data-item": option.props?.["data-item"] || ""
65060
+ "data-item": option.props?.["data-item"] || "",
65061
+ ariaLabel: option.props?.ariaLabel,
65062
+ role: "menuitem"
64866
65063
  }, [
64867
65064
  vue.createBaseVNode("div", _hoisted_3$2, [
64868
65065
  vue.createBaseVNode("div", {
@@ -64877,7 +65074,7 @@ const _sfc_main$5 = {
64877
65074
  };
64878
65075
  }
64879
65076
  };
64880
- const TableActions = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-fdbfb4b0"]]);
65077
+ const TableActions = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-f82e859a"]]);
64881
65078
  const checkIconSvg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/></svg>\n';
64882
65079
  const _hoisted_1$3 = { class: "search-input-ctn" };
64883
65080
  const _hoisted_2$1 = { class: "row" };
@@ -64978,7 +65175,10 @@ const makeDefaultItems = ({
64978
65175
  name: "bold",
64979
65176
  command: "toggleBold",
64980
65177
  icon: toolbarIcons2.bold,
64981
- tooltip: toolbarTexts2.bold
65178
+ tooltip: toolbarTexts2.bold,
65179
+ attributes: {
65180
+ ariaLabel: "Bold"
65181
+ }
64982
65182
  });
64983
65183
  const fontButton = useToolbarItem({
64984
65184
  type: "dropdown",
@@ -64993,6 +65193,9 @@ const makeDefaultItems = ({
64993
65193
  isWide: true,
64994
65194
  style: { width: "116px" },
64995
65195
  suppressActiveHighlight: true,
65196
+ attributes: {
65197
+ ariaLabel: "Font family"
65198
+ },
64996
65199
  options: [...toolbarFonts ? toolbarFonts : TOOLBAR_FONTS],
64997
65200
  onActivate: ({ fontFamily: fontFamily2 }) => {
64998
65201
  if (!fontFamily2) return;
@@ -65013,6 +65216,9 @@ const makeDefaultItems = ({
65013
65216
  hasCaret: false,
65014
65217
  isWide: true,
65015
65218
  suppressActiveHighlight: true,
65219
+ attributes: {
65220
+ ariaLabel: "AI"
65221
+ },
65016
65222
  options: [
65017
65223
  {
65018
65224
  type: "render",
@@ -65060,6 +65266,9 @@ const makeDefaultItems = ({
65060
65266
  suppressActiveHighlight: true,
65061
65267
  isWide: true,
65062
65268
  command: "setFontSize",
65269
+ attributes: {
65270
+ ariaLabel: "Font size"
65271
+ },
65063
65272
  options: [
65064
65273
  { label: "8", key: "8pt", props: { "data-item": "btn-fontSize-option" } },
65065
65274
  { label: "9", key: "9pt", props: { "data-item": "btn-fontSize-option" } },
@@ -65095,14 +65304,20 @@ const makeDefaultItems = ({
65095
65304
  name: "italic",
65096
65305
  command: "toggleItalic",
65097
65306
  icon: toolbarIcons2.italic,
65098
- tooltip: toolbarTexts2.italic
65307
+ tooltip: toolbarTexts2.italic,
65308
+ attributes: {
65309
+ ariaLabel: "Italic"
65310
+ }
65099
65311
  });
65100
65312
  const underline = useToolbarItem({
65101
65313
  type: "button",
65102
65314
  name: "underline",
65103
65315
  command: "toggleUnderline",
65104
65316
  icon: toolbarIcons2.underline,
65105
- tooltip: toolbarTexts2.underline
65317
+ tooltip: toolbarTexts2.underline,
65318
+ attributes: {
65319
+ ariaLabel: "Underline"
65320
+ }
65106
65321
  });
65107
65322
  const highlight = useToolbarItem({
65108
65323
  type: "dropdown",
@@ -65115,6 +65330,9 @@ const makeDefaultItems = ({
65115
65330
  command: "setHighlight",
65116
65331
  noArgumentCommand: "unsetHighlight",
65117
65332
  suppressActiveHighlight: true,
65333
+ attributes: {
65334
+ ariaLabel: "Highlight"
65335
+ },
65118
65336
  options: [
65119
65337
  {
65120
65338
  key: "color",
@@ -65137,6 +65355,9 @@ const makeDefaultItems = ({
65137
65355
  tooltip: toolbarTexts2.color,
65138
65356
  command: "setColor",
65139
65357
  suppressActiveHighlight: true,
65358
+ attributes: {
65359
+ ariaLabel: "Color"
65360
+ },
65140
65361
  options: [
65141
65362
  {
65142
65363
  key: "color",
@@ -65157,6 +65378,9 @@ const makeDefaultItems = ({
65157
65378
  tooltip: toolbarTexts2.search,
65158
65379
  group: "right",
65159
65380
  inputRef: searchRef,
65381
+ attributes: {
65382
+ ariaLabel: "Search"
65383
+ },
65160
65384
  options: [
65161
65385
  {
65162
65386
  type: "render",
@@ -65182,6 +65406,9 @@ const makeDefaultItems = ({
65182
65406
  markName: "link",
65183
65407
  icon: toolbarIcons2.link,
65184
65408
  tooltip: toolbarTexts2.link,
65409
+ attributes: {
65410
+ ariaLabel: "Link dropdown"
65411
+ },
65185
65412
  options: [
65186
65413
  {
65187
65414
  type: "render",
@@ -65235,7 +65462,10 @@ const makeDefaultItems = ({
65235
65462
  command: "startImageUpload",
65236
65463
  icon: toolbarIcons2.image,
65237
65464
  tooltip: toolbarTexts2.image,
65238
- disabled: false
65465
+ disabled: false,
65466
+ attributes: {
65467
+ ariaLabel: "Image"
65468
+ }
65239
65469
  });
65240
65470
  const tableItem = useToolbarItem({
65241
65471
  type: "dropdown",
@@ -65246,6 +65476,9 @@ const makeDefaultItems = ({
65246
65476
  tooltip: toolbarTexts2.table,
65247
65477
  command: "insertTable",
65248
65478
  suppressActiveHighlight: true,
65479
+ attributes: {
65480
+ ariaLabel: "Table"
65481
+ },
65249
65482
  options: [
65250
65483
  {
65251
65484
  key: "table",
@@ -65272,6 +65505,9 @@ const makeDefaultItems = ({
65272
65505
  icon: toolbarIcons2.tableActions,
65273
65506
  hideLabel: true,
65274
65507
  disabled: true,
65508
+ attributes: {
65509
+ ariaLabel: "Table actions"
65510
+ },
65275
65511
  options: [
65276
65512
  {
65277
65513
  type: "render",
@@ -65284,69 +65520,102 @@ const makeDefaultItems = ({
65284
65520
  label: toolbarTexts2.addRowBefore,
65285
65521
  command: "addRowBefore",
65286
65522
  icon: toolbarIcons2.addRowBefore,
65287
- props: { "data-item": "btn-tableActions-option" }
65523
+ props: {
65524
+ "data-item": "btn-tableActions-option",
65525
+ ariaLabel: "Add row before"
65526
+ }
65288
65527
  },
65289
65528
  {
65290
65529
  label: toolbarTexts2.addRowAfter,
65291
65530
  command: "addRowAfter",
65292
65531
  icon: toolbarIcons2.addRowAfter,
65293
- props: { "data-item": "btn-tableActions-option" }
65532
+ props: {
65533
+ "data-item": "btn-tableActions-option",
65534
+ ariaLabel: "Add row after"
65535
+ }
65294
65536
  },
65295
65537
  {
65296
65538
  label: toolbarTexts2.addColumnBefore,
65297
65539
  command: "addColumnBefore",
65298
65540
  icon: toolbarIcons2.addColumnBefore,
65299
- props: { "data-item": "btn-tableActions-option" }
65541
+ props: {
65542
+ "data-item": "btn-tableActions-option",
65543
+ ariaLabel: "Add column before"
65544
+ }
65300
65545
  },
65301
65546
  {
65302
65547
  label: toolbarTexts2.addColumnAfter,
65303
65548
  command: "addColumnAfter",
65304
65549
  icon: toolbarIcons2.addColumnAfter,
65305
65550
  bottomBorder: true,
65306
- props: { "data-item": "btn-tableActions-option" }
65551
+ props: {
65552
+ "data-item": "btn-tableActions-option",
65553
+ ariaLabel: "Add column after"
65554
+ }
65307
65555
  },
65308
65556
  {
65309
65557
  label: toolbarTexts2.deleteRow,
65310
65558
  command: "deleteRow",
65311
65559
  icon: toolbarIcons2.deleteRow,
65312
- props: { "data-item": "btn-tableActions-option" }
65560
+ props: {
65561
+ "data-item": "btn-tableActions-option",
65562
+ ariaLabel: "Delete row"
65563
+ }
65313
65564
  },
65314
65565
  {
65315
65566
  label: toolbarTexts2.deleteColumn,
65316
65567
  command: "deleteColumn",
65317
65568
  icon: toolbarIcons2.deleteColumn,
65318
- props: { "data-item": "btn-tableActions-option" }
65569
+ props: {
65570
+ "data-item": "btn-tableActions-option",
65571
+ ariaLabel: "Delete column"
65572
+ }
65319
65573
  },
65320
65574
  {
65321
65575
  label: toolbarTexts2.deleteTable,
65322
65576
  command: "deleteTable",
65323
65577
  icon: toolbarIcons2.deleteTable,
65324
- props: { "data-item": "btn-tableActions-option" }
65578
+ props: {
65579
+ "data-item": "btn-tableActions-option",
65580
+ ariaLabel: "Delete table"
65581
+ }
65325
65582
  },
65326
65583
  {
65327
65584
  label: toolbarTexts2.transparentBorders,
65328
65585
  command: "deleteCellAndTableBorders",
65329
65586
  icon: toolbarIcons2.deleteBorders,
65330
65587
  bottomBorder: true,
65331
- props: { "data-item": "btn-tableActions-option" }
65588
+ props: {
65589
+ "data-item": "btn-tableActions-option",
65590
+ ariaLabel: "Delete cell and table borders"
65591
+ }
65332
65592
  },
65333
65593
  {
65334
65594
  label: toolbarTexts2.mergeCells,
65335
65595
  command: "mergeCells",
65336
65596
  icon: toolbarIcons2.mergeCells,
65337
- props: { "data-item": "btn-tableActions-option" }
65597
+ props: {
65598
+ "data-item": "btn-tableActions-option",
65599
+ ariaLabel: "Merge cells"
65600
+ }
65338
65601
  },
65339
65602
  {
65340
65603
  label: toolbarTexts2.splitCell,
65341
65604
  command: "splitCell",
65342
65605
  icon: toolbarIcons2.splitCell,
65343
- props: { "data-item": "btn-tableActions-option" }
65606
+ props: {
65607
+ "data-item": "btn-tableActions-option",
65608
+ ariaLabel: "Split cells"
65609
+ }
65344
65610
  },
65345
65611
  {
65346
65612
  label: toolbarTexts2.fixTables,
65347
65613
  command: "fixTables",
65348
65614
  icon: toolbarIcons2.fixTables,
65349
- props: { "data-item": "btn-tableActions-option" }
65615
+ props: {
65616
+ "data-item": "btn-tableActions-option",
65617
+ ariaLabel: "Fix tables"
65618
+ }
65350
65619
  }
65351
65620
  ];
65352
65621
  function renderTableActions(tableActionsItem2) {
@@ -65369,6 +65638,9 @@ const makeDefaultItems = ({
65369
65638
  markName: "textAlign",
65370
65639
  labelAttr: "textAlign",
65371
65640
  suppressActiveHighlight: true,
65641
+ attributes: {
65642
+ ariaLabel: "Text align"
65643
+ },
65372
65644
  options: [
65373
65645
  {
65374
65646
  type: "render",
@@ -65412,14 +65684,20 @@ const makeDefaultItems = ({
65412
65684
  name: "list",
65413
65685
  command: "toggleBulletList",
65414
65686
  icon: toolbarIcons2.bulletList,
65415
- tooltip: toolbarTexts2.bulletList
65687
+ tooltip: toolbarTexts2.bulletList,
65688
+ attributes: {
65689
+ ariaLabel: "Bullet list"
65690
+ }
65416
65691
  });
65417
65692
  const numberedList = useToolbarItem({
65418
65693
  type: "button",
65419
65694
  name: "numberedlist",
65420
65695
  command: "toggleOrderedList",
65421
65696
  icon: toolbarIcons2.numberedList,
65422
- tooltip: toolbarTexts2.numberedList
65697
+ tooltip: toolbarTexts2.numberedList,
65698
+ attributes: {
65699
+ ariaLabel: "Numbered list"
65700
+ }
65423
65701
  });
65424
65702
  const indentLeft = useToolbarItem({
65425
65703
  type: "button",
@@ -65427,7 +65705,10 @@ const makeDefaultItems = ({
65427
65705
  command: "decreaseTextIndent",
65428
65706
  icon: toolbarIcons2.indentLeft,
65429
65707
  tooltip: toolbarTexts2.indentLeft,
65430
- disabled: false
65708
+ disabled: false,
65709
+ attributes: {
65710
+ ariaLabel: "Left indent"
65711
+ }
65431
65712
  });
65432
65713
  const indentRight = useToolbarItem({
65433
65714
  type: "button",
@@ -65435,14 +65716,20 @@ const makeDefaultItems = ({
65435
65716
  command: "increaseTextIndent",
65436
65717
  icon: toolbarIcons2.indentRight,
65437
65718
  tooltip: toolbarTexts2.indentRight,
65438
- disabled: false
65719
+ disabled: false,
65720
+ attributes: {
65721
+ ariaLabel: "Right indent"
65722
+ }
65439
65723
  });
65440
65724
  const overflow = useToolbarItem({
65441
65725
  type: "overflow",
65442
65726
  name: "overflow",
65443
65727
  command: "toggleOverflow",
65444
65728
  icon: toolbarIcons2.overflow,
65445
- disabled: false
65729
+ disabled: false,
65730
+ attributes: {
65731
+ ariaLabel: "Overflow items"
65732
+ }
65446
65733
  });
65447
65734
  const zoom = useToolbarItem({
65448
65735
  type: "dropdown",
@@ -65456,6 +65743,9 @@ const makeDefaultItems = ({
65456
65743
  isWide: true,
65457
65744
  inlineTextInputVisible: false,
65458
65745
  hasInlineTextInput: true,
65746
+ attributes: {
65747
+ ariaLabel: "Zoom"
65748
+ },
65459
65749
  options: [
65460
65750
  { label: "50%", key: 0.5, props: { "data-item": "btn-zoom-option" } },
65461
65751
  { label: "75%", key: 0.75, props: { "data-item": "btn-zoom-option" } },
@@ -65478,6 +65768,9 @@ const makeDefaultItems = ({
65478
65768
  command: "undo",
65479
65769
  icon: toolbarIcons2.undo,
65480
65770
  group: "left",
65771
+ attributes: {
65772
+ ariaLabel: "Undo"
65773
+ },
65481
65774
  onDeactivate: () => {
65482
65775
  undo2.disabled.value = !superToolbar.undoDepth;
65483
65776
  }
@@ -65490,6 +65783,9 @@ const makeDefaultItems = ({
65490
65783
  command: "redo",
65491
65784
  icon: toolbarIcons2.redo,
65492
65785
  group: "left",
65786
+ attributes: {
65787
+ ariaLabel: "Redo"
65788
+ },
65493
65789
  onDeactivate: () => {
65494
65790
  redo2.disabled.value = !superToolbar.redoDepth;
65495
65791
  }
@@ -65501,7 +65797,10 @@ const makeDefaultItems = ({
65501
65797
  tooltip: toolbarTexts2.trackChanges,
65502
65798
  command: "toggleTrackChanges",
65503
65799
  icon: toolbarIcons2.trackChanges,
65504
- group: "left"
65800
+ group: "left",
65801
+ attributes: {
65802
+ ariaLabel: "Track changes"
65803
+ }
65505
65804
  });
65506
65805
  const acceptTrackedChangeBySelection = useToolbarItem({
65507
65806
  type: "button",
@@ -65510,7 +65809,10 @@ const makeDefaultItems = ({
65510
65809
  tooltip: toolbarTexts2.trackChangesAccept,
65511
65810
  command: "acceptTrackedChangeBySelection",
65512
65811
  icon: toolbarIcons2.trackChangesAccept,
65513
- group: "left"
65812
+ group: "left",
65813
+ attributes: {
65814
+ ariaLabel: "Accept tracked changes"
65815
+ }
65514
65816
  });
65515
65817
  const rejectTrackedChangeOnSelection = useToolbarItem({
65516
65818
  type: "button",
@@ -65519,7 +65821,10 @@ const makeDefaultItems = ({
65519
65821
  tooltip: toolbarTexts2.trackChangesReject,
65520
65822
  command: "rejectTrackedChangeOnSelection",
65521
65823
  icon: toolbarIcons2.trackChangesReject,
65522
- group: "left"
65824
+ group: "left",
65825
+ attributes: {
65826
+ ariaLabel: "Reject tracked changes"
65827
+ }
65523
65828
  });
65524
65829
  const toggleTrackChangesOriginal = useToolbarItem({
65525
65830
  type: "button",
@@ -65528,7 +65833,10 @@ const makeDefaultItems = ({
65528
65833
  tooltip: toolbarTexts2.trackChangesOriginal,
65529
65834
  command: "toggleTrackChangesShowOriginal",
65530
65835
  icon: toolbarIcons2.trackChangesOriginal,
65531
- group: "left"
65836
+ group: "left",
65837
+ attributes: {
65838
+ ariaLabel: "Toggle tracked changes show original"
65839
+ }
65532
65840
  });
65533
65841
  const toggleTrackChangesFinal = useToolbarItem({
65534
65842
  type: "button",
@@ -65537,14 +65845,20 @@ const makeDefaultItems = ({
65537
65845
  tooltip: toolbarTexts2.trackChangesFinal,
65538
65846
  command: "toggleTrackChangesShowFinal",
65539
65847
  icon: toolbarIcons2.trackChangesFinal,
65540
- group: "left"
65848
+ group: "left",
65849
+ attributes: {
65850
+ ariaLabel: "Toggle tracked changes show final"
65851
+ }
65541
65852
  });
65542
65853
  const clearFormatting = useToolbarItem({
65543
65854
  type: "button",
65544
65855
  name: "clearFormatting",
65545
65856
  command: "clearFormat",
65546
65857
  tooltip: toolbarTexts2.clearFormatting,
65547
- icon: toolbarIcons2.clearFormatting
65858
+ icon: toolbarIcons2.clearFormatting,
65859
+ attributes: {
65860
+ ariaLabel: "Clear formatting"
65861
+ }
65548
65862
  });
65549
65863
  [
65550
65864
  bold,
@@ -65560,7 +65874,10 @@ const makeDefaultItems = ({
65560
65874
  name: "copyFormat",
65561
65875
  tooltip: toolbarTexts2.copyFormat,
65562
65876
  icon: toolbarIcons2.copyFormat,
65563
- command: "copyFormat"
65877
+ command: "copyFormat",
65878
+ attributes: {
65879
+ ariaLabel: "Copy formatting"
65880
+ }
65564
65881
  });
65565
65882
  const getDocumentOptionsAfterRole = (role2, documentOptions2) => {
65566
65883
  if (role2 === "editor") return documentOptions2;
@@ -65589,7 +65906,8 @@ const makeDefaultItems = ({
65589
65906
  disabled: role !== "editor",
65590
65907
  attributes: {
65591
65908
  dropdownPosition: "right",
65592
- className: "toolbar-item--doc-mode"
65909
+ className: "toolbar-item--doc-mode",
65910
+ ariaLabel: "Document mode"
65593
65911
  },
65594
65912
  options: [
65595
65913
  {
@@ -65636,7 +65954,10 @@ const makeDefaultItems = ({
65636
65954
  name: "pageBreakTool",
65637
65955
  command: "insertPageBreak",
65638
65956
  icon: toolbarIcons2.pageBreak,
65639
- tooltip: toolbarTexts2.pageBreak
65957
+ tooltip: toolbarTexts2.pageBreak,
65958
+ attributes: {
65959
+ ariaLabel: "Page break"
65960
+ }
65640
65961
  });
65641
65962
  const controlSizes = /* @__PURE__ */ new Map([
65642
65963
  ["separator", 20],
@@ -65654,7 +65975,10 @@ const makeDefaultItems = ({
65654
65975
  name: "ruler",
65655
65976
  command: "toggleRuler",
65656
65977
  icon: toolbarIcons2.ruler,
65657
- tooltip: toolbarTexts2.ruler
65978
+ tooltip: toolbarTexts2.ruler,
65979
+ attributes: {
65980
+ ariaLabel: "Ruler"
65981
+ }
65658
65982
  });
65659
65983
  const selectedLinkedStyle = vue.ref(null);
65660
65984
  const linkedStyles = useToolbarItem({
@@ -65670,7 +65994,8 @@ const makeDefaultItems = ({
65670
65994
  suppressActiveHighlight: true,
65671
65995
  disabled: false,
65672
65996
  attributes: {
65673
- className: "toolbar-item--linked-styles"
65997
+ className: "toolbar-item--linked-styles",
65998
+ ariaLabel: "Linked styles"
65674
65999
  },
65675
66000
  options: [
65676
66001
  {
@@ -65717,6 +66042,9 @@ const makeDefaultItems = ({
65717
66042
  command: "setLineHeight",
65718
66043
  dropdownValueKey: "key",
65719
66044
  selectedValue: "1",
66045
+ attributes: {
66046
+ ariaLabel: "Line height"
66047
+ },
65720
66048
  options: [
65721
66049
  { label: "1,0", key: "1", icon: () => renderIcon("1", lineHeight2.selectedValue), props: { "data-item": "btn-lineHeight-option" } },
65722
66050
  { label: "1,15", key: "1.15", icon: () => renderIcon("1.15", lineHeight2.selectedValue), props: { "data-item": "btn-lineHeight-option" } },
@@ -67034,7 +67362,8 @@ const _sfc_main$2 = {
67034
67362
  vue.createBaseVNode("div", {
67035
67363
  ref_key: "editorElem",
67036
67364
  ref: editorElem,
67037
- class: "editor-element super-editor__element"
67365
+ class: "editor-element super-editor__element",
67366
+ role: "presentation"
67038
67367
  }, null, 512)
67039
67368
  ], 544),
67040
67369
  !editorReady.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [
@@ -67086,7 +67415,7 @@ const _sfc_main$2 = {
67086
67415
  };
67087
67416
  }
67088
67417
  };
67089
- const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-ff8f86f4"]]);
67418
+ const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-f27b7c30"]]);
67090
67419
  const _sfc_main$1 = {
67091
67420
  __name: "BasicUpload",
67092
67421
  emits: ["file-change"],
@@ -67206,6 +67535,7 @@ const Extensions = {
67206
67535
  Mark: Mark2
67207
67536
  };
67208
67537
  exports.AIWriter = AIWriter;
67538
+ exports.AnnotatorHelpers = AnnotatorHelpers;
67209
67539
  exports.CommentsPluginKey = CommentsPluginKey;
67210
67540
  exports.DocxZipper = DocxZipper;
67211
67541
  exports.Editor = Editor;