superdoc 0.20.0-next.13

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 (712) hide show
  1. package/README.md +113 -0
  2. package/dist/chunks/PdfViewer-Cdw_Rxtl.cjs +507 -0
  3. package/dist/chunks/PdfViewer-UKMeGyCc.es.js +507 -0
  4. package/dist/chunks/blank-docx-CPqX9RF5.cjs +3 -0
  5. package/dist/chunks/blank-docx-iwdyG9RH.es.js +4 -0
  6. package/dist/chunks/eventemitter3-B_kO1Pxm.cjs +168 -0
  7. package/dist/chunks/eventemitter3-CZv6vEhA.es.js +169 -0
  8. package/dist/chunks/index-ByynlgNA.es.js +18649 -0
  9. package/dist/chunks/index-QAHP9Hp3.cjs +18664 -0
  10. package/dist/chunks/jszip-B8KIZSNe.es.js +1774 -0
  11. package/dist/chunks/jszip-b7l8QkfH.cjs +1773 -0
  12. package/dist/chunks/super-editor.es-BFcP4oFS.cjs +83013 -0
  13. package/dist/chunks/super-editor.es-D9-ZMXnA.es.js +82998 -0
  14. package/dist/chunks/uuid-CQzaMNgL.cjs +36 -0
  15. package/dist/chunks/uuid-DIIKH5Zc.es.js +37 -0
  16. package/dist/chunks/vue-CXxsqYcP.es.js +9743 -0
  17. package/dist/chunks/vue-DWle4Cai.cjs +9742 -0
  18. package/dist/chunks/xml-js-CX8FH0He.cjs +3 -0
  19. package/dist/chunks/xml-js-D0tLGmKu.es.js +2 -0
  20. package/dist/components/CommentsLayer/comment-schemas.d.ts +17 -0
  21. package/dist/components/CommentsLayer/comment-schemas.d.ts.map +1 -0
  22. package/dist/components/CommentsLayer/commentsList/super-comments-list.d.ts +21 -0
  23. package/dist/components/CommentsLayer/commentsList/super-comments-list.d.ts.map +1 -0
  24. package/dist/components/CommentsLayer/helpers.d.ts +8 -0
  25. package/dist/components/CommentsLayer/helpers.d.ts.map +1 -0
  26. package/dist/components/CommentsLayer/use-comment.d.ts +8 -0
  27. package/dist/components/CommentsLayer/use-comment.d.ts.map +1 -0
  28. package/dist/components/CommentsLayer/use-conversation.d.ts +23 -0
  29. package/dist/components/CommentsLayer/use-conversation.d.ts.map +1 -0
  30. package/dist/components/CommentsLayer/use-floating-comment.d.ts +12 -0
  31. package/dist/components/CommentsLayer/use-floating-comment.d.ts.map +1 -0
  32. package/dist/components/PdfViewer/helpers/range.d.ts +2 -0
  33. package/dist/components/PdfViewer/helpers/range.d.ts.map +1 -0
  34. package/dist/components/PdfViewer/helpers/read-file.d.ts +2 -0
  35. package/dist/components/PdfViewer/helpers/read-file.d.ts.map +1 -0
  36. package/dist/components/PdfViewer/pdf/pdf-adapter.d.ts +115 -0
  37. package/dist/components/PdfViewer/pdf/pdf-adapter.d.ts.map +1 -0
  38. package/dist/composables/use-ai.d.ts +11 -0
  39. package/dist/composables/use-ai.d.ts.map +1 -0
  40. package/dist/composables/use-document.d.ts +29 -0
  41. package/dist/composables/use-document.d.ts.map +1 -0
  42. package/dist/composables/use-field.d.ts +34 -0
  43. package/dist/composables/use-field.d.ts.map +1 -0
  44. package/dist/composables/use-high-contrast-mode.d.ts +5 -0
  45. package/dist/composables/use-high-contrast-mode.d.ts.map +1 -0
  46. package/dist/composables/use-selected-text.d.ts +8 -0
  47. package/dist/composables/use-selected-text.d.ts.map +1 -0
  48. package/dist/core/SuperDoc.d.ts +803 -0
  49. package/dist/core/SuperDoc.d.ts.map +1 -0
  50. package/dist/core/collaboration/collaboration-comments.d.ts +5 -0
  51. package/dist/core/collaboration/collaboration-comments.d.ts.map +1 -0
  52. package/dist/core/collaboration/collaboration.d.ts +18 -0
  53. package/dist/core/collaboration/collaboration.d.ts.map +1 -0
  54. package/dist/core/collaboration/helpers.d.ts +5 -0
  55. package/dist/core/collaboration/helpers.d.ts.map +1 -0
  56. package/dist/core/collaboration/permissions.d.ts +14 -0
  57. package/dist/core/collaboration/permissions.d.ts.map +1 -0
  58. package/dist/core/create-app.d.ts +2 -0
  59. package/dist/core/create-app.d.ts.map +1 -0
  60. package/dist/core/helpers/export.d.ts +3 -0
  61. package/dist/core/helpers/export.d.ts.map +1 -0
  62. package/dist/core/helpers/file.d.ts +44 -0
  63. package/dist/core/helpers/file.d.ts.map +1 -0
  64. package/dist/core/index.d.ts +2 -0
  65. package/dist/core/index.d.ts.map +1 -0
  66. package/dist/helpers/floor.d.ts +2 -0
  67. package/dist/helpers/floor.d.ts.map +1 -0
  68. package/dist/helpers/group-changes.d.ts +2 -0
  69. package/dist/helpers/group-changes.d.ts.map +1 -0
  70. package/dist/helpers/use-selection.d.ts +18 -0
  71. package/dist/helpers/use-selection.d.ts.map +1 -0
  72. package/dist/icons.d.ts +11 -0
  73. package/dist/icons.d.ts.map +1 -0
  74. package/dist/images/altText_add.svg +3 -0
  75. package/dist/images/altText_done.svg +3 -0
  76. package/dist/images/annotation-check.svg +11 -0
  77. package/dist/images/annotation-comment.svg +16 -0
  78. package/dist/images/annotation-help.svg +26 -0
  79. package/dist/images/annotation-insert.svg +10 -0
  80. package/dist/images/annotation-key.svg +11 -0
  81. package/dist/images/annotation-newparagraph.svg +11 -0
  82. package/dist/images/annotation-noicon.svg +7 -0
  83. package/dist/images/annotation-note.svg +42 -0
  84. package/dist/images/annotation-paperclip.svg +6 -0
  85. package/dist/images/annotation-paragraph.svg +16 -0
  86. package/dist/images/annotation-pushpin.svg +7 -0
  87. package/dist/images/cursor-editorFreeHighlight.svg +6 -0
  88. package/dist/images/cursor-editorFreeText.svg +3 -0
  89. package/dist/images/cursor-editorInk.svg +4 -0
  90. package/dist/images/cursor-editorTextHighlight.svg +8 -0
  91. package/dist/images/editor-toolbar-delete.svg +5 -0
  92. package/dist/images/loading-icon.gif +0 -0
  93. package/dist/images/toolbarButton-editorHighlight.svg +6 -0
  94. package/dist/images/toolbarButton-menuArrow.svg +3 -0
  95. package/dist/index.d.ts +19 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/main.d.ts +2 -0
  98. package/dist/main.d.ts.map +1 -0
  99. package/dist/stores/comments-store.d.ts +245 -0
  100. package/dist/stores/comments-store.d.ts.map +1 -0
  101. package/dist/stores/hrbr-fields-store.d.ts +44 -0
  102. package/dist/stores/hrbr-fields-store.d.ts.map +1 -0
  103. package/dist/stores/superdoc-store.d.ts +146 -0
  104. package/dist/stores/superdoc-store.d.ts.map +1 -0
  105. package/dist/style.css +5290 -0
  106. package/dist/super-editor/ai-writer.es.js +523 -0
  107. package/dist/super-editor/chunks/converter-Brf9NxwA.js +32437 -0
  108. package/dist/super-editor/chunks/docx-zipper-Dld3TtPb.js +2552 -0
  109. package/dist/super-editor/chunks/editor-27QWXfk-.js +33078 -0
  110. package/dist/super-editor/chunks/toolbar-BPRbNqgL.js +10168 -0
  111. package/dist/super-editor/converter.es.js +5 -0
  112. package/dist/super-editor/docx-zipper.es.js +5 -0
  113. package/dist/super-editor/editor.es.js +6 -0
  114. package/dist/super-editor/file-zipper.es.js +12 -0
  115. package/dist/super-editor/postcss.config.d.cts +1 -0
  116. package/dist/super-editor/src/components/cursor-helpers.d.ts +24 -0
  117. package/dist/super-editor/src/components/pagination-helpers.d.ts +8 -0
  118. package/dist/super-editor/src/components/slash-menu/constants.d.ts +67 -0
  119. package/dist/super-editor/src/components/slash-menu/menuItems.d.ts +36 -0
  120. package/dist/super-editor/src/components/slash-menu/utils.d.ts +9 -0
  121. package/dist/super-editor/src/components/toolbar/ai-helpers.d.ts +76 -0
  122. package/dist/super-editor/src/components/toolbar/color-dropdown-helpers.d.ts +14 -0
  123. package/dist/super-editor/src/components/toolbar/constants.d.ts +18 -0
  124. package/dist/super-editor/src/components/toolbar/defaultItems.d.ts +6 -0
  125. package/dist/super-editor/src/components/toolbar/helpers.d.ts +5 -0
  126. package/dist/super-editor/src/components/toolbar/scroll-helpers.d.ts +4 -0
  127. package/dist/super-editor/src/components/toolbar/super-toolbar.d.ts +506 -0
  128. package/dist/super-editor/src/components/toolbar/toolbarIcons.d.ts +61 -0
  129. package/dist/super-editor/src/components/toolbar/toolbarTexts.d.ts +52 -0
  130. package/dist/super-editor/src/components/toolbar/use-toolbar-item.d.ts +45 -0
  131. package/dist/super-editor/src/composables/use-high-contrast-mode.d.ts +4 -0
  132. package/dist/super-editor/src/core/Attribute.d.ts +79 -0
  133. package/dist/super-editor/src/core/CommandService.d.ts +63 -0
  134. package/dist/super-editor/src/core/DocxZipper.d.ts +61 -0
  135. package/dist/super-editor/src/core/Editor.d.ts +828 -0
  136. package/dist/super-editor/src/core/EventEmitter.d.ts +39 -0
  137. package/dist/super-editor/src/core/Extension.d.ts +18 -0
  138. package/dist/super-editor/src/core/ExtensionService.d.ts +59 -0
  139. package/dist/super-editor/src/core/InputRule.d.ts +60 -0
  140. package/dist/super-editor/src/core/Mark.d.ts +19 -0
  141. package/dist/super-editor/src/core/Node.d.ts +29 -0
  142. package/dist/super-editor/src/core/OxmlNode.d.ts +19 -0
  143. package/dist/super-editor/src/core/Schema.d.ts +33 -0
  144. package/dist/super-editor/src/core/child-editor/child-editor.d.ts +2 -0
  145. package/dist/super-editor/src/core/child-editor/index.d.ts +1 -0
  146. package/dist/super-editor/src/core/commands/backspaceNextToList.d.ts +5 -0
  147. package/dist/super-editor/src/core/commands/clearNodes.d.ts +5 -0
  148. package/dist/super-editor/src/core/commands/command.d.ts +1 -0
  149. package/dist/super-editor/src/core/commands/createParagraphNear.d.ts +4 -0
  150. package/dist/super-editor/src/core/commands/decreaseListIndent.d.ts +1 -0
  151. package/dist/super-editor/src/core/commands/deleteListItem.d.ts +1 -0
  152. package/dist/super-editor/src/core/commands/deleteNextToList.d.ts +14 -0
  153. package/dist/super-editor/src/core/commands/deleteSelection.d.ts +5 -0
  154. package/dist/super-editor/src/core/commands/exitCode.d.ts +4 -0
  155. package/dist/super-editor/src/core/commands/first.d.ts +1 -0
  156. package/dist/super-editor/src/core/commands/increaseListIndent.d.ts +4 -0
  157. package/dist/super-editor/src/core/commands/index.d.ts +43 -0
  158. package/dist/super-editor/src/core/commands/insertContent.d.ts +4 -0
  159. package/dist/super-editor/src/core/commands/insertContentAt.d.ts +8 -0
  160. package/dist/super-editor/src/core/commands/insertTabChar.d.ts +3 -0
  161. package/dist/super-editor/src/core/commands/insertTabNode.d.ts +10 -0
  162. package/dist/super-editor/src/core/commands/joinBackward.d.ts +4 -0
  163. package/dist/super-editor/src/core/commands/joinDown.d.ts +4 -0
  164. package/dist/super-editor/src/core/commands/joinForward.d.ts +4 -0
  165. package/dist/super-editor/src/core/commands/joinUp.d.ts +4 -0
  166. package/dist/super-editor/src/core/commands/liftEmptyBlock.d.ts +4 -0
  167. package/dist/super-editor/src/core/commands/liftListItem.d.ts +4 -0
  168. package/dist/super-editor/src/core/commands/list-helpers/find-node-position.d.ts +1 -0
  169. package/dist/super-editor/src/core/commands/list-helpers/index.d.ts +2 -0
  170. package/dist/super-editor/src/core/commands/list-helpers/is-list.d.ts +1 -0
  171. package/dist/super-editor/src/core/commands/list-helpers/test-helpers.d.ts +126 -0
  172. package/dist/super-editor/src/core/commands/newlineInCode.d.ts +4 -0
  173. package/dist/super-editor/src/core/commands/resetAttributes.d.ts +5 -0
  174. package/dist/super-editor/src/core/commands/restoreSelection.d.ts +5 -0
  175. package/dist/super-editor/src/core/commands/selectAll.d.ts +4 -0
  176. package/dist/super-editor/src/core/commands/selectNodeBackward.d.ts +4 -0
  177. package/dist/super-editor/src/core/commands/selectNodeForward.d.ts +4 -0
  178. package/dist/super-editor/src/core/commands/selectTextblockEnd.d.ts +4 -0
  179. package/dist/super-editor/src/core/commands/selectTextblockStart.d.ts +4 -0
  180. package/dist/super-editor/src/core/commands/setMark.d.ts +6 -0
  181. package/dist/super-editor/src/core/commands/setMeta.d.ts +3 -0
  182. package/dist/super-editor/src/core/commands/setNode.d.ts +5 -0
  183. package/dist/super-editor/src/core/commands/sinkListItem.d.ts +4 -0
  184. package/dist/super-editor/src/core/commands/splitBlock.d.ts +3 -0
  185. package/dist/super-editor/src/core/commands/splitListItem.d.ts +1 -0
  186. package/dist/super-editor/src/core/commands/toggleList.d.ts +56 -0
  187. package/dist/super-editor/src/core/commands/toggleMark.d.ts +4 -0
  188. package/dist/super-editor/src/core/commands/toggleNode.d.ts +4 -0
  189. package/dist/super-editor/src/core/commands/types/index.d.ts +61 -0
  190. package/dist/super-editor/src/core/commands/undoInputRule.d.ts +4 -0
  191. package/dist/super-editor/src/core/commands/unsetAllMarks.d.ts +5 -0
  192. package/dist/super-editor/src/core/commands/unsetMark.d.ts +6 -0
  193. package/dist/super-editor/src/core/commands/updateAttributes.d.ts +5 -0
  194. package/dist/super-editor/src/core/commands/wrapInList.d.ts +4 -0
  195. package/dist/super-editor/src/core/encoding-helpers.d.ts +27 -0
  196. package/dist/super-editor/src/core/extensions/commands.d.ts +2 -0
  197. package/dist/super-editor/src/core/extensions/editable.d.ts +2 -0
  198. package/dist/super-editor/src/core/extensions/editorFocus.d.ts +6 -0
  199. package/dist/super-editor/src/core/extensions/index.d.ts +4 -0
  200. package/dist/super-editor/src/core/extensions/keymap.d.ts +9 -0
  201. package/dist/super-editor/src/core/helpers/ErrorWithDetails.d.ts +20 -0
  202. package/dist/super-editor/src/core/helpers/annotator.d.ts +51 -0
  203. package/dist/super-editor/src/core/helpers/baseListDefinitions.d.ts +443 -0
  204. package/dist/super-editor/src/core/helpers/chainableEditorState.d.ts +8 -0
  205. package/dist/super-editor/src/core/helpers/cleanSchemaItem.d.ts +8 -0
  206. package/dist/super-editor/src/core/helpers/contentProcessor.d.ts +13 -0
  207. package/dist/super-editor/src/core/helpers/createDocument.d.ts +10 -0
  208. package/dist/super-editor/src/core/helpers/createNodeFromContent.d.ts +2 -0
  209. package/dist/super-editor/src/core/helpers/defaultBlockAt.d.ts +8 -0
  210. package/dist/super-editor/src/core/helpers/findChildren.d.ts +7 -0
  211. package/dist/super-editor/src/core/helpers/findMark.d.ts +1 -0
  212. package/dist/super-editor/src/core/helpers/findParentNode.d.ts +2 -0
  213. package/dist/super-editor/src/core/helpers/findParentNodeClosestToPos.d.ts +19 -0
  214. package/dist/super-editor/src/core/helpers/findWordBounds.d.ts +4 -0
  215. package/dist/super-editor/src/core/helpers/generateDocxListAttributes.d.ts +34 -0
  216. package/dist/super-editor/src/core/helpers/generateDocxRandomId.d.ts +6 -0
  217. package/dist/super-editor/src/core/helpers/getActiveFormatting.d.ts +4 -0
  218. package/dist/super-editor/src/core/helpers/getExtensionConfigField.d.ts +8 -0
  219. package/dist/super-editor/src/core/helpers/getHTMLFromFragment.d.ts +1 -0
  220. package/dist/super-editor/src/core/helpers/getMarkRange.d.ts +8 -0
  221. package/dist/super-editor/src/core/helpers/getMarkType.d.ts +7 -0
  222. package/dist/super-editor/src/core/helpers/getMarksBetween.d.ts +1 -0
  223. package/dist/super-editor/src/core/helpers/getMarksFromSelection.d.ts +1 -0
  224. package/dist/super-editor/src/core/helpers/getNodeType.d.ts +7 -0
  225. package/dist/super-editor/src/core/helpers/getSchemaTypeByName.d.ts +7 -0
  226. package/dist/super-editor/src/core/helpers/getSchemaTypeNameByName.d.ts +7 -0
  227. package/dist/super-editor/src/core/helpers/getTextContentFromNodes.d.ts +1 -0
  228. package/dist/super-editor/src/core/helpers/htmlSanitizer.d.ts +8 -0
  229. package/dist/super-editor/src/core/helpers/importHtml.d.ts +8 -0
  230. package/dist/super-editor/src/core/helpers/importMarkdown.d.ts +14 -0
  231. package/dist/super-editor/src/core/helpers/index.d.ts +30 -0
  232. package/dist/super-editor/src/core/helpers/isActive.d.ts +8 -0
  233. package/dist/super-editor/src/core/helpers/isExtentionRulesEnabled.d.ts +1 -0
  234. package/dist/super-editor/src/core/helpers/isInTable.d.ts +1 -0
  235. package/dist/super-editor/src/core/helpers/isList.d.ts +1 -0
  236. package/dist/super-editor/src/core/helpers/isMarkActive.d.ts +8 -0
  237. package/dist/super-editor/src/core/helpers/isNodeActive.d.ts +8 -0
  238. package/dist/super-editor/src/core/helpers/isTextSelection.d.ts +1 -0
  239. package/dist/super-editor/src/core/helpers/list-numbering-helpers.d.ts +98 -0
  240. package/dist/super-editor/src/core/helpers/orderedListUtils.d.ts +7 -0
  241. package/dist/super-editor/src/core/helpers/pasteListHelpers.d.ts +8 -0
  242. package/dist/super-editor/src/core/helpers/posToDOMRect.d.ts +20 -0
  243. package/dist/super-editor/src/core/helpers/selectionToInsertionEnd.d.ts +1 -0
  244. package/dist/super-editor/src/core/helpers/setImageNodeSelection.d.ts +1 -0
  245. package/dist/super-editor/src/core/helpers/setWordSelection.d.ts +1 -0
  246. package/dist/super-editor/src/core/helpers/updateDOMAttributes.d.ts +1 -0
  247. package/dist/super-editor/src/core/index.d.ts +13 -0
  248. package/dist/super-editor/src/core/inputRules/docx-paste/docx-paste.d.ts +2 -0
  249. package/dist/super-editor/src/core/inputRules/google-docs-paste/google-docs-paste.d.ts +1 -0
  250. package/dist/super-editor/src/core/inputRules/html/html-helpers.d.ts +21 -0
  251. package/dist/super-editor/src/core/inputRules/html/transform-copied-lists.d.ts +3 -0
  252. package/dist/super-editor/src/core/inputRules/wrappingInputRule.d.ts +8 -0
  253. package/dist/super-editor/src/core/migrations/0.14-listsv2/listsv2migration.d.ts +2 -0
  254. package/dist/super-editor/src/core/migrations/index.d.ts +1 -0
  255. package/dist/super-editor/src/core/migrations/migration_after_0_4_14.d.ts +1 -0
  256. package/dist/super-editor/src/core/super-converter/SuperConverter.d.ts +143 -0
  257. package/dist/super-editor/src/core/super-converter/constants.d.ts +3 -0
  258. package/dist/super-editor/src/core/super-converter/docx-helpers/document-rels.d.ts +8 -0
  259. package/dist/super-editor/src/core/super-converter/docx-helpers/docx-constants.d.ts +5 -0
  260. package/dist/super-editor/src/core/super-converter/docx-helpers/docx-helpers.d.ts +8 -0
  261. package/dist/super-editor/src/core/super-converter/docx-helpers/get-default-style-definition.d.ts +1 -0
  262. package/dist/super-editor/src/core/super-converter/docx-helpers/index.d.ts +3 -0
  263. package/dist/super-editor/src/core/super-converter/export-helpers/pre-process-vertical-merge-cells.d.ts +6 -0
  264. package/dist/super-editor/src/core/super-converter/exporter-docx-defs.d.ts +934 -0
  265. package/dist/super-editor/src/core/super-converter/exporter.d.ts +171 -0
  266. package/dist/super-editor/src/core/super-converter/helpers/mediaHelpers.d.ts +2 -0
  267. package/dist/super-editor/src/core/super-converter/helpers.d.ts +35 -0
  268. package/dist/super-editor/src/core/super-converter/types.d.ts +3 -0
  269. package/dist/super-editor/src/core/super-converter/v2/docxHelper.d.ts +12 -0
  270. package/dist/super-editor/src/core/super-converter/v2/exporter/commentsExporter.d.ts +23 -0
  271. package/dist/super-editor/src/core/super-converter/v2/exporter/helpers/base-list.definitions.d.ts +443 -0
  272. package/dist/super-editor/src/core/super-converter/v2/exporter/helpers/index.d.ts +2 -0
  273. package/dist/super-editor/src/core/super-converter/v2/exporter/helpers/translateChildNodes.d.ts +7 -0
  274. package/dist/super-editor/src/core/super-converter/v2/exporter/index.d.ts +1 -0
  275. package/dist/super-editor/src/core/super-converter/v2/importer/alternateChoiceImporter.d.ts +4 -0
  276. package/dist/super-editor/src/core/super-converter/v2/importer/autoPageNumberImporter.d.ts +8 -0
  277. package/dist/super-editor/src/core/super-converter/v2/importer/bookmarkEndImporter.d.ts +6 -0
  278. package/dist/super-editor/src/core/super-converter/v2/importer/bookmarkNodeImporter.d.ts +13 -0
  279. package/dist/super-editor/src/core/super-converter/v2/importer/bookmarkStartImporter.d.ts +6 -0
  280. package/dist/super-editor/src/core/super-converter/v2/importer/documentCommentsImporter.d.ts +17 -0
  281. package/dist/super-editor/src/core/super-converter/v2/importer/docxImporter.d.ts +67 -0
  282. package/dist/super-editor/src/core/super-converter/v2/importer/hyperlinkImporter.d.ts +4 -0
  283. package/dist/super-editor/src/core/super-converter/v2/importer/ignoredNodes.d.ts +2 -0
  284. package/dist/super-editor/src/core/super-converter/v2/importer/imageImporter.d.ts +9 -0
  285. package/dist/super-editor/src/core/super-converter/v2/importer/importerHelpers.d.ts +24 -0
  286. package/dist/super-editor/src/core/super-converter/v2/importer/index.d.ts +2 -0
  287. package/dist/super-editor/src/core/super-converter/v2/importer/lineBreakImporter.d.ts +6 -0
  288. package/dist/super-editor/src/core/super-converter/v2/importer/listImporter.d.ts +119 -0
  289. package/dist/super-editor/src/core/super-converter/v2/importer/markImporter.d.ts +19 -0
  290. package/dist/super-editor/src/core/super-converter/v2/importer/mergeTextNodes.d.ts +1 -0
  291. package/dist/super-editor/src/core/super-converter/v2/importer/paragraphNodeImporter.d.ts +6 -0
  292. package/dist/super-editor/src/core/super-converter/v2/importer/pictNodeImporter.d.ts +116 -0
  293. package/dist/super-editor/src/core/super-converter/v2/importer/runNodeImporter.d.ts +8 -0
  294. package/dist/super-editor/src/core/super-converter/v2/importer/sdtNodeImporter.d.ts +8 -0
  295. package/dist/super-editor/src/core/super-converter/v2/importer/standardNodeImporter.d.ts +8 -0
  296. package/dist/super-editor/src/core/super-converter/v2/importer/tabImporter.d.ts +5 -0
  297. package/dist/super-editor/src/core/super-converter/v2/importer/tableImporter.d.ts +18 -0
  298. package/dist/super-editor/src/core/super-converter/v2/importer/textNodeImporter.d.ts +8 -0
  299. package/dist/super-editor/src/core/super-converter/v2/importer/trackChangesImporter.d.ts +8 -0
  300. package/dist/super-editor/src/core/super-converter/v2/importer/types/index.d.ts +73 -0
  301. package/dist/super-editor/src/core/super-converter/v2/types/index.d.ts +8 -0
  302. package/dist/super-editor/src/core/super-converter/v3/handlers/index.d.ts +13 -0
  303. package/dist/super-editor/src/core/super-converter/v3/handlers/types/index.d.ts +1 -0
  304. package/dist/super-editor/src/core/super-converter/v3/handlers/utils.d.ts +45 -0
  305. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bidiVisual/bidiVisual-translator.d.ts +6 -0
  306. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bidiVisual/index.d.ts +1 -0
  307. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-end/attributes/index.d.ts +2 -0
  308. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-end/attributes/w-displaced-by-custom-xml.d.ts +4 -0
  309. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-end/attributes/w-id.d.ts +4 -0
  310. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-end/bookmark-end-translator.d.ts +7 -0
  311. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-end/index.d.ts +1 -0
  312. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-start/attributes/index.d.ts +2 -0
  313. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-start/attributes/w-col-first.d.ts +4 -0
  314. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-start/attributes/w-col-last.d.ts +4 -0
  315. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-start/attributes/w-displaced-by-custom-xml.d.ts +4 -0
  316. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-start/attributes/w-id.d.ts +4 -0
  317. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-start/attributes/w-name.d.ts +4 -0
  318. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-start/bookmark-start-translator.d.ts +7 -0
  319. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bookmark-start/index.d.ts +1 -0
  320. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bottom/bottom-translator.d.ts +6 -0
  321. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bottom/index.d.ts +2 -0
  322. package/dist/super-editor/src/core/super-converter/v3/handlers/w/bottom/marginBottom-translator.d.ts +6 -0
  323. package/dist/super-editor/src/core/super-converter/v3/handlers/w/br/attributes/index.d.ts +2 -0
  324. package/dist/super-editor/src/core/super-converter/v3/handlers/w/br/attributes/w-clear.d.ts +4 -0
  325. package/dist/super-editor/src/core/super-converter/v3/handlers/w/br/attributes/w-line-break-type.d.ts +4 -0
  326. package/dist/super-editor/src/core/super-converter/v3/handlers/w/br/br-translator.d.ts +7 -0
  327. package/dist/super-editor/src/core/super-converter/v3/handlers/w/br/index.d.ts +1 -0
  328. package/dist/super-editor/src/core/super-converter/v3/handlers/w/cantSplit/cantSplit-translator.d.ts +6 -0
  329. package/dist/super-editor/src/core/super-converter/v3/handlers/w/cantSplit/index.d.ts +1 -0
  330. package/dist/super-editor/src/core/super-converter/v3/handlers/w/cnfStyle/cnfStyle-translator.d.ts +7 -0
  331. package/dist/super-editor/src/core/super-converter/v3/handlers/w/cnfStyle/index.d.ts +1 -0
  332. package/dist/super-editor/src/core/super-converter/v3/handlers/w/divId/divId-translator.d.ts +6 -0
  333. package/dist/super-editor/src/core/super-converter/v3/handlers/w/divId/index.d.ts +1 -0
  334. package/dist/super-editor/src/core/super-converter/v3/handlers/w/drawing/drawing-translator.d.ts +6 -0
  335. package/dist/super-editor/src/core/super-converter/v3/handlers/w/drawing/index.d.ts +1 -0
  336. package/dist/super-editor/src/core/super-converter/v3/handlers/w/end/end-translator.d.ts +6 -0
  337. package/dist/super-editor/src/core/super-converter/v3/handlers/w/end/index.d.ts +2 -0
  338. package/dist/super-editor/src/core/super-converter/v3/handlers/w/end/marginEnd-translator.d.ts +6 -0
  339. package/dist/super-editor/src/core/super-converter/v3/handlers/w/gridAfter/gridAfter-translator.d.ts +6 -0
  340. package/dist/super-editor/src/core/super-converter/v3/handlers/w/gridAfter/index.d.ts +1 -0
  341. package/dist/super-editor/src/core/super-converter/v3/handlers/w/gridBefore/gridBefore-translator.d.ts +6 -0
  342. package/dist/super-editor/src/core/super-converter/v3/handlers/w/gridBefore/index.d.ts +1 -0
  343. package/dist/super-editor/src/core/super-converter/v3/handlers/w/gridCol/gridCol-translator.d.ts +6 -0
  344. package/dist/super-editor/src/core/super-converter/v3/handlers/w/gridCol/index.d.ts +1 -0
  345. package/dist/super-editor/src/core/super-converter/v3/handlers/w/hidden/hidden-translator.d.ts +6 -0
  346. package/dist/super-editor/src/core/super-converter/v3/handlers/w/hidden/index.d.ts +1 -0
  347. package/dist/super-editor/src/core/super-converter/v3/handlers/w/hyperlink/hyperlink-translator.d.ts +7 -0
  348. package/dist/super-editor/src/core/super-converter/v3/handlers/w/hyperlink/index.d.ts +1 -0
  349. package/dist/super-editor/src/core/super-converter/v3/handlers/w/insideH/index.d.ts +1 -0
  350. package/dist/super-editor/src/core/super-converter/v3/handlers/w/insideH/insideH-translator.d.ts +6 -0
  351. package/dist/super-editor/src/core/super-converter/v3/handlers/w/insideV/index.d.ts +1 -0
  352. package/dist/super-editor/src/core/super-converter/v3/handlers/w/insideV/insideV-translator.d.ts +6 -0
  353. package/dist/super-editor/src/core/super-converter/v3/handlers/w/jc/index.d.ts +1 -0
  354. package/dist/super-editor/src/core/super-converter/v3/handlers/w/jc/jc-translator.d.ts +6 -0
  355. package/dist/super-editor/src/core/super-converter/v3/handlers/w/left/index.d.ts +2 -0
  356. package/dist/super-editor/src/core/super-converter/v3/handlers/w/left/left-translator.d.ts +6 -0
  357. package/dist/super-editor/src/core/super-converter/v3/handlers/w/left/marginLeft-translator.d.ts +6 -0
  358. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/attributes/index.d.ts +2 -0
  359. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/attributes/w-rsid-del.d.ts +4 -0
  360. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/attributes/w-rsid-p.d.ts +4 -0
  361. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/attributes/w-rsid-r-default.d.ts +4 -0
  362. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/attributes/w-rsid-r-pr.d.ts +4 -0
  363. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/attributes/w-rsid-r.d.ts +4 -0
  364. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/attributes/w14-para-id.d.ts +4 -0
  365. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/attributes/w14-text-id.d.ts +4 -0
  366. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/index.d.ts +1 -0
  367. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.d.ts +1 -0
  368. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/w-p-helpers.d.ts +6 -0
  369. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/index.d.ts +1 -0
  370. package/dist/super-editor/src/core/super-converter/v3/handlers/w/p/p-translator.d.ts +7 -0
  371. package/dist/super-editor/src/core/super-converter/v3/handlers/w/right/index.d.ts +2 -0
  372. package/dist/super-editor/src/core/super-converter/v3/handlers/w/right/marginRight-translator.d.ts +6 -0
  373. package/dist/super-editor/src/core/super-converter/v3/handlers/w/right/right-translator.d.ts +6 -0
  374. package/dist/super-editor/src/core/super-converter/v3/handlers/w/sdt/helpers/handle-annotation-node.d.ts +22 -0
  375. package/dist/super-editor/src/core/super-converter/v3/handlers/w/sdt/helpers/handle-doc-part-obj.d.ts +6 -0
  376. package/dist/super-editor/src/core/super-converter/v3/handlers/w/sdt/helpers/handle-document-section-node.d.ts +6 -0
  377. package/dist/super-editor/src/core/super-converter/v3/handlers/w/sdt/helpers/handle-structured-content-node.d.ts +5 -0
  378. package/dist/super-editor/src/core/super-converter/v3/handlers/w/sdt/helpers/parse-tag-value-json.d.ts +5 -0
  379. package/dist/super-editor/src/core/super-converter/v3/handlers/w/sdt/helpers/sdt-node-type-strategy.d.ts +9 -0
  380. package/dist/super-editor/src/core/super-converter/v3/handlers/w/sdt/helpers/translate-document-section.d.ts +7 -0
  381. package/dist/super-editor/src/core/super-converter/v3/handlers/w/sdt/helpers/translate-field-annotation.d.ts +80 -0
  382. package/dist/super-editor/src/core/super-converter/v3/handlers/w/sdt/helpers/translate-structured-content.d.ts +5 -0
  383. package/dist/super-editor/src/core/super-converter/v3/handlers/w/sdt/index.d.ts +1 -0
  384. package/dist/super-editor/src/core/super-converter/v3/handlers/w/sdt/sdt-translator.d.ts +6 -0
  385. package/dist/super-editor/src/core/super-converter/v3/handlers/w/shd/index.d.ts +1 -0
  386. package/dist/super-editor/src/core/super-converter/v3/handlers/w/shd/shd-translator.d.ts +6 -0
  387. package/dist/super-editor/src/core/super-converter/v3/handlers/w/start/index.d.ts +2 -0
  388. package/dist/super-editor/src/core/super-converter/v3/handlers/w/start/marginStart-translator.d.ts +6 -0
  389. package/dist/super-editor/src/core/super-converter/v3/handlers/w/start/start-translator.d.ts +6 -0
  390. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tab/attributes/index.d.ts +2 -0
  391. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tab/attributes/w-tab-leader.d.ts +4 -0
  392. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tab/attributes/w-tab-pos.d.ts +4 -0
  393. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tab/attributes/w-tab-size.d.ts +4 -0
  394. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tab/index.d.ts +1 -0
  395. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tab/tab-translator.d.ts +7 -0
  396. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tbl/index.d.ts +1 -0
  397. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tbl/tbl-translator.d.ts +28 -0
  398. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblBorders/index.d.ts +1 -0
  399. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblBorders/tblBorders-translator.d.ts +6 -0
  400. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblCaption/index.d.ts +1 -0
  401. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblCaption/tblCaption-translator.d.ts +6 -0
  402. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblCellMar/index.d.ts +1 -0
  403. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblCellMar/tblCellMar-translator.d.ts +2 -0
  404. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblCellSpacing/index.d.ts +1 -0
  405. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblCellSpacing/tblCellSpacing-translator.d.ts +6 -0
  406. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblDescription/index.d.ts +1 -0
  407. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblDescription/tblDescription-translator.d.ts +6 -0
  408. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblGrid/index.d.ts +1 -0
  409. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblGrid/tblGrid-helpers.d.ts +5 -0
  410. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblGrid/tblGrid-translator.d.ts +5 -0
  411. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblHeader/index.d.ts +1 -0
  412. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblHeader/tblHeader-translator.d.ts +6 -0
  413. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblInd/index.d.ts +1 -0
  414. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblInd/tblInd-translator.d.ts +6 -0
  415. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblLayout/index.d.ts +1 -0
  416. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblLayout/tblLayout-translator.d.ts +6 -0
  417. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblLook/index.d.ts +1 -0
  418. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblLook/tblLook-translator.d.ts +6 -0
  419. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblOverlap/index.d.ts +1 -0
  420. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblOverlap/tblOverlap-translator.d.ts +6 -0
  421. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblPr/index.d.ts +1 -0
  422. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblPr/tblPr-translator.d.ts +5 -0
  423. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblStyle/index.d.ts +1 -0
  424. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblStyle/tblStyle-translator.d.ts +6 -0
  425. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblStyleColBandSize/index.d.ts +1 -0
  426. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblStyleColBandSize/tblStyleColBandSize-translator.d.ts +6 -0
  427. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblStyleRowBandSize/index.d.ts +1 -0
  428. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblStyleRowBandSize/tblStyleRowBandSize-translator.d.ts +6 -0
  429. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblW/index.d.ts +1 -0
  430. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblW/tblW-translator.d.ts +6 -0
  431. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblpPr/index.d.ts +1 -0
  432. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblpPr/tblpPr-translator.d.ts +6 -0
  433. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tc/helpers/legacy-handle-table-cell-node.d.ts +9 -0
  434. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tc/helpers/translate-table-cell.d.ts +17 -0
  435. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tc/index.d.ts +1 -0
  436. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tc/tc-translator.d.ts +6 -0
  437. package/dist/super-editor/src/core/super-converter/v3/handlers/w/top/index.d.ts +2 -0
  438. package/dist/super-editor/src/core/super-converter/v3/handlers/w/top/marginTop-translator.d.ts +6 -0
  439. package/dist/super-editor/src/core/super-converter/v3/handlers/w/top/top-translator.d.ts +6 -0
  440. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tr/index.d.ts +1 -0
  441. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tr/tr-translator.d.ts +7 -0
  442. package/dist/super-editor/src/core/super-converter/v3/handlers/w/trHeight/index.d.ts +1 -0
  443. package/dist/super-editor/src/core/super-converter/v3/handlers/w/trHeight/trHeight-translator.d.ts +6 -0
  444. package/dist/super-editor/src/core/super-converter/v3/handlers/w/trPr/index.d.ts +1 -0
  445. package/dist/super-editor/src/core/super-converter/v3/handlers/w/trPr/trPr-translator.d.ts +5 -0
  446. package/dist/super-editor/src/core/super-converter/v3/handlers/w/wAfter/index.d.ts +1 -0
  447. package/dist/super-editor/src/core/super-converter/v3/handlers/w/wAfter/wAfter-translator.d.ts +6 -0
  448. package/dist/super-editor/src/core/super-converter/v3/handlers/w/wBefore/index.d.ts +1 -0
  449. package/dist/super-editor/src/core/super-converter/v3/handlers/w/wBefore/wBefore-translator.d.ts +6 -0
  450. package/dist/super-editor/src/core/super-converter/v3/handlers/wp/anchor/anchor-translator.d.ts +6 -0
  451. package/dist/super-editor/src/core/super-converter/v3/handlers/wp/anchor/helpers/handle-anchor-node.d.ts +6 -0
  452. package/dist/super-editor/src/core/super-converter/v3/handlers/wp/anchor/helpers/translate-anchor-node.d.ts +6 -0
  453. package/dist/super-editor/src/core/super-converter/v3/handlers/wp/anchor/index.d.ts +1 -0
  454. package/dist/super-editor/src/core/super-converter/v3/handlers/wp/helpers/decode-image-node-helpers.d.ts +18 -0
  455. package/dist/super-editor/src/core/super-converter/v3/handlers/wp/helpers/encode-image-node-helpers.d.ts +6 -0
  456. package/dist/super-editor/src/core/super-converter/v3/handlers/wp/inline/helpers/handle-inline-node.d.ts +6 -0
  457. package/dist/super-editor/src/core/super-converter/v3/handlers/wp/inline/helpers/translate-inline-node.d.ts +6 -0
  458. package/dist/super-editor/src/core/super-converter/v3/handlers/wp/inline/index.d.ts +1 -0
  459. package/dist/super-editor/src/core/super-converter/v3/handlers/wp/inline/inline-translator.d.ts +6 -0
  460. package/dist/super-editor/src/core/super-converter/v3/node-translator/index.d.ts +1 -0
  461. package/dist/super-editor/src/core/super-converter/v3/node-translator/node-translator.d.ts +215 -0
  462. package/dist/super-editor/src/core/super-converter/zipper.d.ts +7 -0
  463. package/dist/super-editor/src/core/super-validator/index.d.ts +1 -0
  464. package/dist/super-editor/src/core/super-validator/logger/index.d.ts +1 -0
  465. package/dist/super-editor/src/core/super-validator/logger/logger.d.ts +7 -0
  466. package/dist/super-editor/src/core/super-validator/super-validator.d.ts +58 -0
  467. package/dist/super-editor/src/core/super-validator/types.d.ts +61 -0
  468. package/dist/super-editor/src/core/super-validator/validators/state/index.d.ts +16 -0
  469. package/dist/super-editor/src/core/super-validator/validators/state/nodes/image/image-validator.d.ts +26 -0
  470. package/dist/super-editor/src/core/super-validator/validators/state/nodes/image/index.d.ts +1 -0
  471. package/dist/super-editor/src/core/super-validator/validators/state/nodes/image/rules/image-rid.d.ts +22 -0
  472. package/dist/super-editor/src/core/super-validator/validators/state/nodes/image/rules/index.d.ts +1 -0
  473. package/dist/super-editor/src/core/super-validator/validators/state/nodes/link/index.d.ts +1 -0
  474. package/dist/super-editor/src/core/super-validator/validators/state/nodes/link/link-validator.d.ts +24 -0
  475. package/dist/super-editor/src/core/super-validator/validators/state/nodes/link/rules/index.d.ts +1 -0
  476. package/dist/super-editor/src/core/super-validator/validators/state/nodes/link/rules/link-rid.d.ts +24 -0
  477. package/dist/super-editor/src/core/super-validator/validators/xml/index.d.ts +12 -0
  478. package/dist/super-editor/src/core/super-validator/validators/xml/numbering/numbering-validator.d.ts +13 -0
  479. package/dist/super-editor/src/core/super-validator/validators/xml/relationships/relationships-validator.d.ts +31 -0
  480. package/dist/super-editor/src/core/types/index.d.ts +128 -0
  481. package/dist/super-editor/src/core/utilities/callOrGet.d.ts +8 -0
  482. package/dist/super-editor/src/core/utilities/carbonCopy.d.ts +1 -0
  483. package/dist/super-editor/src/core/utilities/clipboardUtils.d.ts +16 -0
  484. package/dist/super-editor/src/core/utilities/createStyleTag.d.ts +6 -0
  485. package/dist/super-editor/src/core/utilities/deleteProps.d.ts +6 -0
  486. package/dist/super-editor/src/core/utilities/imageBlobs.d.ts +1 -0
  487. package/dist/super-editor/src/core/utilities/index.d.ts +10 -0
  488. package/dist/super-editor/src/core/utilities/isEmptyObject.d.ts +5 -0
  489. package/dist/super-editor/src/core/utilities/isIOS.d.ts +1 -0
  490. package/dist/super-editor/src/core/utilities/isMacOS.d.ts +1 -0
  491. package/dist/super-editor/src/core/utilities/isRegExp.d.ts +1 -0
  492. package/dist/super-editor/src/core/utilities/minMax.d.ts +1 -0
  493. package/dist/super-editor/src/core/utilities/objectIncludes.d.ts +8 -0
  494. package/dist/super-editor/src/core/utilities/parseSizeUnit.d.ts +6 -0
  495. package/dist/super-editor/src/extensions/ai/ai-constants.d.ts +3 -0
  496. package/dist/super-editor/src/extensions/ai/ai-marks.d.ts +3 -0
  497. package/dist/super-editor/src/extensions/ai/ai-nodes.d.ts +2 -0
  498. package/dist/super-editor/src/extensions/ai/ai-plugin.d.ts +4 -0
  499. package/dist/super-editor/src/extensions/ai/index.d.ts +4 -0
  500. package/dist/super-editor/src/extensions/block-node/block-node.d.ts +56 -0
  501. package/dist/super-editor/src/extensions/block-node/index.d.ts +1 -0
  502. package/dist/super-editor/src/extensions/bold/bold.d.ts +29 -0
  503. package/dist/super-editor/src/extensions/bold/index.d.ts +1 -0
  504. package/dist/super-editor/src/extensions/bookmarks/bookmark-end.d.ts +6 -0
  505. package/dist/super-editor/src/extensions/bookmarks/bookmark-start.d.ts +26 -0
  506. package/dist/super-editor/src/extensions/bookmarks/index.d.ts +2 -0
  507. package/dist/super-editor/src/extensions/bullet-list/bullet-list.d.ts +14 -0
  508. package/dist/super-editor/src/extensions/bullet-list/index.d.ts +1 -0
  509. package/dist/super-editor/src/extensions/collaboration/collaboration-helpers.d.ts +1 -0
  510. package/dist/super-editor/src/extensions/collaboration/collaboration.d.ts +7 -0
  511. package/dist/super-editor/src/extensions/collaboration/index.d.ts +1 -0
  512. package/dist/super-editor/src/extensions/collaboration-cursor/collaboration-cursor.d.ts +2 -0
  513. package/dist/super-editor/src/extensions/collaboration-cursor/index.d.ts +1 -0
  514. package/dist/super-editor/src/extensions/color/color.d.ts +42 -0
  515. package/dist/super-editor/src/extensions/color/index.d.ts +1 -0
  516. package/dist/super-editor/src/extensions/comment/comment.d.ts +4 -0
  517. package/dist/super-editor/src/extensions/comment/comments-constants.d.ts +1 -0
  518. package/dist/super-editor/src/extensions/comment/comments-helpers.d.ts +14 -0
  519. package/dist/super-editor/src/extensions/comment/comments-marks.d.ts +2 -0
  520. package/dist/super-editor/src/extensions/comment/comments-plugin.d.ts +4 -0
  521. package/dist/super-editor/src/extensions/comment/index.d.ts +3 -0
  522. package/dist/super-editor/src/extensions/content-block/content-block.d.ts +90 -0
  523. package/dist/super-editor/src/extensions/content-block/index.d.ts +1 -0
  524. package/dist/super-editor/src/extensions/custom-selection/custom-selection.d.ts +53 -0
  525. package/dist/super-editor/src/extensions/custom-selection/index.d.ts +1 -0
  526. package/dist/super-editor/src/extensions/document/document.d.ts +33 -0
  527. package/dist/super-editor/src/extensions/document/index.d.ts +1 -0
  528. package/dist/super-editor/src/extensions/dropcursor/dropcursor.d.ts +33 -0
  529. package/dist/super-editor/src/extensions/dropcursor/index.d.ts +1 -0
  530. package/dist/super-editor/src/extensions/field-annotation/FieldAnnotationPlugin.d.ts +2 -0
  531. package/dist/super-editor/src/extensions/field-annotation/FieldAnnotationView.d.ts +32 -0
  532. package/dist/super-editor/src/extensions/field-annotation/cleanup-commands/cleanUpListsWithAnnotations.d.ts +1 -0
  533. package/dist/super-editor/src/extensions/field-annotation/cleanup-commands/cleanUpParagraphWithAnnotations.d.ts +1 -0
  534. package/dist/super-editor/src/extensions/field-annotation/cleanup-commands/index.d.ts +6 -0
  535. package/dist/super-editor/src/extensions/field-annotation/field-annotation.d.ts +5 -0
  536. package/dist/super-editor/src/extensions/field-annotation/fieldAnnotationHelpers/findFieldAnnotations.d.ts +1 -0
  537. package/dist/super-editor/src/extensions/field-annotation/fieldAnnotationHelpers/findFieldAnnotationsBetween.d.ts +8 -0
  538. package/dist/super-editor/src/extensions/field-annotation/fieldAnnotationHelpers/findFieldAnnotationsByFieldId.d.ts +7 -0
  539. package/dist/super-editor/src/extensions/field-annotation/fieldAnnotationHelpers/findFirstFieldAnnotationByFieldId.d.ts +7 -0
  540. package/dist/super-editor/src/extensions/field-annotation/fieldAnnotationHelpers/findHeaderFooterAnnotationsByFieldId.d.ts +7 -0
  541. package/dist/super-editor/src/extensions/field-annotation/fieldAnnotationHelpers/findRemovedFieldAnnotations.d.ts +1 -0
  542. package/dist/super-editor/src/extensions/field-annotation/fieldAnnotationHelpers/getAllFieldAnnotations.d.ts +6 -0
  543. package/dist/super-editor/src/extensions/field-annotation/fieldAnnotationHelpers/getAllFieldAnnotationsWithRect.d.ts +30 -0
  544. package/dist/super-editor/src/extensions/field-annotation/fieldAnnotationHelpers/getHeaderFooterAnnotations.d.ts +1 -0
  545. package/dist/super-editor/src/extensions/field-annotation/fieldAnnotationHelpers/index.d.ts +10 -0
  546. package/dist/super-editor/src/extensions/field-annotation/fieldAnnotationHelpers/trackFieldAnnotationsDeletion.d.ts +1 -0
  547. package/dist/super-editor/src/extensions/field-annotation/index.d.ts +2 -0
  548. package/dist/super-editor/src/extensions/font-family/font-family.d.ts +45 -0
  549. package/dist/super-editor/src/extensions/font-family/index.d.ts +1 -0
  550. package/dist/super-editor/src/extensions/font-size/font-size.d.ts +73 -0
  551. package/dist/super-editor/src/extensions/font-size/index.d.ts +1 -0
  552. package/dist/super-editor/src/extensions/format-commands/format-commands.d.ts +36 -0
  553. package/dist/super-editor/src/extensions/format-commands/index.d.ts +1 -0
  554. package/dist/super-editor/src/extensions/gapcursor/gapcursor.d.ts +16 -0
  555. package/dist/super-editor/src/extensions/gapcursor/index.d.ts +1 -0
  556. package/dist/super-editor/src/extensions/heading/heading.d.ts +33 -0
  557. package/dist/super-editor/src/extensions/heading/index.d.ts +1 -0
  558. package/dist/super-editor/src/extensions/highlight/highlight.d.ts +28 -0
  559. package/dist/super-editor/src/extensions/highlight/index.d.ts +1 -0
  560. package/dist/super-editor/src/extensions/history/history.d.ts +21 -0
  561. package/dist/super-editor/src/extensions/history/index.d.ts +1 -0
  562. package/dist/super-editor/src/extensions/image/image.d.ts +85 -0
  563. package/dist/super-editor/src/extensions/image/imageHelpers/fileNameUtils.d.ts +3 -0
  564. package/dist/super-editor/src/extensions/image/imageHelpers/getFileOpener.d.ts +1 -0
  565. package/dist/super-editor/src/extensions/image/imageHelpers/handleBase64.d.ts +1 -0
  566. package/dist/super-editor/src/extensions/image/imageHelpers/handleImageUpload.d.ts +1 -0
  567. package/dist/super-editor/src/extensions/image/imageHelpers/handleUrl.d.ts +2 -0
  568. package/dist/super-editor/src/extensions/image/imageHelpers/imagePositionPlugin.d.ts +4 -0
  569. package/dist/super-editor/src/extensions/image/imageHelpers/imageRegistrationPlugin.d.ts +11 -0
  570. package/dist/super-editor/src/extensions/image/imageHelpers/index.d.ts +8 -0
  571. package/dist/super-editor/src/extensions/image/imageHelpers/processUploadedImage.d.ts +2 -0
  572. package/dist/super-editor/src/extensions/image/imageHelpers/rotation.d.ts +4 -0
  573. package/dist/super-editor/src/extensions/image/imageHelpers/startImageUpload.d.ts +22 -0
  574. package/dist/super-editor/src/extensions/image/index.d.ts +2 -0
  575. package/dist/super-editor/src/extensions/index.d.ts +66 -0
  576. package/dist/super-editor/src/extensions/italic/index.d.ts +1 -0
  577. package/dist/super-editor/src/extensions/italic/italic.d.ts +19 -0
  578. package/dist/super-editor/src/extensions/line-break/index.d.ts +1 -0
  579. package/dist/super-editor/src/extensions/line-break/line-break.d.ts +56 -0
  580. package/dist/super-editor/src/extensions/line-height/index.d.ts +1 -0
  581. package/dist/super-editor/src/extensions/line-height/line-height.d.ts +38 -0
  582. package/dist/super-editor/src/extensions/link/index.d.ts +1 -0
  583. package/dist/super-editor/src/extensions/link/link.d.ts +69 -0
  584. package/dist/super-editor/src/extensions/linked-styles/helpers.d.ts +7 -0
  585. package/dist/super-editor/src/extensions/linked-styles/index.d.ts +3 -0
  586. package/dist/super-editor/src/extensions/linked-styles/linked-styles.d.ts +40 -0
  587. package/dist/super-editor/src/extensions/linked-styles/plugin.d.ts +6 -0
  588. package/dist/super-editor/src/extensions/list-item/ListItemNodeView.d.ts +36 -0
  589. package/dist/super-editor/src/extensions/list-item/helpers/styledListMarkerPlugin.d.ts +3 -0
  590. package/dist/super-editor/src/extensions/list-item/index.d.ts +1 -0
  591. package/dist/super-editor/src/extensions/list-item/list-item.d.ts +50 -0
  592. package/dist/super-editor/src/extensions/mention/index.d.ts +1 -0
  593. package/dist/super-editor/src/extensions/mention/mention.d.ts +28 -0
  594. package/dist/super-editor/src/extensions/noderesizer/index.d.ts +1 -0
  595. package/dist/super-editor/src/extensions/noderesizer/noderesizer.d.ts +18 -0
  596. package/dist/super-editor/src/extensions/ordered-list/helpers/orderedListMarkerPlugin.d.ts +2 -0
  597. package/dist/super-editor/src/extensions/ordered-list/helpers/orderedListSyncPlugin.d.ts +5 -0
  598. package/dist/super-editor/src/extensions/ordered-list/index.d.ts +1 -0
  599. package/dist/super-editor/src/extensions/ordered-list/ordered-list.d.ts +37 -0
  600. package/dist/super-editor/src/extensions/page-number/index.d.ts +1 -0
  601. package/dist/super-editor/src/extensions/page-number/page-number.d.ts +65 -0
  602. package/dist/super-editor/src/extensions/pagination/index.d.ts +1 -0
  603. package/dist/super-editor/src/extensions/pagination/pagination-helpers.d.ts +25 -0
  604. package/dist/super-editor/src/extensions/pagination/pagination.d.ts +2 -0
  605. package/dist/super-editor/src/extensions/paragraph/helpers/getDefaultSpacing.d.ts +6 -0
  606. package/dist/super-editor/src/extensions/paragraph/index.d.ts +1 -0
  607. package/dist/super-editor/src/extensions/paragraph/paragraph.d.ts +51 -0
  608. package/dist/super-editor/src/extensions/placeholder/index.d.ts +1 -0
  609. package/dist/super-editor/src/extensions/placeholder/placeholder.d.ts +17 -0
  610. package/dist/super-editor/src/extensions/popover-plugin/index.d.ts +1 -0
  611. package/dist/super-editor/src/extensions/popover-plugin/popover-plugin.d.ts +11 -0
  612. package/dist/super-editor/src/extensions/run-item/index.d.ts +1 -0
  613. package/dist/super-editor/src/extensions/run-item/run-item.d.ts +26 -0
  614. package/dist/super-editor/src/extensions/search/index.d.ts +1 -0
  615. package/dist/super-editor/src/extensions/search/search.d.ts +45 -0
  616. package/dist/super-editor/src/extensions/shape-container/index.d.ts +1 -0
  617. package/dist/super-editor/src/extensions/shape-container/shape-container.d.ts +31 -0
  618. package/dist/super-editor/src/extensions/shape-textbox/index.d.ts +1 -0
  619. package/dist/super-editor/src/extensions/shape-textbox/shape-textbox.d.ts +28 -0
  620. package/dist/super-editor/src/extensions/slash-menu/index.d.ts +1 -0
  621. package/dist/super-editor/src/extensions/slash-menu/slash-menu.d.ts +13 -0
  622. package/dist/super-editor/src/extensions/strike/index.d.ts +1 -0
  623. package/dist/super-editor/src/extensions/strike/strike.d.ts +18 -0
  624. package/dist/super-editor/src/extensions/structured-content/StructuredContentBlockView.d.ts +9 -0
  625. package/dist/super-editor/src/extensions/structured-content/StructuredContentInlineView.d.ts +9 -0
  626. package/dist/super-editor/src/extensions/structured-content/StructuredContentViewBase.d.ts +24 -0
  627. package/dist/super-editor/src/extensions/structured-content/document-section/DocumentSectionView.d.ts +15 -0
  628. package/dist/super-editor/src/extensions/structured-content/document-section/helpers.d.ts +11 -0
  629. package/dist/super-editor/src/extensions/structured-content/document-section/index.d.ts +2 -0
  630. package/dist/super-editor/src/extensions/structured-content/document-section.d.ts +105 -0
  631. package/dist/super-editor/src/extensions/structured-content/index.d.ts +3 -0
  632. package/dist/super-editor/src/extensions/structured-content/structured-content-block.d.ts +30 -0
  633. package/dist/super-editor/src/extensions/structured-content/structured-content.d.ts +30 -0
  634. package/dist/super-editor/src/extensions/tab/index.d.ts +1 -0
  635. package/dist/super-editor/src/extensions/tab/tab.d.ts +27 -0
  636. package/dist/super-editor/src/extensions/table/TableView.d.ts +16 -0
  637. package/dist/super-editor/src/extensions/table/index.d.ts +2 -0
  638. package/dist/super-editor/src/extensions/table/table.d.ts +459 -0
  639. package/dist/super-editor/src/extensions/table/tableHelpers/cellAround.d.ts +1 -0
  640. package/dist/super-editor/src/extensions/table/tableHelpers/cellWrapping.d.ts +1 -0
  641. package/dist/super-editor/src/extensions/table/tableHelpers/createCell.d.ts +1 -0
  642. package/dist/super-editor/src/extensions/table/tableHelpers/createColGroup.d.ts +11 -0
  643. package/dist/super-editor/src/extensions/table/tableHelpers/createTable.d.ts +1 -0
  644. package/dist/super-editor/src/extensions/table/tableHelpers/createTableBorders.d.ts +60 -0
  645. package/dist/super-editor/src/extensions/table/tableHelpers/deleteTableWhenSelected.d.ts +3 -0
  646. package/dist/super-editor/src/extensions/table/tableHelpers/getColStyleDeclaration.d.ts +1 -0
  647. package/dist/super-editor/src/extensions/table/tableHelpers/index.d.ts +6 -0
  648. package/dist/super-editor/src/extensions/table/tableHelpers/isCellSelection.d.ts +1 -0
  649. package/dist/super-editor/src/extensions/table-cell/helpers/createCellBorders.d.ts +42 -0
  650. package/dist/super-editor/src/extensions/table-cell/index.d.ts +1 -0
  651. package/dist/super-editor/src/extensions/table-cell/table-cell.d.ts +78 -0
  652. package/dist/super-editor/src/extensions/table-header/index.d.ts +1 -0
  653. package/dist/super-editor/src/extensions/table-header/table-header.d.ts +29 -0
  654. package/dist/super-editor/src/extensions/table-row/index.d.ts +1 -0
  655. package/dist/super-editor/src/extensions/table-row/table-row.d.ts +184 -0
  656. package/dist/super-editor/src/extensions/text/index.d.ts +1 -0
  657. package/dist/super-editor/src/extensions/text/text.d.ts +16 -0
  658. package/dist/super-editor/src/extensions/text-align/index.d.ts +1 -0
  659. package/dist/super-editor/src/extensions/text-align/text-align.d.ts +33 -0
  660. package/dist/super-editor/src/extensions/text-indent/index.d.ts +1 -0
  661. package/dist/super-editor/src/extensions/text-indent/text-indent.d.ts +30 -0
  662. package/dist/super-editor/src/extensions/text-style/index.d.ts +1 -0
  663. package/dist/super-editor/src/extensions/text-style/text-style.d.ts +27 -0
  664. package/dist/super-editor/src/extensions/text-transform/index.d.ts +1 -0
  665. package/dist/super-editor/src/extensions/text-transform/text-transform.d.ts +27 -0
  666. package/dist/super-editor/src/extensions/track-changes/constants.d.ts +3 -0
  667. package/dist/super-editor/src/extensions/track-changes/index.d.ts +6 -0
  668. package/dist/super-editor/src/extensions/track-changes/plugins/index.d.ts +1 -0
  669. package/dist/super-editor/src/extensions/track-changes/plugins/trackChangesBasePlugin.d.ts +10 -0
  670. package/dist/super-editor/src/extensions/track-changes/track-changes.d.ts +2 -0
  671. package/dist/super-editor/src/extensions/track-changes/track-delete.d.ts +2 -0
  672. package/dist/super-editor/src/extensions/track-changes/track-format.d.ts +2 -0
  673. package/dist/super-editor/src/extensions/track-changes/track-insert.d.ts +2 -0
  674. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/addMarkStep.d.ts +1 -0
  675. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/documentHelpers.d.ts +8 -0
  676. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/findTrackedMarkBetween.d.ts +8 -0
  677. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/getTrackChanges.d.ts +1 -0
  678. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/index.d.ts +12 -0
  679. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/markDeletion.d.ts +1 -0
  680. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/markInsertion.d.ts +1 -0
  681. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/markWrapping.d.ts +1 -0
  682. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/parseFormatList.d.ts +1 -0
  683. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/removeMarkStep.d.ts +1 -0
  684. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/replaceAroundStep.d.ts +1 -0
  685. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/replaceStep.d.ts +1 -0
  686. package/dist/super-editor/src/extensions/track-changes/trackChangesHelpers/trackedTransaction.d.ts +1 -0
  687. package/dist/super-editor/src/extensions/underline/index.d.ts +1 -0
  688. package/dist/super-editor/src/extensions/underline/underline.d.ts +43 -0
  689. package/dist/super-editor/src/index.d.ts +32 -0
  690. package/dist/super-editor/src/main.d.ts +1 -0
  691. package/dist/super-editor/src/tests/data/annotations_doc_content.d.ts +429 -0
  692. package/dist/super-editor/src/tests/editor/data/imageBase64.d.ts +1 -0
  693. package/dist/super-editor/src/tests/export/data/comments/basic-resolved-comment.d.ts +32 -0
  694. package/dist/super-editor/src/tests/export/export-helpers/export-helpers.d.ts +8 -0
  695. package/dist/super-editor/src/tests/export/export-helpers/index.d.ts +2 -0
  696. package/dist/super-editor/src/tests/export/export-helpers/list-export-helpers.d.ts +23 -0
  697. package/dist/super-editor/src/tests/helpers/editor-test-utils.d.ts +14 -0
  698. package/dist/super-editor/src/tests/helpers/helpers.d.ts +6 -0
  699. package/dist/super-editor/src/tests/import/testUtils.d.ts +1 -0
  700. package/dist/super-editor/style.css +1897 -0
  701. package/dist/super-editor/super-editor.es.js +4653 -0
  702. package/dist/super-editor/toolbar.es.js +6 -0
  703. package/dist/super-editor/vite.config.d.ts +2 -0
  704. package/dist/super-editor.cjs +29 -0
  705. package/dist/super-editor.d.ts +5 -0
  706. package/dist/super-editor.d.ts.map +1 -0
  707. package/dist/super-editor.es.js +29 -0
  708. package/dist/superdoc.cjs +25 -0
  709. package/dist/superdoc.es.js +25 -0
  710. package/dist/superdoc.umd.js +108866 -0
  711. package/dist/superdoc.umd.js.map +1 -0
  712. package/package.json +86 -0
@@ -0,0 +1,4653 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __typeError = (msg) => {
3
+ throw TypeError(msg);
4
+ };
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
7
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
8
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
9
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
10
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
11
+ var _SuperToolbar_instances, initToolbarGroups_fn, _interceptedCommands, makeToolbarItems_fn, initDefaultFonts_fn, updateHighlightColors_fn, deactivateAll_fn, updateToolbarHistory_fn, runCommandWithArgumentOnly_fn;
12
+ import { aw as getDefaultExportFromCjs, V as v4, T as TextSelection$1, v as getMarkRange, az as vClickOutside, H as findParentNode, aA as getActiveFormatting, aq as isInTable, aB as readFromClipboard, aC as handleClipboardPaste, aD as getFileObject, a as Plugin } from "./chunks/converter-Brf9NxwA.js";
13
+ import { aE, a5, i, a2, aF } from "./chunks/converter-Brf9NxwA.js";
14
+ import { _ as _export_sfc, u as useHighContrastMode, a as getQuickFormatList, b as generateLinkedStyleString, c as getFileOpener, d as checkAndProcessImage, r as replaceSelectionWithImagePlaceholder, e as uploadAndInsertImage, y as yUndoPluginKey, f as undoDepth, h as redoDepth, S as SlashMenuPluginKey, E as Editor, i as getStarterExtensions, P as Placeholder, j as getRichTextExtensions, M as Mark, k as Extension, A as Attribute, N as Node } from "./chunks/editor-27QWXfk-.js";
15
+ import { n, C, o, T, l, p, m } from "./chunks/editor-27QWXfk-.js";
16
+ import { ref, onMounted, createElementBlock, openBlock, normalizeClass, unref, Fragment, renderList, createElementVNode, withModifiers, toDisplayString, createCommentVNode, normalizeStyle, computed, watch, withDirectives, withKeys, vModelText, createTextVNode, createVNode, h, createApp, markRaw, nextTick, onBeforeUnmount, reactive, onUnmounted, renderSlot, shallowRef, createBlock, withCtx, resolveDynamicComponent, normalizeProps, guardReactiveProps } from "vue";
17
+ import { t as toolbarIcons, s as sanitizeNumber, T as Toolbar, m as magicWandIcon, p as plusIconSvg, a as trashIconSvg, l as linkIconSvg, b as tableIconSvg, c as scissorsIconSvg, d as copyIconSvg, e as pasteIconSvg, f as borderNoneIconSvg, g as arrowsToDotIconSvg, h as arrowsLeftRightIconSvg, w as wrenchIconSvg, u as useMessage, N as NSkeleton } from "./chunks/toolbar-BPRbNqgL.js";
18
+ import AIWriter from "./ai-writer.es.js";
19
+ import { D } from "./chunks/docx-zipper-Dld3TtPb.js";
20
+ import { createZip } from "./file-zipper.es.js";
21
+ var eventemitter3 = { exports: {} };
22
+ var hasRequiredEventemitter3;
23
+ function requireEventemitter3() {
24
+ if (hasRequiredEventemitter3) return eventemitter3.exports;
25
+ hasRequiredEventemitter3 = 1;
26
+ (function(module) {
27
+ var has = Object.prototype.hasOwnProperty, prefix = "~";
28
+ function Events() {
29
+ }
30
+ if (Object.create) {
31
+ Events.prototype = /* @__PURE__ */ Object.create(null);
32
+ if (!new Events().__proto__) prefix = false;
33
+ }
34
+ function EE(fn, context, once) {
35
+ this.fn = fn;
36
+ this.context = context;
37
+ this.once = once || false;
38
+ }
39
+ function addListener(emitter, event, fn, context, once) {
40
+ if (typeof fn !== "function") {
41
+ throw new TypeError("The listener must be a function");
42
+ }
43
+ var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;
44
+ if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
45
+ else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
46
+ else emitter._events[evt] = [emitter._events[evt], listener];
47
+ return emitter;
48
+ }
49
+ function clearEvent(emitter, evt) {
50
+ if (--emitter._eventsCount === 0) emitter._events = new Events();
51
+ else delete emitter._events[evt];
52
+ }
53
+ function EventEmitter2() {
54
+ this._events = new Events();
55
+ this._eventsCount = 0;
56
+ }
57
+ EventEmitter2.prototype.eventNames = function eventNames() {
58
+ var names = [], events, name;
59
+ if (this._eventsCount === 0) return names;
60
+ for (name in events = this._events) {
61
+ if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
62
+ }
63
+ if (Object.getOwnPropertySymbols) {
64
+ return names.concat(Object.getOwnPropertySymbols(events));
65
+ }
66
+ return names;
67
+ };
68
+ EventEmitter2.prototype.listeners = function listeners(event) {
69
+ var evt = prefix ? prefix + event : event, handlers = this._events[evt];
70
+ if (!handlers) return [];
71
+ if (handlers.fn) return [handlers.fn];
72
+ for (var i2 = 0, l2 = handlers.length, ee = new Array(l2); i2 < l2; i2++) {
73
+ ee[i2] = handlers[i2].fn;
74
+ }
75
+ return ee;
76
+ };
77
+ EventEmitter2.prototype.listenerCount = function listenerCount(event) {
78
+ var evt = prefix ? prefix + event : event, listeners = this._events[evt];
79
+ if (!listeners) return 0;
80
+ if (listeners.fn) return 1;
81
+ return listeners.length;
82
+ };
83
+ EventEmitter2.prototype.emit = function emit(event, a1, a22, a3, a4, a52) {
84
+ var evt = prefix ? prefix + event : event;
85
+ if (!this._events[evt]) return false;
86
+ var listeners = this._events[evt], len = arguments.length, args, i2;
87
+ if (listeners.fn) {
88
+ if (listeners.once) this.removeListener(event, listeners.fn, void 0, true);
89
+ switch (len) {
90
+ case 1:
91
+ return listeners.fn.call(listeners.context), true;
92
+ case 2:
93
+ return listeners.fn.call(listeners.context, a1), true;
94
+ case 3:
95
+ return listeners.fn.call(listeners.context, a1, a22), true;
96
+ case 4:
97
+ return listeners.fn.call(listeners.context, a1, a22, a3), true;
98
+ case 5:
99
+ return listeners.fn.call(listeners.context, a1, a22, a3, a4), true;
100
+ case 6:
101
+ return listeners.fn.call(listeners.context, a1, a22, a3, a4, a52), true;
102
+ }
103
+ for (i2 = 1, args = new Array(len - 1); i2 < len; i2++) {
104
+ args[i2 - 1] = arguments[i2];
105
+ }
106
+ listeners.fn.apply(listeners.context, args);
107
+ } else {
108
+ var length = listeners.length, j;
109
+ for (i2 = 0; i2 < length; i2++) {
110
+ if (listeners[i2].once) this.removeListener(event, listeners[i2].fn, void 0, true);
111
+ switch (len) {
112
+ case 1:
113
+ listeners[i2].fn.call(listeners[i2].context);
114
+ break;
115
+ case 2:
116
+ listeners[i2].fn.call(listeners[i2].context, a1);
117
+ break;
118
+ case 3:
119
+ listeners[i2].fn.call(listeners[i2].context, a1, a22);
120
+ break;
121
+ case 4:
122
+ listeners[i2].fn.call(listeners[i2].context, a1, a22, a3);
123
+ break;
124
+ default:
125
+ if (!args) for (j = 1, args = new Array(len - 1); j < len; j++) {
126
+ args[j - 1] = arguments[j];
127
+ }
128
+ listeners[i2].fn.apply(listeners[i2].context, args);
129
+ }
130
+ }
131
+ }
132
+ return true;
133
+ };
134
+ EventEmitter2.prototype.on = function on(event, fn, context) {
135
+ return addListener(this, event, fn, context, false);
136
+ };
137
+ EventEmitter2.prototype.once = function once(event, fn, context) {
138
+ return addListener(this, event, fn, context, true);
139
+ };
140
+ EventEmitter2.prototype.removeListener = function removeListener(event, fn, context, once) {
141
+ var evt = prefix ? prefix + event : event;
142
+ if (!this._events[evt]) return this;
143
+ if (!fn) {
144
+ clearEvent(this, evt);
145
+ return this;
146
+ }
147
+ var listeners = this._events[evt];
148
+ if (listeners.fn) {
149
+ if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
150
+ clearEvent(this, evt);
151
+ }
152
+ } else {
153
+ for (var i2 = 0, events = [], length = listeners.length; i2 < length; i2++) {
154
+ if (listeners[i2].fn !== fn || once && !listeners[i2].once || context && listeners[i2].context !== context) {
155
+ events.push(listeners[i2]);
156
+ }
157
+ }
158
+ if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
159
+ else clearEvent(this, evt);
160
+ }
161
+ return this;
162
+ };
163
+ EventEmitter2.prototype.removeAllListeners = function removeAllListeners(event) {
164
+ var evt;
165
+ if (event) {
166
+ evt = prefix ? prefix + event : event;
167
+ if (this._events[evt]) clearEvent(this, evt);
168
+ } else {
169
+ this._events = new Events();
170
+ this._eventsCount = 0;
171
+ }
172
+ return this;
173
+ };
174
+ EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;
175
+ EventEmitter2.prototype.addListener = EventEmitter2.prototype.on;
176
+ EventEmitter2.prefixed = prefix;
177
+ EventEmitter2.EventEmitter = EventEmitter2;
178
+ {
179
+ module.exports = EventEmitter2;
180
+ }
181
+ })(eventemitter3);
182
+ return eventemitter3.exports;
183
+ }
184
+ var eventemitter3Exports = requireEventemitter3();
185
+ const EventEmitter = /* @__PURE__ */ getDefaultExportFromCjs(eventemitter3Exports);
186
+ const useToolbarItem = (options) => {
187
+ const types = ["button", "options", "separator", "dropdown", "overflow"];
188
+ if (!types.includes(options.type)) {
189
+ throw new Error("Invalid toolbar item type - " + options.type);
190
+ }
191
+ if (options.type === "button" && !options.defaultLabel && !options.icon) {
192
+ throw new Error("Toolbar button item needs either icon or label - " + options.name);
193
+ }
194
+ if (!options.name) {
195
+ throw new Error("Invalid toolbar item name - " + options.name);
196
+ }
197
+ const id = ref(v4());
198
+ const type = options.type;
199
+ const name = ref(options.name);
200
+ const command = options.command;
201
+ const noArgumentCommand = options.noArgumentCommand;
202
+ const icon = ref(options.icon);
203
+ const group = ref(options.group || "center");
204
+ const allowWithoutEditor = ref(options.allowWithoutEditor);
205
+ const attributes = ref(options.attributes || {});
206
+ const initiallyDisabled = options.disabled || false;
207
+ const disabled = ref(options.disabled);
208
+ const active = ref(false);
209
+ const expand = ref(false);
210
+ const style = ref(options.style);
211
+ const isNarrow = ref(options.isNarrow);
212
+ const isWide = ref(options.isWide);
213
+ const minWidth = ref(options.minWidth);
214
+ const suppressActiveHighlight = ref(options.suppressActiveHighlight || false);
215
+ const argument = ref(options.argument);
216
+ const childItem = ref(null);
217
+ const parentItem = ref(null);
218
+ const iconColor = ref(options.iconColor);
219
+ const hasCaret = ref(options.hasCaret);
220
+ const dropdownStyles = ref(options.dropdownStyles);
221
+ const tooltip = ref(options.tooltip);
222
+ const tooltipVisible = ref(options.tooltipVisible);
223
+ const tooltipTimeout = ref(options.tooltipTimeout);
224
+ const defaultLabel = ref(options.defaultLabel);
225
+ const label = ref(options.label);
226
+ const hideLabel = ref(options.hideLabel);
227
+ const inlineTextInputVisible = ref(options.inlineTextInputVisible);
228
+ const hasInlineTextInput = ref(options.hasInlineTextInput);
229
+ const markName = ref(options.markName);
230
+ const labelAttr = ref(options.labelAttr);
231
+ const selectedValue = ref(options.selectedValue);
232
+ const dropdownValueKey = ref(options.dropdownValueKey);
233
+ const inputRef = ref(options.inputRef || null);
234
+ const nestedOptions = ref([]);
235
+ if (options.options) {
236
+ if (!Array.isArray(options.options)) throw new Error("Invalid toolbar item options - " + options.options);
237
+ nestedOptions.value?.push(...options.options);
238
+ }
239
+ const activate = (attrs) => {
240
+ onActivate(attrs);
241
+ if (suppressActiveHighlight.value) return;
242
+ active.value = true;
243
+ };
244
+ const deactivate = () => {
245
+ onDeactivate();
246
+ active.value = false;
247
+ };
248
+ const setDisabled = (state) => {
249
+ disabled.value = state;
250
+ };
251
+ const resetDisabled = () => {
252
+ disabled.value = initiallyDisabled;
253
+ };
254
+ const onActivate = options.onActivate || (() => null);
255
+ const onDeactivate = options.onDeactivate || (() => null);
256
+ const unref2 = () => {
257
+ const flattened = {};
258
+ Object.keys(refs).forEach((key) => {
259
+ if (refs[key].value !== void 0) {
260
+ flattened[key] = refs[key].value;
261
+ }
262
+ });
263
+ return flattened;
264
+ };
265
+ const refs = {
266
+ id,
267
+ name,
268
+ type,
269
+ command,
270
+ noArgumentCommand,
271
+ icon,
272
+ tooltip,
273
+ group,
274
+ attributes,
275
+ disabled,
276
+ active,
277
+ expand,
278
+ nestedOptions,
279
+ style,
280
+ isNarrow,
281
+ isWide,
282
+ minWidth,
283
+ argument,
284
+ parentItem,
285
+ iconColor,
286
+ hasCaret,
287
+ dropdownStyles,
288
+ tooltipVisible,
289
+ tooltipTimeout,
290
+ defaultLabel,
291
+ label,
292
+ hideLabel,
293
+ inlineTextInputVisible,
294
+ hasInlineTextInput,
295
+ markName,
296
+ labelAttr,
297
+ childItem,
298
+ allowWithoutEditor,
299
+ dropdownValueKey,
300
+ selectedValue,
301
+ inputRef
302
+ };
303
+ return {
304
+ ...refs,
305
+ unref: unref2,
306
+ activate,
307
+ deactivate,
308
+ setDisabled,
309
+ resetDisabled,
310
+ onActivate,
311
+ onDeactivate
312
+ };
313
+ };
314
+ const _hoisted_1$c = ["onClick", "innerHTML", "aria-label", "onKeydown"];
315
+ const _sfc_main$d = {
316
+ __name: "AlignmentButtons",
317
+ emits: ["select"],
318
+ setup(__props, { emit: __emit }) {
319
+ const { isHighContrastMode } = useHighContrastMode();
320
+ const emit = __emit;
321
+ const alignmentButtonsRefs = ref([]);
322
+ const alignmentButtons = [
323
+ {
324
+ key: "left",
325
+ ariaLabel: "Align left",
326
+ icon: toolbarIcons.alignLeft
327
+ },
328
+ {
329
+ key: "center",
330
+ ariaLabel: "Align center",
331
+ icon: toolbarIcons.alignCenter
332
+ },
333
+ {
334
+ key: "right",
335
+ ariaLabel: "Align right",
336
+ icon: toolbarIcons.alignRight
337
+ },
338
+ {
339
+ key: "justify",
340
+ ariaLabel: "Justify",
341
+ icon: toolbarIcons.alignJustify
342
+ }
343
+ ];
344
+ const select = (alignment2) => {
345
+ emit("select", alignment2);
346
+ };
347
+ const moveToNextButton = (index) => {
348
+ if (index === alignmentButtonsRefs.value.length - 1) return;
349
+ const nextButton = alignmentButtonsRefs.value[index + 1];
350
+ if (nextButton) {
351
+ nextButton.setAttribute("tabindex", "0");
352
+ nextButton.focus();
353
+ }
354
+ };
355
+ const moveToPreviousButton = (index) => {
356
+ if (index === 0) return;
357
+ const previousButton = alignmentButtonsRefs.value[index - 1];
358
+ if (previousButton) {
359
+ previousButton.setAttribute("tabindex", "0");
360
+ previousButton.focus();
361
+ }
362
+ };
363
+ const handleKeyDown = (e, index) => {
364
+ switch (e.key) {
365
+ case "ArrowLeft":
366
+ moveToPreviousButton(index);
367
+ break;
368
+ case "ArrowRight":
369
+ moveToNextButton(index);
370
+ break;
371
+ case "Enter":
372
+ select(alignmentButtons[index].key);
373
+ break;
374
+ }
375
+ };
376
+ onMounted(() => {
377
+ const firstButton = alignmentButtonsRefs.value[0];
378
+ if (firstButton) {
379
+ firstButton.setAttribute("tabindex", "0");
380
+ firstButton.focus();
381
+ }
382
+ });
383
+ return (_ctx, _cache) => {
384
+ return openBlock(), createElementBlock("div", {
385
+ class: normalizeClass(["alignment-buttons", { "high-contrast": unref(isHighContrastMode) }])
386
+ }, [
387
+ (openBlock(), createElementBlock(Fragment, null, renderList(alignmentButtons, (button, index) => {
388
+ return createElementVNode("div", {
389
+ key: button.key,
390
+ class: "button-icon",
391
+ onClick: ($event) => select(button.key),
392
+ innerHTML: button.icon,
393
+ "data-item": "btn-textAlign-option",
394
+ role: "menuitem",
395
+ "aria-label": button.ariaLabel,
396
+ ref_for: true,
397
+ ref_key: "alignmentButtonsRefs",
398
+ ref: alignmentButtonsRefs,
399
+ onKeydown: withModifiers((event) => handleKeyDown(event, index), ["prevent"])
400
+ }, null, 40, _hoisted_1$c);
401
+ }), 64))
402
+ ], 2);
403
+ };
404
+ }
405
+ };
406
+ const AlignmentButtons = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-d84f57b6"]]);
407
+ const _hoisted_1$b = ["onClick", "onKeydown"];
408
+ const _hoisted_2$9 = { class: "document-mode-column icon-column" };
409
+ const _hoisted_3$7 = ["innerHTML"];
410
+ const _hoisted_4$3 = { class: "document-mode-column text-column" };
411
+ const _hoisted_5$2 = { class: "document-mode-type" };
412
+ const _hoisted_6$1 = { class: "document-mode-description" };
413
+ const _sfc_main$c = {
414
+ __name: "DocumentMode",
415
+ props: {
416
+ options: {
417
+ type: Array
418
+ }
419
+ },
420
+ emits: ["select"],
421
+ setup(__props, { emit: __emit }) {
422
+ const emit = __emit;
423
+ const documentModeRefs = ref([]);
424
+ const { isHighContrastMode } = useHighContrastMode();
425
+ const props = __props;
426
+ const handleClick = (item) => {
427
+ emit("select", item);
428
+ };
429
+ const moveToNextOption = (index) => {
430
+ if (index === documentModeRefs.value.length - 1) return;
431
+ const nextOption = documentModeRefs.value[index + 1];
432
+ if (nextOption) {
433
+ nextOption.setAttribute("tabindex", "0");
434
+ nextOption.focus();
435
+ }
436
+ };
437
+ const moveToPreviousOption = (index) => {
438
+ if (index === 0) return;
439
+ const previousOption = documentModeRefs.value[index - 1];
440
+ if (previousOption) {
441
+ previousOption.setAttribute("tabindex", "0");
442
+ previousOption.focus();
443
+ }
444
+ };
445
+ const handleKeyDown = (e, index) => {
446
+ switch (e.key) {
447
+ case "ArrowDown":
448
+ moveToNextOption(index);
449
+ break;
450
+ case "ArrowUp":
451
+ moveToPreviousOption(index);
452
+ break;
453
+ case "Enter":
454
+ handleClick(props.options[index]);
455
+ break;
456
+ }
457
+ };
458
+ onMounted(() => {
459
+ documentModeRefs.value[0].setAttribute("tabindex", "0");
460
+ documentModeRefs.value[0].focus();
461
+ });
462
+ return (_ctx, _cache) => {
463
+ return openBlock(), createElementBlock("div", {
464
+ class: normalizeClass(["document-mode", { "high-contrast": unref(isHighContrastMode) }])
465
+ }, [
466
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option, index) => {
467
+ return openBlock(), createElementBlock("div", {
468
+ class: normalizeClass(["option-item", { disabled: option.disabled }]),
469
+ onClick: ($event) => handleClick(option),
470
+ "data-item": "btn-documentMode-option",
471
+ role: "menuitem",
472
+ ref_for: true,
473
+ ref_key: "documentModeRefs",
474
+ ref: documentModeRefs,
475
+ onKeydown: withModifiers((event) => handleKeyDown(event, index), ["prevent"])
476
+ }, [
477
+ createElementVNode("div", _hoisted_2$9, [
478
+ createElementVNode("div", {
479
+ class: "icon-column__icon",
480
+ innerHTML: option.icon
481
+ }, null, 8, _hoisted_3$7)
482
+ ]),
483
+ createElementVNode("div", _hoisted_4$3, [
484
+ createElementVNode("div", _hoisted_5$2, toDisplayString(option.label), 1),
485
+ createElementVNode("div", _hoisted_6$1, toDisplayString(option.description), 1)
486
+ ])
487
+ ], 42, _hoisted_1$b);
488
+ }), 256))
489
+ ], 2);
490
+ };
491
+ }
492
+ };
493
+ const DocumentMode = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-8730b752"]]);
494
+ const _hoisted_1$a = {
495
+ key: 0,
496
+ class: "linked-style-buttons"
497
+ };
498
+ const _hoisted_2$8 = ["onClick", "onKeydown"];
499
+ const _sfc_main$b = {
500
+ __name: "LinkedStyle",
501
+ props: {
502
+ editor: {
503
+ type: Object,
504
+ required: true
505
+ },
506
+ selectedOption: {
507
+ type: String
508
+ }
509
+ },
510
+ emits: ["select"],
511
+ setup(__props, { emit: __emit }) {
512
+ const emit = __emit;
513
+ const styleRefs = ref([]);
514
+ const props = __props;
515
+ const select = (style) => {
516
+ emit("select", style);
517
+ };
518
+ const moveToNextStyle = (index) => {
519
+ if (index === styleRefs.value.length - 1) {
520
+ return;
521
+ }
522
+ const nextItem = styleRefs.value[index + 1];
523
+ nextItem.setAttribute("tabindex", "0");
524
+ nextItem.focus();
525
+ };
526
+ const moveToPreviousStyle = (index) => {
527
+ if (index === 0) {
528
+ return;
529
+ }
530
+ const previousItem = styleRefs.value[index - 1];
531
+ previousItem.setAttribute("tabindex", "0");
532
+ previousItem.focus();
533
+ };
534
+ const handleKeyDown = (event, index, style) => {
535
+ switch (event.key) {
536
+ case "ArrowDown":
537
+ moveToNextStyle(index);
538
+ break;
539
+ case "ArrowUp":
540
+ moveToPreviousStyle(index);
541
+ break;
542
+ case "Enter":
543
+ console.log("style", style);
544
+ select(style);
545
+ break;
546
+ }
547
+ };
548
+ onMounted(() => {
549
+ styleRefs.value[0].setAttribute("tabindex", "0");
550
+ styleRefs.value[0].focus();
551
+ });
552
+ return (_ctx, _cache) => {
553
+ return props.editor ? (openBlock(), createElementBlock("div", _hoisted_1$a, [
554
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(getQuickFormatList)(__props.editor), (style, index) => {
555
+ return openBlock(), createElementBlock("div", {
556
+ class: normalizeClass(["style-item", { selected: __props.selectedOption === style.id }]),
557
+ onClick: ($event) => select(style),
558
+ onKeydown: (event) => handleKeyDown(event, index, style),
559
+ ref_for: true,
560
+ ref_key: "styleRefs",
561
+ ref: styleRefs
562
+ }, [
563
+ createElementVNode("div", {
564
+ class: "style-name",
565
+ style: normalizeStyle(unref(generateLinkedStyleString)(style, null, null, false)),
566
+ "data-item": "btn-linkedStyles-option"
567
+ }, toDisplayString(style.definition.attrs.name), 5)
568
+ ], 42, _hoisted_2$8);
569
+ }), 256))
570
+ ])) : createCommentVNode("", true);
571
+ };
572
+ }
573
+ };
574
+ const LinkedStyle = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-698bdb8e"]]);
575
+ const _hoisted_1$9 = {
576
+ key: 0,
577
+ class: "link-title"
578
+ };
579
+ const _hoisted_2$7 = {
580
+ key: 1,
581
+ class: "link-title"
582
+ };
583
+ const _hoisted_3$6 = {
584
+ key: 2,
585
+ class: "link-title"
586
+ };
587
+ const _hoisted_4$2 = {
588
+ key: 3,
589
+ class: "link-input-wrapper"
590
+ };
591
+ const _hoisted_5$1 = { class: "input-row text-input-row" };
592
+ const _hoisted_6 = ["onKeydown"];
593
+ const _hoisted_7 = { class: "input-row url-input-row" };
594
+ const _hoisted_8 = ["innerHTML"];
595
+ const _hoisted_9 = ["onKeydown"];
596
+ const _hoisted_10 = ["innerHTML"];
597
+ const _hoisted_11 = { class: "input-row link-buttons" };
598
+ const _hoisted_12 = ["innerHTML"];
599
+ const _hoisted_13 = {
600
+ key: 4,
601
+ class: "input-row go-to-anchor clickable"
602
+ };
603
+ const _sfc_main$a = {
604
+ __name: "LinkInput",
605
+ props: {
606
+ showInput: {
607
+ type: Boolean,
608
+ default: true
609
+ },
610
+ showLink: {
611
+ type: Boolean,
612
+ default: true
613
+ },
614
+ goToAnchor: {
615
+ type: Function,
616
+ default: () => {
617
+ }
618
+ },
619
+ editor: {
620
+ type: Object,
621
+ required: true
622
+ },
623
+ closePopover: {
624
+ type: Function,
625
+ default: () => {
626
+ }
627
+ }
628
+ },
629
+ setup(__props) {
630
+ const props = __props;
631
+ const { isHighContrastMode } = useHighContrastMode();
632
+ const urlError = ref(false);
633
+ const getSelectedText = () => {
634
+ if (!props.editor || !props.editor.state) return "";
635
+ const { state } = props.editor;
636
+ const { selection } = state;
637
+ const linkMark = state.schema.marks.link;
638
+ if (selection.empty) {
639
+ const range = getMarkRange(selection.$from, linkMark);
640
+ return range ? state.doc.textBetween(range.from, range.to, " ") : "";
641
+ }
642
+ const rangeFrom = getMarkRange(selection.$from, linkMark);
643
+ const rangeTo = getMarkRange(selection.$to, linkMark);
644
+ if (rangeFrom || rangeTo) {
645
+ const linkRange = rangeFrom || rangeTo;
646
+ return state.doc.textBetween(linkRange.from, linkRange.to, " ");
647
+ }
648
+ return state.doc.textBetween(selection.from, selection.to, " ");
649
+ };
650
+ const getLinkHrefAtSelection = () => {
651
+ if (!props.editor || !props.editor.state) return "";
652
+ const { state } = props.editor;
653
+ const { schema, selection } = state;
654
+ const linkMark = schema.marks.link;
655
+ if (!linkMark) return "";
656
+ let href = "";
657
+ const { $from, empty } = selection;
658
+ if (empty) {
659
+ const marks = state.storedMarks || $from.marks();
660
+ const link = marks.find((mark) => mark.type === linkMark);
661
+ if (link) href = link.attrs.href;
662
+ } else {
663
+ state.doc.nodesBetween(selection.from, selection.to, (node) => {
664
+ if (node.marks) {
665
+ const link = node.marks.find((mark) => mark.type === linkMark);
666
+ if (link) href = link.attrs.href;
667
+ }
668
+ });
669
+ }
670
+ return href || "";
671
+ };
672
+ const text = ref("");
673
+ const rawUrl = ref("");
674
+ const isAnchor = ref(false);
675
+ const url = computed(() => {
676
+ if (!rawUrl.value) return "";
677
+ if (!rawUrl.value.startsWith("http") && !rawUrl.value.startsWith("#")) return "http://" + rawUrl.value;
678
+ return rawUrl.value;
679
+ });
680
+ const validUrl = computed(() => {
681
+ if (url.value.startsWith("#")) return true;
682
+ const urlSplit = url.value.split(".").filter(Boolean);
683
+ return url.value.includes(".") && urlSplit.length > 1;
684
+ });
685
+ const isEditing = computed(() => !isAnchor.value && !!getLinkHrefAtSelection());
686
+ const isDisabled = computed(() => !validUrl.value);
687
+ const openLink = () => {
688
+ window.open(url.value, "_blank");
689
+ };
690
+ const updateFromEditor = () => {
691
+ text.value = getSelectedText();
692
+ rawUrl.value = getLinkHrefAtSelection();
693
+ };
694
+ watch(
695
+ () => props.editor?.state?.selection,
696
+ () => {
697
+ updateFromEditor();
698
+ },
699
+ { immediate: true }
700
+ );
701
+ const focusInput = () => {
702
+ const input = document.querySelector(".link-input-ctn input");
703
+ if (!input) return;
704
+ input.focus();
705
+ };
706
+ onMounted(() => {
707
+ updateFromEditor();
708
+ isAnchor.value = rawUrl.value.startsWith("#");
709
+ if (props.showInput) focusInput();
710
+ });
711
+ const handleSubmit = () => {
712
+ const editor = props.editor;
713
+ if (!editor) return;
714
+ if (!rawUrl.value) {
715
+ if (editor.commands?.unsetLink) editor.commands.unsetLink();
716
+ props.closePopover();
717
+ return;
718
+ }
719
+ if (!validUrl.value) {
720
+ urlError.value = true;
721
+ return;
722
+ }
723
+ const finalText = text.value || url.value;
724
+ if (editor.commands?.toggleLink) {
725
+ editor.commands.toggleLink({ href: url.value, text: finalText });
726
+ }
727
+ const endPos = editor.view.state.selection.$to.pos;
728
+ editor.view.dispatch(editor.view.state.tr.setSelection(new TextSelection$1(editor.view.state.doc.resolve(endPos))));
729
+ setTimeout(() => editor.view.focus(), 100);
730
+ props.closePopover();
731
+ };
732
+ const handleRemove = () => {
733
+ if (props.editor && props.editor.commands && props.editor.commands.unsetLink) {
734
+ props.editor.commands.unsetLink();
735
+ props.closePopover();
736
+ }
737
+ };
738
+ return (_ctx, _cache) => {
739
+ return openBlock(), createElementBlock("div", {
740
+ class: normalizeClass(["link-input-ctn", { "high-contrast": unref(isHighContrastMode) }])
741
+ }, [
742
+ isAnchor.value ? (openBlock(), createElementBlock("div", _hoisted_1$9, "Page anchor")) : isEditing.value ? (openBlock(), createElementBlock("div", _hoisted_2$7, "Edit link")) : (openBlock(), createElementBlock("div", _hoisted_3$6, "Add link")),
743
+ __props.showInput && !isAnchor.value ? (openBlock(), createElementBlock("div", _hoisted_4$2, [
744
+ createElementVNode("div", _hoisted_5$1, [
745
+ _cache[4] || (_cache[4] = createElementVNode("div", { class: "input-icon text-input-icon" }, "T", -1)),
746
+ withDirectives(createElementVNode("input", {
747
+ type: "text",
748
+ name: "text",
749
+ placeholder: "Text",
750
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => text.value = $event),
751
+ onKeydown: withKeys(withModifiers(handleSubmit, ["stop", "prevent"]), ["enter"])
752
+ }, null, 40, _hoisted_6), [
753
+ [vModelText, text.value]
754
+ ])
755
+ ]),
756
+ createElementVNode("div", _hoisted_7, [
757
+ createElementVNode("div", {
758
+ class: "input-icon",
759
+ innerHTML: unref(toolbarIcons).linkInput
760
+ }, null, 8, _hoisted_8),
761
+ withDirectives(createElementVNode("input", {
762
+ type: "text",
763
+ name: "link",
764
+ placeholder: "Type or paste a link",
765
+ class: normalizeClass({ error: urlError.value }),
766
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => rawUrl.value = $event),
767
+ onKeydown: [
768
+ withKeys(withModifiers(handleSubmit, ["stop", "prevent"]), ["enter"]),
769
+ _cache[2] || (_cache[2] = ($event) => urlError.value = false)
770
+ ]
771
+ }, null, 42, _hoisted_9), [
772
+ [vModelText, rawUrl.value]
773
+ ]),
774
+ createElementVNode("div", {
775
+ class: normalizeClass(["open-link-icon", { disabled: !validUrl.value }]),
776
+ innerHTML: unref(toolbarIcons).openLink,
777
+ onClick: openLink,
778
+ "data-item": "btn-link-open"
779
+ }, null, 10, _hoisted_10)
780
+ ]),
781
+ createElementVNode("div", _hoisted_11, [
782
+ isEditing.value ? (openBlock(), createElementBlock("button", {
783
+ key: 0,
784
+ class: "remove-btn",
785
+ onClick: handleRemove,
786
+ "data-item": "btn-link-remove"
787
+ }, [
788
+ createElementVNode("div", {
789
+ class: "remove-btn__icon",
790
+ innerHTML: unref(toolbarIcons).removeLink
791
+ }, null, 8, _hoisted_12),
792
+ _cache[5] || (_cache[5] = createTextVNode(" Remove ", -1))
793
+ ])) : createCommentVNode("", true),
794
+ createElementVNode("button", {
795
+ class: normalizeClass(["submit-btn", { "disable-btn": isDisabled.value }]),
796
+ onClick: handleSubmit,
797
+ "data-item": "btn-link-apply"
798
+ }, " Apply ", 2)
799
+ ])
800
+ ])) : isAnchor.value ? (openBlock(), createElementBlock("div", _hoisted_13, [
801
+ createElementVNode("a", {
802
+ onClick: _cache[3] || (_cache[3] = withModifiers((...args) => __props.goToAnchor && __props.goToAnchor(...args), ["stop", "prevent"]))
803
+ }, "Go to " + toDisplayString(rawUrl.value.startsWith("#_") ? rawUrl.value.substring(2) : rawUrl.value), 1)
804
+ ])) : createCommentVNode("", true)
805
+ ], 2);
806
+ };
807
+ }
808
+ };
809
+ const LinkInput = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-ba50627b"]]);
810
+ const _hoisted_1$8 = ["aria-label", "onClick", "onKeydown"];
811
+ const _hoisted_2$6 = ["innerHTML"];
812
+ const _hoisted_3$5 = ["innerHTML"];
813
+ const ROW_SIZE$1 = 7;
814
+ const _sfc_main$9 = {
815
+ __name: "IconGridRow",
816
+ props: {
817
+ icons: {
818
+ type: Array,
819
+ required: true
820
+ },
821
+ activeColor: {
822
+ type: Object,
823
+ required: false
824
+ }
825
+ },
826
+ emits: ["select", "clickoutside"],
827
+ setup(__props, { emit: __emit }) {
828
+ const emit = __emit;
829
+ const props = __props;
830
+ const isActive = computed(() => (option) => {
831
+ if (!props.activeColor.value) return false;
832
+ return props.activeColor.value.toUpperCase() === option.value;
833
+ });
834
+ const getCheckStyle = (color, optionIndex) => {
835
+ const lightColors = ["#FFFFFF", "#FAFF09"];
836
+ if (optionIndex === 5 || lightColors.includes(color)) return { color: "#000" };
837
+ return { color: "#FFF" };
838
+ };
839
+ const handleClick = (option) => {
840
+ emit("select", option.value);
841
+ };
842
+ const rowRefs = ref([]);
843
+ const iconRefs = ref([]);
844
+ onMounted(() => {
845
+ const isMatrix = props.icons.every((row) => Array.isArray(row));
846
+ if (!isMatrix) throw new Error("icon props must be 2d array");
847
+ const firstIcon = iconRefs.value[0];
848
+ if (firstIcon) {
849
+ firstIcon.setAttribute("tabindex", "0");
850
+ firstIcon.focus();
851
+ }
852
+ });
853
+ const moveToNextIcon = (rowIndex, optionIndex) => {
854
+ const iconIndex = ROW_SIZE$1 * rowIndex + optionIndex + 1;
855
+ const nextIcon = iconRefs.value[iconIndex];
856
+ if (nextIcon) {
857
+ nextIcon.setAttribute("tabindex", "0");
858
+ nextIcon.focus();
859
+ }
860
+ };
861
+ const moveToPreviousIcon = (rowIndex, optionIndex) => {
862
+ const iconIndex = ROW_SIZE$1 * rowIndex + optionIndex - 1;
863
+ const previousIcon = iconRefs.value[iconIndex];
864
+ if (previousIcon) {
865
+ previousIcon.setAttribute("tabindex", "0");
866
+ previousIcon.focus();
867
+ }
868
+ };
869
+ const moveToNextRow = (rowIndex, optionIndex) => {
870
+ const iconIndex = optionIndex + ROW_SIZE$1 * (rowIndex + 1);
871
+ const nextIcon = iconRefs.value[iconIndex];
872
+ if (nextIcon) {
873
+ nextIcon.setAttribute("tabindex", "0");
874
+ nextIcon.focus();
875
+ }
876
+ };
877
+ const moveToPreviousRow = (rowIndex, optionIndex) => {
878
+ const iconIndex = optionIndex + ROW_SIZE$1 * (rowIndex - 1);
879
+ const previousIcon = iconRefs.value[iconIndex];
880
+ if (previousIcon) {
881
+ previousIcon.setAttribute("tabindex", "0");
882
+ previousIcon.focus();
883
+ }
884
+ };
885
+ const handleKeyDown = (event, rowIndex, optionIndex, option) => {
886
+ switch (event.key) {
887
+ case "ArrowRight":
888
+ moveToNextIcon(rowIndex, optionIndex);
889
+ break;
890
+ case "ArrowLeft":
891
+ moveToPreviousIcon(rowIndex, optionIndex);
892
+ break;
893
+ case "ArrowDown":
894
+ moveToNextRow(rowIndex, optionIndex);
895
+ break;
896
+ case "ArrowUp":
897
+ moveToPreviousRow(rowIndex, optionIndex);
898
+ break;
899
+ case "Enter":
900
+ handleClick(option);
901
+ break;
902
+ case "Escape":
903
+ emit("clickoutside");
904
+ break;
905
+ }
906
+ };
907
+ return (_ctx, _cache) => {
908
+ return openBlock(true), createElementBlock(Fragment, null, renderList(__props.icons, (row, rowIndex) => {
909
+ return openBlock(), createElementBlock("div", {
910
+ class: "option-row",
911
+ key: rowIndex,
912
+ role: "group",
913
+ ref_for: true,
914
+ ref_key: "rowRefs",
915
+ ref: rowRefs
916
+ }, [
917
+ (openBlock(true), createElementBlock(Fragment, null, renderList(row, (option, optionIndex) => {
918
+ return openBlock(), createElementBlock("div", {
919
+ class: "option",
920
+ key: optionIndex,
921
+ "aria-label": option.label,
922
+ role: "menuitem",
923
+ ref_for: true,
924
+ ref_key: "iconRefs",
925
+ ref: iconRefs,
926
+ onClick: withModifiers(($event) => handleClick(option), ["stop", "prevent"]),
927
+ onKeydown: withModifiers((event) => handleKeyDown(event, rowIndex, optionIndex, option), ["prevent"])
928
+ }, [
929
+ createElementVNode("div", {
930
+ class: "option__icon",
931
+ innerHTML: option.icon,
932
+ style: normalizeStyle(option.style)
933
+ }, null, 12, _hoisted_2$6),
934
+ isActive.value(option) ? (openBlock(), createElementBlock("div", {
935
+ key: 0,
936
+ class: "option__check",
937
+ innerHTML: unref(toolbarIcons).colorOptionCheck,
938
+ style: normalizeStyle(getCheckStyle(option.value, optionIndex))
939
+ }, null, 12, _hoisted_3$5)) : createCommentVNode("", true)
940
+ ], 40, _hoisted_1$8);
941
+ }), 128))
942
+ ]);
943
+ }), 128);
944
+ };
945
+ }
946
+ };
947
+ const IconGridRow = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-0f479b6c"]]);
948
+ 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';
949
+ const _hoisted_1$7 = { class: "options-grid-wrap" };
950
+ const _hoisted_2$5 = ["innerHTML"];
951
+ const _hoisted_3$4 = { class: "option-grid-ctn" };
952
+ const _sfc_main$8 = {
953
+ __name: "IconGrid",
954
+ props: {
955
+ icons: {
956
+ type: Array,
957
+ required: true
958
+ },
959
+ customIcons: {
960
+ type: Array,
961
+ required: false
962
+ },
963
+ activeColor: {
964
+ type: Object,
965
+ required: false
966
+ },
967
+ hasNoneIcon: {
968
+ type: Boolean,
969
+ required: false
970
+ }
971
+ },
972
+ emits: ["select", "clickoutside"],
973
+ setup(__props, { emit: __emit }) {
974
+ const emit = __emit;
975
+ const handleSelect = (option) => {
976
+ emit("select", option);
977
+ };
978
+ return (_ctx, _cache) => {
979
+ return openBlock(), createElementBlock("div", _hoisted_1$7, [
980
+ __props.hasNoneIcon ? (openBlock(), createElementBlock("div", {
981
+ key: 0,
982
+ class: "none-option",
983
+ role: "menuitem",
984
+ "aria-label": "Clear color selection",
985
+ onClick: _cache[0] || (_cache[0] = ($event) => handleSelect("none"))
986
+ }, [
987
+ createElementVNode("span", {
988
+ innerHTML: unref(DropIcon),
989
+ class: "none-icon"
990
+ }, null, 8, _hoisted_2$5),
991
+ _cache[1] || (_cache[1] = createTextVNode(" None ", -1))
992
+ ])) : createCommentVNode("", true),
993
+ createElementVNode("div", _hoisted_3$4, [
994
+ createVNode(IconGridRow, {
995
+ icons: __props.icons,
996
+ "active-color": __props.activeColor,
997
+ onSelect: handleSelect
998
+ }, null, 8, ["icons", "active-color"]),
999
+ __props.customIcons.flat().length ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
1000
+ _cache[2] || (_cache[2] = createElementVNode("span", { class: "option-grid-ctn__subtitle" }, "Custom colors", -1)),
1001
+ createVNode(IconGridRow, {
1002
+ icons: __props.customIcons,
1003
+ "active-color": __props.activeColor,
1004
+ onSelect: handleSelect
1005
+ }, null, 8, ["icons", "active-color"])
1006
+ ], 64)) : createCommentVNode("", true)
1007
+ ])
1008
+ ]);
1009
+ };
1010
+ }
1011
+ };
1012
+ const IconGrid = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-4c0091c8"]]);
1013
+ const closeDropdown$1 = (dropdown) => {
1014
+ dropdown.expand.value = false;
1015
+ };
1016
+ const makeColorOption = (color, label = null) => {
1017
+ return {
1018
+ label,
1019
+ icon: toolbarIcons.colorOption,
1020
+ value: color,
1021
+ style: {
1022
+ color,
1023
+ boxShadow: "0 0 5px 1px rgba(0, 0, 0, 0.1)",
1024
+ borderRadius: "50%"
1025
+ }
1026
+ };
1027
+ };
1028
+ const renderColorOptions = (superToolbar, button, customIcons = [], hasNoneIcon = false) => {
1029
+ const handleSelect = (e) => {
1030
+ button.iconColor.value = e;
1031
+ superToolbar.emitCommand({ item: button, argument: e });
1032
+ closeDropdown$1(button);
1033
+ };
1034
+ return h("div", {}, [
1035
+ h(IconGrid, {
1036
+ icons,
1037
+ customIcons,
1038
+ activeColor: button.iconColor,
1039
+ hasNoneIcon,
1040
+ onSelect: handleSelect
1041
+ })
1042
+ ]);
1043
+ };
1044
+ const icons = [
1045
+ [
1046
+ makeColorOption("#111111", "black"),
1047
+ makeColorOption("#333333", "dark gray"),
1048
+ makeColorOption("#5C5C5C", "medium gray"),
1049
+ makeColorOption("#858585", "light gray"),
1050
+ makeColorOption("#ADADAD", "very light gray"),
1051
+ makeColorOption("#D6D6D6", "transparent gray"),
1052
+ makeColorOption("#FFFFFF", "white")
1053
+ ],
1054
+ [
1055
+ makeColorOption("#860028", "dark red"),
1056
+ makeColorOption("#D2003F", "red"),
1057
+ makeColorOption("#DB3365", "coral red"),
1058
+ makeColorOption("#E4668C", "light red"),
1059
+ makeColorOption("#ED99B2", "pale pink"),
1060
+ makeColorOption("#F6CCD9", "transparent pink"),
1061
+ makeColorOption("#FF004D", "bright pink")
1062
+ ],
1063
+ [
1064
+ makeColorOption("#83015E", "dark purple"),
1065
+ makeColorOption("#CD0194", "purple"),
1066
+ makeColorOption("#D734A9", "orchid"),
1067
+ makeColorOption("#E167BF", "light purple"),
1068
+ makeColorOption("#EB99D4", "lavender"),
1069
+ makeColorOption("#F5CCEA", "transparent pink"),
1070
+ makeColorOption("#FF00A8", "neon pink")
1071
+ ],
1072
+ [
1073
+ makeColorOption("#8E220A", "maroon"),
1074
+ makeColorOption("#DD340F", "red-orange"),
1075
+ makeColorOption("#E45C3F", "burnt orange"),
1076
+ makeColorOption("#EB856F", "peach"),
1077
+ makeColorOption("#F1AE9F", "pale peach"),
1078
+ makeColorOption("#F8D6CF", "transparent peach"),
1079
+ makeColorOption("#FF7A00", "orange")
1080
+ ],
1081
+ [
1082
+ makeColorOption("#947D02", "olive"),
1083
+ makeColorOption("#E7C302", "mustard yellow"),
1084
+ makeColorOption("#ECCF35", "yellow"),
1085
+ makeColorOption("#F1DB67", "light yellow"),
1086
+ makeColorOption("#F5E79A", "very pale yellow"),
1087
+ makeColorOption("#FAF3CC", "transparent yellow"),
1088
+ makeColorOption("#FAFF09", "neon yellow")
1089
+ ],
1090
+ [
1091
+ makeColorOption("#055432", "forest green"),
1092
+ makeColorOption("#07834F", "green"),
1093
+ makeColorOption("#399C72", "medium green"),
1094
+ makeColorOption("#6AB595", "light green"),
1095
+ makeColorOption("#9CCDB9", "mint"),
1096
+ makeColorOption("#CDE6DC", "transparent mint"),
1097
+ makeColorOption("#05F38F", "bright teal")
1098
+ ],
1099
+ [
1100
+ makeColorOption("#063E7E", "navy blue"),
1101
+ makeColorOption("#0A60C5", "blue"),
1102
+ makeColorOption("#3B80D1", "sky blue"),
1103
+ makeColorOption("#6CA0DC", "cornflower blue"),
1104
+ makeColorOption("#9DBFE8", "light blue"),
1105
+ makeColorOption("#CEDFF3", "very light blue"),
1106
+ makeColorOption("#21c8ce", "cyan")
1107
+ ],
1108
+ [
1109
+ makeColorOption("#3E027A", "deep purple"),
1110
+ makeColorOption("#6103BF", "indigo"),
1111
+ makeColorOption("#8136CC", "violet"),
1112
+ makeColorOption("#A068D9", "lavender pink"),
1113
+ makeColorOption("#C09AE6", "light lilac"),
1114
+ makeColorOption("#DFCDF2", "transparent lilac"),
1115
+ makeColorOption("#A91DFF", "neon purple")
1116
+ ]
1117
+ ];
1118
+ const getAvailableColorOptions = () => {
1119
+ return icons.flat().map((item) => item.value);
1120
+ };
1121
+ const _hoisted_1$6 = ["data-cols", "data-rows", "onKeydown", "onClick"];
1122
+ const _hoisted_2$4 = ["aria-valuetext"];
1123
+ const ROW_SIZE = 5;
1124
+ const _sfc_main$7 = {
1125
+ __name: "TableGrid",
1126
+ emits: ["select", "clickoutside"],
1127
+ setup(__props, { emit: __emit }) {
1128
+ const emit = __emit;
1129
+ const selectedRows = ref(0);
1130
+ const selectedCols = ref(0);
1131
+ const { isHighContrastMode } = useHighContrastMode();
1132
+ const tableGridItems = ref([]);
1133
+ const onTableGridMouseOver = (event) => {
1134
+ let target = event.target;
1135
+ let isGrid = !!target.dataset.grid;
1136
+ if (isGrid) {
1137
+ return;
1138
+ }
1139
+ let grid = target.parentElement;
1140
+ let allItems = [...grid.querySelectorAll("[data-item]")];
1141
+ let cols = parseInt(target.dataset.cols, 10);
1142
+ let rows = parseInt(target.dataset.rows, 10);
1143
+ selectGridItems(allItems, cols, rows);
1144
+ };
1145
+ const selectGridItems = (allItems, cols, rows) => {
1146
+ selectedCols.value = cols;
1147
+ selectedRows.value = rows;
1148
+ for (let i2 = 0; i2 < allItems.length; i2++) {
1149
+ let item = allItems[i2];
1150
+ let itemsCols = parseInt(item.dataset.cols, 10);
1151
+ let itemsRows = parseInt(item.dataset.rows, 10);
1152
+ if (itemsCols <= cols && itemsRows <= rows) {
1153
+ item.classList.add("selected");
1154
+ } else {
1155
+ item.classList.remove("selected");
1156
+ }
1157
+ }
1158
+ };
1159
+ const handleClick = ({ cols, rows }) => {
1160
+ emit("select", { cols, rows });
1161
+ };
1162
+ const handleKeyDown = (event, cols, rows) => {
1163
+ let normalizedCols = cols - 1;
1164
+ let normalizedRows = rows - 1;
1165
+ switch (event.key) {
1166
+ case "ArrowRight": {
1167
+ if (normalizedCols >= 4) {
1168
+ return;
1169
+ }
1170
+ const currentRow = normalizedRows * ROW_SIZE;
1171
+ tableGridItems.value[currentRow + normalizedCols + 1].setAttribute("tabindex", "0");
1172
+ tableGridItems.value[currentRow + normalizedCols + 1].focus();
1173
+ selectGridItems(tableGridItems.value, cols + 1, rows);
1174
+ break;
1175
+ }
1176
+ case "ArrowLeft": {
1177
+ if (normalizedCols <= 0) {
1178
+ return;
1179
+ }
1180
+ const currentRow = normalizedRows * ROW_SIZE;
1181
+ tableGridItems.value[currentRow + normalizedCols - 1].setAttribute("tabindex", "0");
1182
+ tableGridItems.value[currentRow + normalizedCols - 1].focus();
1183
+ selectGridItems(tableGridItems.value, cols - 1, rows);
1184
+ break;
1185
+ }
1186
+ case "ArrowDown": {
1187
+ if (normalizedRows >= 4) {
1188
+ return;
1189
+ }
1190
+ const nextRow = (normalizedRows + 1) * ROW_SIZE;
1191
+ tableGridItems.value[nextRow + normalizedCols].setAttribute("tabindex", "0");
1192
+ tableGridItems.value[nextRow + normalizedCols].focus();
1193
+ selectGridItems(tableGridItems.value, cols, rows + 1);
1194
+ break;
1195
+ }
1196
+ case "ArrowUp": {
1197
+ if (normalizedRows <= 0) {
1198
+ return;
1199
+ }
1200
+ const previousRow = (normalizedRows - 1) * ROW_SIZE;
1201
+ tableGridItems.value[previousRow + normalizedCols].setAttribute("tabindex", "0");
1202
+ tableGridItems.value[previousRow + normalizedCols].focus();
1203
+ selectGridItems(tableGridItems.value, cols, rows - 1);
1204
+ break;
1205
+ }
1206
+ case "Enter": {
1207
+ handleClick({ cols, rows });
1208
+ break;
1209
+ }
1210
+ }
1211
+ };
1212
+ onMounted(() => {
1213
+ tableGridItems.value[0].setAttribute("tabindex", "0");
1214
+ tableGridItems.value[0].focus();
1215
+ selectGridItems(tableGridItems.value, 1, 1);
1216
+ });
1217
+ return (_ctx, _cache) => {
1218
+ return openBlock(), createElementBlock("div", {
1219
+ class: normalizeClass(["toolbar-table-grid-wrapper", { "high-contrast": unref(isHighContrastMode) }])
1220
+ }, [
1221
+ createElementVNode("div", {
1222
+ class: "toolbar-table-grid",
1223
+ onMouseover: onTableGridMouseOver,
1224
+ "data-grid": "true"
1225
+ }, [
1226
+ (openBlock(), createElementBlock(Fragment, null, renderList(5, (i2) => {
1227
+ return openBlock(), createElementBlock(Fragment, { key: i2 }, [
1228
+ (openBlock(), createElementBlock(Fragment, null, renderList(5, (n2) => {
1229
+ return createElementVNode("div", {
1230
+ class: "toolbar-table-grid__item",
1231
+ key: `${i2}_${n2}`,
1232
+ "data-cols": n2,
1233
+ "data-rows": i2,
1234
+ "data-item": "true",
1235
+ ref_for: true,
1236
+ ref_key: "tableGridItems",
1237
+ ref: tableGridItems,
1238
+ onKeydown: withModifiers((event) => handleKeyDown(event, n2, i2), ["prevent"]),
1239
+ onClick: withModifiers(($event) => handleClick({ cols: n2, rows: i2 }), ["stop", "prevent"])
1240
+ }, null, 40, _hoisted_1$6);
1241
+ }), 64))
1242
+ ], 64);
1243
+ }), 64))
1244
+ ], 32),
1245
+ createElementVNode("div", {
1246
+ class: "toolbar-table-grid-value",
1247
+ "aria-valuetext": `${selectedRows.value} x ${selectedCols.value}`
1248
+ }, toDisplayString(selectedRows.value) + " x " + toDisplayString(selectedCols.value), 9, _hoisted_2$4)
1249
+ ], 2);
1250
+ };
1251
+ }
1252
+ };
1253
+ const TableGrid = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-92e8d5fb"]]);
1254
+ const _hoisted_1$5 = { class: "toolbar-table-actions" };
1255
+ const _hoisted_2$3 = ["onClick", "data-item", "ariaLabel"];
1256
+ const _hoisted_3$3 = { class: "toolbar-table-actions__icon" };
1257
+ const _hoisted_4$1 = ["innerHTML"];
1258
+ const _hoisted_5 = { class: "toolbar-table-actions__label" };
1259
+ const _sfc_main$6 = {
1260
+ __name: "TableActions",
1261
+ props: {
1262
+ options: {
1263
+ type: Array
1264
+ }
1265
+ },
1266
+ emits: ["select"],
1267
+ setup(__props, { emit: __emit }) {
1268
+ const emit = __emit;
1269
+ const handleClick = (item) => {
1270
+ emit("select", { command: item.command });
1271
+ };
1272
+ return (_ctx, _cache) => {
1273
+ return openBlock(), createElementBlock("div", _hoisted_1$5, [
1274
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
1275
+ return openBlock(), createElementBlock("div", {
1276
+ class: normalizeClass(["toolbar-table-actions__item", { "toolbar-table-actions__item--border": option.bottomBorder }]),
1277
+ onClick: ($event) => handleClick(option),
1278
+ "data-item": option.props?.["data-item"] || "",
1279
+ ariaLabel: option.props?.ariaLabel,
1280
+ role: "menuitem"
1281
+ }, [
1282
+ createElementVNode("div", _hoisted_3$3, [
1283
+ createElementVNode("div", {
1284
+ class: "toolbar-table-actions__icon-wrapper",
1285
+ innerHTML: option.icon
1286
+ }, null, 8, _hoisted_4$1)
1287
+ ]),
1288
+ createElementVNode("div", _hoisted_5, toDisplayString(option.label), 1)
1289
+ ], 10, _hoisted_2$3);
1290
+ }), 256))
1291
+ ]);
1292
+ };
1293
+ }
1294
+ };
1295
+ const TableActions = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-990b9a25"]]);
1296
+ function getScrollableParent(element) {
1297
+ let currentElement = element;
1298
+ while (currentElement) {
1299
+ const overflowY = window.getComputedStyle(currentElement).overflowY;
1300
+ if (/(auto|scroll)/.test(overflowY) && currentElement.scrollHeight > currentElement.clientHeight) {
1301
+ return currentElement;
1302
+ }
1303
+ currentElement = currentElement.parentElement;
1304
+ }
1305
+ return document.scrollingElement || document.documentElement;
1306
+ }
1307
+ function scrollToElement(targetElement, options = { behavior: "smooth", block: "start" }) {
1308
+ if (!targetElement) return;
1309
+ const container = getScrollableParent(targetElement);
1310
+ const containerRect = container.getBoundingClientRect();
1311
+ const targetRect = targetElement.getBoundingClientRect();
1312
+ const offsetTop = targetRect.top - containerRect.top + container.scrollTop;
1313
+ container.scrollTo({
1314
+ top: options.block === "start" ? offsetTop : offsetTop - container.clientHeight + targetElement.offsetHeight,
1315
+ behavior: options.behavior
1316
+ });
1317
+ }
1318
+ 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';
1319
+ const _hoisted_1$4 = { class: "search-input-ctn" };
1320
+ const _hoisted_2$2 = { class: "row" };
1321
+ const _hoisted_3$2 = ["onKeydown"];
1322
+ const _sfc_main$5 = {
1323
+ __name: "SearchInput",
1324
+ props: {
1325
+ searchRef: {
1326
+ type: Object
1327
+ }
1328
+ },
1329
+ emits: ["submit"],
1330
+ setup(__props, { emit: __emit }) {
1331
+ const searchValue = ref("");
1332
+ const emit = __emit;
1333
+ const handleSubmit = () => {
1334
+ emit("submit", { value: searchValue.value });
1335
+ };
1336
+ return (_ctx, _cache) => {
1337
+ return openBlock(), createElementBlock("div", _hoisted_1$4, [
1338
+ createElementVNode("div", _hoisted_2$2, [
1339
+ withDirectives(createElementVNode("input", {
1340
+ ref: __props.searchRef,
1341
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchValue.value = $event),
1342
+ class: "search-input",
1343
+ type: "text",
1344
+ name: "search",
1345
+ placeholder: "Type search string",
1346
+ onKeydown: withKeys(withModifiers(handleSubmit, ["stop", "prevent"]), ["enter"])
1347
+ }, null, 40, _hoisted_3$2), [
1348
+ [vModelText, searchValue.value]
1349
+ ])
1350
+ ]),
1351
+ createElementVNode("div", { class: "row submit" }, [
1352
+ createElementVNode("button", {
1353
+ class: "submit-btn",
1354
+ onClick: handleSubmit
1355
+ }, "Apply")
1356
+ ])
1357
+ ]);
1358
+ };
1359
+ }
1360
+ };
1361
+ const SearchInput = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-957cbcf2"]]);
1362
+ const TOOLBAR_FONTS = [
1363
+ {
1364
+ label: "Georgia",
1365
+ key: "Georgia, serif",
1366
+ fontWeight: 400,
1367
+ props: {
1368
+ style: { fontFamily: "Georgia, serif" },
1369
+ "data-item": "btn-fontFamily-option"
1370
+ }
1371
+ },
1372
+ {
1373
+ label: "Arial",
1374
+ key: "Arial, sans-serif",
1375
+ fontWeight: 400,
1376
+ props: {
1377
+ style: { fontFamily: "Arial, sans-serif" },
1378
+ "data-item": "btn-fontFamily-option"
1379
+ }
1380
+ },
1381
+ {
1382
+ label: "Courier New",
1383
+ key: "Courier New, monospace",
1384
+ fontWeight: 400,
1385
+ props: {
1386
+ style: { fontFamily: "Courier New, monospace" },
1387
+ "data-item": "btn-fontFamily-option"
1388
+ }
1389
+ },
1390
+ {
1391
+ label: "Times New Roman",
1392
+ key: "Times New Roman, serif",
1393
+ fontWeight: 400,
1394
+ props: {
1395
+ style: { fontFamily: "Times New Roman, serif" },
1396
+ "data-item": "btn-fontFamily-option"
1397
+ }
1398
+ }
1399
+ ];
1400
+ const TOOLBAR_FONT_SIZES = [
1401
+ { label: "8", key: "8pt", props: { "data-item": "btn-fontSize-option" } },
1402
+ { label: "9", key: "9pt", props: { "data-item": "btn-fontSize-option" } },
1403
+ { label: "10", key: "10pt", props: { "data-item": "btn-fontSize-option" } },
1404
+ { label: "11", key: "11pt", props: { "data-item": "btn-fontSize-option" } },
1405
+ { label: "12", key: "12pt", props: { "data-item": "btn-fontSize-option" } },
1406
+ { label: "14", key: "14pt", props: { "data-item": "btn-fontSize-option" } },
1407
+ { label: "18", key: "18pt", props: { "data-item": "btn-fontSize-option" } },
1408
+ { label: "24", key: "24pt", props: { "data-item": "btn-fontSize-option" } },
1409
+ { label: "30", key: "30pt", props: { "data-item": "btn-fontSize-option" } },
1410
+ { label: "36", key: "36pt", props: { "data-item": "btn-fontSize-option" } },
1411
+ { label: "48", key: "48pt", props: { "data-item": "btn-fontSize-option" } },
1412
+ { label: "60", key: "60pt", props: { "data-item": "btn-fontSize-option" } },
1413
+ { label: "72", key: "72pt", props: { "data-item": "btn-fontSize-option" } },
1414
+ { label: "96", key: "96pt", props: { "data-item": "btn-fontSize-option" } }
1415
+ ];
1416
+ const closeDropdown = (dropdown) => {
1417
+ dropdown.expand.value = false;
1418
+ };
1419
+ const makeDefaultItems = ({
1420
+ superToolbar,
1421
+ toolbarIcons: toolbarIcons2,
1422
+ toolbarTexts: toolbarTexts2,
1423
+ toolbarFonts,
1424
+ hideButtons,
1425
+ availableWidth,
1426
+ role,
1427
+ isDev = false
1428
+ } = {}) => {
1429
+ const bold = useToolbarItem({
1430
+ type: "button",
1431
+ name: "bold",
1432
+ command: "toggleBold",
1433
+ icon: toolbarIcons2.bold,
1434
+ tooltip: toolbarTexts2.bold,
1435
+ attributes: {
1436
+ ariaLabel: "Bold"
1437
+ }
1438
+ });
1439
+ const fontOptions = [...toolbarFonts ? toolbarFonts : TOOLBAR_FONTS];
1440
+ const fontButton = useToolbarItem({
1441
+ type: "dropdown",
1442
+ name: "fontFamily",
1443
+ tooltip: toolbarTexts2.fontFamily,
1444
+ command: "setFontFamily",
1445
+ defaultLabel: "Arial",
1446
+ label: "Arial",
1447
+ markName: "textStyle",
1448
+ labelAttr: "fontFamily",
1449
+ hasCaret: true,
1450
+ isWide: true,
1451
+ style: { width: "116px" },
1452
+ suppressActiveHighlight: true,
1453
+ attributes: {
1454
+ ariaLabel: "Font family"
1455
+ },
1456
+ options: fontOptions,
1457
+ onActivate: ({ fontFamily }) => {
1458
+ if (!fontFamily) return;
1459
+ fontButton.label.value = fontFamily;
1460
+ const foundFont = fontOptions.find((i2) => i2.label === fontFamily);
1461
+ if (foundFont) {
1462
+ fontButton.selectedValue.value = foundFont.key;
1463
+ } else {
1464
+ fontButton.selectedValue.value = "";
1465
+ }
1466
+ },
1467
+ onDeactivate: () => {
1468
+ fontButton.label.value = fontButton.defaultLabel.value;
1469
+ fontButton.selectedValue.value = "";
1470
+ }
1471
+ });
1472
+ const aiButton = useToolbarItem({
1473
+ type: "dropdown",
1474
+ dropdownStyles: {
1475
+ padding: 0,
1476
+ outline: "none"
1477
+ },
1478
+ name: "ai",
1479
+ tooltip: toolbarTexts2.ai,
1480
+ icon: toolbarIcons2.ai,
1481
+ hideLabel: true,
1482
+ hasCaret: false,
1483
+ isWide: true,
1484
+ suppressActiveHighlight: true,
1485
+ attributes: {
1486
+ ariaLabel: "AI"
1487
+ },
1488
+ options: [
1489
+ {
1490
+ type: "render",
1491
+ key: "ai",
1492
+ render: () => {
1493
+ let selectedText = "";
1494
+ if (superToolbar.activeEditor) {
1495
+ const { state } = superToolbar.activeEditor;
1496
+ const { from, to, empty } = state.selection;
1497
+ selectedText = !empty ? state.doc.textBetween(from, to) : "";
1498
+ }
1499
+ const handleClose = () => {
1500
+ closeDropdown(aiButton);
1501
+ };
1502
+ return h("div", {}, [
1503
+ h(AIWriter, {
1504
+ handleClose,
1505
+ selectedText,
1506
+ editor: superToolbar.activeEditor,
1507
+ apiKey: superToolbar.config.aiApiKey,
1508
+ endpoint: superToolbar.config.aiEndpoint,
1509
+ superToolbar
1510
+ })
1511
+ ]);
1512
+ }
1513
+ }
1514
+ ]
1515
+ });
1516
+ const fontSizeOptions = TOOLBAR_FONT_SIZES;
1517
+ const fontSize = useToolbarItem({
1518
+ type: "dropdown",
1519
+ name: "fontSize",
1520
+ defaultLabel: "12",
1521
+ label: "12",
1522
+ minWidth: "50px",
1523
+ markName: "textStyle",
1524
+ labelAttr: "fontSize",
1525
+ tooltip: toolbarTexts2.fontSize,
1526
+ hasCaret: true,
1527
+ hasInlineTextInput: true,
1528
+ inlineTextInputVisible: true,
1529
+ suppressActiveHighlight: true,
1530
+ isWide: true,
1531
+ command: "setFontSize",
1532
+ attributes: {
1533
+ ariaLabel: "Font size"
1534
+ },
1535
+ options: fontSizeOptions,
1536
+ onActivate: ({ fontSize: size }) => {
1537
+ if (!size) {
1538
+ fontSize.label.value = fontSize.defaultLabel.value;
1539
+ fontSize.selectedValue.value = "";
1540
+ return;
1541
+ }
1542
+ let sanitizedValue = sanitizeNumber(size, 12);
1543
+ if (sanitizedValue < 8) sanitizedValue = 8;
1544
+ if (sanitizedValue > 96) sanitizedValue = 96;
1545
+ let sanitizedValueStr = String(sanitizedValue);
1546
+ const foundSize = fontSizeOptions.find((i2) => {
1547
+ return i2.label === sanitizedValueStr || i2.key === sanitizedValueStr;
1548
+ });
1549
+ if (foundSize) {
1550
+ fontSize.selectedValue.value = foundSize.key;
1551
+ } else {
1552
+ fontSize.selectedValue.value = "";
1553
+ }
1554
+ fontSize.label.value = sanitizedValueStr;
1555
+ },
1556
+ onDeactivate: () => {
1557
+ fontSize.label.value = fontSize.defaultLabel.value;
1558
+ fontSize.selectedValue.value = "";
1559
+ }
1560
+ });
1561
+ const separator = useToolbarItem({
1562
+ type: "separator",
1563
+ name: "separator",
1564
+ isNarrow: true
1565
+ });
1566
+ const italic = useToolbarItem({
1567
+ type: "button",
1568
+ name: "italic",
1569
+ command: "toggleItalic",
1570
+ icon: toolbarIcons2.italic,
1571
+ tooltip: toolbarTexts2.italic,
1572
+ attributes: {
1573
+ ariaLabel: "Italic"
1574
+ }
1575
+ });
1576
+ const underline = useToolbarItem({
1577
+ type: "button",
1578
+ name: "underline",
1579
+ command: "toggleUnderline",
1580
+ icon: toolbarIcons2.underline,
1581
+ tooltip: toolbarTexts2.underline,
1582
+ attributes: {
1583
+ ariaLabel: "Underline"
1584
+ }
1585
+ });
1586
+ const strikethrough = useToolbarItem({
1587
+ type: "button",
1588
+ name: "strike",
1589
+ command: "toggleStrike",
1590
+ icon: toolbarIcons2.strikethrough,
1591
+ tooltip: toolbarTexts2.strikethrough,
1592
+ attributes: {
1593
+ ariaLabel: "Strikethrough"
1594
+ }
1595
+ });
1596
+ const highlight = useToolbarItem({
1597
+ type: "dropdown",
1598
+ name: "highlight",
1599
+ icon: toolbarIcons2.highlight,
1600
+ hideLabel: true,
1601
+ markName: "highlight",
1602
+ labelAttr: "color",
1603
+ tooltip: toolbarTexts2.highlight,
1604
+ command: "setHighlight",
1605
+ noArgumentCommand: "unsetHighlight",
1606
+ suppressActiveHighlight: true,
1607
+ attributes: {
1608
+ ariaLabel: "Highlight"
1609
+ },
1610
+ options: [
1611
+ {
1612
+ key: "color",
1613
+ type: "render",
1614
+ render: () => renderColorOptions(superToolbar, highlight, [], true)
1615
+ }
1616
+ ],
1617
+ onActivate: ({ color }) => {
1618
+ highlight.iconColor.value = color || "";
1619
+ },
1620
+ onDeactivate: () => highlight.iconColor.value = ""
1621
+ });
1622
+ const colorButton = useToolbarItem({
1623
+ type: "dropdown",
1624
+ name: "color",
1625
+ icon: toolbarIcons2.color,
1626
+ hideLabel: true,
1627
+ markName: "textStyle",
1628
+ labelAttr: "color",
1629
+ tooltip: toolbarTexts2.color,
1630
+ command: "setColor",
1631
+ suppressActiveHighlight: true,
1632
+ attributes: {
1633
+ ariaLabel: "Color"
1634
+ },
1635
+ options: [
1636
+ {
1637
+ key: "color",
1638
+ type: "render",
1639
+ render: () => renderColorOptions(superToolbar, colorButton)
1640
+ }
1641
+ ],
1642
+ onActivate: ({ color }) => {
1643
+ colorButton.iconColor.value = color;
1644
+ },
1645
+ onDeactivate: () => colorButton.iconColor.value = "#000"
1646
+ });
1647
+ const searchRef = ref(null);
1648
+ const search = useToolbarItem({
1649
+ type: "dropdown",
1650
+ name: "search",
1651
+ icon: toolbarIcons2.search,
1652
+ tooltip: toolbarTexts2.search,
1653
+ group: "right",
1654
+ inputRef: searchRef,
1655
+ attributes: {
1656
+ ariaLabel: "Search"
1657
+ },
1658
+ options: [
1659
+ {
1660
+ type: "render",
1661
+ key: "searchDropdown",
1662
+ render: () => renderSearchDropdown()
1663
+ }
1664
+ ]
1665
+ });
1666
+ const renderSearchDropdown = () => {
1667
+ const handleSubmit = ({ value }) => {
1668
+ superToolbar.activeEditor.commands.search(value);
1669
+ };
1670
+ return h("div", {}, [
1671
+ h(SearchInput, {
1672
+ onSubmit: handleSubmit,
1673
+ searchRef
1674
+ })
1675
+ ]);
1676
+ };
1677
+ const link = useToolbarItem({
1678
+ type: "dropdown",
1679
+ name: "link",
1680
+ markName: "link",
1681
+ icon: toolbarIcons2.link,
1682
+ tooltip: toolbarTexts2.link,
1683
+ attributes: {
1684
+ ariaLabel: "Link dropdown"
1685
+ },
1686
+ options: [
1687
+ {
1688
+ type: "render",
1689
+ key: "linkDropdown",
1690
+ render: () => renderLinkDropdown(link)
1691
+ }
1692
+ ],
1693
+ onActivate: ({ href }) => {
1694
+ if (href) link.attributes.value = { href };
1695
+ else link.attributes.value = {};
1696
+ },
1697
+ onDeactivate: () => {
1698
+ link.attributes.value = {};
1699
+ link.expand.value = false;
1700
+ }
1701
+ });
1702
+ function renderLinkDropdown(link2) {
1703
+ return h("div", {}, [
1704
+ h(LinkInput, {
1705
+ editor: superToolbar.activeEditor,
1706
+ closePopover: () => closeDropdown(link2),
1707
+ goToAnchor: () => {
1708
+ closeDropdown(link2);
1709
+ if (!superToolbar.activeEditor || !link2.attributes.value?.href) return;
1710
+ const anchorName = link2.attributes.value?.href?.slice(1);
1711
+ const container = superToolbar.activeEditor.element;
1712
+ const anchor = container.querySelector(`a[name='${anchorName}']`);
1713
+ if (anchor) scrollToElement(anchor);
1714
+ }
1715
+ })
1716
+ ]);
1717
+ }
1718
+ const linkInput = useToolbarItem({
1719
+ type: "options",
1720
+ name: "linkInput",
1721
+ command: "toggleLink"
1722
+ });
1723
+ link.childItem = linkInput;
1724
+ linkInput.parentItem = link;
1725
+ const image = useToolbarItem({
1726
+ type: "button",
1727
+ name: "image",
1728
+ command: "startImageUpload",
1729
+ icon: toolbarIcons2.image,
1730
+ tooltip: toolbarTexts2.image,
1731
+ disabled: false,
1732
+ attributes: {
1733
+ ariaLabel: "Image"
1734
+ }
1735
+ });
1736
+ const tableItem = useToolbarItem({
1737
+ type: "dropdown",
1738
+ name: "table",
1739
+ icon: toolbarIcons2.table,
1740
+ hideLabel: true,
1741
+ labelAttr: "table",
1742
+ tooltip: toolbarTexts2.table,
1743
+ command: "insertTable",
1744
+ suppressActiveHighlight: true,
1745
+ attributes: {
1746
+ ariaLabel: "Table"
1747
+ },
1748
+ options: [
1749
+ {
1750
+ key: "table",
1751
+ type: "render",
1752
+ render: () => renderTableGrid(tableItem)
1753
+ }
1754
+ ]
1755
+ });
1756
+ function renderTableGrid(tableItem2) {
1757
+ const handleSelect = (e) => {
1758
+ superToolbar.emitCommand({ item: tableItem2, argument: e });
1759
+ closeDropdown(tableItem2);
1760
+ };
1761
+ return h("div", {}, [
1762
+ h(TableGrid, {
1763
+ onSelect: handleSelect
1764
+ })
1765
+ ]);
1766
+ }
1767
+ const tableActionsItem = useToolbarItem({
1768
+ type: "dropdown",
1769
+ name: "tableActions",
1770
+ command: "executeTableCommand",
1771
+ icon: toolbarIcons2.tableActions,
1772
+ hideLabel: true,
1773
+ disabled: true,
1774
+ attributes: {
1775
+ ariaLabel: "Table actions"
1776
+ },
1777
+ options: [
1778
+ {
1779
+ type: "render",
1780
+ render: () => renderTableActions(tableActionsItem)
1781
+ }
1782
+ ]
1783
+ });
1784
+ const tableActionsOptions2 = [
1785
+ {
1786
+ label: toolbarTexts2.addRowBefore,
1787
+ command: "addRowBefore",
1788
+ icon: toolbarIcons2.addRowBefore,
1789
+ props: {
1790
+ "data-item": "btn-tableActions-option",
1791
+ ariaLabel: "Add row before"
1792
+ }
1793
+ },
1794
+ {
1795
+ label: toolbarTexts2.addRowAfter,
1796
+ command: "addRowAfter",
1797
+ icon: toolbarIcons2.addRowAfter,
1798
+ props: {
1799
+ "data-item": "btn-tableActions-option",
1800
+ ariaLabel: "Add row after"
1801
+ }
1802
+ },
1803
+ {
1804
+ label: toolbarTexts2.addColumnBefore,
1805
+ command: "addColumnBefore",
1806
+ icon: toolbarIcons2.addColumnBefore,
1807
+ props: {
1808
+ "data-item": "btn-tableActions-option",
1809
+ ariaLabel: "Add column before"
1810
+ }
1811
+ },
1812
+ {
1813
+ label: toolbarTexts2.addColumnAfter,
1814
+ command: "addColumnAfter",
1815
+ icon: toolbarIcons2.addColumnAfter,
1816
+ bottomBorder: true,
1817
+ props: {
1818
+ "data-item": "btn-tableActions-option",
1819
+ ariaLabel: "Add column after"
1820
+ }
1821
+ },
1822
+ {
1823
+ label: toolbarTexts2.deleteRow,
1824
+ command: "deleteRow",
1825
+ icon: toolbarIcons2.deleteRow,
1826
+ props: {
1827
+ "data-item": "btn-tableActions-option",
1828
+ ariaLabel: "Delete row"
1829
+ }
1830
+ },
1831
+ {
1832
+ label: toolbarTexts2.deleteColumn,
1833
+ command: "deleteColumn",
1834
+ icon: toolbarIcons2.deleteColumn,
1835
+ props: {
1836
+ "data-item": "btn-tableActions-option",
1837
+ ariaLabel: "Delete column"
1838
+ }
1839
+ },
1840
+ {
1841
+ label: toolbarTexts2.deleteTable,
1842
+ command: "deleteTable",
1843
+ icon: toolbarIcons2.deleteTable,
1844
+ props: {
1845
+ "data-item": "btn-tableActions-option",
1846
+ ariaLabel: "Delete table"
1847
+ }
1848
+ },
1849
+ {
1850
+ label: toolbarTexts2.transparentBorders,
1851
+ command: "deleteCellAndTableBorders",
1852
+ icon: toolbarIcons2.deleteBorders,
1853
+ bottomBorder: true,
1854
+ props: {
1855
+ "data-item": "btn-tableActions-option",
1856
+ ariaLabel: "Delete cell and table borders"
1857
+ }
1858
+ },
1859
+ {
1860
+ label: toolbarTexts2.mergeCells,
1861
+ command: "mergeCells",
1862
+ icon: toolbarIcons2.mergeCells,
1863
+ props: {
1864
+ "data-item": "btn-tableActions-option",
1865
+ ariaLabel: "Merge cells"
1866
+ }
1867
+ },
1868
+ {
1869
+ label: toolbarTexts2.splitCell,
1870
+ command: "splitCell",
1871
+ icon: toolbarIcons2.splitCell,
1872
+ props: {
1873
+ "data-item": "btn-tableActions-option",
1874
+ ariaLabel: "Split cells"
1875
+ }
1876
+ },
1877
+ {
1878
+ label: toolbarTexts2.fixTables,
1879
+ command: "fixTables",
1880
+ icon: toolbarIcons2.fixTables,
1881
+ props: {
1882
+ "data-item": "btn-tableActions-option",
1883
+ ariaLabel: "Fix tables"
1884
+ }
1885
+ }
1886
+ ];
1887
+ function renderTableActions(tableActionsItem2) {
1888
+ return h(TableActions, {
1889
+ options: tableActionsOptions2,
1890
+ onSelect: (event) => {
1891
+ closeDropdown(tableActionsItem2);
1892
+ const { command } = event;
1893
+ superToolbar.emitCommand({ item: tableActionsItem2, argument: { command } });
1894
+ }
1895
+ });
1896
+ }
1897
+ const alignment2 = useToolbarItem({
1898
+ type: "dropdown",
1899
+ name: "textAlign",
1900
+ tooltip: toolbarTexts2.textAlign,
1901
+ icon: toolbarIcons2.alignLeft,
1902
+ command: "setTextAlign",
1903
+ hasCaret: true,
1904
+ markName: "textAlign",
1905
+ labelAttr: "textAlign",
1906
+ suppressActiveHighlight: true,
1907
+ attributes: {
1908
+ ariaLabel: "Text align"
1909
+ },
1910
+ options: [
1911
+ {
1912
+ type: "render",
1913
+ render: () => {
1914
+ const handleSelect = (e) => {
1915
+ closeDropdown(alignment2);
1916
+ const buttonWithCommand = { ...alignment2, command: "setTextAlign" };
1917
+ buttonWithCommand.command = "setTextAlign";
1918
+ superToolbar.emitCommand({ item: buttonWithCommand, argument: e });
1919
+ setAlignmentIcon(alignment2, e);
1920
+ };
1921
+ return h("div", {}, [
1922
+ h(AlignmentButtons, {
1923
+ onSelect: handleSelect
1924
+ })
1925
+ ]);
1926
+ },
1927
+ key: "alignment"
1928
+ }
1929
+ ],
1930
+ onActivate: ({ textAlign }) => {
1931
+ setAlignmentIcon(alignment2, textAlign);
1932
+ },
1933
+ onDeactivate: () => {
1934
+ setAlignmentIcon(alignment2, "left");
1935
+ }
1936
+ });
1937
+ const setAlignmentIcon = (alignment3, e) => {
1938
+ let alignValue = e === "both" ? "justify" : e;
1939
+ let icons2 = {
1940
+ left: toolbarIcons2.alignLeft,
1941
+ right: toolbarIcons2.alignRight,
1942
+ center: toolbarIcons2.alignCenter,
1943
+ justify: toolbarIcons2.alignJustify
1944
+ };
1945
+ let icon = icons2[alignValue] ?? icons2.left;
1946
+ alignment3.icon.value = icon;
1947
+ };
1948
+ const bulletedList = useToolbarItem({
1949
+ type: "button",
1950
+ name: "list",
1951
+ command: "toggleBulletList",
1952
+ icon: toolbarIcons2.bulletList,
1953
+ tooltip: toolbarTexts2.bulletList,
1954
+ attributes: {
1955
+ ariaLabel: "Bullet list"
1956
+ }
1957
+ });
1958
+ const numberedList = useToolbarItem({
1959
+ type: "button",
1960
+ name: "numberedlist",
1961
+ command: "toggleOrderedList",
1962
+ icon: toolbarIcons2.numberedList,
1963
+ tooltip: toolbarTexts2.numberedList,
1964
+ attributes: {
1965
+ ariaLabel: "Numbered list"
1966
+ }
1967
+ });
1968
+ const indentLeft = useToolbarItem({
1969
+ type: "button",
1970
+ name: "indentleft",
1971
+ command: "decreaseTextIndent",
1972
+ icon: toolbarIcons2.indentLeft,
1973
+ tooltip: toolbarTexts2.indentLeft,
1974
+ disabled: false,
1975
+ attributes: {
1976
+ ariaLabel: "Left indent"
1977
+ }
1978
+ });
1979
+ const indentRight = useToolbarItem({
1980
+ type: "button",
1981
+ name: "indentright",
1982
+ command: "increaseTextIndent",
1983
+ icon: toolbarIcons2.indentRight,
1984
+ tooltip: toolbarTexts2.indentRight,
1985
+ disabled: false,
1986
+ attributes: {
1987
+ ariaLabel: "Right indent"
1988
+ }
1989
+ });
1990
+ const overflow = useToolbarItem({
1991
+ type: "overflow",
1992
+ name: "overflow",
1993
+ command: null,
1994
+ icon: toolbarIcons2.overflow,
1995
+ disabled: false,
1996
+ attributes: {
1997
+ ariaLabel: "Overflow items"
1998
+ }
1999
+ });
2000
+ const zoom = useToolbarItem({
2001
+ type: "dropdown",
2002
+ name: "zoom",
2003
+ allowWithoutEditor: true,
2004
+ tooltip: toolbarTexts2.zoom,
2005
+ defaultLabel: "100%",
2006
+ label: "100%",
2007
+ hasCaret: true,
2008
+ command: "setZoom",
2009
+ isWide: true,
2010
+ inlineTextInputVisible: false,
2011
+ hasInlineTextInput: true,
2012
+ attributes: {
2013
+ ariaLabel: "Zoom"
2014
+ },
2015
+ options: [
2016
+ { label: "50%", key: 0.5, props: { "data-item": "btn-zoom-option" } },
2017
+ { label: "75%", key: 0.75, props: { "data-item": "btn-zoom-option" } },
2018
+ { label: "90%", key: 0.9, props: { "data-item": "btn-zoom-option" } },
2019
+ { label: "100%", key: 1, props: { "data-item": "btn-zoom-option" } },
2020
+ { label: "125%", key: 1.25, props: { "data-item": "btn-zoom-option" } },
2021
+ { label: "150%", key: 1.5, props: { "data-item": "btn-zoom-option" } },
2022
+ { label: "200%", key: 2, props: { "data-item": "btn-zoom-option" } }
2023
+ ],
2024
+ onActivate: ({ zoom: value }) => {
2025
+ if (!value) return;
2026
+ zoom.label.value = value;
2027
+ }
2028
+ });
2029
+ const undo = useToolbarItem({
2030
+ type: "button",
2031
+ name: "undo",
2032
+ disabled: true,
2033
+ tooltip: toolbarTexts2.undo,
2034
+ command: "undo",
2035
+ icon: toolbarIcons2.undo,
2036
+ group: "left",
2037
+ attributes: {
2038
+ ariaLabel: "Undo"
2039
+ },
2040
+ onDeactivate: () => {
2041
+ undo.disabled.value = !superToolbar.undoDepth;
2042
+ }
2043
+ });
2044
+ const redo = useToolbarItem({
2045
+ type: "button",
2046
+ disabled: true,
2047
+ name: "redo",
2048
+ tooltip: toolbarTexts2.redo,
2049
+ command: "redo",
2050
+ icon: toolbarIcons2.redo,
2051
+ group: "left",
2052
+ attributes: {
2053
+ ariaLabel: "Redo"
2054
+ },
2055
+ onDeactivate: () => {
2056
+ redo.disabled.value = !superToolbar.redoDepth;
2057
+ }
2058
+ });
2059
+ const toggleTrackChanges = useToolbarItem({
2060
+ type: "button",
2061
+ disabled: false,
2062
+ name: "toggleTrackChanges",
2063
+ tooltip: toolbarTexts2.trackChanges,
2064
+ command: "toggleTrackChanges",
2065
+ icon: toolbarIcons2.trackChanges,
2066
+ group: "left",
2067
+ attributes: {
2068
+ ariaLabel: "Track changes"
2069
+ }
2070
+ });
2071
+ const acceptTrackedChangeBySelection = useToolbarItem({
2072
+ type: "button",
2073
+ disabled: false,
2074
+ name: "acceptTrackedChangeBySelection",
2075
+ tooltip: toolbarTexts2.trackChangesAccept,
2076
+ command: "acceptTrackedChangeBySelection",
2077
+ icon: toolbarIcons2.trackChangesAccept,
2078
+ group: "left",
2079
+ attributes: {
2080
+ ariaLabel: "Accept tracked changes"
2081
+ }
2082
+ });
2083
+ const rejectTrackedChangeOnSelection = useToolbarItem({
2084
+ type: "button",
2085
+ disabled: false,
2086
+ name: "rejectTrackedChangeOnSelection",
2087
+ tooltip: toolbarTexts2.trackChangesReject,
2088
+ command: "rejectTrackedChangeOnSelection",
2089
+ icon: toolbarIcons2.trackChangesReject,
2090
+ group: "left",
2091
+ attributes: {
2092
+ ariaLabel: "Reject tracked changes"
2093
+ }
2094
+ });
2095
+ const toggleTrackChangesOriginal = useToolbarItem({
2096
+ type: "button",
2097
+ disabled: false,
2098
+ name: "toggleTrackChangesShowOriginal",
2099
+ tooltip: toolbarTexts2.trackChangesOriginal,
2100
+ command: "toggleTrackChangesShowOriginal",
2101
+ icon: toolbarIcons2.trackChangesOriginal,
2102
+ group: "left",
2103
+ attributes: {
2104
+ ariaLabel: "Toggle tracked changes show original"
2105
+ }
2106
+ });
2107
+ const toggleTrackChangesFinal = useToolbarItem({
2108
+ type: "button",
2109
+ disabled: false,
2110
+ name: "toggleTrackChangesShowFinal",
2111
+ tooltip: toolbarTexts2.trackChangesFinal,
2112
+ command: "toggleTrackChangesShowFinal",
2113
+ icon: toolbarIcons2.trackChangesFinal,
2114
+ group: "left",
2115
+ attributes: {
2116
+ ariaLabel: "Toggle tracked changes show final"
2117
+ }
2118
+ });
2119
+ const clearFormatting = useToolbarItem({
2120
+ type: "button",
2121
+ name: "clearFormatting",
2122
+ command: "clearFormat",
2123
+ tooltip: toolbarTexts2.clearFormatting,
2124
+ icon: toolbarIcons2.clearFormatting,
2125
+ attributes: {
2126
+ ariaLabel: "Clear formatting"
2127
+ }
2128
+ });
2129
+ const copyFormat = useToolbarItem({
2130
+ type: "button",
2131
+ name: "copyFormat",
2132
+ tooltip: toolbarTexts2.copyFormat,
2133
+ icon: toolbarIcons2.copyFormat,
2134
+ command: "copyFormat",
2135
+ attributes: {
2136
+ ariaLabel: "Copy formatting"
2137
+ }
2138
+ });
2139
+ const getDocumentOptionsAfterRole = (role2, documentOptions2) => {
2140
+ if (role2 === "editor") return documentOptions2;
2141
+ else if (role2 === "suggester") return documentOptions2.filter((option) => option.value === "suggesting");
2142
+ else return documentOptions2.filter((option) => option.value === "viewing");
2143
+ };
2144
+ const getDefaultLabel = (role2) => {
2145
+ if (role2 === "editor") return "Editing";
2146
+ else if (role2 === "suggester") return "Suggesting";
2147
+ else return "Viewing";
2148
+ };
2149
+ const documentMode = useToolbarItem({
2150
+ type: "dropdown",
2151
+ name: "documentMode",
2152
+ command: "setDocumentMode",
2153
+ allowWithoutEditor: true,
2154
+ icon: toolbarIcons2.documentMode,
2155
+ defaultLabel: getDefaultLabel(role),
2156
+ label: getDefaultLabel(role),
2157
+ hasCaret: role === "editor",
2158
+ isWide: true,
2159
+ style: { display: "flex", justifyContent: "flex-end" },
2160
+ inlineTextInputVisible: false,
2161
+ hasInlineTextInput: false,
2162
+ group: "right",
2163
+ disabled: role !== "editor",
2164
+ attributes: {
2165
+ dropdownPosition: "right",
2166
+ className: "toolbar-item--doc-mode",
2167
+ ariaLabel: "Document mode"
2168
+ },
2169
+ options: [
2170
+ {
2171
+ type: "render",
2172
+ render: () => renderDocumentMode(documentMode)
2173
+ }
2174
+ ]
2175
+ });
2176
+ const documentOptions = [
2177
+ {
2178
+ label: toolbarTexts2.documentEditingMode,
2179
+ value: "editing",
2180
+ icon: toolbarIcons2.documentEditingMode,
2181
+ description: toolbarTexts2.documentEditingModeDescription
2182
+ },
2183
+ {
2184
+ label: toolbarTexts2.documentSuggestingMode,
2185
+ value: "suggesting",
2186
+ icon: toolbarIcons2.documentSuggestingMode,
2187
+ description: toolbarTexts2.documentSuggestingModeDescription
2188
+ },
2189
+ {
2190
+ label: toolbarTexts2.documentViewingMode,
2191
+ value: "viewing",
2192
+ icon: toolbarIcons2.documentViewingMode,
2193
+ description: toolbarTexts2.documentViewingModeDescription
2194
+ }
2195
+ ];
2196
+ function renderDocumentMode(renderDocumentButton) {
2197
+ const optionsAfterRole = getDocumentOptionsAfterRole(role, documentOptions);
2198
+ return h(DocumentMode, {
2199
+ options: optionsAfterRole,
2200
+ onSelect: (item) => {
2201
+ closeDropdown(renderDocumentButton);
2202
+ const { label, icon } = item;
2203
+ documentMode.label.value = label;
2204
+ documentMode.icon.value = icon;
2205
+ superToolbar.emitCommand({ item: documentMode, argument: label });
2206
+ }
2207
+ });
2208
+ }
2209
+ const pageBreakTool = useToolbarItem({
2210
+ type: "button",
2211
+ name: "pageBreakTool",
2212
+ command: "insertPageBreak",
2213
+ icon: toolbarIcons2.pageBreak,
2214
+ tooltip: toolbarTexts2.pageBreak,
2215
+ attributes: {
2216
+ ariaLabel: "Page break"
2217
+ }
2218
+ });
2219
+ const controlSizes = /* @__PURE__ */ new Map([
2220
+ ["separator", 20],
2221
+ ["zoom", 71],
2222
+ ["fontFamily", 118],
2223
+ ["fontSize", 57],
2224
+ ["textAlign", 40],
2225
+ ["linkedStyles", 142],
2226
+ ["documentMode", 47],
2227
+ ["ai", 32],
2228
+ ["default", 32]
2229
+ ]);
2230
+ const ruler = useToolbarItem({
2231
+ type: "button",
2232
+ name: "ruler",
2233
+ command: "toggleRuler",
2234
+ icon: toolbarIcons2.ruler,
2235
+ tooltip: toolbarTexts2.ruler,
2236
+ attributes: {
2237
+ ariaLabel: "Ruler"
2238
+ }
2239
+ });
2240
+ const selectedLinkedStyle = ref(null);
2241
+ const linkedStyles = useToolbarItem({
2242
+ type: "dropdown",
2243
+ name: "linkedStyles",
2244
+ command: "setLinkedStyle",
2245
+ tooltip: toolbarTexts2.linkedStyles,
2246
+ icon: toolbarIcons2.paintbrush,
2247
+ defaultLabel: toolbarTexts2.formatText,
2248
+ label: toolbarTexts2.formatText,
2249
+ hasCaret: true,
2250
+ isWide: true,
2251
+ style: { width: "140px" },
2252
+ suppressActiveHighlight: true,
2253
+ disabled: false,
2254
+ attributes: {
2255
+ className: "toolbar-item--linked-styles",
2256
+ ariaLabel: "Linked styles"
2257
+ },
2258
+ options: [
2259
+ {
2260
+ type: "render",
2261
+ key: "linkedStyle",
2262
+ render: () => {
2263
+ const handleSelect = (style) => {
2264
+ closeDropdown(linkedStyles);
2265
+ const itemWithCommand = { ...linkedStyles, command: "setLinkedStyle" };
2266
+ superToolbar.emitCommand({ item: itemWithCommand, argument: style });
2267
+ selectedLinkedStyle.value = style.id;
2268
+ };
2269
+ return h("div", {}, [
2270
+ h(LinkedStyle, {
2271
+ editor: superToolbar.activeEditor,
2272
+ onSelect: handleSelect,
2273
+ selectedOption: selectedLinkedStyle.value
2274
+ })
2275
+ ]);
2276
+ }
2277
+ }
2278
+ ],
2279
+ onActivate: () => {
2280
+ linkedStyles.disabled.value = false;
2281
+ },
2282
+ onDeactivate: () => {
2283
+ linkedStyles.disabled.value = true;
2284
+ }
2285
+ });
2286
+ const renderIcon = (value, selectedValue) => {
2287
+ if (selectedValue.value.toString() !== value) return;
2288
+ return h("div", { innerHTML: checkIconSvg, class: "dropdown-select-icon" });
2289
+ };
2290
+ const lineHeight = useToolbarItem({
2291
+ type: "dropdown",
2292
+ name: "lineHeight",
2293
+ tooltip: toolbarTexts2.lineHeight,
2294
+ icon: toolbarIcons2.lineHeight,
2295
+ hasCaret: false,
2296
+ hasInlineTextInput: false,
2297
+ inlineTextInputVisible: false,
2298
+ suppressActiveHighlight: true,
2299
+ isWide: false,
2300
+ command: "setLineHeight",
2301
+ dropdownValueKey: "key",
2302
+ selectedValue: "1",
2303
+ attributes: {
2304
+ ariaLabel: "Line height"
2305
+ },
2306
+ options: [
2307
+ {
2308
+ label: "1,0",
2309
+ key: "1",
2310
+ icon: () => renderIcon("1", lineHeight.selectedValue),
2311
+ props: { "data-item": "btn-lineHeight-option" }
2312
+ },
2313
+ {
2314
+ label: "1,15",
2315
+ key: "1.15",
2316
+ icon: () => renderIcon("1.15", lineHeight.selectedValue),
2317
+ props: { "data-item": "btn-lineHeight-option" }
2318
+ },
2319
+ {
2320
+ label: "1,5",
2321
+ key: "1.5",
2322
+ icon: () => renderIcon("1.5", lineHeight.selectedValue),
2323
+ props: { "data-item": "btn-lineHeight-option" }
2324
+ },
2325
+ {
2326
+ label: "2,0",
2327
+ key: "2",
2328
+ icon: () => renderIcon("2", lineHeight.selectedValue),
2329
+ props: { "data-item": "btn-lineHeight-option" }
2330
+ },
2331
+ {
2332
+ label: "2,5",
2333
+ key: "2.5",
2334
+ icon: () => renderIcon("2.5", lineHeight.selectedValue),
2335
+ props: { "data-item": "btn-lineHeight-option" }
2336
+ },
2337
+ {
2338
+ label: "3,0",
2339
+ key: "3",
2340
+ icon: () => renderIcon("3", lineHeight.selectedValue),
2341
+ props: { "data-item": "btn-lineHeight-option" }
2342
+ }
2343
+ ]
2344
+ });
2345
+ const breakpoints = {
2346
+ sm: 768,
2347
+ md: 1024,
2348
+ xl: 1410
2349
+ };
2350
+ const stickyItemsWidth = 120;
2351
+ const toolbarPadding = 32;
2352
+ const itemsToHideXL = ["linkedStyles", "clearFormatting", "copyFormat", "ruler"];
2353
+ const itemsToHideSM = ["zoom", "fontFamily", "fontSize", "redo"];
2354
+ let toolbarItems = [
2355
+ undo,
2356
+ redo,
2357
+ // Dev - tracked changes
2358
+ // toggleTrackChanges,
2359
+ acceptTrackedChangeBySelection,
2360
+ rejectTrackedChangeOnSelection,
2361
+ // toggleTrackChangesOriginal,
2362
+ // toggleTrackChangesFinal,
2363
+ zoom,
2364
+ fontButton,
2365
+ separator,
2366
+ fontSize,
2367
+ separator,
2368
+ bold,
2369
+ italic,
2370
+ underline,
2371
+ strikethrough,
2372
+ colorButton,
2373
+ highlight,
2374
+ separator,
2375
+ link,
2376
+ image,
2377
+ tableItem,
2378
+ tableActionsItem,
2379
+ separator,
2380
+ alignment2,
2381
+ bulletedList,
2382
+ numberedList,
2383
+ indentLeft,
2384
+ indentRight,
2385
+ lineHeight,
2386
+ separator,
2387
+ linkedStyles,
2388
+ separator,
2389
+ ruler,
2390
+ pageBreakTool,
2391
+ copyFormat,
2392
+ clearFormatting,
2393
+ aiButton,
2394
+ overflow,
2395
+ documentMode
2396
+ ];
2397
+ if (!superToolbar.config?.superdoc?.config?.modules?.ai) {
2398
+ toolbarItems = toolbarItems.filter((item) => item.name.value !== "ai");
2399
+ }
2400
+ if (availableWidth <= breakpoints.md && hideButtons) {
2401
+ toolbarItems = toolbarItems.filter((item) => item.type !== "separator");
2402
+ }
2403
+ if (!superToolbar.config.pagination) {
2404
+ toolbarItems = toolbarItems.filter((item) => item.name.value !== "pageBreakTool");
2405
+ }
2406
+ if (superToolbar.config.mode !== "docx") {
2407
+ const getLinkedStylesIndex = toolbarItems.findIndex((item) => item.name.value === "linkedStyles");
2408
+ toolbarItems.splice(getLinkedStylesIndex - 1, 2);
2409
+ const filterItems = ["ruler", "zoom", "undo", "redo"];
2410
+ toolbarItems = toolbarItems.filter((item) => !filterItems.includes(item.name.value));
2411
+ }
2412
+ const devItems = [toggleTrackChanges, toggleTrackChangesOriginal, toggleTrackChangesFinal];
2413
+ if (!isDev) {
2414
+ if (role === "viewer") {
2415
+ devItems.push(...[acceptTrackedChangeBySelection, rejectTrackedChangeOnSelection]);
2416
+ }
2417
+ toolbarItems = toolbarItems.filter((item) => !devItems.includes(item));
2418
+ }
2419
+ const toolbarItemsSticky = [search, undo, overflow, documentMode].map((item) => item.name);
2420
+ const isStickyItem = (item) => toolbarItemsSticky.includes(item.name);
2421
+ const overflowItems = [];
2422
+ const visibleItems = [];
2423
+ let totalWidth = toolbarPadding + stickyItemsWidth;
2424
+ toolbarItems.forEach((item) => {
2425
+ const itemWidth = controlSizes.get(item.name.value) || controlSizes.get("default");
2426
+ if (availableWidth < breakpoints.xl && itemsToHideXL.includes(item.name.value) && hideButtons) {
2427
+ overflowItems.push(item);
2428
+ if (item.name.value === "linkedStyles") {
2429
+ const linkedStylesIdx = toolbarItems.findIndex((item2) => item2.name.value === "linkedStyles");
2430
+ toolbarItems.splice(linkedStylesIdx + 1, 1);
2431
+ }
2432
+ return;
2433
+ }
2434
+ if (availableWidth < breakpoints.sm && itemsToHideSM.includes(item.name.value) && hideButtons) {
2435
+ overflowItems.push(item);
2436
+ return;
2437
+ }
2438
+ if (isStickyItem(item)) {
2439
+ visibleItems.push(item);
2440
+ totalWidth += itemWidth;
2441
+ return;
2442
+ }
2443
+ if (totalWidth < availableWidth || !hideButtons) {
2444
+ visibleItems.push(item);
2445
+ totalWidth += itemWidth;
2446
+ } else {
2447
+ overflowItems.push(item);
2448
+ }
2449
+ });
2450
+ return {
2451
+ defaultItems: visibleItems,
2452
+ overflowItems: overflowItems.filter((item) => item.type !== "separator")
2453
+ };
2454
+ };
2455
+ const toolbarTexts = {
2456
+ bold: "Bold",
2457
+ fontFamily: "Font",
2458
+ ai: "AI text generation",
2459
+ fontSize: "Font size",
2460
+ italic: "Italic",
2461
+ underline: "Underline",
2462
+ highlight: "Highlight color",
2463
+ strikethrough: "Strikethrough",
2464
+ color: "Text color",
2465
+ search: "Search",
2466
+ link: "Link",
2467
+ image: "Image",
2468
+ table: "Insert table",
2469
+ addRowBefore: "Insert row above",
2470
+ addRowAfter: "Insert row below",
2471
+ addColumnBefore: "Insert column left",
2472
+ addColumnAfter: "Insert column right",
2473
+ deleteRow: "Delete row",
2474
+ deleteColumn: "Delete column",
2475
+ deleteTable: "Delete table",
2476
+ transparentBorders: "Transparent borders",
2477
+ mergeCells: "Merge cells",
2478
+ splitCell: "Split cell",
2479
+ fixTables: "Fix tables",
2480
+ textAlign: "Alignment",
2481
+ bulletList: "Bullet list",
2482
+ numberedList: "Numbered list",
2483
+ indentLeft: "Left indent",
2484
+ indentRight: "Right indent",
2485
+ zoom: "Zoom",
2486
+ undo: "Undo",
2487
+ redo: "Redo",
2488
+ trackChanges: "Track Changes",
2489
+ trackChangesAccept: "Accept changes under selection",
2490
+ trackChangesReject: "Reject changes under selection",
2491
+ trackChangesOriginal: "Toggle Show Original",
2492
+ trackChangesFinal: "Toggle Show Final",
2493
+ clearFormatting: "Clear formatting",
2494
+ copyFormat: "Format painter",
2495
+ lineHeight: "Line height",
2496
+ formatText: "Format text",
2497
+ ruler: "Show or hide ruler",
2498
+ pageBreak: "Insert page break",
2499
+ documentEditingMode: "Editing",
2500
+ documentSuggestingMode: "Suggesting",
2501
+ documentViewingMode: "Viewing",
2502
+ documentEditingModeDescription: "Edit document directly",
2503
+ documentSuggestingModeDescription: "Edits become suggestions",
2504
+ documentViewingModeDescription: "View clean version of document only",
2505
+ linkedStyles: "Linked styles"
2506
+ };
2507
+ class SuperToolbar extends EventEmitter {
2508
+ /**
2509
+ * Creates a new SuperToolbar instance
2510
+ * @param {ToolbarConfig} config - The configuration for the toolbar
2511
+ * @returns {void}
2512
+ */
2513
+ constructor(config) {
2514
+ super();
2515
+ __privateAdd(this, _SuperToolbar_instances);
2516
+ /**
2517
+ * Default configuration for the toolbar
2518
+ * @type {ToolbarConfig}
2519
+ */
2520
+ __publicField(this, "config", {
2521
+ selector: null,
2522
+ toolbarGroups: ["left", "center", "right"],
2523
+ role: "editor",
2524
+ pagination: false,
2525
+ icons: { ...toolbarIcons },
2526
+ texts: { ...toolbarTexts },
2527
+ fonts: null,
2528
+ hideButtons: true,
2529
+ responsiveToContainer: false,
2530
+ mode: "docx",
2531
+ excludeItems: [],
2532
+ groups: null,
2533
+ editor: null,
2534
+ aiApiKey: null,
2535
+ aiEndpoint: null,
2536
+ customButtons: []
2537
+ });
2538
+ /**
2539
+ * Custom commands that override default behavior
2540
+ * @private
2541
+ * @type {Object.<string, function(CommandItem): void>}
2542
+ */
2543
+ __privateAdd(this, _interceptedCommands, {
2544
+ /**
2545
+ * Handles zoom level changes
2546
+ * @param {Object} params - Command parameters
2547
+ * @param {CommandItem} params.item - The command item
2548
+ * @param {string|number} params.argument - The zoom level (percentage)
2549
+ * @returns {void}
2550
+ */
2551
+ setZoom: ({ item, argument }) => {
2552
+ if (!argument) return;
2553
+ item.onActivate({ zoom: argument });
2554
+ this.emit("superdoc-command", { item, argument });
2555
+ const layers = document.querySelector(this.superdoc.config.selector)?.querySelector(".layers");
2556
+ if (!layers) return;
2557
+ const isMobileDevice = typeof screen.orientation !== "undefined";
2558
+ const isSmallScreen = window.matchMedia("(max-width: 834px)").matches;
2559
+ if (isMobileDevice && isSmallScreen) {
2560
+ layers.style.transformOrigin = "0 0";
2561
+ layers.style.transform = `scale(${parseInt(argument) / 100})`;
2562
+ } else {
2563
+ layers.style.zoom = parseInt(argument) / 100;
2564
+ }
2565
+ this.superdoc.superdocStore.activeZoom = parseInt(argument);
2566
+ },
2567
+ /**
2568
+ * Sets the document mode
2569
+ * @param {Object} params - Command parameters
2570
+ * @param {CommandItem} params.item - The command item
2571
+ * @param {string} params.argument - The document mode to set
2572
+ * @returns {void}
2573
+ */
2574
+ setDocumentMode: ({ item, argument }) => {
2575
+ if (!argument) return;
2576
+ this.emit("superdoc-command", { item, argument });
2577
+ },
2578
+ /**
2579
+ * Sets the font size for text
2580
+ * @param {Object} params - Command parameters
2581
+ * @param {CommandItem} params.item - The command item
2582
+ * @param {string|number} params.argument - The font size to set
2583
+ * @returns {void}
2584
+ */
2585
+ setFontSize: ({ item, argument }) => {
2586
+ __privateMethod(this, _SuperToolbar_instances, runCommandWithArgumentOnly_fn).call(this, { item, argument }, () => {
2587
+ this.activeEditor?.commands.setFieldAnnotationsFontSize(argument, true);
2588
+ });
2589
+ },
2590
+ /**
2591
+ * Sets the font family for text
2592
+ * @param {Object} params - Command parameters
2593
+ * @param {CommandItem} params.item - The command item
2594
+ * @param {string} params.argument - The font family to set
2595
+ * @returns {void}
2596
+ */
2597
+ setFontFamily: ({ item, argument }) => {
2598
+ __privateMethod(this, _SuperToolbar_instances, runCommandWithArgumentOnly_fn).call(this, { item, argument }, () => {
2599
+ this.activeEditor?.commands.setFieldAnnotationsFontFamily(argument, true);
2600
+ });
2601
+ },
2602
+ /**
2603
+ * Sets the text color
2604
+ * @param {Object} params - Command parameters
2605
+ * @param {CommandItem} params.item - The command item
2606
+ * @param {string} params.argument - The color to set
2607
+ * @returns {void}
2608
+ */
2609
+ setColor: ({ item, argument }) => {
2610
+ __privateMethod(this, _SuperToolbar_instances, runCommandWithArgumentOnly_fn).call(this, { item, argument }, () => {
2611
+ this.activeEditor?.commands.setFieldAnnotationsTextColor(argument, true);
2612
+ });
2613
+ },
2614
+ /**
2615
+ * Sets the highlight color for text
2616
+ * @param {Object} params - Command parameters
2617
+ * @param {CommandItem} params.item - The command item
2618
+ * @param {string} params.argument - The highlight color to set
2619
+ * @returns {void}
2620
+ */
2621
+ setHighlight: ({ item, argument }) => {
2622
+ __privateMethod(this, _SuperToolbar_instances, runCommandWithArgumentOnly_fn).call(this, { item, argument, noArgumentCallback: true }, () => {
2623
+ let arg = argument !== "none" ? argument : null;
2624
+ this.activeEditor?.commands.setFieldAnnotationsTextHighlight(arg, true);
2625
+ this.activeEditor?.commands.setCellBackground(arg);
2626
+ });
2627
+ },
2628
+ /**
2629
+ * Toggles the ruler visibility
2630
+ * @returns {void}
2631
+ */
2632
+ toggleRuler: () => {
2633
+ this.superdoc.toggleRuler();
2634
+ },
2635
+ /**
2636
+ * Initiates the image upload process
2637
+ * @async
2638
+ * @returns {Promise<void>}
2639
+ */
2640
+ startImageUpload: async () => {
2641
+ let open = getFileOpener();
2642
+ let result = await open();
2643
+ if (!result?.file) {
2644
+ return;
2645
+ }
2646
+ const { size, file } = await checkAndProcessImage({
2647
+ file: result.file,
2648
+ getMaxContentSize: () => this.activeEditor.getMaxContentSize()
2649
+ });
2650
+ if (!file) {
2651
+ return;
2652
+ }
2653
+ const id = {};
2654
+ replaceSelectionWithImagePlaceholder({
2655
+ view: this.activeEditor.view,
2656
+ editorOptions: this.activeEditor.options,
2657
+ id
2658
+ });
2659
+ await uploadAndInsertImage({
2660
+ editor: this.activeEditor,
2661
+ view: this.activeEditor.view,
2662
+ file,
2663
+ size,
2664
+ id
2665
+ });
2666
+ },
2667
+ /**
2668
+ * Increases text indentation or list level
2669
+ * @param {Object} params - Command parameters
2670
+ * @param {CommandItem} params.item - The command item
2671
+ * @param {*} params.argument - Command arguments
2672
+ * @returns {void}
2673
+ */
2674
+ increaseTextIndent: ({ item, argument }) => {
2675
+ let command = item.command;
2676
+ let { state } = this.activeEditor;
2677
+ let listItem = findParentNode((node) => node.type.name === "listItem")(state.selection);
2678
+ if (listItem) {
2679
+ return this.activeEditor.commands.increaseListIndent();
2680
+ }
2681
+ if (command in this.activeEditor.commands) {
2682
+ this.activeEditor.commands[command](argument);
2683
+ }
2684
+ },
2685
+ /**
2686
+ * Decreases text indentation or list level
2687
+ * @param {Object} params - Command parameters
2688
+ * @param {CommandItem} params.item - The command item
2689
+ * @param {*} params.argument - Command arguments
2690
+ * @returns {boolean}
2691
+ */
2692
+ decreaseTextIndent: ({ item, argument }) => {
2693
+ let command = item.command;
2694
+ let { state } = this.activeEditor;
2695
+ let listItem = findParentNode((node) => node.type.name === "listItem")(state.selection);
2696
+ if (listItem) {
2697
+ return this.activeEditor.commands.decreaseListIndent();
2698
+ }
2699
+ if (command in this.activeEditor.commands) {
2700
+ this.activeEditor.commands[command](argument);
2701
+ }
2702
+ },
2703
+ /**
2704
+ * Toggles bold formatting for text
2705
+ * @param {Object} params - Command parameters
2706
+ * @param {CommandItem} params.item - The command item
2707
+ * @param {*} params.argument - Command arguments
2708
+ * @returns {void}
2709
+ */
2710
+ toggleBold: ({ item, argument }) => {
2711
+ let command = item.command;
2712
+ if (command in this.activeEditor.commands) {
2713
+ this.activeEditor.commands[command](argument);
2714
+ this.activeEditor.commands.toggleFieldAnnotationsFormat("bold", true);
2715
+ }
2716
+ this.updateToolbarState();
2717
+ },
2718
+ /**
2719
+ * Toggles italic formatting for text
2720
+ * @param {Object} params - Command parameters
2721
+ * @param {CommandItem} params.item - The command item
2722
+ * @param {*} params.argument - Command arguments
2723
+ * @returns {void}
2724
+ */
2725
+ toggleItalic: ({ item, argument }) => {
2726
+ let command = item.command;
2727
+ if (command in this.activeEditor.commands) {
2728
+ this.activeEditor.commands[command](argument);
2729
+ this.activeEditor.commands.toggleFieldAnnotationsFormat("italic", true);
2730
+ }
2731
+ this.updateToolbarState();
2732
+ },
2733
+ /**
2734
+ * Toggles underline formatting for text
2735
+ * @param {Object} params - Command parameters
2736
+ * @param {CommandItem} params.item - The command item
2737
+ * @param {*} params.argument - Command arguments
2738
+ * @returns {void}
2739
+ */
2740
+ toggleUnderline: ({ item, argument }) => {
2741
+ let command = item.command;
2742
+ if (command in this.activeEditor.commands) {
2743
+ this.activeEditor.commands[command](argument);
2744
+ this.activeEditor.commands.toggleFieldAnnotationsFormat("underline", true);
2745
+ }
2746
+ this.updateToolbarState();
2747
+ },
2748
+ /**
2749
+ * Toggles link formatting and updates cursor position
2750
+ * @param {Object} params - Command parameters
2751
+ * @param {CommandItem} params.item - The command item
2752
+ * @param {*} params.argument - Command arguments
2753
+ * @returns {void}
2754
+ */
2755
+ toggleLink: ({ item, argument }) => {
2756
+ let command = item.command;
2757
+ if (command in this.activeEditor.commands) {
2758
+ this.activeEditor.commands[command](argument);
2759
+ const { view } = this.activeEditor;
2760
+ let { selection } = view.state;
2761
+ if (this.activeEditor.options.isHeaderOrFooter) {
2762
+ selection = this.activeEditor.options.lastSelection;
2763
+ }
2764
+ const endPos = selection.$to.pos;
2765
+ const newSelection = new TextSelection(view.state.doc.resolve(endPos));
2766
+ const tr = view.state.tr.setSelection(newSelection);
2767
+ const state = view.state.apply(tr);
2768
+ view.updateState(state);
2769
+ if (!this.activeEditor.options.isHeaderOrFooter) {
2770
+ setTimeout(() => {
2771
+ view.focus();
2772
+ }, 100);
2773
+ }
2774
+ }
2775
+ this.updateToolbarState();
2776
+ },
2777
+ /**
2778
+ * Inserts a table into the document
2779
+ * @param {Object} params - Command parameters
2780
+ * @param {CommandItem} params.item - The command item
2781
+ * @param {Object} params.argument - Table configuration
2782
+ * @returns {void}
2783
+ */
2784
+ insertTable: ({ item, argument }) => {
2785
+ __privateMethod(this, _SuperToolbar_instances, runCommandWithArgumentOnly_fn).call(this, { item, argument });
2786
+ },
2787
+ /**
2788
+ * Executes a table-related command
2789
+ * @param {Object} params - Command parameters
2790
+ * @param {Object} params.argument - The table command and its parameters
2791
+ * @param {string} params.argument.command - The specific table command to execute
2792
+ * @returns {void}
2793
+ */
2794
+ executeTableCommand: ({ argument }) => {
2795
+ if (!argument) return;
2796
+ let command = argument.command;
2797
+ if (command in this.activeEditor.commands) {
2798
+ this.activeEditor.commands[command](argument);
2799
+ }
2800
+ this.updateToolbarState();
2801
+ }
2802
+ });
2803
+ /**
2804
+ * Handler for toolbar resize events
2805
+ * @returns {void}
2806
+ */
2807
+ __publicField(this, "onToolbarResize", () => {
2808
+ __privateMethod(this, _SuperToolbar_instances, makeToolbarItems_fn).call(this, {
2809
+ superToolbar: this,
2810
+ icons: this.config.icons,
2811
+ texts: this.config.texts,
2812
+ fonts: this.config.fonts,
2813
+ hideButtons: this.config.hideButtons,
2814
+ isDev: this.isDev
2815
+ });
2816
+ if (this.role === "viewer") {
2817
+ __privateMethod(this, _SuperToolbar_instances, deactivateAll_fn).call(this);
2818
+ }
2819
+ });
2820
+ this.config = { ...this.config, ...config };
2821
+ this.toolbarItems = [];
2822
+ this.overflowItems = [];
2823
+ this.documentMode = config.documentMode || "editing";
2824
+ this.isDev = config.isDev || false;
2825
+ this.superdoc = config.superdoc;
2826
+ this.role = config.role || "editor";
2827
+ this.toolbarContainer = null;
2828
+ if (this.config.editor) {
2829
+ this.config.mode = this.config.editor.options.mode;
2830
+ }
2831
+ this.config.icons = {
2832
+ ...toolbarIcons,
2833
+ ...config.icons
2834
+ };
2835
+ this.config.texts = {
2836
+ ...toolbarTexts,
2837
+ ...config.texts
2838
+ };
2839
+ this.config.hideButtons = config.hideButtons ?? true;
2840
+ this.config.responsiveToContainer = config.responsiveToContainer ?? false;
2841
+ if (!this.config.selector && this.config.element) {
2842
+ this.config.selector = this.config.element;
2843
+ }
2844
+ this.toolbarContainer = this.findElementBySelector(this.config.selector);
2845
+ __privateMethod(this, _SuperToolbar_instances, initToolbarGroups_fn).call(this);
2846
+ __privateMethod(this, _SuperToolbar_instances, makeToolbarItems_fn).call(this, {
2847
+ superToolbar: this,
2848
+ icons: this.config.icons,
2849
+ texts: this.config.texts,
2850
+ fonts: this.config.fonts,
2851
+ hideButtons: this.config.hideButtons,
2852
+ isDev: config.isDev
2853
+ });
2854
+ if (this.config.selector && !this.toolbarContainer) {
2855
+ return;
2856
+ }
2857
+ this.app = createApp(Toolbar);
2858
+ this.app.directive("click-outside", vClickOutside);
2859
+ this.app.config.globalProperties.$toolbar = this;
2860
+ if (this.toolbarContainer) {
2861
+ this.toolbar = this.app.mount(this.toolbarContainer);
2862
+ }
2863
+ this.activeEditor = config.editor || null;
2864
+ this.updateToolbarState();
2865
+ }
2866
+ findElementBySelector(selector) {
2867
+ let el = null;
2868
+ if (selector) {
2869
+ if (selector.startsWith("#") || selector.startsWith(".")) {
2870
+ el = document.querySelector(selector);
2871
+ } else {
2872
+ el = document.getElementById(selector);
2873
+ }
2874
+ if (!el) {
2875
+ return null;
2876
+ }
2877
+ }
2878
+ return el;
2879
+ }
2880
+ /**
2881
+ * Log debug information to the console
2882
+ * @param {...*} args - Arguments to log
2883
+ * @returns {void}
2884
+ */
2885
+ log(...args) {
2886
+ console.debug("[🎨 super-toolbar]", ...args);
2887
+ }
2888
+ /**
2889
+ * Set the zoom level
2890
+ * @param {number} percent_int - The zoom percentage as an integer
2891
+ * @returns {void}
2892
+ */
2893
+ setZoom(percent_int) {
2894
+ const allItems = [...this.toolbarItems, ...this.overflowItems];
2895
+ const item = allItems.find((item2) => item2.name.value === "zoom");
2896
+ __privateGet(this, _interceptedCommands).setZoom({ item, argument: percent_int });
2897
+ }
2898
+ /**
2899
+ * The toolbar expects an active Super Editor instance.
2900
+ * @param {Object} editor - The editor instance to attach to the toolbar
2901
+ * @returns {void}
2902
+ */
2903
+ setActiveEditor(editor) {
2904
+ this.activeEditor = editor;
2905
+ this.activeEditor.on("transaction", this.onEditorTransaction.bind(this));
2906
+ }
2907
+ /**
2908
+ * Get toolbar items by group name
2909
+ * @param {string} groupName - The name of the group
2910
+ * @returns {ToolbarItem[]} An array of toolbar items in the specified group
2911
+ */
2912
+ getToolbarItemByGroup(groupName) {
2913
+ return this.toolbarItems.filter((item) => (item.group?.value || "center") === groupName);
2914
+ }
2915
+ /**
2916
+ * Get a toolbar item by name
2917
+ * @param {string} name - The name of the toolbar item
2918
+ * @returns {ToolbarItem|undefined} The toolbar item with the specified name or undefined if not found
2919
+ */
2920
+ getToolbarItemByName(name) {
2921
+ return this.toolbarItems.find((item) => item.name.value === name);
2922
+ }
2923
+ /**
2924
+ * Update the toolbar state based on the current editor state
2925
+ * Updates active/inactive state of all toolbar items
2926
+ * @returns {void}
2927
+ */
2928
+ updateToolbarState() {
2929
+ __privateMethod(this, _SuperToolbar_instances, updateToolbarHistory_fn).call(this);
2930
+ __privateMethod(this, _SuperToolbar_instances, initDefaultFonts_fn).call(this);
2931
+ __privateMethod(this, _SuperToolbar_instances, updateHighlightColors_fn).call(this);
2932
+ if (!this.activeEditor || this.documentMode === "viewing") {
2933
+ __privateMethod(this, _SuperToolbar_instances, deactivateAll_fn).call(this);
2934
+ return;
2935
+ }
2936
+ const marks = getActiveFormatting(this.activeEditor);
2937
+ const inTable = isInTable(this.activeEditor.state);
2938
+ this.toolbarItems.forEach((item) => {
2939
+ item.resetDisabled();
2940
+ if (item.name.value === "linkedStyles") {
2941
+ if (this.activeEditor && !getQuickFormatList(this.activeEditor).length) {
2942
+ return item.deactivate();
2943
+ } else {
2944
+ return item.activate();
2945
+ }
2946
+ }
2947
+ const activeMark = marks.find((mark) => mark.name === item.name.value);
2948
+ if (activeMark) {
2949
+ item.activate(activeMark.attrs);
2950
+ } else {
2951
+ item.deactivate();
2952
+ }
2953
+ const styleIdMark = marks.find((mark) => mark.name === "styleId");
2954
+ if (!activeMark && styleIdMark?.attrs.styleId) {
2955
+ const markToStyleMap = {
2956
+ fontSize: "font-size",
2957
+ fontFamily: "font-family",
2958
+ bold: "bold",
2959
+ textAlign: "textAlign"
2960
+ };
2961
+ const linkedStyles = this.activeEditor.converter?.linkedStyles.find(
2962
+ (style) => style.id === styleIdMark.attrs.styleId
2963
+ );
2964
+ if (linkedStyles && linkedStyles.definition && linkedStyles.definition.styles && markToStyleMap[item.name.value] in linkedStyles.definition.styles) {
2965
+ const linkedStylesItem = linkedStyles.definition.styles[markToStyleMap[item.name.value]];
2966
+ const value = {
2967
+ [item.name.value]: linkedStylesItem
2968
+ };
2969
+ item.activate(value);
2970
+ }
2971
+ }
2972
+ const spacingAttr = marks.find((mark) => mark.name === "spacing");
2973
+ if (item.name.value === "lineHeight" && (activeMark?.attrs?.lineHeight || spacingAttr)) {
2974
+ item.selectedValue.value = activeMark?.attrs?.lineHeight || spacingAttr.attrs?.spacing?.line || "";
2975
+ }
2976
+ if (item.name.value === "tableActions") {
2977
+ item.disabled.value = !inTable;
2978
+ }
2979
+ const listNumberingType = marks.find((mark) => mark.name === "listNumberingType")?.attrs?.listNumberingType;
2980
+ if (item.name.value === "list" && listNumberingType === "bullet") {
2981
+ item.activate();
2982
+ } else if (item.name.value === "numberedlist" && listNumberingType && listNumberingType !== "bullet") {
2983
+ item.activate();
2984
+ }
2985
+ });
2986
+ }
2987
+ /**
2988
+ * React to editor transactions. Might want to debounce this.
2989
+ * @param {Object} params - Transaction parameters
2990
+ * @param {Object} params.transaction - The transaction object
2991
+ * @returns {void}
2992
+ */
2993
+ onEditorTransaction({ transaction }) {
2994
+ if (!transaction.docChanged && !transaction.selectionSet) return;
2995
+ this.updateToolbarState();
2996
+ }
2997
+ /**
2998
+ * Main handler for toolbar commands
2999
+ * @param {CommandItem} params - Command parameters
3000
+ * @param {ToolbarItem} params.item - An instance of the useToolbarItem composable
3001
+ * @param {*} [params.argument] - The argument passed to the command
3002
+ * @returns {*} The result of the executed command, undefined if no result is returned
3003
+ */
3004
+ emitCommand({ item, argument, option }) {
3005
+ if (this.activeEditor && !this.activeEditor.options.isHeaderOrFooter) {
3006
+ this.activeEditor.focus();
3007
+ }
3008
+ const { command } = item;
3009
+ if (!command) {
3010
+ return;
3011
+ }
3012
+ this.log("(emmitCommand) Command:", command, "\n item:", item, "\n argument:", argument, "\n option:", option);
3013
+ if (command in __privateGet(this, _interceptedCommands)) {
3014
+ return __privateGet(this, _interceptedCommands)[command]({ item, argument });
3015
+ }
3016
+ if (this.activeEditor && this.activeEditor.commands && command in this.activeEditor.commands) {
3017
+ this.activeEditor.commands[command](argument);
3018
+ } else if (typeof command === "function") {
3019
+ command({ item, argument, option });
3020
+ } else {
3021
+ const error = new Error(`[super-toolbar 🎨] Command not found: ${command}`);
3022
+ this.emit("exception", { error, editor: this.activeEditor });
3023
+ throw error;
3024
+ }
3025
+ this.updateToolbarState();
3026
+ }
3027
+ }
3028
+ _SuperToolbar_instances = new WeakSet();
3029
+ /**
3030
+ * Initiate toolbar groups
3031
+ * @private
3032
+ * @returns {void}
3033
+ */
3034
+ initToolbarGroups_fn = function() {
3035
+ if (this.config.groups && !Array.isArray(this.config.groups) && Object.keys(this.config.groups).length) {
3036
+ this.config.toolbarGroups = Object.keys(this.config.groups);
3037
+ }
3038
+ };
3039
+ _interceptedCommands = new WeakMap();
3040
+ /**
3041
+ * Create toolbar items based on configuration
3042
+ * @private
3043
+ * @param {SuperToolbar} options.superToolbar - The toolbar instance
3044
+ * @param {Object} options.icons - Icons to use for toolbar items
3045
+ * @param {Object} options.texts - Texts to use for toolbar items
3046
+ * @param {Array} options.fonts - Fonts for the toolbar item
3047
+ * @param {boolean} options.isDev - Whether in development mode
3048
+ * @returns {void}
3049
+ */
3050
+ makeToolbarItems_fn = function({ superToolbar, icons: icons2, texts, fonts, hideButtons, isDev = false } = {}) {
3051
+ const documentWidth = document.documentElement.clientWidth;
3052
+ const containerWidth = this.toolbarContainer?.offsetWidth ?? 0;
3053
+ const availableWidth = this.config.responsiveToContainer ? containerWidth : documentWidth;
3054
+ const { defaultItems, overflowItems } = makeDefaultItems({
3055
+ superToolbar,
3056
+ toolbarIcons: icons2,
3057
+ toolbarTexts: texts,
3058
+ toolbarFonts: fonts,
3059
+ hideButtons,
3060
+ availableWidth,
3061
+ role: this.role,
3062
+ isDev
3063
+ });
3064
+ const customItems = this.config.customButtons || [];
3065
+ if (customItems.length) {
3066
+ defaultItems.push(...customItems.map((item) => useToolbarItem({ ...item })));
3067
+ }
3068
+ let allConfigItems = [
3069
+ ...defaultItems.map((item) => item.name.value),
3070
+ ...overflowItems.map((item) => item.name.value)
3071
+ ];
3072
+ if (this.config.groups) allConfigItems = Object.values(this.config.groups).flatMap((item) => item);
3073
+ const filteredItems = defaultItems.filter((item) => allConfigItems.includes(item.name.value)).filter((item) => !this.config.excludeItems.includes(item.name.value));
3074
+ this.toolbarItems = filteredItems;
3075
+ this.overflowItems = overflowItems.filter((item) => allConfigItems.includes(item.name.value));
3076
+ };
3077
+ /**
3078
+ * Initialize default fonts from the editor
3079
+ * @private
3080
+ * @returns {void}
3081
+ */
3082
+ initDefaultFonts_fn = function() {
3083
+ if (!this.activeEditor || !this.activeEditor.converter) return;
3084
+ const { typeface = "Arial", fontSizePt = 12 } = this.activeEditor.converter.getDocumentDefaultStyles() ?? {};
3085
+ const fontSizeItem = this.toolbarItems.find((item) => item.name.value === "fontSize");
3086
+ if (fontSizeItem) fontSizeItem.defaultLabel.value = fontSizePt;
3087
+ const fontFamilyItem = this.toolbarItems.find((item) => item.name.value === "fontFamily");
3088
+ if (fontFamilyItem) fontFamilyItem.defaultLabel.value = typeface;
3089
+ };
3090
+ /**
3091
+ * Update highlight color options based on document colors
3092
+ * @private
3093
+ * @returns {void}
3094
+ */
3095
+ updateHighlightColors_fn = function() {
3096
+ if (!this.activeEditor || !this.activeEditor.converter) return;
3097
+ if (!this.activeEditor.converter.docHiglightColors.size) return;
3098
+ const highlightItem = this.toolbarItems.find((item) => item.name.value === "highlight");
3099
+ if (!highlightItem) return;
3100
+ const pickerColorOptions = getAvailableColorOptions();
3101
+ const perChunk = 7;
3102
+ const result = Array.from(this.activeEditor.converter.docHiglightColors).reduce((resultArray, item, index) => {
3103
+ const chunkIndex = Math.floor(index / perChunk);
3104
+ if (!resultArray[chunkIndex]) {
3105
+ resultArray[chunkIndex] = [];
3106
+ }
3107
+ if (!pickerColorOptions.includes(item)) resultArray[chunkIndex].push(makeColorOption(item));
3108
+ return resultArray;
3109
+ }, []);
3110
+ const option = {
3111
+ key: "color",
3112
+ type: "render",
3113
+ render: () => renderColorOptions(this, highlightItem, result, true)
3114
+ };
3115
+ highlightItem.nestedOptions.value = [option];
3116
+ };
3117
+ /**
3118
+ * Deactivate all toolbar items
3119
+ * @private
3120
+ * @returns {void}
3121
+ */
3122
+ deactivateAll_fn = function() {
3123
+ this.activeEditor = null;
3124
+ this.toolbarItems.forEach((item) => {
3125
+ const { allowWithoutEditor } = item;
3126
+ if (allowWithoutEditor.value) return;
3127
+ item.setDisabled(true);
3128
+ });
3129
+ };
3130
+ /**
3131
+ * Update undo/redo history state in the toolbar
3132
+ * @private
3133
+ * @returns {void}
3134
+ */
3135
+ updateToolbarHistory_fn = function() {
3136
+ if (!this.activeEditor) return;
3137
+ if (this.activeEditor.options.ydoc) {
3138
+ const undoManager = yUndoPluginKey.getState(this.activeEditor.state)?.undoManager;
3139
+ this.undoDepth = undoManager?.undoStack.length || 0;
3140
+ this.redoDepth = undoManager?.redoStack.length || 0;
3141
+ } else {
3142
+ this.undoDepth = undoDepth(this.activeEditor.state);
3143
+ this.redoDepth = redoDepth(this.activeEditor.state);
3144
+ }
3145
+ };
3146
+ /**
3147
+ * Run a command that requires an argument
3148
+ * @private
3149
+ * @param {CommandItem} params - Command parameters
3150
+ * @param {ToolbarItem} params.item - The toolbar item
3151
+ * @param {*} params.argument - The argument for the command
3152
+ * @param {boolean} params.noArgumentCallback - Whether to call callback even if argument === 'none'
3153
+ * @param {Function} [callback] - Optional callback to run after the command
3154
+ * @returns {void}
3155
+ */
3156
+ runCommandWithArgumentOnly_fn = function({ item, argument, noArgumentCallback = false }, callback) {
3157
+ if (!argument || !this.activeEditor) return;
3158
+ let command = item.command;
3159
+ const noArgumentCommand = item.noArgumentCommand;
3160
+ if (argument === "none" && this.activeEditor && this.activeEditor.commands && noArgumentCommand in this.activeEditor.commands) {
3161
+ this.activeEditor.commands[noArgumentCommand]();
3162
+ if (typeof callback === "function" && noArgumentCallback) callback(argument);
3163
+ this.updateToolbarState();
3164
+ return;
3165
+ }
3166
+ if (this.activeEditor && this.activeEditor.commands && command in this.activeEditor.commands) {
3167
+ this.activeEditor.commands[command](argument);
3168
+ if (typeof callback === "function") callback(argument);
3169
+ this.updateToolbarState();
3170
+ }
3171
+ };
3172
+ const ICONS = {
3173
+ addRowBefore: plusIconSvg,
3174
+ addRowAfter: plusIconSvg,
3175
+ addColumnBefore: plusIconSvg,
3176
+ addColumnAfter: plusIconSvg,
3177
+ deleteRow: trashIconSvg,
3178
+ deleteColumn: trashIconSvg,
3179
+ deleteTable: trashIconSvg,
3180
+ deleteBorders: borderNoneIconSvg,
3181
+ mergeCells: arrowsToDotIconSvg,
3182
+ splitCell: arrowsLeftRightIconSvg,
3183
+ fixTables: wrenchIconSvg,
3184
+ ai: magicWandIcon,
3185
+ link: linkIconSvg,
3186
+ table: tableIconSvg,
3187
+ cut: scissorsIconSvg,
3188
+ copy: copyIconSvg,
3189
+ paste: pasteIconSvg,
3190
+ addDocumentSection: plusIconSvg,
3191
+ removeDocumentSection: trashIconSvg
3192
+ };
3193
+ const TEXTS = {
3194
+ addRowBefore: "Insert row above",
3195
+ addRowAfter: "Insert row below",
3196
+ addColumnBefore: "Insert column left",
3197
+ addColumnAfter: "Insert column right",
3198
+ deleteRow: "Delete row",
3199
+ deleteColumn: "Delete column",
3200
+ deleteTable: "Delete table",
3201
+ transparentBorders: "Transparent borders",
3202
+ mergeCells: "Merge cells",
3203
+ splitCell: "Split cell",
3204
+ fixTables: "Fix tables",
3205
+ insertText: "Insert text",
3206
+ replaceText: "Replace text",
3207
+ insertLink: "Insert link",
3208
+ insertTable: "Insert table",
3209
+ editTable: "Edit table",
3210
+ cut: "Cut",
3211
+ copy: "Copy",
3212
+ paste: "Paste",
3213
+ removeDocumentSection: "Remove section",
3214
+ createDocumentSection: "Create section"
3215
+ };
3216
+ const tableActionsOptions = [
3217
+ {
3218
+ label: TEXTS.addRowBefore,
3219
+ command: "addRowBefore",
3220
+ icon: ICONS.addRowBefore,
3221
+ props: {
3222
+ "data-item": "btn-tableActions-option",
3223
+ ariaLabel: "Add row before"
3224
+ }
3225
+ },
3226
+ {
3227
+ label: TEXTS.addRowAfter,
3228
+ command: "addRowAfter",
3229
+ icon: ICONS.addRowAfter,
3230
+ props: {
3231
+ "data-item": "btn-tableActions-option",
3232
+ ariaLabel: "Add row after"
3233
+ }
3234
+ },
3235
+ {
3236
+ label: TEXTS.addColumnBefore,
3237
+ command: "addColumnBefore",
3238
+ icon: ICONS.addColumnBefore,
3239
+ props: {
3240
+ "data-item": "btn-tableActions-option",
3241
+ ariaLabel: "Add column before"
3242
+ }
3243
+ },
3244
+ {
3245
+ label: TEXTS.addColumnAfter,
3246
+ command: "addColumnAfter",
3247
+ icon: ICONS.addColumnAfter,
3248
+ bottomBorder: true,
3249
+ props: {
3250
+ "data-item": "btn-tableActions-option",
3251
+ ariaLabel: "Add column after"
3252
+ }
3253
+ },
3254
+ {
3255
+ label: TEXTS.deleteRow,
3256
+ command: "deleteRow",
3257
+ icon: ICONS.deleteRow,
3258
+ props: {
3259
+ "data-item": "btn-tableActions-option",
3260
+ ariaLabel: "Delete row"
3261
+ }
3262
+ },
3263
+ {
3264
+ label: TEXTS.deleteColumn,
3265
+ command: "deleteColumn",
3266
+ icon: ICONS.deleteColumn,
3267
+ props: {
3268
+ "data-item": "btn-tableActions-option",
3269
+ ariaLabel: "Delete column"
3270
+ }
3271
+ },
3272
+ {
3273
+ label: TEXTS.deleteTable,
3274
+ command: "deleteTable",
3275
+ icon: ICONS.deleteTable,
3276
+ props: {
3277
+ "data-item": "btn-tableActions-option",
3278
+ ariaLabel: "Delete table"
3279
+ }
3280
+ },
3281
+ {
3282
+ label: TEXTS.transparentBorders,
3283
+ command: "deleteCellAndTableBorders",
3284
+ icon: ICONS.deleteBorders,
3285
+ bottomBorder: true,
3286
+ props: {
3287
+ "data-item": "btn-tableActions-option",
3288
+ ariaLabel: "Delete cell and table borders"
3289
+ }
3290
+ },
3291
+ {
3292
+ label: TEXTS.mergeCells,
3293
+ command: "mergeCells",
3294
+ icon: ICONS.mergeCells,
3295
+ props: {
3296
+ "data-item": "btn-tableActions-option",
3297
+ ariaLabel: "Merge cells"
3298
+ }
3299
+ },
3300
+ {
3301
+ label: TEXTS.splitCell,
3302
+ command: "splitCell",
3303
+ icon: ICONS.splitCell,
3304
+ props: {
3305
+ "data-item": "btn-tableActions-option",
3306
+ ariaLabel: "Split cells"
3307
+ }
3308
+ },
3309
+ {
3310
+ label: TEXTS.fixTables,
3311
+ command: "fixTables",
3312
+ icon: ICONS.fixTables,
3313
+ props: {
3314
+ "data-item": "btn-tableActions-option",
3315
+ ariaLabel: "Fix tables"
3316
+ }
3317
+ }
3318
+ ];
3319
+ const TRIGGERS = {
3320
+ slash: "slash",
3321
+ click: "click"
3322
+ };
3323
+ const getPropsByItemId = (itemId, props) => {
3324
+ const editor = props.editor;
3325
+ const baseProps = {
3326
+ editor: markRaw(props.editor)
3327
+ };
3328
+ switch (itemId) {
3329
+ case "insert-text":
3330
+ const { state } = editor.view;
3331
+ const { from, to, empty } = state.selection;
3332
+ const selectedText = !empty ? state.doc.textBetween(from, to) : "";
3333
+ return {
3334
+ ...baseProps,
3335
+ selectedText,
3336
+ handleClose: props.closePopover || (() => null),
3337
+ apiKey: editor.options?.aiApiKey,
3338
+ endpoint: editor.options?.aiEndpoint
3339
+ };
3340
+ case "insert-link":
3341
+ return baseProps;
3342
+ case "insert-table":
3343
+ return {
3344
+ ...baseProps,
3345
+ onSelect: ({ rows, cols }) => {
3346
+ editor.commands.insertTable({ rows, cols });
3347
+ props.closePopover();
3348
+ }
3349
+ };
3350
+ case "edit-table":
3351
+ return {
3352
+ ...baseProps,
3353
+ options: tableActionsOptions,
3354
+ onSelect: ({ command }) => {
3355
+ if (editor.commands[command]) {
3356
+ editor.commands[command]();
3357
+ }
3358
+ props.closePopover();
3359
+ }
3360
+ };
3361
+ case "copy":
3362
+ case "paste":
3363
+ return {
3364
+ ...baseProps
3365
+ // These actions don't need additional props
3366
+ };
3367
+ default:
3368
+ return baseProps;
3369
+ }
3370
+ };
3371
+ async function getEditorContext(editor, event) {
3372
+ const { view } = editor;
3373
+ const { state } = view;
3374
+ const { from, to, empty } = state.selection;
3375
+ const selectedText = !empty ? state.doc.textBetween(from, to) : "";
3376
+ let pos = null;
3377
+ let node = null;
3378
+ if (event) {
3379
+ const coords = { left: event.clientX, top: event.clientY };
3380
+ pos = view.posAtCoords(coords)?.pos ?? null;
3381
+ node = pos !== null ? state.doc.nodeAt(pos) : null;
3382
+ } else {
3383
+ pos = from;
3384
+ node = state.doc.nodeAt(pos);
3385
+ }
3386
+ const clipboardContent = await readFromClipboard(state);
3387
+ return {
3388
+ editor,
3389
+ selectedText,
3390
+ pos,
3391
+ node,
3392
+ event,
3393
+ clipboardContent
3394
+ };
3395
+ }
3396
+ const onMarginClickCursorChange = (event, editor) => {
3397
+ const y = event.clientY;
3398
+ const x = event.clientX;
3399
+ const { view } = editor;
3400
+ const editorRect = view.dom.getBoundingClientRect();
3401
+ let coords = {
3402
+ left: 0,
3403
+ top: y
3404
+ };
3405
+ let isRightMargin = false;
3406
+ if (x > editorRect.right) {
3407
+ coords.left = editorRect.left + editorRect.width - 1;
3408
+ isRightMargin = true;
3409
+ } else if (x < editorRect.left) {
3410
+ coords.left = editorRect.left;
3411
+ }
3412
+ const pos = view.posAtCoords(coords)?.pos;
3413
+ if (pos) {
3414
+ let cursorPos = pos;
3415
+ if (isRightMargin) {
3416
+ const $pos = view.state.doc.resolve(pos);
3417
+ const charOffset = $pos.textOffset;
3418
+ const node = view.state.doc.nodeAt(pos);
3419
+ const text = node?.text;
3420
+ const charAtPos = text?.charAt(charOffset);
3421
+ cursorPos = node?.isText && charAtPos !== " " ? pos - 1 : pos;
3422
+ }
3423
+ const transaction = view.state.tr.setSelection(TextSelection$1.create(view.state.doc, cursorPos));
3424
+ view.dispatch(transaction);
3425
+ view.focus();
3426
+ }
3427
+ };
3428
+ const checkNodeSpecificClicks = (editor, event, popoverControls) => {
3429
+ if (!editor) return;
3430
+ if (selectionHasNodeOrMark(editor.view.state, "link", { requireEnds: true })) {
3431
+ popoverControls.component = LinkInput;
3432
+ popoverControls.position = {
3433
+ left: `${event.clientX - editor.element.getBoundingClientRect().left}px`,
3434
+ top: `${event.clientY - editor.element.getBoundingClientRect().top + 15}px`
3435
+ };
3436
+ popoverControls.props = {
3437
+ showInput: true
3438
+ };
3439
+ popoverControls.visible = true;
3440
+ }
3441
+ };
3442
+ function selectionHasNodeOrMark(state, name, options = {}) {
3443
+ const { requireEnds = false } = options;
3444
+ const $from = state.selection.$from;
3445
+ const $to = state.selection.$to;
3446
+ if (requireEnds) {
3447
+ for (let d = $from.depth; d > 0; d--) {
3448
+ if ($from.node(d).type.name === name) {
3449
+ return true;
3450
+ }
3451
+ }
3452
+ for (let d = $to.depth; d > 0; d--) {
3453
+ if ($to.node(d).type.name === name) {
3454
+ return true;
3455
+ }
3456
+ }
3457
+ } else {
3458
+ for (let d = $from.depth; d > 0; d--) {
3459
+ if ($from.node(d).type.name === name) {
3460
+ return true;
3461
+ }
3462
+ }
3463
+ }
3464
+ const markType = state.schema.marks[name];
3465
+ if (markType) {
3466
+ const { from, to, empty } = state.selection;
3467
+ if (requireEnds) {
3468
+ const fromMarks = markType.isInSet($from.marks());
3469
+ const toMarks = markType.isInSet($to.marks());
3470
+ if (fromMarks || toMarks) {
3471
+ return true;
3472
+ }
3473
+ if (empty && markType.isInSet(state.storedMarks || $from.marks())) {
3474
+ return true;
3475
+ }
3476
+ } else {
3477
+ if (empty) {
3478
+ if (markType.isInSet(state.storedMarks || $from.marks())) {
3479
+ return true;
3480
+ }
3481
+ } else {
3482
+ let hasMark = false;
3483
+ state.doc.nodesBetween(from, to, (node) => {
3484
+ if (markType.isInSet(node.marks)) {
3485
+ hasMark = true;
3486
+ return false;
3487
+ }
3488
+ });
3489
+ if (hasMark) return true;
3490
+ }
3491
+ }
3492
+ }
3493
+ return false;
3494
+ }
3495
+ function moveCursorToMouseEvent(event, editor) {
3496
+ const { view } = editor;
3497
+ const coords = { left: event.clientX, top: event.clientY };
3498
+ const pos = view.posAtCoords(coords)?.pos;
3499
+ if (typeof pos === "number") {
3500
+ const tr = view.state.tr.setSelection(TextSelection$1.create(view.state.doc, pos));
3501
+ view.dispatch(tr);
3502
+ view.focus();
3503
+ }
3504
+ }
3505
+ const isModuleEnabled = (editorOptions, moduleName) => {
3506
+ switch (moduleName) {
3507
+ case "ai":
3508
+ return !!editorOptions?.isAiEnabled;
3509
+ // Example for future use cases
3510
+ // case 'comments':
3511
+ // return !!editorOptions?.isCommentsEnabled;
3512
+ default:
3513
+ return true;
3514
+ }
3515
+ };
3516
+ function getItems(context) {
3517
+ const { editor, selectedText, trigger, clipboardContent } = context;
3518
+ const isInTable2 = selectionHasNodeOrMark(editor.view.state, "table", { requireEnds: true });
3519
+ const isInSectionNode = selectionHasNodeOrMark(editor.view.state, "documentSection", { requireEnds: true });
3520
+ const sections = [
3521
+ {
3522
+ id: "ai-content",
3523
+ items: [
3524
+ {
3525
+ id: "insert-text",
3526
+ label: selectedText ? TEXTS.replaceText : TEXTS.insertText,
3527
+ icon: ICONS.ai,
3528
+ component: AIWriter,
3529
+ action: (editor2) => {
3530
+ if (editor2?.commands && typeof editor2.commands?.insertAiMark === "function") {
3531
+ editor2.commands.insertAiMark();
3532
+ }
3533
+ },
3534
+ allowedTriggers: [TRIGGERS.slash, TRIGGERS.click],
3535
+ requiresModule: "ai"
3536
+ }
3537
+ ]
3538
+ },
3539
+ {
3540
+ id: "document-sections",
3541
+ items: [
3542
+ {
3543
+ id: "insert-document-section",
3544
+ label: TEXTS.createDocumentSection,
3545
+ icon: ICONS.addDocumentSection,
3546
+ action: (editor2) => {
3547
+ editor2.commands.createDocumentSection();
3548
+ },
3549
+ allowedTriggers: [TRIGGERS.click]
3550
+ },
3551
+ {
3552
+ id: "remove-section",
3553
+ label: TEXTS.removeDocumentSection,
3554
+ icon: ICONS.removeDocumentSection,
3555
+ action: (editor2) => {
3556
+ editor2.commands.removeSectionAtSelection();
3557
+ },
3558
+ allowedTriggers: [TRIGGERS.click],
3559
+ requiresSectionParent: true
3560
+ }
3561
+ ]
3562
+ },
3563
+ {
3564
+ id: "general",
3565
+ items: [
3566
+ {
3567
+ id: "insert-link",
3568
+ label: TEXTS.insertLink,
3569
+ icon: ICONS.link,
3570
+ component: LinkInput,
3571
+ allowedTriggers: [TRIGGERS.click]
3572
+ },
3573
+ {
3574
+ id: "insert-table",
3575
+ label: TEXTS.insertTable,
3576
+ icon: ICONS.table,
3577
+ component: TableGrid,
3578
+ allowedTriggers: [TRIGGERS.slash, TRIGGERS.click]
3579
+ },
3580
+ {
3581
+ id: "edit-table",
3582
+ label: TEXTS.editTable,
3583
+ icon: ICONS.table,
3584
+ component: TableActions,
3585
+ allowedTriggers: [TRIGGERS.slash, TRIGGERS.click],
3586
+ requiresTableParent: true
3587
+ }
3588
+ ]
3589
+ },
3590
+ {
3591
+ id: "clipboard",
3592
+ items: [
3593
+ {
3594
+ id: "cut",
3595
+ label: TEXTS.cut,
3596
+ icon: ICONS.cut,
3597
+ action: (editor2) => {
3598
+ editor2.view.focus();
3599
+ document.execCommand("cut");
3600
+ },
3601
+ allowedTriggers: [TRIGGERS.click],
3602
+ requiresSelection: true
3603
+ },
3604
+ {
3605
+ id: "copy",
3606
+ label: TEXTS.copy,
3607
+ icon: ICONS.copy,
3608
+ action: (editor2) => {
3609
+ editor2.view.focus();
3610
+ document.execCommand("copy");
3611
+ },
3612
+ allowedTriggers: [TRIGGERS.click],
3613
+ requiresSelection: true
3614
+ },
3615
+ {
3616
+ id: "paste",
3617
+ label: TEXTS.paste,
3618
+ icon: ICONS.paste,
3619
+ action: async (editor2) => {
3620
+ try {
3621
+ const clipboardItems = await navigator.clipboard.read();
3622
+ let html = "";
3623
+ let text = "";
3624
+ for (const item of clipboardItems) {
3625
+ if (!html && item.types.includes("text/html")) {
3626
+ html = await (await item.getType("text/html")).text();
3627
+ }
3628
+ if (!text && item.types.includes("text/plain")) {
3629
+ text = await (await item.getType("text/plain")).text();
3630
+ }
3631
+ }
3632
+ const handled = handleClipboardPaste({ editor: editor2, view: editor2.view }, html, text);
3633
+ if (!handled) {
3634
+ const dataTransfer = new DataTransfer();
3635
+ if (html) dataTransfer.setData("text/html", html);
3636
+ if (text) dataTransfer.setData("text/plain", text);
3637
+ const event = new ClipboardEvent("paste", {
3638
+ clipboardData: dataTransfer,
3639
+ bubbles: true,
3640
+ cancelable: true
3641
+ });
3642
+ editor2.view.dom.dispatchEvent(event);
3643
+ }
3644
+ } catch (error) {
3645
+ console.warn("Failed to paste:", error);
3646
+ }
3647
+ },
3648
+ allowedTriggers: [TRIGGERS.click, TRIGGERS.slash],
3649
+ requiresClipboard: true
3650
+ }
3651
+ ]
3652
+ }
3653
+ ];
3654
+ const filteredSections = sections.map((section) => {
3655
+ const filteredItems = section.items.filter((item) => {
3656
+ if (item.requiresModule && !isModuleEnabled(editor?.options, item.requiresModule)) return false;
3657
+ if (item.requiresSelection && !selectedText) return false;
3658
+ if (!item.allowedTriggers.includes(trigger)) return false;
3659
+ if (item.requiresClipboard && !clipboardContent) return false;
3660
+ if (item.requiresTableParent && !isInTable2 || item.id === "insert-table" && isInTable2) return false;
3661
+ if (item.requiresSectionParent && !isInSectionNode) return false;
3662
+ return true;
3663
+ });
3664
+ return {
3665
+ ...section,
3666
+ items: filteredItems
3667
+ };
3668
+ }).filter((section) => section.items.length > 0);
3669
+ return filteredSections;
3670
+ }
3671
+ const _hoisted_1$3 = { class: "slash-menu-items" };
3672
+ const _hoisted_2$1 = {
3673
+ key: 0,
3674
+ class: "slash-menu-divider",
3675
+ tabindex: "0"
3676
+ };
3677
+ const _hoisted_3$1 = ["onClick"];
3678
+ const _hoisted_4 = ["innerHTML"];
3679
+ const _sfc_main$4 = {
3680
+ __name: "SlashMenu",
3681
+ props: {
3682
+ editor: {
3683
+ type: Object,
3684
+ required: true
3685
+ },
3686
+ openPopover: {
3687
+ type: Function,
3688
+ required: true
3689
+ },
3690
+ closePopover: {
3691
+ type: Function,
3692
+ required: true
3693
+ }
3694
+ },
3695
+ setup(__props) {
3696
+ const props = __props;
3697
+ const searchInput = ref(null);
3698
+ const searchQuery = ref("");
3699
+ const isOpen = ref(false);
3700
+ const menuPosition = ref({ left: "0px", top: "0px" });
3701
+ const menuRef = ref(null);
3702
+ const sections = ref([]);
3703
+ const selectedId = ref(null);
3704
+ const handleEditorUpdate = () => {
3705
+ if (!props.editor?.isEditable && isOpen.value) {
3706
+ closeMenu({ restoreCursor: false });
3707
+ }
3708
+ };
3709
+ const flattenedItems = computed(() => {
3710
+ const items = [];
3711
+ sections.value.forEach((section) => {
3712
+ section.items.forEach((item) => {
3713
+ items.push(item);
3714
+ });
3715
+ });
3716
+ return items;
3717
+ });
3718
+ const filteredItems = computed(() => {
3719
+ if (!searchQuery.value) {
3720
+ return flattenedItems.value;
3721
+ }
3722
+ return flattenedItems.value.filter((item) => item.label?.toLowerCase().includes(searchQuery.value.toLowerCase()));
3723
+ });
3724
+ const filteredSections = computed(() => {
3725
+ if (!searchQuery.value) {
3726
+ return sections.value;
3727
+ }
3728
+ return [
3729
+ {
3730
+ id: "search-results",
3731
+ items: filteredItems.value
3732
+ }
3733
+ ];
3734
+ });
3735
+ watch(isOpen, (open) => {
3736
+ if (open) {
3737
+ nextTick(() => {
3738
+ if (searchInput.value) {
3739
+ searchInput.value.focus();
3740
+ }
3741
+ });
3742
+ }
3743
+ });
3744
+ watch(flattenedItems, (newItems) => {
3745
+ if (newItems.length > 0) {
3746
+ selectedId.value = newItems[0].id;
3747
+ }
3748
+ });
3749
+ const handleGlobalKeyDown = (event) => {
3750
+ if (event.key === "Escape") {
3751
+ event.preventDefault();
3752
+ event.stopPropagation();
3753
+ closeMenu();
3754
+ props.editor?.view?.focus();
3755
+ return;
3756
+ }
3757
+ if (isOpen.value && (event.target === searchInput.value || menuRef.value && menuRef.value.contains(event.target))) {
3758
+ const currentItems = filteredItems.value;
3759
+ const currentIndex = currentItems.findIndex((item) => item.id === selectedId.value);
3760
+ switch (event.key) {
3761
+ case "ArrowDown": {
3762
+ event.preventDefault();
3763
+ if (currentIndex < currentItems.length - 1) {
3764
+ selectedId.value = currentItems[currentIndex + 1].id;
3765
+ }
3766
+ break;
3767
+ }
3768
+ case "ArrowUp": {
3769
+ event.preventDefault();
3770
+ if (currentIndex > 0) {
3771
+ selectedId.value = currentItems[currentIndex - 1].id;
3772
+ }
3773
+ break;
3774
+ }
3775
+ case "Enter": {
3776
+ event.preventDefault();
3777
+ const selectedItem = currentItems.find((item) => item.id === selectedId.value);
3778
+ if (selectedItem) {
3779
+ executeCommand(selectedItem);
3780
+ }
3781
+ break;
3782
+ }
3783
+ }
3784
+ }
3785
+ };
3786
+ const handleGlobalOutsideClick = (event) => {
3787
+ if (isOpen.value && menuRef.value && !menuRef.value.contains(event.target)) {
3788
+ moveCursorToMouseEvent(event, props.editor);
3789
+ closeMenu({ restoreCursor: false });
3790
+ }
3791
+ };
3792
+ const handleRightClick = async (event) => {
3793
+ const readOnly = !props.editor?.isEditable;
3794
+ const isHoldingCtrl = event.ctrlKey;
3795
+ if (readOnly || isHoldingCtrl) {
3796
+ return;
3797
+ }
3798
+ event.preventDefault();
3799
+ props.editor.view.dispatch(
3800
+ props.editor.view.state.tr.setMeta(SlashMenuPluginKey, {
3801
+ type: "open",
3802
+ pos: props.editor.view.state.selection.from,
3803
+ clientX: event.clientX,
3804
+ clientY: event.clientY
3805
+ })
3806
+ );
3807
+ searchQuery.value = "";
3808
+ const context = await getEditorContext(props.editor, event);
3809
+ sections.value = getItems({ ...context, trigger: "click" });
3810
+ selectedId.value = flattenedItems.value[0]?.id || null;
3811
+ };
3812
+ const executeCommand = async (item) => {
3813
+ if (props.editor) {
3814
+ item.action ? await item.action(props.editor) : null;
3815
+ if (item.component) {
3816
+ menuRef.value;
3817
+ const componentProps = getPropsByItemId(item.id, props);
3818
+ props.openPopover(markRaw(item.component), componentProps, {
3819
+ left: menuPosition.value.left,
3820
+ top: menuPosition.value.top
3821
+ });
3822
+ closeMenu({ restoreCursor: false });
3823
+ } else {
3824
+ const shouldRestoreCursor = item.id !== "paste";
3825
+ closeMenu({ restoreCursor: shouldRestoreCursor });
3826
+ }
3827
+ }
3828
+ };
3829
+ const closeMenu = (options = { restoreCursor: true }) => {
3830
+ if (props.editor?.view) {
3831
+ const pluginState = SlashMenuPluginKey.getState(props.editor.view.state);
3832
+ const { anchorPos } = pluginState;
3833
+ props.editor.view.dispatch(
3834
+ props.editor.view.state.tr.setMeta(SlashMenuPluginKey, {
3835
+ type: "close"
3836
+ })
3837
+ );
3838
+ if (options.restoreCursor && anchorPos !== null) {
3839
+ const tr = props.editor.view.state.tr.setSelection(
3840
+ props.editor.view.state.selection.constructor.near(props.editor.view.state.doc.resolve(anchorPos))
3841
+ );
3842
+ props.editor.view.dispatch(tr);
3843
+ props.editor.view.focus();
3844
+ }
3845
+ isOpen.value = false;
3846
+ searchQuery.value = "";
3847
+ sections.value = [];
3848
+ }
3849
+ };
3850
+ onMounted(() => {
3851
+ if (!props.editor) return;
3852
+ document.addEventListener("keydown", handleGlobalKeyDown);
3853
+ document.addEventListener("mousedown", handleGlobalOutsideClick);
3854
+ props.editor.on("update", handleEditorUpdate);
3855
+ props.editor.on("slashMenu:open", async (event) => {
3856
+ const readOnly = !props.editor?.isEditable;
3857
+ if (readOnly) return;
3858
+ isOpen.value = true;
3859
+ menuPosition.value = event.menuPosition;
3860
+ searchQuery.value = "";
3861
+ const context = await getEditorContext(props.editor);
3862
+ sections.value = getItems({ ...context, trigger: "slash" });
3863
+ selectedId.value = flattenedItems.value[0]?.id || null;
3864
+ });
3865
+ props.editor.view.dom.addEventListener("contextmenu", handleRightClick);
3866
+ props.editor.on("slashMenu:close", () => {
3867
+ isOpen.value = false;
3868
+ searchQuery.value = "";
3869
+ });
3870
+ });
3871
+ onBeforeUnmount(() => {
3872
+ document.removeEventListener("keydown", handleGlobalKeyDown);
3873
+ document.removeEventListener("mousedown", handleGlobalOutsideClick);
3874
+ if (props.editor) {
3875
+ try {
3876
+ props.editor.off("slashMenu:open");
3877
+ props.editor.off("slashMenu:close");
3878
+ props.editor.off("update", handleEditorUpdate);
3879
+ props.editor.view.dom.removeEventListener("contextmenu", handleRightClick);
3880
+ } catch (error) {
3881
+ }
3882
+ }
3883
+ });
3884
+ return (_ctx, _cache) => {
3885
+ return isOpen.value ? (openBlock(), createElementBlock("div", {
3886
+ key: 0,
3887
+ ref_key: "menuRef",
3888
+ ref: menuRef,
3889
+ class: "slash-menu",
3890
+ style: normalizeStyle(menuPosition.value),
3891
+ onMousedown: _cache[2] || (_cache[2] = withModifiers(() => {
3892
+ }, ["stop"]))
3893
+ }, [
3894
+ withDirectives(createElementVNode("input", {
3895
+ ref_key: "searchInput",
3896
+ ref: searchInput,
3897
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchQuery.value = $event),
3898
+ type: "text",
3899
+ class: "slash-menu-hidden-input",
3900
+ onKeydown: [
3901
+ handleGlobalKeyDown,
3902
+ _cache[1] || (_cache[1] = withModifiers(() => {
3903
+ }, ["stop"]))
3904
+ ]
3905
+ }, null, 544), [
3906
+ [vModelText, searchQuery.value]
3907
+ ]),
3908
+ createElementVNode("div", _hoisted_1$3, [
3909
+ (openBlock(true), createElementBlock(Fragment, null, renderList(filteredSections.value, (section, sectionIndex) => {
3910
+ return openBlock(), createElementBlock(Fragment, {
3911
+ key: section.id
3912
+ }, [
3913
+ sectionIndex > 0 && section.items.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2$1)) : createCommentVNode("", true),
3914
+ (openBlock(true), createElementBlock(Fragment, null, renderList(section.items, (item) => {
3915
+ return openBlock(), createElementBlock("div", {
3916
+ key: item.id,
3917
+ class: normalizeClass(["slash-menu-item", { "is-selected": item.id === selectedId.value }]),
3918
+ onClick: ($event) => executeCommand(item)
3919
+ }, [
3920
+ item.icon ? (openBlock(), createElementBlock("span", {
3921
+ key: 0,
3922
+ class: "slash-menu-item-icon",
3923
+ innerHTML: item.icon
3924
+ }, null, 8, _hoisted_4)) : createCommentVNode("", true),
3925
+ createElementVNode("span", null, toDisplayString(item.label), 1)
3926
+ ], 10, _hoisted_3$1);
3927
+ }), 128))
3928
+ ], 64);
3929
+ }), 128))
3930
+ ])
3931
+ ], 36)) : createCommentVNode("", true);
3932
+ };
3933
+ }
3934
+ };
3935
+ function adjustPaginationBreaks(editorElem, editor) {
3936
+ if (!editorElem.value || !editor?.value?.options?.scale) return;
3937
+ const zoom = editor.value.options.scale;
3938
+ const bounds = editorElem.value.getBoundingClientRect();
3939
+ const breakNodes = editorElem.value.querySelectorAll(".pagination-break-wrapper");
3940
+ let firstLeft;
3941
+ breakNodes.forEach((node) => {
3942
+ const nodeBounds = node.getBoundingClientRect();
3943
+ const left = (nodeBounds.left - bounds.left) / zoom * -1 + 1;
3944
+ if (!firstLeft) firstLeft = left;
3945
+ if (left !== firstLeft) {
3946
+ const diff = left - firstLeft;
3947
+ node.style.transform = `translateX(${diff}px)`;
3948
+ }
3949
+ });
3950
+ }
3951
+ const _hoisted_1$2 = { class: "numbering" };
3952
+ const MIN_WIDTH = 200;
3953
+ const alignment = "flex-end";
3954
+ const _sfc_main$3 = {
3955
+ __name: "Ruler",
3956
+ props: {
3957
+ orientation: {
3958
+ type: String,
3959
+ default: "horizontal"
3960
+ },
3961
+ length: {
3962
+ type: Number,
3963
+ default: 0
3964
+ },
3965
+ editor: {
3966
+ type: Object,
3967
+ required: true
3968
+ }
3969
+ },
3970
+ emits: ["margin-change"],
3971
+ setup(__props, { emit: __emit }) {
3972
+ const emit = __emit;
3973
+ const props = __props;
3974
+ const ruler = ref(null);
3975
+ const rulerDefinition = ref([]);
3976
+ const rulerHandleOriginalColor = ref("#CCCCCC");
3977
+ const rulerHandleActiveColor = ref("#2563EB66");
3978
+ const pageSize = ref(null);
3979
+ const pageMargins = ref(null);
3980
+ const isDragging = ref(false);
3981
+ const currentHandle = ref(null);
3982
+ const leftHandle = reactive({ side: "left", x: 0 });
3983
+ const rightHandle = reactive({ side: "right", x: 0 });
3984
+ const showVerticalIndicator = ref(false);
3985
+ const initialX = ref(0);
3986
+ let offsetX = 0;
3987
+ const initRuler = () => {
3988
+ if (props.editor.options.mode !== "docx") return;
3989
+ const rulerItems = [];
3990
+ const { pageMargins: docMargins, pageSize: docSize } = props.editor.getPageStyles();
3991
+ pageSize.value = docSize;
3992
+ pageMargins.value = docMargins;
3993
+ rightHandle.x = docSize.width * 96 - docMargins.right * 96;
3994
+ leftHandle.x = docMargins.left * 96;
3995
+ for (let i2 = 0; i2 < docSize.width; i2++) {
3996
+ const marginNum = 0.0625 * 96 - 0.5;
3997
+ const margin = `${marginNum}px`;
3998
+ const diff = docSize.width - i2;
3999
+ rulerItems.push(...generateSection(1, "main", "20%", margin, i2));
4000
+ rulerItems.push(...generateSection(3, "eighth", "10%", margin));
4001
+ rulerItems.push(...generateSection(1, "half", "40%", margin));
4002
+ if (diff <= 0.5) break;
4003
+ rulerItems.push(...generateSection(3, "eighth", "10%", margin));
4004
+ }
4005
+ return rulerItems;
4006
+ };
4007
+ const generateSection = (qty, size, height, margin, index) => {
4008
+ return Array.from({ length: qty }, (_, i2) => {
4009
+ const item = {
4010
+ className: `${size}-unit ruler-section`,
4011
+ height,
4012
+ margin
4013
+ };
4014
+ if (index !== void 0) item.numbering = index;
4015
+ return item;
4016
+ });
4017
+ };
4018
+ const getStyle = computed(() => (unit) => {
4019
+ return {
4020
+ width: "1px",
4021
+ minWidth: "1px",
4022
+ maxWidth: "1px",
4023
+ height: unit.height,
4024
+ backgroundColor: unit.color || "#666",
4025
+ marginLeft: unit.numbering === 0 ? null : unit.margin,
4026
+ marginRight: unit.margin
4027
+ };
4028
+ });
4029
+ const getHandlePosition = computed(() => (side) => {
4030
+ const handle = side === "left" ? leftHandle : rightHandle;
4031
+ return {
4032
+ left: `${handle.x}px`
4033
+ };
4034
+ });
4035
+ const getVerticalIndicatorStyle = computed(() => {
4036
+ if (!ruler.value) return;
4037
+ const parentElement = ruler.value.parentElement;
4038
+ const editor = parentElement.querySelector(".super-editor");
4039
+ const editorBounds = editor.getBoundingClientRect();
4040
+ return {
4041
+ left: `${currentHandle.value.x}px`,
4042
+ minHeight: `${editorBounds.height}px`
4043
+ };
4044
+ });
4045
+ const handleMouseDown = (event) => {
4046
+ isDragging.value = true;
4047
+ setRulerHandleActive();
4048
+ const itemId = event.currentTarget.id;
4049
+ currentHandle.value = itemId === "left-margin-handle" ? leftHandle : rightHandle;
4050
+ initialX.value = currentHandle.value.x;
4051
+ offsetX = event.clientX - currentHandle.value.x;
4052
+ showVerticalIndicator.value = true;
4053
+ };
4054
+ const handleMouseMove = (event) => {
4055
+ if (!isDragging.value) return;
4056
+ const newLeft = event.clientX - offsetX;
4057
+ currentHandle.value.x = newLeft;
4058
+ if (currentHandle.value.side === "left") {
4059
+ if (newLeft <= 0) {
4060
+ currentHandle.value.x = 0;
4061
+ } else if (newLeft >= rightHandle.x - MIN_WIDTH) {
4062
+ currentHandle.value.x = rightHandle.x - MIN_WIDTH;
4063
+ }
4064
+ } else {
4065
+ if (newLeft >= pageSize.value.width * 96) {
4066
+ currentHandle.value.x = pageSize.value.width * 96;
4067
+ } else if (newLeft <= leftHandle.x + MIN_WIDTH) {
4068
+ currentHandle.value.x = leftHandle.x + MIN_WIDTH;
4069
+ }
4070
+ }
4071
+ };
4072
+ const handleMouseUp = () => {
4073
+ isDragging.value = false;
4074
+ showVerticalIndicator.value = false;
4075
+ setRulerHandleInactive();
4076
+ if (currentHandle.value && currentHandle.value.x !== initialX.value) {
4077
+ const marginValue = getNewMarginValue();
4078
+ emit("margin-change", {
4079
+ side: currentHandle.value.side,
4080
+ value: marginValue
4081
+ });
4082
+ }
4083
+ };
4084
+ const setRulerHandleActive = () => {
4085
+ rulerHandleOriginalColor.value = rulerHandleActiveColor.value;
4086
+ };
4087
+ const setRulerHandleInactive = () => {
4088
+ rulerHandleOriginalColor.value = "#CCC";
4089
+ };
4090
+ const getNewMarginValue = () => {
4091
+ if (currentHandle.value.side === "left") return currentHandle.value.x / 96;
4092
+ else return (pageSize.value.width * 96 - currentHandle.value.x) / 96;
4093
+ };
4094
+ const getStyleVars = computed(() => {
4095
+ return {
4096
+ "--alignment": alignment,
4097
+ "--ruler-handle-color": rulerHandleOriginalColor.value,
4098
+ "--ruler-handle-active-color": rulerHandleActiveColor.value
4099
+ };
4100
+ });
4101
+ onMounted(() => {
4102
+ rulerDefinition.value = initRuler();
4103
+ window.addEventListener("mousemove", handleMouseMove);
4104
+ window.addEventListener("mouseup", handleMouseUp);
4105
+ });
4106
+ onUnmounted(() => {
4107
+ window.removeEventListener("mousemove", handleMouseMove);
4108
+ window.removeEventListener("mouseup", handleMouseUp);
4109
+ });
4110
+ return (_ctx, _cache) => {
4111
+ return openBlock(), createElementBlock("div", {
4112
+ class: "ruler",
4113
+ ref_key: "ruler",
4114
+ ref: ruler,
4115
+ style: normalizeStyle(getStyleVars.value)
4116
+ }, [
4117
+ createElementVNode("div", {
4118
+ class: "margin-handle handle-left",
4119
+ id: "left-margin-handle",
4120
+ onMousedown: handleMouseDown,
4121
+ style: normalizeStyle(getHandlePosition.value("left"))
4122
+ }, null, 36),
4123
+ createElementVNode("div", {
4124
+ class: "margin-handle handle-right",
4125
+ id: "right-margin-handle",
4126
+ onMousedown: handleMouseDown,
4127
+ style: normalizeStyle(getHandlePosition.value("right"))
4128
+ }, null, 36),
4129
+ showVerticalIndicator.value ? (openBlock(), createElementBlock("div", {
4130
+ key: 0,
4131
+ class: "vertical-indicator",
4132
+ style: normalizeStyle(getVerticalIndicatorStyle.value)
4133
+ }, null, 4)) : createCommentVNode("", true),
4134
+ (openBlock(true), createElementBlock(Fragment, null, renderList(rulerDefinition.value, (unit) => {
4135
+ return openBlock(), createElementBlock("div", {
4136
+ class: normalizeClass(unit.className),
4137
+ style: normalizeStyle(getStyle.value(unit))
4138
+ }, [
4139
+ createElementVNode("div", _hoisted_1$2, toDisplayString(unit.numbering), 1),
4140
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unit.elements, (half) => {
4141
+ return openBlock(), createElementBlock("div", {
4142
+ class: normalizeClass(half.className),
4143
+ style: normalizeStyle(getStyle.value(half))
4144
+ }, [
4145
+ (openBlock(true), createElementBlock(Fragment, null, renderList(half.elements, (quarter) => {
4146
+ return openBlock(), createElementBlock("div", {
4147
+ class: normalizeClass(quarter.className),
4148
+ style: normalizeStyle(getStyle.value(quarter))
4149
+ }, null, 6);
4150
+ }), 256))
4151
+ ], 6);
4152
+ }), 256))
4153
+ ], 6);
4154
+ }), 256))
4155
+ ], 4);
4156
+ };
4157
+ }
4158
+ };
4159
+ const Ruler = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-79f9a944"]]);
4160
+ const _sfc_main$2 = {
4161
+ __name: "GenericPopover",
4162
+ props: {
4163
+ editor: { type: Object, required: true },
4164
+ styles: { type: Object, default: () => ({}) },
4165
+ visible: { type: Boolean, default: false },
4166
+ position: { type: Object, default: () => ({ left: "0px", top: "0px" }) }
4167
+ },
4168
+ emits: ["close"],
4169
+ setup(__props, { emit: __emit }) {
4170
+ const props = __props;
4171
+ const emit = __emit;
4172
+ const popover = ref(null);
4173
+ function handleClickOutside(event) {
4174
+ if (popover.value && !popover.value.contains(event.target)) {
4175
+ emit("close");
4176
+ }
4177
+ moveCursorToMouseEvent(event, props.editor);
4178
+ }
4179
+ function handleEscape(event) {
4180
+ if (event.key === "Escape") {
4181
+ emit("close");
4182
+ }
4183
+ }
4184
+ watch(
4185
+ () => props.visible,
4186
+ (val) => {
4187
+ if (val) {
4188
+ document.addEventListener("mousedown", handleClickOutside);
4189
+ document.addEventListener("keydown", handleEscape);
4190
+ } else {
4191
+ document.removeEventListener("mousedown", handleClickOutside);
4192
+ document.removeEventListener("keydown", handleEscape);
4193
+ }
4194
+ }
4195
+ );
4196
+ onMounted(() => {
4197
+ if (props.visible) {
4198
+ document.addEventListener("mousedown", handleClickOutside);
4199
+ document.addEventListener("keydown", handleEscape);
4200
+ }
4201
+ });
4202
+ onBeforeUnmount(() => {
4203
+ document.removeEventListener("mousedown", handleClickOutside);
4204
+ document.removeEventListener("keydown", handleEscape);
4205
+ });
4206
+ const derivedStyles = computed(() => ({
4207
+ left: props.position.left,
4208
+ top: props.position.top,
4209
+ ...props.styles
4210
+ }));
4211
+ return (_ctx, _cache) => {
4212
+ return __props.visible ? (openBlock(), createElementBlock("div", {
4213
+ key: 0,
4214
+ class: "generic-popover",
4215
+ style: normalizeStyle(derivedStyles.value),
4216
+ ref_key: "popover",
4217
+ ref: popover,
4218
+ onMousedown: _cache[0] || (_cache[0] = withModifiers(() => {
4219
+ }, ["stop"])),
4220
+ onClick: _cache[1] || (_cache[1] = withModifiers(() => {
4221
+ }, ["stop"]))
4222
+ }, [
4223
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
4224
+ ], 36)) : createCommentVNode("", true);
4225
+ };
4226
+ }
4227
+ };
4228
+ const GenericPopover = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-cbddcc0f"]]);
4229
+ const BlankDOCX = "data:application/octet-stream;base64,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";
4230
+ const _hoisted_1$1 = { class: "super-editor-container" };
4231
+ const _hoisted_2 = {
4232
+ key: 1,
4233
+ class: "placeholder-editor"
4234
+ };
4235
+ const _hoisted_3 = { class: "placeholder-title" };
4236
+ const DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
4237
+ const _sfc_main$1 = {
4238
+ __name: "SuperEditor",
4239
+ props: {
4240
+ documentId: {
4241
+ type: String,
4242
+ required: false
4243
+ },
4244
+ fileSource: {
4245
+ type: [File, Blob],
4246
+ required: false
4247
+ },
4248
+ state: {
4249
+ type: Object,
4250
+ required: false,
4251
+ default: () => null
4252
+ },
4253
+ options: {
4254
+ type: Object,
4255
+ required: false,
4256
+ default: () => ({})
4257
+ }
4258
+ },
4259
+ emits: ["editor-ready", "editor-click", "editor-keydown", "comments-loaded", "selection-update"],
4260
+ setup(__props, { emit: __emit }) {
4261
+ const emit = __emit;
4262
+ const props = __props;
4263
+ const editorReady = ref(false);
4264
+ const editor = shallowRef(null);
4265
+ const message = useMessage();
4266
+ const editorWrapper = ref(null);
4267
+ const editorElem = ref(null);
4268
+ const fileSource = ref(null);
4269
+ const popoverControls = reactive({
4270
+ visible: false,
4271
+ position: { left: "0px", top: "0px" },
4272
+ component: null,
4273
+ props: {}
4274
+ });
4275
+ const closePopover = () => {
4276
+ popoverControls.visible = false;
4277
+ popoverControls.component = null;
4278
+ popoverControls.props = {};
4279
+ editor.value.view.focus();
4280
+ };
4281
+ const openPopover = (component, props2, position) => {
4282
+ popoverControls.component = component;
4283
+ popoverControls.props = props2;
4284
+ popoverControls.position = position;
4285
+ popoverControls.visible = true;
4286
+ };
4287
+ let dataPollTimeout;
4288
+ const stopPolling = () => {
4289
+ clearTimeout(dataPollTimeout);
4290
+ };
4291
+ const pollForMetaMapData = (ydoc, retries = 10, interval = 500) => {
4292
+ const metaMap = ydoc.getMap("meta");
4293
+ const checkData = () => {
4294
+ const docx = metaMap.get("docx");
4295
+ if (docx) {
4296
+ stopPolling();
4297
+ initEditor({ content: docx });
4298
+ } else if (retries > 0) {
4299
+ console.debug(`Waiting for 'docx' data... retries left: ${retries}`);
4300
+ dataPollTimeout = setTimeout(checkData, interval);
4301
+ retries--;
4302
+ } else {
4303
+ console.warn("Failed to load docx data from meta map.");
4304
+ }
4305
+ };
4306
+ checkData();
4307
+ };
4308
+ const setDefaultBlankFile = async () => {
4309
+ fileSource.value = await getFileObject(BlankDOCX, "blank.docx", DOCX);
4310
+ };
4311
+ const loadNewFileData = async () => {
4312
+ if (!fileSource.value) {
4313
+ fileSource.value = props.fileSource;
4314
+ }
4315
+ if (!fileSource.value || fileSource.value.type !== DOCX) {
4316
+ await setDefaultBlankFile();
4317
+ }
4318
+ try {
4319
+ const [docx, media, mediaFiles, fonts] = await Editor.loadXmlData(fileSource.value);
4320
+ return { content: docx, media, mediaFiles, fonts };
4321
+ } catch (err) {
4322
+ console.debug("Error loading new file data:", err);
4323
+ if (typeof props.options.onException === "function") {
4324
+ props.options.onException({ error: err, editor: null });
4325
+ }
4326
+ }
4327
+ };
4328
+ const initializeData = async () => {
4329
+ if (props.fileSource) {
4330
+ let fileData = await loadNewFileData();
4331
+ if (!fileData) {
4332
+ message.error("Unable to load the file. Please verify the .docx is valid and not password protected.");
4333
+ await setDefaultBlankFile();
4334
+ fileData = await loadNewFileData();
4335
+ }
4336
+ return initEditor(fileData);
4337
+ } else if (props.options.ydoc && props.options.collaborationProvider) {
4338
+ delete props.options.content;
4339
+ const ydoc = props.options.ydoc;
4340
+ const provider = props.options.collaborationProvider;
4341
+ const handleSynced = () => {
4342
+ pollForMetaMapData(ydoc);
4343
+ provider.off("synced", handleSynced);
4344
+ };
4345
+ provider.on("synced", handleSynced);
4346
+ }
4347
+ };
4348
+ const getExtensions = () => {
4349
+ const extensions = getStarterExtensions();
4350
+ if (!props.options.pagination) {
4351
+ return extensions.filter((ext) => ext.name !== "pagination");
4352
+ }
4353
+ return extensions;
4354
+ };
4355
+ const initEditor = async ({ content, media = {}, mediaFiles = {}, fonts = {} } = {}) => {
4356
+ editor.value = new Editor({
4357
+ mode: "docx",
4358
+ element: editorElem.value,
4359
+ fileSource: fileSource.value,
4360
+ extensions: getExtensions(),
4361
+ externalExtensions: props.options.externalExtensions,
4362
+ documentId: props.documentId,
4363
+ content,
4364
+ media,
4365
+ mediaFiles,
4366
+ fonts,
4367
+ ...props.options
4368
+ });
4369
+ editor.value.on("paginationUpdate", () => {
4370
+ adjustPaginationBreaks(editorElem, editor);
4371
+ });
4372
+ editor.value.on("collaborationReady", () => {
4373
+ setTimeout(() => {
4374
+ editorReady.value = true;
4375
+ }, 150);
4376
+ });
4377
+ };
4378
+ const handleSuperEditorKeydown = (event) => {
4379
+ if ((event.metaKey || event.ctrlKey) && event.altKey && event.shiftKey) {
4380
+ if (event.code === "KeyM") {
4381
+ const toolbar = document.querySelector(".superdoc-toolbar");
4382
+ if (toolbar) {
4383
+ toolbar.setAttribute("tabindex", "0");
4384
+ toolbar.focus();
4385
+ }
4386
+ }
4387
+ }
4388
+ if ((event.metaKey || event.ctrlKey) && !event.shiftKey && !event.altKey && (event.key === "k" || event.key === "K")) {
4389
+ event.preventDefault();
4390
+ if (!editor.value) return;
4391
+ const view = editor.value.view;
4392
+ const { state } = view;
4393
+ const container = editorWrapper.value;
4394
+ if (!container) return;
4395
+ const containerRect = container.getBoundingClientRect();
4396
+ const cursorCoords = view.coordsAtPos(state.selection.head);
4397
+ const left = `${cursorCoords.left - containerRect.left}px`;
4398
+ const top = `${cursorCoords.bottom - containerRect.top + 6}px`;
4399
+ openPopover(markRaw(LinkInput), {}, { left, top });
4400
+ }
4401
+ emit("editor-keydown", { editor: editor.value });
4402
+ };
4403
+ const handleSuperEditorClick = (event) => {
4404
+ emit("editor-click", { editor: editor.value });
4405
+ let pmElement = editorElem.value?.querySelector(".ProseMirror");
4406
+ if (!pmElement || !editor.value) {
4407
+ return;
4408
+ }
4409
+ let isInsideEditor = pmElement.contains(event.target);
4410
+ if (!isInsideEditor && editor.value.isEditable) {
4411
+ editor.value.view?.focus();
4412
+ }
4413
+ if (isInsideEditor && editor.value.isEditable) {
4414
+ checkNodeSpecificClicks(editor.value, event, popoverControls);
4415
+ }
4416
+ };
4417
+ onMounted(() => {
4418
+ initializeData();
4419
+ if (props.options?.suppressSkeletonLoader || !props.options?.collaborationProvider) editorReady.value = true;
4420
+ });
4421
+ const handleMarginClick = (event) => {
4422
+ if (event.target.classList.contains("ProseMirror")) return;
4423
+ onMarginClickCursorChange(event, editor.value);
4424
+ };
4425
+ const handleMarginChange = ({ side, value }) => {
4426
+ if (!editor.value) return;
4427
+ const pageStyles = editor.value.getPageStyles();
4428
+ const { pageMargins } = pageStyles;
4429
+ const update = { ...pageMargins, [side]: value };
4430
+ editor.value?.updatePageStyle({ pageMargins: update });
4431
+ };
4432
+ onBeforeUnmount(() => {
4433
+ stopPolling();
4434
+ editor.value?.destroy();
4435
+ editor.value = null;
4436
+ });
4437
+ return (_ctx, _cache) => {
4438
+ return openBlock(), createElementBlock("div", _hoisted_1$1, [
4439
+ __props.options.rulers && !!editor.value ? (openBlock(), createBlock(Ruler, {
4440
+ key: 0,
4441
+ class: "ruler",
4442
+ editor: editor.value,
4443
+ onMarginChange: handleMarginChange
4444
+ }, null, 8, ["editor"])) : createCommentVNode("", true),
4445
+ createElementVNode("div", {
4446
+ class: "super-editor",
4447
+ ref_key: "editorWrapper",
4448
+ ref: editorWrapper,
4449
+ onKeydown: handleSuperEditorKeydown,
4450
+ onClick: handleSuperEditorClick,
4451
+ onMousedown: handleMarginClick
4452
+ }, [
4453
+ createElementVNode("div", {
4454
+ ref_key: "editorElem",
4455
+ ref: editorElem,
4456
+ class: "editor-element super-editor__element",
4457
+ role: "presentation"
4458
+ }, null, 512),
4459
+ !props.options.disableContextMenu && editorReady.value && editor.value ? (openBlock(), createBlock(_sfc_main$4, {
4460
+ key: 0,
4461
+ editor: editor.value,
4462
+ popoverControls,
4463
+ openPopover,
4464
+ closePopover
4465
+ }, null, 8, ["editor", "popoverControls"])) : createCommentVNode("", true)
4466
+ ], 544),
4467
+ !editorReady.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
4468
+ createElementVNode("div", _hoisted_3, [
4469
+ createVNode(unref(NSkeleton), {
4470
+ text: "",
4471
+ style: { "width": "60%" }
4472
+ })
4473
+ ]),
4474
+ createVNode(unref(NSkeleton), {
4475
+ text: "",
4476
+ repeat: 6
4477
+ }),
4478
+ createVNode(unref(NSkeleton), {
4479
+ text: "",
4480
+ style: { "width": "60%" }
4481
+ }),
4482
+ createVNode(unref(NSkeleton), {
4483
+ text: "",
4484
+ repeat: 6,
4485
+ style: { "width": "30%", "display": "block", "margin": "20px" }
4486
+ }),
4487
+ createVNode(unref(NSkeleton), {
4488
+ text: "",
4489
+ style: { "width": "60%" }
4490
+ }),
4491
+ createVNode(unref(NSkeleton), {
4492
+ text: "",
4493
+ repeat: 5
4494
+ }),
4495
+ createVNode(unref(NSkeleton), {
4496
+ text: "",
4497
+ style: { "width": "30%" }
4498
+ }),
4499
+ createVNode(unref(NSkeleton), {
4500
+ text: "",
4501
+ style: { "margin-top": "50px" }
4502
+ }),
4503
+ createVNode(unref(NSkeleton), {
4504
+ text: "",
4505
+ repeat: 6
4506
+ }),
4507
+ createVNode(unref(NSkeleton), {
4508
+ text: "",
4509
+ style: { "width": "70%" }
4510
+ })
4511
+ ])) : createCommentVNode("", true),
4512
+ editor.value ? (openBlock(), createBlock(GenericPopover, {
4513
+ key: 2,
4514
+ editor: editor.value,
4515
+ visible: popoverControls.visible,
4516
+ position: popoverControls.position,
4517
+ onClose: closePopover
4518
+ }, {
4519
+ default: withCtx(() => [
4520
+ (openBlock(), createBlock(resolveDynamicComponent(popoverControls.component), normalizeProps(guardReactiveProps({ ...popoverControls.props, editor: editor.value, closePopover })), null, 16))
4521
+ ]),
4522
+ _: 1
4523
+ }, 8, ["editor", "visible", "position"])) : createCommentVNode("", true)
4524
+ ]);
4525
+ };
4526
+ }
4527
+ };
4528
+ const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-0c36dd72"]]);
4529
+ const _hoisted_1 = ["innerHTML"];
4530
+ const _sfc_main = {
4531
+ __name: "SuperInput",
4532
+ props: {
4533
+ modelValue: {
4534
+ type: String
4535
+ },
4536
+ placeholder: {
4537
+ type: String,
4538
+ required: false,
4539
+ default: "Type something..."
4540
+ },
4541
+ options: {
4542
+ type: Object,
4543
+ required: false,
4544
+ default: () => ({})
4545
+ },
4546
+ users: {
4547
+ type: Array,
4548
+ required: false,
4549
+ default: () => []
4550
+ }
4551
+ },
4552
+ emits: ["update:modelValue", "focus", "blur"],
4553
+ setup(__props, { emit: __emit }) {
4554
+ const emit = __emit;
4555
+ const props = __props;
4556
+ const editor = shallowRef();
4557
+ const editorElem = ref(null);
4558
+ const isFocused = ref(false);
4559
+ const onTransaction = ({ editor: editor2, transaction }) => {
4560
+ const contents = editor2.getHTML();
4561
+ emit("update:modelValue", contents);
4562
+ };
4563
+ const onFocus = ({ editor: editor2, transaction }) => {
4564
+ isFocused.value = true;
4565
+ updateUsersState();
4566
+ emit("focus", { editor: editor2, transaction });
4567
+ };
4568
+ const onBlur = ({ editor: editor2, transaction }) => {
4569
+ isFocused.value = false;
4570
+ emit("blur", { editor: editor2, transaction });
4571
+ };
4572
+ const initEditor = async () => {
4573
+ Placeholder.options.placeholder = props.placeholder || "Type something...";
4574
+ props.options.onTransaction = onTransaction;
4575
+ props.options.onFocus = onFocus;
4576
+ props.options.onBlur = onBlur;
4577
+ editor.value = new Editor({
4578
+ mode: "text",
4579
+ content: document.getElementById("currentContent"),
4580
+ element: editorElem.value,
4581
+ extensions: getRichTextExtensions(),
4582
+ users: props.users,
4583
+ ...props.options
4584
+ });
4585
+ };
4586
+ const handleFocus = () => {
4587
+ isFocused.value = true;
4588
+ editor.value?.view?.focus();
4589
+ };
4590
+ const updateUsersState = () => {
4591
+ editor.value?.setOptions({ users: props.users });
4592
+ };
4593
+ onMounted(() => {
4594
+ initEditor();
4595
+ });
4596
+ onBeforeUnmount(() => {
4597
+ editor.value?.destroy();
4598
+ editor.value = null;
4599
+ });
4600
+ return (_ctx, _cache) => {
4601
+ return openBlock(), createElementBlock("div", {
4602
+ class: normalizeClass(["super-editor super-input", { "super-input-active": isFocused.value }]),
4603
+ onClick: withModifiers(handleFocus, ["stop", "prevent"])
4604
+ }, [
4605
+ createElementVNode("div", {
4606
+ id: "currentContent",
4607
+ style: { "display": "none" },
4608
+ innerHTML: __props.modelValue
4609
+ }, null, 8, _hoisted_1),
4610
+ createElementVNode("div", {
4611
+ ref_key: "editorElem",
4612
+ ref: editorElem,
4613
+ class: "editor-element super-editor__element"
4614
+ }, null, 512)
4615
+ ], 2);
4616
+ };
4617
+ }
4618
+ };
4619
+ const SuperInput = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4d5cff52"]]);
4620
+ const Extensions = {
4621
+ Node,
4622
+ Attribute,
4623
+ Extension,
4624
+ Plugin,
4625
+ Mark
4626
+ };
4627
+ export {
4628
+ AIWriter,
4629
+ n as AnnotatorHelpers,
4630
+ aE as BasicUpload,
4631
+ C as CommentsPluginKey,
4632
+ D as DocxZipper,
4633
+ Editor,
4634
+ Extensions,
4635
+ o as SectionHelpers,
4636
+ _sfc_main$4 as SlashMenu,
4637
+ a5 as SuperConverter,
4638
+ SuperEditor,
4639
+ SuperInput,
4640
+ SuperToolbar,
4641
+ Toolbar,
4642
+ T as TrackChangesBasePluginKey,
4643
+ createZip,
4644
+ l as fieldAnnotationHelpers,
4645
+ getActiveFormatting,
4646
+ p as getAllowedImageDimensions,
4647
+ i as getMarksFromSelection,
4648
+ getRichTextExtensions,
4649
+ getStarterExtensions,
4650
+ a2 as helpers,
4651
+ aF as registeredHandlers,
4652
+ m as trackChangesHelpers
4653
+ };