@aquera/nile-elements 2.0.16 → 2.0.17

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 (354) hide show
  1. package/README.md +3 -0
  2. package/dist/{index-f6944844.cjs.js → index-0c0c869d.cjs.js} +2 -2
  3. package/dist/{index-f6944844.cjs.js.map → index-0c0c869d.cjs.js.map} +1 -1
  4. package/dist/{index-403841c7.cjs.js → index-129ef6fb.cjs.js} +3 -3
  5. package/dist/{index-403841c7.cjs.js.map → index-129ef6fb.cjs.js.map} +1 -1
  6. package/dist/{index-1faa963c.esm.js → index-36f2a6b5.esm.js} +1 -1
  7. package/dist/index-4df50481.esm.js +1 -0
  8. package/dist/index-5d34cff1.esm.js +1 -0
  9. package/dist/index-7ae95edd.cjs.js +2 -0
  10. package/dist/{index-3ca67627.cjs.js.map → index-7ae95edd.cjs.js.map} +1 -1
  11. package/dist/index-7ca72b78.esm.js +1 -0
  12. package/dist/index-bbe23ad8.cjs.js +2 -0
  13. package/dist/index-bbe23ad8.cjs.js.map +1 -0
  14. package/dist/index-ccc6a799.cjs.js +5 -0
  15. package/dist/index-ccc6a799.cjs.js.map +1 -0
  16. package/dist/index.cjs.js +1 -1
  17. package/dist/index.esm.js +1 -1
  18. package/dist/index.js +122 -70
  19. package/dist/nile-auto-complete/index.cjs.js +1 -1
  20. package/dist/nile-auto-complete/nile-auto-complete.cjs.js +1 -1
  21. package/dist/nile-auto-complete/portal-manager.cjs.js +1 -1
  22. package/dist/nile-auto-complete/portal-utils.cjs.js +1 -1
  23. package/dist/nile-code-editor/extensionSetup.cjs.js +2 -2
  24. package/dist/nile-code-editor/index.cjs.js +1 -1
  25. package/dist/nile-code-editor/nile-code-editor.cjs.js +1 -1
  26. package/dist/nile-code-editor/theme.cjs.js +1 -1
  27. package/dist/nile-color-picker/index.cjs.js +1 -1
  28. package/dist/nile-color-picker/nile-color-picker.cjs.js +1 -1
  29. package/dist/nile-combobox/index.cjs.js +1 -1
  30. package/dist/nile-combobox/nile-combobox.cjs.js +1 -1
  31. package/dist/nile-combobox/portal-manager.cjs.js +1 -1
  32. package/dist/nile-context-menu/index.cjs.js +1 -1
  33. package/dist/nile-context-menu/nile-context-menu.cjs.js +1 -1
  34. package/dist/nile-context-submenu/index.cjs.js +1 -1
  35. package/dist/nile-context-submenu/nile-context-submenu.cjs.js +1 -1
  36. package/dist/nile-detail/index.cjs.js +1 -1
  37. package/dist/nile-detail/nile-detail.cjs.js +1 -1
  38. package/dist/nile-dropdown/index.cjs.js +1 -1
  39. package/dist/nile-dropdown/nile-dropdown.cjs.js +1 -1
  40. package/dist/nile-dropdown/portal-manager.cjs.js +1 -1
  41. package/dist/nile-file-upload/index.cjs.js +1 -1
  42. package/dist/nile-file-upload/nile-file-upload.cjs.js +1 -1
  43. package/dist/nile-file-upload/nile-file-upload.template.cjs.js +1 -1
  44. package/dist/nile-floating-panel/index.cjs.js +1 -1
  45. package/dist/nile-floating-panel/nile-floating-panel.cjs.js +1 -1
  46. package/dist/nile-lite-tooltip/index.cjs.js +1 -1
  47. package/dist/nile-lite-tooltip/nile-lite-tooltip.cjs.js +1 -1
  48. package/dist/nile-markdown-editor/index.cjs.js +1 -1
  49. package/dist/nile-markdown-editor/nile-markdown-editor.cjs.js +1 -1
  50. package/dist/nile-popover/index.cjs.js +1 -1
  51. package/dist/nile-popover/nile-popover.cjs.js +1 -1
  52. package/dist/nile-popover/portal-manager.cjs.js +1 -1
  53. package/dist/nile-popup/index.cjs.js +1 -1
  54. package/dist/nile-popup/nile-popup.cjs.js +1 -1
  55. package/dist/nile-segmented-progress-bar/index.cjs.js +1 -1
  56. package/dist/nile-segmented-progress-bar/nile-segmented-progress-bar.cjs.js +1 -1
  57. package/dist/nile-select/index.cjs.js +1 -1
  58. package/dist/nile-select/nile-select.cjs.js +1 -1
  59. package/dist/nile-select/portal-manager.cjs.js +1 -1
  60. package/dist/nile-side-bar-action/index.cjs.js +1 -1
  61. package/dist/nile-side-bar-action/nile-side-bar-action.cjs.js +1 -1
  62. package/dist/nile-side-bar-action/portal-manager.cjs.js +1 -1
  63. package/dist/nile-tooltip/index.cjs.js +1 -1
  64. package/dist/nile-tooltip/nile-tooltip.cjs.js +1 -1
  65. package/dist/nile-virtual-select/index.cjs.js +1 -1
  66. package/dist/nile-virtual-select/nile-virtual-select.cjs.js +1 -1
  67. package/dist/nile-virtual-select/portal-manager.cjs.js +1 -1
  68. package/dist/nile-virtual-select/renderer.cjs.js +1 -1
  69. package/dist/nile-wysiwyg-editor/engine/commands.cjs.js +1 -1
  70. package/dist/nile-wysiwyg-editor/engine/commands.cjs.js.map +1 -1
  71. package/dist/nile-wysiwyg-editor/engine/commands.esm.js +1 -1
  72. package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js +1 -1
  73. package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js.map +1 -1
  74. package/dist/nile-wysiwyg-editor/engine/create-state.esm.js +1 -1
  75. package/dist/nile-wysiwyg-editor/engine/email-css.cjs.js +2 -0
  76. package/dist/nile-wysiwyg-editor/engine/email-css.cjs.js.map +1 -0
  77. package/dist/nile-wysiwyg-editor/engine/email-css.esm.js +1 -0
  78. package/dist/nile-wysiwyg-editor/engine/email-render.cjs.js +2 -0
  79. package/dist/nile-wysiwyg-editor/engine/email-render.cjs.js.map +1 -0
  80. package/dist/nile-wysiwyg-editor/engine/email-render.esm.js +1 -0
  81. package/dist/nile-wysiwyg-editor/engine/html-detect.cjs.js +2 -0
  82. package/dist/nile-wysiwyg-editor/engine/html-detect.cjs.js.map +1 -0
  83. package/dist/nile-wysiwyg-editor/engine/html-detect.esm.js +1 -0
  84. package/dist/nile-wysiwyg-editor/engine/index.cjs.js +1 -1
  85. package/dist/nile-wysiwyg-editor/engine/index.esm.js +1 -1
  86. package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js +1 -1
  87. package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js.map +1 -1
  88. package/dist/nile-wysiwyg-editor/engine/inputrules.esm.js +1 -1
  89. package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js +1 -1
  90. package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js.map +1 -1
  91. package/dist/nile-wysiwyg-editor/engine/keymap.esm.js +1 -1
  92. package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js +1 -1
  93. package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js.map +1 -1
  94. package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.esm.js +1 -1
  95. package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js +1 -1
  96. package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js.map +1 -1
  97. package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.esm.js +1 -1
  98. package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js +1 -1
  99. package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js.map +1 -1
  100. package/dist/nile-wysiwyg-editor/engine/plugins/embeds.esm.js +1 -1
  101. package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.cjs.js +1 -1
  102. package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.cjs.js.map +1 -1
  103. package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.esm.js +1 -1
  104. package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.cjs.js +1 -1
  105. package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.cjs.js.map +1 -1
  106. package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.esm.js +1 -1
  107. package/dist/nile-wysiwyg-editor/engine/plugins/image-view.cjs.js +1 -1
  108. package/dist/nile-wysiwyg-editor/engine/plugins/image-view.cjs.js.map +1 -1
  109. package/dist/nile-wysiwyg-editor/engine/plugins/image-view.esm.js +1 -1
  110. package/dist/nile-wysiwyg-editor/engine/plugins/image.cjs.js +1 -1
  111. package/dist/nile-wysiwyg-editor/engine/plugins/image.cjs.js.map +1 -1
  112. package/dist/nile-wysiwyg-editor/engine/plugins/image.esm.js +1 -1
  113. package/dist/nile-wysiwyg-editor/engine/plugins/link.cjs.js +1 -1
  114. package/dist/nile-wysiwyg-editor/engine/plugins/link.cjs.js.map +1 -1
  115. package/dist/nile-wysiwyg-editor/engine/plugins/link.esm.js +1 -1
  116. package/dist/nile-wysiwyg-editor/engine/plugins/max-length.cjs.js +1 -1
  117. package/dist/nile-wysiwyg-editor/engine/plugins/max-length.cjs.js.map +1 -1
  118. package/dist/nile-wysiwyg-editor/engine/plugins/max-length.esm.js +1 -1
  119. package/dist/nile-wysiwyg-editor/engine/plugins/paste.cjs.js +1 -1
  120. package/dist/nile-wysiwyg-editor/engine/plugins/paste.cjs.js.map +1 -1
  121. package/dist/nile-wysiwyg-editor/engine/plugins/paste.esm.js +1 -1
  122. package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.cjs.js +1 -1
  123. package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.cjs.js.map +1 -1
  124. package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.esm.js +1 -1
  125. package/dist/nile-wysiwyg-editor/engine/plugins/single-line.cjs.js +1 -1
  126. package/dist/nile-wysiwyg-editor/engine/plugins/single-line.cjs.js.map +1 -1
  127. package/dist/nile-wysiwyg-editor/engine/plugins/single-line.esm.js +1 -1
  128. package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.cjs.js +1 -1
  129. package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.cjs.js.map +1 -1
  130. package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.esm.js +1 -1
  131. package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js +1 -1
  132. package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js.map +1 -1
  133. package/dist/nile-wysiwyg-editor/engine/plugins/tables.esm.js +1 -1
  134. package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js +2 -1
  135. package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js.map +1 -1
  136. package/dist/nile-wysiwyg-editor/engine/sanitize.esm.js +1 -1
  137. package/dist/nile-wysiwyg-editor/engine/schema.cjs.js +1 -1
  138. package/dist/nile-wysiwyg-editor/engine/schema.cjs.js.map +1 -1
  139. package/dist/nile-wysiwyg-editor/engine/schema.esm.js +1 -1
  140. package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js +1 -1
  141. package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js.map +1 -1
  142. package/dist/nile-wysiwyg-editor/engine/selection-state.esm.js +1 -1
  143. package/dist/nile-wysiwyg-editor/engine/serializer.cjs.js +1 -1
  144. package/dist/nile-wysiwyg-editor/engine/serializer.cjs.js.map +1 -1
  145. package/dist/nile-wysiwyg-editor/engine/serializer.esm.js +1 -1
  146. package/dist/nile-wysiwyg-editor/index.cjs.js +1 -1
  147. package/dist/nile-wysiwyg-editor/index.esm.js +1 -1
  148. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js +1 -1
  149. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js.map +1 -1
  150. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js +1 -1
  151. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js.map +1 -1
  152. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.esm.js +45 -4
  153. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.esm.js +2 -2
  154. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.cjs.js +1 -1
  155. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js +1 -1
  156. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js +1 -1
  157. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js.map +1 -1
  158. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.esm.js +2 -2
  159. package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js +1 -1
  160. package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js.map +1 -1
  161. package/dist/nile-wysiwyg-editor/ui/bubble-menu.esm.js +5 -5
  162. package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js +1 -1
  163. package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js.map +1 -1
  164. package/dist/nile-wysiwyg-editor/ui/code-block-menu.esm.js +1 -1
  165. package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js +1 -1
  166. package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js.map +1 -1
  167. package/dist/nile-wysiwyg-editor/ui/embed-menu.esm.js +1 -1
  168. package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js +1 -1
  169. package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js.map +1 -1
  170. package/dist/nile-wysiwyg-editor/ui/embed-panel.esm.js +2 -2
  171. package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js +1 -1
  172. package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js.map +1 -1
  173. package/dist/nile-wysiwyg-editor/ui/emoji-picker.esm.js +1 -1
  174. package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js +1 -1
  175. package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js.map +1 -1
  176. package/dist/nile-wysiwyg-editor/ui/find-replace.esm.js +3 -3
  177. package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js +1 -1
  178. package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js.map +1 -1
  179. package/dist/nile-wysiwyg-editor/ui/image-menu.esm.js +3 -3
  180. package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js +1 -1
  181. package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js.map +1 -1
  182. package/dist/nile-wysiwyg-editor/ui/image-panel.esm.js +1 -1
  183. package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js +1 -1
  184. package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js.map +1 -1
  185. package/dist/nile-wysiwyg-editor/ui/insert-menu.esm.js +1 -1
  186. package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js +1 -1
  187. package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js.map +1 -1
  188. package/dist/nile-wysiwyg-editor/ui/link-editor.esm.js +9 -9
  189. package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js +1 -1
  190. package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js.map +1 -1
  191. package/dist/nile-wysiwyg-editor/ui/markdown-panel.esm.js +1 -1
  192. package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js +1 -1
  193. package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js.map +1 -1
  194. package/dist/nile-wysiwyg-editor/ui/math-panel.esm.js +1 -1
  195. package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js +1 -1
  196. package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js.map +1 -1
  197. package/dist/nile-wysiwyg-editor/ui/shortcut-help.esm.js +1 -1
  198. package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js +1 -1
  199. package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js.map +1 -1
  200. package/dist/nile-wysiwyg-editor/ui/source-view.esm.js +4 -4
  201. package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js +1 -1
  202. package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js.map +1 -1
  203. package/dist/nile-wysiwyg-editor/ui/special-chars.esm.js +1 -1
  204. package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js +1 -1
  205. package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js.map +1 -1
  206. package/dist/nile-wysiwyg-editor/ui/suggest-list.esm.js +23 -12
  207. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js +1 -1
  208. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js.map +1 -1
  209. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.esm.js +7 -7
  210. package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js +1 -1
  211. package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js.map +1 -1
  212. package/dist/nile-wysiwyg-editor/ui/table-menu.esm.js +1 -1
  213. package/dist/src/nile-wysiwyg-editor/engine/create-state.d.ts +5 -0
  214. package/dist/src/nile-wysiwyg-editor/engine/create-state.js +2 -0
  215. package/dist/src/nile-wysiwyg-editor/engine/create-state.js.map +1 -1
  216. package/dist/src/nile-wysiwyg-editor/engine/email-css.d.ts +14 -0
  217. package/dist/src/nile-wysiwyg-editor/engine/email-css.js +140 -0
  218. package/dist/src/nile-wysiwyg-editor/engine/email-css.js.map +1 -0
  219. package/dist/src/nile-wysiwyg-editor/engine/email-fidelity.test.d.ts +1 -0
  220. package/dist/src/nile-wysiwyg-editor/engine/email-fidelity.test.js +1045 -0
  221. package/dist/src/nile-wysiwyg-editor/engine/email-fidelity.test.js.map +1 -0
  222. package/dist/src/nile-wysiwyg-editor/engine/email-render.d.ts +11 -0
  223. package/dist/src/nile-wysiwyg-editor/engine/email-render.js +93 -0
  224. package/dist/src/nile-wysiwyg-editor/engine/email-render.js.map +1 -0
  225. package/dist/src/nile-wysiwyg-editor/engine/html-detect.d.ts +2 -0
  226. package/dist/src/nile-wysiwyg-editor/engine/html-detect.js +24 -0
  227. package/dist/src/nile-wysiwyg-editor/engine/html-detect.js.map +1 -0
  228. package/dist/src/nile-wysiwyg-editor/engine/index.d.ts +4 -1
  229. package/dist/src/nile-wysiwyg-editor/engine/index.js +3 -1
  230. package/dist/src/nile-wysiwyg-editor/engine/index.js.map +1 -1
  231. package/dist/src/nile-wysiwyg-editor/engine/inputrules.d.ts +0 -5
  232. package/dist/src/nile-wysiwyg-editor/engine/inputrules.js +19 -0
  233. package/dist/src/nile-wysiwyg-editor/engine/inputrules.js.map +1 -1
  234. package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.js +3 -2
  235. package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.js.map +1 -1
  236. package/dist/src/nile-wysiwyg-editor/engine/plugins/link.d.ts +4 -0
  237. package/dist/src/nile-wysiwyg-editor/engine/plugins/link.js +56 -1
  238. package/dist/src/nile-wysiwyg-editor/engine/plugins/link.js.map +1 -1
  239. package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.d.ts +5 -0
  240. package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.js +27 -6
  241. package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.js.map +1 -1
  242. package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js +30 -7
  243. package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js.map +1 -1
  244. package/dist/src/nile-wysiwyg-editor/engine/pm.test.js +46 -0
  245. package/dist/src/nile-wysiwyg-editor/engine/pm.test.js.map +1 -1
  246. package/dist/src/nile-wysiwyg-editor/engine/sanitize.d.ts +9 -1
  247. package/dist/src/nile-wysiwyg-editor/engine/sanitize.js +730 -7
  248. package/dist/src/nile-wysiwyg-editor/engine/sanitize.js.map +1 -1
  249. package/dist/src/nile-wysiwyg-editor/engine/schema.d.ts +3 -0
  250. package/dist/src/nile-wysiwyg-editor/engine/schema.js +215 -34
  251. package/dist/src/nile-wysiwyg-editor/engine/schema.js.map +1 -1
  252. package/dist/src/nile-wysiwyg-editor/engine/selection-state.js +3 -1
  253. package/dist/src/nile-wysiwyg-editor/engine/selection-state.js.map +1 -1
  254. package/dist/src/nile-wysiwyg-editor/engine/serializer.d.ts +12 -4
  255. package/dist/src/nile-wysiwyg-editor/engine/serializer.js +18 -8
  256. package/dist/src/nile-wysiwyg-editor/engine/serializer.js.map +1 -1
  257. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor-email-fidelity.test.d.ts +1 -0
  258. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor-email-fidelity.test.js +287 -0
  259. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor-email-fidelity.test.js.map +1 -0
  260. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js +45 -4
  261. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js.map +1 -1
  262. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.d.ts +23 -0
  263. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js +113 -15
  264. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js.map +1 -1
  265. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js +213 -0
  266. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js.map +1 -1
  267. package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js +2 -2
  268. package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js.map +1 -1
  269. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js +1 -1
  270. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js.map +1 -1
  271. package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js +1 -1
  272. package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js.map +1 -1
  273. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js +1 -1
  274. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js.map +1 -1
  275. package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js +1 -1
  276. package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js.map +1 -1
  277. package/dist/src/nile-wysiwyg-editor/ui/find-replace.js +1 -1
  278. package/dist/src/nile-wysiwyg-editor/ui/find-replace.js.map +1 -1
  279. package/dist/src/nile-wysiwyg-editor/ui/image-menu.js +1 -1
  280. package/dist/src/nile-wysiwyg-editor/ui/image-menu.js.map +1 -1
  281. package/dist/src/nile-wysiwyg-editor/ui/image-panel.js +1 -1
  282. package/dist/src/nile-wysiwyg-editor/ui/image-panel.js.map +1 -1
  283. package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js +1 -1
  284. package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js.map +1 -1
  285. package/dist/src/nile-wysiwyg-editor/ui/link-editor.js +2 -2
  286. package/dist/src/nile-wysiwyg-editor/ui/link-editor.js.map +1 -1
  287. package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js +1 -1
  288. package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js.map +1 -1
  289. package/dist/src/nile-wysiwyg-editor/ui/math-panel.js +1 -1
  290. package/dist/src/nile-wysiwyg-editor/ui/math-panel.js.map +1 -1
  291. package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js +1 -1
  292. package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js.map +1 -1
  293. package/dist/src/nile-wysiwyg-editor/ui/source-view.js +2 -2
  294. package/dist/src/nile-wysiwyg-editor/ui/source-view.js.map +1 -1
  295. package/dist/src/nile-wysiwyg-editor/ui/special-chars.js +1 -1
  296. package/dist/src/nile-wysiwyg-editor/ui/special-chars.js.map +1 -1
  297. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js +14 -3
  298. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js.map +1 -1
  299. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js +2 -2
  300. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js.map +1 -1
  301. package/dist/src/nile-wysiwyg-editor/ui/table-menu.js +1 -1
  302. package/dist/src/nile-wysiwyg-editor/ui/table-menu.js.map +1 -1
  303. package/dist/src/version.js +1 -1
  304. package/dist/src/version.js.map +1 -1
  305. package/dist/tsconfig.tsbuildinfo +1 -1
  306. package/package.json +1 -1
  307. package/src/nile-wysiwyg-editor/engine/create-state.ts +7 -0
  308. package/src/nile-wysiwyg-editor/engine/email-css.ts +136 -0
  309. package/src/nile-wysiwyg-editor/engine/email-fidelity.test.ts +1347 -0
  310. package/src/nile-wysiwyg-editor/engine/email-render.ts +99 -0
  311. package/src/nile-wysiwyg-editor/engine/html-detect.ts +26 -0
  312. package/src/nile-wysiwyg-editor/engine/index.ts +10 -1
  313. package/src/nile-wysiwyg-editor/engine/inputrules.ts +18 -1
  314. package/src/nile-wysiwyg-editor/engine/plugins/image-view.ts +3 -2
  315. package/src/nile-wysiwyg-editor/engine/plugins/link.ts +58 -2
  316. package/src/nile-wysiwyg-editor/engine/plugins/paste.ts +31 -8
  317. package/src/nile-wysiwyg-editor/engine/plugins/tables.ts +29 -7
  318. package/src/nile-wysiwyg-editor/engine/pm.test.ts +73 -0
  319. package/src/nile-wysiwyg-editor/engine/sanitize.ts +729 -7
  320. package/src/nile-wysiwyg-editor/engine/schema.ts +206 -33
  321. package/src/nile-wysiwyg-editor/engine/selection-state.ts +3 -1
  322. package/src/nile-wysiwyg-editor/engine/serializer.ts +30 -8
  323. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor-email-fidelity.test.ts +357 -0
  324. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.ts +45 -4
  325. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.ts +258 -0
  326. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts +119 -12
  327. package/src/nile-wysiwyg-editor/ui/bookmark-panel.ts +2 -2
  328. package/src/nile-wysiwyg-editor/ui/bubble-menu.ts +1 -1
  329. package/src/nile-wysiwyg-editor/ui/embed-menu.ts +1 -1
  330. package/src/nile-wysiwyg-editor/ui/embed-panel.ts +1 -1
  331. package/src/nile-wysiwyg-editor/ui/emoji-picker.ts +1 -1
  332. package/src/nile-wysiwyg-editor/ui/find-replace.ts +1 -1
  333. package/src/nile-wysiwyg-editor/ui/image-menu.ts +1 -1
  334. package/src/nile-wysiwyg-editor/ui/image-panel.ts +1 -1
  335. package/src/nile-wysiwyg-editor/ui/insert-menu.ts +1 -1
  336. package/src/nile-wysiwyg-editor/ui/link-editor.ts +2 -2
  337. package/src/nile-wysiwyg-editor/ui/markdown-panel.ts +1 -1
  338. package/src/nile-wysiwyg-editor/ui/math-panel.ts +1 -1
  339. package/src/nile-wysiwyg-editor/ui/shortcut-help.ts +1 -1
  340. package/src/nile-wysiwyg-editor/ui/source-view.ts +2 -2
  341. package/src/nile-wysiwyg-editor/ui/special-chars.ts +1 -1
  342. package/src/nile-wysiwyg-editor/ui/suggest-list.ts +14 -3
  343. package/src/nile-wysiwyg-editor/ui/table-grid-picker.ts +2 -2
  344. package/src/nile-wysiwyg-editor/ui/table-menu.ts +1 -1
  345. package/vscode-html-custom-data.json +15 -1
  346. package/web-test-runner.config.mjs +4 -0
  347. package/dist/index-3ca67627.cjs.js +0 -2
  348. package/dist/index-6f3fa4ab.esm.js +0 -1
  349. package/dist/index-7b1c9857.esm.js +0 -1
  350. package/dist/index-89c520e9.cjs.js +0 -5
  351. package/dist/index-89c520e9.cjs.js.map +0 -1
  352. package/dist/index-ba47645d.esm.js +0 -1
  353. package/dist/index-c3210a9c.cjs.js +0 -2
  354. package/dist/index-c3210a9c.cjs.js.map +0 -1
@@ -1,2 +1,2 @@
1
- System.register(["./image-view.cjs.js","./embeds.cjs.js","../../../index-89c520e9.cjs.js"],function(_export,_context){"use strict";var t,i,s,e,r;function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e;}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function");}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o);}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}return{setters:[function(_imageViewCjsJs){t=_imageViewCjsJs.a;i=_imageViewCjsJs.i;},function(_embedsCjsJs){s=_embedsCjsJs.E;e=_embedsCjsJs.a;},function(_index00bCjsJs){}],execute:function execute(){_export("E",r=/*#__PURE__*/function(){function r(i,_r,a){_classCallCheck(this,r);this.node=i,this.dom=document.createElement("div"),this.dom.className="nile-wysiwyg__embed",this.iframe=document.createElement("iframe"),this.iframe.setAttribute("frameborder","0"),this.iframe.setAttribute("allowfullscreen","true"),this.iframe.setAttribute("allow","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"),this.iframe.setAttribute("sandbox",s),this.iframe.setAttribute("referrerpolicy",e),this.dom.appendChild(this.iframe),this.applyAttrs(i),t(this.dom,this.dom,function(t){var i=a();if(void 0===i||!_r.editable)return;var s=_r.state.doc.nodeAt(i);s&&_r.dispatch(_r.state.tr.setNodeMarkup(i,void 0,_objectSpread(_objectSpread({},s.attrs),{},{width:t})));},160);}return _createClass(r,[{key:"applyAttrs",value:function applyAttrs(t){var _t$attrs=t.attrs,i=_t$attrs.src,s=_t$attrs.provider,e=_t$attrs.title,_r2=_t$attrs.width,a=_t$attrs.align;this.iframe.getAttribute("src")!==i&&this.iframe.setAttribute("src",i),this.dom.setAttribute("data-embed-provider",s!==null&&s!==void 0?s:"generic"),e?this.iframe.title=e:this.iframe.removeAttribute("title"),_r2?(this.dom.setAttribute("data-width",String(_r2)),this.dom.style.width="".concat(_r2,"px")):(this.dom.removeAttribute("data-width"),this.dom.style.width=""),a?this.dom.setAttribute("data-align",a):this.dom.removeAttribute("data-align"),this.dom.style.marginLeft="center"===a||"right"===a?"auto":"",this.dom.style.marginRight="center"===a?"auto":"";}},{key:"update",value:function update(t){return t.type===this.node.type&&(this.node=t,this.applyAttrs(t),!0);}},{key:"stopEvent",value:function stopEvent(t){return i(t);}},{key:"ignoreMutation",value:function ignoreMutation(){return!0;}}]);}());}};});
1
+ System.register(["./image-view.cjs.js","./embeds.cjs.js","../../../index-bbe23ad8.cjs.js","../../../index-ccc6a799.cjs.js","../schema.cjs.js","../../../index-7ae95edd.cjs.js","../../../index-178e1e57.cjs.js","../email-css.cjs.js","../sanitize.cjs.js"],function(_export,_context){"use strict";var t,i,s,e,r;function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e;}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function");}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o);}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}return{setters:[function(_imageViewCjsJs){t=_imageViewCjsJs.a;i=_imageViewCjsJs.i;},function(_embedsCjsJs){s=_embedsCjsJs.E;e=_embedsCjsJs.a;},function(_index00aCjsJs){},function(_index00bCjsJs){},function(_schemaCjsJs){},function(_index009CjsJs){},function(_index007CjsJs){},function(_emailCssCjsJs){},function(_sanitizeCjsJs){}],execute:function execute(){_export("E",r=/*#__PURE__*/function(){function r(i,_r,a){_classCallCheck(this,r);this.node=i,this.dom=document.createElement("div"),this.dom.className="nile-wysiwyg__embed",this.iframe=document.createElement("iframe"),this.iframe.setAttribute("frameborder","0"),this.iframe.setAttribute("allowfullscreen","true"),this.iframe.setAttribute("allow","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"),this.iframe.setAttribute("sandbox",s),this.iframe.setAttribute("referrerpolicy",e),this.dom.appendChild(this.iframe),this.applyAttrs(i),t(this.dom,this.dom,function(t){var i=a();if(void 0===i||!_r.editable)return;var s=_r.state.doc.nodeAt(i);s&&_r.dispatch(_r.state.tr.setNodeMarkup(i,void 0,_objectSpread(_objectSpread({},s.attrs),{},{width:t})));},160);}return _createClass(r,[{key:"applyAttrs",value:function applyAttrs(t){var _t$attrs=t.attrs,i=_t$attrs.src,s=_t$attrs.provider,e=_t$attrs.title,_r2=_t$attrs.width,a=_t$attrs.align;this.iframe.getAttribute("src")!==i&&this.iframe.setAttribute("src",i),this.dom.setAttribute("data-embed-provider",s!==null&&s!==void 0?s:"generic"),e?this.iframe.title=e:this.iframe.removeAttribute("title"),_r2?(this.dom.setAttribute("data-width",String(_r2)),this.dom.style.width="".concat(_r2,"px")):(this.dom.removeAttribute("data-width"),this.dom.style.width=""),a?this.dom.setAttribute("data-align",a):this.dom.removeAttribute("data-align"),this.dom.style.marginLeft="center"===a||"right"===a?"auto":"",this.dom.style.marginRight="center"===a?"auto":"";}},{key:"update",value:function update(t){return t.type===this.node.type&&(this.node=t,this.applyAttrs(t),!0);}},{key:"stopEvent",value:function stopEvent(t){return i(t);}},{key:"ignoreMutation",value:function ignoreMutation(){return!0;}}]);}());}};});
2
2
  //# sourceMappingURL=embed-view.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"embed-view.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/embed-view.ts"],"sourcesContent":["import { Node as PMNode } from 'prosemirror-model';\nimport { EditorView, NodeView } from 'prosemirror-view';\nimport { attachResizeHandles, isResizeEvent } from './image-view';\nimport { EMBED_SANDBOX, EMBED_REFERRER_POLICY } from './embeds';\n\n/** Below this a 16:9 player is unusable and its own controls stop fitting. */\nconst MIN_EMBED_WIDTH = 160;\n\n/**\n * Video embed (YouTube/Vimeo/Loom) with the same corner drag-resize handles\n * as images. Only the width is dragged; the 16:9 aspect ratio comes from CSS,\n * so the height follows automatically.\n */\nexport class EmbedView implements NodeView {\n dom: HTMLDivElement;\n\n private iframe: HTMLIFrameElement;\n\n constructor(\n private node: PMNode,\n view: EditorView,\n getPos: () => number | undefined\n ) {\n this.dom = document.createElement('div');\n this.dom.className = 'nile-wysiwyg__embed';\n this.iframe = document.createElement('iframe');\n this.iframe.setAttribute('frameborder', '0');\n this.iframe.setAttribute('allowfullscreen', 'true');\n this.iframe.setAttribute(\n 'allow',\n 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture'\n );\n this.iframe.setAttribute('sandbox', EMBED_SANDBOX);\n this.iframe.setAttribute('referrerpolicy', EMBED_REFERRER_POLICY);\n this.dom.appendChild(this.iframe);\n this.applyAttrs(node);\n\n attachResizeHandles(\n this.dom,\n this.dom,\n width => {\n const pos = getPos();\n if (pos === undefined || !view.editable) return;\n const current = view.state.doc.nodeAt(pos);\n if (!current) return;\n view.dispatch(\n view.state.tr.setNodeMarkup(pos, undefined, { ...current.attrs, width })\n );\n },\n MIN_EMBED_WIDTH\n );\n }\n\n private applyAttrs(node: PMNode): void {\n const { src, provider, title, width, align } = node.attrs;\n if (this.iframe.getAttribute('src') !== src) this.iframe.setAttribute('src', src);\n this.dom.setAttribute('data-embed-provider', provider ?? 'generic');\n if (title) this.iframe.title = title;\n else this.iframe.removeAttribute('title');\n if (width) {\n this.dom.setAttribute('data-width', String(width));\n this.dom.style.width = `${width}px`;\n } else {\n this.dom.removeAttribute('data-width');\n this.dom.style.width = '';\n }\n // Block alignment via auto margins (mirrors the image figure).\n if (align) this.dom.setAttribute('data-align', align);\n else this.dom.removeAttribute('data-align');\n this.dom.style.marginLeft = align === 'center' || align === 'right' ? 'auto' : '';\n this.dom.style.marginRight = align === 'center' ? 'auto' : '';\n }\n\n update(node: PMNode): boolean {\n if (node.type !== this.node.type) return false;\n this.node = node;\n this.applyAttrs(node);\n return true;\n }\n\n stopEvent(event: Event): boolean {\n return isResizeEvent(event);\n }\n\n ignoreMutation(): boolean {\n return true;\n }\n}\n"],"names":["EmbedView","r","node","view","getPos","this","dom","document","createElement","className","iframe","setAttribute","EMBED_SANDBOX","EMBED_REFERRER_POLICY","appendChild","applyAttrs","attachResizeHandles","width","pos","undefined","editable","current","state","doc","nodeAt","dispatch","tr","setNodeMarkup","attrs","t","_createClass","key","value","_t$attrs","src","provider","title","align","getAttribute","removeAttribute","String","style","marginLeft","marginRight","update","type","stopEvent","event","isResizeEvent","ignoreMutation"],"mappings":"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"}
1
+ {"version":3,"file":"embed-view.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/embed-view.ts"],"sourcesContent":["import { Node as PMNode } from 'prosemirror-model';\nimport { EditorView, NodeView } from 'prosemirror-view';\nimport { attachResizeHandles, isResizeEvent } from './image-view';\nimport { EMBED_SANDBOX, EMBED_REFERRER_POLICY } from './embeds';\n\n/** Below this a 16:9 player is unusable and its own controls stop fitting. */\nconst MIN_EMBED_WIDTH = 160;\n\n/**\n * Video embed (YouTube/Vimeo/Loom) with the same corner drag-resize handles\n * as images. Only the width is dragged; the 16:9 aspect ratio comes from CSS,\n * so the height follows automatically.\n */\nexport class EmbedView implements NodeView {\n dom: HTMLDivElement;\n\n private iframe: HTMLIFrameElement;\n\n constructor(\n private node: PMNode,\n view: EditorView,\n getPos: () => number | undefined\n ) {\n this.dom = document.createElement('div');\n this.dom.className = 'nile-wysiwyg__embed';\n this.iframe = document.createElement('iframe');\n this.iframe.setAttribute('frameborder', '0');\n this.iframe.setAttribute('allowfullscreen', 'true');\n this.iframe.setAttribute(\n 'allow',\n 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture'\n );\n this.iframe.setAttribute('sandbox', EMBED_SANDBOX);\n this.iframe.setAttribute('referrerpolicy', EMBED_REFERRER_POLICY);\n this.dom.appendChild(this.iframe);\n this.applyAttrs(node);\n\n attachResizeHandles(\n this.dom,\n this.dom,\n width => {\n const pos = getPos();\n if (pos === undefined || !view.editable) return;\n const current = view.state.doc.nodeAt(pos);\n if (!current) return;\n view.dispatch(\n view.state.tr.setNodeMarkup(pos, undefined, { ...current.attrs, width })\n );\n },\n MIN_EMBED_WIDTH\n );\n }\n\n private applyAttrs(node: PMNode): void {\n const { src, provider, title, width, align } = node.attrs;\n if (this.iframe.getAttribute('src') !== src) this.iframe.setAttribute('src', src);\n this.dom.setAttribute('data-embed-provider', provider ?? 'generic');\n if (title) this.iframe.title = title;\n else this.iframe.removeAttribute('title');\n if (width) {\n this.dom.setAttribute('data-width', String(width));\n this.dom.style.width = `${width}px`;\n } else {\n this.dom.removeAttribute('data-width');\n this.dom.style.width = '';\n }\n // Block alignment via auto margins (mirrors the image figure).\n if (align) this.dom.setAttribute('data-align', align);\n else this.dom.removeAttribute('data-align');\n this.dom.style.marginLeft = align === 'center' || align === 'right' ? 'auto' : '';\n this.dom.style.marginRight = align === 'center' ? 'auto' : '';\n }\n\n update(node: PMNode): boolean {\n if (node.type !== this.node.type) return false;\n this.node = node;\n this.applyAttrs(node);\n return true;\n }\n\n stopEvent(event: Event): boolean {\n return isResizeEvent(event);\n }\n\n ignoreMutation(): boolean {\n return true;\n }\n}\n"],"names":["EmbedView","r","node","view","getPos","this","dom","document","createElement","className","iframe","setAttribute","EMBED_SANDBOX","EMBED_REFERRER_POLICY","appendChild","applyAttrs","attachResizeHandles","width","pos","undefined","editable","current","state","doc","nodeAt","dispatch","tr","setNodeMarkup","_objectSpread","attrs","t","_createClass","key","value","_t$attrs","src","provider","title","align","getAttribute","removeAttribute","String","style","marginLeft","marginRight","update","type","stopEvent","event","isResizeEvent","ignoreMutation"],"mappings":"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"}
@@ -1 +1 @@
1
- import{a as t,i}from"./image-view.esm.js";import{E as s,a as e}from"./embeds.esm.js";import"../../../index-6f3fa4ab.esm.js";class r{constructor(i,r,a){this.node=i,this.dom=document.createElement("div"),this.dom.className="nile-wysiwyg__embed",this.iframe=document.createElement("iframe"),this.iframe.setAttribute("frameborder","0"),this.iframe.setAttribute("allowfullscreen","true"),this.iframe.setAttribute("allow","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"),this.iframe.setAttribute("sandbox",s),this.iframe.setAttribute("referrerpolicy",e),this.dom.appendChild(this.iframe),this.applyAttrs(i),t(this.dom,this.dom,(t=>{const i=a();if(void 0===i||!r.editable)return;const s=r.state.doc.nodeAt(i);s&&r.dispatch(r.state.tr.setNodeMarkup(i,void 0,{...s.attrs,width:t}))}),160)}applyAttrs(t){const{src:i,provider:s,title:e,width:r,align:a}=t.attrs;this.iframe.getAttribute("src")!==i&&this.iframe.setAttribute("src",i),this.dom.setAttribute("data-embed-provider",s??"generic"),e?this.iframe.title=e:this.iframe.removeAttribute("title"),r?(this.dom.setAttribute("data-width",String(r)),this.dom.style.width=`${r}px`):(this.dom.removeAttribute("data-width"),this.dom.style.width=""),a?this.dom.setAttribute("data-align",a):this.dom.removeAttribute("data-align"),this.dom.style.marginLeft="center"===a||"right"===a?"auto":"",this.dom.style.marginRight="center"===a?"auto":""}update(t){return t.type===this.node.type&&(this.node=t,this.applyAttrs(t),!0)}stopEvent(t){return i(t)}ignoreMutation(){return!0}}export{r as E};
1
+ import{a as t,i}from"./image-view.esm.js";import{E as s,a as e}from"./embeds.esm.js";import"../../../index-7ca72b78.esm.js";import"../../../index-5d34cff1.esm.js";import"../schema.esm.js";import"../../../index-4df50481.esm.js";import"../../../index-920675c4.esm.js";import"../email-css.esm.js";import"../sanitize.esm.js";class r{constructor(i,r,a){this.node=i,this.dom=document.createElement("div"),this.dom.className="nile-wysiwyg__embed",this.iframe=document.createElement("iframe"),this.iframe.setAttribute("frameborder","0"),this.iframe.setAttribute("allowfullscreen","true"),this.iframe.setAttribute("allow","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"),this.iframe.setAttribute("sandbox",s),this.iframe.setAttribute("referrerpolicy",e),this.dom.appendChild(this.iframe),this.applyAttrs(i),t(this.dom,this.dom,(t=>{const i=a();if(void 0===i||!r.editable)return;const s=r.state.doc.nodeAt(i);s&&r.dispatch(r.state.tr.setNodeMarkup(i,void 0,{...s.attrs,width:t}))}),160)}applyAttrs(t){const{src:i,provider:s,title:e,width:r,align:a}=t.attrs;this.iframe.getAttribute("src")!==i&&this.iframe.setAttribute("src",i),this.dom.setAttribute("data-embed-provider",s??"generic"),e?this.iframe.title=e:this.iframe.removeAttribute("title"),r?(this.dom.setAttribute("data-width",String(r)),this.dom.style.width=`${r}px`):(this.dom.removeAttribute("data-width"),this.dom.style.width=""),a?this.dom.setAttribute("data-align",a):this.dom.removeAttribute("data-align"),this.dom.style.marginLeft="center"===a||"right"===a?"auto":"",this.dom.style.marginRight="center"===a?"auto":""}update(t){return t.type===this.node.type&&(this.node=t,this.applyAttrs(t),!0)}stopEvent(t){return i(t)}ignoreMutation(){return!0}}export{r as E};
@@ -1,2 +1,2 @@
1
- System.register(["../../../index-89c520e9.cjs.js"],function(_export,_context){"use strict";var e,o,t;function r(e){var o;try{o=new URL(e.trim());}catch(_unused){return null;}if("https:"!==o.protocol)return null;var t=o.hostname.replace(/^www\./,"");if("youtube.com"===t||"youtube-nocookie.com"===t||"youtu.be"===t){var _o$searchParams$get;var _e="";if("youtu.be"===t)_e=o.pathname.slice(1).split("/")[0];else if("/watch"===o.pathname)_e=(_o$searchParams$get=o.searchParams.get("v"))!==null&&_o$searchParams$get!==void 0?_o$searchParams$get:"";else{var _t=/^\/(embed|shorts)\/([\w-]+)/.exec(o.pathname);_t&&(_e=_t[2]);}if(/^[\w-]{6,20}$/.test(_e))return{src:"https://www.youtube-nocookie.com/embed/".concat(_e),provider:"youtube"};}else if("vimeo.com"===t||"player.vimeo.com"===t){var _e2=/\/(?:video\/)?(\d{6,12})(?:$|[/?])/.exec(o.pathname);if(_e2)return{src:"https://player.vimeo.com/video/".concat(_e2[1]),provider:"vimeo"};}else if("loom.com"===t){var _e3=/^\/(share|embed)\/([0-9a-f]{16,40})/.exec(o.pathname);if(_e3)return{src:"https://www.loom.com/embed/".concat(_e3[2]),provider:"loom"};}return{src:o.href,provider:"generic"};}function s(e){try{return"https:"===new URL(e.trim()).protocol;}catch(_unused2){return!1;}}function n(){return new e({props:{handlePaste:function handlePaste(e,o){var _o$clipboardData;var t=e.state;if(!t.selection.empty)return!1;var s=(_o$clipboardData=o.clipboardData)===null||_o$clipboardData===void 0||(_o$clipboardData=_o$clipboardData.getData("text/plain"))===null||_o$clipboardData===void 0?void 0:_o$clipboardData.trim();if(!s||/\s/.test(s))return!1;var n=r(s);if(!n)return!1;var i=t.schema.nodes.embed.create({src:n.src,provider:n.provider});return e.dispatch(t.tr.replaceSelectionWith(i).scrollIntoView()),!0;}}});}_export({e:n,i:s,t:r});return{setters:[function(_index00bCjsJs){e=_index00bCjsJs.b;}],execute:function execute(){_export("E",o="allow-scripts allow-same-origin allow-presentation allow-popups"),_export("a",t="strict-origin-when-cross-origin");}};});
1
+ System.register(["../../../index-bbe23ad8.cjs.js","../../../index-ccc6a799.cjs.js"],function(_export,_context){"use strict";var e,o,t;function r(e){var o;try{o=new URL(e.trim());}catch(_unused){return null;}if("https:"!==o.protocol)return null;var t=o.hostname.replace(/^www\./,"");if("youtube.com"===t||"youtube-nocookie.com"===t||"youtu.be"===t){var _o$searchParams$get;var _e="";if("youtu.be"===t)_e=o.pathname.slice(1).split("/")[0];else if("/watch"===o.pathname)_e=(_o$searchParams$get=o.searchParams.get("v"))!==null&&_o$searchParams$get!==void 0?_o$searchParams$get:"";else{var _t=/^\/(embed|shorts)\/([\w-]+)/.exec(o.pathname);_t&&(_e=_t[2]);}if(/^[\w-]{6,20}$/.test(_e))return{src:"https://www.youtube-nocookie.com/embed/".concat(_e),provider:"youtube"};}else if("vimeo.com"===t||"player.vimeo.com"===t){var _e2=/\/(?:video\/)?(\d{6,12})(?:$|[/?])/.exec(o.pathname);if(_e2)return{src:"https://player.vimeo.com/video/".concat(_e2[1]),provider:"vimeo"};}else if("loom.com"===t){var _e3=/^\/(share|embed)\/([0-9a-f]{16,40})/.exec(o.pathname);if(_e3)return{src:"https://www.loom.com/embed/".concat(_e3[2]),provider:"loom"};}return{src:o.href,provider:"generic"};}function s(e){try{return"https:"===new URL(e.trim()).protocol;}catch(_unused2){return!1;}}function n(){return new e({props:{handlePaste:function handlePaste(e,o){var _o$clipboardData;var t=e.state;if(!t.selection.empty)return!1;var s=(_o$clipboardData=o.clipboardData)===null||_o$clipboardData===void 0||(_o$clipboardData=_o$clipboardData.getData("text/plain"))===null||_o$clipboardData===void 0?void 0:_o$clipboardData.trim();if(!s||/\s/.test(s))return!1;var n=r(s);if(!n)return!1;var i=t.schema.nodes.embed.create({src:n.src,provider:n.provider});return e.dispatch(t.tr.replaceSelectionWith(i).scrollIntoView()),!0;}}});}_export({e:n,i:s,t:r});return{setters:[function(_index00aCjsJs){e=_index00aCjsJs.a;},function(_index00bCjsJs){}],execute:function execute(){_export("E",o="allow-scripts allow-same-origin allow-presentation allow-popups"),_export("a",t="strict-origin-when-cross-origin");}};});
2
2
  //# sourceMappingURL=embeds.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"embeds.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/embeds.ts"],"sourcesContent":["import { Plugin } from 'prosemirror-state';\n\nexport interface EmbedTarget {\n src: string;\n provider: 'youtube' | 'vimeo' | 'loom' | 'generic';\n}\n\n/**\n * Sandbox tokens applied to every embed iframe. Notably this OMITS\n * `allow-top-navigation`, so a framed page cannot redirect the whole tab\n * (the main clickjacking/phishing vector); scripts and same-origin are\n * allowed so third-party players still run. Kept in sync with the sanitizer.\n */\nexport const EMBED_SANDBOX = 'allow-scripts allow-same-origin allow-presentation allow-popups';\n\n/** Limits the referrer leaked to the embedded third-party host. */\nexport const EMBED_REFERRER_POLICY = 'strict-origin-when-cross-origin';\n\n/**\n * Converts a URL into an embed target. Known providers (YouTube/Vimeo/Loom)\n * are canonicalized to their dedicated embed URLs; any other `https://` URL\n * is accepted as a `generic` embed. The iframe is always sandboxed on render\n * (see EMBED_SANDBOX), so untrusted hosts cannot navigate the top window.\n * Returns null only for non-https or unparseable URLs.\n */\nexport function toEmbedUrl(url: string): EmbedTarget | null {\n let parsed: URL;\n try {\n parsed = new URL(url.trim());\n } catch {\n return null;\n }\n if (parsed.protocol !== 'https:') return null;\n const host = parsed.hostname.replace(/^www\\./, '');\n\n // YouTube: watch?v=ID, youtu.be/ID, shorts/ID, embed/ID\n if (host === 'youtube.com' || host === 'youtube-nocookie.com' || host === 'youtu.be') {\n let id = '';\n if (host === 'youtu.be') id = parsed.pathname.slice(1).split('/')[0];\n else if (parsed.pathname === '/watch') id = parsed.searchParams.get('v') ?? '';\n else {\n const match = /^\\/(embed|shorts)\\/([\\w-]+)/.exec(parsed.pathname);\n if (match) id = match[2];\n }\n if (/^[\\w-]{6,20}$/.test(id)) {\n return { src: `https://www.youtube-nocookie.com/embed/${id}`, provider: 'youtube' };\n }\n }\n\n // Vimeo: vimeo.com/123456789, player.vimeo.com/video/123456789\n else if (host === 'vimeo.com' || host === 'player.vimeo.com') {\n const match = /\\/(?:video\\/)?(\\d{6,12})(?:$|[/?])/.exec(parsed.pathname);\n if (match) {\n return { src: `https://player.vimeo.com/video/${match[1]}`, provider: 'vimeo' };\n }\n }\n\n // Loom: loom.com/share/ID or loom.com/embed/ID\n else if (host === 'loom.com') {\n const match = /^\\/(share|embed)\\/([0-9a-f]{16,40})/.exec(parsed.pathname);\n if (match) {\n return { src: `https://www.loom.com/embed/${match[2]}`, provider: 'loom' };\n }\n }\n\n // Any other https URL: embed as-is, sandboxed.\n return { src: parsed.href, provider: 'generic' };\n}\n\n/**\n * True when a URL is permitted as an embed src (sanitizer check). Any\n * `https://` URL is allowed; the iframe is sandboxed at render time.\n */\nexport function isAllowedEmbedSrc(src: string): boolean {\n try {\n return new URL(src.trim()).protocol === 'https:';\n } catch {\n return false;\n }\n}\n\n/**\n * Pasting a bare provider URL onto an empty selection inserts an embed\n * instead of plain text. (Pasting over selected text still creates a link.)\n */\nexport function embedPastePlugin(): Plugin {\n return new Plugin({\n props: {\n handlePaste(view, event) {\n const { state } = view;\n if (!state.selection.empty) return false;\n const text = event.clipboardData?.getData('text/plain')?.trim();\n if (!text || /\\s/.test(text)) return false;\n const target = toEmbedUrl(text);\n if (!target) return false;\n const embed = state.schema.nodes.embed.create({\n src: target.src,\n provider: target.provider,\n });\n view.dispatch(state.tr.replaceSelectionWith(embed).scrollIntoView());\n return true;\n },\n },\n });\n}\n"],"names":["toEmbedUrl","url","parsed","URL","trim","_unused","protocol","host","hostname","replace","_o$searchParams$get","id","pathname","slice","split","searchParams","get","match","exec","test","src","provider","concat","href","isAllowedEmbedSrc","_unused2","embedPastePlugin","n","Plugin","props","handlePaste","view","event","_o$clipboardData","state","selection","empty","text","clipboardData","getData","target","embed","schema","nodes","create","dispatch","tr","replaceSelectionWith","scrollIntoView","EMBED_SANDBOX","EMBED_REFERRER_POLICY"],"mappings":"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"}
1
+ {"version":3,"file":"embeds.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/embeds.ts"],"sourcesContent":["import { Plugin } from 'prosemirror-state';\n\nexport interface EmbedTarget {\n src: string;\n provider: 'youtube' | 'vimeo' | 'loom' | 'generic';\n}\n\n/**\n * Sandbox tokens applied to every embed iframe. Notably this OMITS\n * `allow-top-navigation`, so a framed page cannot redirect the whole tab\n * (the main clickjacking/phishing vector); scripts and same-origin are\n * allowed so third-party players still run. Kept in sync with the sanitizer.\n */\nexport const EMBED_SANDBOX = 'allow-scripts allow-same-origin allow-presentation allow-popups';\n\n/** Limits the referrer leaked to the embedded third-party host. */\nexport const EMBED_REFERRER_POLICY = 'strict-origin-when-cross-origin';\n\n/**\n * Converts a URL into an embed target. Known providers (YouTube/Vimeo/Loom)\n * are canonicalized to their dedicated embed URLs; any other `https://` URL\n * is accepted as a `generic` embed. The iframe is always sandboxed on render\n * (see EMBED_SANDBOX), so untrusted hosts cannot navigate the top window.\n * Returns null only for non-https or unparseable URLs.\n */\nexport function toEmbedUrl(url: string): EmbedTarget | null {\n let parsed: URL;\n try {\n parsed = new URL(url.trim());\n } catch {\n return null;\n }\n if (parsed.protocol !== 'https:') return null;\n const host = parsed.hostname.replace(/^www\\./, '');\n\n // YouTube: watch?v=ID, youtu.be/ID, shorts/ID, embed/ID\n if (host === 'youtube.com' || host === 'youtube-nocookie.com' || host === 'youtu.be') {\n let id = '';\n if (host === 'youtu.be') id = parsed.pathname.slice(1).split('/')[0];\n else if (parsed.pathname === '/watch') id = parsed.searchParams.get('v') ?? '';\n else {\n const match = /^\\/(embed|shorts)\\/([\\w-]+)/.exec(parsed.pathname);\n if (match) id = match[2];\n }\n if (/^[\\w-]{6,20}$/.test(id)) {\n return { src: `https://www.youtube-nocookie.com/embed/${id}`, provider: 'youtube' };\n }\n }\n\n // Vimeo: vimeo.com/123456789, player.vimeo.com/video/123456789\n else if (host === 'vimeo.com' || host === 'player.vimeo.com') {\n const match = /\\/(?:video\\/)?(\\d{6,12})(?:$|[/?])/.exec(parsed.pathname);\n if (match) {\n return { src: `https://player.vimeo.com/video/${match[1]}`, provider: 'vimeo' };\n }\n }\n\n // Loom: loom.com/share/ID or loom.com/embed/ID\n else if (host === 'loom.com') {\n const match = /^\\/(share|embed)\\/([0-9a-f]{16,40})/.exec(parsed.pathname);\n if (match) {\n return { src: `https://www.loom.com/embed/${match[2]}`, provider: 'loom' };\n }\n }\n\n // Any other https URL: embed as-is, sandboxed.\n return { src: parsed.href, provider: 'generic' };\n}\n\n/**\n * True when a URL is permitted as an embed src (sanitizer check). Any\n * `https://` URL is allowed; the iframe is sandboxed at render time.\n */\nexport function isAllowedEmbedSrc(src: string): boolean {\n try {\n return new URL(src.trim()).protocol === 'https:';\n } catch {\n return false;\n }\n}\n\n/**\n * Pasting a bare provider URL onto an empty selection inserts an embed\n * instead of plain text. (Pasting over selected text still creates a link.)\n */\nexport function embedPastePlugin(): Plugin {\n return new Plugin({\n props: {\n handlePaste(view, event) {\n const { state } = view;\n if (!state.selection.empty) return false;\n const text = event.clipboardData?.getData('text/plain')?.trim();\n if (!text || /\\s/.test(text)) return false;\n const target = toEmbedUrl(text);\n if (!target) return false;\n const embed = state.schema.nodes.embed.create({\n src: target.src,\n provider: target.provider,\n });\n view.dispatch(state.tr.replaceSelectionWith(embed).scrollIntoView());\n return true;\n },\n },\n });\n}\n"],"names":["toEmbedUrl","url","parsed","URL","trim","_unused","protocol","host","hostname","replace","_o$searchParams$get","id","pathname","slice","split","searchParams","get","match","exec","test","src","provider","concat","href","isAllowedEmbedSrc","_unused2","embedPastePlugin","Plugin","props","handlePaste","view","event","state","selection","empty","text","clipboardData","getData","target","embed","schema","nodes","create","dispatch","tr","replaceSelectionWith","scrollIntoView","EMBED_SANDBOX","_export","EMBED_REFERRER_POLICY"],"mappings":"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"}
@@ -1 +1 @@
1
- import{b as e}from"../../../index-6f3fa4ab.esm.js";const o="allow-scripts allow-same-origin allow-presentation allow-popups",t="strict-origin-when-cross-origin";function r(e){let o;try{o=new URL(e.trim())}catch{return null}if("https:"!==o.protocol)return null;const t=o.hostname.replace(/^www\./,"");if("youtube.com"===t||"youtube-nocookie.com"===t||"youtu.be"===t){let e="";if("youtu.be"===t)e=o.pathname.slice(1).split("/")[0];else if("/watch"===o.pathname)e=o.searchParams.get("v")??"";else{const t=/^\/(embed|shorts)\/([\w-]+)/.exec(o.pathname);t&&(e=t[2])}if(/^[\w-]{6,20}$/.test(e))return{src:`https://www.youtube-nocookie.com/embed/${e}`,provider:"youtube"}}else if("vimeo.com"===t||"player.vimeo.com"===t){const e=/\/(?:video\/)?(\d{6,12})(?:$|[/?])/.exec(o.pathname);if(e)return{src:`https://player.vimeo.com/video/${e[1]}`,provider:"vimeo"}}else if("loom.com"===t){const e=/^\/(share|embed)\/([0-9a-f]{16,40})/.exec(o.pathname);if(e)return{src:`https://www.loom.com/embed/${e[2]}`,provider:"loom"}}return{src:o.href,provider:"generic"}}function s(e){try{return"https:"===new URL(e.trim()).protocol}catch{return!1}}function n(){return new e({props:{handlePaste(e,o){const{state:t}=e;if(!t.selection.empty)return!1;const s=o.clipboardData?.getData("text/plain")?.trim();if(!s||/\s/.test(s))return!1;const n=r(s);if(!n)return!1;const i=t.schema.nodes.embed.create({src:n.src,provider:n.provider});return e.dispatch(t.tr.replaceSelectionWith(i).scrollIntoView()),!0}}})}export{o as E,t as a,n as e,s as i,r as t};
1
+ import{a as e}from"../../../index-7ca72b78.esm.js";import"../../../index-5d34cff1.esm.js";const o="allow-scripts allow-same-origin allow-presentation allow-popups",t="strict-origin-when-cross-origin";function r(e){let o;try{o=new URL(e.trim())}catch{return null}if("https:"!==o.protocol)return null;const t=o.hostname.replace(/^www\./,"");if("youtube.com"===t||"youtube-nocookie.com"===t||"youtu.be"===t){let e="";if("youtu.be"===t)e=o.pathname.slice(1).split("/")[0];else if("/watch"===o.pathname)e=o.searchParams.get("v")??"";else{const t=/^\/(embed|shorts)\/([\w-]+)/.exec(o.pathname);t&&(e=t[2])}if(/^[\w-]{6,20}$/.test(e))return{src:`https://www.youtube-nocookie.com/embed/${e}`,provider:"youtube"}}else if("vimeo.com"===t||"player.vimeo.com"===t){const e=/\/(?:video\/)?(\d{6,12})(?:$|[/?])/.exec(o.pathname);if(e)return{src:`https://player.vimeo.com/video/${e[1]}`,provider:"vimeo"}}else if("loom.com"===t){const e=/^\/(share|embed)\/([0-9a-f]{16,40})/.exec(o.pathname);if(e)return{src:`https://www.loom.com/embed/${e[2]}`,provider:"loom"}}return{src:o.href,provider:"generic"}}function s(e){try{return"https:"===new URL(e.trim()).protocol}catch{return!1}}function n(){return new e({props:{handlePaste(e,o){const{state:t}=e;if(!t.selection.empty)return!1;const s=o.clipboardData?.getData("text/plain")?.trim();if(!s||/\s/.test(s))return!1;const n=r(s);if(!n)return!1;const i=t.schema.nodes.embed.create({src:n.src,provider:n.provider});return e.dispatch(t.tr.replaceSelectionWith(i).scrollIntoView()),!0}}})}export{o as E,t as a,n as e,s as i,r as t};
@@ -1,2 +1,2 @@
1
- System.register(["../../../index-89c520e9.cjs.js","../../../index-3ca67627.cjs.js"],function(_export,_context){"use strict";var n,e,t,r,s,c;function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread();}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r);}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r);}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var n=0,F=function F(){};return{s:F,n:function(_n2){function n(){return _n2.apply(this,arguments);}n.toString=function(){return _n2.toString();};return n;}(function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]};}),e:function e(r){throw r;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var o,a=!0,u=!1;return{s:function s(){t=t.call(r);},n:function n(){var r=t.next();return a=r.done,r;},e:function e(r){u=!0,o=r;},f:function f(){try{a||null==t["return"]||t["return"]();}finally{if(u)throw o;}}};}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function i(n,e,t){if(!e)return[];var r=[],s=t?e:e.toLowerCase();return n.descendants(function(n,e){if(!n.isTextblock)return!0;var c=n.textBetween(0,n.content.size,"\0","\0"),i=t?c:c.toLowerCase();var a=0;for(;-1!==(a=i.indexOf(s,a));)r.push({from:e+1+a,to:e+1+a+s.length}),a+=s.length;return!1;}),r;}function a(){return new e({key:s,state:{init:function init(){return c;},apply:function apply(n,e){var t=n.getMeta(s);if(t)return function(n,e,t){switch(e.type){case"search":{var _e$caseSensitive;var _r=(_e$caseSensitive=e.caseSensitive)!==null&&_e$caseSensitive!==void 0?_e$caseSensitive:n.caseSensitive;return{query:e.query,caseSensitive:_r,matches:i(t,e.query,_r),activeIndex:0};}case"next":return n.matches.length?_objectSpread(_objectSpread({},n),{},{activeIndex:(n.activeIndex+1)%n.matches.length}):n;case"prev":return n.matches.length?_objectSpread(_objectSpread({},n),{},{activeIndex:(n.activeIndex-1+n.matches.length)%n.matches.length}):n;default:return c;}}(e,t,n.doc);if(n.docChanged&&e.query){var _t=i(n.doc,e.query,e.caseSensitive);return _objectSpread(_objectSpread({},e),{},{matches:_t,activeIndex:Math.min(e.activeIndex,Math.max(0,_t.length-1))});}return e;}},props:{decorations:function decorations(n){var e=s.getState(n);return e&&e.matches.length?t.create(n.doc,e.matches.map(function(n,t){return r.inline(n.from,n.to,{"class":t===e.activeIndex?"nile-wysiwyg__find-match nile-wysiwyg__find-active":"nile-wysiwyg__find-match"});})):null;}}});}function u(n){var _s$getState;return(_s$getState=s.getState(n))!==null&&_s$getState!==void 0?_s$getState:c;}function o(n,e,t){return n.tr.setMeta(s,{type:"search",query:e,caseSensitive:t});}function f(n,e){return n.tr.setMeta(s,{type:e});}function l(n){return n.tr.setMeta(s,{type:"clear"});}function y(n,e){var t=u(n),r=t.matches[t.activeIndex];return r?n.tr.insertText(e,r.from,r.to):null;}function d(n,e){var t=u(n);if(!t.matches.length)return null;var r=n.tr;var _iterator=_createForOfIteratorHelper(_toConsumableArray(t.matches).reverse()),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var _n=_step.value;r.insertText(e,_n.from,_n.to);}}catch(err){_iterator.e(err);}finally{_iterator.f();}return r;}_export({a:f,b:d,c:l,f:a,g:u,r:y,s:o});return{setters:[function(_index00bCjsJs){n=_index00bCjsJs.P;e=_index00bCjsJs.b;},function(_index00aCjsJs){t=_index00aCjsJs.D;r=_index00aCjsJs.a;}],execute:function execute(){s=new n("nileFindReplace"),c={query:"",caseSensitive:!1,matches:[],activeIndex:0};}};});
1
+ System.register(["../../../index-bbe23ad8.cjs.js","../../../index-7ae95edd.cjs.js","../../../index-ccc6a799.cjs.js"],function(_export,_context){"use strict";var n,e,t,r,s,c;function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread();}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r);}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r);}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var n=0,F=function F(){};return{s:F,n:function(_n2){function n(){return _n2.apply(this,arguments);}n.toString=function(){return _n2.toString();};return n;}(function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]};}),e:function e(r){throw r;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var o,a=!0,u=!1;return{s:function s(){t=t.call(r);},n:function n(){var r=t.next();return a=r.done,r;},e:function e(r){u=!0,o=r;},f:function f(){try{a||null==t["return"]||t["return"]();}finally{if(u)throw o;}}};}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function i(n,e,t){if(!e)return[];var r=[],s=t?e:e.toLowerCase();return n.descendants(function(n,e){if(!n.isTextblock)return!0;var c=n.textBetween(0,n.content.size,"\0","\0"),i=t?c:c.toLowerCase();var a=0;for(;-1!==(a=i.indexOf(s,a));)r.push({from:e+1+a,to:e+1+a+s.length}),a+=s.length;return!1;}),r;}function a(){return new e({key:s,state:{init:function init(){return c;},apply:function apply(n,e){var t=n.getMeta(s);if(t)return function(n,e,t){switch(e.type){case"search":{var _e$caseSensitive;var _r=(_e$caseSensitive=e.caseSensitive)!==null&&_e$caseSensitive!==void 0?_e$caseSensitive:n.caseSensitive;return{query:e.query,caseSensitive:_r,matches:i(t,e.query,_r),activeIndex:0};}case"next":return n.matches.length?_objectSpread(_objectSpread({},n),{},{activeIndex:(n.activeIndex+1)%n.matches.length}):n;case"prev":return n.matches.length?_objectSpread(_objectSpread({},n),{},{activeIndex:(n.activeIndex-1+n.matches.length)%n.matches.length}):n;default:return c;}}(e,t,n.doc);if(n.docChanged&&e.query){var _t=i(n.doc,e.query,e.caseSensitive);return _objectSpread(_objectSpread({},e),{},{matches:_t,activeIndex:Math.min(e.activeIndex,Math.max(0,_t.length-1))});}return e;}},props:{decorations:function decorations(n){var e=s.getState(n);return e&&e.matches.length?t.create(n.doc,e.matches.map(function(n,t){return r.inline(n.from,n.to,{"class":t===e.activeIndex?"nile-wysiwyg__find-match nile-wysiwyg__find-active":"nile-wysiwyg__find-match"});})):null;}}});}function u(n){var _s$getState;return(_s$getState=s.getState(n))!==null&&_s$getState!==void 0?_s$getState:c;}function o(n,e,t){return n.tr.setMeta(s,{type:"search",query:e,caseSensitive:t});}function f(n,e){return n.tr.setMeta(s,{type:e});}function l(n){return n.tr.setMeta(s,{type:"clear"});}function d(n,e){var t=u(n),r=t.matches[t.activeIndex];return r?n.tr.insertText(e,r.from,r.to):null;}function y(n,e){var t=u(n);if(!t.matches.length)return null;var r=n.tr;var _iterator=_createForOfIteratorHelper(_toConsumableArray(t.matches).reverse()),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var _n=_step.value;r.insertText(e,_n.from,_n.to);}}catch(err){_iterator.e(err);}finally{_iterator.f();}return r;}_export({a:f,b:y,c:l,f:a,g:u,r:d,s:o});return{setters:[function(_index00aCjsJs){n=_index00aCjsJs.P;e=_index00aCjsJs.a;},function(_index009CjsJs){t=_index009CjsJs.D;r=_index009CjsJs.a;},function(_index00bCjsJs){}],execute:function execute(){s=new n("nileFindReplace"),c={query:"",caseSensitive:!1,matches:[],activeIndex:0};}};});
2
2
  //# sourceMappingURL=find-replace.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-replace.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/find-replace.ts"],"sourcesContent":["import { Plugin, PluginKey, EditorState, Transaction } from 'prosemirror-state';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\nimport { Node as PMNode } from 'prosemirror-model';\n\nexport const findReplaceKey = new PluginKey<FindState>('nileFindReplace');\n\nexport interface FindMatch {\n from: number;\n to: number;\n}\n\nexport interface FindState {\n query: string;\n caseSensitive: boolean;\n matches: FindMatch[];\n activeIndex: number;\n}\n\nconst EMPTY: FindState = { query: '', caseSensitive: false, matches: [], activeIndex: 0 };\n\ntype FindMeta =\n | { type: 'search'; query: string; caseSensitive?: boolean }\n | { type: 'next' }\n | { type: 'prev' }\n | { type: 'clear' };\n\nfunction findMatches(doc: PMNode, query: string, caseSensitive: boolean): FindMatch[] {\n if (!query) return [];\n const matches: FindMatch[] = [];\n const needle = caseSensitive ? query : query.toLowerCase();\n doc.descendants((node, pos) => {\n if (!node.isTextblock) return true;\n const text = node.textBetween(0, node.content.size, '\\0', '\\0');\n const haystack = caseSensitive ? text : text.toLowerCase();\n let index = 0;\n // eslint-disable-next-line no-cond-assign\n while ((index = haystack.indexOf(needle, index)) !== -1) {\n matches.push({ from: pos + 1 + index, to: pos + 1 + index + needle.length });\n index += needle.length;\n }\n return false;\n });\n return matches;\n}\n\nfunction applyMeta(state: FindState, meta: FindMeta, doc: PMNode): FindState {\n switch (meta.type) {\n case 'search': {\n const caseSensitive = meta.caseSensitive ?? state.caseSensitive;\n return {\n query: meta.query,\n caseSensitive,\n matches: findMatches(doc, meta.query, caseSensitive),\n activeIndex: 0,\n };\n }\n case 'next':\n return state.matches.length\n ? { ...state, activeIndex: (state.activeIndex + 1) % state.matches.length }\n : state;\n case 'prev':\n return state.matches.length\n ? {\n ...state,\n activeIndex:\n (state.activeIndex - 1 + state.matches.length) % state.matches.length,\n }\n : state;\n case 'clear':\n default:\n return EMPTY;\n }\n}\n\n/**\n * Find & replace: match highlighting with an active match, controlled via\n * transaction meta. Replacement itself is a normal text transaction issued\n * by the host (see findReplaceCommands).\n */\nexport function findReplacePlugin(): Plugin<FindState> {\n return new Plugin<FindState>({\n key: findReplaceKey,\n\n state: {\n init: () => EMPTY,\n apply(tr, prev) {\n const meta = tr.getMeta(findReplaceKey) as FindMeta | undefined;\n if (meta) return applyMeta(prev, meta, tr.doc);\n if (tr.docChanged && prev.query) {\n const matches = findMatches(tr.doc, prev.query, prev.caseSensitive);\n return {\n ...prev,\n matches,\n activeIndex: Math.min(prev.activeIndex, Math.max(0, matches.length - 1)),\n };\n }\n return prev;\n },\n },\n\n props: {\n decorations(state) {\n const find = findReplaceKey.getState(state);\n if (!find || !find.matches.length) return null;\n return DecorationSet.create(\n state.doc,\n find.matches.map((match, index) =>\n Decoration.inline(match.from, match.to, {\n class:\n index === find.activeIndex\n ? 'nile-wysiwyg__find-match nile-wysiwyg__find-active'\n : 'nile-wysiwyg__find-match',\n })\n )\n );\n },\n },\n });\n}\n\nexport function getFindState(state: EditorState): FindState {\n return findReplaceKey.getState(state) ?? EMPTY;\n}\n\nexport function searchTr(state: EditorState, query: string, caseSensitive?: boolean): Transaction {\n return state.tr.setMeta(findReplaceKey, { type: 'search', query, caseSensitive });\n}\n\nexport function findStepTr(state: EditorState, direction: 'next' | 'prev'): Transaction {\n return state.tr.setMeta(findReplaceKey, { type: direction });\n}\n\nexport function clearFindTr(state: EditorState): Transaction {\n return state.tr.setMeta(findReplaceKey, { type: 'clear' });\n}\n\n/** Replaces the active match. Returns the transaction, or null when idle. */\nexport function replaceActiveTr(state: EditorState, replacement: string): Transaction | null {\n const find = getFindState(state);\n const match = find.matches[find.activeIndex];\n if (!match) return null;\n return state.tr.insertText(replacement, match.from, match.to);\n}\n\n/** Replaces every match in one transaction. Returns null when idle. */\nexport function replaceAllTr(state: EditorState, replacement: string): Transaction | null {\n const find = getFindState(state);\n if (!find.matches.length) return null;\n const tr = state.tr;\n // Back to front so earlier positions stay valid.\n for (const match of [...find.matches].reverse()) {\n tr.insertText(replacement, match.from, match.to);\n }\n return tr;\n}\n"],"names":["findMatches","doc","query","caseSensitive","matches","needle","toLowerCase","descendants","node","pos","isTextblock","text","textBetween","content","size","haystack","index","indexOf","push","from","to","length","findReplacePlugin","Plugin","key","findReplaceKey","state","init","EMPTY","apply","tr","prev","meta","getMeta","type","_e$caseSensitive","activeIndex","_objectSpread","applyMeta","docChanged","Math","min","max","props","decorations","find","getState","DecorationSet","create","map","match","Decoration","inline","class","getFindState","_s$getState","searchTr","setMeta","findStepTr","direction","clearFindTr","replaceActiveTr","replacement","insertText","replaceAllTr","_iterator","_createForOfIteratorHelper","_toConsumableArray","reverse","s","_step","n","done","err","e","f","_export","a","PluginKey"],"mappings":"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"}
1
+ {"version":3,"file":"find-replace.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/find-replace.ts"],"sourcesContent":["import { Plugin, PluginKey, EditorState, Transaction } from 'prosemirror-state';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\nimport { Node as PMNode } from 'prosemirror-model';\n\nexport const findReplaceKey = new PluginKey<FindState>('nileFindReplace');\n\nexport interface FindMatch {\n from: number;\n to: number;\n}\n\nexport interface FindState {\n query: string;\n caseSensitive: boolean;\n matches: FindMatch[];\n activeIndex: number;\n}\n\nconst EMPTY: FindState = { query: '', caseSensitive: false, matches: [], activeIndex: 0 };\n\ntype FindMeta =\n | { type: 'search'; query: string; caseSensitive?: boolean }\n | { type: 'next' }\n | { type: 'prev' }\n | { type: 'clear' };\n\nfunction findMatches(doc: PMNode, query: string, caseSensitive: boolean): FindMatch[] {\n if (!query) return [];\n const matches: FindMatch[] = [];\n const needle = caseSensitive ? query : query.toLowerCase();\n doc.descendants((node, pos) => {\n if (!node.isTextblock) return true;\n const text = node.textBetween(0, node.content.size, '\\0', '\\0');\n const haystack = caseSensitive ? text : text.toLowerCase();\n let index = 0;\n // eslint-disable-next-line no-cond-assign\n while ((index = haystack.indexOf(needle, index)) !== -1) {\n matches.push({ from: pos + 1 + index, to: pos + 1 + index + needle.length });\n index += needle.length;\n }\n return false;\n });\n return matches;\n}\n\nfunction applyMeta(state: FindState, meta: FindMeta, doc: PMNode): FindState {\n switch (meta.type) {\n case 'search': {\n const caseSensitive = meta.caseSensitive ?? state.caseSensitive;\n return {\n query: meta.query,\n caseSensitive,\n matches: findMatches(doc, meta.query, caseSensitive),\n activeIndex: 0,\n };\n }\n case 'next':\n return state.matches.length\n ? { ...state, activeIndex: (state.activeIndex + 1) % state.matches.length }\n : state;\n case 'prev':\n return state.matches.length\n ? {\n ...state,\n activeIndex:\n (state.activeIndex - 1 + state.matches.length) % state.matches.length,\n }\n : state;\n case 'clear':\n default:\n return EMPTY;\n }\n}\n\n/**\n * Find & replace: match highlighting with an active match, controlled via\n * transaction meta. Replacement itself is a normal text transaction issued\n * by the host (see findReplaceCommands).\n */\nexport function findReplacePlugin(): Plugin<FindState> {\n return new Plugin<FindState>({\n key: findReplaceKey,\n\n state: {\n init: () => EMPTY,\n apply(tr, prev) {\n const meta = tr.getMeta(findReplaceKey) as FindMeta | undefined;\n if (meta) return applyMeta(prev, meta, tr.doc);\n if (tr.docChanged && prev.query) {\n const matches = findMatches(tr.doc, prev.query, prev.caseSensitive);\n return {\n ...prev,\n matches,\n activeIndex: Math.min(prev.activeIndex, Math.max(0, matches.length - 1)),\n };\n }\n return prev;\n },\n },\n\n props: {\n decorations(state) {\n const find = findReplaceKey.getState(state);\n if (!find || !find.matches.length) return null;\n return DecorationSet.create(\n state.doc,\n find.matches.map((match, index) =>\n Decoration.inline(match.from, match.to, {\n class:\n index === find.activeIndex\n ? 'nile-wysiwyg__find-match nile-wysiwyg__find-active'\n : 'nile-wysiwyg__find-match',\n })\n )\n );\n },\n },\n });\n}\n\nexport function getFindState(state: EditorState): FindState {\n return findReplaceKey.getState(state) ?? EMPTY;\n}\n\nexport function searchTr(state: EditorState, query: string, caseSensitive?: boolean): Transaction {\n return state.tr.setMeta(findReplaceKey, { type: 'search', query, caseSensitive });\n}\n\nexport function findStepTr(state: EditorState, direction: 'next' | 'prev'): Transaction {\n return state.tr.setMeta(findReplaceKey, { type: direction });\n}\n\nexport function clearFindTr(state: EditorState): Transaction {\n return state.tr.setMeta(findReplaceKey, { type: 'clear' });\n}\n\n/** Replaces the active match. Returns the transaction, or null when idle. */\nexport function replaceActiveTr(state: EditorState, replacement: string): Transaction | null {\n const find = getFindState(state);\n const match = find.matches[find.activeIndex];\n if (!match) return null;\n return state.tr.insertText(replacement, match.from, match.to);\n}\n\n/** Replaces every match in one transaction. Returns null when idle. */\nexport function replaceAllTr(state: EditorState, replacement: string): Transaction | null {\n const find = getFindState(state);\n if (!find.matches.length) return null;\n const tr = state.tr;\n // Back to front so earlier positions stay valid.\n for (const match of [...find.matches].reverse()) {\n tr.insertText(replacement, match.from, match.to);\n }\n return tr;\n}\n"],"names":["findMatches","doc","query","caseSensitive","matches","needle","toLowerCase","descendants","node","pos","isTextblock","text","textBetween","content","size","haystack","index","indexOf","push","from","to","length","findReplacePlugin","a","Plugin","key","findReplaceKey","state","init","EMPTY","apply","tr","prev","meta","getMeta","type","_e$caseSensitive","activeIndex","_objectSpread","applyMeta","docChanged","Math","min","max","props","decorations","find","getState","DecorationSet","create","map","match","Decoration","inline","class","getFindState","_s$getState","searchTr","setMeta","t","findStepTr","direction","clearFindTr","replaceActiveTr","replacement","insertText","replaceAllTr","_iterator","_createForOfIteratorHelper","_toConsumableArray","reverse","s","_step","n","done","err","e","f","_export","PluginKey"],"mappings":"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"}
@@ -1 +1 @@
1
- import{P as e,b as n}from"../../../index-6f3fa4ab.esm.js";import{D as t,a as r}from"../../../index-ba47645d.esm.js";const s=new e("nileFindReplace"),c={query:"",caseSensitive:!1,matches:[],activeIndex:0};function i(e,n,t){if(!n)return[];const r=[],s=t?n:n.toLowerCase();return e.descendants(((e,n)=>{if(!e.isTextblock)return!0;const c=e.textBetween(0,e.content.size,"\0","\0"),i=t?c:c.toLowerCase();let a=0;for(;-1!==(a=i.indexOf(s,a));)r.push({from:n+1+a,to:n+1+a+s.length}),a+=s.length;return!1})),r}function a(){return new n({key:s,state:{init:()=>c,apply(e,n){const t=e.getMeta(s);if(t)return function(e,n,t){switch(n.type){case"search":{const r=n.caseSensitive??e.caseSensitive;return{query:n.query,caseSensitive:r,matches:i(t,n.query,r),activeIndex:0}}case"next":return e.matches.length?{...e,activeIndex:(e.activeIndex+1)%e.matches.length}:e;case"prev":return e.matches.length?{...e,activeIndex:(e.activeIndex-1+e.matches.length)%e.matches.length}:e;default:return c}}(n,t,e.doc);if(e.docChanged&&n.query){const t=i(e.doc,n.query,n.caseSensitive);return{...n,matches:t,activeIndex:Math.min(n.activeIndex,Math.max(0,t.length-1))}}return n}},props:{decorations(e){const n=s.getState(e);return n&&n.matches.length?t.create(e.doc,n.matches.map(((e,t)=>r.inline(e.from,e.to,{class:t===n.activeIndex?"nile-wysiwyg__find-match nile-wysiwyg__find-active":"nile-wysiwyg__find-match"})))):null}}})}function u(e){return s.getState(e)??c}function o(e,n,t){return e.tr.setMeta(s,{type:"search",query:n,caseSensitive:t})}function f(e,n){return e.tr.setMeta(s,{type:n})}function l(e){return e.tr.setMeta(s,{type:"clear"})}function y(e,n){const t=u(e),r=t.matches[t.activeIndex];return r?e.tr.insertText(n,r.from,r.to):null}function d(e,n){const t=u(e);if(!t.matches.length)return null;const r=e.tr;for(const e of[...t.matches].reverse())r.insertText(n,e.from,e.to);return r}export{f as a,d as b,l as c,a as f,u as g,y as r,o as s};
1
+ import{P as e,a as n}from"../../../index-7ca72b78.esm.js";import{D as t,a as r}from"../../../index-4df50481.esm.js";import"../../../index-5d34cff1.esm.js";const s=new e("nileFindReplace"),i={query:"",caseSensitive:!1,matches:[],activeIndex:0};function c(e,n,t){if(!n)return[];const r=[],s=t?n:n.toLowerCase();return e.descendants(((e,n)=>{if(!e.isTextblock)return!0;const i=e.textBetween(0,e.content.size,"\0","\0"),c=t?i:i.toLowerCase();let a=0;for(;-1!==(a=c.indexOf(s,a));)r.push({from:n+1+a,to:n+1+a+s.length}),a+=s.length;return!1})),r}function a(){return new n({key:s,state:{init:()=>i,apply(e,n){const t=e.getMeta(s);if(t)return function(e,n,t){switch(n.type){case"search":{const r=n.caseSensitive??e.caseSensitive;return{query:n.query,caseSensitive:r,matches:c(t,n.query,r),activeIndex:0}}case"next":return e.matches.length?{...e,activeIndex:(e.activeIndex+1)%e.matches.length}:e;case"prev":return e.matches.length?{...e,activeIndex:(e.activeIndex-1+e.matches.length)%e.matches.length}:e;default:return i}}(n,t,e.doc);if(e.docChanged&&n.query){const t=c(e.doc,n.query,n.caseSensitive);return{...n,matches:t,activeIndex:Math.min(n.activeIndex,Math.max(0,t.length-1))}}return n}},props:{decorations(e){const n=s.getState(e);return n&&n.matches.length?t.create(e.doc,n.matches.map(((e,t)=>r.inline(e.from,e.to,{class:t===n.activeIndex?"nile-wysiwyg__find-match nile-wysiwyg__find-active":"nile-wysiwyg__find-match"})))):null}}})}function u(e){return s.getState(e)??i}function o(e,n,t){return e.tr.setMeta(s,{type:"search",query:n,caseSensitive:t})}function f(e,n){return e.tr.setMeta(s,{type:n})}function l(e){return e.tr.setMeta(s,{type:"clear"})}function d(e,n){const t=u(e),r=t.matches[t.activeIndex];return r?e.tr.insertText(n,r.from,r.to):null}function m(e,n){const t=u(e);if(!t.matches.length)return null;const r=e.tr;for(const e of[...t.matches].reverse())r.insertText(n,e.from,e.to);return r}export{f as a,m as b,l as c,a as f,u as g,d as r,o as s};
@@ -1,2 +1,2 @@
1
- System.register(["../../../index-89c520e9.cjs.js"],function(_export,_context){"use strict";var n,t,r;function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var n=0,F=function F(){};return{s:F,n:function(_n2){function n(){return _n2.apply(this,arguments);}n.toString=function(){return _n2.toString();};return n;}(function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]};}),e:function e(r){throw r;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var o,a=!0,u=!1;return{s:function s(){t=t.call(r);},n:function n(){var r=t.next();return a=r.done,r;},e:function e(r){u=!0,o=r;},f:function f(){try{a||null==t["return"]||t["return"]();}finally{if(u)throw o;}}};}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}function s(){return new t({key:r,state:{init:function init(){return{marks:null};},apply:function apply(n,t){var s=n.getMeta(r);return"arm"===(s===null||s===void 0?void 0:s.type)?{marks:s.marks}:"disarm"===(s===null||s===void 0?void 0:s.type)?{marks:null}:t;}},props:{attributes:function attributes(n){var _r$getState;return(_r$getState=r.getState(n))!==null&&_r$getState!==void 0&&_r$getState.marks?{"class":"nile-wysiwyg--painting"}:{};}}});}function a(n){var _r$getState2;return!!((_r$getState2=r.getState(n))!==null&&_r$getState2!==void 0&&_r$getState2.marks);}function e(n){var t=function(n,_n$storedMarks,_t$marksAcross){var _n$selection=n.selection,t=_n$selection.$from,r=_n$selection.empty;return r?(_n$storedMarks=n.storedMarks)!==null&&_n$storedMarks!==void 0?_n$storedMarks:t.marks():(_t$marksAcross=t.marksAcross(n.selection.$to))!==null&&_t$marksAcross!==void 0?_t$marksAcross:t.marks();}(n);return n.tr.setMeta(r,{type:"arm",marks:t});}function o(n){return n.tr.setMeta(r,{type:"disarm"});}function i(n){var t=r.getState(n);if(!(t!==null&&t!==void 0&&t.marks))return null;var _n$selection2=n.selection,s=_n$selection2.from,a=_n$selection2.to,e=_n$selection2.empty;if(e)return null;var o=n.tr;o.removeMark(s,a,null);var _iterator=_createForOfIteratorHelper(t.marks),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var _n=_step.value;o.addMark(s,a,_n);}}catch(err){_iterator.e(err);}finally{_iterator.f();}return o.setMeta(r,{type:"disarm"}),o;}_export({a:i,b:e,d:o,f:s,i:a});return{setters:[function(_index00bCjsJs){n=_index00bCjsJs.P;t=_index00bCjsJs.b;}],execute:function execute(){r=new n("nileFormatPainter");}};});
1
+ System.register(["../../../index-bbe23ad8.cjs.js","../../../index-ccc6a799.cjs.js"],function(_export,_context){"use strict";var n,t,r;function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var n=0,F=function F(){};return{s:F,n:function(_n2){function n(){return _n2.apply(this,arguments);}n.toString=function(){return _n2.toString();};return n;}(function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]};}),e:function e(r){throw r;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var o,a=!0,u=!1;return{s:function s(){t=t.call(r);},n:function n(){var r=t.next();return a=r.done,r;},e:function e(r){u=!0,o=r;},f:function f(){try{a||null==t["return"]||t["return"]();}finally{if(u)throw o;}}};}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}function s(){return new t({key:r,state:{init:function init(){return{marks:null};},apply:function apply(n,t){var s=n.getMeta(r);return"arm"===(s===null||s===void 0?void 0:s.type)?{marks:s.marks}:"disarm"===(s===null||s===void 0?void 0:s.type)?{marks:null}:t;}},props:{attributes:function attributes(n){var _r$getState;return(_r$getState=r.getState(n))!==null&&_r$getState!==void 0&&_r$getState.marks?{"class":"nile-wysiwyg--painting"}:{};}}});}function a(n){var _r$getState2;return!!((_r$getState2=r.getState(n))!==null&&_r$getState2!==void 0&&_r$getState2.marks);}function e(n){var t=function(n,_n$storedMarks,_t$marksAcross){var _n$selection=n.selection,t=_n$selection.$from,r=_n$selection.empty;return r?(_n$storedMarks=n.storedMarks)!==null&&_n$storedMarks!==void 0?_n$storedMarks:t.marks():(_t$marksAcross=t.marksAcross(n.selection.$to))!==null&&_t$marksAcross!==void 0?_t$marksAcross:t.marks();}(n);return n.tr.setMeta(r,{type:"arm",marks:t});}function i(n){return n.tr.setMeta(r,{type:"disarm"});}function o(n){var t=r.getState(n);if(!(t!==null&&t!==void 0&&t.marks))return null;var _n$selection2=n.selection,s=_n$selection2.from,a=_n$selection2.to,e=_n$selection2.empty;if(e)return null;var i=n.tr;i.removeMark(s,a,null);var _iterator=_createForOfIteratorHelper(t.marks),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var _n=_step.value;i.addMark(s,a,_n);}}catch(err){_iterator.e(err);}finally{_iterator.f();}return i.setMeta(r,{type:"disarm"}),i;}_export({a:o,b:e,d:i,f:s,i:a});return{setters:[function(_index00aCjsJs){n=_index00aCjsJs.P;t=_index00aCjsJs.a;},function(_index00bCjsJs){}],execute:function execute(){r=new n("nileFormatPainter");}};});
2
2
  //# sourceMappingURL=format-painter.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-painter.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/format-painter.ts"],"sourcesContent":["/**\n * Format painter: copy the inline formatting (marks) at the current selection,\n * then apply it to the next selection the user makes — like the paint-roller\n * tool in word processors. The plugin only holds the copied marks and an\n * \"armed\" flag; the host drives arm/apply through the exported helpers.\n */\nimport { EditorState, Plugin, PluginKey, Transaction } from 'prosemirror-state';\nimport { Mark } from 'prosemirror-model';\n\ninterface FormatPainterState {\n marks: readonly Mark[] | null;\n}\n\nexport const formatPainterKey = new PluginKey<FormatPainterState>('nileFormatPainter');\n\ntype PainterMeta = { type: 'arm'; marks: readonly Mark[] } | { type: 'disarm' };\n\nexport function formatPainterPlugin(): Plugin<FormatPainterState> {\n return new Plugin<FormatPainterState>({\n key: formatPainterKey,\n state: {\n init: () => ({ marks: null }),\n apply(tr, value) {\n const meta = tr.getMeta(formatPainterKey) as PainterMeta | undefined;\n if (meta?.type === 'arm') return { marks: meta.marks };\n if (meta?.type === 'disarm') return { marks: null };\n return value;\n },\n },\n props: {\n attributes: state =>\n (formatPainterKey.getState(state)?.marks\n ? { class: 'nile-wysiwyg--painting' }\n : {}) as Record<string, string>,\n },\n });\n}\n\n/** True while the painter is armed (marks captured, waiting to apply). */\nexport function isFormatPainterArmed(state: EditorState): boolean {\n return !!formatPainterKey.getState(state)?.marks;\n}\n\n/** The inline marks to copy from the current selection/caret. */\nfunction capturedMarks(state: EditorState): readonly Mark[] {\n const { $from, empty } = state.selection;\n if (empty) return state.storedMarks ?? $from.marks();\n // Marks that hold across the selection start — the visible formatting.\n return $from.marksAcross(state.selection.$to) ?? $from.marks();\n}\n\n/**\n * Arms the painter, capturing the current formatting. Returns a transaction to\n * dispatch, or null when there is nothing to copy.\n */\nexport function armFormatPainter(state: EditorState): Transaction | null {\n const marks = capturedMarks(state);\n return state.tr.setMeta(formatPainterKey, { type: 'arm', marks } as PainterMeta);\n}\n\n/** Disarms the painter without applying. */\nexport function disarmFormatPainter(state: EditorState): Transaction {\n return state.tr.setMeta(formatPainterKey, { type: 'disarm' } as PainterMeta);\n}\n\n/**\n * Applies the copied formatting to the current (non-empty) selection and\n * disarms. Returns null when not armed or the selection is empty.\n */\nexport function applyFormatPainter(state: EditorState): Transaction | null {\n const painter = formatPainterKey.getState(state);\n if (!painter?.marks) return null;\n const { from, to, empty } = state.selection;\n if (empty) return null;\n const tr = state.tr;\n tr.removeMark(from, to, null);\n for (const mark of painter.marks) tr.addMark(from, to, mark);\n tr.setMeta(formatPainterKey, { type: 'disarm' } as PainterMeta);\n return tr;\n}\n"],"names":["formatPainterPlugin","Plugin","key","formatPainterKey","state","init","marks","apply","tr","value","meta","getMeta","type","props","attributes","getState","class","isFormatPainterArmed","armFormatPainter","_n$selection","selection","$from","empty","storedMarks","marksAcross","$to","capturedMarks","setMeta","disarmFormatPainter","applyFormatPainter","painter","_n$selection2","from","to","removeMark","_iterator","_createForOfIteratorHelper","s","_step","n","done","mark","addMark","err","e","f","PluginKey"],"mappings":"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"}
1
+ {"version":3,"file":"format-painter.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/format-painter.ts"],"sourcesContent":["/**\n * Format painter: copy the inline formatting (marks) at the current selection,\n * then apply it to the next selection the user makes — like the paint-roller\n * tool in word processors. The plugin only holds the copied marks and an\n * \"armed\" flag; the host drives arm/apply through the exported helpers.\n */\nimport { EditorState, Plugin, PluginKey, Transaction } from 'prosemirror-state';\nimport { Mark } from 'prosemirror-model';\n\ninterface FormatPainterState {\n marks: readonly Mark[] | null;\n}\n\nexport const formatPainterKey = new PluginKey<FormatPainterState>('nileFormatPainter');\n\ntype PainterMeta = { type: 'arm'; marks: readonly Mark[] } | { type: 'disarm' };\n\nexport function formatPainterPlugin(): Plugin<FormatPainterState> {\n return new Plugin<FormatPainterState>({\n key: formatPainterKey,\n state: {\n init: () => ({ marks: null }),\n apply(tr, value) {\n const meta = tr.getMeta(formatPainterKey) as PainterMeta | undefined;\n if (meta?.type === 'arm') return { marks: meta.marks };\n if (meta?.type === 'disarm') return { marks: null };\n return value;\n },\n },\n props: {\n attributes: state =>\n (formatPainterKey.getState(state)?.marks\n ? { class: 'nile-wysiwyg--painting' }\n : {}) as Record<string, string>,\n },\n });\n}\n\n/** True while the painter is armed (marks captured, waiting to apply). */\nexport function isFormatPainterArmed(state: EditorState): boolean {\n return !!formatPainterKey.getState(state)?.marks;\n}\n\n/** The inline marks to copy from the current selection/caret. */\nfunction capturedMarks(state: EditorState): readonly Mark[] {\n const { $from, empty } = state.selection;\n if (empty) return state.storedMarks ?? $from.marks();\n // Marks that hold across the selection start — the visible formatting.\n return $from.marksAcross(state.selection.$to) ?? $from.marks();\n}\n\n/**\n * Arms the painter, capturing the current formatting. Returns a transaction to\n * dispatch, or null when there is nothing to copy.\n */\nexport function armFormatPainter(state: EditorState): Transaction | null {\n const marks = capturedMarks(state);\n return state.tr.setMeta(formatPainterKey, { type: 'arm', marks } as PainterMeta);\n}\n\n/** Disarms the painter without applying. */\nexport function disarmFormatPainter(state: EditorState): Transaction {\n return state.tr.setMeta(formatPainterKey, { type: 'disarm' } as PainterMeta);\n}\n\n/**\n * Applies the copied formatting to the current (non-empty) selection and\n * disarms. Returns null when not armed or the selection is empty.\n */\nexport function applyFormatPainter(state: EditorState): Transaction | null {\n const painter = formatPainterKey.getState(state);\n if (!painter?.marks) return null;\n const { from, to, empty } = state.selection;\n if (empty) return null;\n const tr = state.tr;\n tr.removeMark(from, to, null);\n for (const mark of painter.marks) tr.addMark(from, to, mark);\n tr.setMeta(formatPainterKey, { type: 'disarm' } as PainterMeta);\n return tr;\n}\n"],"names":["formatPainterPlugin","Plugin","key","formatPainterKey","state","init","marks","apply","tr","value","meta","getMeta","type","props","attributes","getState","class","isFormatPainterArmed","armFormatPainter","_n$selection","selection","$from","empty","storedMarks","marksAcross","$to","capturedMarks","setMeta","disarmFormatPainter","applyFormatPainter","painter","_n$selection2","from","to","removeMark","_iterator","_createForOfIteratorHelper","s","_step","n","done","mark","addMark","err","e","f","PluginKey"],"mappings":"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"}
@@ -1 +1 @@
1
- import{P as n,b as t}from"../../../index-6f3fa4ab.esm.js";const r=new n("nileFormatPainter");function s(){return new t({key:r,state:{init:()=>({marks:null}),apply(n,t){const s=n.getMeta(r);return"arm"===s?.type?{marks:s.marks}:"disarm"===s?.type?{marks:null}:t}},props:{attributes:n=>r.getState(n)?.marks?{class:"nile-wysiwyg--painting"}:{}}})}function e(n){return!!r.getState(n)?.marks}function a(n){const t=function(n){const{$from:t,empty:r}=n.selection;return r?n.storedMarks??t.marks():t.marksAcross(n.selection.$to)??t.marks()}(n);return n.tr.setMeta(r,{type:"arm",marks:t})}function o(n){return n.tr.setMeta(r,{type:"disarm"})}function i(n){const t=r.getState(n);if(!t?.marks)return null;const{from:s,to:e,empty:a}=n.selection;if(a)return null;const o=n.tr;o.removeMark(s,e,null);for(const n of t.marks)o.addMark(s,e,n);return o.setMeta(r,{type:"disarm"}),o}export{i as a,a as b,o as d,s as f,e as i};
1
+ import{P as n,a as t}from"../../../index-7ca72b78.esm.js";import"../../../index-5d34cff1.esm.js";const r=new n("nileFormatPainter");function s(){return new t({key:r,state:{init:()=>({marks:null}),apply(n,t){const s=n.getMeta(r);return"arm"===s?.type?{marks:s.marks}:"disarm"===s?.type?{marks:null}:t}},props:{attributes:n=>r.getState(n)?.marks?{class:"nile-wysiwyg--painting"}:{}}})}function e(n){return!!r.getState(n)?.marks}function a(n){const t=function(n){const{$from:t,empty:r}=n.selection;return r?n.storedMarks??t.marks():t.marksAcross(n.selection.$to)??t.marks()}(n);return n.tr.setMeta(r,{type:"arm",marks:t})}function i(n){return n.tr.setMeta(r,{type:"disarm"})}function o(n){const t=r.getState(n);if(!t?.marks)return null;const{from:s,to:e,empty:a}=n.selection;if(a)return null;const i=n.tr;i.removeMark(s,e,null);for(const n of t.marks)i.addMark(s,e,n);return i.setMeta(r,{type:"disarm"}),i}export{o as a,a as b,i as d,s as f,e as i};
@@ -1,2 +1,2 @@
1
- System.register(["../../../index-89c520e9.cjs.js"],function(_export,_context){"use strict";var i,e,n;function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e;}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function");}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o);}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function t(i,t,s){var e=arguments.length>3&&arguments[3]!==undefined?arguments[3]:40;var _loop=function _loop(){var n=_arr[_i];var h=document.createElement("span");h.className="nile-wysiwyg__resize-handle nile-wysiwyg__resize-handle--".concat(n),h.dataset.resizeHandle=n,h.contentEditable="false",h.addEventListener("mousedown",function(h){var _i$closest$getBoundin,_i$closest;h.preventDefault(),h.stopPropagation();var o=h.clientX,r=t.getBoundingClientRect().width,w=n.includes("w")?-1:1,a=(_i$closest$getBoundin=(_i$closest=i.closest(".ProseMirror"))===null||_i$closest===void 0?void 0:_i$closest.getBoundingClientRect().width)!==null&&_i$closest$getBoundin!==void 0?_i$closest$getBoundin:2e3;var l=r;var c=function c(i){l=Math.max(e,Math.min(a,r+w*(i.clientX-o))),t.style.width="".concat(Math.round(l),"px");},_d=function d(){window.removeEventListener("mousemove",c),window.removeEventListener("mouseup",_d),i.classList.remove("nile-wysiwyg__resizing"),s(Math.round(l));};i.classList.add("nile-wysiwyg__resizing"),window.addEventListener("mousemove",c),window.addEventListener("mouseup",_d);}),i.appendChild(h);};for(var _i=0,_arr=["nw","ne","sw","se"];_i<_arr.length;_i++){_loop();}}function s(i){return i.target instanceof HTMLElement&&!!i.target.dataset.resizeHandle;}_export({a:t,i:s});return{setters:[function(_index00bCjsJs){i=_index00bCjsJs.c;}],execute:function execute(){_export("I",e=/*#__PURE__*/function(){function e(i,s,_e){_classCallCheck(this,e);this.node=i,this.dom=document.createElement("span"),this.dom.className="nile-wysiwyg__image-resizer",this.img=document.createElement("img"),this.applyAttrs(i),this.dom.appendChild(this.img),t(this.dom,this.img,function(i){var t=_e();if(void 0===t||!s.editable)return;var n=s.state.doc.nodeAt(t);n&&s.dispatch(s.state.tr.setNodeMarkup(t,void 0,_objectSpread(_objectSpread({},n.attrs),{},{width:i})));});}return _createClass(e,[{key:"applyAttrs",value:function applyAttrs(i){var _i$attrs=i.attrs,t=_i$attrs.src,s=_i$attrs.alt,_e2=_i$attrs.title,n=_i$attrs.width;this.img.src=t,s?this.img.alt=s:this.img.removeAttribute("alt"),_e2?this.img.title=_e2:this.img.removeAttribute("title"),this.img.style.width=n?"".concat(n,"px"):"";}},{key:"update",value:function update(i){return i.type===this.node.type&&(this.node=i,this.applyAttrs(i),!0);}},{key:"selectNode",value:function selectNode(){this.dom.classList.add("nile-wysiwyg__image-resizer--selected");}},{key:"deselectNode",value:function deselectNode(){this.dom.classList.remove("nile-wysiwyg__image-resizer--selected");}},{key:"stopEvent",value:function stopEvent(i){return s(i);}},{key:"ignoreMutation",value:function ignoreMutation(){return!0;}}]);}());_export("F",n=/*#__PURE__*/function(){function n(s,e,_n){_classCallCheck(this,n);this.node=s,this.dom=document.createElement("figure"),this.dom.className="nile-wysiwyg__figure",this.wrapper=document.createElement("span"),this.wrapper.className="nile-wysiwyg__image-resizer",this.wrapper.contentEditable="false",this.img=document.createElement("img"),this.wrapper.appendChild(this.img),this.contentDOM=document.createElement("figcaption"),this.contentDOM.className="nile-wysiwyg__figcaption",this.dom.append(this.wrapper,this.contentDOM),this.applyAttrs(s),this.img.addEventListener("mousedown",function(t){t.preventDefault();var s=_n();void 0!==s&&(e.dispatch(e.state.tr.setSelection(i.create(e.state.doc,s))),e.focus());}),t(this.wrapper,this.img,function(i){var t=_n();if(void 0===t||!e.editable)return;var s=e.state.doc.nodeAt(t);s&&e.dispatch(e.state.tr.setNodeMarkup(t,void 0,_objectSpread(_objectSpread({},s.attrs),{},{width:i})));});}return _createClass(n,[{key:"applyAttrs",value:function applyAttrs(i){var _i$attrs2=i.attrs,t=_i$attrs2.src,s=_i$attrs2.alt,e=_i$attrs2.title,_n2=_i$attrs2.width,h=_i$attrs2.align;this.img.src=t,s?this.img.alt=s:this.img.removeAttribute("alt"),e?this.img.title=e:this.img.removeAttribute("title"),this.dom.style.width=_n2?"".concat(_n2,"px"):"",h?this.dom.setAttribute("data-align",h):this.dom.removeAttribute("data-align"),this.dom.classList.toggle("nile-wysiwyg__figure--empty-caption",0===i.content.size);}},{key:"update",value:function update(i){return i.type===this.node.type&&(this.node=i,this.applyAttrs(i),!0);}},{key:"selectNode",value:function selectNode(){this.dom.classList.add("nile-wysiwyg__figure--selected"),this.wrapper.classList.add("nile-wysiwyg__image-resizer--selected");}},{key:"deselectNode",value:function deselectNode(){this.dom.classList.remove("nile-wysiwyg__figure--selected"),this.wrapper.classList.remove("nile-wysiwyg__image-resizer--selected");}},{key:"stopEvent",value:function stopEvent(i){return s(i);}},{key:"ignoreMutation",value:function ignoreMutation(i){return!this.contentDOM.contains(i.target);}}]);}());}};});
1
+ System.register(["../../../index-bbe23ad8.cjs.js","../schema.cjs.js","../../../index-ccc6a799.cjs.js","../../../index-7ae95edd.cjs.js","../../../index-178e1e57.cjs.js","./embeds.cjs.js","../email-css.cjs.js","../sanitize.cjs.js"],function(_export,_context){"use strict";var i,s,n,o;function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e;}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function");}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o);}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function t(i,s,t){var e=arguments.length>3&&arguments[3]!==undefined?arguments[3]:40;var _loop=function _loop(){var n=_arr[_i];var o=document.createElement("span");o.className="nile-wysiwyg__resize-handle nile-wysiwyg__resize-handle--".concat(n),o.dataset.resizeHandle=n,o.contentEditable="false",o.addEventListener("mousedown",function(o){var _i$closest$getBoundin,_i$closest;o.preventDefault(),o.stopPropagation();var h=o.clientX,r=s.getBoundingClientRect().width,c=n.includes("w")?-1:1,a=(_i$closest$getBoundin=(_i$closest=i.closest(".ProseMirror"))===null||_i$closest===void 0?void 0:_i$closest.getBoundingClientRect().width)!==null&&_i$closest$getBoundin!==void 0?_i$closest$getBoundin:2e3;var l=r;var w=function w(i){l=Math.max(e,Math.min(a,r+c*(i.clientX-h))),s.style.width="".concat(Math.round(l),"px");},_d=function d(){window.removeEventListener("mousemove",w),window.removeEventListener("mouseup",_d),i.classList.remove("nile-wysiwyg__resizing"),t(Math.round(l));};i.classList.add("nile-wysiwyg__resizing"),window.addEventListener("mousemove",w),window.addEventListener("mouseup",_d);}),i.appendChild(o);};for(var _i=0,_arr=["nw","ne","sw","se"];_i<_arr.length;_i++){_loop();}}function e(i){return i.target instanceof HTMLElement&&!!i.target.dataset.resizeHandle;}_export({a:t,i:e});return{setters:[function(_index00aCjsJs){i=_index00aCjsJs.N;},function(_schemaCjsJs){s=_schemaCjsJs.i;},function(_index00bCjsJs){},function(_index009CjsJs){},function(_index007CjsJs){},function(_embedsCjsJs){},function(_emailCssCjsJs){},function(_sanitizeCjsJs){}],execute:function execute(){_export("I",n=/*#__PURE__*/function(){function n(i,s,e){_classCallCheck(this,n);this.node=i,this.dom=document.createElement("span"),this.dom.className="nile-wysiwyg__image-resizer",this.img=document.createElement("img"),this.applyAttrs(i),this.dom.appendChild(this.img),t(this.dom,this.img,function(i){var t=e();if(void 0===t||!s.editable)return;var _n=s.state.doc.nodeAt(t);_n&&s.dispatch(s.state.tr.setNodeMarkup(t,void 0,_objectSpread(_objectSpread({},_n.attrs),{},{width:i})));});}return _createClass(n,[{key:"applyAttrs",value:function applyAttrs(i){var _s;var _i$attrs=i.attrs,t=_i$attrs.src,e=_i$attrs.alt,_n2=_i$attrs.title,o=_i$attrs.width;this.img.src=t,e?this.img.alt=e:this.img.removeAttribute("alt"),_n2?this.img.title=_n2:this.img.removeAttribute("title"),this.img.style.width=(_s=s(o))!==null&&_s!==void 0?_s:"";}},{key:"update",value:function update(i){return i.type===this.node.type&&(this.node=i,this.applyAttrs(i),!0);}},{key:"selectNode",value:function selectNode(){this.dom.classList.add("nile-wysiwyg__image-resizer--selected");}},{key:"deselectNode",value:function deselectNode(){this.dom.classList.remove("nile-wysiwyg__image-resizer--selected");}},{key:"stopEvent",value:function stopEvent(i){return e(i);}},{key:"ignoreMutation",value:function ignoreMutation(){return!0;}}]);}());_export("F",o=/*#__PURE__*/function(){function o(s,e,n){_classCallCheck(this,o);this.node=s,this.dom=document.createElement("figure"),this.dom.className="nile-wysiwyg__figure",this.wrapper=document.createElement("span"),this.wrapper.className="nile-wysiwyg__image-resizer",this.wrapper.contentEditable="false",this.img=document.createElement("img"),this.wrapper.appendChild(this.img),this.contentDOM=document.createElement("figcaption"),this.contentDOM.className="nile-wysiwyg__figcaption",this.dom.append(this.wrapper,this.contentDOM),this.applyAttrs(s),this.img.addEventListener("mousedown",function(s){s.preventDefault();var t=n();void 0!==t&&(e.dispatch(e.state.tr.setSelection(i.create(e.state.doc,t))),e.focus());}),t(this.wrapper,this.img,function(i){var s=n();if(void 0===s||!e.editable)return;var t=e.state.doc.nodeAt(s);t&&e.dispatch(e.state.tr.setNodeMarkup(s,void 0,_objectSpread(_objectSpread({},t.attrs),{},{width:i})));});}return _createClass(o,[{key:"applyAttrs",value:function applyAttrs(i){var _s2;var _i$attrs2=i.attrs,t=_i$attrs2.src,e=_i$attrs2.alt,n=_i$attrs2.title,_o=_i$attrs2.width,h=_i$attrs2.align;this.img.src=t,e?this.img.alt=e:this.img.removeAttribute("alt"),n?this.img.title=n:this.img.removeAttribute("title"),this.dom.style.width=(_s2=s(_o))!==null&&_s2!==void 0?_s2:"",h?this.dom.setAttribute("data-align",h):this.dom.removeAttribute("data-align"),this.dom.classList.toggle("nile-wysiwyg__figure--empty-caption",0===i.content.size);}},{key:"update",value:function update(i){return i.type===this.node.type&&(this.node=i,this.applyAttrs(i),!0);}},{key:"selectNode",value:function selectNode(){this.dom.classList.add("nile-wysiwyg__figure--selected"),this.wrapper.classList.add("nile-wysiwyg__image-resizer--selected");}},{key:"deselectNode",value:function deselectNode(){this.dom.classList.remove("nile-wysiwyg__figure--selected"),this.wrapper.classList.remove("nile-wysiwyg__image-resizer--selected");}},{key:"stopEvent",value:function stopEvent(i){return e(i);}},{key:"ignoreMutation",value:function ignoreMutation(i){return!this.contentDOM.contains(i.target);}}]);}());}};});
2
2
  //# sourceMappingURL=image-view.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-view.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/image-view.ts"],"sourcesContent":["import { Node as PMNode } from 'prosemirror-model';\nimport { EditorView, NodeView } from 'prosemirror-view';\nimport { NodeSelection } from 'prosemirror-state';\n\nconst MIN_WIDTH = 40;\n\n/**\n * Attaches four corner drag-handles to a wrapper and returns a cleanup\n * function. Dragging previews by mutating the target's style; on release the\n * final width is committed through onCommit (one transaction).\n */\nexport function attachResizeHandles(\n wrapper: HTMLElement,\n img: HTMLElement,\n onCommit: (width: number) => void,\n minWidth: number = MIN_WIDTH\n): void {\n for (const corner of ['nw', 'ne', 'sw', 'se']) {\n const handle = document.createElement('span');\n handle.className = `nile-wysiwyg__resize-handle nile-wysiwyg__resize-handle--${corner}`;\n handle.dataset.resizeHandle = corner;\n handle.contentEditable = 'false';\n handle.addEventListener('mousedown', event => {\n event.preventDefault();\n event.stopPropagation();\n const startX = event.clientX;\n const startWidth = img.getBoundingClientRect().width;\n const sign = corner.includes('w') ? -1 : 1;\n const maxWidth =\n wrapper.closest('.ProseMirror')?.getBoundingClientRect().width ?? 2000;\n let width = startWidth;\n const onMove = (move: MouseEvent): void => {\n width = Math.max(\n minWidth,\n Math.min(maxWidth, startWidth + sign * (move.clientX - startX))\n );\n img.style.width = `${Math.round(width)}px`;\n };\n const onUp = (): void => {\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n wrapper.classList.remove('nile-wysiwyg__resizing');\n onCommit(Math.round(width));\n };\n // While dragging, iframes inside the wrapper must not swallow mouse\n // events (they are separate documents); CSS keys off this class.\n wrapper.classList.add('nile-wysiwyg__resizing');\n window.addEventListener('mousemove', onMove);\n window.addEventListener('mouseup', onUp);\n });\n wrapper.appendChild(handle);\n }\n}\n\nexport function isResizeEvent(event: Event): boolean {\n return (\n event.target instanceof HTMLElement && !!event.target.dataset.resizeHandle\n );\n}\n\n/** Inline image with drag-resize handles shown while selected. */\nexport class ImageView implements NodeView {\n dom: HTMLSpanElement;\n\n private img: HTMLImageElement;\n\n constructor(\n private node: PMNode,\n view: EditorView,\n getPos: () => number | undefined\n ) {\n this.dom = document.createElement('span');\n this.dom.className = 'nile-wysiwyg__image-resizer';\n this.img = document.createElement('img');\n this.applyAttrs(node);\n this.dom.appendChild(this.img);\n attachResizeHandles(this.dom, this.img, width => {\n const pos = getPos();\n if (pos === undefined || !view.editable) return;\n const current = view.state.doc.nodeAt(pos);\n if (!current) return;\n view.dispatch(\n view.state.tr.setNodeMarkup(pos, undefined, { ...current.attrs, width })\n );\n });\n }\n\n private applyAttrs(node: PMNode): void {\n const { src, alt, title, width } = node.attrs;\n this.img.src = src;\n if (alt) this.img.alt = alt;\n else this.img.removeAttribute('alt');\n if (title) this.img.title = title;\n else this.img.removeAttribute('title');\n this.img.style.width = width ? `${width}px` : '';\n }\n\n update(node: PMNode): boolean {\n if (node.type !== this.node.type) return false;\n this.node = node;\n this.applyAttrs(node);\n return true;\n }\n\n selectNode(): void {\n this.dom.classList.add('nile-wysiwyg__image-resizer--selected');\n }\n\n deselectNode(): void {\n this.dom.classList.remove('nile-wysiwyg__image-resizer--selected');\n }\n\n stopEvent(event: Event): boolean {\n return isResizeEvent(event);\n }\n\n ignoreMutation(): boolean {\n return true;\n }\n}\n\n/**\n * Captioned figure: non-editable image (with resize handles) above an\n * editable figcaption (the node's content). Clicking the image selects the\n * whole figure.\n */\nexport class FigureView implements NodeView {\n dom: HTMLElement;\n\n contentDOM: HTMLElement;\n\n private img: HTMLImageElement;\n\n private wrapper: HTMLSpanElement;\n\n constructor(\n private node: PMNode,\n view: EditorView,\n getPos: () => number | undefined\n ) {\n this.dom = document.createElement('figure');\n this.dom.className = 'nile-wysiwyg__figure';\n\n this.wrapper = document.createElement('span');\n this.wrapper.className = 'nile-wysiwyg__image-resizer';\n this.wrapper.contentEditable = 'false';\n this.img = document.createElement('img');\n this.wrapper.appendChild(this.img);\n\n this.contentDOM = document.createElement('figcaption');\n this.contentDOM.className = 'nile-wysiwyg__figcaption';\n\n this.dom.append(this.wrapper, this.contentDOM);\n this.applyAttrs(node);\n\n // Clicking the image selects the figure node (instead of dropping the\n // cursor into the caption).\n this.img.addEventListener('mousedown', event => {\n event.preventDefault();\n const pos = getPos();\n if (pos === undefined) return;\n view.dispatch(\n view.state.tr.setSelection(NodeSelection.create(view.state.doc, pos))\n );\n view.focus();\n });\n\n attachResizeHandles(this.wrapper, this.img, width => {\n const pos = getPos();\n if (pos === undefined || !view.editable) return;\n const current = view.state.doc.nodeAt(pos);\n if (!current) return;\n view.dispatch(\n view.state.tr.setNodeMarkup(pos, undefined, { ...current.attrs, width })\n );\n });\n }\n\n private applyAttrs(node: PMNode): void {\n const { src, alt, title, width, align } = node.attrs;\n this.img.src = src;\n if (alt) this.img.alt = alt;\n else this.img.removeAttribute('alt');\n if (title) this.img.title = title;\n else this.img.removeAttribute('title');\n this.dom.style.width = width ? `${width}px` : '';\n if (align) this.dom.setAttribute('data-align', align);\n else this.dom.removeAttribute('data-align');\n this.dom.classList.toggle(\n 'nile-wysiwyg__figure--empty-caption',\n node.content.size === 0\n );\n }\n\n update(node: PMNode): boolean {\n if (node.type !== this.node.type) return false;\n this.node = node;\n this.applyAttrs(node);\n return true;\n }\n\n selectNode(): void {\n this.dom.classList.add('nile-wysiwyg__figure--selected');\n this.wrapper.classList.add('nile-wysiwyg__image-resizer--selected');\n }\n\n deselectNode(): void {\n this.dom.classList.remove('nile-wysiwyg__figure--selected');\n this.wrapper.classList.remove('nile-wysiwyg__image-resizer--selected');\n }\n\n stopEvent(event: Event): boolean {\n return isResizeEvent(event);\n }\n\n ignoreMutation(mutation: MutationRecord): boolean {\n // Caption edits must flow through; image/handle mutations must not.\n return !this.contentDOM.contains(mutation.target);\n }\n}\n"],"names":["attachResizeHandles","wrapper","img","onCommit","minWidth","arguments","length","undefined","_loop","corner","_arr","_i","handle","document","createElement","className","concat","dataset","resizeHandle","contentEditable","addEventListener","event","preventDefault","stopPropagation","startX","clientX","startWidth","getBoundingClientRect","width","sign","includes","maxWidth","closest","_i$closest$getBoundin","onMove","move","Math","max","min","style","round","onUp","d","window","removeEventListener","classList","remove","add","appendChild","isResizeEvent","target","HTMLElement","ImageView","e","node","view","getPos","this","dom","applyAttrs","pos","editable","current","state","doc","nodeAt","dispatch","tr","setNodeMarkup","attrs","i","_createClass","key","value","_i$attrs","src","alt","title","removeAttribute","update","type","selectNode","deselectNode","stopEvent","ignoreMutation","FigureView","n","contentDOM","append","setSelection","NodeSelection","create","focus","_objectSpread","_i$attrs2","align","setAttribute","toggle","content","size","mutation","contains"],"mappings":"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"}
1
+ {"version":3,"file":"image-view.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/image-view.ts"],"sourcesContent":["import { Node as PMNode } from 'prosemirror-model';\nimport { EditorView, NodeView } from 'prosemirror-view';\nimport { NodeSelection } from 'prosemirror-state';\nimport { imageWidthCss } from '../schema';\n\nconst MIN_WIDTH = 40;\n\n/**\n * Attaches four corner drag-handles to a wrapper and returns a cleanup\n * function. Dragging previews by mutating the target's style; on release the\n * final width is committed through onCommit (one transaction).\n */\nexport function attachResizeHandles(\n wrapper: HTMLElement,\n img: HTMLElement,\n onCommit: (width: number) => void,\n minWidth: number = MIN_WIDTH\n): void {\n for (const corner of ['nw', 'ne', 'sw', 'se']) {\n const handle = document.createElement('span');\n handle.className = `nile-wysiwyg__resize-handle nile-wysiwyg__resize-handle--${corner}`;\n handle.dataset.resizeHandle = corner;\n handle.contentEditable = 'false';\n handle.addEventListener('mousedown', event => {\n event.preventDefault();\n event.stopPropagation();\n const startX = event.clientX;\n const startWidth = img.getBoundingClientRect().width;\n const sign = corner.includes('w') ? -1 : 1;\n const maxWidth =\n wrapper.closest('.ProseMirror')?.getBoundingClientRect().width ?? 2000;\n let width = startWidth;\n const onMove = (move: MouseEvent): void => {\n width = Math.max(\n minWidth,\n Math.min(maxWidth, startWidth + sign * (move.clientX - startX))\n );\n img.style.width = `${Math.round(width)}px`;\n };\n const onUp = (): void => {\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n wrapper.classList.remove('nile-wysiwyg__resizing');\n onCommit(Math.round(width));\n };\n // While dragging, iframes inside the wrapper must not swallow mouse\n // events (they are separate documents); CSS keys off this class.\n wrapper.classList.add('nile-wysiwyg__resizing');\n window.addEventListener('mousemove', onMove);\n window.addEventListener('mouseup', onUp);\n });\n wrapper.appendChild(handle);\n }\n}\n\nexport function isResizeEvent(event: Event): boolean {\n return (\n event.target instanceof HTMLElement && !!event.target.dataset.resizeHandle\n );\n}\n\n/** Inline image with drag-resize handles shown while selected. */\nexport class ImageView implements NodeView {\n dom: HTMLSpanElement;\n\n private img: HTMLImageElement;\n\n constructor(\n private node: PMNode,\n view: EditorView,\n getPos: () => number | undefined\n ) {\n this.dom = document.createElement('span');\n this.dom.className = 'nile-wysiwyg__image-resizer';\n this.img = document.createElement('img');\n this.applyAttrs(node);\n this.dom.appendChild(this.img);\n attachResizeHandles(this.dom, this.img, width => {\n const pos = getPos();\n if (pos === undefined || !view.editable) return;\n const current = view.state.doc.nodeAt(pos);\n if (!current) return;\n view.dispatch(\n view.state.tr.setNodeMarkup(pos, undefined, { ...current.attrs, width })\n );\n });\n }\n\n private applyAttrs(node: PMNode): void {\n const { src, alt, title, width } = node.attrs;\n this.img.src = src;\n if (alt) this.img.alt = alt;\n else this.img.removeAttribute('alt');\n if (title) this.img.title = title;\n else this.img.removeAttribute('title');\n this.img.style.width = imageWidthCss(width) ?? '';\n }\n\n update(node: PMNode): boolean {\n if (node.type !== this.node.type) return false;\n this.node = node;\n this.applyAttrs(node);\n return true;\n }\n\n selectNode(): void {\n this.dom.classList.add('nile-wysiwyg__image-resizer--selected');\n }\n\n deselectNode(): void {\n this.dom.classList.remove('nile-wysiwyg__image-resizer--selected');\n }\n\n stopEvent(event: Event): boolean {\n return isResizeEvent(event);\n }\n\n ignoreMutation(): boolean {\n return true;\n }\n}\n\n/**\n * Captioned figure: non-editable image (with resize handles) above an\n * editable figcaption (the node's content). Clicking the image selects the\n * whole figure.\n */\nexport class FigureView implements NodeView {\n dom: HTMLElement;\n\n contentDOM: HTMLElement;\n\n private img: HTMLImageElement;\n\n private wrapper: HTMLSpanElement;\n\n constructor(\n private node: PMNode,\n view: EditorView,\n getPos: () => number | undefined\n ) {\n this.dom = document.createElement('figure');\n this.dom.className = 'nile-wysiwyg__figure';\n\n this.wrapper = document.createElement('span');\n this.wrapper.className = 'nile-wysiwyg__image-resizer';\n this.wrapper.contentEditable = 'false';\n this.img = document.createElement('img');\n this.wrapper.appendChild(this.img);\n\n this.contentDOM = document.createElement('figcaption');\n this.contentDOM.className = 'nile-wysiwyg__figcaption';\n\n this.dom.append(this.wrapper, this.contentDOM);\n this.applyAttrs(node);\n\n // Clicking the image selects the figure node (instead of dropping the\n // cursor into the caption).\n this.img.addEventListener('mousedown', event => {\n event.preventDefault();\n const pos = getPos();\n if (pos === undefined) return;\n view.dispatch(\n view.state.tr.setSelection(NodeSelection.create(view.state.doc, pos))\n );\n view.focus();\n });\n\n attachResizeHandles(this.wrapper, this.img, width => {\n const pos = getPos();\n if (pos === undefined || !view.editable) return;\n const current = view.state.doc.nodeAt(pos);\n if (!current) return;\n view.dispatch(\n view.state.tr.setNodeMarkup(pos, undefined, { ...current.attrs, width })\n );\n });\n }\n\n private applyAttrs(node: PMNode): void {\n const { src, alt, title, width, align } = node.attrs;\n this.img.src = src;\n if (alt) this.img.alt = alt;\n else this.img.removeAttribute('alt');\n if (title) this.img.title = title;\n else this.img.removeAttribute('title');\n this.dom.style.width = imageWidthCss(width) ?? '';\n if (align) this.dom.setAttribute('data-align', align);\n else this.dom.removeAttribute('data-align');\n this.dom.classList.toggle(\n 'nile-wysiwyg__figure--empty-caption',\n node.content.size === 0\n );\n }\n\n update(node: PMNode): boolean {\n if (node.type !== this.node.type) return false;\n this.node = node;\n this.applyAttrs(node);\n return true;\n }\n\n selectNode(): void {\n this.dom.classList.add('nile-wysiwyg__figure--selected');\n this.wrapper.classList.add('nile-wysiwyg__image-resizer--selected');\n }\n\n deselectNode(): void {\n this.dom.classList.remove('nile-wysiwyg__figure--selected');\n this.wrapper.classList.remove('nile-wysiwyg__image-resizer--selected');\n }\n\n stopEvent(event: Event): boolean {\n return isResizeEvent(event);\n }\n\n ignoreMutation(mutation: MutationRecord): boolean {\n // Caption edits must flow through; image/handle mutations must not.\n return !this.contentDOM.contains(mutation.target);\n }\n}\n"],"names":["attachResizeHandles","wrapper","img","onCommit","minWidth","_loop","corner","handle","document","createElement","className","dataset","resizeHandle","contentEditable","addEventListener","event","preventDefault","stopPropagation","startX","clientX","startWidth","getBoundingClientRect","width","sign","includes","maxWidth","closest","_i$closest","onMove","move","Math","max","min","style","round","onUp","window","removeEventListener","classList","remove","add","appendChild","_i","_arr","length","isResizeEvent","target","HTMLElement","ImageView","n","node","view","getPos","this","dom","applyAttrs","pos","undefined","editable","current","state","doc","nodeAt","dispatch","tr","setNodeMarkup","_objectSpread","attrs","i","_createClass","key","value","_i$attrs","src","alt","title","removeAttribute","imageWidthCss","update","type","selectNode","deselectNode","stopEvent","ignoreMutation","_export","FigureView","o","contentDOM","append","setSelection","NodeSelection","create","focus","_i$attrs2","align","_s2","setAttribute","toggle","content","size","mutation","contains"],"mappings":"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"}
@@ -1 +1 @@
1
- import{c as i}from"../../../index-6f3fa4ab.esm.js";function t(i,t,s,e=40){for(const n of["nw","ne","sw","se"]){const h=document.createElement("span");h.className=`nile-wysiwyg__resize-handle nile-wysiwyg__resize-handle--${n}`,h.dataset.resizeHandle=n,h.contentEditable="false",h.addEventListener("mousedown",(h=>{h.preventDefault(),h.stopPropagation();const o=h.clientX,r=t.getBoundingClientRect().width,w=n.includes("w")?-1:1,a=i.closest(".ProseMirror")?.getBoundingClientRect().width??2e3;let l=r;const c=i=>{l=Math.max(e,Math.min(a,r+w*(i.clientX-o))),t.style.width=`${Math.round(l)}px`},d=()=>{window.removeEventListener("mousemove",c),window.removeEventListener("mouseup",d),i.classList.remove("nile-wysiwyg__resizing"),s(Math.round(l))};i.classList.add("nile-wysiwyg__resizing"),window.addEventListener("mousemove",c),window.addEventListener("mouseup",d)})),i.appendChild(h)}}function s(i){return i.target instanceof HTMLElement&&!!i.target.dataset.resizeHandle}class e{constructor(i,s,e){this.node=i,this.dom=document.createElement("span"),this.dom.className="nile-wysiwyg__image-resizer",this.img=document.createElement("img"),this.applyAttrs(i),this.dom.appendChild(this.img),t(this.dom,this.img,(i=>{const t=e();if(void 0===t||!s.editable)return;const n=s.state.doc.nodeAt(t);n&&s.dispatch(s.state.tr.setNodeMarkup(t,void 0,{...n.attrs,width:i}))}))}applyAttrs(i){const{src:t,alt:s,title:e,width:n}=i.attrs;this.img.src=t,s?this.img.alt=s:this.img.removeAttribute("alt"),e?this.img.title=e:this.img.removeAttribute("title"),this.img.style.width=n?`${n}px`:""}update(i){return i.type===this.node.type&&(this.node=i,this.applyAttrs(i),!0)}selectNode(){this.dom.classList.add("nile-wysiwyg__image-resizer--selected")}deselectNode(){this.dom.classList.remove("nile-wysiwyg__image-resizer--selected")}stopEvent(i){return s(i)}ignoreMutation(){return!0}}class n{constructor(s,e,n){this.node=s,this.dom=document.createElement("figure"),this.dom.className="nile-wysiwyg__figure",this.wrapper=document.createElement("span"),this.wrapper.className="nile-wysiwyg__image-resizer",this.wrapper.contentEditable="false",this.img=document.createElement("img"),this.wrapper.appendChild(this.img),this.contentDOM=document.createElement("figcaption"),this.contentDOM.className="nile-wysiwyg__figcaption",this.dom.append(this.wrapper,this.contentDOM),this.applyAttrs(s),this.img.addEventListener("mousedown",(t=>{t.preventDefault();const s=n();void 0!==s&&(e.dispatch(e.state.tr.setSelection(i.create(e.state.doc,s))),e.focus())})),t(this.wrapper,this.img,(i=>{const t=n();if(void 0===t||!e.editable)return;const s=e.state.doc.nodeAt(t);s&&e.dispatch(e.state.tr.setNodeMarkup(t,void 0,{...s.attrs,width:i}))}))}applyAttrs(i){const{src:t,alt:s,title:e,width:n,align:h}=i.attrs;this.img.src=t,s?this.img.alt=s:this.img.removeAttribute("alt"),e?this.img.title=e:this.img.removeAttribute("title"),this.dom.style.width=n?`${n}px`:"",h?this.dom.setAttribute("data-align",h):this.dom.removeAttribute("data-align"),this.dom.classList.toggle("nile-wysiwyg__figure--empty-caption",0===i.content.size)}update(i){return i.type===this.node.type&&(this.node=i,this.applyAttrs(i),!0)}selectNode(){this.dom.classList.add("nile-wysiwyg__figure--selected"),this.wrapper.classList.add("nile-wysiwyg__image-resizer--selected")}deselectNode(){this.dom.classList.remove("nile-wysiwyg__figure--selected"),this.wrapper.classList.remove("nile-wysiwyg__image-resizer--selected")}stopEvent(i){return s(i)}ignoreMutation(i){return!this.contentDOM.contains(i.target)}}export{n as F,e as I,t as a,s as i};
1
+ import{N as i}from"../../../index-7ca72b78.esm.js";import{i as s}from"../schema.esm.js";import"../../../index-5d34cff1.esm.js";import"../../../index-4df50481.esm.js";import"../../../index-920675c4.esm.js";import"./embeds.esm.js";import"../email-css.esm.js";import"../sanitize.esm.js";function t(i,s,t,e=40){for(const n of["nw","ne","sw","se"]){const o=document.createElement("span");o.className=`nile-wysiwyg__resize-handle nile-wysiwyg__resize-handle--${n}`,o.dataset.resizeHandle=n,o.contentEditable="false",o.addEventListener("mousedown",(o=>{o.preventDefault(),o.stopPropagation();const h=o.clientX,r=s.getBoundingClientRect().width,a=n.includes("w")?-1:1,l=i.closest(".ProseMirror")?.getBoundingClientRect().width??2e3;let w=r;const m=i=>{w=Math.max(e,Math.min(l,r+a*(i.clientX-h))),s.style.width=`${Math.round(w)}px`},d=()=>{window.removeEventListener("mousemove",m),window.removeEventListener("mouseup",d),i.classList.remove("nile-wysiwyg__resizing"),t(Math.round(w))};i.classList.add("nile-wysiwyg__resizing"),window.addEventListener("mousemove",m),window.addEventListener("mouseup",d)})),i.appendChild(o)}}function e(i){return i.target instanceof HTMLElement&&!!i.target.dataset.resizeHandle}class n{constructor(i,s,e){this.node=i,this.dom=document.createElement("span"),this.dom.className="nile-wysiwyg__image-resizer",this.img=document.createElement("img"),this.applyAttrs(i),this.dom.appendChild(this.img),t(this.dom,this.img,(i=>{const t=e();if(void 0===t||!s.editable)return;const n=s.state.doc.nodeAt(t);n&&s.dispatch(s.state.tr.setNodeMarkup(t,void 0,{...n.attrs,width:i}))}))}applyAttrs(i){const{src:t,alt:e,title:n,width:o}=i.attrs;this.img.src=t,e?this.img.alt=e:this.img.removeAttribute("alt"),n?this.img.title=n:this.img.removeAttribute("title"),this.img.style.width=s(o)??""}update(i){return i.type===this.node.type&&(this.node=i,this.applyAttrs(i),!0)}selectNode(){this.dom.classList.add("nile-wysiwyg__image-resizer--selected")}deselectNode(){this.dom.classList.remove("nile-wysiwyg__image-resizer--selected")}stopEvent(i){return e(i)}ignoreMutation(){return!0}}class o{constructor(s,e,n){this.node=s,this.dom=document.createElement("figure"),this.dom.className="nile-wysiwyg__figure",this.wrapper=document.createElement("span"),this.wrapper.className="nile-wysiwyg__image-resizer",this.wrapper.contentEditable="false",this.img=document.createElement("img"),this.wrapper.appendChild(this.img),this.contentDOM=document.createElement("figcaption"),this.contentDOM.className="nile-wysiwyg__figcaption",this.dom.append(this.wrapper,this.contentDOM),this.applyAttrs(s),this.img.addEventListener("mousedown",(s=>{s.preventDefault();const t=n();void 0!==t&&(e.dispatch(e.state.tr.setSelection(i.create(e.state.doc,t))),e.focus())})),t(this.wrapper,this.img,(i=>{const s=n();if(void 0===s||!e.editable)return;const t=e.state.doc.nodeAt(s);t&&e.dispatch(e.state.tr.setNodeMarkup(s,void 0,{...t.attrs,width:i}))}))}applyAttrs(i){const{src:t,alt:e,title:n,width:o,align:h}=i.attrs;this.img.src=t,e?this.img.alt=e:this.img.removeAttribute("alt"),n?this.img.title=n:this.img.removeAttribute("title"),this.dom.style.width=s(o)??"",h?this.dom.setAttribute("data-align",h):this.dom.removeAttribute("data-align"),this.dom.classList.toggle("nile-wysiwyg__figure--empty-caption",0===i.content.size)}update(i){return i.type===this.node.type&&(this.node=i,this.applyAttrs(i),!0)}selectNode(){this.dom.classList.add("nile-wysiwyg__figure--selected"),this.wrapper.classList.add("nile-wysiwyg__image-resizer--selected")}deselectNode(){this.dom.classList.remove("nile-wysiwyg__figure--selected"),this.wrapper.classList.remove("nile-wysiwyg__image-resizer--selected")}stopEvent(i){return e(i)}ignoreMutation(i){return!this.contentDOM.contains(i.target)}}export{o as F,n as I,t as a,e as i};
@@ -1,2 +1,2 @@
1
- System.register(["../../../index-89c520e9.cjs.js","../../../index-3ca67627.cjs.js"],function(_export,_context){"use strict";var n,o,t,e,a;function r(n){return n?Array.from(n.files).filter(function(n){return n.type.startsWith("image/");}):[];}function i(){var n=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return new o({key:a,state:{init:function init(){return t.empty;},apply:function apply(n,o){var t=o.map(n.mapping,n.doc);var r=n.getMeta(a);if(r!==null&&r!==void 0&&r.add){var _o=document.createElement("span");_o.className="nile-wysiwyg__upload-placeholder",_o.textContent="Uploading image…",t=t.add(n.doc,[e.widget(r.add.pos,_o,{id:r.add.id})]);}return r!==null&&r!==void 0&&r.remove&&(t=t.remove(t.find(void 0,void 0,function(n){return n.id===r.remove.id;}))),t;}},props:{decorations:function decorations(n){return a.getState(n);},handlePaste:function handlePaste(o,t){var e=r(t.clipboardData);return!(0===e.length||!n.onImageFiles)&&(n.onImageFiles(e,null),!0);},handleDrop:function handleDrop(o,t){var e=r(t.dataTransfer);if(0===e.length||!n.onImageFiles)return!1;var a=o.posAtCoords({left:t.clientX,top:t.clientY});return n.onImageFiles(e,a?a.pos:null),!0;}}});}function s(n,o){var t=a.getState(n),e=t===null||t===void 0?void 0:t.find(void 0,void 0,function(n){return n.id===o;});return e&&e.length?e[0].from:null;}_export({f:s,i:i});return{setters:[function(_index00bCjsJs){n=_index00bCjsJs.P;o=_index00bCjsJs.b;},function(_index00aCjsJs){t=_index00aCjsJs.D;e=_index00aCjsJs.a;}],execute:function execute(){_export("a",a=new n("nileImageUpload"));}};});
1
+ System.register(["../../../index-bbe23ad8.cjs.js","../../../index-7ae95edd.cjs.js","../../../index-ccc6a799.cjs.js"],function(_export,_context){"use strict";var n,o,t,e,a;function i(n){return n?Array.from(n.files).filter(function(n){return n.type.startsWith("image/");}):[];}function r(){var n=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return new o({key:a,state:{init:function init(){return t.empty;},apply:function apply(n,o){var t=o.map(n.mapping,n.doc);var i=n.getMeta(a);if(i!==null&&i!==void 0&&i.add){var _o=document.createElement("span");_o.className="nile-wysiwyg__upload-placeholder",_o.textContent="Uploading image…",t=t.add(n.doc,[e.widget(i.add.pos,_o,{id:i.add.id})]);}return i!==null&&i!==void 0&&i.remove&&(t=t.remove(t.find(void 0,void 0,function(n){return n.id===i.remove.id;}))),t;}},props:{decorations:function decorations(n){return a.getState(n);},handlePaste:function handlePaste(o,t){var e=i(t.clipboardData);return!(0===e.length||!n.onImageFiles)&&(n.onImageFiles(e,null),!0);},handleDrop:function handleDrop(o,t){var e=i(t.dataTransfer);if(0===e.length||!n.onImageFiles)return!1;var a=o.posAtCoords({left:t.clientX,top:t.clientY});return n.onImageFiles(e,a?a.pos:null),!0;}}});}function s(n,o){var t=a.getState(n),e=t===null||t===void 0?void 0:t.find(void 0,void 0,function(n){return n.id===o;});return e&&e.length?e[0].from:null;}_export({f:s,i:r});return{setters:[function(_index00aCjsJs){n=_index00aCjsJs.P;o=_index00aCjsJs.a;},function(_index009CjsJs){t=_index009CjsJs.D;e=_index009CjsJs.a;},function(_index00bCjsJs){}],execute:function execute(){_export("a",a=new n("nileImageUpload"));}};});
2
2
  //# sourceMappingURL=image.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"image.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/image.ts"],"sourcesContent":["import { Plugin, PluginKey, EditorState } from 'prosemirror-state';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\n\nexport const imageUploadKey = new PluginKey<DecorationSet>('nileImageUpload');\n\ninterface UploadMeta {\n add?: { id: string; pos: number };\n remove?: { id: string };\n}\n\nexport interface ImagePluginOptions {\n /** Called with image files pasted or dropped into the editor. */\n onImageFiles?: (files: File[], pos: number | null) => void;\n}\n\nfunction imageFilesFrom(data: DataTransfer | null): File[] {\n if (!data) return [];\n return Array.from(data.files).filter(file => file.type.startsWith('image/'));\n}\n\n/**\n * Image behaviors: routes pasted/dropped image files to the host's upload\n * flow and tracks \"uploading…\" widget decorations that survive concurrent\n * edits by mapping through transactions.\n */\nexport function imagePlugin(options: ImagePluginOptions = {}): Plugin<DecorationSet> {\n return new Plugin<DecorationSet>({\n key: imageUploadKey,\n\n state: {\n init: () => DecorationSet.empty,\n apply(tr, set) {\n let mapped = set.map(tr.mapping, tr.doc);\n const meta = tr.getMeta(imageUploadKey) as UploadMeta | undefined;\n if (meta?.add) {\n const widget = document.createElement('span');\n widget.className = 'nile-wysiwyg__upload-placeholder';\n widget.textContent = 'Uploading image…';\n mapped = mapped.add(tr.doc, [\n Decoration.widget(meta.add.pos, widget, { id: meta.add.id }),\n ]);\n }\n if (meta?.remove) {\n mapped = mapped.remove(\n mapped.find(undefined, undefined, spec => spec.id === meta.remove!.id)\n );\n }\n return mapped;\n },\n },\n\n props: {\n decorations(state) {\n return imageUploadKey.getState(state);\n },\n\n handlePaste(_view, event) {\n const files = imageFilesFrom(event.clipboardData);\n if (files.length === 0 || !options.onImageFiles) return false;\n options.onImageFiles(files, null);\n return true;\n },\n\n handleDrop(view, event) {\n const files = imageFilesFrom(event.dataTransfer);\n if (files.length === 0 || !options.onImageFiles) return false;\n const drop = view.posAtCoords({ left: event.clientX, top: event.clientY });\n options.onImageFiles(files, drop ? drop.pos : null);\n return true;\n },\n },\n });\n}\n\n/** Position of an upload placeholder, after mapping through edits. */\nexport function findUploadPos(state: EditorState, id: string): number | null {\n const set = imageUploadKey.getState(state);\n const found = set?.find(undefined, undefined, spec => spec.id === id);\n return found && found.length ? found[0].from : null;\n}\n"],"names":["imageFilesFrom","data","Array","from","files","filter","file","type","startsWith","imagePlugin","options","Plugin","key","imageUploadKey","state","init","DecorationSet","empty","apply","tr","set","mapped","map","mapping","doc","meta","getMeta","add","widget","document","createElement","className","textContent","Decoration","pos","id","remove","find","undefined","spec","props","decorations","getState","handlePaste","_view","event","clipboardData","length","onImageFiles","handleDrop","view","dataTransfer","drop","posAtCoords","left","clientX","top","clientY","findUploadPos","found","PluginKey"],"mappings":"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"}
1
+ {"version":3,"file":"image.cjs.js","sources":["../../../../../src/nile-wysiwyg-editor/engine/plugins/image.ts"],"sourcesContent":["import { Plugin, PluginKey, EditorState } from 'prosemirror-state';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\n\nexport const imageUploadKey = new PluginKey<DecorationSet>('nileImageUpload');\n\ninterface UploadMeta {\n add?: { id: string; pos: number };\n remove?: { id: string };\n}\n\nexport interface ImagePluginOptions {\n /** Called with image files pasted or dropped into the editor. */\n onImageFiles?: (files: File[], pos: number | null) => void;\n}\n\nfunction imageFilesFrom(data: DataTransfer | null): File[] {\n if (!data) return [];\n return Array.from(data.files).filter(file => file.type.startsWith('image/'));\n}\n\n/**\n * Image behaviors: routes pasted/dropped image files to the host's upload\n * flow and tracks \"uploading…\" widget decorations that survive concurrent\n * edits by mapping through transactions.\n */\nexport function imagePlugin(options: ImagePluginOptions = {}): Plugin<DecorationSet> {\n return new Plugin<DecorationSet>({\n key: imageUploadKey,\n\n state: {\n init: () => DecorationSet.empty,\n apply(tr, set) {\n let mapped = set.map(tr.mapping, tr.doc);\n const meta = tr.getMeta(imageUploadKey) as UploadMeta | undefined;\n if (meta?.add) {\n const widget = document.createElement('span');\n widget.className = 'nile-wysiwyg__upload-placeholder';\n widget.textContent = 'Uploading image…';\n mapped = mapped.add(tr.doc, [\n Decoration.widget(meta.add.pos, widget, { id: meta.add.id }),\n ]);\n }\n if (meta?.remove) {\n mapped = mapped.remove(\n mapped.find(undefined, undefined, spec => spec.id === meta.remove!.id)\n );\n }\n return mapped;\n },\n },\n\n props: {\n decorations(state) {\n return imageUploadKey.getState(state);\n },\n\n handlePaste(_view, event) {\n const files = imageFilesFrom(event.clipboardData);\n if (files.length === 0 || !options.onImageFiles) return false;\n options.onImageFiles(files, null);\n return true;\n },\n\n handleDrop(view, event) {\n const files = imageFilesFrom(event.dataTransfer);\n if (files.length === 0 || !options.onImageFiles) return false;\n const drop = view.posAtCoords({ left: event.clientX, top: event.clientY });\n options.onImageFiles(files, drop ? drop.pos : null);\n return true;\n },\n },\n });\n}\n\n/** Position of an upload placeholder, after mapping through edits. */\nexport function findUploadPos(state: EditorState, id: string): number | null {\n const set = imageUploadKey.getState(state);\n const found = set?.find(undefined, undefined, spec => spec.id === id);\n return found && found.length ? found[0].from : null;\n}\n"],"names":["imageFilesFrom","data","Array","from","files","filter","file","type","startsWith","imagePlugin","options","Plugin","key","imageUploadKey","state","init","DecorationSet","empty","apply","tr","set","mapped","map","mapping","doc","meta","getMeta","add","widget","document","createElement","className","textContent","Decoration","pos","id","remove","find","undefined","spec","props","decorations","getState","handlePaste","_view","event","clipboardData","length","onImageFiles","handleDrop","view","dataTransfer","drop","posAtCoords","left","clientX","top","clientY","findUploadPos","found","PluginKey"],"mappings":"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"}
@@ -1 +1 @@
1
- import{P as n,b as e}from"../../../index-6f3fa4ab.esm.js";import{D as o,a as t}from"../../../index-ba47645d.esm.js";const a=new n("nileImageUpload");function r(n){return n?Array.from(n.files).filter((n=>n.type.startsWith("image/"))):[]}function i(n={}){return new e({key:a,state:{init:()=>o.empty,apply(n,e){let o=e.map(n.mapping,n.doc);const r=n.getMeta(a);if(r?.add){const e=document.createElement("span");e.className="nile-wysiwyg__upload-placeholder",e.textContent="Uploading image…",o=o.add(n.doc,[t.widget(r.add.pos,e,{id:r.add.id})])}return r?.remove&&(o=o.remove(o.find(void 0,void 0,(n=>n.id===r.remove.id)))),o}},props:{decorations:n=>a.getState(n),handlePaste(e,o){const t=r(o.clipboardData);return!(0===t.length||!n.onImageFiles)&&(n.onImageFiles(t,null),!0)},handleDrop(e,o){const t=r(o.dataTransfer);if(0===t.length||!n.onImageFiles)return!1;const a=e.posAtCoords({left:o.clientX,top:o.clientY});return n.onImageFiles(t,a?a.pos:null),!0}}})}function s(n,e){const o=a.getState(n),t=o?.find(void 0,void 0,(n=>n.id===e));return t&&t.length?t[0].from:null}export{a,s as f,i};
1
+ import{P as n,a as e}from"../../../index-7ca72b78.esm.js";import{D as o,a as t}from"../../../index-4df50481.esm.js";import"../../../index-5d34cff1.esm.js";const a=new n("nileImageUpload");function i(n){return n?Array.from(n.files).filter((n=>n.type.startsWith("image/"))):[]}function r(n={}){return new e({key:a,state:{init:()=>o.empty,apply(n,e){let o=e.map(n.mapping,n.doc);const i=n.getMeta(a);if(i?.add){const e=document.createElement("span");e.className="nile-wysiwyg__upload-placeholder",e.textContent="Uploading image…",o=o.add(n.doc,[t.widget(i.add.pos,e,{id:i.add.id})])}return i?.remove&&(o=o.remove(o.find(void 0,void 0,(n=>n.id===i.remove.id)))),o}},props:{decorations:n=>a.getState(n),handlePaste(e,o){const t=i(o.clipboardData);return!(0===t.length||!n.onImageFiles)&&(n.onImageFiles(t,null),!0)},handleDrop(e,o){const t=i(o.dataTransfer);if(0===t.length||!n.onImageFiles)return!1;const a=e.posAtCoords({left:o.clientX,top:o.clientY});return n.onImageFiles(t,a?a.pos:null),!0}}})}function s(n,e){const o=a.getState(n),t=o?.find(void 0,void 0,(n=>n.id===e));return t&&t.length?t[0].from:null}export{a,s as f,r as i};
@@ -1,2 +1,2 @@
1
- System.register(["../../../index-89c520e9.cjs.js","../sanitize.cjs.js","./embeds.cjs.js"],function(_export,_context){"use strict";var r,t,e;function n(){var n=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return new r({props:{handleClick:function handleClick(r,e,s){var _s$target,_s$target$closest;if(!s.metaKey&&!s.ctrlKey)return!1;var o=(_s$target=s.target)===null||_s$target===void 0||(_s$target$closest=_s$target.closest)===null||_s$target$closest===void 0?void 0:_s$target$closest.call(_s$target,"a[href]");if(!o)return!1;var i=o.getAttribute("href");return!!t(i)&&(n.onOpenLink?n.onOpenLink(i):window.open(i,"_blank","noopener,noreferrer"),!0);},handlePaste:function handlePaste(r,n){var _n$clipboardData;var s=r.state,_s$selection=s.selection,o=_s$selection.empty,i=_s$selection.from,f=_s$selection.to;if(o)return!1;var a=(_n$clipboardData=n.clipboardData)===null||_n$clipboardData===void 0||(_n$clipboardData=_n$clipboardData.getData("text/plain"))===null||_n$clipboardData===void 0?void 0:_n$clipboardData.trim();if(!a||!e.test(a)||!t(a))return!1;var c=s.schema.marks.link.create({href:a});return r.dispatch(s.tr.addMark(i,f,c)),!0;}}});}_export("l",n);return{setters:[function(_index00bCjsJs){r=_index00bCjsJs.b;},function(_sanitizeCjsJs){t=_sanitizeCjsJs.i;},function(_embedsCjsJs){}],execute:function execute(){e=/^https?:\/\/\S+$/i;}};});
1
+ System.register(["../../../index-bbe23ad8.cjs.js","../sanitize.cjs.js","../../../index-ccc6a799.cjs.js","./embeds.cjs.js","../email-css.cjs.js"],function(_export,_context){"use strict";var n,t,e,r,s;function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function i(){var n=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return new t({key:s,state:{init:function init(){return null;},apply:function apply(n,t){var e=n.getMeta(s);if(void 0!==e)return e;if(!t)return null;if(!n.docChanged)return n.selectionSet?null:t;var r=n.mapping.map(t.pos);return n.selection.empty&&n.selection.from===r?_objectSpread(_objectSpread({},t),{},{pos:r}):null;}},props:{handleTextInput:function handleTextInput(n,t,e,r){var i=n.state;var o=null;if(t<e)o=function(n,t,e){var r=n.schema.marks.link;var s=null,i=!0;return n.doc.nodesBetween(t,e,function(n){if(!i||!n.isText)return;var t=r.isInSet(n.marks);!t||s&&!t.eq(s)?i=!1:s=t;}),i?s:null;}(i,t,e);else{var _n=s.getState(i);_n&&_n.pos===t&&(o=_n.mark);}if(!o)return!1;var l=t+r.length,u=i.tr.insertText(r,t,e).addMark(t,l,o);return u.setMeta(s,{pos:l,mark:o}),n.dispatch(u),!0;},handleClick:function handleClick(t,r,s){var _s$target,_s$target$closest;if(!s.metaKey&&!s.ctrlKey)return!1;var i=(_s$target=s.target)===null||_s$target===void 0||(_s$target$closest=_s$target.closest)===null||_s$target$closest===void 0?void 0:_s$target$closest.call(_s$target,"a[href]");if(!i)return!1;var o=i.getAttribute("href");return!!e(o)&&(n.onOpenLink?n.onOpenLink(o):window.open(o,"_blank","noopener,noreferrer"),!0);},handlePaste:function handlePaste(n,t){var _t$clipboardData;var s=n.state,_s$selection=s.selection,i=_s$selection.empty,o=_s$selection.from,l=_s$selection.to;if(i)return!1;var u=(_t$clipboardData=t.clipboardData)===null||_t$clipboardData===void 0||(_t$clipboardData=_t$clipboardData.getData("text/plain"))===null||_t$clipboardData===void 0?void 0:_t$clipboardData.trim();if(!u||!r.test(u)||!e(u))return!1;var c=s.schema.marks.link.create({href:u});return n.dispatch(s.tr.addMark(o,l,c)),!0;}}});}_export("l",i);return{setters:[function(_index00aCjsJs){n=_index00aCjsJs.P;t=_index00aCjsJs.a;},function(_sanitizeCjsJs){e=_sanitizeCjsJs.i;},function(_index00bCjsJs){},function(_embedsCjsJs){},function(_emailCssCjsJs){}],execute:function execute(){r=/^https?:\/\/\S+$/i,s=new n("nile-wysiwyg-link-retype");}};});
2
2
  //# sourceMappingURL=link.cjs.js.map