@aquera/nile-elements 1.9.5 → 1.9.7

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 (565) hide show
  1. package/README.md +9 -0
  2. package/dist/index-178e1e57.cjs.js +2 -0
  3. package/dist/index-178e1e57.cjs.js.map +1 -0
  4. package/dist/index-1faa963c.esm.js +1 -0
  5. package/dist/index-249de90a.esm.js +1 -0
  6. package/dist/index-353172ed.esm.js +1 -0
  7. package/dist/index-6f3fa4ab.esm.js +1 -0
  8. package/dist/index-89c520e9.cjs.js +5 -0
  9. package/dist/index-89c520e9.cjs.js.map +1 -0
  10. package/dist/index-920675c4.esm.js +1 -0
  11. package/dist/index-b387a9f4.cjs.js +2 -0
  12. package/dist/index-b387a9f4.cjs.js.map +1 -0
  13. package/dist/index-cc1385e0.cjs.js +2 -0
  14. package/dist/index-cc1385e0.cjs.js.map +1 -0
  15. package/dist/index-dedc38a6.esm.js +1 -0
  16. package/dist/index-df196058.cjs.js +2 -0
  17. package/dist/index-df196058.cjs.js.map +1 -0
  18. package/dist/index-f956f56d.cjs.js +7 -0
  19. package/dist/index-f956f56d.cjs.js.map +1 -0
  20. package/dist/index.cjs.js +1 -1
  21. package/dist/index.esm.js +1 -1
  22. package/dist/index.js +3802 -664
  23. package/dist/internal/glyph.cjs.js +2 -0
  24. package/dist/internal/glyph.cjs.js.map +1 -0
  25. package/dist/internal/glyph.esm.js +5 -0
  26. package/dist/nile-auto-complete/index.cjs.js +1 -1
  27. package/dist/nile-auto-complete/nile-auto-complete.cjs.js +1 -1
  28. package/dist/nile-auto-complete/portal-manager.cjs.js +1 -1
  29. package/dist/nile-auto-complete/portal-utils.cjs.js +1 -1
  30. package/dist/nile-chip/nile-chip.css.cjs.js +1 -1
  31. package/dist/nile-chip/nile-chip.css.cjs.js.map +1 -1
  32. package/dist/nile-chip/nile-chip.css.esm.js +8 -1
  33. package/dist/nile-code-editor/extensionSetup.cjs.js +7 -7
  34. package/dist/nile-code-editor/extensionSetup.cjs.js.map +1 -1
  35. package/dist/nile-code-editor/extensionSetup.esm.js +1 -1
  36. package/dist/nile-code-editor/index.cjs.js +1 -1
  37. package/dist/nile-code-editor/index.esm.js +1 -1
  38. package/dist/nile-code-editor/nile-code-editor.cjs.js +2 -2
  39. package/dist/nile-code-editor/nile-code-editor.cjs.js.map +1 -1
  40. package/dist/nile-code-editor/nile-code-editor.esm.js +4 -4
  41. package/dist/nile-color-picker/index.cjs.js +1 -1
  42. package/dist/nile-color-picker/nile-color-picker.cjs.js +1 -1
  43. package/dist/nile-combobox/index.cjs.js +1 -1
  44. package/dist/nile-combobox/index.esm.js +1 -1
  45. package/dist/nile-combobox/nile-combobox.cjs.js +1 -1
  46. package/dist/nile-combobox/nile-combobox.esm.js +1 -1
  47. package/dist/nile-combobox/portal-manager.cjs.js +1 -1
  48. package/dist/nile-context-menu/index.cjs.js +1 -1
  49. package/dist/nile-context-menu/nile-context-menu.cjs.js +1 -1
  50. package/dist/nile-context-submenu/index.cjs.js +1 -1
  51. package/dist/nile-context-submenu/nile-context-submenu.cjs.js +1 -1
  52. package/dist/nile-detail/index.cjs.js +1 -1
  53. package/dist/nile-detail/index.esm.js +1 -1
  54. package/dist/nile-detail/nile-detail.cjs.js +1 -1
  55. package/dist/nile-detail/nile-detail.esm.js +1 -1
  56. package/dist/nile-dropdown/index.cjs.js +1 -1
  57. package/dist/nile-dropdown/nile-dropdown.cjs.js +1 -1
  58. package/dist/nile-dropdown/portal-manager.cjs.js +1 -1
  59. package/dist/nile-file-upload/index.cjs.js +1 -1
  60. package/dist/nile-file-upload/nile-file-upload.cjs.js +1 -1
  61. package/dist/nile-file-upload/nile-file-upload.template.cjs.js +1 -1
  62. package/dist/nile-floating-panel/index.cjs.js +1 -1
  63. package/dist/nile-floating-panel/nile-floating-panel.cjs.js +1 -1
  64. package/dist/nile-hero/nile-hero.cjs.js +1 -1
  65. package/dist/nile-hero/nile-hero.cjs.js.map +1 -1
  66. package/dist/nile-hero/nile-hero.css.cjs.js +1 -1
  67. package/dist/nile-hero/nile-hero.css.cjs.js.map +1 -1
  68. package/dist/nile-hero/nile-hero.css.esm.js +14 -14
  69. package/dist/nile-hero/nile-hero.esm.js +1 -1
  70. package/dist/nile-hero-header/nile-hero-header.cjs.js +1 -1
  71. package/dist/nile-hero-header/nile-hero-header.cjs.js.map +1 -1
  72. package/dist/nile-hero-header/nile-hero-header.css.cjs.js +1 -1
  73. package/dist/nile-hero-header/nile-hero-header.css.cjs.js.map +1 -1
  74. package/dist/nile-hero-header/nile-hero-header.css.esm.js +11 -11
  75. package/dist/nile-hero-header/nile-hero-header.esm.js +3 -3
  76. package/dist/nile-lite-tooltip/index.cjs.js +1 -1
  77. package/dist/nile-lite-tooltip/nile-lite-tooltip.cjs.js +1 -1
  78. package/dist/nile-markdown-editor/index.cjs.js +1 -1
  79. package/dist/nile-markdown-editor/nile-markdown-editor.cjs.js +1 -1
  80. package/dist/nile-popover/index.cjs.js +1 -1
  81. package/dist/nile-popover/nile-popover.cjs.js +1 -1
  82. package/dist/nile-popover/portal-manager.cjs.js +1 -1
  83. package/dist/nile-popup/index.cjs.js +1 -1
  84. package/dist/nile-popup/nile-popup.cjs.js +1 -1
  85. package/dist/nile-rich-text-editor/index.cjs.js +1 -1
  86. package/dist/nile-rich-text-editor/index.esm.js +1 -1
  87. package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js +1 -1
  88. package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js.map +1 -1
  89. package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js +1 -1
  90. package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js.map +1 -1
  91. package/dist/nile-rich-text-editor/nile-rich-text-editor.css.esm.js +70 -0
  92. package/dist/nile-rich-text-editor/nile-rich-text-editor.esm.js +1 -1
  93. package/dist/nile-rich-text-editor/nile-rte-image.cjs.js +3 -0
  94. package/dist/nile-rich-text-editor/nile-rte-image.cjs.js.map +1 -0
  95. package/dist/nile-rich-text-editor/nile-rte-image.esm.js +96 -0
  96. package/dist/nile-select/index.cjs.js +1 -1
  97. package/dist/nile-select/nile-select.cjs.js +1 -1
  98. package/dist/nile-select/portal-manager.cjs.js +1 -1
  99. package/dist/nile-side-bar-action/index.cjs.js +1 -1
  100. package/dist/nile-side-bar-action/nile-side-bar-action.cjs.js +1 -1
  101. package/dist/nile-side-bar-action/portal-manager.cjs.js +1 -1
  102. package/dist/nile-tooltip/index.cjs.js +1 -1
  103. package/dist/nile-tooltip/nile-tooltip.cjs.js +1 -1
  104. package/dist/nile-virtual-select/index.cjs.js +1 -1
  105. package/dist/nile-virtual-select/nile-virtual-select.cjs.js +1 -1
  106. package/dist/nile-virtual-select/portal-manager.cjs.js +1 -1
  107. package/dist/nile-virtual-select/renderer.cjs.js +1 -1
  108. package/dist/nile-wysiwyg-editor/emoji.cjs.js +2 -0
  109. package/dist/nile-wysiwyg-editor/emoji.cjs.js.map +1 -0
  110. package/dist/nile-wysiwyg-editor/emoji.esm.js +1 -0
  111. package/dist/nile-wysiwyg-editor/engine/commands.cjs.js +2 -0
  112. package/dist/nile-wysiwyg-editor/engine/commands.cjs.js.map +1 -0
  113. package/dist/nile-wysiwyg-editor/engine/commands.esm.js +1 -0
  114. package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js +2 -0
  115. package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js.map +1 -0
  116. package/dist/nile-wysiwyg-editor/engine/create-state.esm.js +1 -0
  117. package/dist/nile-wysiwyg-editor/engine/export.cjs.js +2 -0
  118. package/dist/nile-wysiwyg-editor/engine/export.cjs.js.map +1 -0
  119. package/dist/nile-wysiwyg-editor/engine/export.esm.js +1 -0
  120. package/dist/nile-wysiwyg-editor/engine/index.cjs.js +2 -0
  121. package/dist/nile-wysiwyg-editor/engine/index.cjs.js.map +1 -0
  122. package/dist/nile-wysiwyg-editor/engine/index.esm.js +1 -0
  123. package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js +2 -0
  124. package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js.map +1 -0
  125. package/dist/nile-wysiwyg-editor/engine/inputrules.esm.js +1 -0
  126. package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js +2 -0
  127. package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js.map +1 -0
  128. package/dist/nile-wysiwyg-editor/engine/keymap.esm.js +1 -0
  129. package/dist/nile-wysiwyg-editor/engine/markdown-parse.cjs.js +2 -0
  130. package/dist/nile-wysiwyg-editor/engine/markdown-parse.cjs.js.map +1 -0
  131. package/dist/nile-wysiwyg-editor/engine/markdown-parse.esm.js +1 -0
  132. package/dist/nile-wysiwyg-editor/engine/markdown.cjs.js +2 -0
  133. package/dist/nile-wysiwyg-editor/engine/markdown.cjs.js.map +1 -0
  134. package/dist/nile-wysiwyg-editor/engine/markdown.esm.js +1 -0
  135. package/dist/nile-wysiwyg-editor/engine/office-paste.cjs.js +2 -0
  136. package/dist/nile-wysiwyg-editor/engine/office-paste.cjs.js.map +1 -0
  137. package/dist/nile-wysiwyg-editor/engine/office-paste.esm.js +1 -0
  138. package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js +2 -0
  139. package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js.map +1 -0
  140. package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.esm.js +1 -0
  141. package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js +2 -0
  142. package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js.map +1 -0
  143. package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.esm.js +1 -0
  144. package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js +2 -0
  145. package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js.map +1 -0
  146. package/dist/nile-wysiwyg-editor/engine/plugins/embeds.esm.js +1 -0
  147. package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.cjs.js +2 -0
  148. package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.cjs.js.map +1 -0
  149. package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.esm.js +1 -0
  150. package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.cjs.js +2 -0
  151. package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.cjs.js.map +1 -0
  152. package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.esm.js +1 -0
  153. package/dist/nile-wysiwyg-editor/engine/plugins/image-view.cjs.js +2 -0
  154. package/dist/nile-wysiwyg-editor/engine/plugins/image-view.cjs.js.map +1 -0
  155. package/dist/nile-wysiwyg-editor/engine/plugins/image-view.esm.js +1 -0
  156. package/dist/nile-wysiwyg-editor/engine/plugins/image.cjs.js +2 -0
  157. package/dist/nile-wysiwyg-editor/engine/plugins/image.cjs.js.map +1 -0
  158. package/dist/nile-wysiwyg-editor/engine/plugins/image.esm.js +1 -0
  159. package/dist/nile-wysiwyg-editor/engine/plugins/link.cjs.js +2 -0
  160. package/dist/nile-wysiwyg-editor/engine/plugins/link.cjs.js.map +1 -0
  161. package/dist/nile-wysiwyg-editor/engine/plugins/link.esm.js +1 -0
  162. package/dist/nile-wysiwyg-editor/engine/plugins/math-view.cjs.js +2 -0
  163. package/dist/nile-wysiwyg-editor/engine/plugins/math-view.cjs.js.map +1 -0
  164. package/dist/nile-wysiwyg-editor/engine/plugins/math-view.esm.js +1 -0
  165. package/dist/nile-wysiwyg-editor/engine/plugins/max-length.cjs.js +2 -0
  166. package/dist/nile-wysiwyg-editor/engine/plugins/max-length.cjs.js.map +1 -0
  167. package/dist/nile-wysiwyg-editor/engine/plugins/max-length.esm.js +1 -0
  168. package/dist/nile-wysiwyg-editor/engine/plugins/paste.cjs.js +2 -0
  169. package/dist/nile-wysiwyg-editor/engine/plugins/paste.cjs.js.map +1 -0
  170. package/dist/nile-wysiwyg-editor/engine/plugins/paste.esm.js +1 -0
  171. package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.cjs.js +2 -0
  172. package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.cjs.js.map +1 -0
  173. package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.esm.js +1 -0
  174. package/dist/nile-wysiwyg-editor/engine/plugins/single-line.cjs.js +2 -0
  175. package/dist/nile-wysiwyg-editor/engine/plugins/single-line.cjs.js.map +1 -0
  176. package/dist/nile-wysiwyg-editor/engine/plugins/single-line.esm.js +1 -0
  177. package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.cjs.js +2 -0
  178. package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.cjs.js.map +1 -0
  179. package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.esm.js +1 -0
  180. package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js +2 -0
  181. package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js.map +1 -0
  182. package/dist/nile-wysiwyg-editor/engine/plugins/tables.esm.js +1 -0
  183. package/dist/nile-wysiwyg-editor/engine/plugins/task-list.cjs.js +2 -0
  184. package/dist/nile-wysiwyg-editor/engine/plugins/task-list.cjs.js.map +1 -0
  185. package/dist/nile-wysiwyg-editor/engine/plugins/task-list.esm.js +1 -0
  186. package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js +2 -0
  187. package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js.map +1 -0
  188. package/dist/nile-wysiwyg-editor/engine/sanitize.esm.js +1 -0
  189. package/dist/nile-wysiwyg-editor/engine/schema.cjs.js +2 -0
  190. package/dist/nile-wysiwyg-editor/engine/schema.cjs.js.map +1 -0
  191. package/dist/nile-wysiwyg-editor/engine/schema.esm.js +1 -0
  192. package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js +2 -0
  193. package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js.map +1 -0
  194. package/dist/nile-wysiwyg-editor/engine/selection-state.esm.js +1 -0
  195. package/dist/nile-wysiwyg-editor/engine/serializer.cjs.js +2 -0
  196. package/dist/nile-wysiwyg-editor/engine/serializer.cjs.js.map +1 -0
  197. package/dist/nile-wysiwyg-editor/engine/serializer.esm.js +1 -0
  198. package/dist/nile-wysiwyg-editor/index.cjs.js +2 -0
  199. package/dist/nile-wysiwyg-editor/index.cjs.js.map +1 -0
  200. package/dist/nile-wysiwyg-editor/index.esm.js +1 -0
  201. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js +2 -0
  202. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js.map +1 -0
  203. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js +2 -0
  204. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js.map +1 -0
  205. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.esm.js +780 -0
  206. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.esm.js +97 -0
  207. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.cjs.js +2 -0
  208. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.cjs.js.map +1 -0
  209. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.esm.js +1 -0
  210. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js +2 -0
  211. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js.map +1 -0
  212. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js +2 -0
  213. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js.map +1 -0
  214. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.esm.js +244 -0
  215. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.esm.js +137 -0
  216. package/dist/nile-wysiwyg-editor/types.cjs.js +2 -0
  217. package/dist/nile-wysiwyg-editor/types.cjs.js.map +1 -0
  218. package/dist/nile-wysiwyg-editor/types.esm.js +1 -0
  219. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js +2 -0
  220. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js.map +1 -0
  221. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.esm.js +97 -0
  222. package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js +2 -0
  223. package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js.map +1 -0
  224. package/dist/nile-wysiwyg-editor/ui/bubble-menu.esm.js +67 -0
  225. package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js +2 -0
  226. package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js.map +1 -0
  227. package/dist/nile-wysiwyg-editor/ui/code-block-menu.esm.js +65 -0
  228. package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js +2 -0
  229. package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js.map +1 -0
  230. package/dist/nile-wysiwyg-editor/ui/embed-menu.esm.js +64 -0
  231. package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js +2 -0
  232. package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js.map +1 -0
  233. package/dist/nile-wysiwyg-editor/ui/embed-panel.esm.js +68 -0
  234. package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js +2 -0
  235. package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js.map +1 -0
  236. package/dist/nile-wysiwyg-editor/ui/emoji-picker.esm.js +96 -0
  237. package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js +2 -0
  238. package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js.map +1 -0
  239. package/dist/nile-wysiwyg-editor/ui/find-replace.esm.js +112 -0
  240. package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js +2 -0
  241. package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js.map +1 -0
  242. package/dist/nile-wysiwyg-editor/ui/image-menu.esm.js +64 -0
  243. package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js +2 -0
  244. package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js.map +1 -0
  245. package/dist/nile-wysiwyg-editor/ui/image-panel.esm.js +171 -0
  246. package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js +2 -0
  247. package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js.map +1 -0
  248. package/dist/nile-wysiwyg-editor/ui/insert-menu.esm.js +90 -0
  249. package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js +2 -0
  250. package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js.map +1 -0
  251. package/dist/nile-wysiwyg-editor/ui/link-editor.esm.js +114 -0
  252. package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js +2 -0
  253. package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js.map +1 -0
  254. package/dist/nile-wysiwyg-editor/ui/markdown-panel.esm.js +80 -0
  255. package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js +2 -0
  256. package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js.map +1 -0
  257. package/dist/nile-wysiwyg-editor/ui/math-panel.esm.js +92 -0
  258. package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js +2 -0
  259. package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js.map +1 -0
  260. package/dist/nile-wysiwyg-editor/ui/shortcut-help.esm.js +147 -0
  261. package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js +2 -0
  262. package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js.map +1 -0
  263. package/dist/nile-wysiwyg-editor/ui/source-view.esm.js +79 -0
  264. package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js +2 -0
  265. package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js.map +1 -0
  266. package/dist/nile-wysiwyg-editor/ui/special-chars.esm.js +96 -0
  267. package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js +2 -0
  268. package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js.map +1 -0
  269. package/dist/nile-wysiwyg-editor/ui/suggest-list.esm.js +67 -0
  270. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js +2 -0
  271. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js.map +1 -0
  272. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.esm.js +100 -0
  273. package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js +2 -0
  274. package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js.map +1 -0
  275. package/dist/nile-wysiwyg-editor/ui/table-menu.esm.js +58 -0
  276. package/dist/src/index.d.ts +24 -0
  277. package/dist/src/index.js +19 -0
  278. package/dist/src/index.js.map +1 -1
  279. package/dist/src/internal/glyph.d.ts +6 -0
  280. package/dist/src/internal/glyph.js +13 -0
  281. package/dist/src/internal/glyph.js.map +1 -0
  282. package/dist/src/nile-chip/nile-chip.css.js +8 -1
  283. package/dist/src/nile-chip/nile-chip.css.js.map +1 -1
  284. package/dist/src/nile-code-editor/nile-code-editor.js +3 -3
  285. package/dist/src/nile-code-editor/nile-code-editor.js.map +1 -1
  286. package/dist/src/nile-hero/nile-hero.css.js +12 -12
  287. package/dist/src/nile-hero/nile-hero.css.js.map +1 -1
  288. package/dist/src/nile-hero/nile-hero.js +1 -1
  289. package/dist/src/nile-hero/nile-hero.js.map +1 -1
  290. package/dist/src/nile-hero-header/nile-hero-header.css.js +9 -9
  291. package/dist/src/nile-hero-header/nile-hero-header.css.js.map +1 -1
  292. package/dist/src/nile-hero-header/nile-hero-header.js +1 -1
  293. package/dist/src/nile-hero-header/nile-hero-header.js.map +1 -1
  294. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js +70 -0
  295. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js.map +1 -1
  296. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.d.ts +3 -0
  297. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js +81 -3
  298. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js.map +1 -1
  299. package/dist/src/nile-rich-text-editor/nile-rte-image.d.ts +87 -0
  300. package/dist/src/nile-rich-text-editor/nile-rte-image.js +1073 -0
  301. package/dist/src/nile-rich-text-editor/nile-rte-image.js.map +1 -0
  302. package/dist/src/nile-wysiwyg-editor/emoji.d.ts +5 -0
  303. package/dist/src/nile-wysiwyg-editor/emoji.js +138 -0
  304. package/dist/src/nile-wysiwyg-editor/emoji.js.map +1 -0
  305. package/dist/src/nile-wysiwyg-editor/engine/commands.d.ts +69 -0
  306. package/dist/src/nile-wysiwyg-editor/engine/commands.js +863 -0
  307. package/dist/src/nile-wysiwyg-editor/engine/commands.js.map +1 -0
  308. package/dist/src/nile-wysiwyg-editor/engine/create-state.d.ts +35 -0
  309. package/dist/src/nile-wysiwyg-editor/engine/create-state.js +67 -0
  310. package/dist/src/nile-wysiwyg-editor/engine/create-state.js.map +1 -0
  311. package/dist/src/nile-wysiwyg-editor/engine/export.d.ts +38 -0
  312. package/dist/src/nile-wysiwyg-editor/engine/export.js +208 -0
  313. package/dist/src/nile-wysiwyg-editor/engine/export.js.map +1 -0
  314. package/dist/src/nile-wysiwyg-editor/engine/export.test.d.ts +1 -0
  315. package/dist/src/nile-wysiwyg-editor/engine/export.test.js +96 -0
  316. package/dist/src/nile-wysiwyg-editor/engine/export.test.js.map +1 -0
  317. package/dist/src/nile-wysiwyg-editor/engine/index.d.ts +37 -0
  318. package/dist/src/nile-wysiwyg-editor/engine/index.js +29 -0
  319. package/dist/src/nile-wysiwyg-editor/engine/index.js.map +1 -0
  320. package/dist/src/nile-wysiwyg-editor/engine/inputrules.d.ts +12 -0
  321. package/dist/src/nile-wysiwyg-editor/engine/inputrules.js +144 -0
  322. package/dist/src/nile-wysiwyg-editor/engine/inputrules.js.map +1 -0
  323. package/dist/src/nile-wysiwyg-editor/engine/keymap.d.ts +15 -0
  324. package/dist/src/nile-wysiwyg-editor/engine/keymap.js +94 -0
  325. package/dist/src/nile-wysiwyg-editor/engine/keymap.js.map +1 -0
  326. package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.d.ts +22 -0
  327. package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.js +287 -0
  328. package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.js.map +1 -0
  329. package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.test.d.ts +1 -0
  330. package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.test.js +106 -0
  331. package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.test.js.map +1 -0
  332. package/dist/src/nile-wysiwyg-editor/engine/markdown.d.ts +10 -0
  333. package/dist/src/nile-wysiwyg-editor/engine/markdown.js +162 -0
  334. package/dist/src/nile-wysiwyg-editor/engine/markdown.js.map +1 -0
  335. package/dist/src/nile-wysiwyg-editor/engine/office-paste.d.ts +13 -0
  336. package/dist/src/nile-wysiwyg-editor/engine/office-paste.js +182 -0
  337. package/dist/src/nile-wysiwyg-editor/engine/office-paste.js.map +1 -0
  338. package/dist/src/nile-wysiwyg-editor/engine/plugins/code-highlight.d.ts +10 -0
  339. package/dist/src/nile-wysiwyg-editor/engine/plugins/code-highlight.js +165 -0
  340. package/dist/src/nile-wysiwyg-editor/engine/plugins/code-highlight.js.map +1 -0
  341. package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.d.ts +17 -0
  342. package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.js +69 -0
  343. package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.js.map +1 -0
  344. package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.d.ts +17 -0
  345. package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.js +96 -0
  346. package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.js.map +1 -0
  347. package/dist/src/nile-wysiwyg-editor/engine/plugins/find-replace.d.ts +26 -0
  348. package/dist/src/nile-wysiwyg-editor/engine/plugins/find-replace.js +123 -0
  349. package/dist/src/nile-wysiwyg-editor/engine/plugins/find-replace.js.map +1 -0
  350. package/dist/src/nile-wysiwyg-editor/engine/plugins/format-painter.d.ts +28 -0
  351. package/dist/src/nile-wysiwyg-editor/engine/plugins/format-painter.js +72 -0
  352. package/dist/src/nile-wysiwyg-editor/engine/plugins/format-painter.js.map +1 -0
  353. package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.d.ts +41 -0
  354. package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.js +176 -0
  355. package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.js.map +1 -0
  356. package/dist/src/nile-wysiwyg-editor/engine/plugins/image.d.ts +15 -0
  357. package/dist/src/nile-wysiwyg-editor/engine/plugins/image.js +64 -0
  358. package/dist/src/nile-wysiwyg-editor/engine/plugins/image.js.map +1 -0
  359. package/dist/src/nile-wysiwyg-editor/engine/plugins/link.d.ts +11 -0
  360. package/dist/src/nile-wysiwyg-editor/engine/plugins/link.js +42 -0
  361. package/dist/src/nile-wysiwyg-editor/engine/plugins/link.js.map +1 -0
  362. package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.d.ts +18 -0
  363. package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.js +46 -0
  364. package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.js.map +1 -0
  365. package/dist/src/nile-wysiwyg-editor/engine/plugins/max-length.d.ts +7 -0
  366. package/dist/src/nile-wysiwyg-editor/engine/plugins/max-length.js +26 -0
  367. package/dist/src/nile-wysiwyg-editor/engine/plugins/max-length.js.map +1 -0
  368. package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.d.ts +31 -0
  369. package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.js +55 -0
  370. package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.js.map +1 -0
  371. package/dist/src/nile-wysiwyg-editor/engine/plugins/placeholder.d.ts +7 -0
  372. package/dist/src/nile-wysiwyg-editor/engine/plugins/placeholder.js +25 -0
  373. package/dist/src/nile-wysiwyg-editor/engine/plugins/placeholder.js.map +1 -0
  374. package/dist/src/nile-wysiwyg-editor/engine/plugins/single-line.d.ts +10 -0
  375. package/dist/src/nile-wysiwyg-editor/engine/plugins/single-line.js +48 -0
  376. package/dist/src/nile-wysiwyg-editor/engine/plugins/single-line.js.map +1 -0
  377. package/dist/src/nile-wysiwyg-editor/engine/plugins/suggestions.d.ts +29 -0
  378. package/dist/src/nile-wysiwyg-editor/engine/plugins/suggestions.js +87 -0
  379. package/dist/src/nile-wysiwyg-editor/engine/plugins/suggestions.js.map +1 -0
  380. package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.d.ts +8 -0
  381. package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js +11 -0
  382. package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js.map +1 -0
  383. package/dist/src/nile-wysiwyg-editor/engine/plugins/task-list.d.ts +16 -0
  384. package/dist/src/nile-wysiwyg-editor/engine/plugins/task-list.js +49 -0
  385. package/dist/src/nile-wysiwyg-editor/engine/plugins/task-list.js.map +1 -0
  386. package/dist/src/nile-wysiwyg-editor/engine/pm.test.d.ts +1 -0
  387. package/dist/src/nile-wysiwyg-editor/engine/pm.test.js +883 -0
  388. package/dist/src/nile-wysiwyg-editor/engine/pm.test.js.map +1 -0
  389. package/dist/src/nile-wysiwyg-editor/engine/productivity.test.d.ts +1 -0
  390. package/dist/src/nile-wysiwyg-editor/engine/productivity.test.js +129 -0
  391. package/dist/src/nile-wysiwyg-editor/engine/productivity.test.js.map +1 -0
  392. package/dist/src/nile-wysiwyg-editor/engine/sanitize.d.ts +13 -0
  393. package/dist/src/nile-wysiwyg-editor/engine/sanitize.js +155 -0
  394. package/dist/src/nile-wysiwyg-editor/engine/sanitize.js.map +1 -0
  395. package/dist/src/nile-wysiwyg-editor/engine/schema.d.ts +20 -0
  396. package/dist/src/nile-wysiwyg-editor/engine/schema.js +823 -0
  397. package/dist/src/nile-wysiwyg-editor/engine/schema.js.map +1 -0
  398. package/dist/src/nile-wysiwyg-editor/engine/selection-state.d.ts +70 -0
  399. package/dist/src/nile-wysiwyg-editor/engine/selection-state.js +138 -0
  400. package/dist/src/nile-wysiwyg-editor/engine/selection-state.js.map +1 -0
  401. package/dist/src/nile-wysiwyg-editor/engine/serializer.d.ts +18 -0
  402. package/dist/src/nile-wysiwyg-editor/engine/serializer.js +63 -0
  403. package/dist/src/nile-wysiwyg-editor/engine/serializer.js.map +1 -0
  404. package/dist/src/nile-wysiwyg-editor/index.d.ts +3 -0
  405. package/dist/src/nile-wysiwyg-editor/index.js +3 -0
  406. package/dist/src/nile-wysiwyg-editor/index.js.map +1 -0
  407. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.d.ts +1 -0
  408. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js +782 -0
  409. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js.map +1 -0
  410. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.d.ts +364 -0
  411. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js +2038 -0
  412. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js.map +1 -0
  413. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.d.ts +1 -0
  414. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js +636 -0
  415. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js.map +1 -0
  416. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.d.ts +1 -0
  417. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.js +2 -0
  418. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.js.map +1 -0
  419. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.d.ts +6 -0
  420. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js +251 -0
  421. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js.map +1 -0
  422. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.d.ts +41 -0
  423. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.js +700 -0
  424. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.js.map +1 -0
  425. package/dist/src/nile-wysiwyg-editor/types.d.ts +49 -0
  426. package/dist/src/nile-wysiwyg-editor/types.js +8 -0
  427. package/dist/src/nile-wysiwyg-editor/types.js.map +1 -0
  428. package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.d.ts +20 -0
  429. package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js +159 -0
  430. package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js.map +1 -0
  431. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.d.ts +21 -0
  432. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js +125 -0
  433. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js.map +1 -0
  434. package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.d.ts +18 -0
  435. package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js +107 -0
  436. package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js.map +1 -0
  437. package/dist/src/nile-wysiwyg-editor/ui/embed-menu.d.ts +19 -0
  438. package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js +123 -0
  439. package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js.map +1 -0
  440. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.d.ts +27 -0
  441. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js +146 -0
  442. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js.map +1 -0
  443. package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.d.ts +21 -0
  444. package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js +154 -0
  445. package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js.map +1 -0
  446. package/dist/src/nile-wysiwyg-editor/ui/find-replace.d.ts +26 -0
  447. package/dist/src/nile-wysiwyg-editor/ui/find-replace.js +178 -0
  448. package/dist/src/nile-wysiwyg-editor/ui/find-replace.js.map +1 -0
  449. package/dist/src/nile-wysiwyg-editor/ui/image-menu.d.ts +18 -0
  450. package/dist/src/nile-wysiwyg-editor/ui/image-menu.js +129 -0
  451. package/dist/src/nile-wysiwyg-editor/ui/image-menu.js.map +1 -0
  452. package/dist/src/nile-wysiwyg-editor/ui/image-panel.d.ts +56 -0
  453. package/dist/src/nile-wysiwyg-editor/ui/image-panel.js +349 -0
  454. package/dist/src/nile-wysiwyg-editor/ui/image-panel.js.map +1 -0
  455. package/dist/src/nile-wysiwyg-editor/ui/insert-menu.d.ts +25 -0
  456. package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js +142 -0
  457. package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js.map +1 -0
  458. package/dist/src/nile-wysiwyg-editor/ui/link-editor.d.ts +30 -0
  459. package/dist/src/nile-wysiwyg-editor/ui/link-editor.js +189 -0
  460. package/dist/src/nile-wysiwyg-editor/ui/link-editor.js.map +1 -0
  461. package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.d.ts +24 -0
  462. package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js +144 -0
  463. package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js.map +1 -0
  464. package/dist/src/nile-wysiwyg-editor/ui/math-panel.d.ts +31 -0
  465. package/dist/src/nile-wysiwyg-editor/ui/math-panel.js +172 -0
  466. package/dist/src/nile-wysiwyg-editor/ui/math-panel.js.map +1 -0
  467. package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.d.ts +30 -0
  468. package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js +296 -0
  469. package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js.map +1 -0
  470. package/dist/src/nile-wysiwyg-editor/ui/source-view.d.ts +19 -0
  471. package/dist/src/nile-wysiwyg-editor/ui/source-view.js +120 -0
  472. package/dist/src/nile-wysiwyg-editor/ui/source-view.js.map +1 -0
  473. package/dist/src/nile-wysiwyg-editor/ui/special-chars.d.ts +20 -0
  474. package/dist/src/nile-wysiwyg-editor/ui/special-chars.js +199 -0
  475. package/dist/src/nile-wysiwyg-editor/ui/special-chars.js.map +1 -0
  476. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.d.ts +31 -0
  477. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js +133 -0
  478. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js.map +1 -0
  479. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.d.ts +23 -0
  480. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js +177 -0
  481. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js.map +1 -0
  482. package/dist/src/nile-wysiwyg-editor/ui/table-menu.d.ts +16 -0
  483. package/dist/src/nile-wysiwyg-editor/ui/table-menu.js +101 -0
  484. package/dist/src/nile-wysiwyg-editor/ui/table-menu.js.map +1 -0
  485. package/dist/src/version.js +1 -1
  486. package/dist/src/version.js.map +1 -1
  487. package/dist/tsconfig.tsbuildinfo +1 -1
  488. package/package.json +18 -2
  489. package/src/index.ts +57 -1
  490. package/src/internal/glyph.ts +13 -0
  491. package/src/nile-chip/nile-chip.css.ts +8 -1
  492. package/src/nile-code-editor/nile-code-editor.ts +3 -3
  493. package/src/nile-hero/nile-hero.css.ts +12 -12
  494. package/src/nile-hero/nile-hero.ts +1 -1
  495. package/src/nile-hero-header/nile-hero-header.css.ts +9 -9
  496. package/src/nile-hero-header/nile-hero-header.ts +1 -1
  497. package/src/nile-rich-text-editor/nile-rich-text-editor.css.ts +70 -0
  498. package/src/nile-rich-text-editor/nile-rich-text-editor.ts +89 -3
  499. package/src/nile-rich-text-editor/nile-rte-image.ts +1132 -0
  500. package/src/nile-wysiwyg-editor/emoji.ts +137 -0
  501. package/src/nile-wysiwyg-editor/engine/commands.ts +1035 -0
  502. package/src/nile-wysiwyg-editor/engine/create-state.ts +117 -0
  503. package/src/nile-wysiwyg-editor/engine/export.test.ts +113 -0
  504. package/src/nile-wysiwyg-editor/engine/export.ts +242 -0
  505. package/src/nile-wysiwyg-editor/engine/index.ts +69 -0
  506. package/src/nile-wysiwyg-editor/engine/inputrules.ts +169 -0
  507. package/src/nile-wysiwyg-editor/engine/keymap.ts +146 -0
  508. package/src/nile-wysiwyg-editor/engine/markdown-parse.test.ts +148 -0
  509. package/src/nile-wysiwyg-editor/engine/markdown-parse.ts +337 -0
  510. package/src/nile-wysiwyg-editor/engine/markdown.ts +165 -0
  511. package/src/nile-wysiwyg-editor/engine/office-paste.ts +199 -0
  512. package/src/nile-wysiwyg-editor/engine/plugins/code-highlight.ts +173 -0
  513. package/src/nile-wysiwyg-editor/engine/plugins/embed-view.ts +85 -0
  514. package/src/nile-wysiwyg-editor/engine/plugins/embeds.ts +99 -0
  515. package/src/nile-wysiwyg-editor/engine/plugins/find-replace.ts +155 -0
  516. package/src/nile-wysiwyg-editor/engine/plugins/format-painter.ts +80 -0
  517. package/src/nile-wysiwyg-editor/engine/plugins/image-view.ts +220 -0
  518. package/src/nile-wysiwyg-editor/engine/plugins/image.ts +80 -0
  519. package/src/nile-wysiwyg-editor/engine/plugins/link.ts +42 -0
  520. package/src/nile-wysiwyg-editor/engine/plugins/math-view.ts +56 -0
  521. package/src/nile-wysiwyg-editor/engine/plugins/max-length.ts +24 -0
  522. package/src/nile-wysiwyg-editor/engine/plugins/paste.ts +74 -0
  523. package/src/nile-wysiwyg-editor/engine/plugins/placeholder.ts +24 -0
  524. package/src/nile-wysiwyg-editor/engine/plugins/single-line.ts +47 -0
  525. package/src/nile-wysiwyg-editor/engine/plugins/suggestions.ts +110 -0
  526. package/src/nile-wysiwyg-editor/engine/plugins/tables.ts +12 -0
  527. package/src/nile-wysiwyg-editor/engine/plugins/task-list.ts +65 -0
  528. package/src/nile-wysiwyg-editor/engine/pm.test.ts +1088 -0
  529. package/src/nile-wysiwyg-editor/engine/productivity.test.ts +163 -0
  530. package/src/nile-wysiwyg-editor/engine/sanitize.ts +156 -0
  531. package/src/nile-wysiwyg-editor/engine/schema.ts +859 -0
  532. package/src/nile-wysiwyg-editor/engine/selection-state.ts +210 -0
  533. package/src/nile-wysiwyg-editor/engine/serializer.ts +78 -0
  534. package/src/nile-wysiwyg-editor/index.ts +3 -0
  535. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.ts +782 -0
  536. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.ts +750 -0
  537. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts +2155 -0
  538. package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.ts +1 -0
  539. package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.ts +251 -0
  540. package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.ts +772 -0
  541. package/src/nile-wysiwyg-editor/types.ts +83 -0
  542. package/src/nile-wysiwyg-editor/ui/bookmark-panel.ts +155 -0
  543. package/src/nile-wysiwyg-editor/ui/bubble-menu.ts +135 -0
  544. package/src/nile-wysiwyg-editor/ui/code-block-menu.ts +105 -0
  545. package/src/nile-wysiwyg-editor/ui/embed-menu.ts +133 -0
  546. package/src/nile-wysiwyg-editor/ui/embed-panel.ts +143 -0
  547. package/src/nile-wysiwyg-editor/ui/emoji-picker.ts +152 -0
  548. package/src/nile-wysiwyg-editor/ui/find-replace.ts +174 -0
  549. package/src/nile-wysiwyg-editor/ui/image-menu.ts +140 -0
  550. package/src/nile-wysiwyg-editor/ui/image-panel.ts +337 -0
  551. package/src/nile-wysiwyg-editor/ui/insert-menu.ts +142 -0
  552. package/src/nile-wysiwyg-editor/ui/link-editor.ts +180 -0
  553. package/src/nile-wysiwyg-editor/ui/markdown-panel.ts +143 -0
  554. package/src/nile-wysiwyg-editor/ui/math-panel.ts +169 -0
  555. package/src/nile-wysiwyg-editor/ui/shortcut-help.ts +311 -0
  556. package/src/nile-wysiwyg-editor/ui/source-view.ts +119 -0
  557. package/src/nile-wysiwyg-editor/ui/special-chars.ts +209 -0
  558. package/src/nile-wysiwyg-editor/ui/suggest-list.ts +138 -0
  559. package/src/nile-wysiwyg-editor/ui/table-grid-picker.ts +173 -0
  560. package/src/nile-wysiwyg-editor/ui/table-menu.ts +109 -0
  561. package/vscode-html-custom-data.json +491 -1
  562. package/web-dev-server.config.mjs +6 -2
  563. package/dist/index-5fef1a0d.esm.js +0 -1
  564. package/dist/index-8f38fae3.cjs.js +0 -2
  565. package/dist/index-8f38fae3.cjs.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-wysiwyg-editor.js","sourceRoot":"","sources":["../../../src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, CSSResultArray, PropertyValues, nothing } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { EditorView } from 'prosemirror-view';\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { Node as PMNode } from 'prosemirror-model';\n\nimport NileElement from '../internal/nile-element';\nimport { styles } from './nile-wysiwyg-editor.css';\nimport {\n defaultSchema,\n createEditorState,\n computeToolbarState,\n htmlToDoc,\n htmlToSlice,\n docToHtml,\n docToText,\n docToMarkdown,\n markdownToHtml,\n docToJson,\n jsonToDoc,\n isDocEmpty,\n sanitizeHtml,\n getCommand,\n getMarkRange,\n flattenToSingleParagraph,\n imageUploadKey,\n findUploadPos,\n countWords,\n TaskItemView,\n ImageView,\n FigureView,\n EmbedView,\n MathView,\n isOfficeHtml,\n cleanOfficeHtml,\n toInlineStyledHtml,\n buildWordDocument,\n buildPrintDocument,\n isFormatPainterArmed,\n armFormatPainter,\n disarmFormatPainter,\n applyFormatPainter,\n getFindState,\n searchTr,\n findStepTr,\n clearFindTr,\n replaceActiveTr,\n replaceAllTr,\n} from './engine';\nimport type { ToolbarState } from './engine/selection-state';\nimport type { CommandAttrs, CommandName } from './engine/commands';\nimport { selectedImageInfo } from './engine/commands';\nimport type { MathRenderer } from './engine/plugins/math-view';\nimport type { SuggestionMatch } from './engine/plugins/suggestions';\nimport type {\n WysiwygChangeDetail,\n WysiwygCommandDetail,\n MentionsConfig,\n SnippetConfig,\n MergeFieldConfig,\n TemplateConfig,\n} from './types';\nimport { DEFAULT_TOOLBAR } from './types';\nimport { EMOJI } from './emoji';\n\nimport './nile-wysiwyg-toolbar/nile-wysiwyg-toolbar';\nimport './ui/link-editor';\nimport './ui/bubble-menu';\nimport './ui/image-panel';\nimport './ui/table-menu';\nimport './ui/suggest-list';\nimport './ui/find-replace';\nimport './ui/source-view';\nimport './ui/embed-panel';\nimport './ui/bookmark-panel';\nimport './ui/code-block-menu';\nimport './ui/shortcut-help';\nimport './ui/image-menu';\nimport './ui/embed-menu';\nimport './ui/special-chars';\nimport './ui/emoji-picker';\nimport './ui/insert-menu';\nimport './ui/math-panel';\nimport './ui/markdown-panel';\nimport type { NileWysiwygLinkEditor } from './ui/link-editor';\nimport type { NileWysiwygBubbleMenu } from './ui/bubble-menu';\nimport type { NileWysiwygImagePanel } from './ui/image-panel';\nimport type { NileWysiwygTableMenu } from './ui/table-menu';\nimport type { NileWysiwygSuggestList, SuggestItem } from './ui/suggest-list';\nimport type { NileWysiwygFindBar } from './ui/find-replace';\nimport type { NileWysiwygSourceView } from './ui/source-view';\nimport type { NileWysiwygEmbedPanel } from './ui/embed-panel';\nimport type { NileWysiwygBookmarkPanel } from './ui/bookmark-panel';\nimport type { NileWysiwygCodeMenu } from './ui/code-block-menu';\nimport type { NileWysiwygShortcutHelp } from './ui/shortcut-help';\nimport type { NileWysiwygImageMenu } from './ui/image-menu';\nimport type { NileWysiwygEmbedMenu } from './ui/embed-menu';\nimport type { NileWysiwygSpecialChars } from './ui/special-chars';\nimport type { NileWysiwygEmojiPicker } from './ui/emoji-picker';\nimport type { NileWysiwygInsertMenu } from './ui/insert-menu';\nimport type { NileWysiwygMathPanel } from './ui/math-panel';\nimport type { NileWysiwygMarkdownPanel } from './ui/markdown-panel';\n\ninterface SlashItem extends SuggestItem {\n command: CommandName | 'openImage' | 'openEmbed' | 'openBookmark';\n attrs?: CommandAttrs;\n}\n\nconst SLASH_ITEMS: SlashItem[] = [\n { key: 'heading1', label: 'Heading 1', hint: '#', command: 'heading', attrs: { level: 1 } },\n { key: 'heading2', label: 'Heading 2', hint: '##', command: 'heading', attrs: { level: 2 } },\n { key: 'heading3', label: 'Heading 3', hint: '###', command: 'heading', attrs: { level: 3 } },\n { key: 'bulletList', label: 'Bulleted list', hint: '-', command: 'bulletList' },\n { key: 'orderedList', label: 'Numbered list', hint: '1.', command: 'orderedList' },\n { key: 'taskList', label: 'Checklist', hint: '[ ]', command: 'taskList' },\n { key: 'blockquote', label: 'Blockquote', hint: '>', command: 'blockquote' },\n { key: 'codeBlock', label: 'Code block', hint: '```', command: 'codeBlock' },\n { key: 'table', label: 'Table', hint: '3×3', command: 'insertTable', attrs: { rows: 3, cols: 3 } },\n { key: 'image', label: 'Image', command: 'openImage' },\n { key: 'embed', label: 'Video embed', hint: 'YouTube…', command: 'openEmbed' },\n { key: 'bookmark', label: 'Bookmark (anchor)', command: 'openBookmark' },\n { key: 'horizontalRule', label: 'Divider', hint: '---', command: 'horizontalRule' },\n];\n\nlet uploadCounter = 0;\n\nfunction readFileAsDataURL(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(file);\n });\n}\n\nconst CHANGE_DEBOUNCE_MS = 250;\n\n/**\n * WYSIWYG rich text editor powered by ProseMirror.\n *\n * Requires evergreen browsers: selection inside shadow DOM relies on\n * `Selection.getComposedRanges()` (Safari 17+, recent Firefox) or Chrome's\n * `shadowRoot.getSelection()`.\n *\n * @tag nile-wysiwyg-editor\n *\n * @event nile-change - Debounced content change. detail: { value, json, content }\n * @event nile-input - Every document change. detail: { value, json, content }\n * @event nile-focus - Editor gained focus.\n * @event nile-blur - Editor lost focus.\n * @event nile-selection-change - detail: ToolbarState snapshot.\n * @event nile-image-upload-request - Cancelable. detail: { file, insert(src, alt) }.\n * Call preventDefault() and use insert() to fully own the upload.\n * @event nile-image-upload-error - detail: { file, error } when uploadHandler rejects.\n * @event nile-mention-query - detail: { trigger, query, provide(items) } for async sources.\n * @event nile-mention-select - detail: { trigger, key, label } when a mention is inserted.\n * @event nile-word-count - detail: { words, characters } on every document change.\n * @event nile-autosave - detail: { value, json, content } on the autosave interval.\n *\n * @csspart base - Outer container.\n * @csspart toolbar - The toolbar element.\n * @csspart surface - The scrollable editing surface.\n */\n@customElement('nile-wysiwyg-editor')\nexport class NileWysiwygEditor extends NileElement {\n static formAssociated = true;\n\n /** Document content as HTML. Not reflected to the attribute. */\n @property({ type: String }) value = '';\n\n @property({ type: String }) placeholder = '';\n\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /** Toolbar config string; `\"none\"` hides the toolbar. */\n @property({ type: String }) toolbar = DEFAULT_TOOLBAR;\n\n /** Shows a balloon toolbar over text selections. */\n @property({ type: Boolean, attribute: 'bubble-menu' }) bubbleMenu = false;\n\n /** Sanitizes incoming HTML (value, paste, insertHTML). Leave on. */\n @property({ type: Boolean }) sanitize = true;\n\n /** Constrains content to a single paragraph. */\n @property({ type: Boolean, attribute: 'singleline' }) singleLine = false;\n\n /** Form field name. */\n @property({ type: String }) name = '';\n\n @property({ type: Boolean, reflect: true }) required = false;\n\n /**\n * Async image upload handler. When set, pasted/dropped/picked image files\n * are uploaded through it (an \"Uploading…\" placeholder shows meanwhile)\n * and the returned src is inserted.\n */\n @property({ attribute: false }) uploadHandler?: (\n file: File\n ) => Promise<{ src: string; alt?: string }>;\n\n /**\n * Fallback when no uploadHandler is set and no nile-image-upload-request\n * listener takes over: embed image files as base64 data URLs.\n */\n @property({ attribute: false }) allowBase64Images = true;\n\n /**\n * Shows an \"Upload from computer\" button in the Insert Image dialog. Off by\n * default (URL-only, like the RTE's default); files can always be added via\n * drag & drop or paste regardless.\n */\n @property({ type: Boolean, attribute: 'upload-from-computer' })\n uploadFromComputer = false;\n\n /** Max upload size (bytes) shown/enforced by the image dialog. Default 2 MB. */\n @property({ type: Number, attribute: 'image-max-file-size' })\n imageMaxFileSize = 2 * 1024 * 1024;\n\n /**\n * Mention config: trigger character → items, same shape and JSON attribute\n * format as nile-rich-text-editor. For async sources, configure the\n * trigger with an empty array and listen to nile-mention-query.\n */\n @property({\n attribute: 'mentions',\n converter: {\n fromAttribute: (value: string): MentionsConfig => {\n try {\n const parsed = JSON.parse(value);\n const out: MentionsConfig = {};\n for (const trigger of Object.keys(parsed)) {\n const items = parsed[trigger];\n if (Array.isArray(items)) {\n out[trigger] = items\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch {\n return {};\n }\n },\n toAttribute: (value: MentionsConfig) => JSON.stringify(value),\n },\n })\n mentions: MentionsConfig = {};\n\n /** Disables the \"/\" command menu. */\n @property({ type: Boolean, attribute: 'no-slash-commands' }) noSlashCommands = false;\n\n /** Disables the \":\" emoji picker. */\n @property({ type: Boolean, attribute: 'no-emoji' }) noEmoji = false;\n\n /** Maximum character count; further input is rejected. 0 = unlimited. */\n @property({ type: Number, attribute: 'maxlength' }) maxLength = 0;\n\n /** Always show the word/character counter footer (implied by maxlength). */\n @property({ type: Boolean, attribute: 'show-counter' }) showCounter = false;\n\n /** Keeps the toolbar pinned to the viewport while scrolling long content. */\n @property({ type: Boolean, attribute: 'sticky-toolbar', reflect: true })\n stickyToolbar = false;\n\n /** Reusable snippets surfaced in the \"/\" menu (JSON attribute). */\n @property({\n attribute: 'snippets',\n converter: {\n fromAttribute: (value: string): SnippetConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(\n s =>\n s &&\n typeof s.key === 'string' &&\n typeof s.label === 'string' &&\n typeof s.html === 'string'\n )\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: SnippetConfig[]) => JSON.stringify(value),\n },\n })\n snippets: SnippetConfig[] = [];\n\n /** Merge fields offered in the merge-field picker (JSON attribute). */\n @property({\n attribute: 'merge-fields',\n converter: {\n fromAttribute: (value: string): MergeFieldConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(f => f && typeof f.id === 'string' && typeof f.label === 'string')\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: MergeFieldConfig[]) => JSON.stringify(value),\n },\n })\n mergeFields: MergeFieldConfig[] = [];\n\n /** Content templates offered in the template picker (JSON attribute). */\n @property({\n attribute: 'templates',\n converter: {\n fromAttribute: (value: string): TemplateConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(t => t && typeof t.label === 'string' && typeof t.html === 'string')\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: TemplateConfig[]) => JSON.stringify(value),\n },\n })\n templates: TemplateConfig[] = [];\n\n /**\n * Renders a math node's LaTeX to HTML (KaTeX/MathJax/MathML). When unset,\n * the raw LaTeX is shown. Same trust level as uploadHandler — output is\n * inserted as HTML.\n */\n @property({ attribute: false }) mathRenderer?: MathRenderer;\n\n /** Emit nile-autosave every N ms while the document has changed. 0 = off. */\n @property({ type: Number, attribute: 'autosave-interval' }) autosaveInterval = 0;\n\n /** When on, every paste drops formatting and inserts plain text. */\n @property({ type: Boolean, attribute: 'paste-as-plain-text', reflect: true })\n pasteAsPlainText = false;\n\n /** Disables Markdown detection on plain-text pastes. */\n @property({ type: Boolean, attribute: 'no-markdown-paste' })\n noMarkdownPaste = false;\n\n /** Disables typography autocorrect (smart quotes, dashes, (c) → ©). */\n @property({ type: Boolean, attribute: 'no-text-transform' })\n noTextTransform = false;\n\n /** Expands the editor to fill the viewport. Esc exits. */\n @property({ type: Boolean, reflect: true }) fullscreen = false;\n\n /** Outlines block boundaries (paragraphs, headings, lists…) while editing. */\n @property({ type: Boolean, attribute: 'show-blocks', reflect: true })\n showBlocks = false;\n\n @state() private toolbarState?: ToolbarState;\n\n @state() private hasFocus = false;\n\n @state() private sourceMode = false;\n\n @state() private counter = { words: 0, characters: 0 };\n\n /** Which list the shared insert-menu is showing, if open. */\n @state() private insertMenuMode: 'template' | 'merge' | null = null;\n\n @query('.nile-wysiwyg') private baseEl!: HTMLElement;\n\n @query('nile-wysiwyg-toolbar') private toolbarEl?: HTMLElement;\n\n @query('.nile-wysiwyg__surface') private surfaceEl!: HTMLElement;\n\n @query('nile-wysiwyg-link-editor') private linkEditorEl!: NileWysiwygLinkEditor;\n\n @query('nile-wysiwyg-bubble-menu') private bubbleMenuEl!: NileWysiwygBubbleMenu;\n\n @query('nile-wysiwyg-image-panel') private imagePanelEl!: NileWysiwygImagePanel;\n\n @query('nile-wysiwyg-table-menu') private tableMenuEl!: NileWysiwygTableMenu;\n\n @query('nile-wysiwyg-suggest-list') private suggestListEl!: NileWysiwygSuggestList;\n\n @query('nile-wysiwyg-find-bar') private findBarEl!: NileWysiwygFindBar;\n\n @query('nile-wysiwyg-source-view') private sourceViewEl?: NileWysiwygSourceView;\n\n @query('nile-wysiwyg-embed-panel') private embedPanelEl!: NileWysiwygEmbedPanel;\n\n @query('nile-wysiwyg-bookmark-panel') private bookmarkPanelEl!: NileWysiwygBookmarkPanel;\n\n @query('nile-wysiwyg-code-menu') private codeMenuEl!: NileWysiwygCodeMenu;\n\n @query('nile-wysiwyg-shortcut-help') private shortcutHelpEl!: NileWysiwygShortcutHelp;\n\n @query('nile-wysiwyg-image-menu') private imageMenuEl!: NileWysiwygImageMenu;\n\n @query('nile-wysiwyg-embed-menu') private embedMenuEl!: NileWysiwygEmbedMenu;\n\n @query('nile-wysiwyg-special-chars') private specialCharsEl!: NileWysiwygSpecialChars;\n\n @query('nile-wysiwyg-emoji-picker') private emojiPickerEl!: NileWysiwygEmojiPicker;\n\n @query('nile-wysiwyg-insert-menu') private insertMenuEl!: NileWysiwygInsertMenu;\n\n @query('nile-wysiwyg-math-panel') private mathPanelEl!: NileWysiwygMathPanel;\n\n @query('nile-wysiwyg-markdown-panel') private markdownPanelEl!: NileWysiwygMarkdownPanel;\n\n private view?: EditorView;\n\n private mentionMatch: SuggestionMatch | null = null;\n\n private slashMatch: SuggestionMatch | null = null;\n\n private emojiMatch: SuggestionMatch | null = null;\n\n private activeSuggestSource: 'mention' | 'slash' | 'emoji' | null = null;\n\n private suggestDismissed: string | null = null;\n\n private mentionQueryToken = '';\n\n private autosaveTimer?: ReturnType<typeof setInterval>;\n\n private lastAutosaveValue = '';\n\n private internals?: ElementInternals;\n\n private defaultValue = '';\n\n private syncingValue = false;\n\n private changeTimer?: ReturnType<typeof setTimeout>;\n\n private pendingChange = false;\n\n /** Body overflow value before fullscreen locked it; null = not locked. */\n private previousBodyOverflow: string | null = null;\n\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n constructor() {\n super();\n if (typeof this.attachInternals === 'function') {\n this.internals = this.attachInternals();\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n // Remount after a disconnect/reconnect (e.g. host moved in the DOM).\n if (this.hasUpdated && !this.view) {\n this.updateComplete.then(() => this.mountView());\n }\n // Close floating panels when the user clicks anywhere outside them.\n document.addEventListener('pointerdown', this.onOutsidePointerDown, true);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('pointerdown', this.onOutsidePointerDown, true);\n if (this.changeTimer) clearTimeout(this.changeTimer);\n if (this.autosaveTimer) clearInterval(this.autosaveTimer);\n if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n this.view?.destroy();\n this.view = undefined;\n }\n\n protected firstUpdated(): void {\n this.defaultValue = this.value;\n this.mountView();\n }\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('value') && this.view && !this.syncingValue) {\n const current = docToHtml(this.view.state.doc);\n if (current !== this.value) this.setContent(this.value);\n }\n this.syncingValue = false;\n\n if ((changed.has('disabled') || changed.has('readonly')) && this.view) {\n this.view.setProps({});\n }\n if (changed.has('placeholder') && this.view) {\n // Decorations are recomputed on any transaction.\n this.view.dispatch(this.view.state.tr);\n }\n if (changed.has('required')) this.updateValidity();\n if (changed.has('autosaveInterval')) this.restartAutosave();\n if (\n (changed.has('pasteAsPlainText') ||\n changed.has('fullscreen') ||\n changed.has('showBlocks')) &&\n this.view\n ) {\n this.toolbarState = this.snapshotToolbar(this.view.state);\n }\n // Input rules are baked into the state at build time; rebuild in place\n // (same doc, fresh plugins) when the autocorrect toggle changes.\n if (changed.has('noTextTransform') && this.view && !changed.has('value')) {\n this.view.updateState(this.buildState(this.view.state.doc));\n }\n // Lock page scrolling while fullscreen covers the viewport.\n if (changed.has('fullscreen')) {\n if (this.fullscreen) {\n if (this.previousBodyOverflow === null) {\n this.previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n } else if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n }\n }\n\n private restartAutosave(): void {\n if (this.autosaveTimer) clearInterval(this.autosaveTimer);\n this.autosaveTimer = undefined;\n if (this.autosaveInterval > 0) {\n this.lastAutosaveValue = this.value;\n this.autosaveTimer = setInterval(() => {\n if (!this.view || this.value === this.lastAutosaveValue) return;\n this.lastAutosaveValue = this.value;\n this.emit('nile-autosave', this.buildChangeDetail(this.view.state.doc));\n }, this.autosaveInterval);\n }\n }\n\n // ------------------------------------------------------------------ view\n\n private buildState(doc?: PMNode): EditorState {\n return createEditorState({\n schema: defaultSchema,\n doc,\n getPlaceholder: () => this.placeholder,\n singleLine: this.singleLine,\n onLinkShortcut: () => this.openLinkEditor(),\n onFindShortcut: () => this.openFindBar(),\n onShortcutHelp: () => this.openShortcutHelp(),\n onImageFiles: (files, pos) => {\n for (const file of files) this.insertImageFile(file, pos);\n },\n mentions: {\n getTriggers: () => Object.keys(this.mentions),\n onChange: match => {\n this.mentionMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'mention'),\n },\n slashCommands: {\n onChange: match => {\n this.slashMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'slash'),\n },\n emoji: {\n onChange: match => {\n this.emojiMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'emoji'),\n },\n getMaxLength: () => this.maxLength,\n getForcePlainText: () => this.pasteAsPlainText,\n getMarkdownPaste: () => !this.noMarkdownPaste,\n getSanitize: () => this.sanitize,\n textTransform: !this.noTextTransform,\n });\n }\n\n /**\n * ToolbarState snapshot augmented with host-only flags the pure\n * computeToolbarState can't know about (e.g. the paste-as-plain-text toggle).\n */\n private snapshotToolbar(state: EditorState): ToolbarState {\n return {\n ...computeToolbarState(state),\n pasteAsPlainText: this.pasteAsPlainText,\n fullscreen: this.fullscreen,\n showBlocks: this.showBlocks,\n formatPainter: isFormatPainterArmed(state),\n };\n }\n\n private mountView(): void {\n if (this.view || !this.surfaceEl) return;\n let doc = this.value\n ? htmlToDoc(defaultSchema, this.value, this.sanitize)\n : undefined;\n if (doc && this.singleLine) doc = flattenToSingleParagraph(doc);\n\n this.view = new EditorView(this.surfaceEl, {\n state: this.buildState(doc),\n dispatchTransaction: tr => this.handleTransaction(tr),\n editable: () => !this.disabled && !this.readonly,\n transformPastedHTML: pasted => {\n // Word/Google Docs clipboard HTML gets normalized (real lists, no\n // mso noise) before the sanitizer clamps it to the schema.\n const cleaned = isOfficeHtml(pasted) ? cleanOfficeHtml(pasted) : pasted;\n return this.sanitize ? sanitizeHtml(cleaned) : cleaned;\n },\n handleDOMEvents: {\n mousedown: () => {\n // Clicking into the document dismisses the never-focused popovers\n // (they take no focus, so blur can't close them).\n this.closeSpecialChars(false);\n this.closeInsertMenu(false);\n return false;\n },\n focus: () => {\n this.hasFocus = true;\n this.updateOverlays();\n this.emit('nile-focus');\n return false;\n },\n blur: (_view, event) => {\n // Focus moving into the editor's own chrome (language picker,\n // panels) is not a blur — closing overlays here would dismiss\n // the control the user just clicked.\n const related = (event as FocusEvent).relatedTarget as Node | null;\n if (related && (this.shadowRoot?.contains(related) || this.contains(related))) {\n return false;\n }\n this.hasFocus = false;\n this.flushChange();\n this.updateOverlays();\n this.closeSuggestList();\n this.closeSpecialChars(false);\n this.emit('nile-blur');\n return false;\n },\n },\n attributes: {\n role: 'textbox',\n 'aria-multiline': this.singleLine ? 'false' : 'true',\n },\n nodeViews: {\n task_item: (node, view, getPos) =>\n new TaskItemView(node, view, getPos as () => number | undefined),\n image: (node, view, getPos) =>\n new ImageView(node, view, getPos as () => number | undefined),\n figure: (node, view, getPos) =>\n new FigureView(node, view, getPos as () => number | undefined),\n embed: (node, view, getPos) =>\n new EmbedView(node, view, getPos as () => number | undefined),\n math: node => new MathView(node, this.mathRenderer),\n },\n });\n\n this.toolbarState = this.snapshotToolbar(this.view.state);\n this.counter = countWords(this.view.state.doc);\n this.syncFormValue(this.view.state.doc);\n }\n\n private handleTransaction(tr: Transaction): void {\n if (!this.view) return;\n const newState = this.view.state.apply(tr);\n this.view.updateState(newState);\n\n // Format painter: once armed, the next non-empty selection the user makes\n // receives the copied formatting, then the painter disarms.\n if (tr.selectionSet && !newState.selection.empty && isFormatPainterArmed(newState)) {\n const applyTr = applyFormatPainter(newState);\n if (applyTr) {\n this.view.dispatch(applyTr);\n return;\n }\n }\n\n this.toolbarState = this.snapshotToolbar(newState);\n this.emit('nile-selection-change', this.toolbarState);\n this.updateOverlays();\n\n if (this.findBarEl?.open) {\n const find = getFindState(newState);\n this.findBarEl.matchCount = find.matches.length;\n this.findBarEl.activeIndex = find.activeIndex;\n }\n\n if (tr.docChanged) {\n const detail = this.buildChangeDetail(newState.doc);\n this.syncingValue = true;\n this.value = detail.value;\n this.syncFormValue(newState.doc);\n this.emit('nile-input', detail);\n this.counter = countWords(newState.doc);\n this.emit('nile-word-count', this.counter);\n this.scheduleChange();\n }\n }\n\n private buildChangeDetail(doc: PMNode): WysiwygChangeDetail {\n const value = isDocEmpty(doc) ? '' : docToHtml(doc);\n return { value, json: docToJson(doc), content: value };\n }\n\n private scheduleChange(): void {\n this.pendingChange = true;\n if (this.changeTimer) clearTimeout(this.changeTimer);\n this.changeTimer = setTimeout(() => this.flushChange(), CHANGE_DEBOUNCE_MS);\n }\n\n private flushChange(): void {\n if (!this.pendingChange || !this.view) return;\n this.pendingChange = false;\n if (this.changeTimer) clearTimeout(this.changeTimer);\n this.emit('nile-change', this.buildChangeDetail(this.view.state.doc));\n }\n\n // ------------------------------------------------------------------ form\n\n private syncFormValue(doc: PMNode): void {\n if (!this.internals) return;\n const value = isDocEmpty(doc) ? '' : docToHtml(doc);\n this.internals.setFormValue(value === '' ? null : value);\n this.updateValidity();\n }\n\n private updateValidity(): void {\n if (!this.internals) return;\n const empty = this.view ? isDocEmpty(this.view.state.doc) : this.value === '';\n if (this.required && empty) {\n this.internals.setValidity(\n { valueMissing: true },\n 'Please fill out this field.',\n this.surfaceEl ?? undefined\n );\n } else {\n this.internals.setValidity({});\n }\n }\n\n formResetCallback(): void {\n this.setContent(this.defaultValue);\n }\n\n formDisabledCallback(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public checkValidity(): boolean {\n return this.internals ? this.internals.checkValidity() : true;\n }\n\n public reportValidity(): boolean {\n return this.internals ? this.internals.reportValidity() : true;\n }\n\n // -------------------------------------------------------------- overlays\n\n /** Positions an overlay element near a doc position (default: selection). */\n private positionOverlay(\n el: HTMLElement,\n placement: 'above' | 'below',\n pos?: number\n ): void {\n if (!this.view || !this.baseEl) return;\n const from = pos ?? this.view.state.selection.from;\n const coords = this.view.coordsAtPos(from);\n const baseRect = this.baseEl.getBoundingClientRect();\n const left = Math.max(\n 4,\n Math.min(coords.left - baseRect.left, baseRect.width - el.offsetWidth - 4)\n );\n el.style.left = `${left}px`;\n if (placement === 'above') {\n el.style.top = `${Math.max(4, coords.top - baseRect.top - el.offsetHeight - 8)}px`;\n } else {\n el.style.top = `${coords.bottom - baseRect.top + 6}px`;\n }\n }\n\n /** Positions a floating panel directly below a toolbar/anchor element. */\n private positionOverlayBelowAnchor(el: HTMLElement, anchor: HTMLElement): void {\n if (!this.baseEl) return;\n const baseRect = this.baseEl.getBoundingClientRect();\n const anchorRect = anchor.getBoundingClientRect();\n const left = Math.max(\n 4,\n Math.min(anchorRect.left - baseRect.left, baseRect.width - el.offsetWidth - 4)\n );\n // Clear any CSS-pinned `right` (e.g. the find bar) so `left` wins.\n el.style.right = 'auto';\n el.style.left = `${left}px`;\n el.style.top = `${anchorRect.bottom - baseRect.top + 6}px`;\n }\n\n /** Finds a toolbar button by its aria-label, to anchor a panel below it. */\n private toolbarButton(label: string): HTMLElement | null {\n return (\n (this.toolbarEl?.shadowRoot?.querySelector(\n `button[aria-label=\"${label}\"]`\n ) as HTMLElement | null) ?? null\n );\n }\n\n private updateOverlays(): void {\n if (!this.bubbleMenuEl) return;\n const panelOpen =\n this.linkEditorEl?.open ||\n this.imagePanelEl?.open ||\n this.embedPanelEl?.open ||\n this.bookmarkPanelEl?.open ||\n this.emojiPickerEl?.open;\n const show =\n this.bubbleMenu &&\n this.hasFocus &&\n !!this.toolbarState &&\n !this.toolbarState.selectionEmpty &&\n !this.toolbarState.imageSelected &&\n !this.toolbarState.embedSelected &&\n !panelOpen;\n this.bubbleMenuEl.open = show;\n if (show) {\n this.bubbleMenuEl.toolbarState = this.toolbarState;\n this.bubbleMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.bubbleMenuEl, 'above')\n );\n }\n\n if (this.tableMenuEl) {\n const showTable =\n this.hasFocus && !!this.toolbarState && this.toolbarState.inTable && !panelOpen;\n this.tableMenuEl.open = showTable;\n if (showTable) {\n this.tableMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.tableMenuEl, 'below')\n );\n }\n }\n\n if (this.codeMenuEl) {\n const showCode =\n this.hasFocus && !!this.toolbarState && this.toolbarState.inCodeBlock && !panelOpen;\n this.codeMenuEl.open = showCode;\n if (showCode) {\n this.codeMenuEl.language = this.toolbarState!.codeBlockLanguage ?? '';\n this.codeMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.codeMenuEl, 'above')\n );\n }\n }\n\n if (this.imageMenuEl) {\n const showImage =\n this.hasFocus && !!this.toolbarState && this.toolbarState.imageSelected && !panelOpen;\n this.imageMenuEl.open = showImage;\n if (showImage) {\n this.imageMenuEl.toolbarState = this.toolbarState;\n this.imageMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.imageMenuEl, 'above')\n );\n }\n }\n\n if (this.embedMenuEl) {\n const showEmbed =\n this.hasFocus && !!this.toolbarState && this.toolbarState.embedSelected && !panelOpen;\n this.embedMenuEl.open = showEmbed;\n if (showEmbed) {\n this.embedMenuEl.toolbarState = this.toolbarState;\n this.embedMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.embedMenuEl, 'above')\n );\n }\n }\n }\n\n // -------------------------------------------------------- special chars\n\n private openSpecialChars(): void {\n if (!this.view || !this.specialCharsEl || this.disabled || this.readonly) return;\n this.specialCharsEl.open = true;\n this.specialCharsEl.updateComplete.then(() =>\n this.positionOverlay(this.specialCharsEl, 'below')\n );\n }\n\n private closeSpecialChars(refocus = true): void {\n if (this.specialCharsEl) this.specialCharsEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private insertSpecialChar(char: string): void {\n if (!this.view) return;\n this.view.dispatch(this.view.state.tr.insertText(char).scrollIntoView());\n this.view.focus();\n }\n\n // ------------------------------------------------ templates & merge fields\n\n private openInsertMenu(mode: 'template' | 'merge'): void {\n if (!this.view || !this.insertMenuEl || this.disabled || this.readonly) return;\n this.insertMenuMode = mode;\n const menu = this.insertMenuEl;\n if (mode === 'merge') {\n menu.heading = 'Merge field';\n menu.emptyText = 'No merge fields configured.';\n menu.items = this.mergeFields.map(f => ({ label: f.label, description: `{{${f.id}}}` }));\n } else {\n menu.heading = 'Template';\n menu.emptyText = 'No templates configured.';\n menu.items = this.templates.map(t => ({ label: t.label, description: t.description }));\n }\n menu.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n menu.updateComplete.then(() => this.positionOverlay(menu, 'below'));\n }\n\n private closeInsertMenu(refocus = true): void {\n if (this.insertMenuEl) this.insertMenuEl.open = false;\n this.insertMenuMode = null;\n if (refocus) this.view?.focus();\n }\n\n private handleInsertSelect(index: number): void {\n const mode = this.insertMenuMode;\n this.closeInsertMenu();\n if (!this.view) return;\n if (mode === 'merge') {\n const field = this.mergeFields[index];\n if (field) this.execCommand('insertMergeField', { id: field.id, label: field.label });\n } else if (mode === 'template') {\n const template = this.templates[index];\n if (template) this.insertHTML(template.html);\n }\n }\n\n /** Inserts a merge-field placeholder at the selection. */\n public insertMergeField(id: string, label?: string): void {\n this.execCommand('insertMergeField', { id, label: label ?? null });\n }\n\n /** Changes the case of the selected text. */\n public changeCase(mode: 'upper' | 'lower' | 'title' | 'sentence'): void {\n this.execCommand('changeCase', { textCase: mode });\n }\n\n // ---------------------------------------------------------------- math\n\n private openMathPanel(): void {\n if (!this.view || !this.mathPanelEl || this.disabled || this.readonly) return;\n this.mathPanelEl.reset();\n this.mathPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.mathPanelEl.updateComplete.then(() => {\n const anchor = this.toolbarButton('Insert math (LaTeX)');\n if (anchor) this.positionOverlayBelowAnchor(this.mathPanelEl, anchor);\n else this.positionOverlay(this.mathPanelEl, 'below');\n this.mathPanelEl.focusInput();\n });\n }\n\n private closeMathPanel(refocus = true): void {\n if (this.mathPanelEl) this.mathPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private openMarkdownPanel(): void {\n if (!this.view || !this.markdownPanelEl || this.disabled || this.readonly) return;\n this.markdownPanelEl.reset();\n this.markdownPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.markdownPanelEl.updateComplete.then(() => {\n const anchor = this.toolbarButton('Insert from Markdown');\n if (anchor) this.positionOverlayBelowAnchor(this.markdownPanelEl, anchor);\n else this.positionOverlay(this.markdownPanelEl, 'below');\n this.markdownPanelEl.focusInput();\n });\n }\n\n private closeMarkdownPanel(refocus = true): void {\n if (this.markdownPanelEl) this.markdownPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private applyMath(latex: string, display: 'inline' | 'block'): void {\n this.closeMathPanel();\n this.execCommand('insertMath', { latex, mathDisplay: display });\n }\n\n /** Inserts a math formula (LaTeX) at the selection. */\n public insertMath(latex: string, display: 'inline' | 'block' = 'inline'): void {\n this.execCommand('insertMath', { latex, mathDisplay: display });\n }\n\n // ----------------------------------------------------------------- emoji\n\n private openEmojiPicker(): void {\n if (!this.view || !this.emojiPickerEl || this.disabled || this.readonly) return;\n this.emojiPickerEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.emojiPickerEl.updateComplete.then(() => {\n this.positionOverlay(this.emojiPickerEl, 'below');\n this.emojiPickerEl.focusInput();\n });\n }\n\n private closeEmojiPicker(refocus = true): void {\n if (this.emojiPickerEl) this.emojiPickerEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // ---------------------------------------------------------------- embeds\n\n private openEmbedPanel(): void {\n if (!this.view || !this.embedPanelEl || this.disabled || this.readonly) return;\n this.embedPanelEl.reset();\n this.embedPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.embedPanelEl.updateComplete.then(() => {\n // Anchor below the embed toolbar button when available.\n const anchor = this.toolbarButton('Embed video (YouTube, Vimeo, Loom)');\n if (anchor) this.positionOverlayBelowAnchor(this.embedPanelEl, anchor);\n else this.positionOverlay(this.embedPanelEl, 'below');\n this.embedPanelEl.focusInput();\n });\n }\n\n private closeEmbedPanel(refocus = true): void {\n if (this.embedPanelEl) this.embedPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // -------------------------------------------------------------- bookmarks\n\n private openBookmarkPanel(): void {\n if (!this.view || !this.bookmarkPanelEl || this.disabled || this.readonly) return;\n this.bookmarkPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.bookmarkPanelEl.updateComplete.then(() => {\n this.positionOverlay(this.bookmarkPanelEl, 'below');\n this.bookmarkPanelEl.focusInput();\n });\n }\n\n private closeBookmarkPanel(refocus = true): void {\n if (this.bookmarkPanelEl) this.bookmarkPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // ---------------------------------------------------------------- images\n\n private openImagePanel(): void {\n if (!this.view || !this.imagePanelEl || this.disabled || this.readonly) return;\n // Editing an already-selected image/figure pre-fills the fields (and shows\n // Remove); otherwise open a blank insert panel.\n const info = selectedImageInfo(this.view.state);\n if (info) {\n this.imagePanelEl.prefill({\n src: info.node.attrs.src,\n alt: info.node.attrs.alt ?? '',\n caption: info.isFigure ? info.node.textContent : '',\n });\n } else {\n this.imagePanelEl.reset();\n }\n this.imagePanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.imagePanelEl.updateComplete.then(() => {\n // Anchor below the image toolbar button when it's available; otherwise\n // fall back to positioning at the cursor.\n const anchor = this.toolbarButton('Insert image');\n if (anchor) this.positionOverlayBelowAnchor(this.imagePanelEl, anchor);\n else this.positionOverlay(this.imagePanelEl, 'below');\n this.imagePanelEl.focusInput();\n });\n }\n\n private closeImagePanel(refocus = true): void {\n if (this.imagePanelEl) this.imagePanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private insertImageAt(\n src: string,\n alt: string | null,\n pos: number | null,\n caption: string | null = null\n ): void {\n if (!this.view) return;\n if (pos !== null) {\n const $pos = this.view.state.doc.resolve(\n Math.min(pos, this.view.state.doc.content.size)\n );\n this.view.dispatch(this.view.state.tr.setSelection(TextSelection.near($pos)));\n }\n this.execCommand('insertImage', { src, alt, caption });\n }\n\n /**\n * Routes an image file through the upload pipeline: a cancelable\n * `nile-image-upload-request` first, then `uploadHandler` (with an\n * uploading placeholder), then the base64 fallback.\n */\n public async insertImageFile(\n file: File,\n pos: number | null = null,\n meta?: { alt?: string | null; caption?: string | null }\n ): Promise<void> {\n if (!this.view) return;\n const metaAlt = meta?.alt ?? null;\n const metaCaption = meta?.caption ?? null;\n\n const request = this.emit(\n 'nile-image-upload-request',\n {\n file,\n insert: (src: string, alt?: string) =>\n this.insertImageAt(src, alt ?? metaAlt, pos, metaCaption),\n },\n true,\n true,\n true\n );\n if (request.defaultPrevented) return;\n\n if (this.uploadHandler) {\n uploadCounter += 1;\n const id = `nile-upload-${uploadCounter}`;\n const at = pos ?? this.view.state.selection.from;\n this.view.dispatch(this.view.state.tr.setMeta(imageUploadKey, { add: { id, pos: at } }));\n try {\n const { src, alt } = await this.uploadHandler(file);\n const mappedPos = this.view ? findUploadPos(this.view.state, id) : null;\n this.view?.dispatch(this.view.state.tr.setMeta(imageUploadKey, { remove: { id } }));\n this.insertImageAt(src, metaAlt ?? alt ?? null, mappedPos, metaCaption);\n } catch (error) {\n this.view?.dispatch(this.view.state.tr.setMeta(imageUploadKey, { remove: { id } }));\n this.emit('nile-image-upload-error', { file, error });\n }\n return;\n }\n\n if (this.allowBase64Images) {\n const src = await readFileAsDataURL(file);\n this.insertImageAt(src, metaAlt, pos, metaCaption);\n }\n }\n\n // ---------------------------------------------------- mentions & slash\n\n private dismissKeyFor(\n source: 'mention' | 'slash' | 'emoji',\n match: SuggestionMatch\n ): string {\n return `${source}:${match.trigger}:${match.from}`;\n }\n\n private handleSuggestKey(\n event: KeyboardEvent,\n source: 'mention' | 'slash' | 'emoji'\n ): boolean {\n if (this.activeSuggestSource !== source || !this.suggestListEl?.open) return false;\n switch (event.key) {\n case 'ArrowDown':\n this.suggestListEl.next();\n return true;\n case 'ArrowUp':\n this.suggestListEl.prev();\n return true;\n case 'Enter':\n case 'Tab':\n return this.suggestListEl.selectCurrent();\n case 'Escape': {\n const match =\n source === 'mention'\n ? this.mentionMatch\n : source === 'slash'\n ? this.slashMatch\n : this.emojiMatch;\n if (match) this.suggestDismissed = this.dismissKeyFor(source, match);\n this.closeSuggestList();\n return true;\n }\n default:\n return false;\n }\n }\n\n private closeSuggestList(): void {\n if (this.suggestListEl) this.suggestListEl.open = false;\n this.activeSuggestSource = null;\n }\n\n private updateSuggestList(): void {\n if (!this.suggestListEl || !this.view) return;\n const mention = this.mentionMatch?.active ? this.mentionMatch : null;\n const slash =\n !this.noSlashCommands && this.slashMatch?.active ? this.slashMatch : null;\n const emoji = !this.noEmoji && this.emojiMatch?.active ? this.emojiMatch : null;\n const source: 'mention' | 'slash' | 'emoji' | null = mention\n ? 'mention'\n : slash\n ? 'slash'\n : emoji\n ? 'emoji'\n : null;\n const match = mention ?? slash ?? emoji;\n\n if (!source || !match || this.disabled || this.readonly) {\n this.closeSuggestList();\n return;\n }\n if (this.suggestDismissed === this.dismissKeyFor(source, match)) return;\n this.suggestDismissed = null;\n\n if (source === 'mention') {\n const all = this.mentions[match.trigger] ?? [];\n const query = match.query.toLowerCase();\n this.suggestListEl.items = all.filter(item =>\n item.label.toLowerCase().includes(query)\n );\n // Async override: listeners may provide items for this exact query.\n const token = `${match.trigger} ${match.query}`;\n this.mentionQueryToken = token;\n this.emit('nile-mention-query', {\n trigger: match.trigger,\n query: match.query,\n provide: (items: { key: string; label: string }[]) => {\n if (this.mentionQueryToken !== token || !Array.isArray(items)) return;\n this.suggestListEl.items = items\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n },\n });\n } else if (source === 'slash') {\n const query = match.query.toLowerCase();\n const snippetItems: SuggestItem[] = this.snippets.map(s => ({\n key: `snippet:${s.key}`,\n label: s.label,\n hint: 'snippet',\n }));\n this.suggestListEl.items = [...SLASH_ITEMS, ...snippetItems].filter(item =>\n item.label.toLowerCase().includes(query)\n );\n } else {\n const query = match.query.toLowerCase();\n this.suggestListEl.items = EMOJI.filter(e => e.name.includes(query))\n .slice(0, 12)\n .map(e => ({ key: e.name, label: `${e.char} ${e.name}` }));\n if (this.suggestListEl.items.length === 0) {\n this.closeSuggestList();\n return;\n }\n }\n\n this.activeSuggestSource = source;\n this.suggestListEl.resetActive();\n this.suggestListEl.open = true;\n this.suggestListEl.updateComplete.then(() =>\n this.positionOverlay(this.suggestListEl, 'below', match.from)\n );\n }\n\n private handleSuggestSelect(item: SuggestItem): void {\n if (!this.view) return;\n if (this.activeSuggestSource === 'mention' && this.mentionMatch?.active) {\n const match = this.mentionMatch;\n const { state } = this.view;\n const mention = state.schema.nodes.mention.create({\n trigger: match.trigger,\n key: item.key,\n label: item.label,\n });\n this.view.dispatch(\n state.tr.replaceWith(match.from, match.to, [mention, state.schema.text(' ')])\n );\n this.view.focus();\n this.emit('nile-mention-select', {\n trigger: match.trigger,\n key: item.key,\n label: item.label,\n });\n } else if (this.activeSuggestSource === 'slash' && this.slashMatch?.active) {\n const match = this.slashMatch;\n this.view.dispatch(this.view.state.tr.delete(match.from, match.to));\n this.closeSuggestList();\n if (item.key.startsWith('snippet:')) {\n const snippet = this.snippets.find(s => `snippet:${s.key}` === item.key);\n if (snippet) this.insertHTML(snippet.html);\n return;\n }\n const slashItem = SLASH_ITEMS.find(s => s.key === item.key);\n if (!slashItem) return;\n if (slashItem.command === 'openImage') this.openImagePanel();\n else if (slashItem.command === 'openEmbed') this.openEmbedPanel();\n else if (slashItem.command === 'openBookmark') this.openBookmarkPanel();\n else this.execCommand(slashItem.command, slashItem.attrs);\n } else if (this.activeSuggestSource === 'emoji' && this.emojiMatch?.active) {\n const match = this.emojiMatch;\n const emoji = EMOJI.find(e => e.name === item.key);\n if (emoji) {\n this.view.dispatch(\n this.view.state.tr.insertText(emoji.char, match.from, match.to)\n );\n this.view.focus();\n }\n }\n this.closeSuggestList();\n }\n\n // ---------------------------------------------------------- find & replace\n\n /** Opens the find & replace bar (also bound to Mod-f inside the editor). */\n public openFindBar(): void {\n if (!this.findBarEl || this.sourceMode) return;\n this.findBarEl.open = true;\n const find = this.view ? getFindState(this.view.state) : null;\n this.findBarEl.matchCount = find?.matches.length ?? 0;\n this.findBarEl.activeIndex = find?.activeIndex ?? 0;\n this.findBarEl.updateComplete.then(() => {\n // Anchor below the Find & replace toolbar button when present; otherwise\n // fall back to the CSS-pinned top-right position.\n const anchor = this.toolbarButton('Find & replace (Ctrl+F)');\n if (anchor) this.positionOverlayBelowAnchor(this.findBarEl, anchor);\n this.findBarEl.focusInput();\n });\n }\n\n public closeFindBar(): void {\n if (this.view) this.view.dispatch(clearFindTr(this.view.state));\n if (this.findBarEl) this.findBarEl.open = false;\n this.view?.focus();\n }\n\n public find(query: string): number {\n if (!this.view) return 0;\n this.view.dispatch(searchTr(this.view.state, query));\n this.scrollToActiveMatch();\n return getFindState(this.view.state).matches.length;\n }\n\n public findNext(): void {\n if (!this.view) return;\n this.view.dispatch(findStepTr(this.view.state, 'next'));\n this.scrollToActiveMatch();\n }\n\n public findPrev(): void {\n if (!this.view) return;\n this.view.dispatch(findStepTr(this.view.state, 'prev'));\n this.scrollToActiveMatch();\n }\n\n public replace(replacement: string): void {\n if (!this.view) return;\n const tr = replaceActiveTr(this.view.state, replacement);\n if (tr) this.view.dispatch(tr);\n }\n\n public replaceAll(replacement: string): void {\n if (!this.view) return;\n const tr = replaceAllTr(this.view.state, replacement);\n if (tr) this.view.dispatch(tr);\n }\n\n private scrollToActiveMatch(): void {\n if (!this.view) return;\n const find = getFindState(this.view.state);\n const match = find.matches[find.activeIndex];\n if (!match) return;\n this.view.dispatch(\n this.view.state.tr\n .setSelection(TextSelection.create(this.view.state.doc, match.from, match.to))\n .scrollIntoView()\n );\n }\n\n // -------------------------------------------------------------- source view\n\n /** Toggles raw-HTML source editing. Content re-sanitizes on the way back. */\n public toggleSourceView(): void {\n if (this.sourceMode) {\n this.applySourceView(this.sourceViewEl?.textarea?.value ?? null);\n } else {\n this.sourceMode = true;\n this.updateComplete.then(() => {\n if (this.sourceViewEl) {\n this.sourceViewEl.value = this.getHTML();\n this.sourceViewEl.focusInput();\n }\n });\n }\n }\n\n private applySourceView(htmlContent: string | null): void {\n this.sourceMode = false;\n if (htmlContent !== null) this.setContent(htmlContent, true);\n this.updateComplete.then(() => this.view?.focus());\n }\n\n /** Word and character counts for the current document. */\n public getWordCount(): { words: number; characters: number } {\n return this.view ? countWords(this.view.state.doc) : { words: 0, characters: 0 };\n }\n\n /**\n * Arms the format painter (copies the formatting at the selection) or, if\n * already armed, disarms it. Once armed, the next non-empty selection the\n * user makes receives the copied formatting.\n */\n public toggleFormatPainter(): void {\n if (!this.view) return;\n const tr = isFormatPainterArmed(this.view.state)\n ? disarmFormatPainter(this.view.state)\n : armFormatPainter(this.view.state);\n if (tr) this.view.dispatch(tr);\n this.view.focus();\n }\n\n // ---------------------------------------------------------- export & import\n\n /** The live, styled content element used as the source for exports. */\n private get contentRoot(): HTMLElement | null {\n return (this.view?.dom as HTMLElement | undefined) ?? null;\n }\n\n /** Sanitizes `this.name` (or a fallback) into a safe download basename. */\n private exportFilename(extension: string): string {\n const base =\n (this.name || 'document').replace(/[^\\w.-]+/g, '-').replace(/^-+|-+$/g, '') || 'document';\n return `${base}.${extension}`;\n }\n\n private downloadBlob(content: string, mime: string, filename: string): void {\n const blob = new Blob([content], { type: mime });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = filename;\n anchor.style.display = 'none';\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n // Revoke after the click so the download has a chance to start.\n setTimeout(() => URL.revokeObjectURL(url), 0);\n }\n\n /**\n * The document as HTML with every style folded into inline `style`\n * attributes — the form email clients (which strip `<style>` blocks and\n * classes) can render. Returns the string; does not download.\n */\n public getInlineStyledHTML(): string {\n const root = this.contentRoot;\n if (!this.view || !root || isDocEmpty(this.view.state.doc)) return '';\n return toInlineStyledHtml(root);\n }\n\n /** Downloads the document as an inline-styled, email-ready `.html` file. */\n public exportInlineHtml(filename?: string): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const doc = `<!DOCTYPE html>\\n<html><head><meta charset=\"utf-8\"></head><body>${body}</body></html>`;\n this.downloadBlob(doc, 'text/html;charset=utf-8', filename ?? this.exportFilename('html'));\n }\n\n /** Downloads the document as a Word-openable `.doc` file. */\n public exportToWord(filename?: string): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const doc = buildWordDocument(body, this.name || 'Document');\n this.downloadBlob(doc, 'application/msword', filename ?? this.exportFilename('doc'));\n }\n\n /**\n * Opens the browser print dialog with a self-contained, print-tuned copy of\n * the document (\"Save as PDF\"). Honours page breaks, embedded images and the\n * base font; optional running header/footer text.\n */\n public exportToPdf(\n options: { header?: string; footer?: string; fontFamily?: string } = {}\n ): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const source = buildPrintDocument(body, { title: this.name || 'Document', ...options });\n\n const frame = document.createElement('iframe');\n frame.setAttribute('aria-hidden', 'true');\n Object.assign(frame.style, {\n position: 'fixed',\n right: '0',\n bottom: '0',\n width: '0',\n height: '0',\n border: '0',\n });\n document.body.appendChild(frame);\n\n const cleanup = (): void => {\n // Delay removal so the browser's print job keeps its document alive.\n setTimeout(() => frame.remove(), 1000);\n };\n\n frame.onload = (): void => {\n const win = frame.contentWindow;\n if (!win) {\n cleanup();\n return;\n }\n win.focus();\n win.addEventListener('afterprint', cleanup, { once: true });\n win.print();\n };\n\n const fdoc = frame.contentDocument;\n if (!fdoc) {\n frame.remove();\n return;\n }\n fdoc.open();\n fdoc.write(source);\n fdoc.close();\n }\n\n /**\n * Imports Word / Google-Docs HTML: normalizes the proprietary markup to\n * clean semantic HTML, then replaces the document. Fidelity note: comments\n * and track-changes are not preserved — the editor has no model for them,\n * and binary `.docx`/`.doc` files are not parsed (export as \"Web Page\" /\n * HTML first, or paste directly, which is handled automatically).\n */\n public importFromWord(html: string, emitChange = true): void {\n if (!html) return;\n const cleaned = isOfficeHtml(html) ? cleanOfficeHtml(html) : html;\n this.setContent(cleaned, emitChange);\n }\n\n /** Opens a file picker for an HTML export and imports it (toolbar action). */\n private importFromWordFile(): void {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = '.htm,.html,text/html';\n input.style.display = 'none';\n input.addEventListener('change', () => {\n const file = input.files?.[0];\n input.remove();\n if (!file) return;\n file.text().then(text => this.importFromWord(text));\n });\n document.body.appendChild(input);\n input.click();\n }\n\n // -------------------------------------------------------- shortcut help\n\n /** Opens the keyboard shortcut reference (also bound to Mod-/). */\n public openShortcutHelp(): void {\n if (!this.shortcutHelpEl) return;\n this.shortcutHelpEl.open = true;\n this.shortcutHelpEl.focusPanel();\n }\n\n public closeShortcutHelp(): void {\n if (this.shortcutHelpEl) this.shortcutHelpEl.open = false;\n this.view?.focus();\n }\n\n // ------------------------------------------------------------ fullscreen\n\n /** Toggles distraction-free fullscreen mode. Esc exits. */\n public toggleFullscreen(): void {\n this.fullscreen = !this.fullscreen;\n this.view?.focus();\n }\n\n private openLinkEditor(): void {\n if (!this.view || !this.linkEditorEl || this.disabled || this.readonly) return;\n const ts = this.toolbarState ?? computeToolbarState(this.view.state);\n this.linkEditorEl.href = ts.linkHref ?? '';\n this.linkEditorEl.text = '';\n this.linkEditorEl.allowText = ts.selectionEmpty && !ts.linkActive;\n this.linkEditorEl.canRemove = ts.linkActive;\n this.linkEditorEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n this.linkEditorEl.updateComplete.then(() => {\n this.positionOverlay(this.linkEditorEl, 'below');\n this.linkEditorEl.focusInput();\n });\n }\n\n private closeLinkEditor(refocus = true): void {\n if (this.linkEditorEl) this.linkEditorEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private applyLink(href: string, text: string): void {\n if (!this.view) return;\n const { state } = this.view;\n const linkType = state.schema.marks.link;\n if (state.selection.empty && !getMarkRange(state.selection.$from, linkType)) {\n const label = text || href;\n const node = state.schema.text(label, [linkType.create({ href })]);\n this.view.dispatch(state.tr.replaceSelectionWith(node, false).scrollIntoView());\n } else {\n this.execCommand('link', { href });\n }\n this.closeLinkEditor();\n }\n\n // ---------------------------------------------------------------- public\n\n /** The underlying ProseMirror EditorView. Advanced escape hatch. */\n public get pmView(): EditorView | undefined {\n return this.view;\n }\n\n /** Document as ProseMirror JSON. */\n public get json(): Record<string, unknown> | null {\n return this.view ? docToJson(this.view.state.doc) : null;\n }\n\n public set json(value: Record<string, unknown> | null) {\n if (value) this.setContent(value);\n }\n\n public override focus(): void {\n this.view?.focus();\n }\n\n public override blur(): void {\n (this.view?.dom as HTMLElement | undefined)?.blur();\n }\n\n public getHTML(): string {\n return this.view && !isDocEmpty(this.view.state.doc)\n ? docToHtml(this.view.state.doc)\n : '';\n }\n\n public getJSON(): Record<string, unknown> | null {\n return this.json;\n }\n\n public getText(): string {\n return this.view ? docToText(this.view.state.doc) : '';\n }\n\n /**\n * Document as Markdown. Best-effort: structural nodes and Markdown-native\n * marks are converted; color/font marks are dropped to plain text. Use\n * getHTML() when a loss-free representation is required.\n */\n public getMarkdown(): string {\n return this.view && !isDocEmpty(this.view.state.doc)\n ? docToMarkdown(this.view.state.doc)\n : '';\n }\n\n /**\n * Replaces the document with parsed Markdown. Covers the same subset as\n * getMarkdown(): headings, lists, code fences, tables, quotes and the\n * inline marks. The parsed HTML flows through the schema and sanitizer.\n */\n public setMarkdown(markdown: string, emitChange = false): void {\n this.setContent(markdownToHtml(markdown), emitChange);\n }\n\n /** Parses and inserts Markdown at the current selection. */\n public insertMarkdown(markdown: string): void {\n this.insertHTML(markdownToHtml(markdown));\n }\n\n /** Replaces the document. Accepts an HTML string or ProseMirror JSON. */\n public setContent(content: string | Record<string, unknown>, emitChange = false): void {\n if (!this.view) {\n if (typeof content === 'string') this.value = content;\n return;\n }\n let doc =\n typeof content === 'string'\n ? htmlToDoc(defaultSchema, content, this.sanitize)\n : jsonToDoc(defaultSchema, content);\n if (this.singleLine) doc = flattenToSingleParagraph(doc);\n this.view.updateState(this.buildState(doc));\n this.toolbarState = this.snapshotToolbar(this.view.state);\n this.syncingValue = true;\n this.value = isDocEmpty(doc) ? '' : docToHtml(doc);\n this.syncFormValue(doc);\n if (emitChange) {\n this.emit('nile-input', this.buildChangeDetail(doc));\n this.emit('nile-change', this.buildChangeDetail(doc));\n }\n }\n\n public clear(): void {\n this.setContent('');\n }\n\n /** Parses and inserts HTML at the current selection. */\n public insertHTML(htmlContent: string): void {\n if (!this.view) return;\n const slice = htmlToSlice(defaultSchema, htmlContent, this.sanitize);\n this.view.dispatch(this.view.state.tr.replaceSelection(slice).scrollIntoView());\n this.view.focus();\n }\n\n /** Runs a named editor command. Returns whether the command applied. */\n public execCommand(name: string, attrs?: CommandAttrs): boolean {\n if (!this.view) return false;\n const command = getCommand(this.view.state, name as CommandName, attrs);\n if (!command) return false;\n const applied = command(this.view.state, this.view.dispatch, this.view);\n this.view.focus();\n return applied;\n }\n\n /** True when the given mark/block command is active at the selection. */\n public isCommandActive(name: string): boolean {\n const ts = this.toolbarState;\n if (!ts) return false;\n switch (name) {\n case 'bold':\n return ts.bold;\n case 'italic':\n return ts.italic;\n case 'underline':\n return ts.underline;\n case 'strike':\n return ts.strike;\n case 'code':\n return ts.code;\n case 'link':\n return ts.linkActive;\n case 'bulletList':\n return ts.inBulletList;\n case 'orderedList':\n return ts.inOrderedList;\n case 'blockquote':\n return ts.inBlockquote;\n default:\n return false;\n }\n }\n\n // ---------------------------------------------------------------- render\n\n private handleCommand(event: CustomEvent<WysiwygCommandDetail>): void {\n event.stopPropagation();\n const { name, attrs } = event.detail;\n if (name === 'openLink') {\n this.openLinkEditor();\n return;\n }\n if (name === 'openImage') {\n this.openImagePanel();\n return;\n }\n if (name === 'openEmbed') {\n this.openEmbedPanel();\n return;\n }\n if (name === 'openBookmark') {\n this.openBookmarkPanel();\n return;\n }\n if (name === 'toggleShowBlocks') {\n this.showBlocks = !this.showBlocks;\n this.view?.focus();\n return;\n }\n if (name === 'toggleSource') {\n this.toggleSourceView();\n return;\n }\n if (name === 'togglePastePlainText') {\n this.pasteAsPlainText = !this.pasteAsPlainText;\n this.view?.focus();\n return;\n }\n if (name === 'toggleFullscreen') {\n this.toggleFullscreen();\n return;\n }\n if (name === 'openShortcutHelp') {\n this.openShortcutHelp();\n return;\n }\n if (name === 'openSpecialChars') {\n this.openSpecialChars();\n return;\n }\n if (name === 'openEmoji') {\n this.openEmojiPicker();\n return;\n }\n if (name === 'openFind') {\n this.openFindBar();\n return;\n }\n if (name === 'exportPdf') {\n this.exportToPdf();\n return;\n }\n if (name === 'exportWord') {\n this.exportToWord();\n return;\n }\n if (name === 'exportInlineHtml') {\n this.exportInlineHtml();\n return;\n }\n if (name === 'importWord') {\n this.importFromWordFile();\n return;\n }\n if (name === 'toggleFormatPainter') {\n this.toggleFormatPainter();\n return;\n }\n if (name === 'openMergeField') {\n this.openInsertMenu('merge');\n return;\n }\n if (name === 'openTemplate') {\n this.openInsertMenu('template');\n return;\n }\n if (name === 'openMarkdown') {\n this.openMarkdownPanel();\n return;\n }\n if (name === 'openMath') {\n this.openMathPanel();\n return;\n }\n this.execCommand(name, attrs);\n }\n\n private handleBaseKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n // The special-chars panel never takes focus, so its Esc lands here.\n if (this.specialCharsEl?.open) {\n this.closeSpecialChars();\n return;\n }\n // Esc exits fullscreen — but only when nothing else claimed it (panels\n // stopPropagation, ProseMirror handlers preventDefault).\n if (!this.fullscreen) return;\n const panelOpen =\n this.linkEditorEl?.open ||\n this.imagePanelEl?.open ||\n this.embedPanelEl?.open ||\n this.bookmarkPanelEl?.open ||\n this.emojiPickerEl?.open ||\n this.findBarEl?.open ||\n this.shortcutHelpEl?.open ||\n this.suggestListEl?.open;\n if (!panelOpen) this.fullscreen = false;\n }\n\n private handleChromeFocusOut(event: FocusEvent): void {\n // Focus left the widget entirely (e.g. clicked the page) while it was\n // parked on chrome like the language picker: close the overlays.\n const related = event.relatedTarget as Node | null;\n if (related && (this.shadowRoot?.contains(related) || this.contains(related))) return;\n if (this.view?.hasFocus()) return;\n this.hasFocus = false;\n this.updateOverlays();\n }\n\n /** The floating insert panels that should dismiss on outside interaction. */\n private get floatingPanels(): Array<{ open: boolean } | undefined> {\n return [\n this.linkEditorEl,\n this.imagePanelEl,\n this.embedPanelEl,\n this.bookmarkPanelEl,\n this.specialCharsEl,\n this.emojiPickerEl,\n this.insertMenuEl,\n this.mathPanelEl,\n this.markdownPanelEl,\n ];\n }\n\n /** Closes every open insert panel. `refocus` returns focus to the editor. */\n private closeAllPanels(refocus = true): void {\n if (this.linkEditorEl?.open) this.closeLinkEditor(refocus);\n if (this.imagePanelEl?.open) this.closeImagePanel(refocus);\n if (this.embedPanelEl?.open) this.closeEmbedPanel(refocus);\n if (this.bookmarkPanelEl?.open) this.closeBookmarkPanel(refocus);\n if (this.specialCharsEl?.open) this.closeSpecialChars(refocus);\n if (this.emojiPickerEl?.open) this.closeEmojiPicker(refocus);\n if (this.insertMenuEl?.open) this.closeInsertMenu(refocus);\n if (this.mathPanelEl?.open) this.closeMathPanel(refocus);\n if (this.markdownPanelEl?.open) this.closeMarkdownPanel(refocus);\n }\n\n /**\n * Closes any open insert panel when the pointer goes down outside of it —\n * whether elsewhere in the editor (e.g. the content area) or off the widget.\n */\n private onOutsidePointerDown = (event: Event): void => {\n const openPanels = this.floatingPanels.filter(\n (p): p is HTMLElement & { open: boolean } => !!p && (p as { open: boolean }).open\n );\n if (!openPanels.length) return;\n const path = event.composedPath();\n // Click landed inside an open panel — leave it be.\n if (openPanels.some(panel => path.includes(panel))) return;\n // Refocus the editor only when the click stayed within the widget.\n const insideWidget =\n path.includes(this) || (!!this.shadowRoot && path.includes(this.shadowRoot));\n this.closeAllPanels(insideWidget);\n };\n\n public render(): TemplateResult {\n const showToolbar = this.toolbar !== 'none' && !this.readonly && !this.sourceMode;\n return html`\n <div\n class=\"nile-wysiwyg ${this.showBlocks ? 'nile-wysiwyg--show-blocks' : ''}\"\n part=\"base\"\n @wysiwyg-command=${this.handleCommand}\n @focusout=${this.handleChromeFocusOut}\n @keydown=${this.handleBaseKeydown}\n >\n ${showToolbar\n ? html`\n <nile-wysiwyg-toolbar\n part=\"toolbar\"\n exportparts=\"button, select, color\"\n config=${this.toolbar}\n ?disabled=${this.disabled}\n .toolbarState=${this.toolbarState}\n ></nile-wysiwyg-toolbar>\n `\n : nothing}\n ${this.sourceMode\n ? html`\n <nile-wysiwyg-source-view\n @wysiwyg-source-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applySourceView(e.detail.html);\n }}\n @wysiwyg-source-cancel=${(e: Event) => {\n e.stopPropagation();\n this.applySourceView(null);\n }}\n ></nile-wysiwyg-source-view>\n `\n : nothing}\n <div\n class=\"nile-wysiwyg__surface\"\n part=\"surface\"\n style=${this.sourceMode ? 'display: none' : ''}\n ></div>\n ${(this.maxLength > 0 || this.showCounter) && !this.sourceMode\n ? html`\n <div\n class=\"nile-wysiwyg__counter ${this.maxLength > 0 &&\n this.counter.characters >= this.maxLength\n ? 'over'\n : ''}\"\n part=\"counter\"\n >\n ${this.maxLength > 0\n ? `${this.counter.characters} / ${this.maxLength}`\n : `${this.counter.words} words · ${this.counter.characters} characters`}\n </div>\n `\n : nothing}\n <nile-wysiwyg-shortcut-help\n @wysiwyg-shortcut-help-close=${(e: Event) => {\n e.stopPropagation();\n this.closeShortcutHelp();\n }}\n ></nile-wysiwyg-shortcut-help>\n <nile-wysiwyg-bubble-menu></nile-wysiwyg-bubble-menu>\n <nile-wysiwyg-table-menu></nile-wysiwyg-table-menu>\n <nile-wysiwyg-code-menu></nile-wysiwyg-code-menu>\n <nile-wysiwyg-image-menu></nile-wysiwyg-image-menu>\n <nile-wysiwyg-embed-menu></nile-wysiwyg-embed-menu>\n <nile-wysiwyg-special-chars\n @wysiwyg-char-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.insertSpecialChar(e.detail.char);\n }}\n @wysiwyg-char-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeSpecialChars();\n }}\n ></nile-wysiwyg-special-chars>\n <nile-wysiwyg-emoji-picker\n @wysiwyg-emoji-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeEmojiPicker();\n this.insertSpecialChar(e.detail.char);\n }}\n @wysiwyg-emoji-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeEmojiPicker();\n }}\n ></nile-wysiwyg-emoji-picker>\n <nile-wysiwyg-insert-menu\n @wysiwyg-insert-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.handleInsertSelect(e.detail.index);\n }}\n @wysiwyg-insert-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeInsertMenu();\n }}\n ></nile-wysiwyg-insert-menu>\n <nile-wysiwyg-math-panel\n @wysiwyg-math-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applyMath(e.detail.latex, e.detail.display);\n }}\n @wysiwyg-math-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeMathPanel();\n }}\n ></nile-wysiwyg-math-panel>\n <nile-wysiwyg-markdown-panel\n @wysiwyg-markdown-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeMarkdownPanel();\n this.insertMarkdown(e.detail.markdown);\n }}\n @wysiwyg-markdown-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeMarkdownPanel();\n }}\n ></nile-wysiwyg-markdown-panel>\n <nile-wysiwyg-embed-panel\n @wysiwyg-embed-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeEmbedPanel();\n this.execCommand('insertEmbed', {\n src: e.detail.src,\n provider: e.detail.provider,\n });\n }}\n @wysiwyg-embed-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeEmbedPanel();\n }}\n ></nile-wysiwyg-embed-panel>\n <nile-wysiwyg-bookmark-panel\n @wysiwyg-bookmark-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeBookmarkPanel();\n this.execCommand('insertBookmark', { id: e.detail.id });\n }}\n @wysiwyg-bookmark-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeBookmarkPanel();\n }}\n ></nile-wysiwyg-bookmark-panel>\n <nile-wysiwyg-suggest-list\n @wysiwyg-suggest-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.handleSuggestSelect(e.detail.item);\n }}\n ></nile-wysiwyg-suggest-list>\n <nile-wysiwyg-find-bar\n @wysiwyg-find=${(e: CustomEvent) => {\n e.stopPropagation();\n this.find(e.detail.query);\n }}\n @wysiwyg-find-step=${(e: CustomEvent) => {\n e.stopPropagation();\n if (e.detail.direction === 'prev') this.findPrev();\n else this.findNext();\n }}\n @wysiwyg-replace=${(e: CustomEvent) => {\n e.stopPropagation();\n this.replace(e.detail.value);\n }}\n @wysiwyg-replace-all=${(e: CustomEvent) => {\n e.stopPropagation();\n this.replaceAll(e.detail.value);\n }}\n @wysiwyg-find-close=${(e: Event) => {\n e.stopPropagation();\n this.closeFindBar();\n }}\n ></nile-wysiwyg-find-bar>\n <nile-wysiwyg-image-panel\n ?upload-from-computer=${this.uploadFromComputer}\n .maxFileSize=${this.imageMaxFileSize}\n @wysiwyg-image-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n const editing = this.imagePanelEl?.editing;\n this.closeImagePanel();\n this.execCommand(editing ? 'updateImage' : 'insertImage', {\n src: e.detail.src,\n alt: e.detail.alt || null,\n caption: e.detail.caption || null,\n });\n }}\n @wysiwyg-image-file=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeImagePanel();\n this.insertImageFile(e.detail.file, null, {\n alt: e.detail.alt || null,\n caption: e.detail.caption || null,\n });\n }}\n @wysiwyg-image-remove=${(e: Event) => {\n e.stopPropagation();\n this.closeImagePanel();\n this.execCommand('deleteImage');\n }}\n @wysiwyg-image-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeImagePanel();\n }}\n ></nile-wysiwyg-image-panel>\n <nile-wysiwyg-link-editor\n @wysiwyg-link-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applyLink(e.detail.href, e.detail.text);\n }}\n @wysiwyg-link-remove=${(e: Event) => {\n e.stopPropagation();\n this.execCommand('unlink');\n this.closeLinkEditor();\n }}\n @wysiwyg-link-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeLinkEditor();\n }}\n ></nile-wysiwyg-link-editor>\n </div>\n `;\n }\n}\n\nexport default NileWysiwygEditor;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-editor': NileWysiwygEditor;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ import '../index';