@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":"schema.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/engine/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { Schema, NodeSpec, MarkSpec } from 'prosemirror-model';\nimport { addListNodes } from 'prosemirror-schema-list';\nimport { tableNodes } from 'prosemirror-tables';\nimport OrderedMap from 'orderedmap';\n\nexport type Alignment = 'left' | 'center' | 'right' | 'justify';\n\nconst ALIGN_VALUES: Alignment[] = ['left', 'center', 'right', 'justify'];\n\nfunction getAlignFromDom(dom: HTMLElement): Alignment | null {\n const value = dom.style.textAlign || dom.getAttribute('align') || '';\n return (ALIGN_VALUES as string[]).includes(value) ? (value as Alignment) : null;\n}\n\nfunction alignStyle(align: Alignment | null): string | null {\n return align ? `text-align: ${align}` : null;\n}\n\n/** Indent depth in 40px steps, like CKEditor/Google Docs. */\nexport const INDENT_STEP_PX = 40;\nexport const MAX_INDENT = 8;\n\nfunction getIndentFromDom(dom: HTMLElement): number {\n const raw = dom.style.marginInlineStart || dom.style.marginLeft || '';\n const px = parseFloat(raw);\n if (!Number.isFinite(px) || px <= 0) return 0;\n return Math.min(MAX_INDENT, Math.round(px / INDENT_STEP_PX));\n}\n\n/**\n * Line height as a unitless multiplier string ('1.5'). Percentages are\n * converted; px values pass through as-is so pasted content keeps its look.\n */\nfunction getLineHeightFromDom(dom: HTMLElement): string | null {\n const raw = dom.style.lineHeight.trim();\n if (!raw || raw === 'normal') return null;\n const num = parseFloat(raw);\n if (!Number.isFinite(num) || num <= 0) return null;\n if (raw.endsWith('%')) return String(num / 100);\n return raw;\n}\n\n/** Combined style string for align + indent + line-height textblock attrs. */\nfunction blockStyle(attrs: {\n align?: Alignment | null;\n indent?: number;\n lineHeight?: string | null;\n}): string | null {\n const parts: string[] = [];\n const align = alignStyle(attrs.align ?? null);\n if (align) parts.push(align);\n if (attrs.indent) parts.push(`margin-inline-start: ${attrs.indent * INDENT_STEP_PX}px`);\n if (attrs.lineHeight) parts.push(`line-height: ${attrs.lineHeight}`);\n return parts.length ? parts.join('; ') : null;\n}\n\n/**\n * Block nodes. `align` is modeled as an attribute on textblocks rather than a\n * wrapper node so alignment survives block-type changes (heading <-> paragraph).\n */\nconst nodes: Record<string, NodeSpec> = {\n doc: {\n content: 'block+',\n },\n\n paragraph: {\n content: 'inline*',\n group: 'block',\n attrs: {\n align: { default: null },\n indent: { default: 0 },\n lineHeight: { default: null },\n },\n parseDOM: [\n {\n tag: 'p',\n getAttrs: (dom: HTMLElement) => ({\n align: getAlignFromDom(dom),\n indent: getIndentFromDom(dom),\n lineHeight: getLineHeightFromDom(dom),\n }),\n },\n ],\n toDOM(node) {\n const style = blockStyle(node.attrs);\n return style ? ['p', { style }, 0] : ['p', 0];\n },\n },\n\n heading: {\n content: 'inline*',\n group: 'block',\n defining: true,\n attrs: {\n level: { default: 1 },\n align: { default: null },\n indent: { default: 0 },\n lineHeight: { default: null },\n },\n parseDOM: [1, 2, 3, 4, 5, 6].map(level => ({\n tag: `h${level}`,\n getAttrs: (dom: HTMLElement) => ({\n level,\n align: getAlignFromDom(dom),\n indent: getIndentFromDom(dom),\n lineHeight: getLineHeightFromDom(dom),\n }),\n })),\n toDOM(node) {\n const style = blockStyle(node.attrs);\n return style ? [`h${node.attrs.level}`, { style }, 0] : [`h${node.attrs.level}`, 0];\n },\n },\n\n blockquote: {\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'blockquote' }],\n toDOM() {\n return ['blockquote', 0];\n },\n },\n\n horizontal_rule: {\n group: 'block',\n parseDOM: [{ tag: 'hr' }],\n toDOM() {\n return ['hr'];\n },\n },\n\n text: {\n group: 'inline',\n },\n\n hard_break: {\n inline: true,\n group: 'inline',\n selectable: false,\n parseDOM: [{ tag: 'br' }],\n toDOM() {\n return ['br'];\n },\n },\n\n code_block: {\n content: 'text*',\n group: 'block',\n marks: '',\n code: true,\n defining: true,\n attrs: { language: { default: null } },\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs: (dom: HTMLElement) => ({\n language: dom.getAttribute('data-language'),\n }),\n },\n ],\n toDOM(node) {\n const attrs: Record<string, string> = { class: 'nile-wysiwyg__code-block' };\n if (node.attrs.language) attrs['data-language'] = node.attrs.language;\n return ['pre', attrs, ['code', 0]];\n },\n },\n\n /**\n * ProseMirror's canonical inline image, extended with a `width` attr (px)\n * written by the drag-resize handles.\n */\n image: {\n inline: true,\n group: 'inline',\n draggable: true,\n attrs: {\n src: {},\n alt: { default: null },\n title: { default: null },\n width: { default: null },\n },\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (dom: HTMLElement) => {\n const styleWidth = parseFloat(dom.style.width);\n const attrWidth = parseFloat(dom.getAttribute('width') ?? '');\n const width = Number.isFinite(styleWidth)\n ? Math.round(styleWidth)\n : Number.isFinite(attrWidth)\n ? Math.round(attrWidth)\n : null;\n return {\n src: dom.getAttribute('src'),\n alt: dom.getAttribute('alt'),\n title: dom.getAttribute('title'),\n width: width && width > 0 ? width : null,\n };\n },\n },\n ],\n toDOM(node) {\n const { src, alt, title, width } = node.attrs;\n const attrs: Record<string, string> = { src };\n if (alt) attrs.alt = alt;\n if (title) attrs.title = title;\n if (width) attrs.style = `width: ${width}px`;\n return ['img', attrs];\n },\n },\n\n /**\n * Captioned image: a block figure whose inline content is the caption. The\n * image itself lives in the attrs (TipTap-style), so the node stays valid\n * ProseMirror content — a node can't mix an inline img child with a block\n * figcaption child.\n */\n figure: {\n group: 'block',\n content: 'inline*',\n defining: true,\n isolating: true,\n attrs: {\n src: {},\n alt: { default: null },\n title: { default: null },\n width: { default: null },\n align: { default: null },\n },\n parseDOM: [\n {\n tag: 'figure',\n contentElement: 'figcaption',\n getAttrs: (dom: HTMLElement) => {\n const img = dom.querySelector('img[src]') as HTMLElement | null;\n if (!img) return false;\n const styleWidth = parseFloat(img.style.width || dom.style.width);\n const align = dom.getAttribute('data-align');\n return {\n src: img.getAttribute('src'),\n alt: img.getAttribute('alt'),\n title: img.getAttribute('title'),\n width:\n Number.isFinite(styleWidth) && styleWidth > 0\n ? Math.round(styleWidth)\n : null,\n align: align === 'left' || align === 'center' || align === 'right' ? align : null,\n };\n },\n },\n ],\n toDOM(node) {\n const { src, alt, title, width, align } = node.attrs;\n const figureAttrs: Record<string, string> = { class: 'nile-wysiwyg__figure' };\n if (align) figureAttrs['data-align'] = align;\n const styles: string[] = [];\n if (width) styles.push(`width: ${width}px`);\n if (align === 'center') styles.push('margin-left: auto; margin-right: auto');\n else if (align === 'right') styles.push('margin-left: auto; margin-right: 0');\n if (styles.length) figureAttrs.style = styles.join('; ');\n const imgAttrs: Record<string, string> = { src, style: 'width: 100%' };\n if (alt) imgAttrs.alt = alt;\n if (title) imgAttrs.title = title;\n return [\n 'figure',\n figureAttrs,\n ['img', imgAttrs],\n ['figcaption', { class: 'nile-wysiwyg__figcaption' }, 0],\n ];\n },\n },\n\n /**\n * Checklists. Serialized as <ul data-task-list><li data-task-item\n * data-checked> so they survive HTML round-trips; the live checkbox is an\n * editor-only NodeView. parseDOM priority 51 beats the generic li rule.\n */\n task_list: {\n content: 'task_item+',\n group: 'block',\n parseDOM: [{ tag: 'ul[data-task-list]', priority: 51 }],\n toDOM() {\n return ['ul', { 'data-task-list': 'true', class: 'nile-wysiwyg__task-list' }, 0];\n },\n },\n\n task_item: {\n content: 'paragraph block*',\n defining: true,\n attrs: { checked: { default: false } },\n parseDOM: [\n {\n tag: 'li[data-task-item]',\n priority: 51,\n getAttrs: (dom: HTMLElement) => ({\n checked: dom.getAttribute('data-checked') === 'true',\n }),\n },\n ],\n toDOM(node) {\n return [\n 'li',\n {\n 'data-task-item': 'true',\n 'data-checked': String(node.attrs.checked),\n class: 'nile-wysiwyg__task-item',\n },\n 0,\n ];\n },\n },\n\n /**\n * Provider embeds (YouTube/Vimeo/Loom) as block atoms. The iframe sits in\n * a wrapper div for aspect-ratio styling and a click-to-select overlay.\n */\n embed: {\n group: 'block',\n atom: true,\n selectable: true,\n draggable: true,\n attrs: {\n src: {},\n provider: { default: null },\n title: { default: null },\n /** Rendered width in px (drag-resize); null = default size. */\n width: { default: null },\n /** Block alignment: 'left' | 'center' | 'right' | null. */\n align: { default: null },\n },\n parseDOM: [\n {\n tag: 'div[data-embed-provider]',\n getAttrs: (dom: HTMLElement) => {\n const iframe = dom.querySelector('iframe[src]');\n if (!iframe) return false;\n const widthAttr =\n dom.getAttribute('data-width') ?? /^(\\d+)px$/.exec(dom.style.width)?.[1];\n const width = widthAttr ? parseInt(widthAttr, 10) : NaN;\n const align = dom.getAttribute('data-align');\n return {\n src: iframe.getAttribute('src'),\n provider: dom.getAttribute('data-embed-provider'),\n title: iframe.getAttribute('title'),\n width: Number.isFinite(width) && width > 0 ? width : null,\n align: align === 'left' || align === 'center' || align === 'right' ? align : null,\n };\n },\n },\n {\n tag: 'iframe[src]',\n getAttrs: (dom: HTMLElement) => {\n const width = parseInt(dom.getAttribute('width') ?? '', 10);\n return {\n src: dom.getAttribute('src'),\n title: dom.getAttribute('title'),\n width: Number.isFinite(width) && width > 0 ? width : null,\n };\n },\n },\n ],\n toDOM(node) {\n const { src, provider, title, width, align } = node.attrs;\n const iframeAttrs: Record<string, string> = {\n src,\n frameborder: '0',\n allowfullscreen: 'true',\n allow: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',\n };\n if (title) iframeAttrs.title = title;\n const wrapperAttrs: Record<string, string> = {\n class: 'nile-wysiwyg__embed',\n 'data-embed-provider': provider ?? 'generic',\n };\n const styles: string[] = [];\n if (width) {\n wrapperAttrs['data-width'] = String(width);\n styles.push(`width: ${width}px`, 'max-width: 100%');\n }\n if (align) {\n wrapperAttrs['data-align'] = align;\n if (align === 'center') styles.push('margin-left: auto', 'margin-right: auto');\n else if (align === 'right') styles.push('margin-left: auto', 'margin-right: 0');\n }\n if (styles.length) wrapperAttrs.style = styles.join('; ');\n return ['div', wrapperAttrs, ['iframe', iframeAttrs]];\n },\n },\n\n /**\n * Bookmark: a named in-text anchor (`<a id=\"…\">`) for intra-document\n * navigation. Invisible in serialized output; the editor draws a flag\n * marker via CSS so it can be selected and deleted.\n */\n bookmark: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: { id: {} },\n parseDOM: [\n {\n tag: 'a[data-bookmark]',\n priority: 60,\n getAttrs: (dom: HTMLElement) => {\n const id = dom.getAttribute('id') || dom.getAttribute('name');\n return id ? { id } : false;\n },\n },\n // Anchors without an href are bookmarks (`<a id>` / legacy `<a name>`).\n {\n tag: 'a[id]',\n getAttrs: (dom: HTMLElement) =>\n dom.hasAttribute('href') ? false : { id: dom.getAttribute('id') },\n },\n {\n tag: 'a[name]',\n getAttrs: (dom: HTMLElement) =>\n dom.hasAttribute('href') ? false : { id: dom.getAttribute('name') },\n },\n ],\n toDOM(node) {\n return ['a', { id: node.attrs.id, 'data-bookmark': 'true' }];\n },\n },\n\n /** Inline atom for @-style mentions. The label renders as `${trigger}${label}`. */\n mention: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: {\n trigger: { default: '@' },\n key: {},\n label: {},\n },\n parseDOM: [\n {\n tag: 'span[data-mention-key]',\n getAttrs: (dom: HTMLElement) => ({\n trigger: dom.getAttribute('data-mention-trigger') || '@',\n key: dom.getAttribute('data-mention-key'),\n label:\n dom.getAttribute('data-mention-label') || dom.textContent?.slice(1) || '',\n }),\n },\n ],\n toDOM(node) {\n const { trigger, key, label } = node.attrs;\n return [\n 'span',\n {\n class: 'nile-wysiwyg__mention',\n 'data-mention-trigger': trigger,\n 'data-mention-key': key,\n 'data-mention-label': label,\n },\n `${trigger}${label}`,\n ];\n },\n },\n\n /**\n * Merge field: an inline atom placeholder for mail-merge / personalization\n * (e.g. `{{first_name}}`). Stores a stable `id` and a human `label`; renders\n * the label (falling back to `{{id}}`) as a non-editable chip.\n */\n merge_field: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: { id: {}, label: { default: null } },\n parseDOM: [\n {\n tag: 'span[data-merge-field]',\n getAttrs: (dom: HTMLElement) => {\n const id = dom.getAttribute('data-merge-field');\n if (!id) return false;\n return {\n id,\n label: dom.getAttribute('data-merge-label') || dom.textContent || null,\n };\n },\n },\n ],\n toDOM(node) {\n const { id, label } = node.attrs;\n return [\n 'span',\n {\n class: 'nile-wysiwyg__merge-field',\n 'data-merge-field': id,\n 'data-merge-label': label ?? '',\n },\n label || `{{${id}}}`,\n ];\n },\n },\n\n /**\n * Math: an inline atom holding a LaTeX source string. Rendering is pluggable\n * via the editor's `mathRenderer` (KaTeX/MathJax, or MathML). Without a\n * renderer the raw LaTeX is shown in a math-styled chip. `display` chooses\n * inline vs. block presentation.\n */\n math: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: { latex: {}, display: { default: 'inline' } },\n parseDOM: [\n {\n tag: 'span[data-math]',\n getAttrs: (dom: HTMLElement) => ({\n latex: dom.getAttribute('data-math') || dom.textContent || '',\n display: dom.getAttribute('data-math-display') === 'block' ? 'block' : 'inline',\n }),\n },\n ],\n toDOM(node) {\n const { latex, display } = node.attrs;\n return [\n 'span',\n {\n class: 'nile-wysiwyg__math',\n 'data-math': latex,\n 'data-math-display': display,\n },\n latex,\n ];\n },\n },\n};\n\n/** Table nodes from prosemirror-tables, with cell background support. */\nconst tableNodeSpecs = tableNodes({\n tableGroup: 'block',\n cellContent: 'block+',\n cellAttributes: {\n background: {\n default: null,\n getFromDOM(dom) {\n return (dom as HTMLElement).style.backgroundColor || null;\n },\n setDOMAttr(value, attrs) {\n if (value) {\n attrs.style = `${(attrs.style as string) || ''}background-color: ${value};`;\n }\n },\n },\n },\n});\n\n/**\n * The table spec extended with a `layout` attr: layout tables (structured\n * layouts, e.g. for email HTML) serialize as `role=\"presentation\"` and render\n * borderless, with dashed guides visible only while editing.\n */\nconst baseTableSpec = tableNodeSpecs.table;\nconst tableSpec: NodeSpec = {\n ...baseTableSpec,\n attrs: { ...(baseTableSpec.attrs ?? {}), layout: { default: false } },\n parseDOM: [\n {\n tag: 'table',\n getAttrs: (dom: HTMLElement) => ({\n layout:\n dom.getAttribute('role') === 'presentation' || dom.hasAttribute('data-layout'),\n }),\n },\n ],\n toDOM(node) {\n return node.attrs.layout\n ? ['table', { role: 'presentation', 'data-layout': 'true' }, ['tbody', 0]]\n : ['table', ['tbody', 0]];\n },\n};\n\n/**\n * Marks. Order matters: marks later in the map render closer to the text.\n * Each styling mark parses from both semantic tags AND inline `style=`\n * declarations so pasted Word/Google Docs content keeps its formatting.\n */\nconst marks: Record<string, MarkSpec> = {\n link: {\n attrs: {\n href: {},\n title: { default: null },\n target: { default: null },\n },\n inclusive: false,\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom: HTMLElement) => ({\n href: dom.getAttribute('href'),\n title: dom.getAttribute('title'),\n target: dom.getAttribute('target'),\n }),\n },\n ],\n toDOM(mark) {\n const { href, title, target } = mark.attrs;\n const attrs: Record<string, string> = { href };\n if (title) attrs.title = title;\n if (target) {\n attrs.target = target;\n if (target === '_blank') attrs.rel = 'noopener noreferrer';\n }\n return ['a', attrs, 0];\n },\n },\n\n bold: {\n parseDOM: [\n { tag: 'strong' },\n // Google Docs wraps everything in <b style=\"font-weight: normal\">\n {\n tag: 'b',\n getAttrs: (dom: HTMLElement) => dom.style.fontWeight !== 'normal' && null,\n },\n {\n style: 'font-weight',\n getAttrs: (value: string) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null,\n },\n ],\n toDOM() {\n return ['strong', 0];\n },\n },\n\n italic: {\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-style=italic' },\n ],\n toDOM() {\n return ['em', 0];\n },\n },\n\n underline: {\n parseDOM: [\n { tag: 'u' },\n {\n style: 'text-decoration',\n getAttrs: (value: string) => value.includes('underline') && null,\n },\n {\n style: 'text-decoration-line',\n getAttrs: (value: string) => value.includes('underline') && null,\n },\n ],\n toDOM() {\n return ['u', 0];\n },\n },\n\n strike: {\n parseDOM: [\n { tag: 's' },\n { tag: 'strike' },\n { tag: 'del' },\n {\n style: 'text-decoration',\n getAttrs: (value: string) => value.includes('line-through') && null,\n },\n {\n style: 'text-decoration-line',\n getAttrs: (value: string) => value.includes('line-through') && null,\n },\n ],\n toDOM() {\n return ['s', 0];\n },\n },\n\n /** Mutually exclusive vertical-shift marks (formulas, footnote refs). */\n subscript: {\n excludes: 'subscript superscript',\n parseDOM: [{ tag: 'sub' }, { style: 'vertical-align=sub' }],\n toDOM() {\n return ['sub', 0];\n },\n },\n\n superscript: {\n excludes: 'subscript superscript',\n parseDOM: [{ tag: 'sup' }, { style: 'vertical-align=super' }],\n toDOM() {\n return ['sup', 0];\n },\n },\n\n code: {\n parseDOM: [{ tag: 'code' }],\n toDOM() {\n return ['code', { class: 'nile-wysiwyg__inline-code' }, 0];\n },\n },\n\n text_color: {\n attrs: { color: {} },\n parseDOM: [\n {\n style: 'color',\n getAttrs: (value: string) => (value ? { color: value } : false),\n },\n ],\n toDOM(mark) {\n return ['span', { style: `color: ${mark.attrs.color}` }, 0];\n },\n },\n\n bg_color: {\n attrs: { color: {} },\n parseDOM: [\n {\n style: 'background-color',\n getAttrs: (value: string) =>\n value && value !== 'transparent' ? { color: value } : false,\n },\n ],\n toDOM(mark) {\n return ['span', { style: `background-color: ${mark.attrs.color}` }, 0];\n },\n },\n\n font_family: {\n attrs: { family: {} },\n parseDOM: [\n {\n style: 'font-family',\n getAttrs: (value: string) => (value ? { family: value } : false),\n },\n ],\n toDOM(mark) {\n return ['span', { style: `font-family: ${mark.attrs.family}` }, 0];\n },\n },\n\n font_size: {\n attrs: { size: {} },\n parseDOM: [\n {\n style: 'font-size',\n getAttrs: (value: string) => (value ? { size: value } : false),\n },\n ],\n toDOM(mark) {\n return ['span', { style: `font-size: ${mark.attrs.size}` }, 0];\n },\n },\n};\n\n/** Bullet markers CSS understands; anything else falls back to default. */\nexport const BULLET_STYLES = ['disc', 'circle', 'square'] as const;\n\n/** Numbering styles, keyed by the HTML `type` attribute letter. */\nexport const ORDERED_STYLES: Record<string, string> = {\n '1': 'decimal',\n a: 'lower-alpha',\n A: 'upper-alpha',\n i: 'lower-roman',\n I: 'upper-roman',\n};\n\nconst STYLE_TO_TYPE: Record<string, string> = Object.fromEntries(\n Object.entries(ORDERED_STYLES).map(([type, style]) => [style, type])\n);\n\n/**\n * Legal-style continuous numbering (1, 1.1, 1.1.1). Not a CSS\n * list-style-type: it serializes as `data-list-style=\"multilevel\"` and is\n * rendered with CSS counters (see the editor stylesheet). Consumers rendering\n * the output need the same counter rules.\n */\nexport const MULTILEVEL_STYLE = 'multilevel';\n\n/** List specs from prosemirror-schema-list, extended with style attrs. */\nconst bulletListSpec: NodeSpec = {\n content: 'list_item+',\n group: 'block',\n attrs: { style: { default: null } },\n parseDOM: [\n {\n tag: 'ul',\n getAttrs: (dom: HTMLElement) => {\n const style = dom.style.listStyleType;\n return {\n style: (BULLET_STYLES as readonly string[]).includes(style) ? style : null,\n };\n },\n },\n ],\n toDOM(node) {\n return node.attrs.style\n ? ['ul', { style: `list-style-type: ${node.attrs.style}` }, 0]\n : ['ul', 0];\n },\n};\n\nconst orderedListSpec: NodeSpec = {\n content: 'list_item+',\n group: 'block',\n attrs: { order: { default: 1 }, style: { default: null } },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs: (dom: HTMLElement) => {\n const type = dom.getAttribute('type') ?? '';\n const cssStyle = dom.style.listStyleType;\n const style =\n dom.getAttribute('data-list-style') === MULTILEVEL_STYLE\n ? MULTILEVEL_STYLE\n : ORDERED_STYLES[type] ??\n (Object.values(ORDERED_STYLES).includes(cssStyle) ? cssStyle : null);\n const start = Number(dom.getAttribute('start'));\n return {\n order: Number.isFinite(start) && start > 0 ? start : 1,\n style,\n };\n },\n },\n ],\n toDOM(node) {\n const attrs: Record<string, string> = {};\n if (node.attrs.order !== 1) attrs.start = String(node.attrs.order);\n if (node.attrs.style === MULTILEVEL_STYLE) {\n attrs['data-list-style'] = MULTILEVEL_STYLE;\n } else if (node.attrs.style && STYLE_TO_TYPE[node.attrs.style]) {\n attrs.type = STYLE_TO_TYPE[node.attrs.style];\n }\n return ['ol', attrs, 0];\n },\n};\n\n/** Builds the editor schema. List nodes are added via prosemirror-schema-list. */\nexport function createSchema(): Schema {\n const nodeMap = addListNodes(\n OrderedMap.from(nodes),\n 'paragraph block*',\n 'block'\n )\n .update('bullet_list', bulletListSpec)\n .update('ordered_list', orderedListSpec)\n .append(tableNodeSpecs)\n .update('table', tableSpec);\n return new Schema({ nodes: nodeMap, marks: OrderedMap.from(marks) });\n}\n\n/** A shared default schema instance. */\nexport const defaultSchema = createSchema();\n"]}
@@ -0,0 +1,70 @@
1
+ import { EditorState } from 'prosemirror-state';
2
+ import type { Alignment } from './schema';
3
+ /**
4
+ * Immutable snapshot of everything the toolbar needs to render. Computed once
5
+ * per transaction in the host's dispatchTransaction and passed down as a
6
+ * single reactive property.
7
+ */
8
+ export interface ToolbarState {
9
+ bold: boolean;
10
+ italic: boolean;
11
+ underline: boolean;
12
+ strike: boolean;
13
+ subscript: boolean;
14
+ superscript: boolean;
15
+ code: boolean;
16
+ /** 'paragraph' | 'heading' for the innermost textblock at the cursor. */
17
+ blockType: string;
18
+ headingLevel: number | null;
19
+ align: Alignment | null;
20
+ /** Line height ('1.5') of the textblock at the cursor, null = default. */
21
+ lineHeight: string | null;
22
+ inBulletList: boolean;
23
+ inOrderedList: boolean;
24
+ inTaskList: boolean;
25
+ inBlockquote: boolean;
26
+ inTable: boolean;
27
+ /** The surrounding table is a layout (presentation) table. */
28
+ tableLayout: boolean;
29
+ /** Margin-indent level (0..MAX_INDENT) of the textblock at the cursor. */
30
+ blockIndent: number;
31
+ /** list-style-type of the surrounding list ('' = default). */
32
+ listStyle: string | null;
33
+ /** Start number of the surrounding ordered list. */
34
+ listStart: number | null;
35
+ /** An image or figure is selected (or the cursor is in a caption). */
36
+ imageSelected: boolean;
37
+ /** The selected image is a captioned figure. */
38
+ imageIsFigure: boolean;
39
+ /** Alignment of the selected figure. */
40
+ imageAlign: string | null;
41
+ /** A video embed is selected. */
42
+ embedSelected: boolean;
43
+ /** Alignment of the selected embed. */
44
+ embedAlign: string | null;
45
+ inCodeBlock: boolean;
46
+ /** Language attr of the surrounding code block ('' = auto). */
47
+ codeBlockLanguage: string | null;
48
+ canUndo: boolean;
49
+ canRedo: boolean;
50
+ linkActive: boolean;
51
+ linkHref: string | null;
52
+ textColor: string | null;
53
+ bgColor: string | null;
54
+ fontFamily: string | null;
55
+ fontSize: string | null;
56
+ /** True when the selection is a cursor (no range). */
57
+ selectionEmpty: boolean;
58
+ /**
59
+ * Whether the host's "paste as plain text" toggle is on. Not derivable from
60
+ * editor state, so the host injects it after computeToolbarState().
61
+ */
62
+ pasteAsPlainText?: boolean;
63
+ /** Whether the host is in fullscreen mode. Injected like pasteAsPlainText. */
64
+ fullscreen?: boolean;
65
+ /** Whether block boundaries are outlined. Injected like pasteAsPlainText. */
66
+ showBlocks?: boolean;
67
+ /** Whether the format painter is armed. Injected like pasteAsPlainText. */
68
+ formatPainter?: boolean;
69
+ }
70
+ export declare function computeToolbarState(state: EditorState): ToolbarState;
@@ -0,0 +1,138 @@
1
+ import { undo, redo } from 'prosemirror-history';
2
+ import { getMarkRange, selectedImageInfo, selectedEmbedInfo } from './commands';
3
+ function markActive(state, type) {
4
+ const { from, $from, to, empty } = state.selection;
5
+ if (empty)
6
+ return !!type.isInSet(state.storedMarks || $from.marks());
7
+ return state.doc.rangeHasMark(from, to, type);
8
+ }
9
+ function markAttr(state, type, attr) {
10
+ const { $from, from, to, empty } = state.selection;
11
+ if (empty) {
12
+ const mark = type.isInSet(state.storedMarks || $from.marks());
13
+ return mark ? (mark.attrs[attr] ?? null) : null;
14
+ }
15
+ // Range: report the first occurrence of the mark inside the selection.
16
+ // (Boundary marks() lookups miss non-inclusive marks like link.)
17
+ let found = null;
18
+ state.doc.nodesBetween(from, to, node => {
19
+ if (found !== null || !node.isText)
20
+ return found === null;
21
+ const mark = type.isInSet(node.marks);
22
+ if (mark)
23
+ found = mark.attrs[attr] ?? null;
24
+ return found === null;
25
+ });
26
+ return found;
27
+ }
28
+ export function computeToolbarState(state) {
29
+ const { schema } = state;
30
+ const { $from, from, to, empty } = state.selection;
31
+ // $from.parent is the doc (not a textblock) for AllSelection / block
32
+ // NodeSelections; report the first textblock in the range instead so the
33
+ // toolbar reflects what's actually selected.
34
+ let parent = $from.parent;
35
+ if (!parent.isTextblock) {
36
+ let firstTextblock = null;
37
+ state.doc.nodesBetween(from, to, node => {
38
+ if (!firstTextblock && node.isTextblock)
39
+ firstTextblock = node;
40
+ return !firstTextblock;
41
+ });
42
+ if (firstTextblock)
43
+ parent = firstTextblock;
44
+ }
45
+ const blockType = parent.type.name;
46
+ const headingLevel = blockType === 'heading' ? parent.attrs.level : null;
47
+ const align = parent.type.spec.attrs && 'align' in parent.type.spec.attrs
48
+ ? (parent.attrs.align ?? null)
49
+ : null;
50
+ let inBulletList = false;
51
+ let inOrderedList = false;
52
+ let inTaskList = false;
53
+ let inBlockquote = false;
54
+ let inTable = false;
55
+ let tableLayout = false;
56
+ let listStyle = null;
57
+ let listStart = null;
58
+ for (let depth = $from.depth; depth > 0; depth -= 1) {
59
+ const node = $from.node(depth);
60
+ if (node.type === schema.nodes.bullet_list) {
61
+ inBulletList = true;
62
+ if (listStyle === null)
63
+ listStyle = node.attrs.style ?? null;
64
+ }
65
+ else if (node.type === schema.nodes.ordered_list) {
66
+ inOrderedList = true;
67
+ if (listStyle === null)
68
+ listStyle = node.attrs.style ?? null;
69
+ if (listStart === null)
70
+ listStart = node.attrs.order ?? 1;
71
+ }
72
+ else if (node.type === schema.nodes.task_list)
73
+ inTaskList = true;
74
+ else if (node.type === schema.nodes.blockquote)
75
+ inBlockquote = true;
76
+ else if (node.type === schema.nodes.table) {
77
+ inTable = true;
78
+ tableLayout = !!node.attrs.layout;
79
+ }
80
+ }
81
+ const imageInfo = selectedImageInfo(state);
82
+ const embedInfo = selectedEmbedInfo(state);
83
+ const linkActive = markActive(state, schema.marks.link);
84
+ let linkHref = null;
85
+ if (linkActive) {
86
+ linkHref = markAttr(state, schema.marks.link, 'href');
87
+ if (linkHref === null && empty) {
88
+ const range = getMarkRange($from, schema.marks.link);
89
+ if (range) {
90
+ const mark = schema.marks.link.isInSet(state.doc.resolve(range.from + 1).marks());
91
+ linkHref = mark ? mark.attrs.href : null;
92
+ }
93
+ }
94
+ }
95
+ return {
96
+ bold: markActive(state, schema.marks.bold),
97
+ italic: markActive(state, schema.marks.italic),
98
+ underline: markActive(state, schema.marks.underline),
99
+ strike: markActive(state, schema.marks.strike),
100
+ subscript: markActive(state, schema.marks.subscript),
101
+ superscript: markActive(state, schema.marks.superscript),
102
+ code: markActive(state, schema.marks.code),
103
+ blockType,
104
+ headingLevel,
105
+ align,
106
+ lineHeight: parent.type.spec.attrs && 'lineHeight' in parent.type.spec.attrs
107
+ ? (parent.attrs.lineHeight ?? null)
108
+ : null,
109
+ inBulletList,
110
+ inOrderedList,
111
+ inTaskList,
112
+ inBlockquote,
113
+ inTable,
114
+ tableLayout,
115
+ blockIndent: parent.type.spec.attrs && 'indent' in parent.type.spec.attrs
116
+ ? (parent.attrs.indent ?? 0)
117
+ : 0,
118
+ listStyle,
119
+ listStart,
120
+ imageSelected: imageInfo !== null,
121
+ imageIsFigure: imageInfo?.isFigure ?? false,
122
+ imageAlign: imageInfo?.isFigure ? (imageInfo.node.attrs.align ?? null) : null,
123
+ embedSelected: embedInfo !== null,
124
+ embedAlign: embedInfo?.node.attrs.align ?? null,
125
+ inCodeBlock: blockType === 'code_block',
126
+ codeBlockLanguage: blockType === 'code_block' ? (parent.attrs.language ?? null) : null,
127
+ canUndo: undo(state),
128
+ canRedo: redo(state),
129
+ linkActive,
130
+ linkHref,
131
+ textColor: markAttr(state, schema.marks.text_color, 'color'),
132
+ bgColor: markAttr(state, schema.marks.bg_color, 'color'),
133
+ fontFamily: markAttr(state, schema.marks.font_family, 'family'),
134
+ fontSize: markAttr(state, schema.marks.font_size, 'size'),
135
+ selectionEmpty: empty,
136
+ };
137
+ }
138
+ //# sourceMappingURL=selection-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-state.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/engine/selection-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { EditorState } from 'prosemirror-state';\nimport { MarkType, Node as PMNode } from 'prosemirror-model';\nimport { undo, redo } from 'prosemirror-history';\nimport type { Alignment } from './schema';\nimport { getMarkRange, selectedImageInfo, selectedEmbedInfo } from './commands';\n\n/**\n * Immutable snapshot of everything the toolbar needs to render. Computed once\n * per transaction in the host's dispatchTransaction and passed down as a\n * single reactive property.\n */\nexport interface ToolbarState {\n bold: boolean;\n italic: boolean;\n underline: boolean;\n strike: boolean;\n subscript: boolean;\n superscript: boolean;\n code: boolean;\n /** 'paragraph' | 'heading' for the innermost textblock at the cursor. */\n blockType: string;\n headingLevel: number | null;\n align: Alignment | null;\n /** Line height ('1.5') of the textblock at the cursor, null = default. */\n lineHeight: string | null;\n inBulletList: boolean;\n inOrderedList: boolean;\n inTaskList: boolean;\n inBlockquote: boolean;\n inTable: boolean;\n /** The surrounding table is a layout (presentation) table. */\n tableLayout: boolean;\n /** Margin-indent level (0..MAX_INDENT) of the textblock at the cursor. */\n blockIndent: number;\n /** list-style-type of the surrounding list ('' = default). */\n listStyle: string | null;\n /** Start number of the surrounding ordered list. */\n listStart: number | null;\n /** An image or figure is selected (or the cursor is in a caption). */\n imageSelected: boolean;\n /** The selected image is a captioned figure. */\n imageIsFigure: boolean;\n /** Alignment of the selected figure. */\n imageAlign: string | null;\n /** A video embed is selected. */\n embedSelected: boolean;\n /** Alignment of the selected embed. */\n embedAlign: string | null;\n inCodeBlock: boolean;\n /** Language attr of the surrounding code block ('' = auto). */\n codeBlockLanguage: string | null;\n canUndo: boolean;\n canRedo: boolean;\n linkActive: boolean;\n linkHref: string | null;\n textColor: string | null;\n bgColor: string | null;\n fontFamily: string | null;\n fontSize: string | null;\n /** True when the selection is a cursor (no range). */\n selectionEmpty: boolean;\n /**\n * Whether the host's \"paste as plain text\" toggle is on. Not derivable from\n * editor state, so the host injects it after computeToolbarState().\n */\n pasteAsPlainText?: boolean;\n /** Whether the host is in fullscreen mode. Injected like pasteAsPlainText. */\n fullscreen?: boolean;\n /** Whether block boundaries are outlined. Injected like pasteAsPlainText. */\n showBlocks?: boolean;\n /** Whether the format painter is armed. Injected like pasteAsPlainText. */\n formatPainter?: boolean;\n}\n\nfunction markActive(state: EditorState, type: MarkType): boolean {\n const { from, $from, to, empty } = state.selection;\n if (empty) return !!type.isInSet(state.storedMarks || $from.marks());\n return state.doc.rangeHasMark(from, to, type);\n}\n\nfunction markAttr(state: EditorState, type: MarkType, attr: string): string | null {\n const { $from, from, to, empty } = state.selection;\n if (empty) {\n const mark = type.isInSet(state.storedMarks || $from.marks());\n return mark ? ((mark.attrs[attr] as string) ?? null) : null;\n }\n // Range: report the first occurrence of the mark inside the selection.\n // (Boundary marks() lookups miss non-inclusive marks like link.)\n let found: string | null = null;\n state.doc.nodesBetween(from, to, node => {\n if (found !== null || !node.isText) return found === null;\n const mark = type.isInSet(node.marks);\n if (mark) found = (mark.attrs[attr] as string) ?? null;\n return found === null;\n });\n return found;\n}\n\nexport function computeToolbarState(state: EditorState): ToolbarState {\n const { schema } = state;\n const { $from, from, to, empty } = state.selection;\n\n // $from.parent is the doc (not a textblock) for AllSelection / block\n // NodeSelections; report the first textblock in the range instead so the\n // toolbar reflects what's actually selected.\n let parent = $from.parent;\n if (!parent.isTextblock) {\n let firstTextblock: PMNode | null = null;\n state.doc.nodesBetween(from, to, node => {\n if (!firstTextblock && node.isTextblock) firstTextblock = node;\n return !firstTextblock;\n });\n if (firstTextblock) parent = firstTextblock;\n }\n const blockType = parent.type.name;\n const headingLevel = blockType === 'heading' ? (parent.attrs.level as number) : null;\n const align =\n parent.type.spec.attrs && 'align' in parent.type.spec.attrs\n ? ((parent.attrs.align as Alignment) ?? null)\n : null;\n\n let inBulletList = false;\n let inOrderedList = false;\n let inTaskList = false;\n let inBlockquote = false;\n let inTable = false;\n let tableLayout = false;\n let listStyle: string | null = null;\n let listStart: number | null = null;\n for (let depth = $from.depth; depth > 0; depth -= 1) {\n const node = $from.node(depth);\n if (node.type === schema.nodes.bullet_list) {\n inBulletList = true;\n if (listStyle === null) listStyle = (node.attrs.style as string) ?? null;\n } else if (node.type === schema.nodes.ordered_list) {\n inOrderedList = true;\n if (listStyle === null) listStyle = (node.attrs.style as string) ?? null;\n if (listStart === null) listStart = (node.attrs.order as number) ?? 1;\n } else if (node.type === schema.nodes.task_list) inTaskList = true;\n else if (node.type === schema.nodes.blockquote) inBlockquote = true;\n else if (node.type === schema.nodes.table) {\n inTable = true;\n tableLayout = !!node.attrs.layout;\n }\n }\n\n const imageInfo = selectedImageInfo(state);\n const embedInfo = selectedEmbedInfo(state);\n\n const linkActive = markActive(state, schema.marks.link);\n let linkHref: string | null = null;\n if (linkActive) {\n linkHref = markAttr(state, schema.marks.link, 'href');\n if (linkHref === null && empty) {\n const range = getMarkRange($from, schema.marks.link);\n if (range) {\n const mark = schema.marks.link.isInSet(\n state.doc.resolve(range.from + 1).marks()\n );\n linkHref = mark ? (mark.attrs.href as string) : null;\n }\n }\n }\n\n return {\n bold: markActive(state, schema.marks.bold),\n italic: markActive(state, schema.marks.italic),\n underline: markActive(state, schema.marks.underline),\n strike: markActive(state, schema.marks.strike),\n subscript: markActive(state, schema.marks.subscript),\n superscript: markActive(state, schema.marks.superscript),\n code: markActive(state, schema.marks.code),\n blockType,\n headingLevel,\n align,\n lineHeight:\n parent.type.spec.attrs && 'lineHeight' in parent.type.spec.attrs\n ? ((parent.attrs.lineHeight as string) ?? null)\n : null,\n inBulletList,\n inOrderedList,\n inTaskList,\n inBlockquote,\n inTable,\n tableLayout,\n blockIndent:\n parent.type.spec.attrs && 'indent' in parent.type.spec.attrs\n ? ((parent.attrs.indent as number) ?? 0)\n : 0,\n listStyle,\n listStart,\n imageSelected: imageInfo !== null,\n imageIsFigure: imageInfo?.isFigure ?? false,\n imageAlign: imageInfo?.isFigure ? ((imageInfo.node.attrs.align as string) ?? null) : null,\n embedSelected: embedInfo !== null,\n embedAlign: (embedInfo?.node.attrs.align as string) ?? null,\n inCodeBlock: blockType === 'code_block',\n codeBlockLanguage:\n blockType === 'code_block' ? ((parent.attrs.language as string) ?? null) : null,\n canUndo: undo(state),\n canRedo: redo(state),\n linkActive,\n linkHref,\n textColor: markAttr(state, schema.marks.text_color, 'color'),\n bgColor: markAttr(state, schema.marks.bg_color, 'color'),\n fontFamily: markAttr(state, schema.marks.font_family, 'family'),\n fontSize: markAttr(state, schema.marks.font_size, 'size'),\n selectionEmpty: empty,\n };\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import { Node as PMNode, Schema, Slice } from 'prosemirror-model';
2
+ /** Parses an HTML string into a document node, sanitizing by default. */
3
+ export declare function htmlToDoc(schema: Schema, html: string, sanitize?: boolean): PMNode;
4
+ /** Parses an HTML string into a slice suitable for replaceSelection. */
5
+ export declare function htmlToSlice(schema: Schema, html: string, sanitize?: boolean): Slice;
6
+ /** Serializes a document node back to an HTML string. */
7
+ export declare function docToHtml(doc: PMNode): string;
8
+ /** Plain-text projection of the document (blocks joined by newlines). */
9
+ export declare function docToText(doc: PMNode): string;
10
+ export declare function docToJson(doc: PMNode): Record<string, unknown>;
11
+ export declare function jsonToDoc(schema: Schema, json: Record<string, unknown>): PMNode;
12
+ /** Word and character counts over the document's text content. */
13
+ export declare function countWords(doc: PMNode): {
14
+ words: number;
15
+ characters: number;
16
+ };
17
+ /** True when the document has no visible content. */
18
+ export declare function isDocEmpty(doc: PMNode): boolean;
@@ -0,0 +1,63 @@
1
+ import { DOMParser as PMDOMParser, DOMSerializer, Node as PMNode, } from 'prosemirror-model';
2
+ import { sanitizeHtml } from './sanitize';
3
+ const parserCache = new WeakMap();
4
+ const serializerCache = new WeakMap();
5
+ function getParser(schema) {
6
+ let parser = parserCache.get(schema);
7
+ if (!parser) {
8
+ parser = PMDOMParser.fromSchema(schema);
9
+ parserCache.set(schema, parser);
10
+ }
11
+ return parser;
12
+ }
13
+ function getSerializer(schema) {
14
+ let serializer = serializerCache.get(schema);
15
+ if (!serializer) {
16
+ serializer = DOMSerializer.fromSchema(schema);
17
+ serializerCache.set(schema, serializer);
18
+ }
19
+ return serializer;
20
+ }
21
+ /** Parses an HTML string into a document node, sanitizing by default. */
22
+ export function htmlToDoc(schema, html, sanitize = true) {
23
+ const clean = sanitize ? sanitizeHtml(html) : html;
24
+ const dom = new DOMParser().parseFromString(`<body>${clean}</body>`, 'text/html');
25
+ return getParser(schema).parse(dom.body);
26
+ }
27
+ /** Parses an HTML string into a slice suitable for replaceSelection. */
28
+ export function htmlToSlice(schema, html, sanitize = true) {
29
+ const clean = sanitize ? sanitizeHtml(html) : html;
30
+ const dom = new DOMParser().parseFromString(`<body>${clean}</body>`, 'text/html');
31
+ return getParser(schema).parseSlice(dom.body, { preserveWhitespace: true });
32
+ }
33
+ /** Serializes a document node back to an HTML string. */
34
+ export function docToHtml(doc) {
35
+ const schema = doc.type.schema;
36
+ const container = document.createElement('div');
37
+ container.appendChild(getSerializer(schema).serializeFragment(doc.content));
38
+ return container.innerHTML;
39
+ }
40
+ /** Plain-text projection of the document (blocks joined by newlines). */
41
+ export function docToText(doc) {
42
+ return doc.textBetween(0, doc.content.size, '\n', ' ');
43
+ }
44
+ export function docToJson(doc) {
45
+ return doc.toJSON();
46
+ }
47
+ export function jsonToDoc(schema, json) {
48
+ return PMNode.fromJSON(schema, json);
49
+ }
50
+ /** Word and character counts over the document's text content. */
51
+ export function countWords(doc) {
52
+ const text = docToText(doc);
53
+ const words = text.trim() ? text.trim().split(/\s+/).length : 0;
54
+ return { words, characters: text.replace(/\n/g, '').length };
55
+ }
56
+ /** True when the document has no visible content. */
57
+ export function isDocEmpty(doc) {
58
+ if (doc.childCount > 1)
59
+ return false;
60
+ const first = doc.firstChild;
61
+ return !first || (first.type.name === 'paragraph' && first.content.size === 0);
62
+ }
63
+ //# sourceMappingURL=serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/engine/serializer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DOMParser as PMDOMParser,\n DOMSerializer,\n Node as PMNode,\n Schema,\n Slice,\n} from 'prosemirror-model';\nimport { sanitizeHtml } from './sanitize';\n\nconst parserCache = new WeakMap<Schema, PMDOMParser>();\nconst serializerCache = new WeakMap<Schema, DOMSerializer>();\n\nfunction getParser(schema: Schema): PMDOMParser {\n let parser = parserCache.get(schema);\n if (!parser) {\n parser = PMDOMParser.fromSchema(schema);\n parserCache.set(schema, parser);\n }\n return parser;\n}\n\nfunction getSerializer(schema: Schema): DOMSerializer {\n let serializer = serializerCache.get(schema);\n if (!serializer) {\n serializer = DOMSerializer.fromSchema(schema);\n serializerCache.set(schema, serializer);\n }\n return serializer;\n}\n\n/** Parses an HTML string into a document node, sanitizing by default. */\nexport function htmlToDoc(schema: Schema, html: string, sanitize = true): PMNode {\n const clean = sanitize ? sanitizeHtml(html) : html;\n const dom = new DOMParser().parseFromString(`<body>${clean}</body>`, 'text/html');\n return getParser(schema).parse(dom.body);\n}\n\n/** Parses an HTML string into a slice suitable for replaceSelection. */\nexport function htmlToSlice(schema: Schema, html: string, sanitize = true): Slice {\n const clean = sanitize ? sanitizeHtml(html) : html;\n const dom = new DOMParser().parseFromString(`<body>${clean}</body>`, 'text/html');\n return getParser(schema).parseSlice(dom.body, { preserveWhitespace: true });\n}\n\n/** Serializes a document node back to an HTML string. */\nexport function docToHtml(doc: PMNode): string {\n const schema = doc.type.schema;\n const container = document.createElement('div');\n container.appendChild(getSerializer(schema).serializeFragment(doc.content));\n return container.innerHTML;\n}\n\n/** Plain-text projection of the document (blocks joined by newlines). */\nexport function docToText(doc: PMNode): string {\n return doc.textBetween(0, doc.content.size, '\\n', ' ');\n}\n\nexport function docToJson(doc: PMNode): Record<string, unknown> {\n return doc.toJSON();\n}\n\nexport function jsonToDoc(schema: Schema, json: Record<string, unknown>): PMNode {\n return PMNode.fromJSON(schema, json);\n}\n\n/** Word and character counts over the document's text content. */\nexport function countWords(doc: PMNode): { words: number; characters: number } {\n const text = docToText(doc);\n const words = text.trim() ? text.trim().split(/\\s+/).length : 0;\n return { words, characters: text.replace(/\\n/g, '').length };\n}\n\n/** True when the document has no visible content. */\nexport function isDocEmpty(doc: PMNode): boolean {\n if (doc.childCount > 1) return false;\n const first = doc.firstChild;\n return !first || (first.type.name === 'paragraph' && first.content.size === 0);\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { NileWysiwygEditor, default } from './nile-wysiwyg-editor';
2
+ export type { WysiwygChangeDetail, WysiwygCommandDetail, ToolbarConfig } from './types';
3
+ export { DEFAULT_TOOLBAR } from './types';
@@ -0,0 +1,3 @@
1
+ export { NileWysiwygEditor, default } from './nile-wysiwyg-editor';
2
+ export { DEFAULT_TOOLBAR } from './types';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nile-wysiwyg-editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC","sourcesContent":["export { NileWysiwygEditor, default } from './nile-wysiwyg-editor';\nexport type { WysiwygChangeDetail, WysiwygCommandDetail, ToolbarConfig } from './types';\nexport { DEFAULT_TOOLBAR } from './types';\n"]}
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;