@bobfrankston/rmfmail 1.0.656 → 1.0.657

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 (280) hide show
  1. package/bin/build-tinymce.js +42 -0
  2. package/bin/mailx.js +54 -23
  3. package/bin/mailx.js.map +1 -1
  4. package/bin/mailx.ts +45 -20
  5. package/client/compose/editor.js +7 -1
  6. package/client/compose/editor.js.map +1 -1
  7. package/client/compose/editor.ts +7 -1
  8. package/client/lib/rmf-tiny.js +21 -3
  9. package/client/lib/tinymce/CHANGELOG.md +3991 -0
  10. package/client/lib/tinymce/README.md +77 -0
  11. package/client/lib/tinymce/bower.json +27 -0
  12. package/client/lib/tinymce/composer.json +52 -0
  13. package/client/lib/tinymce/icons/default/icons.js +270 -0
  14. package/client/lib/tinymce/icons/default/icons.min.js +1 -0
  15. package/client/lib/tinymce/icons/default/index.js +7 -0
  16. package/client/lib/tinymce/license.md +9 -0
  17. package/client/lib/tinymce/models/dom/index.js +7 -0
  18. package/client/lib/tinymce/models/dom/model.js +8994 -0
  19. package/client/lib/tinymce/models/dom/model.min.js +1 -0
  20. package/client/lib/tinymce/notices.txt +21 -0
  21. package/client/lib/tinymce/package.json +32 -0
  22. package/client/lib/tinymce/plugins/accordion/index.js +7 -0
  23. package/client/lib/tinymce/plugins/accordion/plugin.js +1373 -0
  24. package/client/lib/tinymce/plugins/accordion/plugin.min.js +1 -0
  25. package/client/lib/tinymce/plugins/advlist/index.js +7 -0
  26. package/client/lib/tinymce/plugins/advlist/plugin.js +473 -0
  27. package/client/lib/tinymce/plugins/advlist/plugin.min.js +1 -0
  28. package/client/lib/tinymce/plugins/anchor/index.js +7 -0
  29. package/client/lib/tinymce/plugins/anchor/plugin.js +237 -0
  30. package/client/lib/tinymce/plugins/anchor/plugin.min.js +1 -0
  31. package/client/lib/tinymce/plugins/autolink/index.js +7 -0
  32. package/client/lib/tinymce/plugins/autolink/plugin.js +315 -0
  33. package/client/lib/tinymce/plugins/autolink/plugin.min.js +1 -0
  34. package/client/lib/tinymce/plugins/autoresize/index.js +7 -0
  35. package/client/lib/tinymce/plugins/autoresize/plugin.js +221 -0
  36. package/client/lib/tinymce/plugins/autoresize/plugin.min.js +1 -0
  37. package/client/lib/tinymce/plugins/autosave/index.js +7 -0
  38. package/client/lib/tinymce/plugins/autosave/plugin.js +249 -0
  39. package/client/lib/tinymce/plugins/autosave/plugin.min.js +1 -0
  40. package/client/lib/tinymce/plugins/charmap/index.js +7 -0
  41. package/client/lib/tinymce/plugins/charmap/plugin.js +997 -0
  42. package/client/lib/tinymce/plugins/charmap/plugin.min.js +1 -0
  43. package/client/lib/tinymce/plugins/code/index.js +7 -0
  44. package/client/lib/tinymce/plugins/code/plugin.js +98 -0
  45. package/client/lib/tinymce/plugins/code/plugin.min.js +1 -0
  46. package/client/lib/tinymce/plugins/codesample/index.js +7 -0
  47. package/client/lib/tinymce/plugins/codesample/plugin.js +3655 -0
  48. package/client/lib/tinymce/plugins/codesample/plugin.min.js +9 -0
  49. package/client/lib/tinymce/plugins/directionality/index.js +7 -0
  50. package/client/lib/tinymce/plugins/directionality/plugin.js +670 -0
  51. package/client/lib/tinymce/plugins/directionality/plugin.min.js +1 -0
  52. package/client/lib/tinymce/plugins/emoticons/index.js +7 -0
  53. package/client/lib/tinymce/plugins/emoticons/js/emojiimages.js +1 -0
  54. package/client/lib/tinymce/plugins/emoticons/js/emojiimages.min.js +1 -0
  55. package/client/lib/tinymce/plugins/emoticons/js/emojis.js +1 -0
  56. package/client/lib/tinymce/plugins/emoticons/js/emojis.min.js +1 -0
  57. package/client/lib/tinymce/plugins/emoticons/plugin.js +809 -0
  58. package/client/lib/tinymce/plugins/emoticons/plugin.min.js +1 -0
  59. package/client/lib/tinymce/plugins/fullscreen/index.js +7 -0
  60. package/client/lib/tinymce/plugins/fullscreen/plugin.js +1607 -0
  61. package/client/lib/tinymce/plugins/fullscreen/plugin.min.js +1 -0
  62. package/client/lib/tinymce/plugins/help/index.js +7 -0
  63. package/client/lib/tinymce/plugins/help/js/i18n/keynav/ar.js +93 -0
  64. package/client/lib/tinymce/plugins/help/js/i18n/keynav/bg-BG.js +93 -0
  65. package/client/lib/tinymce/plugins/help/js/i18n/keynav/bg_BG.js +93 -0
  66. package/client/lib/tinymce/plugins/help/js/i18n/keynav/ca.js +93 -0
  67. package/client/lib/tinymce/plugins/help/js/i18n/keynav/cs.js +93 -0
  68. package/client/lib/tinymce/plugins/help/js/i18n/keynav/da.js +93 -0
  69. package/client/lib/tinymce/plugins/help/js/i18n/keynav/de.js +93 -0
  70. package/client/lib/tinymce/plugins/help/js/i18n/keynav/el.js +93 -0
  71. package/client/lib/tinymce/plugins/help/js/i18n/keynav/en.js +93 -0
  72. package/client/lib/tinymce/plugins/help/js/i18n/keynav/es.js +93 -0
  73. package/client/lib/tinymce/plugins/help/js/i18n/keynav/eu.js +93 -0
  74. package/client/lib/tinymce/plugins/help/js/i18n/keynav/fa.js +93 -0
  75. package/client/lib/tinymce/plugins/help/js/i18n/keynav/fi.js +93 -0
  76. package/client/lib/tinymce/plugins/help/js/i18n/keynav/fr-FR.js +93 -0
  77. package/client/lib/tinymce/plugins/help/js/i18n/keynav/fr_FR.js +93 -0
  78. package/client/lib/tinymce/plugins/help/js/i18n/keynav/he-IL.js +93 -0
  79. package/client/lib/tinymce/plugins/help/js/i18n/keynav/he_IL.js +93 -0
  80. package/client/lib/tinymce/plugins/help/js/i18n/keynav/hi.js +93 -0
  81. package/client/lib/tinymce/plugins/help/js/i18n/keynav/hr.js +93 -0
  82. package/client/lib/tinymce/plugins/help/js/i18n/keynav/hu-HU.js +93 -0
  83. package/client/lib/tinymce/plugins/help/js/i18n/keynav/hu_HU.js +93 -0
  84. package/client/lib/tinymce/plugins/help/js/i18n/keynav/id.js +93 -0
  85. package/client/lib/tinymce/plugins/help/js/i18n/keynav/it.js +93 -0
  86. package/client/lib/tinymce/plugins/help/js/i18n/keynav/ja.js +93 -0
  87. package/client/lib/tinymce/plugins/help/js/i18n/keynav/kk.js +93 -0
  88. package/client/lib/tinymce/plugins/help/js/i18n/keynav/ko-KR.js +93 -0
  89. package/client/lib/tinymce/plugins/help/js/i18n/keynav/ko_KR.js +93 -0
  90. package/client/lib/tinymce/plugins/help/js/i18n/keynav/ms.js +93 -0
  91. package/client/lib/tinymce/plugins/help/js/i18n/keynav/nb-NO.js +93 -0
  92. package/client/lib/tinymce/plugins/help/js/i18n/keynav/nb_NO.js +93 -0
  93. package/client/lib/tinymce/plugins/help/js/i18n/keynav/nl.js +93 -0
  94. package/client/lib/tinymce/plugins/help/js/i18n/keynav/pl.js +93 -0
  95. package/client/lib/tinymce/plugins/help/js/i18n/keynav/pt-BR.js +93 -0
  96. package/client/lib/tinymce/plugins/help/js/i18n/keynav/pt-PT.js +93 -0
  97. package/client/lib/tinymce/plugins/help/js/i18n/keynav/pt_BR.js +93 -0
  98. package/client/lib/tinymce/plugins/help/js/i18n/keynav/pt_PT.js +93 -0
  99. package/client/lib/tinymce/plugins/help/js/i18n/keynav/ro.js +93 -0
  100. package/client/lib/tinymce/plugins/help/js/i18n/keynav/ru.js +93 -0
  101. package/client/lib/tinymce/plugins/help/js/i18n/keynav/sk.js +93 -0
  102. package/client/lib/tinymce/plugins/help/js/i18n/keynav/sl-SI.js +93 -0
  103. package/client/lib/tinymce/plugins/help/js/i18n/keynav/sl_SI.js +93 -0
  104. package/client/lib/tinymce/plugins/help/js/i18n/keynav/sv-SE.js +93 -0
  105. package/client/lib/tinymce/plugins/help/js/i18n/keynav/sv_SE.js +93 -0
  106. package/client/lib/tinymce/plugins/help/js/i18n/keynav/th-TH.js +93 -0
  107. package/client/lib/tinymce/plugins/help/js/i18n/keynav/th_TH.js +93 -0
  108. package/client/lib/tinymce/plugins/help/js/i18n/keynav/tr.js +93 -0
  109. package/client/lib/tinymce/plugins/help/js/i18n/keynav/uk.js +93 -0
  110. package/client/lib/tinymce/plugins/help/js/i18n/keynav/vi.js +93 -0
  111. package/client/lib/tinymce/plugins/help/js/i18n/keynav/zh-CN.js +87 -0
  112. package/client/lib/tinymce/plugins/help/js/i18n/keynav/zh-TW.js +93 -0
  113. package/client/lib/tinymce/plugins/help/js/i18n/keynav/zh_CN.js +87 -0
  114. package/client/lib/tinymce/plugins/help/js/i18n/keynav/zh_TW.js +93 -0
  115. package/client/lib/tinymce/plugins/help/plugin.js +827 -0
  116. package/client/lib/tinymce/plugins/help/plugin.min.js +1 -0
  117. package/client/lib/tinymce/plugins/image/index.js +7 -0
  118. package/client/lib/tinymce/plugins/image/plugin.js +1692 -0
  119. package/client/lib/tinymce/plugins/image/plugin.min.js +1 -0
  120. package/client/lib/tinymce/plugins/importcss/index.js +7 -0
  121. package/client/lib/tinymce/plugins/importcss/plugin.js +401 -0
  122. package/client/lib/tinymce/plugins/importcss/plugin.min.js +1 -0
  123. package/client/lib/tinymce/plugins/insertdatetime/index.js +7 -0
  124. package/client/lib/tinymce/plugins/insertdatetime/plugin.js +187 -0
  125. package/client/lib/tinymce/plugins/insertdatetime/plugin.min.js +1 -0
  126. package/client/lib/tinymce/plugins/link/index.js +7 -0
  127. package/client/lib/tinymce/plugins/link/plugin.js +1711 -0
  128. package/client/lib/tinymce/plugins/link/plugin.min.js +1 -0
  129. package/client/lib/tinymce/plugins/lists/index.js +7 -0
  130. package/client/lib/tinymce/plugins/lists/plugin.js +602 -0
  131. package/client/lib/tinymce/plugins/lists/plugin.min.js +1 -0
  132. package/client/lib/tinymce/plugins/media/index.js +7 -0
  133. package/client/lib/tinymce/plugins/media/plugin.js +1442 -0
  134. package/client/lib/tinymce/plugins/media/plugin.min.js +1 -0
  135. package/client/lib/tinymce/plugins/nonbreaking/index.js +7 -0
  136. package/client/lib/tinymce/plugins/nonbreaking/plugin.js +128 -0
  137. package/client/lib/tinymce/plugins/nonbreaking/plugin.min.js +1 -0
  138. package/client/lib/tinymce/plugins/pagebreak/index.js +7 -0
  139. package/client/lib/tinymce/plugins/pagebreak/plugin.js +123 -0
  140. package/client/lib/tinymce/plugins/pagebreak/plugin.min.js +1 -0
  141. package/client/lib/tinymce/plugins/preview/index.js +7 -0
  142. package/client/lib/tinymce/plugins/preview/plugin.js +878 -0
  143. package/client/lib/tinymce/plugins/preview/plugin.min.js +1 -0
  144. package/client/lib/tinymce/plugins/quickbars/index.js +7 -0
  145. package/client/lib/tinymce/plugins/quickbars/plugin.js +654 -0
  146. package/client/lib/tinymce/plugins/quickbars/plugin.min.js +1 -0
  147. package/client/lib/tinymce/plugins/save/index.js +7 -0
  148. package/client/lib/tinymce/plugins/save/plugin.js +136 -0
  149. package/client/lib/tinymce/plugins/save/plugin.min.js +1 -0
  150. package/client/lib/tinymce/plugins/searchreplace/index.js +7 -0
  151. package/client/lib/tinymce/plugins/searchreplace/plugin.js +1367 -0
  152. package/client/lib/tinymce/plugins/searchreplace/plugin.min.js +1 -0
  153. package/client/lib/tinymce/plugins/table/index.js +7 -0
  154. package/client/lib/tinymce/plugins/table/plugin.js +4011 -0
  155. package/client/lib/tinymce/plugins/table/plugin.min.js +1 -0
  156. package/client/lib/tinymce/plugins/visualblocks/index.js +7 -0
  157. package/client/lib/tinymce/plugins/visualblocks/plugin.js +106 -0
  158. package/client/lib/tinymce/plugins/visualblocks/plugin.min.js +1 -0
  159. package/client/lib/tinymce/plugins/visualchars/index.js +7 -0
  160. package/client/lib/tinymce/plugins/visualchars/plugin.js +808 -0
  161. package/client/lib/tinymce/plugins/visualchars/plugin.min.js +1 -0
  162. package/client/lib/tinymce/plugins/wordcount/index.js +7 -0
  163. package/client/lib/tinymce/plugins/wordcount/plugin.js +586 -0
  164. package/client/lib/tinymce/plugins/wordcount/plugin.min.js +1 -0
  165. package/client/lib/tinymce/skins/content/dark/content.css +75 -0
  166. package/client/lib/tinymce/skins/content/dark/content.js +10 -0
  167. package/client/lib/tinymce/skins/content/dark/content.min.css +10 -0
  168. package/client/lib/tinymce/skins/content/dark/content.min.ts +3 -0
  169. package/client/lib/tinymce/skins/content/dark/content.ts +3 -0
  170. package/client/lib/tinymce/skins/content/default/content.css +70 -0
  171. package/client/lib/tinymce/skins/content/default/content.js +10 -0
  172. package/client/lib/tinymce/skins/content/default/content.min.css +10 -0
  173. package/client/lib/tinymce/skins/content/default/content.min.ts +3 -0
  174. package/client/lib/tinymce/skins/content/default/content.ts +3 -0
  175. package/client/lib/tinymce/skins/content/document/content.css +75 -0
  176. package/client/lib/tinymce/skins/content/document/content.js +10 -0
  177. package/client/lib/tinymce/skins/content/document/content.min.css +10 -0
  178. package/client/lib/tinymce/skins/content/document/content.min.ts +3 -0
  179. package/client/lib/tinymce/skins/content/document/content.ts +3 -0
  180. package/client/lib/tinymce/skins/content/tinymce-5/content.css +70 -0
  181. package/client/lib/tinymce/skins/content/tinymce-5/content.js +10 -0
  182. package/client/lib/tinymce/skins/content/tinymce-5/content.min.css +10 -0
  183. package/client/lib/tinymce/skins/content/tinymce-5/content.min.ts +3 -0
  184. package/client/lib/tinymce/skins/content/tinymce-5/content.ts +3 -0
  185. package/client/lib/tinymce/skins/content/tinymce-5-dark/content.css +75 -0
  186. package/client/lib/tinymce/skins/content/tinymce-5-dark/content.js +10 -0
  187. package/client/lib/tinymce/skins/content/tinymce-5-dark/content.min.css +10 -0
  188. package/client/lib/tinymce/skins/content/tinymce-5-dark/content.min.ts +3 -0
  189. package/client/lib/tinymce/skins/content/tinymce-5-dark/content.ts +3 -0
  190. package/client/lib/tinymce/skins/content/writer/content.css +71 -0
  191. package/client/lib/tinymce/skins/content/writer/content.js +10 -0
  192. package/client/lib/tinymce/skins/content/writer/content.min.css +10 -0
  193. package/client/lib/tinymce/skins/content/writer/content.min.ts +3 -0
  194. package/client/lib/tinymce/skins/content/writer/content.ts +3 -0
  195. package/client/lib/tinymce/skins/ui/oxide/content.css +1322 -0
  196. package/client/lib/tinymce/skins/ui/oxide/content.inline.css +1316 -0
  197. package/client/lib/tinymce/skins/ui/oxide/content.inline.js +10 -0
  198. package/client/lib/tinymce/skins/ui/oxide/content.inline.min.css +10 -0
  199. package/client/lib/tinymce/skins/ui/oxide/content.inline.min.ts +136 -0
  200. package/client/lib/tinymce/skins/ui/oxide/content.inline.ts +136 -0
  201. package/client/lib/tinymce/skins/ui/oxide/content.js +10 -0
  202. package/client/lib/tinymce/skins/ui/oxide/content.min.css +10 -0
  203. package/client/lib/tinymce/skins/ui/oxide/content.min.ts +136 -0
  204. package/client/lib/tinymce/skins/ui/oxide/content.ts +136 -0
  205. package/client/lib/tinymce/skins/ui/oxide/skin.css +7109 -0
  206. package/client/lib/tinymce/skins/ui/oxide/skin.js +1 -0
  207. package/client/lib/tinymce/skins/ui/oxide/skin.min.css +1 -0
  208. package/client/lib/tinymce/skins/ui/oxide/skin.min.ts +637 -0
  209. package/client/lib/tinymce/skins/ui/oxide/skin.shadowdom.css +30 -0
  210. package/client/lib/tinymce/skins/ui/oxide/skin.shadowdom.js +1 -0
  211. package/client/lib/tinymce/skins/ui/oxide/skin.shadowdom.min.css +1 -0
  212. package/client/lib/tinymce/skins/ui/oxide/skin.shadowdom.min.ts +9 -0
  213. package/client/lib/tinymce/skins/ui/oxide/skin.shadowdom.ts +9 -0
  214. package/client/lib/tinymce/skins/ui/oxide/skin.ts +637 -0
  215. package/client/lib/tinymce/skins/ui/oxide-dark/content.css +1310 -0
  216. package/client/lib/tinymce/skins/ui/oxide-dark/content.inline.css +1316 -0
  217. package/client/lib/tinymce/skins/ui/oxide-dark/content.inline.js +10 -0
  218. package/client/lib/tinymce/skins/ui/oxide-dark/content.inline.min.css +10 -0
  219. package/client/lib/tinymce/skins/ui/oxide-dark/content.inline.min.ts +136 -0
  220. package/client/lib/tinymce/skins/ui/oxide-dark/content.inline.ts +136 -0
  221. package/client/lib/tinymce/skins/ui/oxide-dark/content.js +10 -0
  222. package/client/lib/tinymce/skins/ui/oxide-dark/content.min.css +10 -0
  223. package/client/lib/tinymce/skins/ui/oxide-dark/content.min.ts +136 -0
  224. package/client/lib/tinymce/skins/ui/oxide-dark/content.ts +136 -0
  225. package/client/lib/tinymce/skins/ui/oxide-dark/skin.css +7112 -0
  226. package/client/lib/tinymce/skins/ui/oxide-dark/skin.js +1 -0
  227. package/client/lib/tinymce/skins/ui/oxide-dark/skin.min.css +1 -0
  228. package/client/lib/tinymce/skins/ui/oxide-dark/skin.min.ts +637 -0
  229. package/client/lib/tinymce/skins/ui/oxide-dark/skin.shadowdom.css +30 -0
  230. package/client/lib/tinymce/skins/ui/oxide-dark/skin.shadowdom.js +1 -0
  231. package/client/lib/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +1 -0
  232. package/client/lib/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.ts +9 -0
  233. package/client/lib/tinymce/skins/ui/oxide-dark/skin.shadowdom.ts +9 -0
  234. package/client/lib/tinymce/skins/ui/oxide-dark/skin.ts +637 -0
  235. package/client/lib/tinymce/skins/ui/tinymce-5/content.css +1322 -0
  236. package/client/lib/tinymce/skins/ui/tinymce-5/content.inline.css +1316 -0
  237. package/client/lib/tinymce/skins/ui/tinymce-5/content.inline.js +10 -0
  238. package/client/lib/tinymce/skins/ui/tinymce-5/content.inline.min.css +10 -0
  239. package/client/lib/tinymce/skins/ui/tinymce-5/content.inline.min.ts +136 -0
  240. package/client/lib/tinymce/skins/ui/tinymce-5/content.inline.ts +136 -0
  241. package/client/lib/tinymce/skins/ui/tinymce-5/content.js +10 -0
  242. package/client/lib/tinymce/skins/ui/tinymce-5/content.min.css +10 -0
  243. package/client/lib/tinymce/skins/ui/tinymce-5/content.min.ts +136 -0
  244. package/client/lib/tinymce/skins/ui/tinymce-5/content.ts +136 -0
  245. package/client/lib/tinymce/skins/ui/tinymce-5/skin.css +7228 -0
  246. package/client/lib/tinymce/skins/ui/tinymce-5/skin.js +1 -0
  247. package/client/lib/tinymce/skins/ui/tinymce-5/skin.min.css +1 -0
  248. package/client/lib/tinymce/skins/ui/tinymce-5/skin.min.ts +638 -0
  249. package/client/lib/tinymce/skins/ui/tinymce-5/skin.shadowdom.css +30 -0
  250. package/client/lib/tinymce/skins/ui/tinymce-5/skin.shadowdom.js +1 -0
  251. package/client/lib/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css +1 -0
  252. package/client/lib/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.ts +9 -0
  253. package/client/lib/tinymce/skins/ui/tinymce-5/skin.shadowdom.ts +9 -0
  254. package/client/lib/tinymce/skins/ui/tinymce-5/skin.ts +638 -0
  255. package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.css +1310 -0
  256. package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.inline.css +1316 -0
  257. package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.inline.js +10 -0
  258. package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css +10 -0
  259. package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.inline.min.ts +136 -0
  260. package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.inline.ts +136 -0
  261. package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.js +10 -0
  262. package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.min.css +10 -0
  263. package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.min.ts +136 -0
  264. package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.ts +136 -0
  265. package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.css +7228 -0
  266. package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.js +1 -0
  267. package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.min.css +1 -0
  268. package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.min.ts +638 -0
  269. package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.css +30 -0
  270. package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js +1 -0
  271. package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css +1 -0
  272. package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.ts +9 -0
  273. package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.ts +9 -0
  274. package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.ts +638 -0
  275. package/client/lib/tinymce/themes/silver/index.js +7 -0
  276. package/client/lib/tinymce/themes/silver/theme.js +34829 -0
  277. package/client/lib/tinymce/themes/silver/theme.min.js +1 -0
  278. package/client/lib/tinymce/tinymce.js +41682 -0
  279. package/client/lib/tinymce/tinymce.min.js +10 -0
  280. package/package.json +5 -2
@@ -0,0 +1 @@
1
+ !function(){"use strict";const t=t=>e=>(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(n=o=t,(r=String).prototype.isPrototypeOf(n)||o.constructor?.name===r.name)?"string":e;var n,o,r})(e)===t,e=t=>e=>typeof e===t,n=t("string"),o=t("object"),r=t=>null===t;const s=e("boolean"),a=e("function"),i=e("number");class l{tag;value;static singletonNone=new l(!1);constructor(t,e){this.tag=t,this.value=e}static some(t){return new l(!0,t)}static none(){return l.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?l.some(t(this.value)):l.none()}bind(t){return this.tag?t(this.value):l.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:l.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(t??"Called getOrDie on None")}static from(t){return null==t?l.none():l.some(t)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}Array.prototype.slice;const c=(t,e)=>{for(let n=0,o=t.length;n<o;n++)e(t[n],n)};a(Array.from)&&Array.from;const u=Object.keys,d=(t,e)=>{const n=u(t);for(let o=0,r=n.length;o<r;o++){const r=n[o];e(t[r],r)}},h="undefined"!=typeof window?window:Function("return this;")(),m=(t,e)=>((t,e)=>{let n=null!=e?e:h;for(let e=0;e<t.length&&null!=n;++e)n=n[t[e]];return n})(t.split("."),e);var g=tinymce.util.Tools.resolve("tinymce.PluginManager");const v=t=>{if(null==t)throw new Error("Node cannot be null or undefined");return{dom:t}},f=v,p=Object.getPrototypeOf,y=t=>{const e=m("ownerDocument.defaultView",t);return o(t)&&((t=>((t,e)=>{const n=((t,e)=>m(t,e))(t,e);if(null==n)throw new Error(t+" not available on this browser");return n})("HTMLElement",t))(e).prototype.isPrototypeOf(t)||/^HTML\w*Element$/.test(p(t).constructor.name))},b=t=>t.dom.nodeValue,w=t=>e=>(t=>t.dom.nodeType)(e)===t,A=t=>k(t)&&y(t.dom),k=w(1),N=w(3),T=(t,e,o)=>{((t,e,o)=>{if(!(n(o)||s(o)||i(o)))throw console.error("Invalid call to Attribute.set. Key ",e,":: Value ",o,":: Element ",t),new Error("Attribute value was not simple");t.setAttribute(e,o+"")})(t.dom,e,o)},C=(t,e)=>{t.dom.removeAttribute(e)},E=(t,e)=>{const n=((t,e)=>{const n=t.dom.getAttribute(e);return null===n?void 0:n})(t,e);return void 0===n||""===n?[]:n.split(" ")},O=t=>void 0!==t.dom.classList,L=t=>t.dom.contentEditable,V={"\xa0":"nbsp","\xad":"shy"},j=(t,e)=>{let n="";return d(t,(t,e)=>{n+=e}),new RegExp("["+n+"]",e?"g":"")},B=j(V),S=j(V,!0),x=(t=>{let e="";return d(t,t=>{e&&(e+=","),e+="span.mce-"+t}),e})(V),M="mce-nbsp",P=t=>'<span data-mce-bogus="1" class="mce-'+V[t]+'">'+t+"</span>",_=t=>"span"===t.nodeName.toLowerCase()&&t.classList.contains("mce-nbsp-wrap"),D=t=>{const e=b(t);return N(t)&&n(e)&&B.test(e)},H=(t,e,n)=>{let o=[];const r=((t,e)=>{const n=t.length,o=new Array(n);for(let r=0;r<n;r++){const n=t[r];o[r]=e(n,r)}return o})(t.dom.childNodes,f);return c(r,t=>{var r;n&&(_((r=t).dom)||!(t=>A(t)&&"false"===L(t))(r))&&e(t)&&(o=o.concat([t])),o=o.concat(H(t,e,((t,e)=>{if(A(t)&&!_(t.dom)){const e=L(t);if("true"===e)return!0;if("false"===e)return!1}return e})(t,n)))}),o},I=(t,e)=>{const n=t.dom,o=H(f(e),D,t.dom.isEditable(e));c(o,e=>{const o=e.dom.parentNode;if(_(o))r=f(o),s=M,O(r)?r.dom.classList.add(s):((t,e)=>{((t,e,n)=>{const o=E(t,e).concat([n]);T(t,e,o.join(" "))})(t,"class",e)})(r,s);else{const o=n.encode(b(e)??"").replace(S,P),r=n.create("div",{},o);let s;for(;s=r.lastChild;)n.insertAfter(s,e.dom);t.dom.remove(e.dom)}var r,s})},$=(t,e)=>{const n=t.dom.select(x,e);c(n,e=>{var n,o;_(e)?(n=f(e),o=M,O(n)?n.dom.classList.remove(o):((t,e)=>{((t,e,n)=>{const o=((t,e)=>{const n=[];for(let o=0,r=t.length;o<r;o++){const r=t[o];e(r)&&n.push(r)}return n})(E(t,e),t=>t!==n);o.length>0?T(t,e,o.join(" ")):C(t,e)})(t,"class",e)})(n,o),(t=>{const e=O(t)?t.dom.classList:(t=>E(t,"class"))(t);0===e.length&&C(t,"class")})(n)):t.dom.remove(e,!0)})},F=t=>{const e=t.getBody(),n=t.selection.getBookmark();let o=((t,e)=>{for(;t.parentNode;){if(t.parentNode===e)return e;t=t.parentNode}})(t.selection.getNode(),e);o=void 0!==o?o:e,$(t,o),I(t,o),t.selection.moveToBookmark(n)},K=(t,e)=>{((t,e)=>{t.dispatch("VisualChars",{state:e})})(t,e.get());const n=t.getBody();!0===e.get()?I(t,n):$(t,n)},R=t=>t.options.get("visualchars_default_state");const U=(t,e)=>{const n=(t=>{let e=null;return{cancel:()=>{r(e)||(clearTimeout(e),e=null)},throttle:(...n)=>{r(e)&&(e=setTimeout(()=>{e=null,t.apply(null,n)},300))}}})(()=>{F(t)});t.on("keydown",o=>{!0===e.get()&&(13===o.keyCode?F(t):n.throttle())}),t.on("remove",n.cancel)},q=(t,e)=>n=>{n.setActive(e.get());const o=t=>n.setActive(t.state);return t.on("VisualChars",o),()=>t.off("VisualChars",o)};g.add("visualchars",t=>{(t=>{(0,t.options.register)("visualchars_default_state",{processor:"boolean",default:!1})})(t);const e=(t=>{let e=t;return{get:()=>e,set:t=>{e=t}}})(R(t));return((t,e)=>{t.addCommand("mceVisualChars",()=>{((t,e)=>{e.set(!e.get());const n=t.selection.getBookmark();K(t,e),t.selection.moveToBookmark(n)})(t,e)})})(t,e),((t,e)=>{const n=()=>t.execCommand("mceVisualChars");t.ui.registry.addToggleButton("visualchars",{tooltip:"Show invisible characters",icon:"visualchars",onAction:n,onSetup:q(t,e),context:"any"}),t.ui.registry.addToggleMenuItem("visualchars",{text:"Show invisible characters",icon:"visualchars",onAction:n,onSetup:q(t,e),context:"any"})})(t,e),U(t,e),((t,e)=>{t.on("init",()=>{K(t,e)})})(t,e),(t=>({isEnabled:()=>t.get()}))(e)})}();
@@ -0,0 +1,7 @@
1
+ // Exports the "wordcount" plugin for usage with module loaders
2
+ // Usage:
3
+ // CommonJS:
4
+ // require('tinymce/plugins/wordcount')
5
+ // ES2015:
6
+ // import 'tinymce/plugins/wordcount'
7
+ require('./plugin.js');
@@ -0,0 +1,586 @@
1
+ /**
2
+ * TinyMCE version 8.5.0 (2026-04-29)
3
+ */
4
+
5
+ (function () {
6
+ 'use strict';
7
+
8
+ var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');
9
+
10
+ /* eslint-disable @typescript-eslint/no-wrapper-object-types */
11
+ const eq = (t) => (a) => t === a;
12
+ const isNull = eq(null);
13
+
14
+ const identity = (x) => {
15
+ return x;
16
+ };
17
+
18
+ const map = (xs, f) => {
19
+ // pre-allocating array size when it's guaranteed to be known
20
+ // http://jsperf.com/push-allocated-vs-dynamic/22
21
+ const len = xs.length;
22
+ const r = new Array(len);
23
+ for (let i = 0; i < len; i++) {
24
+ const x = xs[i];
25
+ r[i] = f(x, i);
26
+ }
27
+ return r;
28
+ };
29
+ const filter = (xs, pred) => {
30
+ const r = [];
31
+ for (let i = 0, len = xs.length; i < len; i++) {
32
+ const x = xs[i];
33
+ if (pred(x, i)) {
34
+ r.push(x);
35
+ }
36
+ }
37
+ return r;
38
+ };
39
+
40
+ /**
41
+ * HashSet - Immutable Set Operations
42
+ *
43
+ * An immutable, unordered collection of unique values built on JavaScript's native Set.
44
+ * All operations return new Sets, leaving the original unchanged.
45
+ *
46
+ * ## When to Use HashSet
47
+ *
48
+ * Choose HashSet over other collections when:
49
+ * - You need to ensure elements are unique
50
+ * - You frequently need to check if an element exists in the collection
51
+ * - You need to perform set operations like union, intersection, and difference
52
+ * - The order of elements doesn't matter to your use case
53
+ * - You want immutable, side-effect-free operations
54
+ *
55
+ * Choose other collections when:
56
+ * - You need to maintain insertion order (use arrays)
57
+ * - You need key-value associations (use objects or Map)
58
+ * - You need to frequently access elements by index (use arrays)
59
+ * - You need maximum performance with many modifications (consider direct Set mutation)
60
+ *
61
+ * ## Common Use Cases
62
+ *
63
+ * - Tracking unique items (e.g., users who have completed an action)
64
+ * - Efficiently testing for membership in a collection
65
+ * - Performing set theory operations (union, intersection, difference)
66
+ * - Eliminating duplicates from a collection
67
+ * - Functional programming patterns where immutability is important
68
+ *
69
+ * ## Performance Characteristics
70
+ *
71
+ * - Lookup: O(1) average - Check if a value exists
72
+ * - Insertion: O(1) average - Add a value (returns new Set)
73
+ * - Removal: O(1) average - Remove a value (returns new Set)
74
+ * - Iteration: O(n) - Iterate over all values
75
+ * - Set operations: O(n) - Union, intersection, difference
76
+ *
77
+ * Note: Because this is an immutable implementation, each modification creates a new Set.
78
+ * If you need to perform many sequential modifications, consider using native Set directly
79
+ * and converting to/from HashSet operations as needed.
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * import * as HashSet from './HashSet';
84
+ *
85
+ * // Create a Set
86
+ * const tags = HashSet.make('javascript', 'typescript', 'react');
87
+ *
88
+ * // Add an element (immutable - returns new Set)
89
+ * const moreTags = HashSet.add(tags, 'node');
90
+ *
91
+ * // Check membership
92
+ * const hasReact = HashSet.contains(moreTags, 'react'); // true
93
+ *
94
+ * // Set operations
95
+ * const frontendTags = HashSet.make('react', 'vue', 'angular');
96
+ * const common = HashSet.intersection(moreTags, frontendTags); // Set { 'react' }
97
+ *
98
+ * // Get unique values from array
99
+ * const unique = HashSet.fromArray([1, 2, 2, 3, 3, 3]); // Set { 1, 2, 3 }
100
+ * ```
101
+ *
102
+ * @module HashSet
103
+ */
104
+ /**
105
+ * Creates a Set from multiple values.
106
+ * Duplicate values will be automatically removed.
107
+ *
108
+ * @param values - The values to include in the set
109
+ * @returns A new Set containing all unique values
110
+ */
111
+ const make = (...values) => new Set(values);
112
+ /**
113
+ * Checks if a value exists in the set.
114
+ *
115
+ * @param set - The set to search
116
+ * @param value - The value to look for
117
+ * @returns true if the value is in the set, false otherwise
118
+ */
119
+ const contains = (set, value) => set.has(value);
120
+
121
+ // Run a function fn after rate ms. If another invocation occurs
122
+ // during the time it is waiting, ignore it completely.
123
+ const first = (fn, rate) => {
124
+ let timer = null;
125
+ const cancel = () => {
126
+ if (!isNull(timer)) {
127
+ clearTimeout(timer);
128
+ timer = null;
129
+ }
130
+ };
131
+ const throttle = (...args) => {
132
+ if (isNull(timer)) {
133
+ timer = setTimeout(() => {
134
+ timer = null;
135
+ fn.apply(null, args);
136
+ }, rate);
137
+ }
138
+ };
139
+ return {
140
+ cancel,
141
+ throttle
142
+ };
143
+ };
144
+
145
+ const removeZwsp$1 = (s) => s.replace(/\uFEFF/g, '');
146
+
147
+ /* eslint-disable max-len */
148
+ const punctuationStr = `[~№|!-*+-\\/:;?@\\[-\`{}\u00A1\u00AB\u00B7\u00BB\u00BF;\u00B7\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1361-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u3008\u3009\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30\u2E31\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]`;
149
+ const regExps = {
150
+ aletter: '[A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F3\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1A00-\u1A16\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BC0-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790\uA791\uA7A0-\uA7A9\uA7FA-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]',
151
+ midnumlet: `[-'\\.\u2018\u2019\u2024\uFE52\uFF07\uFF0E]`,
152
+ midletter: '[:\u00B7\u00B7\u05F4\u2027\uFE13\uFE55\uFF1A]',
153
+ midnum: '[±+*/,;;\u0589\u060C\u060D\u066C\u07F8\u2044\uFE10\uFE14\uFE50\uFE54\uFF0C\uFF1B]',
154
+ numeric: '[0-9\u0660-\u0669\u066B\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uAA50-\uAA59\uABF0-\uABF9]',
155
+ cr: '\\r',
156
+ lf: '\\n',
157
+ newline: '[\u000B\u000C\u0085\u2028\u2029]',
158
+ extend: '[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0900-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C82\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D02\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B6-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAA\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2\u1DC0-\u1DE6\u1DFC-\u1DFF\u200C\u200D\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA67C\uA67D\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE26\uFF9E\uFF9F]',
159
+ format: '[\u00AD\u0600-\u0603\u06DD\u070F\u17B4\u17B5\u200E\u200F\u202A-\u202E\u2060-\u2064\u206A-\u206F\uFEFF\uFFF9-\uFFFB]',
160
+ katakana: '[\u3031-\u3035\u309B\u309C\u30A0-\u30FA\u30FC-\u30FF\u31F0-\u31FF\u32D0-\u32FE\u3300-\u3357\uFF66-\uFF9D]',
161
+ extendnumlet: '[=_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F\u2200-\u22FF\u003c\u003e]',
162
+ punctuation: punctuationStr
163
+ };
164
+ /* eslint-enable max-len */
165
+ const characterIndices = {
166
+ ALETTER: 0,
167
+ MIDNUMLET: 1,
168
+ MIDLETTER: 2,
169
+ MIDNUM: 3,
170
+ NUMERIC: 4,
171
+ CR: 5,
172
+ LF: 6,
173
+ NEWLINE: 7,
174
+ EXTEND: 8,
175
+ FORMAT: 9,
176
+ KATAKANA: 10,
177
+ EXTENDNUMLET: 11,
178
+ AT: 12,
179
+ OTHER: 13
180
+ };
181
+ // RegExp objects generated from code point data. Each regex matches a single
182
+ // character against a set of Unicode code points. The index of each item in
183
+ // this array must match its corresponding code point constant value defined
184
+ // above.
185
+ const SETS$1 = [
186
+ new RegExp(regExps.aletter),
187
+ new RegExp(regExps.midnumlet),
188
+ new RegExp(regExps.midletter),
189
+ new RegExp(regExps.midnum),
190
+ new RegExp(regExps.numeric),
191
+ new RegExp(regExps.cr),
192
+ new RegExp(regExps.lf),
193
+ new RegExp(regExps.newline),
194
+ new RegExp(regExps.extend),
195
+ new RegExp(regExps.format),
196
+ new RegExp(regExps.katakana),
197
+ new RegExp(regExps.extendnumlet),
198
+ new RegExp('@')
199
+ ];
200
+ const EMPTY_STRING$1 = '';
201
+ const PUNCTUATION$1 = new RegExp('^' + regExps.punctuation + '$');
202
+ const WHITESPACE$1 = /^\s+$/;
203
+
204
+ const SETS = SETS$1;
205
+ const OTHER = characterIndices.OTHER;
206
+ const getType = (char) => {
207
+ let type = OTHER;
208
+ const setsLength = SETS.length;
209
+ for (let j = 0; j < setsLength; ++j) {
210
+ const set = SETS[j];
211
+ if (set && set.test(char)) {
212
+ type = j;
213
+ break;
214
+ }
215
+ }
216
+ return type;
217
+ };
218
+ const memoize = (func) => {
219
+ const cache = {};
220
+ return (char) => {
221
+ if (cache[char]) {
222
+ return cache[char];
223
+ }
224
+ else {
225
+ const result = func(char);
226
+ cache[char] = result;
227
+ return result;
228
+ }
229
+ };
230
+ };
231
+ const classify = (characters) => {
232
+ const memoized = memoize(getType);
233
+ return map(characters, memoized);
234
+ };
235
+
236
+ const isWordBoundary = (map, index) => {
237
+ const type = map[index];
238
+ const nextType = map[index + 1];
239
+ if (index < 0 || (index > map.length - 1 && index !== 0)) {
240
+ return false;
241
+ }
242
+ // WB5. Don't break between most letters.
243
+ if (type === characterIndices.ALETTER && nextType === characterIndices.ALETTER) {
244
+ return false;
245
+ }
246
+ const nextNextType = map[index + 2];
247
+ // WB6. Don't break letters across certain punctuation.
248
+ if (type === characterIndices.ALETTER &&
249
+ (nextType === characterIndices.MIDLETTER || nextType === characterIndices.MIDNUMLET || nextType === characterIndices.AT) &&
250
+ nextNextType === characterIndices.ALETTER) {
251
+ return false;
252
+ }
253
+ const prevType = map[index - 1];
254
+ // WB7. Don't break letters across certain punctuation.
255
+ if ((type === characterIndices.MIDLETTER || type === characterIndices.MIDNUMLET || nextType === characterIndices.AT) &&
256
+ nextType === characterIndices.ALETTER &&
257
+ prevType === characterIndices.ALETTER) {
258
+ return false;
259
+ }
260
+ // WB8/WB9/WB10. Don't break inside sequences of digits or digits
261
+ // adjacent to letters.
262
+ if ((type === characterIndices.NUMERIC || type === characterIndices.ALETTER) &&
263
+ (nextType === characterIndices.NUMERIC || nextType === characterIndices.ALETTER)) {
264
+ return false;
265
+ }
266
+ // WB11. Don't break inside numeric sequences like "3.2" or
267
+ // "3,456.789".
268
+ if ((type === characterIndices.MIDNUM || type === characterIndices.MIDNUMLET) &&
269
+ nextType === characterIndices.NUMERIC &&
270
+ prevType === characterIndices.NUMERIC) {
271
+ return false;
272
+ }
273
+ // WB12. Don't break inside numeric sequences like "3.2" or
274
+ // "3,456.789".
275
+ if (type === characterIndices.NUMERIC &&
276
+ (nextType === characterIndices.MIDNUM || nextType === characterIndices.MIDNUMLET) &&
277
+ nextNextType === characterIndices.NUMERIC) {
278
+ return false;
279
+ }
280
+ // WB4. Ignore format and extend characters.
281
+ if ((type === characterIndices.EXTEND || type === characterIndices.FORMAT) &&
282
+ (nextType === characterIndices.ALETTER || nextType === characterIndices.NUMERIC || nextType === characterIndices.KATAKANA ||
283
+ nextType === characterIndices.EXTEND || nextType === characterIndices.FORMAT)
284
+ ||
285
+ (nextType === characterIndices.EXTEND ||
286
+ // TINY-9654: Only ignore format characters if they do not precede a word boundary. Since some format characters overlap with whitespace characters (ex: \ufeff) and
287
+ // our word extraction logic excludes whitespace characters, if a whitespace-overlapping format character that precedes a word boundary is not split on, whichever word
288
+ // it is a part of will not be added to the list of extracted words, causing inaccuracies.
289
+ nextType === characterIndices.FORMAT && (nextNextType === characterIndices.ALETTER || nextNextType === characterIndices.NUMERIC || nextNextType === characterIndices.KATAKANA || nextNextType === characterIndices.EXTEND || nextNextType === characterIndices.FORMAT))
290
+ && (type === characterIndices.ALETTER || type === characterIndices.NUMERIC || type === characterIndices.KATAKANA || type === characterIndices.EXTEND || type === characterIndices.FORMAT)) {
291
+ return false;
292
+ }
293
+ // WB3. Don't break inside CRLF.
294
+ if (type === characterIndices.CR && nextType === characterIndices.LF) {
295
+ return false;
296
+ }
297
+ // WB3a. Break before newlines (including CR and LF).
298
+ if (type === characterIndices.NEWLINE || type === characterIndices.CR || type === characterIndices.LF) {
299
+ return true;
300
+ }
301
+ // WB3b. Break after newlines (including CR and LF).
302
+ if (nextType === characterIndices.NEWLINE || nextType === characterIndices.CR || nextType === characterIndices.LF) {
303
+ return true;
304
+ }
305
+ // WB13. Don't break between Katakana characters.
306
+ if (type === characterIndices.KATAKANA && nextType === characterIndices.KATAKANA) {
307
+ return false;
308
+ }
309
+ // WB13a. Don't break from extenders.
310
+ if (nextType === characterIndices.EXTENDNUMLET &&
311
+ (type === characterIndices.ALETTER || type === characterIndices.NUMERIC || type === characterIndices.KATAKANA ||
312
+ type === characterIndices.EXTENDNUMLET)) {
313
+ return false;
314
+ }
315
+ // WB13b. Don't break from extenders.
316
+ if (type === characterIndices.EXTENDNUMLET &&
317
+ (nextType === characterIndices.ALETTER || nextType === characterIndices.NUMERIC ||
318
+ nextType === characterIndices.KATAKANA)) {
319
+ return false;
320
+ }
321
+ if (type === characterIndices.AT) {
322
+ return false;
323
+ }
324
+ // Break after any character not covered by the rules above.
325
+ return true;
326
+ };
327
+
328
+ const EMPTY_STRING = EMPTY_STRING$1;
329
+ const WHITESPACE = WHITESPACE$1;
330
+ const PUNCTUATION = PUNCTUATION$1;
331
+ const isProtocol = (str) => str === 'http' || str === 'https';
332
+ const findWordEnd = (characters, startIndex) => {
333
+ let i;
334
+ for (i = startIndex; i < characters.length; i++) {
335
+ if (WHITESPACE.test(characters[i])) {
336
+ break;
337
+ }
338
+ }
339
+ return i;
340
+ };
341
+ const findUrlEnd = (characters, startIndex) => {
342
+ const endIndex = findWordEnd(characters, startIndex + 1);
343
+ const peakedWord = characters.slice(startIndex + 1, endIndex).join(EMPTY_STRING);
344
+ return peakedWord.substr(0, 3) === '://' ? endIndex : startIndex;
345
+ };
346
+ const findWordsWithIndices = (chars, sChars, characterMap, options) => {
347
+ const words = [];
348
+ const indices = [];
349
+ let word = [];
350
+ const specialCharSet = make(...(options.specialChars ?? []));
351
+ // Loop through each character in the classification map and determine whether
352
+ // it precedes a word boundary, building an array of distinct words as we go.
353
+ for (let i = 0; i < characterMap.length; ++i) {
354
+ // Append this character to the current word.
355
+ word.push(chars[i]);
356
+ // If there's a word boundary between the current character and the next character,
357
+ // append the current word to the words array and start building a new word.
358
+ if (isWordBoundary(characterMap, i)) {
359
+ const ch = sChars[i];
360
+ if (contains(specialCharSet, ch) ||
361
+ (options.includeWhitespace || !WHITESPACE.test(ch)) &&
362
+ (options.includePunctuation || !PUNCTUATION.test(ch))) {
363
+ const startOfWord = i - word.length + 1;
364
+ const endOfWord = i + 1;
365
+ const str = sChars.slice(startOfWord, endOfWord).join(EMPTY_STRING);
366
+ if (isProtocol(str)) {
367
+ const endOfUrl = findUrlEnd(sChars, i);
368
+ const url = chars.slice(endOfWord, endOfUrl);
369
+ Array.prototype.push.apply(word, url);
370
+ i = endOfUrl;
371
+ }
372
+ // If the word is an abbreviation, include the next character if it's a period.
373
+ if (sChars[i + 1] === '.' && /^([a-zA-Z]\.)+$/.test(str + '.')) {
374
+ word.push(chars[i + 1]);
375
+ indices.push({
376
+ start: startOfWord,
377
+ end: endOfWord + 1
378
+ });
379
+ }
380
+ else {
381
+ indices.push({
382
+ start: startOfWord,
383
+ end: endOfWord
384
+ });
385
+ }
386
+ words.push(word);
387
+ }
388
+ word = [];
389
+ }
390
+ }
391
+ return { words, indices };
392
+ };
393
+ const getDefaultOptions = () => ({
394
+ includeWhitespace: false,
395
+ includePunctuation: false
396
+ });
397
+ const overwrittenCharacterMap = (characterMap, extractedChars, specialChars) => {
398
+ const specialCharSet = make(...specialChars);
399
+ return map(characterMap, (v, i) => contains(specialCharSet, extractedChars[i]) ? characterIndices.ALETTER : v);
400
+ };
401
+ const getWordsWithIndices = (chars, extract, options) => {
402
+ options = {
403
+ ...getDefaultOptions(),
404
+ ...options
405
+ };
406
+ const extractedChars = map(chars, extract);
407
+ const characterMap = classify(extractedChars);
408
+ const specialChars = filter(options.specialChars ?? [], (ch) => ch.length === 1);
409
+ if (specialChars.length > 0) {
410
+ return findWordsWithIndices(chars, extractedChars, overwrittenCharacterMap(characterMap, extractedChars, specialChars), {
411
+ ...options,
412
+ specialChars
413
+ });
414
+ }
415
+ else {
416
+ return findWordsWithIndices(chars, extractedChars, characterMap, options);
417
+ }
418
+ };
419
+ const getWords$1 = (chars, extract, options) => getWordsWithIndices(chars, extract, options).words;
420
+
421
+ const getWords = getWords$1;
422
+
423
+ var global$1 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');
424
+
425
+ const getText = (node, schema) => {
426
+ const blockElements = schema.getBlockElements();
427
+ const voidElements = schema.getVoidElements();
428
+ const isNewline = (node) => blockElements[node.nodeName] || voidElements[node.nodeName];
429
+ const textBlocks = [];
430
+ let txt = '';
431
+ const treeWalker = new global$1(node, node);
432
+ let tempNode;
433
+ while ((tempNode = treeWalker.next())) {
434
+ if (tempNode.nodeType === 3) {
435
+ txt += removeZwsp$1(tempNode.data);
436
+ }
437
+ else if (isNewline(tempNode) && txt.length) {
438
+ textBlocks.push(txt);
439
+ txt = '';
440
+ }
441
+ }
442
+ if (txt.length) {
443
+ textBlocks.push(txt);
444
+ }
445
+ return textBlocks;
446
+ };
447
+
448
+ const removeZwsp = (text) => text.replace(/\u200B/g, '');
449
+ const strLen = (str) => str.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '_').length;
450
+ const countWords = (node, schema) => {
451
+ // TODO - TINY-9708: See if TINY-7484 fix can be replaced by adding \u200B to the "format" character class as per Unicode standard
452
+ // TINY-7484: The grapheme word boundary logic used by Polaris states a ZWSP (\u200B) should be treated as
453
+ // a word boundary, however word counting normally does not consider it as anything so we strip it out.
454
+ const text = removeZwsp(getText(node, schema).join('\n'));
455
+ return getWords(text.split(''), identity).length;
456
+ };
457
+ const countCharacters = (node, schema) => {
458
+ const text = getText(node, schema).join('');
459
+ return strLen(text);
460
+ };
461
+ const countCharactersWithoutSpaces = (node, schema) => {
462
+ const text = getText(node, schema).join('').replace(/\s/g, '');
463
+ return strLen(text);
464
+ };
465
+
466
+ const createBodyCounter = (editor, count) => () => count(editor.getBody(), editor.schema);
467
+ const createSelectionCounter = (editor, count) => () => count(editor.selection.getRng().cloneContents(), editor.schema);
468
+ const createBodyWordCounter = (editor) => createBodyCounter(editor, countWords);
469
+ const get = (editor) => ({
470
+ body: {
471
+ getWordCount: createBodyWordCounter(editor),
472
+ getCharacterCount: createBodyCounter(editor, countCharacters),
473
+ getCharacterCountWithoutSpaces: createBodyCounter(editor, countCharactersWithoutSpaces)
474
+ },
475
+ selection: {
476
+ getWordCount: createSelectionCounter(editor, countWords),
477
+ getCharacterCount: createSelectionCounter(editor, countCharacters),
478
+ getCharacterCountWithoutSpaces: createSelectionCounter(editor, countCharactersWithoutSpaces)
479
+ },
480
+ getCount: createBodyWordCounter(editor)
481
+ });
482
+
483
+ const open = (editor, api) => {
484
+ editor.windowManager.open({
485
+ title: 'Word Count',
486
+ body: {
487
+ type: 'panel',
488
+ items: [
489
+ {
490
+ type: 'table',
491
+ header: ['Count', 'Document', 'Selection'],
492
+ cells: [
493
+ [
494
+ 'Words',
495
+ String(api.body.getWordCount()),
496
+ String(api.selection.getWordCount())
497
+ ],
498
+ [
499
+ 'Characters (no spaces)',
500
+ String(api.body.getCharacterCountWithoutSpaces()),
501
+ String(api.selection.getCharacterCountWithoutSpaces())
502
+ ],
503
+ [
504
+ 'Characters',
505
+ String(api.body.getCharacterCount()),
506
+ String(api.selection.getCharacterCount())
507
+ ]
508
+ ]
509
+ }
510
+ ]
511
+ },
512
+ buttons: [
513
+ {
514
+ type: 'cancel',
515
+ name: 'close',
516
+ text: 'Close',
517
+ primary: true
518
+ }
519
+ ]
520
+ });
521
+ };
522
+
523
+ const register$1 = (editor, api) => {
524
+ editor.addCommand('mceWordCount', () => open(editor, api));
525
+ };
526
+
527
+ var global = tinymce.util.Tools.resolve('tinymce.util.Delay');
528
+
529
+ const fireWordCountUpdate = (editor, api) => {
530
+ editor.dispatch('wordCountUpdate', {
531
+ wordCount: {
532
+ words: api.body.getWordCount(),
533
+ characters: api.body.getCharacterCount(),
534
+ charactersWithoutSpaces: api.body.getCharacterCountWithoutSpaces()
535
+ }
536
+ });
537
+ };
538
+
539
+ const updateCount = (editor, api) => {
540
+ fireWordCountUpdate(editor, api);
541
+ };
542
+ const setup = (editor, api, delay) => {
543
+ const debouncedUpdate = first(() => updateCount(editor, api), delay);
544
+ editor.on('init', () => {
545
+ updateCount(editor, api);
546
+ global.setEditorTimeout(editor, () => {
547
+ editor.on('SetContent BeforeAddUndo Undo Redo ViewUpdate keyup', debouncedUpdate.throttle);
548
+ }, 0);
549
+ editor.on('remove', debouncedUpdate.cancel);
550
+ });
551
+ };
552
+
553
+ const register = (editor) => {
554
+ const onAction = () => editor.execCommand('mceWordCount');
555
+ editor.ui.registry.addButton('wordcount', {
556
+ tooltip: 'Word count',
557
+ icon: 'character-count',
558
+ onAction,
559
+ context: 'any'
560
+ });
561
+ editor.ui.registry.addMenuItem('wordcount', {
562
+ text: 'Word count',
563
+ icon: 'character-count',
564
+ onAction,
565
+ context: 'any'
566
+ });
567
+ };
568
+
569
+ var Plugin = (delay = 300) => {
570
+ global$2.add('wordcount', (editor) => {
571
+ const api = get(editor);
572
+ register$1(editor, api);
573
+ register(editor);
574
+ setup(editor, api, delay);
575
+ return api;
576
+ });
577
+ };
578
+
579
+ Plugin();
580
+ /** *****
581
+ * DO NOT EXPORT ANYTHING
582
+ *
583
+ * IF YOU DO ROLLUP WILL LEAVE A GLOBAL ON THE PAGE
584
+ *******/
585
+
586
+ })();
@@ -0,0 +1 @@
1
+ !function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>null===t;const n=t=>t,o=(t,e)=>{const n=t.length,o=new Array(n);for(let r=0;r<n;r++){const n=t[r];o[r]=e(n,r)}return o},r=(...t)=>new Set(t),c=(t,e)=>t.has(e),s=t=>t.replace(/\uFEFF/g,""),u="[-'\\.\u2018\u2019\u2024\ufe52\uff07\uff0e]",a="[:\xb7\xb7\u05f4\u2027\ufe13\ufe55\uff1a]",l="[\xb1+*/,;;\u0589\u060c\u060d\u066c\u07f8\u2044\ufe10\ufe14\ufe50\ufe54\uff0c\uff1b]",i="[0-9\u0660-\u0669\u066b\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\uaa50-\uaa59\uabf0-\uabf9]",g="\\r",d="\\n",p="[\v\f\x85\u2028\u2029]",h="[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f\u109a-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b6-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u192b\u1930-\u193b\u19b0-\u19c0\u19c8\u19c9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f\u1b00-\u1b04\u1b34-\u1b44\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1baa\u1be6-\u1bf3\u1c24-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe3-\uabea\uabec\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]",C="[\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200e\u200f\u202a-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb]",y="[\u3031-\u3035\u309b\u309c\u30a0-\u30fa\u30fc-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff9d]",m="[=_\u203f\u2040\u2054\ufe33\ufe34\ufe4d-\ufe4f\uff3f\u2200-\u22ff<>]",w="[~\u2116|!-*+-\\/:;?@\\[-`{}\xa1\xab\xb7\xbb\xbf;\xb7\u055a-\u055f\u0589\u058a\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1361-\u1368\u1400\u166d\u166e\u169b\u169c\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cd3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205e\u207d\u207e\u208d\u208e\u3008\u3009\u2768-\u2775\u27c5\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc\u29fd\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e2e\u2e30\u2e31\u3001-\u3003\u3008-\u3011\u3014-\u301f\u3030\u303d\u30a0\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uabeb\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a\uff1b\uff1f\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65]",f=10,x=[new RegExp("[A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f3\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u10a0-\u10c5\u10d0-\u10fa\u10fc\u1100-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1a00-\u1a16\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bc0-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2d00-\u2d25\u2d30-\u2d65\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005\u303b\u303c\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790\ua791\ua7a0-\ua7a9\ua7fa-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]"),new RegExp(u),new RegExp(a),new RegExp(l),new RegExp(i),new RegExp(g),new RegExp(d),new RegExp(p),new RegExp(h),new RegExp(C),new RegExp(y),new RegExp(m),new RegExp("@")],W=new RegExp("^"+w+"$"),E=x,R=t=>{let e=13;const n=E.length;for(let o=0;o<n;++o){const n=E[o];if(n&&n.test(t)){e=o;break}}return e},S=(t,e)=>{const n=t[e],o=t[e+1];if(e<0||e>t.length-1&&0!==e)return!1;if(0===n&&0===o)return!1;const r=t[e+2];if(0===n&&(2===o||1===o||12===o)&&0===r)return!1;const c=t[e-1];return(2!==n&&1!==n&&12!==o||0!==o||0!==c)&&(4!==n&&0!==n||4!==o&&0!==o)&&(3!==n&&1!==n||4!==o||4!==c)&&(4!==n||3!==o&&1!==o||4!==r)&&(8!==n&&9!==n||0!==o&&4!==o&&o!==f&&8!==o&&9!==o)&&(8!==o&&(9!==o||0!==r&&4!==r&&r!==f&&8!==r&&9!==r)||0!==n&&4!==n&&n!==f&&8!==n&&9!==n)&&(5!==n||6!==o)&&(7===n||5===n||6===n||7===o||5===o||6===o||(n!==f||o!==f)&&(11!==o||0!==n&&4!==n&&n!==f&&11!==n)&&(11!==n||0!==o&&4!==o&&o!==f)&&12!==n)},b=/^\s+$/,v=W,F=t=>"http"===t||"https"===t,T=(t,e)=>{const n=((t,e)=>{let n;for(n=e;n<t.length&&!b.test(t[n]);n++);return n})(t,e+1);return"://"===t.slice(e+1,n).join("").substr(0,3)?n:e},A=(t,e,n,o)=>{const s=[],u=[];let a=[];const l=r(...o.specialChars??[]);for(let r=0;r<n.length;++r)if(a.push(t[r]),S(n,r)){const n=e[r];if(c(l,n)||(o.includeWhitespace||!b.test(n))&&(o.includePunctuation||!v.test(n))){const n=r-a.length+1,o=r+1,c=e.slice(n,o).join("");if(F(c)){const n=T(e,r),c=t.slice(o,n);Array.prototype.push.apply(a,c),r=n}"."===e[r+1]&&/^([a-zA-Z]\.)+$/.test(c+".")?(a.push(t[r+1]),u.push({start:n,end:o+1})):u.push({start:n,end:o}),s.push(a)}a=[]}return{words:s,indices:u}},B=(t,e,n)=>((t,e,n)=>{n={includeWhitespace:!1,includePunctuation:!1,...n};const s=o(t,e),u=(t=>{const e=(t=>{const e={};return n=>{if(e[n])return e[n];{const o=t(n);return e[n]=o,o}}})(R);return o(t,e)})(s),a=((t,e)=>{const n=[];for(let o=0,r=t.length;o<r;o++){const r=t[o];e(r)&&n.push(r)}return n})(n.specialChars??[],t=>1===t.length);return a.length>0?A(t,s,((t,e,n)=>{const s=r(...n);return o(t,(t,n)=>c(s,e[n])?0:t)})(u,s,a),{...n,specialChars:a}):A(t,s,u,n)})(t,e,n).words;var D=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker");const j=(t,e)=>{const n=e.getBlockElements(),o=e.getVoidElements(),r=t=>n[t.nodeName]||o[t.nodeName],c=[];let u="";const a=new D(t,t);let l;for(;l=a.next();)3===l.nodeType?u+=s(l.data):r(l)&&u.length&&(c.push(u),u="");return u.length&&c.push(u),c},k=t=>t.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"_").length,U=(t,e)=>{const o=(t=>t.replace(/\u200B/g,""))(j(t,e).join("\n"));return B(o.split(""),n).length},M=(t,e)=>{const n=j(t,e).join("");return k(n)},P=(t,e)=>{const n=j(t,e).join("").replace(/\s/g,"");return k(n)},$=(t,e)=>()=>e(t.getBody(),t.schema),z=(t,e)=>()=>e(t.selection.getRng().cloneContents(),t.schema),N=t=>$(t,U);var V=tinymce.util.Tools.resolve("tinymce.util.Delay");const Z=(t,e)=>{((t,e)=>{t.dispatch("wordCountUpdate",{wordCount:{words:e.body.getWordCount(),characters:e.body.getCharacterCount(),charactersWithoutSpaces:e.body.getCharacterCountWithoutSpaces()}})})(t,e)},_=(t,n,o)=>{const r=((t,n)=>{let o=null;return{cancel:()=>{e(o)||(clearTimeout(o),o=null)},throttle:(...r)=>{e(o)&&(o=setTimeout(()=>{o=null,t.apply(null,r)},n))}}})(()=>Z(t,n),o);t.on("init",()=>{Z(t,n),V.setEditorTimeout(t,()=>{t.on("SetContent BeforeAddUndo Undo Redo ViewUpdate keyup",r.throttle)},0),t.on("remove",r.cancel)})};((e=300)=>{t.add("wordcount",t=>{const n=(t=>({body:{getWordCount:N(t),getCharacterCount:$(t,M),getCharacterCountWithoutSpaces:$(t,P)},selection:{getWordCount:z(t,U),getCharacterCount:z(t,M),getCharacterCountWithoutSpaces:z(t,P)},getCount:N(t)}))(t);return((t,e)=>{t.addCommand("mceWordCount",()=>((t,e)=>{t.windowManager.open({title:"Word Count",body:{type:"panel",items:[{type:"table",header:["Count","Document","Selection"],cells:[["Words",String(e.body.getWordCount()),String(e.selection.getWordCount())],["Characters (no spaces)",String(e.body.getCharacterCountWithoutSpaces()),String(e.selection.getCharacterCountWithoutSpaces())],["Characters",String(e.body.getCharacterCount()),String(e.selection.getCharacterCount())]]}]},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}]})})(t,e))})(t,n),(t=>{const e=()=>t.execCommand("mceWordCount");t.ui.registry.addButton("wordcount",{tooltip:"Word count",icon:"character-count",onAction:e,context:"any"}),t.ui.registry.addMenuItem("wordcount",{text:"Word count",icon:"character-count",onAction:e,context:"any"})})(t),_(t,n,e),n})})()}();