@bigbinary/neeto-editor-frontend 0.0.0-stage → 2.0.2

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 (214) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +145 -2
  3. package/app/javascript/src/translations/ar.json +209 -0
  4. package/app/javascript/src/translations/bg.json +209 -0
  5. package/app/javascript/src/translations/ca.json +209 -0
  6. package/app/javascript/src/translations/cs.json +209 -0
  7. package/app/javascript/src/translations/da.json +209 -0
  8. package/app/javascript/src/translations/de.json +209 -0
  9. package/app/javascript/src/translations/en.json +208 -0
  10. package/app/javascript/src/translations/es-MX.json +209 -0
  11. package/app/javascript/src/translations/es.json +209 -0
  12. package/app/javascript/src/translations/et.json +209 -0
  13. package/app/javascript/src/translations/fi.json +209 -0
  14. package/app/javascript/src/translations/fil.json +209 -0
  15. package/app/javascript/src/translations/fr.json +209 -0
  16. package/app/javascript/src/translations/he.json +209 -0
  17. package/app/javascript/src/translations/hi.json +209 -0
  18. package/app/javascript/src/translations/hr.json +209 -0
  19. package/app/javascript/src/translations/hu.json +209 -0
  20. package/app/javascript/src/translations/id.json +209 -0
  21. package/app/javascript/src/translations/index.js +1 -0
  22. package/app/javascript/src/translations/it.json +209 -0
  23. package/app/javascript/src/translations/ja.json +209 -0
  24. package/app/javascript/src/translations/ko.json +209 -0
  25. package/app/javascript/src/translations/lv.json +208 -0
  26. package/app/javascript/src/translations/nl.json +209 -0
  27. package/app/javascript/src/translations/pl.json +209 -0
  28. package/app/javascript/src/translations/pt-BR.json +209 -0
  29. package/app/javascript/src/translations/pt.json +209 -0
  30. package/app/javascript/src/translations/ro.json +209 -0
  31. package/app/javascript/src/translations/ru.json +209 -0
  32. package/app/javascript/src/translations/sk.json +209 -0
  33. package/app/javascript/src/translations/sl.json +209 -0
  34. package/app/javascript/src/translations/sv.json +209 -0
  35. package/app/javascript/src/translations/th.json +209 -0
  36. package/app/javascript/src/translations/tr.json +209 -0
  37. package/app/javascript/src/translations/uk.json +209 -0
  38. package/app/javascript/src/translations/vi.json +209 -0
  39. package/app/javascript/src/translations/zh-CN.json +209 -0
  40. package/app/javascript/src/translations/zh-TW.json +209 -0
  41. package/dist/.ready +1 -0
  42. package/dist/Attachments.js +53 -0
  43. package/dist/Attachments.js.map +1 -0
  44. package/dist/Editor.js +5532 -0
  45. package/dist/Editor.js.map +1 -0
  46. package/dist/EditorContent.js +252 -0
  47. package/dist/EditorContent.js.map +1 -0
  48. package/dist/FormikEditor.js +202 -0
  49. package/dist/FormikEditor.js.map +1 -0
  50. package/dist/Menu.js +107 -0
  51. package/dist/Menu.js.map +1 -0
  52. package/dist/chunk-1NlIGj6C.js +378 -0
  53. package/dist/chunk-1NlIGj6C.js.map +1 -0
  54. package/dist/chunk-BFKmIsWV.js +8660 -0
  55. package/dist/chunk-BFKmIsWV.js.map +1 -0
  56. package/dist/chunk-BFTU3MAI.js +8 -0
  57. package/dist/chunk-BFTU3MAI.js.map +1 -0
  58. package/dist/chunk-Ba4Q3HC8.js +15258 -0
  59. package/dist/chunk-Ba4Q3HC8.js.map +1 -0
  60. package/dist/chunk-Bra5VPWO.js +555 -0
  61. package/dist/chunk-Bra5VPWO.js.map +1 -0
  62. package/dist/chunk-C2dztUxs.js +4 -0
  63. package/dist/chunk-C2dztUxs.js.map +1 -0
  64. package/dist/chunk-CK_Ss-J5.js +425 -0
  65. package/dist/chunk-CK_Ss-J5.js.map +1 -0
  66. package/dist/chunk-CO-Yfs5R.js +206 -0
  67. package/dist/chunk-CO-Yfs5R.js.map +1 -0
  68. package/dist/chunk-CX-0IHKE.js +381 -0
  69. package/dist/chunk-CX-0IHKE.js.map +1 -0
  70. package/dist/chunk-CeoqieEt.js +25570 -0
  71. package/dist/chunk-CeoqieEt.js.map +1 -0
  72. package/dist/chunk-D52F37yF.js +19 -0
  73. package/dist/chunk-D52F37yF.js.map +1 -0
  74. package/dist/chunk-DcFvJOrc.js +3368 -0
  75. package/dist/chunk-DcFvJOrc.js.map +1 -0
  76. package/dist/chunk-DgZGzqPs.js +6804 -0
  77. package/dist/chunk-DgZGzqPs.js.map +1 -0
  78. package/dist/chunk-Di3ipdfT.js +20227 -0
  79. package/dist/chunk-Di3ipdfT.js.map +1 -0
  80. package/dist/chunk-DrHVV_g1.js +89 -0
  81. package/dist/chunk-DrHVV_g1.js.map +1 -0
  82. package/dist/chunk-DsAUS6bL.js +3464 -0
  83. package/dist/chunk-DsAUS6bL.js.map +1 -0
  84. package/dist/chunk-PSGRE5nX.js +97 -0
  85. package/dist/chunk-PSGRE5nX.js.map +1 -0
  86. package/dist/chunk-Qg4uQqj3.js +16238 -0
  87. package/dist/chunk-Qg4uQqj3.js.map +1 -0
  88. package/dist/chunk-aCTMceVU.js +135 -0
  89. package/dist/chunk-aCTMceVU.js.map +1 -0
  90. package/dist/chunk-fDmcpgqx.js +12510 -0
  91. package/dist/chunk-fDmcpgqx.js.map +1 -0
  92. package/dist/chunk-mFZL53CS.js +204 -0
  93. package/dist/chunk-mFZL53CS.js.map +1 -0
  94. package/dist/chunk-y5pmJStT.js +573 -0
  95. package/dist/chunk-y5pmJStT.js.map +1 -0
  96. package/dist/cjs/Attachments.cjs.js +59 -0
  97. package/dist/cjs/Attachments.cjs.js.map +1 -0
  98. package/dist/cjs/Editor.cjs.js +5611 -0
  99. package/dist/cjs/Editor.cjs.js.map +1 -0
  100. package/dist/cjs/EditorContent.cjs.js +266 -0
  101. package/dist/cjs/EditorContent.cjs.js.map +1 -0
  102. package/dist/cjs/FormikEditor.cjs.js +209 -0
  103. package/dist/cjs/FormikEditor.cjs.js.map +1 -0
  104. package/dist/cjs/Menu.cjs.js +113 -0
  105. package/dist/cjs/Menu.cjs.js.map +1 -0
  106. package/dist/cjs/chunk-B2NfgecV.cjs.js +599 -0
  107. package/dist/cjs/chunk-B2NfgecV.cjs.js.map +1 -0
  108. package/dist/cjs/chunk-B6qYtOJe.cjs.js +6 -0
  109. package/dist/cjs/chunk-B6qYtOJe.cjs.js.map +1 -0
  110. package/dist/cjs/chunk-BJu3ubxk.cjs.js +11 -0
  111. package/dist/cjs/chunk-BJu3ubxk.cjs.js.map +1 -0
  112. package/dist/cjs/chunk-BKvkHB8E.cjs.js +16259 -0
  113. package/dist/cjs/chunk-BKvkHB8E.cjs.js.map +1 -0
  114. package/dist/cjs/chunk-BlWQNLLE.cjs.js +3450 -0
  115. package/dist/cjs/chunk-BlWQNLLE.cjs.js.map +1 -0
  116. package/dist/cjs/chunk-Bmjmsp-E.cjs.js +97 -0
  117. package/dist/cjs/chunk-Bmjmsp-E.cjs.js.map +1 -0
  118. package/dist/cjs/chunk-C-VxABfm.cjs.js +25578 -0
  119. package/dist/cjs/chunk-C-VxABfm.cjs.js.map +1 -0
  120. package/dist/cjs/chunk-C8X4oFtP.cjs.js +216 -0
  121. package/dist/cjs/chunk-C8X4oFtP.cjs.js.map +1 -0
  122. package/dist/cjs/chunk-CCCSexAh.cjs.js +206 -0
  123. package/dist/cjs/chunk-CCCSexAh.cjs.js.map +1 -0
  124. package/dist/cjs/chunk-CNIzgxEP.cjs.js +49 -0
  125. package/dist/cjs/chunk-CNIzgxEP.cjs.js.map +1 -0
  126. package/dist/cjs/chunk-CesnwG-V.cjs.js +140 -0
  127. package/dist/cjs/chunk-CesnwG-V.cjs.js.map +1 -0
  128. package/dist/cjs/chunk-CohcWDmm.cjs.js +20318 -0
  129. package/dist/cjs/chunk-CohcWDmm.cjs.js.map +1 -0
  130. package/dist/cjs/chunk-Crp27WMe.cjs.js +6833 -0
  131. package/dist/cjs/chunk-Crp27WMe.cjs.js.map +1 -0
  132. package/dist/cjs/chunk-D3Unocnm.cjs.js +8681 -0
  133. package/dist/cjs/chunk-D3Unocnm.cjs.js.map +1 -0
  134. package/dist/cjs/chunk-D6ygkQBu.cjs.js +421 -0
  135. package/dist/cjs/chunk-D6ygkQBu.cjs.js.map +1 -0
  136. package/dist/cjs/chunk-D7p10rIr.cjs.js +112 -0
  137. package/dist/cjs/chunk-D7p10rIr.cjs.js.map +1 -0
  138. package/dist/cjs/chunk-DM1lUvXy.cjs.js +3525 -0
  139. package/dist/cjs/chunk-DM1lUvXy.cjs.js.map +1 -0
  140. package/dist/cjs/chunk-DWyvxp1a.cjs.js +394 -0
  141. package/dist/cjs/chunk-DWyvxp1a.cjs.js.map +1 -0
  142. package/dist/cjs/chunk-DXsX8co9.cjs.js +12512 -0
  143. package/dist/cjs/chunk-DXsX8co9.cjs.js.map +1 -0
  144. package/dist/cjs/chunk-DxXc6tiG.cjs.js +15326 -0
  145. package/dist/cjs/chunk-DxXc6tiG.cjs.js.map +1 -0
  146. package/dist/cjs/chunk-MxWVMW6e.cjs.js +569 -0
  147. package/dist/cjs/chunk-MxWVMW6e.cjs.js.map +1 -0
  148. package/dist/cjs/chunk-cwORbcv3.cjs.js +479 -0
  149. package/dist/cjs/chunk-cwORbcv3.cjs.js.map +1 -0
  150. package/dist/cjs/constants.cjs.js +13 -0
  151. package/dist/cjs/constants.cjs.js.map +1 -0
  152. package/dist/cjs/index.cjs.js +163 -0
  153. package/dist/cjs/index.cjs.js.map +1 -0
  154. package/dist/cjs/utils.cjs.js +29 -0
  155. package/dist/cjs/utils.cjs.js.map +1 -0
  156. package/dist/cjs/v2/Attachments.cjs.js +49 -0
  157. package/dist/cjs/v2/Attachments.cjs.js.map +1 -0
  158. package/dist/cjs/v2/Editor.cjs.js +5741 -0
  159. package/dist/cjs/v2/Editor.cjs.js.map +1 -0
  160. package/dist/cjs/v2/EditorContent.cjs.js +33 -0
  161. package/dist/cjs/v2/EditorContent.cjs.js.map +1 -0
  162. package/dist/cjs/v2/FormikEditor.cjs.js +164 -0
  163. package/dist/cjs/v2/FormikEditor.cjs.js.map +1 -0
  164. package/dist/cjs/v2/Menu.cjs.js +62 -0
  165. package/dist/cjs/v2/Menu.cjs.js.map +1 -0
  166. package/dist/cjs/v2/constants.cjs.js +13 -0
  167. package/dist/cjs/v2/constants.cjs.js.map +1 -0
  168. package/dist/cjs/v2/index.cjs.js +120 -0
  169. package/dist/cjs/v2/index.cjs.js.map +1 -0
  170. package/dist/cjs/v2/utils.cjs.js +29 -0
  171. package/dist/cjs/v2/utils.cjs.js.map +1 -0
  172. package/dist/codeblockHighlight.js +15155 -0
  173. package/dist/codeblockHighlight.js.map +1 -0
  174. package/dist/constants.js +6 -0
  175. package/dist/constants.js.map +1 -0
  176. package/dist/editor-content.min.css +1 -0
  177. package/dist/editor-output-pdf-email.css +1 -0
  178. package/dist/editor-output-pdf-email.js +4 -0
  179. package/dist/editor-output-pdf-email.js.map +1 -0
  180. package/dist/editor-output.js +4 -0
  181. package/dist/editor-output.js.map +1 -0
  182. package/dist/editor-stats.html +4842 -0
  183. package/dist/editorUtils.js +170 -0
  184. package/dist/headerLinks.js +59 -0
  185. package/dist/headerLinks.js.map +1 -0
  186. package/dist/index.js +146 -0
  187. package/dist/index.js.map +1 -0
  188. package/dist/utils.js +17 -0
  189. package/dist/utils.js.map +1 -0
  190. package/dist/v2/Attachments.js +43 -0
  191. package/dist/v2/Attachments.js.map +1 -0
  192. package/dist/v2/Editor.js +5692 -0
  193. package/dist/v2/Editor.js.map +1 -0
  194. package/dist/v2/EditorContent.js +27 -0
  195. package/dist/v2/EditorContent.js.map +1 -0
  196. package/dist/v2/FormikEditor.js +157 -0
  197. package/dist/v2/FormikEditor.js.map +1 -0
  198. package/dist/v2/Menu.js +56 -0
  199. package/dist/v2/Menu.js.map +1 -0
  200. package/dist/v2/constants.js +6 -0
  201. package/dist/v2/constants.js.map +1 -0
  202. package/dist/v2/editor-content-styles.js +4 -0
  203. package/dist/v2/editor-content-styles.js.map +1 -0
  204. package/dist/v2/editor-content.min.css +1 -0
  205. package/dist/v2/index.js +101 -0
  206. package/dist/v2/index.js.map +1 -0
  207. package/dist/v2/styles.css +1 -0
  208. package/dist/v2/styles.js +4 -0
  209. package/dist/v2/styles.js.map +1 -0
  210. package/dist/v2/utils.js +17 -0
  211. package/dist/v2/utils.js.map +1 -0
  212. package/formik.d.ts +9 -0
  213. package/package.json +322 -4
  214. package/types.d.ts +199 -0
@@ -0,0 +1,3450 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
5
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
6
+ var React = require('react');
7
+ var ramda = require('ramda');
8
+ var injectCss = require('./chunk-B6qYtOJe.cjs.js');
9
+ var i18n = require('i18next');
10
+ var TextH1 = require('@bigbinary/neeto-icons/TextH1');
11
+ var TextH2 = require('@bigbinary/neeto-icons/TextH2');
12
+ var TextH3 = require('@bigbinary/neeto-icons/TextH3');
13
+ var TextH4 = require('@bigbinary/neeto-icons/TextH4');
14
+ var TextH5 = require('@bigbinary/neeto-icons/TextH5');
15
+ var TextP = require('@bigbinary/neeto-icons/TextP');
16
+ var useEditorStore = require('./chunk-CohcWDmm.cjs.js');
17
+ var classnames = require('classnames');
18
+ var neetoCist = require('@bigbinary/neeto-cist');
19
+ var constants = require('./chunk-Bmjmsp-E.cjs.js');
20
+ var Link = require('@bigbinary/neeto-icons/Link');
21
+ var Column = require('@bigbinary/neeto-icons/Column');
22
+ var Down = require('@bigbinary/neeto-icons/Down');
23
+ var Dropdown$1 = require('@bigbinary/neetoui/Dropdown');
24
+ var reactI18next = require('react-i18next');
25
+ var Close = require('@bigbinary/neeto-icons/Close');
26
+ var Button$1 = require('@bigbinary/neetoui/Button');
27
+ var utils = require('./chunk-D7p10rIr.cjs.js');
28
+ var jsxRuntime = require('react/jsx-runtime');
29
+ var utils$1 = require('@bigbinary/neeto-commons-frontend/utils');
30
+ var Check = require('@bigbinary/neeto-icons/Check');
31
+ var Label = require('@bigbinary/neetoui/Label');
32
+ var Quote = require('@bigbinary/neeto-icons/Quote');
33
+ var Attachment = require('@bigbinary/neeto-icons/Attachment');
34
+ var CodeBlock = require('@bigbinary/neeto-icons/CodeBlock');
35
+ var Code = require('@bigbinary/neeto-icons/Code');
36
+ var Highlight = require('@bigbinary/neeto-icons/Highlight');
37
+ var TextBold = require('@bigbinary/neeto-icons/TextBold');
38
+ var TextCross = require('@bigbinary/neeto-icons/TextCross');
39
+ var TextItalic = require('@bigbinary/neeto-icons/TextItalic');
40
+ var Underline = require('@bigbinary/neeto-icons/Underline');
41
+ var ListDot = require('@bigbinary/neeto-icons/ListDot');
42
+ var ListNumber = require('@bigbinary/neeto-icons/ListNumber');
43
+ var ImageUpload = require('@bigbinary/neeto-icons/ImageUpload');
44
+ var Video = require('@bigbinary/neeto-icons/Video');
45
+ var Undo = require('@bigbinary/neeto-icons/Undo');
46
+ var Redo = require('@bigbinary/neeto-icons/Redo');
47
+ var Email = require('@bigbinary/neeto-icons/Email');
48
+ var Avatar = require('@bigbinary/neetoui/Avatar');
49
+ var Typography = require('@bigbinary/neetoui/Typography');
50
+ var Smiley = require('@bigbinary/neeto-icons/Smiley');
51
+ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
52
+ var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
53
+ var _createClass = require('@babel/runtime/helpers/createClass');
54
+ var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstructorReturn');
55
+ var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
56
+ var _inherits = require('@babel/runtime/helpers/inherits');
57
+ var _regeneratorRuntime = require('@babel/runtime/regenerator');
58
+ var emojiMart = require('emoji-mart');
59
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
60
+ var Customize = require('@bigbinary/neeto-icons/Customize');
61
+ var Refresh = require('@bigbinary/neeto-icons/Refresh');
62
+ var Input = require('@bigbinary/neetoui/Input');
63
+ var reactColorful = require('react-colorful');
64
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
65
+ var ImageUploader = require('@bigbinary/neeto-image-uploader-frontend/ImageUploader');
66
+ var Modal = require('@bigbinary/neetoui/Modal');
67
+ var Tab = require('@bigbinary/neetoui/Tab');
68
+ var Toastr = require('@bigbinary/neetoui/Toastr');
69
+ var reactFileIcon_esm = require('./chunk-D3Unocnm.cjs.js');
70
+ var FileIcon = require('./chunk-cwORbcv3.cjs.js');
71
+ var Tooltip = require('@bigbinary/neetoui/Tooltip');
72
+ var Form = require('@bigbinary/neetoui/formik/Form');
73
+ var Input$1 = require('@bigbinary/neetoui/formik/Input');
74
+ var ActionBlock = require('@bigbinary/neetoui/formik/ActionBlock');
75
+ var Checkbox = require('@bigbinary/neetoui/Checkbox');
76
+ var ReactDOM = require('react-dom');
77
+ var Checkbox$1 = require('@bigbinary/neeto-icons/Checkbox');
78
+ var File = require('@bigbinary/neeto-icons/File');
79
+ var shallow = require('zustand/shallow');
80
+ var Flag = require('@bigbinary/neeto-icons/Flag');
81
+ var Info = require('@bigbinary/neeto-icons/misc/Info');
82
+ var Warning = require('@bigbinary/neeto-icons/misc/Warning');
83
+ var Danger = require('@bigbinary/neeto-icons/misc/Danger');
84
+ var Megaphone = require('@bigbinary/neeto-icons/misc/Megaphone');
85
+ var Success = require('@bigbinary/neeto-icons/misc/Success');
86
+ var MenuHorizontal = require('@bigbinary/neeto-icons/MenuHorizontal');
87
+ var DynamicVariables = require('@bigbinary/neeto-molecules/DynamicVariables');
88
+ var Tippy = require('@tippyjs/react');
89
+ var constants$1 = require('./chunk-CNIzgxEP.cjs.js');
90
+
91
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
92
+
93
+ var _defineProperty__default = /*#__PURE__*/_interopDefault(_defineProperty);
94
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefault(_toConsumableArray);
95
+ var _slicedToArray__default = /*#__PURE__*/_interopDefault(_slicedToArray);
96
+ var React__default = /*#__PURE__*/_interopDefault(React);
97
+ var i18n__default = /*#__PURE__*/_interopDefault(i18n);
98
+ var TextH1__default = /*#__PURE__*/_interopDefault(TextH1);
99
+ var TextH2__default = /*#__PURE__*/_interopDefault(TextH2);
100
+ var TextH3__default = /*#__PURE__*/_interopDefault(TextH3);
101
+ var TextH4__default = /*#__PURE__*/_interopDefault(TextH4);
102
+ var TextH5__default = /*#__PURE__*/_interopDefault(TextH5);
103
+ var TextP__default = /*#__PURE__*/_interopDefault(TextP);
104
+ var classnames__default = /*#__PURE__*/_interopDefault(classnames);
105
+ var Link__default = /*#__PURE__*/_interopDefault(Link);
106
+ var Column__default = /*#__PURE__*/_interopDefault(Column);
107
+ var Down__default = /*#__PURE__*/_interopDefault(Down);
108
+ var Dropdown__default = /*#__PURE__*/_interopDefault(Dropdown$1);
109
+ var Close__default = /*#__PURE__*/_interopDefault(Close);
110
+ var Button__default = /*#__PURE__*/_interopDefault(Button$1);
111
+ var Check__default = /*#__PURE__*/_interopDefault(Check);
112
+ var Label__default = /*#__PURE__*/_interopDefault(Label);
113
+ var Quote__default = /*#__PURE__*/_interopDefault(Quote);
114
+ var Attachment__default = /*#__PURE__*/_interopDefault(Attachment);
115
+ var CodeBlock__default = /*#__PURE__*/_interopDefault(CodeBlock);
116
+ var Code__default = /*#__PURE__*/_interopDefault(Code);
117
+ var Highlight__default = /*#__PURE__*/_interopDefault(Highlight);
118
+ var TextBold__default = /*#__PURE__*/_interopDefault(TextBold);
119
+ var TextCross__default = /*#__PURE__*/_interopDefault(TextCross);
120
+ var TextItalic__default = /*#__PURE__*/_interopDefault(TextItalic);
121
+ var Underline__default = /*#__PURE__*/_interopDefault(Underline);
122
+ var ListDot__default = /*#__PURE__*/_interopDefault(ListDot);
123
+ var ListNumber__default = /*#__PURE__*/_interopDefault(ListNumber);
124
+ var ImageUpload__default = /*#__PURE__*/_interopDefault(ImageUpload);
125
+ var Video__default = /*#__PURE__*/_interopDefault(Video);
126
+ var Undo__default = /*#__PURE__*/_interopDefault(Undo);
127
+ var Redo__default = /*#__PURE__*/_interopDefault(Redo);
128
+ var Email__default = /*#__PURE__*/_interopDefault(Email);
129
+ var Avatar__default = /*#__PURE__*/_interopDefault(Avatar);
130
+ var Typography__default = /*#__PURE__*/_interopDefault(Typography);
131
+ var Smiley__default = /*#__PURE__*/_interopDefault(Smiley);
132
+ var _asyncToGenerator__default = /*#__PURE__*/_interopDefault(_asyncToGenerator);
133
+ var _classCallCheck__default = /*#__PURE__*/_interopDefault(_classCallCheck);
134
+ var _createClass__default = /*#__PURE__*/_interopDefault(_createClass);
135
+ var _possibleConstructorReturn__default = /*#__PURE__*/_interopDefault(_possibleConstructorReturn);
136
+ var _getPrototypeOf__default = /*#__PURE__*/_interopDefault(_getPrototypeOf);
137
+ var _inherits__default = /*#__PURE__*/_interopDefault(_inherits);
138
+ var _regeneratorRuntime__default = /*#__PURE__*/_interopDefault(_regeneratorRuntime);
139
+ var Customize__default = /*#__PURE__*/_interopDefault(Customize);
140
+ var Refresh__default = /*#__PURE__*/_interopDefault(Refresh);
141
+ var Input__default = /*#__PURE__*/_interopDefault(Input);
142
+ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefault(_objectWithoutProperties);
143
+ var ImageUploader__default = /*#__PURE__*/_interopDefault(ImageUploader);
144
+ var Modal__default = /*#__PURE__*/_interopDefault(Modal);
145
+ var Tab__default = /*#__PURE__*/_interopDefault(Tab);
146
+ var Toastr__default = /*#__PURE__*/_interopDefault(Toastr);
147
+ var Tooltip__default = /*#__PURE__*/_interopDefault(Tooltip);
148
+ var Form__default = /*#__PURE__*/_interopDefault(Form);
149
+ var Input__default$1 = /*#__PURE__*/_interopDefault(Input$1);
150
+ var ActionBlock__default = /*#__PURE__*/_interopDefault(ActionBlock);
151
+ var Checkbox__default = /*#__PURE__*/_interopDefault(Checkbox);
152
+ var Checkbox__default$1 = /*#__PURE__*/_interopDefault(Checkbox$1);
153
+ var File__default = /*#__PURE__*/_interopDefault(File);
154
+ var Flag__default = /*#__PURE__*/_interopDefault(Flag);
155
+ var Info__default = /*#__PURE__*/_interopDefault(Info);
156
+ var Warning__default = /*#__PURE__*/_interopDefault(Warning);
157
+ var Danger__default = /*#__PURE__*/_interopDefault(Danger);
158
+ var Megaphone__default = /*#__PURE__*/_interopDefault(Megaphone);
159
+ var Success__default = /*#__PURE__*/_interopDefault(Success);
160
+ var MenuHorizontal__default = /*#__PURE__*/_interopDefault(MenuHorizontal);
161
+ var DynamicVariables__default = /*#__PURE__*/_interopDefault(DynamicVariables);
162
+ var Tippy__default = /*#__PURE__*/_interopDefault(Tippy);
163
+
164
+ var CALLOUT_TYPES = [{
165
+ type: "default",
166
+ label: i18n.t("neetoEditor.menu.calloutDefault"),
167
+ icon: Megaphone__default.default,
168
+ bgColor: "--neeto-editor-gray-100"
169
+ }, {
170
+ type: "info",
171
+ label: i18n.t("neetoEditor.menu.calloutInfo"),
172
+ icon: Info__default.default,
173
+ bgColor: "--neeto-editor-info-100"
174
+ }, {
175
+ type: "warning",
176
+ label: i18n.t("neetoEditor.menu.calloutWarning"),
177
+ icon: Warning__default.default,
178
+ bgColor: "--neeto-editor-warning-100"
179
+ }, {
180
+ type: "error",
181
+ label: i18n.t("neetoEditor.menu.calloutError"),
182
+ icon: Danger__default.default,
183
+ bgColor: "--neeto-editor-error-100"
184
+ }, {
185
+ type: "success",
186
+ label: i18n.t("neetoEditor.menu.calloutSuccess"),
187
+ icon: Success__default.default,
188
+ bgColor: "--neeto-editor-success-100"
189
+ }];
190
+
191
+ function ownKeys$b(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; }
192
+ function _objectSpread$b(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$b(Object(t), true).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$b(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
193
+ function _callSuper(t, o, e) { return o = _getPrototypeOf__default.default(o), _possibleConstructorReturn__default.default(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf__default.default(t).constructor) : o.apply(t, e)); }
194
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
195
+ var EmojiPickerMenu = /*#__PURE__*/function (_React$Component) {
196
+ function EmojiPickerMenu() {
197
+ var _this;
198
+ _classCallCheck__default.default(this, EmojiPickerMenu);
199
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
200
+ args[_key] = arguments[_key];
201
+ }
202
+ _this = _callSuper(this, EmojiPickerMenu, [].concat(args));
203
+ _defineProperty__default.default(_this, "ref", /*#__PURE__*/React__default.default.createRef());
204
+ _defineProperty__default.default(_this, "fetchEmojiData", /*#__PURE__*/_asyncToGenerator__default.default(/*#__PURE__*/_regeneratorRuntime__default.default.mark(function _callee() {
205
+ var _yield$emojiPickerApi, data;
206
+ return _regeneratorRuntime__default.default.wrap(function _callee$(_context) {
207
+ while (1) switch (_context.prev = _context.next) {
208
+ case 0:
209
+ _context.prev = 0;
210
+ _context.next = 3;
211
+ return useEditorStore.emojiPickerApi.fetch();
212
+ case 3:
213
+ _yield$emojiPickerApi = _context.sent;
214
+ data = _yield$emojiPickerApi.data;
215
+ return _context.abrupt("return", data);
216
+ case 8:
217
+ _context.prev = 8;
218
+ _context.t0 = _context["catch"](0);
219
+ return _context.abrupt("return", {});
220
+ case 11:
221
+ case "end":
222
+ return _context.stop();
223
+ }
224
+ }, _callee, null, [[0, 8]]);
225
+ })));
226
+ _defineProperty__default.default(_this, "onKeyDown", function (_ref2) {
227
+ var event = _ref2.event;
228
+ if (event.key === "Escape") {
229
+ _this.props.editor.chain().focus().deleteRange(_this.props.range).run();
230
+ return true;
231
+ }
232
+ return false;
233
+ });
234
+ _defineProperty__default.default(_this, "handleSelect", function (emoji) {
235
+ var _this$props$setActive, _this$props;
236
+ _this.props.editor.chain().focus().deleteRange(_this.props.range).setEmoji(emoji).run();
237
+ (_this$props$setActive = (_this$props = _this.props).setActive) === null || _this$props$setActive === void 0 || _this$props$setActive.call(_this$props, false);
238
+ });
239
+ return _this;
240
+ }
241
+ _inherits__default.default(EmojiPickerMenu, _React$Component);
242
+ return _createClass__default.default(EmojiPickerMenu, [{
243
+ key: "componentDidMount",
244
+ value: function componentDidMount() {
245
+ new emojiMart.Picker(_objectSpread$b(_objectSpread$b({}, this.props), {}, {
246
+ onEmojiSelect: this.handleSelect,
247
+ style: {
248
+ maxWidth: "100%"
249
+ },
250
+ theme: "light",
251
+ "native": true,
252
+ previewPosition: "none",
253
+ showSkinTones: false,
254
+ data: this.fetchEmojiData,
255
+ ref: this.ref
256
+ }));
257
+ }
258
+ }, {
259
+ key: "render",
260
+ value: function render() {
261
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
262
+ "data-testid": "neeto-editor-emoji-picker",
263
+ ref: this.ref,
264
+ style: {
265
+ minWidth: "350px"
266
+ }
267
+ });
268
+ }
269
+ }]);
270
+ }(React__default.default.Component);
271
+ EmojiPickerMenu.defaultProps = {
272
+ editor: {},
273
+ range: {}
274
+ };
275
+
276
+ var validateUrl = function validateUrl(url) {
277
+ if (!url) return false;
278
+ for (var _i = 0, _Object$values = Object.values(constants.URL_VALIDATORS); _i < _Object$values.length; _i++) {
279
+ var validator = _Object$values[_i];
280
+ var result = validator(url);
281
+ if (result) return result;
282
+ }
283
+ return false;
284
+ };
285
+
286
+ function ownKeys$a(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; }
287
+ function _objectSpread$a(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$a(Object(t), true).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$a(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
288
+ var MenuButton$1 = function MenuButton(_ref) {
289
+ var icon = _ref.icon,
290
+ command = _ref.command,
291
+ optionName = _ref.optionName,
292
+ highlight = _ref.highlight,
293
+ _ref$disabled = _ref.disabled,
294
+ isButtonDisabled = _ref$disabled === void 0 ? false : _ref$disabled,
295
+ label = _ref.label;
296
+ var _useEditorStore = useEditorStore.useEditorStore(function (store) {
297
+ var _store$marksState, _store$marksState2;
298
+ return {
299
+ isActive: (_store$marksState = store["marksState"]) === null || _store$marksState === void 0 || (_store$marksState = _store$marksState[optionName]) === null || _store$marksState === void 0 ? void 0 : _store$marksState["isActive"],
300
+ disabled: (_store$marksState2 = store["marksState"]) === null || _store$marksState2 === void 0 || (_store$marksState2 = _store$marksState2[optionName]) === null || _store$marksState2 === void 0 ? void 0 : _store$marksState2["disabled"]
301
+ };
302
+ }, shallow.shallow),
303
+ isActive = _useEditorStore.isActive,
304
+ _useEditorStore$disab = _useEditorStore.disabled,
305
+ disabled = _useEditorStore$disab === void 0 ? isButtonDisabled : _useEditorStore$disab;
306
+ return /*#__PURE__*/jsxRuntime.jsx(Button__default.default, _objectSpread$a({
307
+ disabled: disabled,
308
+ icon: icon,
309
+ className: "neeto-editor-fixed-menu__item",
310
+ "data-testid": "neeto-editor-fixed-menu-".concat(optionName, "-option"),
311
+ style: isActive ? "secondary" : "text",
312
+ tabIndex: "-1",
313
+ tooltipProps: {
314
+ content: renderTooltipContent(label, optionName),
315
+ position: "bottom"
316
+ },
317
+ onClick: command
318
+ }, useEditorStore.generateFocusProps(highlight)));
319
+ };
320
+ var MenuButton = /*#__PURE__*/React.memo(MenuButton$1);
321
+
322
+ var CalloutIcon = function CalloutIcon(_ref) {
323
+ var currentType = _ref.currentType;
324
+ if (currentType !== null && currentType !== void 0 && currentType.icon) {
325
+ var Icon = currentType.icon;
326
+ return /*#__PURE__*/jsxRuntime.jsx("span", {
327
+ className: "neeto-editor-callout-dropdown__current-emoji",
328
+ children: /*#__PURE__*/jsxRuntime.jsx(Icon, {
329
+ size: 22
330
+ })
331
+ });
332
+ }
333
+ return /*#__PURE__*/jsxRuntime.jsx(Flag__default.default, {
334
+ size: 16
335
+ });
336
+ };
337
+
338
+ var CalloutTypeOption = function CalloutTypeOption(_ref) {
339
+ var calloutType = _ref.calloutType,
340
+ isSelected = _ref.isSelected,
341
+ onClick = _ref.onClick;
342
+ var optionClass = classnames__default.default("neeto-editor-callout-dropdown__type-option", {
343
+ "neeto-editor-callout-dropdown__type-option--selected": isSelected
344
+ });
345
+ var Icon = calloutType.icon;
346
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
347
+ onClick: onClick,
348
+ className: optionClass,
349
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
350
+ className: "neeto-editor-callout-dropdown__type-emoji",
351
+ "data-testid": "callout-type-emoji",
352
+ children: /*#__PURE__*/jsxRuntime.jsx(Icon, {})
353
+ }), /*#__PURE__*/jsxRuntime.jsx(Typography__default.default, {
354
+ className: "neeto-editor-callout-dropdown__type-label",
355
+ style: "body2",
356
+ weight: "medium",
357
+ children: calloutType.label
358
+ })]
359
+ });
360
+ };
361
+
362
+ var RenderCalloutOptions = function RenderCalloutOptions(_ref) {
363
+ var isInCallout = _ref.isInCallout,
364
+ currentCalloutAttrs = _ref.currentCalloutAttrs,
365
+ handleCalloutTypeClick = _ref.handleCalloutTypeClick;
366
+ return CALLOUT_TYPES.map(function (calloutType, idx) {
367
+ return /*#__PURE__*/React.createElement(CalloutTypeOption, {
368
+ calloutType: calloutType,
369
+ isSelected: isInCallout && (currentCalloutAttrs === null || currentCalloutAttrs === void 0 ? void 0 : currentCalloutAttrs.type) === calloutType.type,
370
+ key: idx,
371
+ onClick: function onClick() {
372
+ return handleCalloutTypeClick(calloutType);
373
+ }
374
+ });
375
+ });
376
+ };
377
+
378
+ var CalloutDropdown = function CalloutDropdown(_ref) {
379
+ var editor = _ref.editor,
380
+ label = _ref.label,
381
+ tooltipContent = _ref.tooltipContent;
382
+ var _useTranslation = reactI18next.useTranslation(),
383
+ t = _useTranslation.t;
384
+ var dropdownRef = React.useRef(null);
385
+ var isInCallout = editor.isActive("callout");
386
+ var currentCalloutAttrs = isInCallout ? editor.getAttributes("callout") : null;
387
+ var currentType = neetoCist.findBy({
388
+ type: currentCalloutAttrs === null || currentCalloutAttrs === void 0 ? void 0 : currentCalloutAttrs.type
389
+ }, CALLOUT_TYPES) || CALLOUT_TYPES[0];
390
+ var handleCalloutTypeClick = function handleCalloutTypeClick(calloutType) {
391
+ var editorChain = editor.chain().focus();
392
+ var isSameType = isInCallout && (currentCalloutAttrs === null || currentCalloutAttrs === void 0 ? void 0 : currentCalloutAttrs.type) === calloutType.type;
393
+ if (isSameType) {
394
+ editorChain.lift("callout").run();
395
+ } else if (isInCallout) {
396
+ editorChain.updateAttributes("callout", {
397
+ type: calloutType.type,
398
+ emoji: calloutType.emoji
399
+ }).run();
400
+ } else {
401
+ editorChain.setCallout({
402
+ type: calloutType.type,
403
+ emoji: calloutType.emoji
404
+ }).run();
405
+ }
406
+ };
407
+ return /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default, {
408
+ autoWidth: true,
409
+ placement: "bottom-start",
410
+ strategy: "fixed",
411
+ buttonProps: {
412
+ icon: function icon() {
413
+ return /*#__PURE__*/jsxRuntime.jsx(CalloutIcon, {
414
+ currentType: isInCallout ? currentType : null
415
+ });
416
+ },
417
+ iconPosition: "left",
418
+ iconSize: 20,
419
+ label: /*#__PURE__*/jsxRuntime.jsx(Down__default.default, {
420
+ size: 12
421
+ }),
422
+ ref: dropdownRef,
423
+ "data-testid": "neeto-editor-fixed-menu-callout-option",
424
+ onKeyDown: function onKeyDown(event) {
425
+ var _dropdownRef$current;
426
+ return event.key === "ArrowDown" && ((_dropdownRef$current = dropdownRef.current) === null || _dropdownRef$current === void 0 ? void 0 : _dropdownRef$current.click());
427
+ },
428
+ tooltipProps: {
429
+ content: tooltipContent !== null && tooltipContent !== void 0 ? tooltipContent : label,
430
+ position: "bottom"
431
+ },
432
+ style: isInCallout ? "secondary" : "text",
433
+ size: "small",
434
+ className: "neeto-editor-fixed-menu__item"
435
+ },
436
+ children: /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default.Menu, {
437
+ className: "neeto-editor-callout-dropdown",
438
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
439
+ className: "neeto-editor-callout-dropdown__section",
440
+ children: [/*#__PURE__*/jsxRuntime.jsx(Typography__default.default, {
441
+ className: "neeto-editor-callout-dropdown__section-title",
442
+ style: "body2",
443
+ weight: "normal",
444
+ children: t("neetoEditor.menu.selectCalloutType")
445
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
446
+ className: "neeto-editor-callout-dropdown__options-grid",
447
+ children: /*#__PURE__*/jsxRuntime.jsx(RenderCalloutOptions, {
448
+ currentCalloutAttrs: currentCalloutAttrs,
449
+ handleCalloutTypeClick: handleCalloutTypeClick,
450
+ isInCallout: isInCallout
451
+ })
452
+ })]
453
+ })
454
+ })
455
+ });
456
+ };
457
+
458
+ var MenuItem$3 = Dropdown__default.default.MenuItem;
459
+ var SecondaryMenuTarget = function SecondaryMenuTarget(_ref) {
460
+ var Icon = _ref.icon,
461
+ label = _ref.label;
462
+ return /*#__PURE__*/jsxRuntime.jsxs(MenuItem$3.Button, {
463
+ "data-testid": "neeto-editor-fixed-menu-".concat(neetoCist.hyphenate(label), "-option"),
464
+ children: [/*#__PURE__*/jsxRuntime.jsx(Icon, {}), " ", label]
465
+ });
466
+ };
467
+
468
+ var EmojiOption$1 = function EmojiOption(_ref) {
469
+ var editor = _ref.editor,
470
+ isActive = _ref.isActive,
471
+ setActive = _ref.setActive,
472
+ tooltipContent = _ref.tooltipContent,
473
+ _ref$isSecondaryMenu = _ref.isSecondaryMenu,
474
+ isSecondaryMenu = _ref$isSecondaryMenu === void 0 ? false : _ref$isSecondaryMenu,
475
+ label = _ref.label;
476
+ return /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default, {
477
+ buttonStyle: "text",
478
+ closeOnSelect: false,
479
+ icon: Smiley__default.default,
480
+ isOpen: isActive,
481
+ position: isSecondaryMenu ? "left-start" : "bottom-start",
482
+ strategy: "fixed",
483
+ buttonProps: {
484
+ tabIndex: -1,
485
+ tooltipProps: {
486
+ content: tooltipContent !== null && tooltipContent !== void 0 ? tooltipContent : label,
487
+ position: "bottom"
488
+ },
489
+ className: "neeto-editor-fixed-menu__item",
490
+ "data-testid": "neeto-editor-fixed-menu-emoji-option"
491
+ },
492
+ customTarget: isSecondaryMenu && /*#__PURE__*/jsxRuntime.jsx(SecondaryMenuTarget, {
493
+ label: label,
494
+ icon: Smiley__default.default
495
+ }),
496
+ dropdownProps: {
497
+ classNames: "neeto-editor-fixed-menu__emoji-dropdown",
498
+ onClick: function onClick(e) {
499
+ return isSecondaryMenu && e.stopPropagation();
500
+ }
501
+ },
502
+ onClose: function onClose() {
503
+ return setActive(false);
504
+ },
505
+ onClick: function onClick(e) {
506
+ setActive(function (active) {
507
+ return !active;
508
+ });
509
+ isSecondaryMenu && e.stopPropagation();
510
+ },
511
+ children: /*#__PURE__*/jsxRuntime.jsx(EmojiPickerMenu, {
512
+ editor: editor,
513
+ setActive: setActive
514
+ })
515
+ });
516
+ };
517
+ var EmojiOption = /*#__PURE__*/React.memo(EmojiOption$1);
518
+
519
+ var LinkOption = function LinkOption(_ref) {
520
+ var editor = _ref.editor,
521
+ handleClose = _ref.handleClose,
522
+ handleAnimateInvalidLink = _ref.handleAnimateInvalidLink;
523
+ var _useTranslation = reactI18next.useTranslation(),
524
+ t = _useTranslation.t;
525
+ var _useState = React.useState(""),
526
+ _useState2 = _slicedToArray__default.default(_useState, 2),
527
+ link = _useState2[0],
528
+ setLink = _useState2[1];
529
+ React.useEffect(function () {
530
+ setLink(editor.getAttributes("link").href || "");
531
+ }, [editor]);
532
+ var handleKeyDown = function handleKeyDown(event) {
533
+ if (event.key === "Escape") {
534
+ handleClose();
535
+ } else if (event.key === "Enter") {
536
+ handleSubmit();
537
+ }
538
+ };
539
+ var handleSubmit = function handleSubmit() {
540
+ if (constants.ALL_PROTOCOL_URL_REGEXP.test(link)) {
541
+ editor.chain().focus().setLink({
542
+ href: link
543
+ }).run();
544
+ handleClose();
545
+ } else if (neetoCist.isNotPresent(link)) {
546
+ editor.chain().focus().unsetLink().run();
547
+ handleClose();
548
+ } else {
549
+ setLink("");
550
+ handleAnimateInvalidLink();
551
+ }
552
+ };
553
+ var handleReset = function handleReset() {
554
+ if (link) {
555
+ setLink("");
556
+ editor.chain().focus().unsetLink().run();
557
+ } else {
558
+ handleClose();
559
+ }
560
+ };
561
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
562
+ className: "neeto-editor-bubble-menu__link",
563
+ onKeyDown: handleKeyDown,
564
+ children: [/*#__PURE__*/jsxRuntime.jsx("input", {
565
+ autoFocus: true,
566
+ className: "neeto-editor-bubble-menu-link__input",
567
+ "data-testid": "neeto-editor-link-input",
568
+ name: "url",
569
+ placeholder: t("neetoEditor.placeholders.linkInput"),
570
+ value: link,
571
+ onChange: function onChange(_ref2) {
572
+ var value = _ref2.target.value;
573
+ return setLink(utils.validateAndFormatUrl(value));
574
+ }
575
+ }), /*#__PURE__*/jsxRuntime.jsx(Button__default.default, {
576
+ "data-testid": "neeto-editor-link-cancel-button",
577
+ icon: Close__default.default,
578
+ size: "small",
579
+ style: "secondary",
580
+ onClick: handleReset
581
+ })]
582
+ });
583
+ };
584
+
585
+ var TableOption$2 = function TableOption(_ref) {
586
+ var editor = _ref.editor,
587
+ handleClose = _ref.handleClose;
588
+ var _useTranslation = reactI18next.useTranslation(),
589
+ t = _useTranslation.t;
590
+ var _useState = React.useState(3),
591
+ _useState2 = _slicedToArray__default.default(_useState, 2),
592
+ rows = _useState2[0],
593
+ setRows = _useState2[1];
594
+ var _useState3 = React.useState(3),
595
+ _useState4 = _slicedToArray__default.default(_useState3, 2),
596
+ columns = _useState4[0],
597
+ setColumns = _useState4[1];
598
+ var handleSubmit = function handleSubmit() {
599
+ editor.chain().focus().insertTable({
600
+ rows: rows,
601
+ cols: columns,
602
+ withHeaderRow: true
603
+ }).run(), setRows(3);
604
+ setColumns(3);
605
+ handleClose();
606
+ };
607
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
608
+ className: "neeto-editor-bubble-menu__table",
609
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
610
+ className: "neeto-editor-bubble-menu__table__menu-item",
611
+ children: [/*#__PURE__*/jsxRuntime.jsx(Label__default.default, {
612
+ className: "neeto-editor-bubble-menu__table__input-label",
613
+ children: t("neetoEditor.menu.rows")
614
+ }), /*#__PURE__*/jsxRuntime.jsx("input", {
615
+ autoFocus: true,
616
+ "data-testid": "neeto-editor-bubble-menu-table-rows-input",
617
+ min: "1",
618
+ type: "number",
619
+ value: rows,
620
+ onChange: utils$1.withEventTargetValue(setRows)
621
+ })]
622
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
623
+ className: "neeto-editor-bubble-menu__table__menu-item",
624
+ children: [/*#__PURE__*/jsxRuntime.jsx(Label__default.default, {
625
+ className: "neeto-editor-bubble-menu__table__input-label",
626
+ children: t("neetoEditor.menu.columns")
627
+ }), /*#__PURE__*/jsxRuntime.jsx("input", {
628
+ "data-testid": "neeto-editor-bubble-menu-table-option-input",
629
+ min: "1",
630
+ type: "number",
631
+ value: columns,
632
+ onChange: utils$1.withEventTargetValue(setColumns)
633
+ })]
634
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
635
+ className: "neeto-editor-bubble-menu__table__buttons",
636
+ children: [/*#__PURE__*/jsxRuntime.jsx(Button__default.default, {
637
+ "data-testid": "neeto-editor-bubble-menu-table-option-create-button",
638
+ icon: Check__default.default,
639
+ size: "small",
640
+ style: "secondary",
641
+ onClick: handleSubmit
642
+ }), /*#__PURE__*/jsxRuntime.jsx(Button__default.default, {
643
+ "data-testid": "neeto-editor-bubble-menu-table-option-close-button",
644
+ icon: Close__default.default,
645
+ size: "small",
646
+ style: "secondary",
647
+ onClick: handleClose
648
+ })]
649
+ })]
650
+ });
651
+ };
652
+
653
+ function ownKeys$9(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; }
654
+ function _objectSpread$9(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$9(Object(t), true).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$9(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
655
+ var createMenuOptions$2 = function createMenuOptions(_ref) {
656
+ var tooltips = _ref.tooltips,
657
+ editor = _ref.editor,
658
+ setMediaUploader = _ref.setMediaUploader,
659
+ attachmentProps = _ref.attachmentProps,
660
+ setIsAddLinkActive = _ref.setIsAddLinkActive;
661
+ return {
662
+ font: [{
663
+ Icon: TextBold__default.default,
664
+ command: function command() {
665
+ return editor.chain().focus().toggleBold().run();
666
+ },
667
+ active: editor.isActive("bold"),
668
+ optionName: "bold",
669
+ tooltip: tooltips.bold || i18n.t("neetoEditor.menu.bold")
670
+ }, {
671
+ Icon: TextItalic__default.default,
672
+ command: function command() {
673
+ return editor.chain().focus().toggleItalic().run();
674
+ },
675
+ active: editor.isActive("italic"),
676
+ optionName: "italic",
677
+ tooltip: tooltips.italic || i18n.t("neetoEditor.menu.italic")
678
+ }, {
679
+ Icon: Underline__default.default,
680
+ command: function command() {
681
+ return editor.chain().focus().toggleUnderline().run();
682
+ },
683
+ active: editor.isActive("underline"),
684
+ optionName: "underline",
685
+ tooltip: tooltips.underline || i18n.t("neetoEditor.menu.underline")
686
+ }, {
687
+ Icon: Link__default.default,
688
+ command: function command() {
689
+ return setIsAddLinkActive(ramda.not);
690
+ },
691
+ optionName: "link",
692
+ tooltip: "Link"
693
+ }, {
694
+ Icon: TextCross__default.default,
695
+ command: function command() {
696
+ return editor.chain().focus().toggleStrike().run();
697
+ },
698
+ active: editor.isActive("strike"),
699
+ optionName: "strike",
700
+ tooltip: tooltips.strike || i18n.t("neetoEditor.menu.strike")
701
+ }, {
702
+ Icon: Highlight__default.default,
703
+ command: function command() {
704
+ return editor.chain().focus().toggleHighlight().run();
705
+ },
706
+ active: editor.isActive("highlight"),
707
+ optionName: "highlight",
708
+ tooltip: tooltips.highlight || i18n.t("neetoEditor.menu.highlight")
709
+ }],
710
+ block: [{
711
+ Icon: Quote__default.default,
712
+ command: function command() {
713
+ return editor.chain().focus().toggleBlockquote().run();
714
+ },
715
+ active: editor.isActive("blockquote"),
716
+ optionName: "block-quote",
717
+ highlight: true,
718
+ tooltip: tooltips.blockQuote || i18n.t("neetoEditor.menu.blockQuote")
719
+ }, {
720
+ Icon: Code__default.default,
721
+ command: function command() {
722
+ return editor.chain().focus().toggleCode().run();
723
+ },
724
+ active: editor.isActive("code"),
725
+ optionName: "code",
726
+ tooltip: tooltips.code || i18n.t("neetoEditor.menu.code")
727
+ }, {
728
+ Icon: CodeBlock__default.default,
729
+ command: function command() {
730
+ return editor.chain().focus().toggleCodeBlock().run();
731
+ },
732
+ active: editor.isActive("codeBlock"),
733
+ optionName: "code-block",
734
+ tooltip: tooltips.codeBlock || i18n.t("neetoEditor.menu.codeBlock")
735
+ }],
736
+ list: [{
737
+ Icon: ListDot__default.default,
738
+ command: function command() {
739
+ return editor.chain().focus().toggleBulletList().run();
740
+ },
741
+ active: editor.isActive("bulletList"),
742
+ optionName: "bullet-list",
743
+ highlight: true,
744
+ tooltip: tooltips.bulletList || i18n.t("neetoEditor.menu.bulletedList")
745
+ }, {
746
+ Icon: ListNumber__default.default,
747
+ command: function command() {
748
+ return editor.chain().focus().toggleOrderedList().run();
749
+ },
750
+ active: editor.isActive("orderedList"),
751
+ optionName: "ordered-list",
752
+ highlight: true,
753
+ tooltip: tooltips.orderedList || i18n.t("neetoEditor.menu.orderedList")
754
+ }],
755
+ misc: [{
756
+ Icon: Attachment__default.default,
757
+ command: attachmentProps === null || attachmentProps === void 0 ? void 0 : attachmentProps.handleUploadAttachments,
758
+ disabled: attachmentProps === null || attachmentProps === void 0 ? void 0 : attachmentProps.isDisabled,
759
+ active: false,
760
+ optionName: "attachments",
761
+ tooltip: tooltips.attachments || i18n.t("neetoEditor.menu.attachments")
762
+ }, {
763
+ Icon: ImageUpload__default.default,
764
+ command: function command() {
765
+ return setMediaUploader(ramda.assoc("image", true));
766
+ },
767
+ optionName: "image-upload",
768
+ tooltip: tooltips.imageUpload || i18n.t("neetoEditor.menu.imageUpload")
769
+ }, {
770
+ Icon: Video__default.default,
771
+ command: function command() {
772
+ return setMediaUploader(ramda.assoc("video", true));
773
+ },
774
+ optionName: "video-upload",
775
+ tooltip: tooltips.videoUpload || i18n.t("neetoEditor.menu.videoUpload")
776
+ }],
777
+ right: [{
778
+ Icon: Undo__default.default,
779
+ command: function command() {
780
+ return editor.chain().focus().undo().run();
781
+ },
782
+ active: false,
783
+ disabled: !editor.can().undo(),
784
+ optionName: "undo",
785
+ tooltip: tooltips.undo || i18n.t("neetoEditor.menu.undo")
786
+ }, {
787
+ Icon: Redo__default.default,
788
+ command: function command() {
789
+ return editor.chain().focus().redo().run();
790
+ },
791
+ active: false,
792
+ disabled: !editor.can().redo(),
793
+ optionName: "redo",
794
+ tooltip: tooltips.redo || i18n.t("neetoEditor.menu.redo")
795
+ }]
796
+ };
797
+ };
798
+ var buildBubbleMenuOptions = function buildBubbleMenuOptions(_ref2) {
799
+ var tooltips = _ref2.tooltips,
800
+ editor = _ref2.editor,
801
+ options = _ref2.options,
802
+ setMediaUploader = _ref2.setMediaUploader,
803
+ attachmentProps = _ref2.attachmentProps,
804
+ setIsAddLinkActive = _ref2.setIsAddLinkActive;
805
+ var menuOptions = createMenuOptions$2({
806
+ tooltips: tooltips,
807
+ editor: editor,
808
+ setMediaUploader: setMediaUploader,
809
+ attachmentProps: attachmentProps,
810
+ setIsAddLinkActive: setIsAddLinkActive
811
+ });
812
+ return ramda.fromPairs(["font", "block", "list", "misc", "right"].map(function (option) {
813
+ return [option, menuOptions[option].filter(function (item) {
814
+ return options.includes(item.optionName);
815
+ })];
816
+ }));
817
+ };
818
+ var getTextMenuDropdownOptions = function getTextMenuDropdownOptions(_ref3) {
819
+ var editor = _ref3.editor,
820
+ options = _ref3.options;
821
+ var textOptions = _defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default({}, constants.EDITOR_OPTIONS.H1, {
822
+ optionName: "Heading 1",
823
+ icon: TextH1__default.default,
824
+ active: editor.isActive("heading", {
825
+ level: 1
826
+ }),
827
+ command: function command() {
828
+ return editor.chain().focus().setNode("heading", {
829
+ level: 1
830
+ }).run();
831
+ }
832
+ }), constants.EDITOR_OPTIONS.H2, {
833
+ optionName: "Heading 2",
834
+ icon: TextH2__default.default,
835
+ active: editor.isActive("heading", {
836
+ level: 2
837
+ }),
838
+ command: function command() {
839
+ return editor.chain().focus().setNode("heading", {
840
+ level: 2
841
+ }).run();
842
+ }
843
+ }), constants.EDITOR_OPTIONS.H3, {
844
+ optionName: "Heading 3",
845
+ icon: TextH3__default.default,
846
+ active: editor.isActive("heading", {
847
+ level: 3
848
+ }),
849
+ command: function command() {
850
+ return editor.chain().focus().setNode("heading", {
851
+ level: 3
852
+ }).run();
853
+ }
854
+ }), constants.EDITOR_OPTIONS.PARAGRAPH, {
855
+ optionName: "Text",
856
+ icon: TextP__default.default,
857
+ active: editor.isActive("paragraph"),
858
+ command: function command() {
859
+ return editor.chain().focus().setNode("paragraph").run();
860
+ }
861
+ });
862
+ var result = [];
863
+ options.forEach(function (option) {
864
+ if (!textOptions[option]) return;
865
+ result.push(textOptions[option]);
866
+ });
867
+ return result;
868
+ };
869
+ var getNodeIcon = function getNodeIcon(options) {
870
+ var _options$find;
871
+ return ((_options$find = options.find(ramda.prop("active"))) === null || _options$find === void 0 ? void 0 : _options$find.icon) || TextP__default.default;
872
+ };
873
+ var renderOptionButton = function renderOptionButton(_ref4) {
874
+ var tooltip = _ref4.tooltip,
875
+ Icon = _ref4.Icon,
876
+ command = _ref4.command,
877
+ active = _ref4.active,
878
+ optionName = _ref4.optionName,
879
+ highlight = _ref4.highlight;
880
+ return /*#__PURE__*/jsxRuntime.jsx(Button__default.default, _objectSpread$9({
881
+ className: "neeto-editor-bubble-menu__item",
882
+ "data-testid": "neeto-editor-bubble-menu-".concat(optionName, "-option"),
883
+ icon: Icon,
884
+ size: "medium",
885
+ style: active ? "secondary" : "text",
886
+ tooltipProps: {
887
+ content: tooltip,
888
+ position: "bottom",
889
+ theme: "dark"
890
+ },
891
+ onClick: command
892
+ }, useEditorStore.generateFocusProps(highlight)), optionName);
893
+ };
894
+
895
+ var Menu$4 = Dropdown__default.default.Menu,
896
+ MenuItem$2 = Dropdown__default.default.MenuItem;
897
+ var Mentions$1 = function Mentions(_ref) {
898
+ var editor = _ref.editor,
899
+ mentions = _ref.mentions,
900
+ tooltipContent = _ref.tooltipContent,
901
+ _ref$isSecondaryMenu = _ref.isSecondaryMenu,
902
+ isSecondaryMenu = _ref$isSecondaryMenu === void 0 ? false : _ref$isSecondaryMenu,
903
+ label = _ref.label;
904
+ if (ramda.isEmpty(mentions)) return null;
905
+ return /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default, {
906
+ buttonStyle: "text",
907
+ "data-testid": "neeto-editor-mention-option",
908
+ icon: Email__default.default,
909
+ position: isSecondaryMenu ? "left-start" : "bottom-start",
910
+ strategy: "fixed",
911
+ buttonProps: {
912
+ tooltipProps: {
913
+ content: tooltipContent !== null && tooltipContent !== void 0 ? tooltipContent : label,
914
+ position: "bottom"
915
+ },
916
+ className: "neeto-editor-fixed-menu__item"
917
+ },
918
+ customTarget: isSecondaryMenu && /*#__PURE__*/jsxRuntime.jsx(SecondaryMenuTarget, {
919
+ label: label,
920
+ icon: Email__default.default
921
+ }),
922
+ onClick: function onClick(e) {
923
+ return isSecondaryMenu && e.stopPropagation();
924
+ },
925
+ children: /*#__PURE__*/jsxRuntime.jsx(Menu$4, {
926
+ children: mentions.map(function (_ref2) {
927
+ var key = _ref2.key,
928
+ name = _ref2.name,
929
+ imageUrl = _ref2.imageUrl;
930
+ return /*#__PURE__*/jsxRuntime.jsxs(MenuItem$2.Button, {
931
+ "data-testid": "neeto-editor-mention-option-".concat(key),
932
+ onClick: function onClick() {
933
+ return editor.commands.setMention({
934
+ id: key,
935
+ label: name
936
+ });
937
+ },
938
+ children: [/*#__PURE__*/jsxRuntime.jsx(Avatar__default.default, {
939
+ size: "small",
940
+ user: {
941
+ name: name,
942
+ imageUrl: imageUrl
943
+ }
944
+ }), /*#__PURE__*/jsxRuntime.jsx(Typography__default.default, {
945
+ style: "body2",
946
+ children: name
947
+ })]
948
+ }, key);
949
+ })
950
+ })
951
+ });
952
+ };
953
+ var Mentions = /*#__PURE__*/React.memo(Mentions$1);
954
+
955
+ var TextColorOption = function TextColorOption(_ref) {
956
+ var editor = _ref.editor,
957
+ tooltipContent = _ref.tooltipContent,
958
+ _ref$isSecondaryMenu = _ref.isSecondaryMenu,
959
+ isSecondaryMenu = _ref$isSecondaryMenu === void 0 ? false : _ref$isSecondaryMenu,
960
+ label = _ref.label;
961
+ var _useState = React.useState(false),
962
+ _useState2 = _slicedToArray__default.default(_useState, 2),
963
+ isOpen = _useState2[0],
964
+ setIsOpen = _useState2[1];
965
+ var _useState3 = React.useState(null),
966
+ _useState4 = _slicedToArray__default.default(_useState3, 2),
967
+ color = _useState4[0],
968
+ setColor = _useState4[1];
969
+ var dropdownWrapperRef = React.useRef(null);
970
+ var _useTranslation = reactI18next.useTranslation(),
971
+ t = _useTranslation.t;
972
+ var handleSave = function handleSave() {
973
+ editor.chain().focus().setColor(color).run();
974
+ setIsOpen(false);
975
+ };
976
+ var handleUnset = function handleUnset() {
977
+ editor.chain().focus().unsetColor().run();
978
+ setColor(null);
979
+ setIsOpen(false);
980
+ };
981
+ reactUtils.useOnClickOutside(dropdownWrapperRef, function (event) {
982
+ if (!isOpen) return;
983
+ event.preventDefault();
984
+ editor.commands.focus();
985
+ setIsOpen(false);
986
+ });
987
+ React.useEffect(function () {
988
+ setColor(editor.getAttributes("textStyle").color);
989
+ }, [isOpen, editor.getAttributes("textStyle").color]);
990
+ var openColorPicker = function openColorPicker(e) {
991
+ isSecondaryMenu && e.stopPropagation();
992
+ setColor(editor.getAttributes("textStyle").color);
993
+ setIsOpen(ramda.not);
994
+ };
995
+ return /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default, {
996
+ isOpen: isOpen,
997
+ buttonStyle: isOpen || color ? "secondary" : "text",
998
+ icon: Customize__default.default,
999
+ position: isSecondaryMenu ? "left-start" : "bottom-start",
1000
+ buttonProps: {
1001
+ tabIndex: -1,
1002
+ tooltipProps: {
1003
+ content: tooltipContent !== null && tooltipContent !== void 0 ? tooltipContent : label,
1004
+ position: "bottom"
1005
+ },
1006
+ className: "neeto-editor-fixed-menu__item neeto-editor-text-color-option",
1007
+ "data-testid": "neeto-editor-fixed-menu-text-color-option"
1008
+ },
1009
+ customTarget: isSecondaryMenu && /*#__PURE__*/jsxRuntime.jsx(SecondaryMenuTarget, {
1010
+ label: label,
1011
+ icon: Customize__default.default
1012
+ }),
1013
+ onClick: openColorPicker,
1014
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
1015
+ ref: dropdownWrapperRef,
1016
+ style: {
1017
+ "min-width": "236px"
1018
+ },
1019
+ onClick: function onClick(e) {
1020
+ e.stopPropagation();
1021
+ },
1022
+ children: [/*#__PURE__*/jsxRuntime.jsx(reactColorful.HexColorPicker, {
1023
+ color: color || "#000000",
1024
+ onChange: setColor
1025
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
1026
+ className: "neeto-editor-text-color-option__options-group",
1027
+ children: [/*#__PURE__*/jsxRuntime.jsx(Input__default.default, {
1028
+ autoFocus: true,
1029
+ className: "neeto-editor-text-color-option__options-group__input",
1030
+ placeholder: t("neetoEditor.placeholders.pickColor"),
1031
+ size: "small",
1032
+ value: color,
1033
+ onChange: utils$1.withEventTargetValue(setColor),
1034
+ onClick: function onClick(event) {
1035
+ return event.stopPropagation();
1036
+ }
1037
+ }), /*#__PURE__*/jsxRuntime.jsx(Button__default.default, {
1038
+ icon: Check__default.default,
1039
+ size: "small",
1040
+ onClick: handleSave
1041
+ }), /*#__PURE__*/jsxRuntime.jsx(Button__default.default, {
1042
+ icon: Close__default.default,
1043
+ size: "small",
1044
+ style: "text",
1045
+ onClick: function onClick() {
1046
+ editor.commands.focus();
1047
+ setIsOpen(false);
1048
+ }
1049
+ }), /*#__PURE__*/jsxRuntime.jsx(Button__default.default, {
1050
+ icon: Refresh__default.default,
1051
+ size: "small",
1052
+ style: "text",
1053
+ tooltipProps: {
1054
+ content: t("neetoEditor.common.resetToDefault"),
1055
+ position: "top"
1056
+ },
1057
+ onClick: handleUnset
1058
+ })]
1059
+ })]
1060
+ })
1061
+ });
1062
+ };
1063
+
1064
+ var Options = function Options(_ref) {
1065
+ var editor = _ref.editor,
1066
+ options = _ref.options,
1067
+ mentions = _ref.mentions,
1068
+ tooltips = _ref.tooltips,
1069
+ setIsInvalidLink = _ref.setIsInvalidLink,
1070
+ isLinkOptionActive = _ref.isLinkOptionActive,
1071
+ isTableOptionActive = _ref.isTableOptionActive,
1072
+ setIsLinkOptionActive = _ref.setIsLinkOptionActive,
1073
+ setIsTableOptionActive = _ref.setIsTableOptionActive,
1074
+ setMediaUploader = _ref.setMediaUploader,
1075
+ attachmentProps = _ref.attachmentProps,
1076
+ isEmojiPickerActive = _ref.isEmojiPickerActive,
1077
+ setIsEmojiPickerActive = _ref.setIsEmojiPickerActive;
1078
+ var _useTranslation = reactI18next.useTranslation(),
1079
+ t = _useTranslation.t;
1080
+ var Menu = Dropdown__default.default.Menu,
1081
+ MenuItem = Dropdown__default.default.MenuItem;
1082
+ var dropdownOptions = getTextMenuDropdownOptions({
1083
+ editor: editor,
1084
+ options: options
1085
+ });
1086
+ var Icon = getNodeIcon(dropdownOptions);
1087
+ var isEmojiActive = options.includes(constants.EDITOR_OPTIONS.EMOJI);
1088
+ var isTextColorOptionActive = options.includes(constants.EDITOR_OPTIONS.TEXT_COLOR);
1089
+ var isLinkActive = options.includes(constants.EDITOR_OPTIONS.LINK);
1090
+ var isTableActive = options.includes(constants.EDITOR_OPTIONS.TABLE);
1091
+ var _buildBubbleMenuOptio = buildBubbleMenuOptions({
1092
+ editor: editor,
1093
+ options: options,
1094
+ setMediaUploader: setMediaUploader,
1095
+ tooltips: tooltips,
1096
+ attachmentProps: attachmentProps,
1097
+ setIsAddLinkActive: setIsLinkOptionActive
1098
+ }),
1099
+ fontStyleOptions = _buildBubbleMenuOptio.font,
1100
+ blockStyleOptions = _buildBubbleMenuOptio.block,
1101
+ listStyleOptions = _buildBubbleMenuOptio.list;
1102
+ var handleAnimateInvalidLink = function handleAnimateInvalidLink() {
1103
+ setIsInvalidLink(true);
1104
+ setTimeout(function () {
1105
+ setIsInvalidLink(false);
1106
+ }, 1000);
1107
+ };
1108
+ if (isLinkOptionActive) {
1109
+ return /*#__PURE__*/jsxRuntime.jsx(LinkOption, {
1110
+ editor: editor,
1111
+ handleAnimateInvalidLink: handleAnimateInvalidLink,
1112
+ handleClose: function handleClose() {
1113
+ return setIsLinkOptionActive(false);
1114
+ }
1115
+ });
1116
+ }
1117
+ if (isTableOptionActive) {
1118
+ return /*#__PURE__*/jsxRuntime.jsx(TableOption$2, {
1119
+ editor: editor,
1120
+ handleClose: function handleClose() {
1121
+ return setIsTableOptionActive(false);
1122
+ }
1123
+ });
1124
+ }
1125
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1126
+ children: [/*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default, {
1127
+ buttonSize: "small",
1128
+ buttonStyle: "text",
1129
+ label: Icon,
1130
+ strategy: "fixed",
1131
+ buttonProps: {
1132
+ icon: Icon,
1133
+ iconPosition: "left",
1134
+ iconSize: 22,
1135
+ label: /*#__PURE__*/jsxRuntime.jsx(Down__default.default, {
1136
+ size: 12
1137
+ }),
1138
+ "data-testid": "neeto-editor-fixed-menu-font-size-option",
1139
+ style: "text",
1140
+ size: "small",
1141
+ className: "neeto-editor-bubble-menu__item neeto-editor-font-size__wrapper"
1142
+ },
1143
+ children: /*#__PURE__*/jsxRuntime.jsx(Menu, {
1144
+ className: "neeto-ui-flex neeto-ui-gap-1 neeto-editor-menu-font-size-options",
1145
+ children: dropdownOptions.map(function (_ref2) {
1146
+ var optionName = _ref2.optionName,
1147
+ command = _ref2.command,
1148
+ Icon = _ref2.icon;
1149
+ return /*#__PURE__*/jsxRuntime.jsx(MenuItem.Button, {
1150
+ className: "neeto-editor-menu-font-size-options__item-btn",
1151
+ tooltipProps: {
1152
+ content: optionName,
1153
+ position: "bottom"
1154
+ },
1155
+ onClick: command,
1156
+ children: /*#__PURE__*/jsxRuntime.jsx(Icon, {
1157
+ size: 22
1158
+ })
1159
+ }, optionName);
1160
+ })
1161
+ })
1162
+ }), fontStyleOptions.map(renderOptionButton), blockStyleOptions.map(renderOptionButton), isTextColorOptionActive && /*#__PURE__*/jsxRuntime.jsx(TextColorOption, {
1163
+ editor: editor,
1164
+ tooltipContent: tooltips.textColor || t("neetoEditor.menu.textColor")
1165
+ }), isEmojiActive && /*#__PURE__*/jsxRuntime.jsx(EmojiOption, {
1166
+ editor: editor,
1167
+ isActive: isEmojiPickerActive,
1168
+ setActive: setIsEmojiPickerActive,
1169
+ tooltipContent: tooltips.emoji || t("neetoEditor.menu.emoji")
1170
+ }), listStyleOptions.map(renderOptionButton), isLinkActive && renderOptionButton({
1171
+ Icon: Link__default.default,
1172
+ command: function command() {
1173
+ return setIsLinkOptionActive(true);
1174
+ },
1175
+ active: editor.isActive("link"),
1176
+ optionName: "link",
1177
+ highlight: false,
1178
+ tooltip: tooltips.link || t("neetoEditor.menu.link")
1179
+ }), isTableActive && renderOptionButton({
1180
+ Icon: Column__default.default,
1181
+ command: function command() {
1182
+ return setIsTableOptionActive(true);
1183
+ },
1184
+ active: editor.isActive("table"),
1185
+ optionName: "table",
1186
+ highlight: false,
1187
+ tooltip: tooltips.table || t("neetoEditor.menu.table")
1188
+ }), /*#__PURE__*/jsxRuntime.jsx(Mentions, {
1189
+ editor: editor,
1190
+ mentions: mentions,
1191
+ tooltipContent: tooltips.mention || t("neetoEditor.menu.mention")
1192
+ })]
1193
+ });
1194
+ };
1195
+
1196
+ var Bubble = function Bubble(_ref) {
1197
+ var editor = _ref.editor,
1198
+ textOptions = _ref.options,
1199
+ _ref$mentions = _ref.mentions,
1200
+ mentions = _ref$mentions === void 0 ? [] : _ref$mentions,
1201
+ setMediaUploader = _ref.setMediaUploader,
1202
+ _ref$tooltips = _ref.tooltips,
1203
+ tooltips = _ref$tooltips === void 0 ? {} : _ref$tooltips,
1204
+ attachmentProps = _ref.attachmentProps,
1205
+ isEmojiPickerActive = _ref.isEmojiPickerActive,
1206
+ setIsEmojiPickerActive = _ref.setIsEmojiPickerActive;
1207
+ var _useState = React.useState(false),
1208
+ _useState2 = _slicedToArray__default.default(_useState, 2),
1209
+ isInvalidLink = _useState2[0],
1210
+ setIsInvalidLink = _useState2[1];
1211
+ var _useState3 = React.useState(false),
1212
+ _useState4 = _slicedToArray__default.default(_useState3, 2),
1213
+ isLinkOptionActive = _useState4[0],
1214
+ setIsLinkOptionActive = _useState4[1];
1215
+ var _useState5 = React.useState(false),
1216
+ _useState6 = _slicedToArray__default.default(_useState5, 2),
1217
+ isTableOptionActive = _useState6[0],
1218
+ setIsTableOptionActive = _useState6[1];
1219
+ var selectedNode = editor && editor.view.state.selection.node;
1220
+ var isImageNodeSelected = selectedNode && selectedNode.type.name === "image";
1221
+ var bubbleMenuOptions = [constants.EDITOR_OPTIONS.BOLD, constants.EDITOR_OPTIONS.ITALIC, constants.EDITOR_OPTIONS.UNDERLINE, constants.EDITOR_OPTIONS.STRIKETHROUGH, constants.EDITOR_OPTIONS.LINK];
1222
+ var noTextOptions = neetoCist.isNotPresent(textOptions.filter(function (option) {
1223
+ return bubbleMenuOptions.includes(option);
1224
+ }));
1225
+ if (!editor || !isImageNodeSelected && noTextOptions) {
1226
+ return null;
1227
+ }
1228
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
1229
+ children: /*#__PURE__*/jsxRuntime.jsx(useEditorStore.BubbleMenu, {
1230
+ editor: editor,
1231
+ style: {
1232
+ zIndex: 99999,
1233
+ maxWidth: 500
1234
+ },
1235
+ className: classnames__default.default("neeto-editor-bubble-menu", {
1236
+ "neeto-editor-bubble-menu-animate-shake": isInvalidLink
1237
+ }),
1238
+ options: {
1239
+ offset: 10,
1240
+ onHide: function onHide() {
1241
+ setIsLinkOptionActive(false);
1242
+ setIsTableOptionActive(false);
1243
+ }
1244
+ },
1245
+ children: /*#__PURE__*/jsxRuntime.jsx(Options, {
1246
+ attachmentProps: attachmentProps,
1247
+ editor: editor,
1248
+ isEmojiPickerActive: isEmojiPickerActive,
1249
+ isLinkOptionActive: isLinkOptionActive,
1250
+ isTableOptionActive: isTableOptionActive,
1251
+ mentions: mentions,
1252
+ setIsEmojiPickerActive: setIsEmojiPickerActive,
1253
+ setIsInvalidLink: setIsInvalidLink,
1254
+ setIsLinkOptionActive: setIsLinkOptionActive,
1255
+ setIsTableOptionActive: setIsTableOptionActive,
1256
+ setMediaUploader: setMediaUploader,
1257
+ tooltips: tooltips,
1258
+ options: textOptions
1259
+ })
1260
+ })
1261
+ });
1262
+ };
1263
+
1264
+ var EmptyMenu = function EmptyMenu() {
1265
+ return /*#__PURE__*/jsxRuntime.jsx("div", {});
1266
+ };
1267
+
1268
+ var Progress = reactUtils.withT(function (_ref) {
1269
+ var t = _ref.t,
1270
+ queuedFiles = _ref.queuedFiles,
1271
+ cancelUpload = _ref.cancelUpload;
1272
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
1273
+ className: "ne-media-uploader__wrapper",
1274
+ children: queuedFiles.map(function (_ref2) {
1275
+ var id = _ref2.id,
1276
+ filename = _ref2.filename,
1277
+ _ref2$progress = _ref2.progress,
1278
+ progress = _ref2$progress === void 0 ? 0 : _ref2$progress;
1279
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
1280
+ className: "ne-media-uploader__media",
1281
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
1282
+ className: "ne-media-uploader__media__cancel-button-wrapper",
1283
+ children: /*#__PURE__*/jsxRuntime.jsx(Button__default.default, {
1284
+ "data-testid": "neeto-editor-image-upload-cancel-button",
1285
+ icon: Close__default.default,
1286
+ iconSize: 18,
1287
+ size: "small",
1288
+ style: "text",
1289
+ onClick: function onClick() {
1290
+ return cancelUpload(id);
1291
+ }
1292
+ })
1293
+ }), /*#__PURE__*/jsxRuntime.jsx(FileIcon.File, {
1294
+ className: "ne-media-uploader__media__info__icon",
1295
+ fileName: filename
1296
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
1297
+ className: "ne-media-uploader__media__info",
1298
+ children: [/*#__PURE__*/jsxRuntime.jsxs(Typography__default.default, {
1299
+ style: "nano",
1300
+ children: [progress === 100 && t("neetoEditor.localUploader.completed"), progress !== 100 && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1301
+ children: [progress, "%"]
1302
+ })]
1303
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
1304
+ className: "ne-media-uploader__media__progress",
1305
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
1306
+ className: "ne-media-uploader__media__progress-bar",
1307
+ style: {
1308
+ width: "".concat(progress, "%")
1309
+ }
1310
+ })
1311
+ }), /*#__PURE__*/jsxRuntime.jsx(Tooltip__default.default, {
1312
+ content: filename,
1313
+ position: "top",
1314
+ children: /*#__PURE__*/jsxRuntime.jsx(Typography__default.default, {
1315
+ style: "body3",
1316
+ children: filename
1317
+ })
1318
+ })]
1319
+ })]
1320
+ }, id);
1321
+ })
1322
+ });
1323
+ });
1324
+
1325
+ var LocalUploader = function LocalUploader(_ref) {
1326
+ var isImage = _ref.isImage,
1327
+ onClose = _ref.onClose,
1328
+ insertMediaToEditor = _ref.insertMediaToEditor,
1329
+ setIsUploading = _ref.setIsUploading;
1330
+ var _useTranslation = reactI18next.useTranslation(),
1331
+ t = _useTranslation.t;
1332
+ var uploadConfig = isImage ? FileIcon.DEFAULT_IMAGE_UPLOAD_CONFIG : FileIcon.DEFAULT_VIDEO_UPLOAD_CONFIG;
1333
+ var fileInputRef = React.useRef(null);
1334
+ var dropTargetRef = React.useRef(null);
1335
+ var _useFileUploader = FileIcon.useFileUploader({
1336
+ config: uploadConfig,
1337
+ setIsUploadingOnHost: setIsUploading
1338
+ }),
1339
+ addFiles = _useFileUploader.addFiles,
1340
+ uploadFiles = _useFileUploader.uploadFiles,
1341
+ queuedFiles = _useFileUploader.queuedFiles,
1342
+ cancelUpload = _useFileUploader.cancelUpload,
1343
+ isUploading = _useFileUploader.isUploading;
1344
+ var handleFilesDrop = /*#__PURE__*/function () {
1345
+ var _ref2 = _asyncToGenerator__default.default(/*#__PURE__*/_regeneratorRuntime__default.default.mark(function _callee(files) {
1346
+ var uploadedFiles;
1347
+ return _regeneratorRuntime__default.default.wrap(function _callee$(_context) {
1348
+ while (1) switch (_context.prev = _context.next) {
1349
+ case 0:
1350
+ addFiles(files);
1351
+ _context.next = 3;
1352
+ return uploadFiles();
1353
+ case 3:
1354
+ uploadedFiles = _context.sent;
1355
+ uploadedFiles.forEach(insertMediaToEditor);
1356
+ onClose();
1357
+ case 6:
1358
+ case "end":
1359
+ return _context.stop();
1360
+ }
1361
+ }, _callee);
1362
+ }));
1363
+ return function handleFilesDrop(_x) {
1364
+ return _ref2.apply(this, arguments);
1365
+ };
1366
+ }();
1367
+ reactFileIcon_esm.useDropFiles({
1368
+ dropTargetRef: dropTargetRef,
1369
+ onDrop: handleFilesDrop
1370
+ });
1371
+ setIsUploading(isUploading);
1372
+ var handleAddFile = /*#__PURE__*/function () {
1373
+ var _ref4 = _asyncToGenerator__default.default(/*#__PURE__*/_regeneratorRuntime__default.default.mark(function _callee2(_ref3) {
1374
+ var files, uploadedFiles;
1375
+ return _regeneratorRuntime__default.default.wrap(function _callee2$(_context2) {
1376
+ while (1) switch (_context2.prev = _context2.next) {
1377
+ case 0:
1378
+ files = _ref3.target.files;
1379
+ addFiles(files);
1380
+ _context2.next = 4;
1381
+ return uploadFiles();
1382
+ case 4:
1383
+ uploadedFiles = _context2.sent;
1384
+ uploadedFiles.forEach(insertMediaToEditor);
1385
+ onClose();
1386
+ case 7:
1387
+ case "end":
1388
+ return _context2.stop();
1389
+ }
1390
+ }, _callee2);
1391
+ }));
1392
+ return function handleAddFile(_x2) {
1393
+ return _ref4.apply(this, arguments);
1394
+ };
1395
+ }();
1396
+ return !ramda.isEmpty(queuedFiles) || isUploading ? /*#__PURE__*/jsxRuntime.jsx(Progress, {
1397
+ cancelUpload: cancelUpload,
1398
+ queuedFiles: queuedFiles
1399
+ }) : /*#__PURE__*/jsxRuntime.jsxs("div", {
1400
+ className: "ne-media-uploader__dnd",
1401
+ "data-testid": "neeto-editor-media-uploader-dnd",
1402
+ ref: dropTargetRef,
1403
+ tabIndex: 0,
1404
+ onClick: function onClick() {
1405
+ var _fileInputRef$current;
1406
+ return (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current.click();
1407
+ },
1408
+ children: [/*#__PURE__*/jsxRuntime.jsx("input", {
1409
+ multiple: true,
1410
+ className: "ne-media-uploader__dnd-input",
1411
+ "data-testid": "neeto-editor-media-uploader-input",
1412
+ ref: fileInputRef,
1413
+ type: "file",
1414
+ accept: isImage ? FileIcon.ALLOWED_IMAGE_TYPES.join(",") : FileIcon.ALLOWED_VIDEO_TYPES.join(","),
1415
+ onChange: handleAddFile
1416
+ }), /*#__PURE__*/jsxRuntime.jsx(ImageUpload__default.default, {
1417
+ className: "ne-media-uploader__dnd-icon",
1418
+ size: 24
1419
+ }), /*#__PURE__*/jsxRuntime.jsx(Typography__default.default, {
1420
+ style: "body2",
1421
+ children: t("neetoEditor.localUploader.dropFilesHere")
1422
+ }), /*#__PURE__*/jsxRuntime.jsx(Typography__default.default, {
1423
+ style: "body3",
1424
+ children: t("neetoEditor.localUploader.maxFileSize", {
1425
+ entity: FileIcon.convertToFileSize(uploadConfig.restrictions.maxFileSize)
1426
+ })
1427
+ })]
1428
+ });
1429
+ };
1430
+
1431
+ var VideoEmbedForm = function VideoEmbedForm(_ref) {
1432
+ var onEmbedVideo = _ref.onEmbedVideo,
1433
+ onAttachVideo = _ref.onAttachVideo,
1434
+ onClose = _ref.onClose;
1435
+ var _useTranslation = reactI18next.useTranslation(),
1436
+ t = _useTranslation.t;
1437
+ var initialValues = {
1438
+ url: ""
1439
+ };
1440
+ var onSubmit = function onSubmit(_ref2) {
1441
+ var url = _ref2.url;
1442
+ var embedUrl = validateUrl(url); // False when current url is not "embeddable"
1443
+ if (embedUrl) onEmbedVideo(url, embedUrl);else onAttachVideo(url);
1444
+ onClose();
1445
+ };
1446
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
1447
+ className: "ne-video-embed-form",
1448
+ children: /*#__PURE__*/jsxRuntime.jsx(Form__default.default, {
1449
+ formikProps: {
1450
+ initialValues: initialValues,
1451
+ validationSchema: FileIcon.VIDEO_EMBED_FORM_VALIDATION_SCHEMA,
1452
+ onSubmit: onSubmit
1453
+ },
1454
+ children: function children(_ref3) {
1455
+ var dirty = _ref3.dirty,
1456
+ isSubmitting = _ref3.isSubmitting,
1457
+ resetForm = _ref3.resetForm;
1458
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1459
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
1460
+ className: "ne-video-embed-form__content",
1461
+ children: /*#__PURE__*/jsxRuntime.jsx(Input__default$1.default, {
1462
+ autoFocus: true,
1463
+ unlimitedChars: true,
1464
+ "data-testid": "neeto-editor-video-embed-input",
1465
+ label: t("neetoEditor.common.videoUrl"),
1466
+ name: "url",
1467
+ placeholder: t("neetoEditor.placeholders.embedUrl"),
1468
+ size: "medium",
1469
+ type: "text"
1470
+ })
1471
+ }), /*#__PURE__*/jsxRuntime.jsx(ActionBlock__default.default, {
1472
+ cancelButtonProps: {
1473
+ "data-testid": "neeto-editor-video-embed-cancel",
1474
+ label: t("neetoEditor.common.cancel"),
1475
+ size: "small",
1476
+ onClick: function onClick() {
1477
+ resetForm();
1478
+ onClose();
1479
+ }
1480
+ },
1481
+ submitButtonProps: {
1482
+ "data-testid": "neeto-editor-video-embed-submit",
1483
+ disabled: !dirty,
1484
+ label: t("neetoEditor.common.saveChanges"),
1485
+ loading: isSubmitting,
1486
+ size: "small"
1487
+ }
1488
+ })]
1489
+ });
1490
+ }
1491
+ })
1492
+ });
1493
+ };
1494
+
1495
+ var MediaUploader = function MediaUploader(_ref) {
1496
+ var mediaUploader = _ref.mediaUploader,
1497
+ onClose = _ref.onClose,
1498
+ editor = _ref.editor,
1499
+ _ref$showAssetLibrary = _ref.showAssetLibrary,
1500
+ showAssetLibrary = _ref$showAssetLibrary === void 0 ? true : _ref$showAssetLibrary;
1501
+ var _useTranslation = reactI18next.useTranslation(),
1502
+ t = _useTranslation.t;
1503
+ var _useState = React.useState("local"),
1504
+ _useState2 = _slicedToArray__default.default(_useState, 2),
1505
+ activeTab = _useState2[0],
1506
+ setActiveTab = _useState2[1];
1507
+ var _useState3 = React.useState(false),
1508
+ _useState4 = _slicedToArray__default.default(_useState3, 2),
1509
+ isUploading = _useState4[0],
1510
+ setIsUploading = _useState4[1];
1511
+ var isOpen = mediaUploader.image || mediaUploader.video;
1512
+ var _useState5 = React.useState([]),
1513
+ _useState6 = _slicedToArray__default.default(_useState5, 2),
1514
+ tabs = _useState6[0],
1515
+ setTabs = _useState6[1];
1516
+ React.useEffect(function () {
1517
+ isOpen && setTabs(FileIcon.getTabs(mediaUploader));
1518
+ }, [mediaUploader]);
1519
+ var handleClose = function handleClose() {
1520
+ onClose();
1521
+ setActiveTab("local");
1522
+ editor.commands.focus();
1523
+ };
1524
+ var insertMediaToEditor = function insertMediaToEditor(file) {
1525
+ if (!editor) return;
1526
+ var url = file.url,
1527
+ _file$filename = file.filename,
1528
+ filename = _file$filename === void 0 ? "image" : _file$filename,
1529
+ _file$caption = file.caption,
1530
+ caption = _file$caption === void 0 ? "" : _file$caption;
1531
+ var mediaAttrs = {
1532
+ src: url,
1533
+ caption: caption,
1534
+ alt: filename
1535
+ };
1536
+ var setMedia = mediaUploader.image ? editor.chain().setFigure(mediaAttrs) : editor.chain().setVideo(mediaAttrs);
1537
+ setMedia.focus().command(function (_ref2) {
1538
+ var tr = _ref2.tr,
1539
+ commands = _ref2.commands;
1540
+ var doc = tr.doc,
1541
+ selection = tr.selection;
1542
+ var position = doc.resolve(selection.to).end() + 1;
1543
+ var safePosition = Math.min(position, doc.content.size);
1544
+ return commands.insertContentAt(safePosition, "<p></p>");
1545
+ }).run();
1546
+ };
1547
+ var onUploadComplete = /*#__PURE__*/function () {
1548
+ var _ref3 = _asyncToGenerator__default.default(/*#__PURE__*/_regeneratorRuntime__default.default.mark(function _callee(file) {
1549
+ return _regeneratorRuntime__default.default.wrap(function _callee$(_context) {
1550
+ while (1) switch (_context.prev = _context.next) {
1551
+ case 0:
1552
+ if (!(neetoCist.isNotPresent(file.id) && neetoCist.isNotPresent(file.signedId))) {
1553
+ _context.next = 2;
1554
+ break;
1555
+ }
1556
+ return _context.abrupt("return");
1557
+ case 2:
1558
+ _context.prev = 2;
1559
+ _context.next = 5;
1560
+ return reactFileIcon_esm.directUploadsApi.attach({
1561
+ id: file.id,
1562
+ signed_id: file.signedId
1563
+ });
1564
+ case 5:
1565
+ insertMediaToEditor(file);
1566
+ handleClose();
1567
+ _context.next = 12;
1568
+ break;
1569
+ case 9:
1570
+ _context.prev = 9;
1571
+ _context.t0 = _context["catch"](2);
1572
+ Toastr__default.default.error(_context.t0);
1573
+ case 12:
1574
+ case "end":
1575
+ return _context.stop();
1576
+ }
1577
+ }, _callee, null, [[2, 9]]);
1578
+ }));
1579
+ return function onUploadComplete(_x) {
1580
+ return _ref3.apply(this, arguments);
1581
+ };
1582
+ }();
1583
+ var onAttachVideo = function onAttachVideo(url) {
1584
+ var file = {
1585
+ url: url};
1586
+ insertMediaToEditor(file);
1587
+ };
1588
+ var onEmbedVideo = function onEmbedVideo(originalUrl, embedUrl) {
1589
+ if (!editor) return;
1590
+ editor.chain().focus().setExternalVideo({
1591
+ src: embedUrl,
1592
+ originalUrl: originalUrl
1593
+ }).run();
1594
+ };
1595
+ return /*#__PURE__*/jsxRuntime.jsx(Modal__default.default, {
1596
+ isOpen: isOpen,
1597
+ className: "ne-media-uploader-modal",
1598
+ closeButton: ramda.not(isUploading),
1599
+ closeOnOutsideClick: ramda.not(isUploading),
1600
+ onClose: handleClose,
1601
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
1602
+ className: "ne-media-uploader",
1603
+ children: [(mediaUploader.video || mediaUploader.image) && /*#__PURE__*/jsxRuntime.jsx("div", {
1604
+ className: "ne-media-uploader__header",
1605
+ children: /*#__PURE__*/jsxRuntime.jsxs("h2", {
1606
+ className: "ne-media-uploader__header-title",
1607
+ children: [mediaUploader.video && t("neetoEditor.menu.addVideo"), mediaUploader.image && t("neetoEditor.menu.addImage")]
1608
+ })
1609
+ }), !neetoCist.isNotPresent(tabs) && /*#__PURE__*/jsxRuntime.jsx(Tab__default.default, {
1610
+ children: tabs.map(function (_ref4) {
1611
+ var key = _ref4.key,
1612
+ title = _ref4.title;
1613
+ return /*#__PURE__*/jsxRuntime.jsx(Tab__default.default.Item, {
1614
+ active: activeTab === key,
1615
+ "data-testid": "neeto-editor-media-uploader-".concat(key, "-tab"),
1616
+ onClick: function onClick() {
1617
+ return setActiveTab(key);
1618
+ },
1619
+ children: title
1620
+ }, key);
1621
+ })
1622
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
1623
+ className: "ne-media-uploader__content",
1624
+ children: [mediaUploader.image && /*#__PURE__*/jsxRuntime.jsx(ImageUploader__default.default, {
1625
+ onUploadComplete: onUploadComplete,
1626
+ showAssetLibrary: showAssetLibrary,
1627
+ className: "ne-media-uploader__image-uploader"
1628
+ }), mediaUploader.video && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1629
+ children: [activeTab === "local" && /*#__PURE__*/jsxRuntime.jsx(LocalUploader, {
1630
+ insertMediaToEditor: insertMediaToEditor,
1631
+ setIsUploading: setIsUploading,
1632
+ isImage: false,
1633
+ onClose: handleClose
1634
+ }), activeTab === "embed" && /*#__PURE__*/jsxRuntime.jsx(VideoEmbedForm, {
1635
+ onAttachVideo: onAttachVideo,
1636
+ onEmbedVideo: onEmbedVideo,
1637
+ onClose: handleClose
1638
+ })]
1639
+ })]
1640
+ })]
1641
+ })
1642
+ });
1643
+ };
1644
+
1645
+ var LinkAddPopOver = function LinkAddPopOver(_ref) {
1646
+ var isAddLinkActive = _ref.isAddLinkActive,
1647
+ setIsAddLinkActive = _ref.setIsAddLinkActive,
1648
+ editor = _ref.editor,
1649
+ openLinkInNewTab = _ref.openLinkInNewTab;
1650
+ var _editor$state$selecti = editor.state.selection,
1651
+ from = _editor$state$selecti.from,
1652
+ to = _editor$state$selecti.to;
1653
+ var text = editor.state.doc.textBetween(from, to, "");
1654
+ var _useState = React.useState(text),
1655
+ _useState2 = _slicedToArray__default.default(_useState, 2),
1656
+ linkText = _useState2[0],
1657
+ setLinkText = _useState2[1];
1658
+ var _useState3 = React.useState(""),
1659
+ _useState4 = _slicedToArray__default.default(_useState3, 2),
1660
+ linkUrl = _useState4[0],
1661
+ setLinkUrl = _useState4[1];
1662
+ var _useState5 = React.useState(openLinkInNewTab),
1663
+ _useState6 = _slicedToArray__default.default(_useState5, 2),
1664
+ openInNewTab = _useState6[0],
1665
+ setOpenInNewTab = _useState6[1];
1666
+ var _useState7 = React.useState(""),
1667
+ _useState8 = _slicedToArray__default.default(_useState7, 2),
1668
+ error = _useState8[0],
1669
+ setError = _useState8[1];
1670
+ var _useState9 = React.useState(getCursorPos(editor, to)),
1671
+ _useState0 = _slicedToArray__default.default(_useState9, 2),
1672
+ popoverPosition = _useState0[0],
1673
+ setPopoverPosition = _useState0[1];
1674
+ var _useState1 = React.useState({
1675
+ top: 0,
1676
+ left: 0
1677
+ }),
1678
+ _useState10 = _slicedToArray__default.default(_useState1, 2),
1679
+ arrowPosition = _useState10[0],
1680
+ setArrowPosition = _useState10[1];
1681
+ var popoverRef = React.useRef(null);
1682
+ var _useTranslation = reactI18next.useTranslation(),
1683
+ t = _useTranslation.t;
1684
+ var isLinkTextPresent = !neetoCist.isNotPresent(linkText);
1685
+ var isLinlUrlPresent = !neetoCist.isNotPresent(linkUrl);
1686
+ var isSubmitDisabled = !isLinkTextPresent || !isLinlUrlPresent;
1687
+ var popoverStyle = {
1688
+ display: "block",
1689
+ position: "fixed",
1690
+ top: popoverPosition.top,
1691
+ left: popoverPosition.left,
1692
+ transform: "translateY(52px) translateX(8px)"
1693
+ };
1694
+ var handleAddLink = function handleAddLink() {
1695
+ var _editor$view = editor.view,
1696
+ state = _editor$view.state,
1697
+ dispatch = _editor$view.dispatch;
1698
+ var _state$selection = state.selection,
1699
+ from = _state$selection.from,
1700
+ to = _state$selection.to;
1701
+ var formattedUrl = utils.validateAndFormatUrl(linkUrl);
1702
+ if (!constants.ALL_PROTOCOL_URL_REGEXP.test(formattedUrl)) {
1703
+ setError(t("neetoEditor.error.invalidUrl"));
1704
+ return;
1705
+ }
1706
+ var attrs = {
1707
+ href: formattedUrl,
1708
+ target: openInNewTab ? "_blank" : "_self"
1709
+ };
1710
+ var linkMark = state.schema.marks.link.create(attrs);
1711
+ var linkTextWithMark = state.schema.text(linkText, [linkMark]);
1712
+ var tr = state.tr.replaceWith(from, to, linkTextWithMark);
1713
+ dispatch(tr);
1714
+ removePopover();
1715
+ };
1716
+ var removePopover = function removePopover() {
1717
+ editor.view.focus();
1718
+ setIsAddLinkActive(false);
1719
+ };
1720
+ var handleKeyDown = function handleKeyDown(e) {
1721
+ e.stopPropagation();
1722
+ if (e.key === "Enter") {
1723
+ e.preventDefault();
1724
+ handleAddLink();
1725
+ } else if (e.key === "Escape") {
1726
+ removePopover();
1727
+ }
1728
+ };
1729
+ var updatePopoverPosition = function updatePopoverPosition() {
1730
+ var _getLinkPopoverPositi = getLinkPopoverPosition(editor, popoverRef),
1731
+ arrowPosition = _getLinkPopoverPositi.arrowPosition,
1732
+ popoverPosition = _getLinkPopoverPositi.popoverPosition;
1733
+ setPopoverPosition(popoverPosition);
1734
+ setArrowPosition(arrowPosition);
1735
+ };
1736
+ reactUtils.useOnClickOutside(popoverRef, removePopover);
1737
+ React.useEffect(function () {
1738
+ if (editor && isAddLinkActive) {
1739
+ updatePopoverPosition();
1740
+ }
1741
+ window.addEventListener("resize", removePopover);
1742
+ window.addEventListener("wheel", removePopover);
1743
+ return function () {
1744
+ window.removeEventListener("resize", removePopover);
1745
+ window.removeEventListener("wheel", removePopover);
1746
+ };
1747
+ }, []);
1748
+ return isAddLinkActive ? /*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1749
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
1750
+ className: "ne-link-arrow fade-in",
1751
+ style: {
1752
+ top: arrowPosition.top,
1753
+ left: arrowPosition.left
1754
+ }
1755
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
1756
+ className: "ne-link-popover fade-in",
1757
+ id: "ne-link-add-popover",
1758
+ ref: popoverRef,
1759
+ style: popoverStyle,
1760
+ children: [/*#__PURE__*/jsxRuntime.jsx(Input__default.default, {
1761
+ required: true,
1762
+ autoFocus: !isLinkTextPresent,
1763
+ "data-testid": "neeto-editor-add-link-text-input",
1764
+ label: t("neetoEditor.common.text"),
1765
+ placeholder: t("neetoEditor.placeholders.enterText"),
1766
+ size: "small",
1767
+ style: {
1768
+ width: "250px"
1769
+ },
1770
+ value: linkText,
1771
+ onChange: function onChange(_ref2) {
1772
+ var value = _ref2.target.value;
1773
+ return setLinkText(value);
1774
+ },
1775
+ onKeyDown: handleKeyDown
1776
+ }), /*#__PURE__*/jsxRuntime.jsx(Input__default.default, {
1777
+ error: error,
1778
+ required: true,
1779
+ autoFocus: isLinkTextPresent,
1780
+ className: "ne-link-popover__url-input",
1781
+ "data-testid": "neeto-editor-add-link-url-input",
1782
+ label: t("neetoEditor.common.url"),
1783
+ placeholder: t("neetoEditor.placeholders.url"),
1784
+ size: "small",
1785
+ style: {
1786
+ width: "250px"
1787
+ },
1788
+ value: linkUrl,
1789
+ onChange: function onChange(_ref3) {
1790
+ var value = _ref3.target.value;
1791
+ return setLinkUrl(value);
1792
+ },
1793
+ onFocus: function onFocus() {
1794
+ return setError("");
1795
+ },
1796
+ onKeyDown: handleKeyDown
1797
+ }), /*#__PURE__*/jsxRuntime.jsx(Checkbox__default.default, {
1798
+ checked: openInNewTab,
1799
+ className: "ne-link-popover__checkbox",
1800
+ "data-testid": "neeto-editor-add-link-open-in-new-tab-switch",
1801
+ label: t("neetoEditor.common.openInNewTab"),
1802
+ onChange: function onChange() {
1803
+ return setOpenInNewTab(ramda.not);
1804
+ }
1805
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
1806
+ className: "ne-link-popover__edit-prompt-buttons",
1807
+ children: [/*#__PURE__*/jsxRuntime.jsx(Button__default.default, {
1808
+ "data-testid": "neeto-editor-add-link",
1809
+ disabled: isSubmitDisabled,
1810
+ label: t("neetoEditor.common.done"),
1811
+ size: "small",
1812
+ onClick: handleAddLink
1813
+ }), /*#__PURE__*/jsxRuntime.jsx(Button__default.default, {
1814
+ "data-testid": "neeto-editor-link-popover-cancel",
1815
+ label: t("neetoEditor.common.cancel"),
1816
+ size: "small",
1817
+ style: "text",
1818
+ onClick: removePopover
1819
+ })]
1820
+ })]
1821
+ })]
1822
+ }), document.body) : null;
1823
+ };
1824
+
1825
+ var _excluded$3 = ["type"];
1826
+ function ownKeys$8(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; }
1827
+ function _objectSpread$8(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$8(Object(t), true).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$8(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1828
+ var Menu$3 = Dropdown__default.default.Menu,
1829
+ MenuItem$1 = Dropdown__default.default.MenuItem;
1830
+ var MoreMenu = function MoreMenu(_ref) {
1831
+ var groups = _ref.groups,
1832
+ editor = _ref.editor;
1833
+ return /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default, {
1834
+ buttonProps: {
1835
+ className: "flex-shrink-0"
1836
+ },
1837
+ buttonStyle: "text",
1838
+ icon: MenuHorizontal__default.default,
1839
+ strategy: "fixed",
1840
+ children: /*#__PURE__*/jsxRuntime.jsx(Menu$3, {
1841
+ children: groups.map(function (group) {
1842
+ return group.map(function (_ref2) {
1843
+ var type = _ref2.type,
1844
+ props = _objectWithoutProperties__default.default(_ref2, _excluded$3);
1845
+ var Component = MENU_ELEMENTS[type];
1846
+ if (type === MENU_ELEMENT_TYPES.BUTTON) {
1847
+ var Icon = props.icon;
1848
+ return /*#__PURE__*/jsxRuntime.jsxs(MenuItem$1.Button, _objectSpread$8(_objectSpread$8({
1849
+ "data-testid": "neeto-editor-fixed-menu-".concat(props.optionName, "-option"),
1850
+ isActive: editor.isActive(props.optionName),
1851
+ tabIndex: "-1",
1852
+ onClick: props.command
1853
+ }, _objectSpread$8(_objectSpread$8(_objectSpread$8({}, useEditorStore.generateFocusProps(props.highlight)), props), {}, {
1854
+ editor: editor
1855
+ })), {}, {
1856
+ children: [/*#__PURE__*/jsxRuntime.jsx(Icon, {}), " ", props.label]
1857
+ }), props.optionName);
1858
+ }
1859
+ return /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread$8(_objectSpread$8({}, _objectSpread$8(_objectSpread$8({}, props), {}, {
1860
+ editor: editor
1861
+ }, useEditorStore.generateFocusProps(props.highlight))), {}, {
1862
+ isSecondaryMenu: true
1863
+ }), props.optionName);
1864
+ });
1865
+ })
1866
+ })
1867
+ });
1868
+ };
1869
+
1870
+ var EDITOR_MARKS = [constants.EDITOR_OPTIONS.UNDO, constants.EDITOR_OPTIONS.REDO, "fontSizeOptions", constants.EDITOR_OPTIONS.BOLD, constants.EDITOR_OPTIONS.ITALIC, constants.EDITOR_OPTIONS.UNDERLINE, constants.EDITOR_OPTIONS.LINK, constants.EDITOR_OPTIONS.STRIKETHROUGH, constants.EDITOR_OPTIONS.HIGHLIGHT, constants.EDITOR_OPTIONS.CALLOUT, "bulletList", "orderedList", "todoList", "blockquote", constants.EDITOR_OPTIONS.CODE, "codeBlock", constants.EDITOR_OPTIONS.TABLE, constants.EDITOR_OPTIONS.ATTACHMENTS, constants.EDITOR_OPTIONS.IMAGE_UPLOAD, constants.EDITOR_OPTIONS.VIDEO_UPLOAD, constants.EDITOR_OPTIONS.TEXT_COLOR, constants.EDITOR_OPTIONS.EMOJI, constants.EDITOR_OPTIONS.NEETO_KB_ARTICLE, "mentions"];
1871
+
1872
+ function ownKeys$7(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; }
1873
+ function _objectSpread$7(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$7(Object(t), true).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$7(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1874
+ var useEditorState = function useEditorState(_ref) {
1875
+ var editor = _ref.editor,
1876
+ neetoKbArticleState = _ref.neetoKbArticleState;
1877
+ var _useEditorStore = useEditorStore.useEditorStore(function (store) {
1878
+ return {
1879
+ setMarksState: store["setMarksState"],
1880
+ marksState: store["marksState"]
1881
+ };
1882
+ }, shallow.shallow),
1883
+ setMarksState = _useEditorStore.setMarksState,
1884
+ marksState = _useEditorStore.marksState;
1885
+ var handleSelectionUpdate = React.useCallback(function (_ref2) {
1886
+ var editor = _ref2.editor;
1887
+ var activeMarks = {};
1888
+ EDITOR_MARKS.forEach(function (mark) {
1889
+ if (mark === constants.EDITOR_OPTIONS.NEETO_KB_ARTICLE) {
1890
+ activeMarks[mark] = {
1891
+ isActive: (neetoKbArticleState === null || neetoKbArticleState === void 0 ? void 0 : neetoKbArticleState.active) || false
1892
+ };
1893
+ } else {
1894
+ activeMarks[mark] = {
1895
+ isActive: editor.isActive(mark)
1896
+ };
1897
+ }
1898
+ });
1899
+ var activeFontSizeOption = FONT_SIZE_OPTIONS.find(function (_ref3) {
1900
+ var level = _ref3.value;
1901
+ return editor.isActive("heading", {
1902
+ level: level
1903
+ });
1904
+ }) || ramda.last(FONT_SIZE_OPTIONS);
1905
+ activeMarks["fontSizeOption"] = activeFontSizeOption;
1906
+ setMarksState(activeMarks);
1907
+ }, [setMarksState, neetoKbArticleState === null || neetoKbArticleState === void 0 ? void 0 : neetoKbArticleState.active]);
1908
+ var updateHistoryOptionsState = React.useCallback(function (_ref4) {
1909
+ var editor = _ref4.editor;
1910
+ var undoOptionState = {
1911
+ disabled: !editor.can().undo()
1912
+ };
1913
+ var redoOptionState = {
1914
+ disabled: !editor.can().redo()
1915
+ };
1916
+ var updatedMarksState = _objectSpread$7(_objectSpread$7({}, marksState), {}, _defineProperty__default.default(_defineProperty__default.default({}, constants.EDITOR_OPTIONS.UNDO, undoOptionState), constants.EDITOR_OPTIONS.REDO, redoOptionState));
1917
+ setMarksState(updatedMarksState);
1918
+ }, [marksState, setMarksState]);
1919
+ React.useEffect(function () {
1920
+ if (!editor) return neetoCist.noop;
1921
+ updateHistoryOptionsState({
1922
+ editor: editor
1923
+ });
1924
+ editor.on("selectionUpdate", handleSelectionUpdate);
1925
+ editor.on("update", handleSelectionUpdate);
1926
+ editor.on("transaction", handleSelectionUpdate);
1927
+ return function () {
1928
+ editor.off("selectionUpdate", handleSelectionUpdate);
1929
+ editor.off("update", handleSelectionUpdate);
1930
+ editor.off("transaction", handleSelectionUpdate);
1931
+ };
1932
+ }, [editor, handleSelectionUpdate]);
1933
+
1934
+ // Update editor state when neetoKbArticleState changes
1935
+ React.useEffect(function () {
1936
+ if (!editor) return;
1937
+ handleSelectionUpdate({
1938
+ editor: editor
1939
+ });
1940
+ }, [editor, neetoKbArticleState === null || neetoKbArticleState === void 0 ? void 0 : neetoKbArticleState.active, handleSelectionUpdate]);
1941
+ };
1942
+
1943
+ var MenuDynamicVariables = function MenuDynamicVariables(_ref) {
1944
+ var editor = _ref.editor,
1945
+ _ref$variables = _ref.variables,
1946
+ variables = _ref$variables === void 0 ? [] : _ref$variables,
1947
+ _ref$standalone = _ref.standalone,
1948
+ standalone = _ref$standalone === void 0 ? false : _ref$standalone;
1949
+ var _useTranslation = reactI18next.useTranslation(),
1950
+ t = _useTranslation.t;
1951
+ if (ramda.isEmpty(variables)) return null;
1952
+ var handleVariableClick = function handleVariableClick(item) {
1953
+ var category = item.category,
1954
+ categoryLabel = item.categoryLabel,
1955
+ key = item.key,
1956
+ label = item.label;
1957
+ var variableName = category ? "".concat(category, ".").concat(key) : key;
1958
+ var variableLabel = category ? "".concat(categoryLabel || category, ":").concat(label) : label;
1959
+ editor.chain().focus().setVariable({
1960
+ id: variableName,
1961
+ label: variableLabel
1962
+ }).run();
1963
+ };
1964
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
1965
+ "data-testid": "neeto-editor-fixed-menu-variables",
1966
+ className: classnames__default.default("neeto-editor-fixed-menu__variables", {
1967
+ "neeto-editor-fixed-menu__variables--standalone": standalone
1968
+ }),
1969
+ children: /*#__PURE__*/jsxRuntime.jsx(DynamicVariables__default.default, {
1970
+ variables: variables,
1971
+ dropdownProps: {
1972
+ buttonSize: "small",
1973
+ buttonProps: {
1974
+ tooltipProps: {
1975
+ content: t("neetoEditor.menu.dynamicVariables"),
1976
+ position: "bottom"
1977
+ }
1978
+ }
1979
+ },
1980
+ onVariableClick: handleVariableClick
1981
+ })
1982
+ });
1983
+ };
1984
+
1985
+ var _excluded$2 = ["type"];
1986
+ function ownKeys$6(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; }
1987
+ function _objectSpread$6(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$6(Object(t), true).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$6(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1988
+ var Fixed = function Fixed(_ref) {
1989
+ var editor = _ref.editor,
1990
+ options = _ref.options,
1991
+ mentions = _ref.mentions,
1992
+ _ref$variables = _ref.variables,
1993
+ variables = _ref$variables === void 0 ? [] : _ref$variables,
1994
+ setMediaUploader = _ref.setMediaUploader,
1995
+ mediaUploader = _ref.mediaUploader,
1996
+ _ref$addonCommands = _ref.addonCommands,
1997
+ addonCommands = _ref$addonCommands === void 0 ? [] : _ref$addonCommands,
1998
+ _ref$isIndependant = _ref.isIndependant,
1999
+ isIndependant = _ref$isIndependant === void 0 ? true : _ref$isIndependant,
2000
+ className = _ref.className,
2001
+ _ref$tooltips = _ref.tooltips,
2002
+ tooltips = _ref$tooltips === void 0 ? {} : _ref$tooltips,
2003
+ attachmentProps = _ref.attachmentProps,
2004
+ isEmojiPickerActive = _ref.isEmojiPickerActive,
2005
+ setIsEmojiPickerActive = _ref.setIsEmojiPickerActive,
2006
+ openLinkInNewTab = _ref.openLinkInNewTab,
2007
+ setIsNeetoKbArticleActive = _ref.setIsNeetoKbArticleActive,
2008
+ neetoKbArticleState = _ref.neetoKbArticleState,
2009
+ _ref$showAssetLibrary = _ref.showAssetLibrary,
2010
+ showAssetLibrary = _ref$showAssetLibrary === void 0 ? true : _ref$showAssetLibrary;
2011
+ var _useState = React.useState(0),
2012
+ _useState2 = _slicedToArray__default.default(_useState, 2),
2013
+ focusedButtonIndex = _useState2[0],
2014
+ setFocusedButtonIndex = _useState2[1];
2015
+ var _useState3 = React.useState(false),
2016
+ _useState4 = _slicedToArray__default.default(_useState3, 2),
2017
+ isAddLinkActive = _useState4[0],
2018
+ setIsAddLinkActive = _useState4[1];
2019
+ var _useState5 = React.useState([]),
2020
+ _useState6 = _slicedToArray__default.default(_useState5, 2),
2021
+ menuItems = _useState6[0],
2022
+ setMenuItems = _useState6[1];
2023
+ var _useState7 = React.useState([]),
2024
+ _useState8 = _slicedToArray__default.default(_useState7, 2),
2025
+ moreMenuItems = _useState8[0],
2026
+ setMoreMenuItems = _useState8[1];
2027
+ useEditorState({
2028
+ editor: editor,
2029
+ neetoKbArticleState: neetoKbArticleState
2030
+ });
2031
+ var editorRef = React.useRef(editor);
2032
+ React.useEffect(function () {
2033
+ editorRef.current = editor;
2034
+ }, [editor]);
2035
+ var menuRef = React.useRef(null);
2036
+ var menuContainerRef = React.useRef(null);
2037
+ var runEditorCommand = React.useCallback(function (command) {
2038
+ return function () {
2039
+ return command(editorRef.current);
2040
+ };
2041
+ }, []);
2042
+ var handleArrowNavigation = function handleArrowNavigation(event) {
2043
+ if (event.key === "ArrowRight") {
2044
+ event.preventDefault();
2045
+ setFocusedButtonIndex(function (prevIndex) {
2046
+ return (prevIndex + 1) % menuButtons.length;
2047
+ });
2048
+ } else if (event.key === "ArrowLeft") {
2049
+ event.preventDefault();
2050
+ setFocusedButtonIndex(function (prevIndex) {
2051
+ return (prevIndex - 1 + menuButtons.length) % menuButtons.length;
2052
+ });
2053
+ }
2054
+ };
2055
+ var menuButtons = React.useMemo(function () {
2056
+ var _menuRef$current;
2057
+ return (_menuRef$current = menuRef.current) === null || _menuRef$current === void 0 ? void 0 : _menuRef$current.querySelectorAll(".neeto-editor-fixed-menu__item");
2058
+ }, [menuRef.current]);
2059
+ React.useEffect(function () {
2060
+ menuButtons === null || menuButtons === void 0 || menuButtons[focusedButtonIndex].focus();
2061
+ }, [focusedButtonIndex]);
2062
+ React.useEffect(function () {
2063
+ menuButtons === null || menuButtons === void 0 || menuButtons.forEach(function (menuItem) {
2064
+ return menuItem.addEventListener("keydown", handleArrowNavigation);
2065
+ });
2066
+ return function () {
2067
+ return menuButtons === null || menuButtons === void 0 ? void 0 : menuButtons.forEach(function (menuItem) {
2068
+ return menuItem.removeEventListener("keydown", handleArrowNavigation);
2069
+ });
2070
+ };
2071
+ }, [menuButtons]);
2072
+ var menuGroups = React.useMemo(function () {
2073
+ return buildMenuOptions({
2074
+ tooltips: tooltips,
2075
+ runEditorCommand: runEditorCommand,
2076
+ options: options,
2077
+ setMediaUploader: setMediaUploader,
2078
+ attachmentProps: attachmentProps,
2079
+ setIsAddLinkActive: setIsAddLinkActive,
2080
+ mentions: mentions,
2081
+ addonCommands: addonCommands,
2082
+ setIsEmojiPickerActive: setIsEmojiPickerActive,
2083
+ isEmojiPickerActive: isEmojiPickerActive,
2084
+ editor: editor,
2085
+ setIsNeetoKbArticleActive: setIsNeetoKbArticleActive
2086
+ });
2087
+ }, [isEmojiPickerActive, mentions]);
2088
+ var handleResize = React.useCallback(function () {
2089
+ if (!menuRef.current) return;
2090
+ var _reGroupMenuItems = reGroupMenuItems(menuRef, menuGroups),
2091
+ visibleMenuGroups = _reGroupMenuItems.visibleMenuGroups,
2092
+ invisibleMenuGroups = _reGroupMenuItems.invisibleMenuGroups;
2093
+ setMenuItems(visibleMenuGroups);
2094
+ setMoreMenuItems(invisibleMenuGroups);
2095
+ }, [setMenuItems, menuGroups, menuRef.current]);
2096
+ React.useEffect(function () {
2097
+ handleResize();
2098
+ var menuContainer = menuContainerRef.current;
2099
+ var resizeObserver = new ResizeObserver(handleResize);
2100
+ if (menuContainer) {
2101
+ resizeObserver.observe(menuContainer);
2102
+ }
2103
+ return function () {
2104
+ if (menuContainer) resizeObserver.unobserve(menuContainer);
2105
+ };
2106
+ }, [menuContainerRef.current, handleResize, menuGroups]);
2107
+ if (!editor) return null;
2108
+ var isMediaUploaderActive = options.includes(constants.EDITOR_OPTIONS.IMAGE_UPLOAD) || options.includes(constants.EDITOR_OPTIONS.VIDEO_UPLOAD);
2109
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
2110
+ ref: menuContainerRef,
2111
+ className: classnames__default.default("neeto-editor-fixed-menu", _defineProperty__default.default({
2112
+ "neeto-editor-fixed-menu--independant": isIndependant
2113
+ }, className, className)),
2114
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
2115
+ className: "neeto-editor-fixed-menu__wrapper",
2116
+ "data-testid": "neeto-editor-fixed-menu-wrapper",
2117
+ ref: menuRef,
2118
+ children: [menuItems.map(function (group) {
2119
+ return group.map(function (_ref2) {
2120
+ var type = _ref2.type,
2121
+ props = _objectWithoutProperties__default.default(_ref2, _excluded$2);
2122
+ var Component = MENU_ELEMENTS[type];
2123
+ if (!Component) return null;
2124
+ return /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread$6({}, _objectSpread$6(_objectSpread$6({}, props), {}, {
2125
+ editor: editor,
2126
+ options: options
2127
+ })), props.optionName);
2128
+ });
2129
+ }), neetoCist.isNotEmpty(moreMenuItems) && /*#__PURE__*/jsxRuntime.jsx(MoreMenu, {
2130
+ editor: editor,
2131
+ groups: moreMenuItems
2132
+ })]
2133
+ }), /*#__PURE__*/jsxRuntime.jsx(MenuDynamicVariables, {
2134
+ editor: editor,
2135
+ variables: variables
2136
+ }), isAddLinkActive && /*#__PURE__*/jsxRuntime.jsx(LinkAddPopOver, {
2137
+ editor: editor,
2138
+ isAddLinkActive: isAddLinkActive,
2139
+ openLinkInNewTab: openLinkInNewTab,
2140
+ setIsAddLinkActive: setIsAddLinkActive
2141
+ }), isMediaUploaderActive && /*#__PURE__*/jsxRuntime.jsx(MediaUploader, {
2142
+ editor: editor,
2143
+ mediaUploader: mediaUploader,
2144
+ showAssetLibrary: showAssetLibrary,
2145
+ onClose: function onClose() {
2146
+ return setMediaUploader({
2147
+ image: false,
2148
+ video: false
2149
+ });
2150
+ }
2151
+ })]
2152
+ });
2153
+ };
2154
+
2155
+ var _excluded$1 = ["icon", "onClick", "disabled", "className", "tooltipProps"];
2156
+ function ownKeys$5(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; }
2157
+ function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), true).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2158
+ var Button = function Button(_ref) {
2159
+ var _ref$icon = _ref.icon,
2160
+ icon = _ref$icon === void 0 ? null : _ref$icon,
2161
+ _ref$onClick = _ref.onClick,
2162
+ _onClick = _ref$onClick === void 0 ? neetoCist.noop : _ref$onClick,
2163
+ _ref$disabled = _ref.disabled,
2164
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
2165
+ className = _ref.className,
2166
+ tooltipProps = _ref.tooltipProps,
2167
+ otherProps = _objectWithoutProperties__default.default(_ref, _excluded$1);
2168
+ var Icon = icon;
2169
+ return /*#__PURE__*/jsxRuntime.jsx(Tooltip__default.default, _objectSpread$5(_objectSpread$5({
2170
+ disabled: !tooltipProps,
2171
+ onClick: function onClick() {
2172
+ return _onClick();
2173
+ }
2174
+ }, tooltipProps), {}, {
2175
+ children: /*#__PURE__*/jsxRuntime.jsx("button", _objectSpread$5(_objectSpread$5({
2176
+ className: classnames__default.default("ne-headless-btn", _defineProperty__default.default({}, className, className)),
2177
+ type: "button"
2178
+ }, _objectSpread$5({
2179
+ disabled: disabled,
2180
+ onClick: _onClick
2181
+ }, otherProps)), {}, {
2182
+ children: icon && /*#__PURE__*/jsxRuntime.jsx(Icon, {
2183
+ "aria-hidden": "true",
2184
+ size: 18
2185
+ }, "2")
2186
+ }))
2187
+ }));
2188
+ };
2189
+
2190
+ var _excluded = ["icon", "isOpen", "onClose", "children", "className", "onClick", "buttonProps"];
2191
+ function ownKeys$4(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; }
2192
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), true).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2193
+ var hideOnEsc = {
2194
+ name: "hideOnEsc",
2195
+ defaultValue: true,
2196
+ fn: function fn(_ref) {
2197
+ var hide = _ref.hide,
2198
+ _ref$props = _ref.props,
2199
+ hideOnEsc = _ref$props.hideOnEsc,
2200
+ onClose = _ref$props.onClose;
2201
+ function onKeyDown(event) {
2202
+ if (!(event.key.toLowerCase() === "escape" && hideOnEsc)) return;
2203
+ onClose();
2204
+ hide();
2205
+ }
2206
+ return {
2207
+ onShow: function onShow() {
2208
+ document.addEventListener("keydown", onKeyDown);
2209
+ },
2210
+ onHide: function onHide() {
2211
+ document.removeEventListener("keydown", onKeyDown);
2212
+ }
2213
+ };
2214
+ }
2215
+ };
2216
+ var Dropdown = function Dropdown(_ref2) {
2217
+ var icon = _ref2.icon,
2218
+ isOpen = _ref2.isOpen,
2219
+ _ref2$onClose = _ref2.onClose,
2220
+ onClose = _ref2$onClose === void 0 ? neetoCist.noop : _ref2$onClose,
2221
+ children = _ref2.children,
2222
+ className = _ref2.className,
2223
+ onClick = _ref2.onClick,
2224
+ _ref2$buttonProps = _ref2.buttonProps,
2225
+ buttonProps = _ref2$buttonProps === void 0 ? {} : _ref2$buttonProps,
2226
+ otherProps = _objectWithoutProperties__default.default(_ref2, _excluded);
2227
+ var _useState = React.useState(false),
2228
+ _useState2 = _slicedToArray__default.default(_useState, 2),
2229
+ mounted = _useState2[0],
2230
+ setMounted = _useState2[1];
2231
+ return /*#__PURE__*/jsxRuntime.jsx(Tippy__default.default, _objectSpread$4(_objectSpread$4({
2232
+ onClose: onClose,
2233
+ hideOnEsc: true,
2234
+ interactive: true,
2235
+ animation: false,
2236
+ arrow: false,
2237
+ duration: 0,
2238
+ hideOnClick: false,
2239
+ maxWidth: "none",
2240
+ offset: 0,
2241
+ plugins: [hideOnEsc],
2242
+ popperOptions: {
2243
+ strategy: "fixed"
2244
+ },
2245
+ role: "dropdown",
2246
+ theme: "light",
2247
+ trigger: "click",
2248
+ visible: isOpen,
2249
+ className: classnames__default.default("ne-headless-dropdown", _defineProperty__default.default({}, className, className)),
2250
+ content: mounted && /*#__PURE__*/jsxRuntime.jsx("div", {
2251
+ className: "ne-headless-dropdown__popup",
2252
+ children: children
2253
+ }),
2254
+ onClickOutside: onClose,
2255
+ onHidden: function onHidden() {
2256
+ return setMounted(false);
2257
+ },
2258
+ onMount: function onMount() {
2259
+ return setMounted(true);
2260
+ }
2261
+ }, otherProps), {}, {
2262
+ children: /*#__PURE__*/jsxRuntime.jsx("span", {
2263
+ children: /*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread$4({}, _objectSpread$4({
2264
+ icon: icon,
2265
+ onClick: onClick
2266
+ }, buttonProps)))
2267
+ })
2268
+ }));
2269
+ };
2270
+
2271
+ var Emoji = function Emoji(_ref) {
2272
+ var editor = _ref.editor,
2273
+ isActive = _ref.isActive,
2274
+ setActive = _ref.setActive,
2275
+ tooltipContent = _ref.tooltipContent;
2276
+ return /*#__PURE__*/jsxRuntime.jsx(Dropdown, {
2277
+ className: "ne-headless__emoji",
2278
+ icon: Smiley__default.default,
2279
+ isOpen: isActive,
2280
+ buttonProps: {
2281
+ tooltipProps: {
2282
+ content: tooltipContent,
2283
+ delay: [500],
2284
+ position: "bottom"
2285
+ },
2286
+ "data-testid": "ne-emoji-picker"
2287
+ },
2288
+ onClick: function onClick() {
2289
+ return setActive(function (active) {
2290
+ return !active;
2291
+ });
2292
+ },
2293
+ onClose: function onClose() {
2294
+ return setActive(false);
2295
+ },
2296
+ children: /*#__PURE__*/jsxRuntime.jsx(EmojiPickerMenu, {
2297
+ editor: editor,
2298
+ setActive: setActive
2299
+ })
2300
+ });
2301
+ };
2302
+
2303
+ var Option = function Option(_ref) {
2304
+ var editor = _ref.editor,
2305
+ optionName = _ref.optionName,
2306
+ command = _ref.command,
2307
+ disabled = _ref.disabled,
2308
+ Icon = _ref.Icon,
2309
+ isActive = _ref.isActive,
2310
+ setActive = _ref.setActive,
2311
+ tooltip = _ref.tooltip;
2312
+ if (optionName === constants.EDITOR_OPTIONS.EMOJI) {
2313
+ return /*#__PURE__*/jsxRuntime.jsx(Emoji, {
2314
+ editor: editor,
2315
+ isActive: isActive,
2316
+ setActive: setActive,
2317
+ tooltipContent: tooltip || "Emoji"
2318
+ });
2319
+ }
2320
+ return /*#__PURE__*/jsxRuntime.jsx(Button, {
2321
+ disabled: disabled,
2322
+ className: classnames__default.default({
2323
+ "ne-headless-btn--active": isActive
2324
+ }),
2325
+ "data-testid": neetoCist.hyphenate(optionName),
2326
+ icon: Icon,
2327
+ tooltipProps: {
2328
+ content: tooltip,
2329
+ delay: [500],
2330
+ position: "bottom"
2331
+ },
2332
+ onClick: command
2333
+ });
2334
+ };
2335
+
2336
+ function ownKeys$3(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; }
2337
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), true).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2338
+ var t = i18n__default.default.t;
2339
+ var createMenuOptions$1 = function createMenuOptions(_ref) {
2340
+ var editor = _ref.editor,
2341
+ tooltips = _ref.tooltips,
2342
+ setMediaUploader = _ref.setMediaUploader,
2343
+ attachmentProps = _ref.attachmentProps,
2344
+ isEmojiPickerActive = _ref.isEmojiPickerActive,
2345
+ setIsEmojiPickerActive = _ref.setIsEmojiPickerActive;
2346
+ return [{
2347
+ Icon: TextBold__default.default,
2348
+ command: function command() {
2349
+ return editor.chain().focus().toggleBold().run();
2350
+ },
2351
+ active: editor.isActive("bold"),
2352
+ optionName: "bold",
2353
+ tooltip: tooltips.bold || t("neetoEditor.menu.bold")
2354
+ }, {
2355
+ Icon: TextItalic__default.default,
2356
+ command: function command() {
2357
+ return editor.chain().focus().toggleItalic().run();
2358
+ },
2359
+ active: editor.isActive("italic"),
2360
+ optionName: "italic",
2361
+ tooltip: tooltips.italic || t("neetoEditor.menu.italic")
2362
+ }, {
2363
+ Icon: Underline__default.default,
2364
+ command: function command() {
2365
+ return editor.chain().focus().toggleUnderline().run();
2366
+ },
2367
+ active: editor.isActive("underline"),
2368
+ optionName: "underline",
2369
+ tooltip: tooltips.underline || t("neetoEditor.menu.underline")
2370
+ }, {
2371
+ Icon: TextCross__default.default,
2372
+ command: function command() {
2373
+ return editor.chain().focus().toggleStrike().run();
2374
+ },
2375
+ active: editor.isActive("strike"),
2376
+ optionName: "strike",
2377
+ tooltip: tooltips.strike || t("neetoEditor.menu.strike")
2378
+ }, {
2379
+ Icon: Highlight__default.default,
2380
+ command: function command() {
2381
+ return editor.chain().focus().toggleHighlight().run();
2382
+ },
2383
+ active: editor.isActive("highlight"),
2384
+ optionName: "highlight",
2385
+ tooltip: tooltips.highlight || t("neetoEditor.menu.highlight")
2386
+ }, {
2387
+ Icon: Quote__default.default,
2388
+ command: function command() {
2389
+ return editor.chain().focus().toggleBlockquote().run();
2390
+ },
2391
+ active: editor.isActive("blockquote"),
2392
+ optionName: "block-quote",
2393
+ tooltip: tooltips.blockQuote || t("neetoEditor.menu.blockQuote")
2394
+ }, {
2395
+ Icon: Code__default.default,
2396
+ command: function command() {
2397
+ return editor.chain().focus().toggleCode().run();
2398
+ },
2399
+ active: editor.isActive("code"),
2400
+ optionName: "code",
2401
+ tooltip: tooltips.code || t("neetoEditor.menu.code")
2402
+ }, {
2403
+ Icon: CodeBlock__default.default,
2404
+ command: function command() {
2405
+ return editor.chain().focus().toggleCodeBlock().run();
2406
+ },
2407
+ active: editor.isActive("codeBlock"),
2408
+ optionName: "code-block",
2409
+ tooltip: tooltips.codeBlock || t("neetoEditor.menu.codeBlock")
2410
+ }, {
2411
+ Icon: ListDot__default.default,
2412
+ command: function command() {
2413
+ return editor.chain().focus().toggleBulletList().run();
2414
+ },
2415
+ active: editor.isActive("bulletList"),
2416
+ optionName: "bullet-list",
2417
+ tooltip: tooltips.bulletList || t("neetoEditor.menu.bulletedList")
2418
+ }, {
2419
+ Icon: ListNumber__default.default,
2420
+ command: function command() {
2421
+ return editor.chain().focus().toggleOrderedList().run();
2422
+ },
2423
+ active: editor.isActive("orderedList"),
2424
+ optionName: "ordered-list",
2425
+ tooltip: tooltips.orderedList || t("neetoEditor.menu.orderedList")
2426
+ }, {
2427
+ Icon: File__default.default,
2428
+ command: attachmentProps === null || attachmentProps === void 0 ? void 0 : attachmentProps.handleUploadAttachments,
2429
+ disabled: attachmentProps === null || attachmentProps === void 0 ? void 0 : attachmentProps.isDisabled,
2430
+ optionName: "attachments",
2431
+ tooltip: tooltips.attachments || t("neetoEditor.menu.attachments")
2432
+ }, {
2433
+ Icon: ImageUpload__default.default,
2434
+ command: function command() {
2435
+ return setMediaUploader(ramda.assoc("image", true));
2436
+ },
2437
+ optionName: "image-upload",
2438
+ tooltip: tooltips.imageUpload || t("neetoEditor.menu.imageUpload")
2439
+ }, {
2440
+ Icon: Video__default.default,
2441
+ command: function command() {
2442
+ return setMediaUploader(ramda.assoc("video", true));
2443
+ },
2444
+ optionName: "video-upload",
2445
+ tooltip: tooltips.videoUpload || t("neetoEditor.menu.videoUpload")
2446
+ }, {
2447
+ Icon: Smiley__default.default,
2448
+ command: neetoCist.noop,
2449
+ optionName: "emoji",
2450
+ tooltip: tooltips.emoji || t("neetoEditor.menu.emoji"),
2451
+ isActive: isEmojiPickerActive,
2452
+ setActive: setIsEmojiPickerActive
2453
+ }, {
2454
+ Icon: Column__default.default,
2455
+ command: function command() {
2456
+ return editor.chain().focus().insertTable({
2457
+ rows: 3,
2458
+ cols: 3,
2459
+ withHeaderRow: true
2460
+ }).run();
2461
+ },
2462
+ optionName: "table",
2463
+ tooltip: tooltips.table || t("neetoEditor.menu.table")
2464
+ }, {
2465
+ Icon: Undo__default.default,
2466
+ command: function command() {
2467
+ return editor.chain().focus().undo().run();
2468
+ },
2469
+ disabled: !editor.can().undo(),
2470
+ optionName: "undo",
2471
+ tooltip: tooltips.undo || t("neetoEditor.menu.undo")
2472
+ }, {
2473
+ Icon: Redo__default.default,
2474
+ command: function command() {
2475
+ return editor.chain().focus().redo().run();
2476
+ },
2477
+ disabled: !editor.can().redo(),
2478
+ optionName: "redo",
2479
+ tooltip: tooltips.redo || t("neetoEditor.menu.redo")
2480
+ }];
2481
+ };
2482
+ var buildOptionsFromAddonCommands$1 = function buildOptionsFromAddonCommands(_ref2) {
2483
+ var editor = _ref2.editor,
2484
+ commands = _ref2.commands;
2485
+ var to = editor.state.selection.to;
2486
+ return commands.map(function (option) {
2487
+ var _option$active;
2488
+ return _objectSpread$3(_objectSpread$3({}, option), {}, {
2489
+ active: (_option$active = option.active) === null || _option$active === void 0 ? void 0 : _option$active.call(option, {
2490
+ editor: editor
2491
+ }),
2492
+ command: function command() {
2493
+ var _option$command;
2494
+ return (_option$command = option.command) === null || _option$command === void 0 ? void 0 : _option$command.call(option, {
2495
+ editor: editor,
2496
+ range: {
2497
+ from: to,
2498
+ to: to
2499
+ }
2500
+ });
2501
+ }
2502
+ });
2503
+ });
2504
+ };
2505
+ var buildMenuOptions$1 = function buildMenuOptions(_ref3) {
2506
+ var tooltips = _ref3.tooltips,
2507
+ editor = _ref3.editor,
2508
+ options = _ref3.options,
2509
+ setMediaUploader = _ref3.setMediaUploader,
2510
+ attachmentProps = _ref3.attachmentProps,
2511
+ isEmojiPickerActive = _ref3.isEmojiPickerActive,
2512
+ setIsEmojiPickerActive = _ref3.setIsEmojiPickerActive;
2513
+ var menuOptions = createMenuOptions$1({
2514
+ editor: editor,
2515
+ tooltips: tooltips,
2516
+ setMediaUploader: setMediaUploader,
2517
+ attachmentProps: attachmentProps,
2518
+ isEmojiPickerActive: isEmojiPickerActive,
2519
+ setIsEmojiPickerActive: setIsEmojiPickerActive
2520
+ });
2521
+ return options.map(function (option) {
2522
+ return neetoCist.findBy({
2523
+ optionName: option
2524
+ }, menuOptions);
2525
+ }).filter(Boolean);
2526
+ };
2527
+
2528
+ function ownKeys$2(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; }
2529
+ function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), true).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2530
+ var Headless = function Headless(_ref) {
2531
+ var editor = _ref.editor,
2532
+ options = _ref.options,
2533
+ _ref$tooltips = _ref.tooltips,
2534
+ tooltips = _ref$tooltips === void 0 ? {} : _ref$tooltips,
2535
+ setMediaUploader = _ref.setMediaUploader,
2536
+ mediaUploader = _ref.mediaUploader,
2537
+ _ref$addonCommands = _ref.addonCommands,
2538
+ addonCommands = _ref$addonCommands === void 0 ? [] : _ref$addonCommands,
2539
+ className = _ref.className,
2540
+ attachmentProps = _ref.attachmentProps,
2541
+ isEmojiPickerActive = _ref.isEmojiPickerActive,
2542
+ setIsEmojiPickerActive = _ref.setIsEmojiPickerActive,
2543
+ _ref$showAssetLibrary = _ref.showAssetLibrary,
2544
+ showAssetLibrary = _ref$showAssetLibrary === void 0 ? true : _ref$showAssetLibrary;
2545
+ if (!editor) {
2546
+ return null;
2547
+ }
2548
+ var isMediaUploaderActive = options.includes(constants.EDITOR_OPTIONS.IMAGE_UPLOAD) || options.includes(constants.EDITOR_OPTIONS.VIDEO_UPLOAD);
2549
+ var menuOptions = buildMenuOptions$1({
2550
+ tooltips: tooltips,
2551
+ editor: editor,
2552
+ options: options,
2553
+ setMediaUploader: setMediaUploader,
2554
+ attachmentProps: attachmentProps,
2555
+ isEmojiPickerActive: isEmojiPickerActive,
2556
+ setIsEmojiPickerActive: setIsEmojiPickerActive
2557
+ });
2558
+ var addonCommandOptions = buildOptionsFromAddonCommands$1({
2559
+ editor: editor,
2560
+ commands: addonCommands
2561
+ });
2562
+ var allOptions = [].concat(_toConsumableArray__default.default(menuOptions), _toConsumableArray__default.default(addonCommandOptions));
2563
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
2564
+ className: classnames__default.default("ne-headless", _defineProperty__default.default({}, className, className)),
2565
+ children: [allOptions.map(function (option) {
2566
+ return /*#__PURE__*/React.createElement(Option, _objectSpread$2({
2567
+ editor: editor,
2568
+ key: option.optionName
2569
+ }, option));
2570
+ }), isMediaUploaderActive && /*#__PURE__*/jsxRuntime.jsx(MediaUploader, {
2571
+ editor: editor,
2572
+ mediaUploader: mediaUploader,
2573
+ showAssetLibrary: showAssetLibrary,
2574
+ onClose: function onClose() {
2575
+ return setMediaUploader({
2576
+ image: false,
2577
+ video: false
2578
+ });
2579
+ }
2580
+ })]
2581
+ });
2582
+ };
2583
+
2584
+ var FONT_SIZE_OPTIONS = [{
2585
+ label: i18n.t("neetoEditor.menu.heading1"),
2586
+ value: 1,
2587
+ key: "h1",
2588
+ icon: TextH1__default.default
2589
+ }, {
2590
+ label: i18n.t("neetoEditor.menu.heading2"),
2591
+ value: 2,
2592
+ key: "h2",
2593
+ icon: TextH2__default.default
2594
+ }, {
2595
+ label: i18n.t("neetoEditor.menu.heading3"),
2596
+ value: 3,
2597
+ key: "h3",
2598
+ icon: TextH3__default.default
2599
+ }, {
2600
+ label: i18n.t("neetoEditor.menu.heading4"),
2601
+ value: 4,
2602
+ key: "h4",
2603
+ icon: TextH4__default.default
2604
+ }, {
2605
+ label: i18n.t("neetoEditor.menu.heading5"),
2606
+ value: 5,
2607
+ key: "h5",
2608
+ icon: TextH5__default.default
2609
+ }, {
2610
+ label: i18n.t("neetoEditor.menu.normalText"),
2611
+ value: 0,
2612
+ key: "body2",
2613
+ icon: TextP__default.default
2614
+ }];
2615
+ var MENU_COMPONENTS = {
2616
+ fixed: Fixed,
2617
+ bubble: Bubble,
2618
+ headless: Headless,
2619
+ none: EmptyMenu
2620
+ };
2621
+
2622
+ var Menu$2 = Dropdown__default.default.Menu,
2623
+ MenuItem = Dropdown__default.default.MenuItem;
2624
+ var FontSizeOption$1 = function FontSizeOption(_ref) {
2625
+ var runEditorCommand = _ref.runEditorCommand,
2626
+ tooltipContent = _ref.tooltipContent,
2627
+ label = _ref.label,
2628
+ _ref$options = _ref.options,
2629
+ options = _ref$options === void 0 ? [] : _ref$options;
2630
+ var dropdownRef = React.useRef(null);
2631
+ var lastOption = ramda.last(FONT_SIZE_OPTIONS);
2632
+ var _useEditorStore = useEditorStore.useEditorStore(function (store) {
2633
+ var _store$marksState;
2634
+ return {
2635
+ fontSizeOption: (_store$marksState = store["marksState"]) === null || _store$marksState === void 0 ? void 0 : _store$marksState["fontSizeOption"]
2636
+ };
2637
+ }, shallow.shallow),
2638
+ _useEditorStore$fontS = _useEditorStore.fontSizeOption,
2639
+ activeOption = _useEditorStore$fontS === void 0 ? lastOption : _useEditorStore$fontS;
2640
+ var handleClick = function handleClick(level) {
2641
+ return level ? runEditorCommand(function (editor) {
2642
+ return editor.chain().focus().toggleHeading({
2643
+ level: level
2644
+ }).run();
2645
+ })() : runEditorCommand(function (editor) {
2646
+ return editor.chain().focus().setNode("paragraph").run();
2647
+ })();
2648
+ };
2649
+ var menuOptions = [].concat(_toConsumableArray__default.default(neetoCist.filterBy({
2650
+ key: function key(_key) {
2651
+ return options.includes(_key);
2652
+ }
2653
+ }, FONT_SIZE_OPTIONS)), [FONT_SIZE_OPTIONS[FONT_SIZE_OPTIONS.length - 1]]);
2654
+ return /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default, {
2655
+ autoWidth: true,
2656
+ placement: "bottom-start",
2657
+ strategy: "fixed",
2658
+ buttonProps: {
2659
+ icon: activeOption === null || activeOption === void 0 ? void 0 : activeOption.icon,
2660
+ iconPosition: "left",
2661
+ iconSize: 22,
2662
+ label: /*#__PURE__*/jsxRuntime.jsx(Down__default.default, {
2663
+ size: 12
2664
+ }),
2665
+ ref: dropdownRef,
2666
+ "data-testid": "neeto-editor-fixed-menu-font-size-option",
2667
+ onKeyDown: function onKeyDown(event) {
2668
+ var _dropdownRef$current;
2669
+ return event.key === "ArrowDown" && ((_dropdownRef$current = dropdownRef.current) === null || _dropdownRef$current === void 0 ? void 0 : _dropdownRef$current.click());
2670
+ },
2671
+ tooltipProps: {
2672
+ content: tooltipContent !== null && tooltipContent !== void 0 ? tooltipContent : label,
2673
+ position: "bottom"
2674
+ },
2675
+ style: "text",
2676
+ size: "small",
2677
+ className: "neeto-editor-fixed-menu__item neeto-editor-font-size__wrapper"
2678
+ },
2679
+ children: /*#__PURE__*/jsxRuntime.jsx(Menu$2, {
2680
+ className: "neeto-ui-flex neeto-ui-gap-1 neeto-editor-menu-font-size-options",
2681
+ children: menuOptions.map(function (_ref2) {
2682
+ var label = _ref2.label,
2683
+ Icon = _ref2.icon,
2684
+ value = _ref2.value,
2685
+ key = _ref2.key;
2686
+ return /*#__PURE__*/jsxRuntime.jsx(MenuItem.Button, {
2687
+ className: "neeto-editor-menu-font-size-options__item-btn",
2688
+ "data-testid": "neeto-editor-fixed-menu-font-size-option-".concat(key),
2689
+ tooltipProps: {
2690
+ content: label,
2691
+ position: "bottom"
2692
+ },
2693
+ onClick: function onClick() {
2694
+ return handleClick(value);
2695
+ },
2696
+ children: /*#__PURE__*/jsxRuntime.jsx(Icon, {
2697
+ size: 22
2698
+ })
2699
+ }, value);
2700
+ })
2701
+ })
2702
+ });
2703
+ };
2704
+ var FontSizeOption = /*#__PURE__*/React.memo(FontSizeOption$1);
2705
+
2706
+ var ColorDot = function ColorDot(_ref) {
2707
+ var _colorVar$match;
2708
+ var colorVar = _ref.colorVar,
2709
+ isSelected = _ref.isSelected,
2710
+ onClick = _ref.onClick,
2711
+ isTextColor = _ref.isTextColor;
2712
+ var dotClass = classnames__default.default("neeto-editor-highlight-dropdown__color-dot", {
2713
+ "neeto-editor-highlight-dropdown__color-dot--selected": isSelected
2714
+ });
2715
+ var dotStyle = {
2716
+ backgroundColor: "var(".concat(colorVar, ")")
2717
+ };
2718
+ var colorNumber = ((_colorVar$match = colorVar.match(/\d+$/)) === null || _colorVar$match === void 0 ? void 0 : _colorVar$match[0]) || colorVar;
2719
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
2720
+ onClick: onClick,
2721
+ className: dotClass,
2722
+ style: dotStyle,
2723
+ "data-testid": "neeto-editor-highlight-".concat(utils$1.hyphenize(isTextColor ? "text" : "background"), "-color-dot-").concat(colorNumber)
2724
+ });
2725
+ };
2726
+
2727
+ var COLORS = {
2728
+ text: ["--neeto-editor-highlight-text-1", "--neeto-editor-highlight-text-2", "--neeto-editor-highlight-text-3", "--neeto-editor-highlight-text-4", "--neeto-editor-highlight-text-5", "--neeto-editor-highlight-text-6", "--neeto-editor-highlight-text-7", "--neeto-editor-highlight-text-8", "--neeto-editor-highlight-text-9", "--neeto-editor-highlight-text-10", "--neeto-editor-highlight-text-11", "--neeto-editor-highlight-text-12", "--neeto-editor-highlight-text-13", "--neeto-editor-highlight-text-14", "--neeto-editor-highlight-text-15", "--neeto-editor-highlight-text-16"],
2729
+ background: ["--neeto-editor-highlight-bg-1", "--neeto-editor-highlight-bg-2", "--neeto-editor-highlight-bg-3", "--neeto-editor-highlight-bg-4", "--neeto-editor-highlight-bg-5", "--neeto-editor-highlight-bg-6", "--neeto-editor-highlight-bg-7", "--neeto-editor-highlight-bg-8", "--neeto-editor-highlight-bg-9", "--neeto-editor-highlight-bg-10", "--neeto-editor-highlight-bg-11", "--neeto-editor-highlight-bg-12", "--neeto-editor-highlight-bg-13", "--neeto-editor-highlight-bg-14", "--neeto-editor-highlight-bg-15", "--neeto-editor-highlight-bg-16"]
2730
+ };
2731
+
2732
+ var colorSections = [{
2733
+ title: "Text color",
2734
+ colors: COLORS.text,
2735
+ isTextColor: true
2736
+ }, {
2737
+ title: "Background color",
2738
+ colors: COLORS.background,
2739
+ isTextColor: false
2740
+ }];
2741
+ var HighlightDropdown = function HighlightDropdown(_ref) {
2742
+ var editor = _ref.editor,
2743
+ label = _ref.label,
2744
+ tooltipContent = _ref.tooltipContent,
2745
+ runEditorCommand = _ref.runEditorCommand;
2746
+ var dropdownRef = React.useRef(null);
2747
+ var textColor = editor.getAttributes("textStyle").color;
2748
+ var backgroundColor = editor.getAttributes("textStyle").backgroundColor;
2749
+ var updateBackgroundColor = function updateBackgroundColor(value) {
2750
+ runEditorCommand(function (editor) {
2751
+ return editor.chain().focus().setMark("textStyle", {
2752
+ backgroundColor: value
2753
+ }).run();
2754
+ })();
2755
+ };
2756
+ var handleBackgroundColorClick = function handleBackgroundColorClick(colorVar, event) {
2757
+ event.stopPropagation();
2758
+ if (backgroundColor === "var(".concat(colorVar, ")")) {
2759
+ updateBackgroundColor(null);
2760
+ } else {
2761
+ updateBackgroundColor("var(".concat(colorVar, ")"));
2762
+ }
2763
+ };
2764
+ var handleTextColorClick = function handleTextColorClick(colorVar, event) {
2765
+ event.stopPropagation();
2766
+ if (textColor === "var(".concat(colorVar, ")")) {
2767
+ editor.chain().focus().unsetColor().run();
2768
+ } else {
2769
+ editor.chain().focus().setColor("var(".concat(colorVar, ")")).run();
2770
+ }
2771
+ };
2772
+ var renderColorDots = function renderColorDots(colorList) {
2773
+ var isTextColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2774
+ return colorList.map(function (colorVar, idx) {
2775
+ return /*#__PURE__*/React.createElement(ColorDot, {
2776
+ colorVar: colorVar,
2777
+ isTextColor: isTextColor,
2778
+ key: idx,
2779
+ isSelected: isTextColor ? textColor === "var(".concat(colorVar, ")") : backgroundColor === "var(".concat(colorVar, ")"),
2780
+ onClick: function onClick(event) {
2781
+ return isTextColor ? handleTextColorClick(colorVar, event) : handleBackgroundColorClick(colorVar, event);
2782
+ }
2783
+ });
2784
+ });
2785
+ };
2786
+ return /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default, {
2787
+ autoWidth: true,
2788
+ placement: "bottom-start",
2789
+ strategy: "fixed",
2790
+ buttonProps: {
2791
+ icon: function icon() {
2792
+ return /*#__PURE__*/jsxRuntime.jsx(Highlight__default.default, {
2793
+ size: 18
2794
+ });
2795
+ },
2796
+ iconPosition: "left",
2797
+ iconSize: 16,
2798
+ label: /*#__PURE__*/jsxRuntime.jsx(Down__default.default, {
2799
+ size: 12
2800
+ }),
2801
+ ref: dropdownRef,
2802
+ "data-testid": "neeto-editor-fixed-menu-highlight-option",
2803
+ onKeyDown: function onKeyDown(event) {
2804
+ var _dropdownRef$current;
2805
+ return event.key === "ArrowDown" && ((_dropdownRef$current = dropdownRef.current) === null || _dropdownRef$current === void 0 ? void 0 : _dropdownRef$current.click());
2806
+ },
2807
+ tooltipProps: {
2808
+ content: tooltipContent !== null && tooltipContent !== void 0 ? tooltipContent : label,
2809
+ position: "bottom"
2810
+ },
2811
+ style: "text",
2812
+ size: "small",
2813
+ className: "neeto-editor-fixed-menu__item"
2814
+ },
2815
+ children: /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default.Menu, {
2816
+ className: "neeto-editor-highlight-dropdown",
2817
+ children: colorSections.map(function (_ref2) {
2818
+ var title = _ref2.title,
2819
+ colors = _ref2.colors,
2820
+ isTextColor = _ref2.isTextColor;
2821
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
2822
+ className: "neeto-editor-highlight-dropdown__section",
2823
+ children: [/*#__PURE__*/jsxRuntime.jsx(Typography__default.default, {
2824
+ className: "neeto-editor-highlight-dropdown__section-title",
2825
+ style: "body2",
2826
+ weight: "medium",
2827
+ children: title
2828
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
2829
+ className: "neeto-editor-highlight-dropdown__color-grid",
2830
+ "data-testid": "neeto-editor-highlight-".concat(utils$1.hyphenize(title), "-grid"),
2831
+ children: renderColorDots(colors, isTextColor)
2832
+ })]
2833
+ }, title);
2834
+ })
2835
+ })
2836
+ });
2837
+ };
2838
+
2839
+ var Menu$1 = Dropdown__default.default.Menu;
2840
+ var TableOption$1 = function TableOption(_ref) {
2841
+ var editor = _ref.editor,
2842
+ tooltipContent = _ref.tooltipContent,
2843
+ _ref$isSecondaryMenu = _ref.isSecondaryMenu,
2844
+ isSecondaryMenu = _ref$isSecondaryMenu === void 0 ? false : _ref$isSecondaryMenu,
2845
+ label = _ref.label;
2846
+ var _useTranslation = reactI18next.useTranslation(),
2847
+ t = _useTranslation.t;
2848
+ var _useState = React.useState(false),
2849
+ _useState2 = _slicedToArray__default.default(_useState, 2),
2850
+ isOpen = _useState2[0],
2851
+ setIsOpen = _useState2[1];
2852
+ var _useState3 = React.useState(3),
2853
+ _useState4 = _slicedToArray__default.default(_useState3, 2),
2854
+ rows = _useState4[0],
2855
+ setRows = _useState4[1];
2856
+ var _useState5 = React.useState(3),
2857
+ _useState6 = _slicedToArray__default.default(_useState5, 2),
2858
+ columns = _useState6[0],
2859
+ setColumns = _useState6[1];
2860
+ var handleClose = function handleClose() {
2861
+ setRows(3);
2862
+ setColumns(3);
2863
+ setIsOpen(false);
2864
+ };
2865
+ var handleSubmit = function handleSubmit() {
2866
+ editor.chain().focus().insertTable({
2867
+ rows: rows,
2868
+ cols: columns,
2869
+ withHeaderRow: true
2870
+ }).run();
2871
+ handleClose();
2872
+ };
2873
+ var handleDropdownClick = function handleDropdownClick(e) {
2874
+ isSecondaryMenu && e.stopPropagation();
2875
+ setIsOpen(ramda.not);
2876
+ };
2877
+ return /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default, {
2878
+ isOpen: isOpen,
2879
+ buttonStyle: isOpen ? "secondary" : "text",
2880
+ closeOnSelect: false,
2881
+ "data-testid": "neeto-editor-fixed-menu-link-option",
2882
+ icon: Column__default.default,
2883
+ position: isSecondaryMenu ? "left-start" : "bottom",
2884
+ buttonProps: {
2885
+ tabIndex: -1,
2886
+ tooltipProps: {
2887
+ content: tooltipContent !== null && tooltipContent !== void 0 ? tooltipContent : label,
2888
+ position: "bottom"
2889
+ },
2890
+ className: "neeto-editor-fixed-menu__item",
2891
+ "data-testid": "neeto-editor-fixed-menu-table-option"
2892
+ },
2893
+ customTarget: isSecondaryMenu && /*#__PURE__*/jsxRuntime.jsx(SecondaryMenuTarget, {
2894
+ label: label,
2895
+ icon: Column__default.default
2896
+ }),
2897
+ onClick: handleDropdownClick,
2898
+ onClose: handleClose,
2899
+ children: /*#__PURE__*/jsxRuntime.jsxs(Menu$1, {
2900
+ className: "neeto-editor-table__item",
2901
+ children: [/*#__PURE__*/jsxRuntime.jsx(Input__default.default, {
2902
+ autoFocus: true,
2903
+ "data-testid": "neeto-editor-fixed-menu-table-rows-input",
2904
+ label: t("neetoEditor.menu.rows"),
2905
+ min: "1",
2906
+ placeholder: t("neetoEditor.placeholders.rows"),
2907
+ size: "small",
2908
+ type: "number",
2909
+ value: rows,
2910
+ onChange: utils$1.withEventTargetValue(setRows)
2911
+ }), /*#__PURE__*/jsxRuntime.jsx(Input__default.default, {
2912
+ "data-testid": "neeto-editor-fixed-menu-table-columns-input",
2913
+ label: t("neetoEditor.menu.columns"),
2914
+ min: "1",
2915
+ placeholder: t("neetoEditor.placeholders.rows"),
2916
+ size: "small",
2917
+ type: "number",
2918
+ value: columns,
2919
+ onChange: utils$1.withEventTargetValue(setColumns)
2920
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
2921
+ className: "neeto-editor-table-menu__button",
2922
+ children: /*#__PURE__*/jsxRuntime.jsx(Button__default.default, {
2923
+ className: "mt-auto",
2924
+ "data-testid": "neeto-editor-fixed-menu-table-option-create-button",
2925
+ label: t("neetoEditor.common.create"),
2926
+ size: "small",
2927
+ onClick: handleSubmit
2928
+ })
2929
+ })]
2930
+ })
2931
+ });
2932
+ };
2933
+ var TableOption = /*#__PURE__*/React.memo(TableOption$1);
2934
+
2935
+ var _SHORTCUTS;
2936
+ var MENU_ELEMENT_TYPES = {
2937
+ BUTTON: "button",
2938
+ CALLOUT: "callout",
2939
+ FONT_SIZE: "fontSize",
2940
+ TABLE: "table",
2941
+ TEXT_COLOR: "textColor",
2942
+ EMOJI: "emoji",
2943
+ MENTIONS: "mentions",
2944
+ HIGHLIGHT: "highlight"
2945
+ };
2946
+ var SHORTCUTS = (_SHORTCUTS = {}, _defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_SHORTCUTS, constants.EDITOR_OPTIONS.BOLD, {
2947
+ mac: "⌘B",
2948
+ win: "Ctrl+B"
2949
+ }), constants.EDITOR_OPTIONS.ITALIC, {
2950
+ mac: "⌘I",
2951
+ win: "Ctrl+I"
2952
+ }), constants.EDITOR_OPTIONS.UNDERLINE, {
2953
+ mac: "⌘U",
2954
+ win: "Ctrl+U"
2955
+ }), constants.EDITOR_OPTIONS.STRIKETHROUGH, {
2956
+ mac: "⌘⇧S or ⌘⇧X",
2957
+ win: "Ctrl+Shift+S or Ctrl+Shift+X"
2958
+ }), constants.EDITOR_OPTIONS.CODE, {
2959
+ mac: "⌘E",
2960
+ win: "Ctrl+E"
2961
+ }), constants.EDITOR_OPTIONS.UNDO, {
2962
+ mac: "⌘Z",
2963
+ win: "Ctrl+Z"
2964
+ }), constants.EDITOR_OPTIONS.REDO, {
2965
+ mac: "⌘⇧Z",
2966
+ win: "Ctrl+Shift+Z"
2967
+ }), constants.EDITOR_OPTIONS.LINK, {
2968
+ mac: "⌘K",
2969
+ win: "Ctrl+K"
2970
+ }), constants.EDITOR_OPTIONS.HIGHLIGHT, {
2971
+ mac: "⌘⇧H",
2972
+ win: "Ctrl+Shift+H"
2973
+ }), "bulletList", {
2974
+ mac: "⌘⇧8",
2975
+ win: "Ctrl+Shift+8"
2976
+ }), _defineProperty__default.default(_defineProperty__default.default(_SHORTCUTS, "orderedList", {
2977
+ mac: "⌘⇧7",
2978
+ win: "Ctrl+Shift+7"
2979
+ }), "todoList", {
2980
+ mac: "⌘⇧9",
2981
+ win: "Ctrl+Shift+9"
2982
+ }));
2983
+ var MENU_ELEMENTS = _defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default({}, MENU_ELEMENT_TYPES.BUTTON, MenuButton), MENU_ELEMENT_TYPES.CALLOUT, CalloutDropdown), MENU_ELEMENT_TYPES.FONT_SIZE, FontSizeOption), MENU_ELEMENT_TYPES.TABLE, TableOption), MENU_ELEMENT_TYPES.TEXT_COLOR, TextColorOption), MENU_ELEMENT_TYPES.EMOJI, EmojiOption), MENU_ELEMENT_TYPES.MENTIONS, Mentions), MENU_ELEMENT_TYPES.HIGHLIGHT, HighlightDropdown);
2984
+ var MENU_ELEMENT_WIDTHS = _defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default({}, MENU_ELEMENT_TYPES.BUTTON, 36), MENU_ELEMENT_TYPES.CALLOUT, 23), MENU_ELEMENT_TYPES.FONT_SIZE, 103), MENU_ELEMENT_TYPES.TABLE, 36), MENU_ELEMENT_TYPES.TEXT_COLOR, 36), MENU_ELEMENT_TYPES.EMOJI, 36), MENU_ELEMENT_TYPES.MENTIONS, 36), MENU_ELEMENT_TYPES.HIGHLIGHT, 103);
2985
+
2986
+ function ownKeys$1(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; }
2987
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), true).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2988
+ var createMenuOptions = function createMenuOptions(_ref) {
2989
+ var _tooltips$fontSize, _tooltips$bold, _tooltips$italic, _tooltips$link, _tooltips$strike, _tooltips$highlight, _tooltips$highlight2, _tooltips$bulletList, _tooltips$orderedList, _tooltips$todoList, _tooltips$blockQuote, _tooltips$callout, _tooltips$callout2, _tooltips$table, _tooltips$attachments, _tooltips$neetoKbArti, _tooltips$imageUpload, _tooltips$textColor, _tooltips$emoji, _tooltips$mention, _tooltips$code, _tooltips$codeBlock, _tooltips$videoUpload, _tooltips$underline, _tooltips$undo, _tooltips$redo;
2990
+ var tooltips = _ref.tooltips,
2991
+ setMediaUploader = _ref.setMediaUploader,
2992
+ attachmentProps = _ref.attachmentProps,
2993
+ setIsAddLinkActive = _ref.setIsAddLinkActive,
2994
+ options = _ref.options,
2995
+ mentions = _ref.mentions,
2996
+ addonCommandOptions = _ref.addonCommandOptions,
2997
+ setIsEmojiPickerActive = _ref.setIsEmojiPickerActive,
2998
+ isEmojiPickerActive = _ref.isEmojiPickerActive,
2999
+ runEditorCommand = _ref.runEditorCommand,
3000
+ editor = _ref.editor,
3001
+ setIsNeetoKbArticleActive = _ref.setIsNeetoKbArticleActive;
3002
+ var fontSizeOptions = options.filter(function (option) {
3003
+ return option.match(/^h[1-6]$/);
3004
+ });
3005
+ return [
3006
+ // font
3007
+ [{
3008
+ type: MENU_ELEMENT_TYPES.FONT_SIZE,
3009
+ options: fontSizeOptions,
3010
+ label: (_tooltips$fontSize = tooltips.fontSize) !== null && _tooltips$fontSize !== void 0 ? _tooltips$fontSize : i18n.t("neetoEditor.menu.fontSize"),
3011
+ isEnabled: neetoCist.isNotEmpty(fontSizeOptions),
3012
+ optionName: "fontSizeOptions",
3013
+ runEditorCommand: runEditorCommand
3014
+ }, {
3015
+ type: MENU_ELEMENT_TYPES.BUTTON,
3016
+ icon: TextBold__default.default,
3017
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.BOLD),
3018
+ command: runEditorCommand(function (editor) {
3019
+ return editor === null || editor === void 0 ? void 0 : editor.chain().focus().toggleBold().run();
3020
+ }),
3021
+ optionName: constants.EDITOR_OPTIONS.BOLD,
3022
+ label: (_tooltips$bold = tooltips.bold) !== null && _tooltips$bold !== void 0 ? _tooltips$bold : i18n.t("neetoEditor.menu.bold")
3023
+ }, {
3024
+ type: MENU_ELEMENT_TYPES.BUTTON,
3025
+ icon: TextItalic__default.default,
3026
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.ITALIC),
3027
+ command: runEditorCommand(function (editor) {
3028
+ return editor.chain().focus().toggleItalic().run();
3029
+ }),
3030
+ optionName: constants.EDITOR_OPTIONS.ITALIC,
3031
+ label: (_tooltips$italic = tooltips.italic) !== null && _tooltips$italic !== void 0 ? _tooltips$italic : i18n.t("neetoEditor.menu.italic")
3032
+ }, {
3033
+ type: MENU_ELEMENT_TYPES.BUTTON,
3034
+ icon: Link__default.default,
3035
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.LINK),
3036
+ command: function command() {
3037
+ return setIsAddLinkActive(ramda.not);
3038
+ },
3039
+ optionName: constants.EDITOR_OPTIONS.LINK,
3040
+ label: (_tooltips$link = tooltips.link) !== null && _tooltips$link !== void 0 ? _tooltips$link : i18n.t("neetoEditor.menu.link")
3041
+ }, {
3042
+ type: MENU_ELEMENT_TYPES.BUTTON,
3043
+ icon: TextCross__default.default,
3044
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.STRIKETHROUGH),
3045
+ command: runEditorCommand(function (editor) {
3046
+ return editor.chain().focus().toggleStrike().run();
3047
+ }),
3048
+ optionName: constants.EDITOR_OPTIONS.STRIKETHROUGH,
3049
+ label: (_tooltips$strike = tooltips.strike) !== null && _tooltips$strike !== void 0 ? _tooltips$strike : i18n.t("neetoEditor.menu.strike")
3050
+ }, {
3051
+ type: MENU_ELEMENT_TYPES.HIGHLIGHT,
3052
+ icon: Highlight__default.default,
3053
+ label: (_tooltips$highlight = tooltips.highlight) !== null && _tooltips$highlight !== void 0 ? _tooltips$highlight : i18n.t("neetoEditor.menu.highlight"),
3054
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.HIGHLIGHT),
3055
+ optionName: constants.EDITOR_OPTIONS.HIGHLIGHT,
3056
+ editor: editor,
3057
+ runEditorCommand: runEditorCommand,
3058
+ tooltipContent: (_tooltips$highlight2 = tooltips.highlight) !== null && _tooltips$highlight2 !== void 0 ? _tooltips$highlight2 : i18n.t("neetoEditor.menu.highlight")
3059
+ }],
3060
+ // list
3061
+ [{
3062
+ type: MENU_ELEMENT_TYPES.BUTTON,
3063
+ icon: ListDot__default.default,
3064
+ command: runEditorCommand(function (editor) {
3065
+ return editor.chain().focus().toggleBulletList().run();
3066
+ }),
3067
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.LIST_BULLETS),
3068
+ optionName: "bulletList",
3069
+ highlight: true,
3070
+ label: (_tooltips$bulletList = tooltips.bulletList) !== null && _tooltips$bulletList !== void 0 ? _tooltips$bulletList : i18n.t("neetoEditor.menu.bulletedList")
3071
+ }, {
3072
+ type: MENU_ELEMENT_TYPES.BUTTON,
3073
+ icon: ListNumber__default.default,
3074
+ command: runEditorCommand(function (editor) {
3075
+ return editor.chain().focus().toggleOrderedList().run();
3076
+ }),
3077
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.LIST_ORDERED),
3078
+ optionName: "orderedList",
3079
+ highlight: true,
3080
+ label: (_tooltips$orderedList = tooltips.orderedList) !== null && _tooltips$orderedList !== void 0 ? _tooltips$orderedList : i18n.t("neetoEditor.menu.orderedList")
3081
+ }, {
3082
+ type: MENU_ELEMENT_TYPES.BUTTON,
3083
+ icon: Checkbox__default$1.default,
3084
+ command: runEditorCommand(function (editor) {
3085
+ return editor.chain().focus().toggleTaskList().run();
3086
+ }),
3087
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.TODO_LIST),
3088
+ optionName: "todoList",
3089
+ highlight: true,
3090
+ label: (_tooltips$todoList = tooltips.todoList) !== null && _tooltips$todoList !== void 0 ? _tooltips$todoList : i18n.t("neetoEditor.menu.todoList")
3091
+ }],
3092
+ // block
3093
+ [{
3094
+ type: MENU_ELEMENT_TYPES.BUTTON,
3095
+ icon: Quote__default.default,
3096
+ command: runEditorCommand(function (editor) {
3097
+ return editor.chain().focus().toggleBlockquote().run();
3098
+ }),
3099
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.BLOCKQUOTE),
3100
+ optionName: "blockquote",
3101
+ highlight: true,
3102
+ label: (_tooltips$blockQuote = tooltips.blockQuote) !== null && _tooltips$blockQuote !== void 0 ? _tooltips$blockQuote : i18n.t("neetoEditor.menu.blockQuote")
3103
+ }, {
3104
+ type: MENU_ELEMENT_TYPES.CALLOUT,
3105
+ label: (_tooltips$callout = tooltips.callout) !== null && _tooltips$callout !== void 0 ? _tooltips$callout : i18n.t("neetoEditor.menu.callout"),
3106
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.CALLOUT),
3107
+ optionName: constants.EDITOR_OPTIONS.CALLOUT,
3108
+ editor: editor,
3109
+ runEditorCommand: runEditorCommand,
3110
+ tooltipContent: (_tooltips$callout2 = tooltips.callout) !== null && _tooltips$callout2 !== void 0 ? _tooltips$callout2 : i18n.t("neetoEditor.menu.callout")
3111
+ }],
3112
+ // misc
3113
+ [{
3114
+ type: MENU_ELEMENT_TYPES.TABLE,
3115
+ label: (_tooltips$table = tooltips.table) !== null && _tooltips$table !== void 0 ? _tooltips$table : i18n.t("neetoEditor.menu.table"),
3116
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.TABLE),
3117
+ optionName: constants.EDITOR_OPTIONS.TABLE
3118
+ }, {
3119
+ type: MENU_ELEMENT_TYPES.BUTTON,
3120
+ icon: Attachment__default.default,
3121
+ command: function command() {
3122
+ return attachmentProps === null || attachmentProps === void 0 ? void 0 : attachmentProps.handleUploadAttachments();
3123
+ },
3124
+ disabled: attachmentProps === null || attachmentProps === void 0 ? void 0 : attachmentProps.isDisabled,
3125
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.ATTACHMENTS),
3126
+ optionName: constants.EDITOR_OPTIONS.ATTACHMENTS,
3127
+ label: (_tooltips$attachments = tooltips.attachments) !== null && _tooltips$attachments !== void 0 ? _tooltips$attachments : i18n.t("neetoEditor.menu.attachments")
3128
+ }, {
3129
+ type: MENU_ELEMENT_TYPES.BUTTON,
3130
+ icon: File__default.default,
3131
+ command: function command() {
3132
+ if (!editor || !setIsNeetoKbArticleActive) return;
3133
+ var _editor$state$selecti = editor.state.selection,
3134
+ from = _editor$state$selecti.from,
3135
+ to = _editor$state$selecti.to;
3136
+ var cursorPos = editor.view.coordsAtPos(from);
3137
+ setIsNeetoKbArticleActive({
3138
+ active: true,
3139
+ editor: editor,
3140
+ range: {
3141
+ from: from,
3142
+ to: to
3143
+ },
3144
+ cursorPos: cursorPos
3145
+ });
3146
+ },
3147
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.NEETO_KB_ARTICLE),
3148
+ optionName: constants.EDITOR_OPTIONS.NEETO_KB_ARTICLE,
3149
+ label: (_tooltips$neetoKbArti = tooltips.neetoKbArticle) !== null && _tooltips$neetoKbArti !== void 0 ? _tooltips$neetoKbArti : i18n.t("neetoEditor.menu.linkToNeetoKbArticle")
3150
+ }, {
3151
+ type: MENU_ELEMENT_TYPES.BUTTON,
3152
+ icon: ImageUpload__default.default,
3153
+ command: function command() {
3154
+ return setMediaUploader(ramda.assoc("image", true));
3155
+ },
3156
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.IMAGE_UPLOAD),
3157
+ optionName: constants.EDITOR_OPTIONS.IMAGE_UPLOAD,
3158
+ label: (_tooltips$imageUpload = tooltips.imageUpload) !== null && _tooltips$imageUpload !== void 0 ? _tooltips$imageUpload : i18n.t("neetoEditor.menu.imageUpload")
3159
+ }],
3160
+ // extras
3161
+ [{
3162
+ type: MENU_ELEMENT_TYPES.TEXT_COLOR,
3163
+ label: (_tooltips$textColor = tooltips.textColor) !== null && _tooltips$textColor !== void 0 ? _tooltips$textColor : i18n.t("neetoEditor.menu.textColor"),
3164
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.TEXT_COLOR),
3165
+ optionName: constants.EDITOR_OPTIONS.TEXT_COLOR
3166
+ }, {
3167
+ type: MENU_ELEMENT_TYPES.EMOJI,
3168
+ label: (_tooltips$emoji = tooltips.emoji) !== null && _tooltips$emoji !== void 0 ? _tooltips$emoji : i18n.t("neetoEditor.menu.emoji"),
3169
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.EMOJI),
3170
+ optionName: constants.EDITOR_OPTIONS.EMOJI,
3171
+ setActive: setIsEmojiPickerActive,
3172
+ isActive: isEmojiPickerActive
3173
+ }, {
3174
+ type: MENU_ELEMENT_TYPES.MENTIONS,
3175
+ label: (_tooltips$mention = tooltips.mention) !== null && _tooltips$mention !== void 0 ? _tooltips$mention : i18n.t("neetoEditor.menu.mention"),
3176
+ isEnabled: neetoCist.isNotEmpty(mentions),
3177
+ optionName: "mentions",
3178
+ mentions: mentions
3179
+ }, {
3180
+ type: MENU_ELEMENT_TYPES.BUTTON,
3181
+ icon: Code__default.default,
3182
+ command: runEditorCommand(function (editor) {
3183
+ return editor.chain().focus().toggleCode().run();
3184
+ }),
3185
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.CODE),
3186
+ optionName: constants.EDITOR_OPTIONS.CODE,
3187
+ label: (_tooltips$code = tooltips.code) !== null && _tooltips$code !== void 0 ? _tooltips$code : i18n.t("neetoEditor.menu.code")
3188
+ }, {
3189
+ type: MENU_ELEMENT_TYPES.BUTTON,
3190
+ icon: CodeBlock__default.default,
3191
+ command: runEditorCommand(function (editor) {
3192
+ return editor.chain().focus().toggleCodeBlock().run();
3193
+ }),
3194
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.CODE_BLOCK),
3195
+ optionName: "codeBlock",
3196
+ label: (_tooltips$codeBlock = tooltips.codeBlock) !== null && _tooltips$codeBlock !== void 0 ? _tooltips$codeBlock : i18n.t("neetoEditor.menu.codeBlock")
3197
+ }, {
3198
+ type: MENU_ELEMENT_TYPES.BUTTON,
3199
+ icon: Video__default.default,
3200
+ command: function command() {
3201
+ return setMediaUploader(ramda.assoc("video", true));
3202
+ },
3203
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.VIDEO_UPLOAD),
3204
+ optionName: constants.EDITOR_OPTIONS.VIDEO_UPLOAD,
3205
+ label: (_tooltips$videoUpload = tooltips.videoUpload) !== null && _tooltips$videoUpload !== void 0 ? _tooltips$videoUpload : i18n.t("neetoEditor.menu.videoUpload")
3206
+ }, {
3207
+ type: MENU_ELEMENT_TYPES.BUTTON,
3208
+ icon: Underline__default.default,
3209
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.UNDERLINE),
3210
+ command: runEditorCommand(function (editor) {
3211
+ return editor.chain().focus().toggleUnderline().run();
3212
+ }),
3213
+ optionName: constants.EDITOR_OPTIONS.UNDERLINE,
3214
+ label: (_tooltips$underline = tooltips.underline) !== null && _tooltips$underline !== void 0 ? _tooltips$underline : i18n.t("neetoEditor.menu.underline")
3215
+ }], //addons
3216
+ _toConsumableArray__default.default(addonCommandOptions),
3217
+ // history
3218
+ [{
3219
+ icon: Undo__default.default,
3220
+ command: runEditorCommand(function (editor) {
3221
+ return editor.chain().focus().undo().run();
3222
+ }),
3223
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.UNDO),
3224
+ optionName: constants.EDITOR_OPTIONS.UNDO,
3225
+ label: (_tooltips$undo = tooltips.undo) !== null && _tooltips$undo !== void 0 ? _tooltips$undo : i18n.t("neetoEditor.menu.undo"),
3226
+ type: MENU_ELEMENT_TYPES.BUTTON
3227
+ }, {
3228
+ icon: Redo__default.default,
3229
+ command: runEditorCommand(function (editor) {
3230
+ return editor.chain().focus().redo().run();
3231
+ }),
3232
+ isEnabled: options.includes(constants.EDITOR_OPTIONS.REDO),
3233
+ optionName: constants.EDITOR_OPTIONS.REDO,
3234
+ label: (_tooltips$redo = tooltips.redo) !== null && _tooltips$redo !== void 0 ? _tooltips$redo : i18n.t("neetoEditor.menu.redo"),
3235
+ type: MENU_ELEMENT_TYPES.BUTTON
3236
+ }]];
3237
+ };
3238
+ var buildOptionsFromAddonCommands = function buildOptionsFromAddonCommands(_ref2) {
3239
+ var commands = _ref2.commands,
3240
+ runEditorCommand = _ref2.runEditorCommand;
3241
+ return commands.map(function (option) {
3242
+ return _objectSpread$1(_objectSpread$1({}, option), {}, {
3243
+ type: MENU_ELEMENT_TYPES.BUTTON,
3244
+ command: runEditorCommand(function (editor) {
3245
+ var _option$command, _editor$state, _editor$state2;
3246
+ return (_option$command = option.command) === null || _option$command === void 0 ? void 0 : _option$command.call(option, {
3247
+ editor: editor,
3248
+ range: {
3249
+ from: (_editor$state = editor.state) === null || _editor$state === void 0 || (_editor$state = _editor$state.selection) === null || _editor$state === void 0 ? void 0 : _editor$state.to,
3250
+ to: (_editor$state2 = editor.state) === null || _editor$state2 === void 0 ? void 0 : _editor$state2.selection.to
3251
+ }
3252
+ });
3253
+ })
3254
+ });
3255
+ });
3256
+ };
3257
+ var buildMenuOptions = function buildMenuOptions(_ref3) {
3258
+ var tooltips = _ref3.tooltips,
3259
+ options = _ref3.options,
3260
+ setMediaUploader = _ref3.setMediaUploader,
3261
+ attachmentProps = _ref3.attachmentProps,
3262
+ setIsAddLinkActive = _ref3.setIsAddLinkActive,
3263
+ _ref3$mentions = _ref3.mentions,
3264
+ mentions = _ref3$mentions === void 0 ? [] : _ref3$mentions,
3265
+ addonCommands = _ref3.addonCommands,
3266
+ setIsEmojiPickerActive = _ref3.setIsEmojiPickerActive,
3267
+ isEmojiPickerActive = _ref3.isEmojiPickerActive,
3268
+ runEditorCommand = _ref3.runEditorCommand,
3269
+ editor = _ref3.editor,
3270
+ setIsNeetoKbArticleActive = _ref3.setIsNeetoKbArticleActive;
3271
+ var addonCommandOptions = buildOptionsFromAddonCommands({
3272
+ commands: addonCommands,
3273
+ runEditorCommand: runEditorCommand
3274
+ });
3275
+ var menuOptions = createMenuOptions({
3276
+ tooltips: tooltips,
3277
+ setMediaUploader: setMediaUploader,
3278
+ attachmentProps: attachmentProps,
3279
+ setIsAddLinkActive: setIsAddLinkActive,
3280
+ options: options,
3281
+ mentions: mentions,
3282
+ addonCommandOptions: addonCommandOptions,
3283
+ setIsEmojiPickerActive: setIsEmojiPickerActive,
3284
+ isEmojiPickerActive: isEmojiPickerActive,
3285
+ runEditorCommand: runEditorCommand,
3286
+ editor: editor,
3287
+ setIsNeetoKbArticleActive: setIsNeetoKbArticleActive
3288
+ });
3289
+ return menuOptions.map(function (option) {
3290
+ return option.filter(ramda.prop("isEnabled"));
3291
+ });
3292
+ };
3293
+ var getCursorPos = function getCursorPos(editor, to) {
3294
+ return editor === null || editor === void 0 ? void 0 : editor.view.coordsAtPos(to);
3295
+ };
3296
+ var reGroupMenuItems = function reGroupMenuItems(menuRef, menuGroups) {
3297
+ var toolbarWidth = menuRef.current.offsetWidth;
3298
+ var totalWidth = 0;
3299
+ var visibleMenuGroups = [];
3300
+ var invisibleMenuGroups = [];
3301
+ menuGroups.forEach(function (group, groupIndex) {
3302
+ group.forEach(function (item, itemIndex) {
3303
+ var width = MENU_ELEMENT_WIDTHS[item.type];
3304
+ if (totalWidth + width < toolbarWidth) {
3305
+ var _visibleMenuGroups$gr;
3306
+ totalWidth += width;
3307
+ visibleMenuGroups[groupIndex] = (_visibleMenuGroups$gr = visibleMenuGroups[groupIndex]) !== null && _visibleMenuGroups$gr !== void 0 ? _visibleMenuGroups$gr : [];
3308
+ visibleMenuGroups[groupIndex][itemIndex] = item;
3309
+ } else {
3310
+ var _invisibleMenuGroups$;
3311
+ var visibleMenuGroupsLength = visibleMenuGroups.length;
3312
+ var index = groupIndex - visibleMenuGroupsLength + 1;
3313
+ invisibleMenuGroups[index] = (_invisibleMenuGroups$ = invisibleMenuGroups[index]) !== null && _invisibleMenuGroups$ !== void 0 ? _invisibleMenuGroups$ : [];
3314
+ invisibleMenuGroups[index][itemIndex] = item;
3315
+ }
3316
+ });
3317
+ });
3318
+ return {
3319
+ visibleMenuGroups: visibleMenuGroups,
3320
+ invisibleMenuGroups: invisibleMenuGroups
3321
+ };
3322
+ };
3323
+ var getLinkPopoverPosition = function getLinkPopoverPosition(editor, popoverRef) {
3324
+ var _editor$view$state$se = editor.view.state.selection,
3325
+ selectionEnd = _editor$view$state$se.$to.pos,
3326
+ selectionStart = _editor$view$state$se.$from.pos;
3327
+ var selectionLength = selectionEnd - selectionStart;
3328
+ var offset = 0;
3329
+ if (selectionLength > 1) offset = Math.round(selectionLength / 2);
3330
+ if (selectionLength === 1) offset = 1;
3331
+
3332
+ // Calculate the arrow position
3333
+ var arrowCoords = editor.view.coordsAtPos(selectionStart + offset);
3334
+ var arrowPosition = {
3335
+ top: "".concat(arrowCoords.top + 21, "px"),
3336
+ left: "".concat(arrowCoords.left - 8.5, "px")
3337
+ };
3338
+
3339
+ // Calculate the popover position
3340
+ var popoverCoords = editor.view.coordsAtPos(selectionStart);
3341
+ var adjustedLeft = popoverCoords === null || popoverCoords === void 0 ? void 0 : popoverCoords.left,
3342
+ adjustedTop = popoverCoords === null || popoverCoords === void 0 ? void 0 : popoverCoords.top;
3343
+ if (popoverRef !== null && popoverRef !== void 0 && popoverRef.current) {
3344
+ var _popoverRef$current;
3345
+ var popoverRect = (_popoverRef$current = popoverRef.current) === null || _popoverRef$current === void 0 ? void 0 : _popoverRef$current.getBoundingClientRect();
3346
+ var screenWidth = window.innerWidth;
3347
+ var screenHeight = window.innerHeight;
3348
+ var maxLeft = screenWidth - popoverRect.width;
3349
+ var maxTop = screenHeight - popoverRect.height - 50;
3350
+ adjustedLeft = popoverCoords !== null && popoverCoords !== void 0 && popoverCoords.left ? Math.min(popoverCoords.left - 50, maxLeft) : 0;
3351
+ adjustedTop = popoverCoords !== null && popoverCoords !== void 0 && popoverCoords.top ? Math.min(popoverCoords.top - 22, maxTop) : 0;
3352
+ } else {
3353
+ adjustedLeft = popoverCoords.left - 50;
3354
+ adjustedTop = popoverCoords.top - 22;
3355
+ }
3356
+ var popoverPosition = {
3357
+ top: "".concat(adjustedTop, "px"),
3358
+ left: "".concat(adjustedLeft, "px")
3359
+ };
3360
+ return {
3361
+ arrowPosition: arrowPosition,
3362
+ popoverPosition: popoverPosition
3363
+ };
3364
+ };
3365
+ function renderTooltipContent(label, optionName) {
3366
+ var shortcut = SHORTCUTS[optionName];
3367
+ if (!shortcut) return label;
3368
+ var isMac = function isMac() {
3369
+ return typeof window !== "undefined" && /Mac|iPod|iPhone|iPad/.test(window.navigator.userAgent);
3370
+ };
3371
+ var key = isMac() ? shortcut.mac : shortcut.win;
3372
+ return "".concat(label, " (").concat(key, ")");
3373
+ }
3374
+
3375
+ var css = ".neeto-editor-fixed-menu{background-color:rgb(var(--neeto-ui-white));border:thin solid rgb(var(--neeto-ui-gray-400));border-bottom:none;border-radius:var(--neeto-ui-rounded) var(--neeto-ui-rounded) 0 0;display:flex;position:relative}.neeto-editor-fixed-menu--independant{border-bottom:thin solid rgb(var(--neeto-ui-gray-400));border-radius:0;border-radius:initial}.neeto-editor-fixed-menu--independant .neeto-editor-fixed-menu__wrapper{border-bottom:0!important}.neeto-editor-fixed-menu--independant .neeto-editor-fixed-menu__wrapper button.neeto-editor-fixed-menu__item .neeto-ui-btn__icon path{stroke-width:1.8px}.neeto-editor-fixed-menu__item{border-radius:0}.neeto-editor-fixed-menu button.neeto-editor-fixed-menu__item{--neeto-ui-btn-border-radius:0;--neeto-ui-btn-icon-size:22px;--neeto-ui-btn-padding-x:0;--neeto-ui-btn-padding-y:0;--neeto-ui-btn-focus-box-shadow:none;align-items:center;height:36px;justify-content:center;min-width:-moz-fit-content;min-width:fit-content;padding:0;width:36px}.neeto-editor-fixed-menu button.neeto-editor-fixed-menu__item .neeto-ui-btn__icon{color:rgb(var(--neeto-ui-black))}.neeto-editor-fixed-menu button.neeto-editor-fixed-menu__item .neeto-ui-btn__icon path{stroke-width:1.5px}.neeto-editor-fixed-menu button.neeto-editor-fixed-menu__item:hover{background-color:rgb(var(--neeto-ui-gray-100))}.neeto-editor-fixed-menu button.neeto-editor-fixed-menu__item.neeto-ui-btn--style-secondary{background-color:rgb(var(--neeto-ui-accent-100))}.neeto-editor-fixed-menu button.neeto-editor-fixed-menu__item.neeto-ui-btn--style-secondary .neeto-ui-btn__icon{color:rgb(var(--neeto-ui-accent-800))}.neeto-editor-fixed-menu__wrapper{align-items:center;border-bottom:thin solid rgb(var(--neeto-ui-gray-400));display:flex;flex-grow:1;justify-content:flex-start;padding:0 2px;width:100%}.neeto-editor-fixed-menu__wrapper__button-group{display:flex}.neeto-editor-fixed-menu__variables{bottom:-42px;inset-inline-end:8px;position:absolute;z-index:10}.neeto-editor-fixed-menu__variables .neeto-editor-menu__item{background-color:rgb(var(--neeto-ui-gray-700));border-radius:var(--neeto-ui-rounded-sm);padding:4px}.neeto-editor-fixed-menu__variables .neeto-editor-menu__item.active,.neeto-editor-fixed-menu__variables .neeto-editor-menu__item:hover{background-color:rgb(var(--neeto-ui-gray-600))}.neeto-editor-fixed-menu__variables--standalone{bottom:auto;inset-inline-end:0;position:absolute;top:8px;z-index:10}.neeto-editor-fixed-menu__right-options{display:flex}.neeto-editor-fixed-menu__emoji-dropdown{max-height:none!important}.neeto-editor-fixed-menu__separator{display:flex;height:28px;width:32px}.neeto-editor-fixed-menu__separator span{width:100%}.neeto-editor-fixed-menu__separator span:first-child{border-inline-end:1px solid rgb(var(--neeto-ui-gray-200))}.neeto-editor-text-color-option__options-group{align-items:center;display:flex;gap:8px;margin-block:8px;margin-inline:4px}.neeto-editor-text-color-option__options-group__input{max-width:120px}.neeto-editor-text-color-option__options-group__reset-button{align-self:center}.react-colorful{width:100%!important}.neeto-editor-menu__item{align-items:center;border-radius:2px;cursor:pointer;display:flex;flex-direction:row;gap:4px;justify-content:center;padding:8px;transition:var(--neeto-ui-transition)}.neeto-editor-menu__item p{color:rgb(var(--neeto-ui-gray-600));font-size:var(--neeto-ui-text-xs);line-height:1;white-space:nowrap}.neeto-editor-menu__item.active,.neeto-editor-menu__item:hover{background-color:rgb(var(--neeto-ui-gray-200))}.neeto-editor-menu__item:focus,.neeto-editor-menu__item:focus-visible{outline:rgb(var(--neeto-ui-gray-300)) auto 1px}.neeto-editor-menu__item input[type=color]{height:0;visibility:hidden;width:0}.neeto-editor-menu__item:disabled{background-color:rgb(var(--neeto-ui-gray-100));opacity:.5}.neeto-editor-link__item{align-items:flex-start;justify-content:flex-start}.neeto-editor-link__item,.neeto-editor-table__item{display:flex!important;flex-direction:row;gap:8px;padding:8px!important}.neeto-editor-table__item{min-width:210px}.neeto-editor-table__item input{max-width:60px!important}.neeto-editor-table__options-menu{display:flex;flex-direction:column;gap:8px;max-height:150px!important;overflow:scroll;padding:8px!important}.neeto-editor-font-size__wrapper{font-size:16px;font-weight:var(--neeto-ui-font-normal)!important;padding-inline-end:4px!important;padding-inline-start:4px!important}.tippy-box[data-theme~=neeto-editor-bubble-menu-tippy-box]{box-shadow:none!important}.tippy-box[data-theme~=neeto-editor-bubble-menu-tippy-box] .tippy-content{padding:0!important}.tippy-box[data-theme~=neeto-editor-common-submenu-tippy-box]{box-shadow:none!important}.tippy-box[data-theme~=neeto-editor-common-submenu-tippy-box] .tippy-content{padding:0!important}.neeto-editor-bubble-menu{align-items:center;background:rgb(var(--neeto-ui-white));border:1px solid rgb(var(--neeto-ui-gray-400));border-radius:var(--neeto-ui-rounded);display:flex;flex-direction:row;gap:0;justify-content:flex-start;overflow-x:auto;padding:0;position:relative}.neeto-editor-bubble-menu>.neeto-editor-bubble-menu__item:first-child,.neeto-editor-bubble-menu>.neeto-editor-fixed-menu__item:first-child,.neeto-editor-bubble-menu>.neeto-editor-table-bubble-menu__item:first-child{border-bottom-left-radius:var(--neeto-ui-rounded);border-top-left-radius:var(--neeto-ui-rounded)}.neeto-editor-bubble-menu>.neeto-editor-bubble-menu__item:last-child,.neeto-editor-bubble-menu>.neeto-editor-fixed-menu__item:last-child,.neeto-editor-bubble-menu>.neeto-editor-table-bubble-menu__item:last-child{border-bottom-right-radius:var(--neeto-ui-rounded);border-top-right-radius:var(--neeto-ui-rounded)}.neeto-editor-bubble-menu button.neeto-editor-bubble-menu__item,.neeto-editor-bubble-menu button.neeto-editor-fixed-menu__item,.neeto-editor-bubble-menu button.neeto-editor-table-bubble-menu__item{--neeto-ui-btn-border-radius:0;--neeto-ui-btn-icon-size:22px;--neeto-ui-btn-padding-x:0;--neeto-ui-btn-padding-y:0;--neeto-ui-btn-focus-box-shadow:none;align-items:center;color:rgb(var(--neeto-ui-black))!important;flex-shrink:0;height:36px;justify-content:center;min-width:-moz-fit-content;min-width:fit-content;width:36px}.neeto-editor-bubble-menu button.neeto-editor-bubble-menu__item .neeto-ui-btn__icon,.neeto-editor-bubble-menu button.neeto-editor-fixed-menu__item .neeto-ui-btn__icon,.neeto-editor-bubble-menu button.neeto-editor-table-bubble-menu__item .neeto-ui-btn__icon{color:rgb(var(--neeto-ui-black))}.neeto-editor-bubble-menu button.neeto-editor-bubble-menu__item .neeto-ui-btn__icon path,.neeto-editor-bubble-menu button.neeto-editor-fixed-menu__item .neeto-ui-btn__icon path,.neeto-editor-bubble-menu button.neeto-editor-table-bubble-menu__item .neeto-ui-btn__icon path{stroke-width:1.5px}.neeto-editor-bubble-menu button.neeto-editor-bubble-menu__item.active,.neeto-editor-bubble-menu button.neeto-editor-bubble-menu__item:active,.neeto-editor-bubble-menu button.neeto-editor-bubble-menu__item:hover,.neeto-editor-bubble-menu button.neeto-editor-fixed-menu__item.active,.neeto-editor-bubble-menu button.neeto-editor-fixed-menu__item:active,.neeto-editor-bubble-menu button.neeto-editor-fixed-menu__item:hover,.neeto-editor-bubble-menu button.neeto-editor-table-bubble-menu__item.active,.neeto-editor-bubble-menu button.neeto-editor-table-bubble-menu__item:active,.neeto-editor-bubble-menu button.neeto-editor-table-bubble-menu__item:hover{background-color:rgb(var(--neeto-ui-gray-100))}.neeto-editor-bubble-menu button.neeto-editor-bubble-menu__item.neeto-ui-btn--style-secondary{background-color:rgb(var(--neeto-ui-accent-100))!important}.neeto-editor-bubble-menu button.neeto-editor-bubble-menu__item.neeto-ui-btn--style-secondary .neeto-ui-btn__icon{color:rgb(var(--neeto-ui-accent-800))!important}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__link{align-items:center;display:flex;gap:6px;justify-content:space-between;padding:6px;width:256px}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__link .neeto-editor-bubble-menu-link__input{background-color:transparent;background-color:var(--neeto-ui-input-bg-color);border:var(--neeto-ui-input-border-width) solid var(--neeto-ui-input-border-color);border-radius:var(--neeto-ui-input-border-radius);color:var(--neeto-ui-input-color);font-size:var(--neeto-ui-input-font-size);height:28px;line-height:1.2;outline:none;transition:var(--neeto-ui-transition);width:100%}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__link .neeto-editor-bubble-menu-link__input::-moz-placeholder{color:rgba(.4);color:rgba(var(--neeto-ui-white,.4))}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__link .neeto-editor-bubble-menu-link__input::placeholder{color:rgba(.4);color:rgba(var(--neeto-ui-white,.4))}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__link .ne-btn--icon-only{min-height:0;opacity:.8;padding:0}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__link .ne-btn--icon-only:hover{opacity:1}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__table{align-items:flex-start;display:flex;gap:6px;justify-content:space-between;max-width:256px;padding:4px}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__table input{background-color:var(--neeto-ui-input-bg-color);border:var(--neeto-ui-input-border-width) solid var(--neeto-ui-input-border-color);border-radius:var(--neeto-ui-input-border-radius);color:var(--neeto-ui-input-color);font-size:var(--neeto-ui-input-font-size);height:28px;line-height:1.2;outline:none;padding-block:3px;padding-inline:5px;transition:var(--neeto-ui-transition);width:60px}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__table input::-moz-placeholder{color:rgb(var(--neeto-ui-gray-500))}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__table input::placeholder{color:rgb(var(--neeto-ui-gray-500))}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__table__menu-item{display:flex;flex-direction:column;gap:6px}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__table__input-label{color:rgb(var(--neeto-ui-gray-800))}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__table__buttons{align-self:flex-end;display:flex;gap:4px;justify-content:space-between}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__table__options{display:flex;flex-direction:column;gap:2px;max-height:190px;overflow:scroll}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__dropdown-target{align-items:center;display:flex;font-size:var(--neeto-ui-text-xs);gap:4px;line-height:var(--neeto-ui-leading-normal);white-space:nowrap}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__dropdown{align-items:flex-start;display:flex;flex-direction:column}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__dropdown .neeto-editor-bubble-menu__dropdown-item{font-size:var(--neeto-ui-text-xs);padding-block:8px;padding-inline:12px;text-align:start;width:100%}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__dropdown .neeto-editor-bubble-menu__dropdown-item:first-child{border-top-left-radius:var(--neeto-ui-rounded);border-top-right-radius:var(--neeto-ui-rounded)}.neeto-editor-bubble-menu .neeto-editor-bubble-menu__dropdown .neeto-editor-bubble-menu__dropdown-item:last-child{border-bottom-left-radius:var(--neeto-ui-rounded);border-bottom-right-radius:var(--neeto-ui-rounded)}.neeto-editor-bubble-menu-animate-shake{animation:shake 1s linear infinite alternate both}.neeto-editor-table-menu__button{align-items:flex-end;display:flex}.neeto-editor__image-menu .neeto-ui-dropdown__popup{display:flex;min-width:0;min-width:auto}.neeto-editor__image-menu .neeto-ui-dropdown__popup .neeto-ui-btn .neeto-ui-btn__icon{height:18px!important;width:18px!important}.neeto-editor__image-menu-btn{border-radius:100%;inset-inline-end:6px;position:absolute!important;top:6px;z-index:1}.neeto-editor-menu-font-size-options{padding:8px!important}.neeto-editor-menu-font-size-options .neeto-ui-dropdown__popup-menu-item{background-color:transparent!important}.neeto-editor-menu-font-size-options .neeto-editor-menu-font-size-options__item-btn{border-radius:var(--neeto-ui-btn-border-radius)!important;justify-content:center;min-height:34px;min-width:34px;overflow:hidden;padding-inline-end:0!important;padding-inline-start:0!important;text-align:center}.neeto-editor-menu-font-size-options .neeto-editor-menu-font-size-options__item-btn--selected{background-color:rgb(var(--neeto-ui-accent-100))!important;color:rgb(var(--neeto-ui-accent-800))!important}.neeto-editor-table-bubble-menu__dropdown .neeto-ui-dropdown__popup{min-width:auto}.neeto-editor-table-bubble-menu__dropdown .neeto-ui-dropdown__popup .neeto-ui-dropdown__popup-menu{--neeto-ui-btn-border-radius:0;padding:0}.neeto-editor-fixed-menu-standalone-variables-wrapper{position:relative}";
3376
+ injectCss.n(css,{});
3377
+
3378
+ 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; }
3379
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty__default.default(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; }
3380
+ var Menu = function Menu(props) {
3381
+ var _useState = React.useState(false),
3382
+ _useState2 = _slicedToArray__default.default(_useState, 2),
3383
+ isEmojiPickerActive = _useState2[0],
3384
+ setIsEmojiPickerActive = _useState2[1];
3385
+ var _useState3 = React.useState({
3386
+ image: false,
3387
+ video: false
3388
+ }),
3389
+ _useState4 = _slicedToArray__default.default(_useState3, 2),
3390
+ mediaUploader = _useState4[0],
3391
+ setMediaUploader = _useState4[1];
3392
+ var _props$menuType = props.menuType,
3393
+ menuType = _props$menuType === void 0 ? "fixed" : _props$menuType,
3394
+ _props$addons = props.addons,
3395
+ addons = _props$addons === void 0 ? [] : _props$addons,
3396
+ _props$options = props.options,
3397
+ options = _props$options === void 0 ? [] : _props$options,
3398
+ _props$editorSecrets = props.editorSecrets,
3399
+ editorSecrets = _props$editorSecrets === void 0 ? {} : _props$editorSecrets,
3400
+ attachmentProps = props.attachmentProps,
3401
+ _props$defaults = props.defaults,
3402
+ defaults = _props$defaults === void 0 ? constants$1.DEFAULT_EDITOR_OPTIONS : _props$defaults;
3403
+ var MenuComponent = React.useMemo(function () {
3404
+ return MENU_COMPONENTS[menuType];
3405
+ }, [menuType]);
3406
+ var menuOptions = ramda.isEmpty(options) ? [].concat(_toConsumableArray__default.default(defaults), _toConsumableArray__default.default(addons)) : options;
3407
+ React.useEffect(function () {
3408
+ var handleKeyDown = function handleKeyDown(e) {
3409
+ if ((e.metaKey || e.ctrlKey) && e.altKey) {
3410
+ if (e.code === "KeyE") {
3411
+ setIsEmojiPickerActive(function (prevState) {
3412
+ return !prevState;
3413
+ });
3414
+ } else if (e.code === "KeyA") {
3415
+ ramda.not(attachmentProps === null || attachmentProps === void 0 ? void 0 : attachmentProps.isDisabled) && (attachmentProps === null || attachmentProps === void 0 ? void 0 : attachmentProps.handleUploadAttachments());
3416
+ } else if (e.code === "KeyK") {
3417
+ setMediaUploader(ramda.assoc("image", true));
3418
+ } else if (e.code === "KeyV") {
3419
+ setMediaUploader(ramda.assoc("video", true));
3420
+ }
3421
+ }
3422
+ };
3423
+ if (menuType !== "none") {
3424
+ document.addEventListener("keydown", handleKeyDown);
3425
+ }
3426
+ return function () {
3427
+ document.removeEventListener("keydown", handleKeyDown);
3428
+ };
3429
+ }, []);
3430
+ return /*#__PURE__*/jsxRuntime.jsx(MenuComponent, _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({}, props), {}, {
3431
+ attachmentProps: attachmentProps,
3432
+ isEmojiPickerActive: isEmojiPickerActive,
3433
+ mediaUploader: mediaUploader,
3434
+ setIsEmojiPickerActive: setIsEmojiPickerActive,
3435
+ setMediaUploader: setMediaUploader
3436
+ })), {}, {
3437
+ options: menuOptions,
3438
+ unsplashApiKey: editorSecrets.unsplash
3439
+ }));
3440
+ };
3441
+
3442
+ exports.CALLOUT_TYPES = CALLOUT_TYPES;
3443
+ exports.EmojiPickerMenu = EmojiPickerMenu;
3444
+ exports.LinkAddPopOver = LinkAddPopOver;
3445
+ exports.MediaUploader = MediaUploader;
3446
+ exports.Menu = Menu;
3447
+ exports.MenuDynamicVariables = MenuDynamicVariables;
3448
+ exports.getLinkPopoverPosition = getLinkPopoverPosition;
3449
+ exports.validateUrl = validateUrl;
3450
+ //# sourceMappingURL=chunk-BlWQNLLE.cjs.js.map