@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,421 @@
1
+ 'use strict';
2
+
3
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
4
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
6
+ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
7
+ var _regeneratorRuntime = require('@babel/runtime/regenerator');
8
+ var shallow = require('zustand/shallow');
9
+ var React = require('react');
10
+ var neetoAtoms = require('@bigbinary/neeto-atoms');
11
+ var axios = require('axios');
12
+ var neetoCist = require('@bigbinary/neeto-cist');
13
+ var ramda = require('ramda');
14
+ var reactI18next = require('react-i18next');
15
+ var reactFileIcon_esm = require('./chunk-D3Unocnm.cjs.js');
16
+ var i18n = require('i18next');
17
+ var initializers = require('@bigbinary/neeto-commons-frontend/v2/initializers');
18
+ var constants = require('./chunk-Bmjmsp-E.cjs.js');
19
+ require('@bigbinary/neeto-icons/LeftAlign');
20
+ require('@bigbinary/neeto-icons/CenterAlign');
21
+ require('@bigbinary/neeto-icons/RightAlign');
22
+ require('@bigbinary/neeto-icons/Delete');
23
+ require('@bigbinary/neeto-icons/CustomSize');
24
+ require('@bigbinary/neeto-icons/BorderDisable');
25
+ require('@bigbinary/neeto-icons/BorderEnable');
26
+ require('@bigbinary/neeto-icons/AspectRatio11');
27
+ require('@bigbinary/neeto-icons/AspectRatio169');
28
+ require('@bigbinary/neeto-icons/AspectRatio916');
29
+ require('@bigbinary/neeto-icons/AspectRatio43');
30
+ require('@bigbinary/neeto-icons/AspectRatio32');
31
+ var yup = require('yup');
32
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
33
+ var jsxRuntime = require('react/jsx-runtime');
34
+
35
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
36
+
37
+ function _interopNamespace(e) {
38
+ if (e && e.__esModule) return e;
39
+ var n = Object.create(null);
40
+ if (e) {
41
+ Object.keys(e).forEach(function (k) {
42
+ if (k !== 'default') {
43
+ var d = Object.getOwnPropertyDescriptor(e, k);
44
+ Object.defineProperty(n, k, d.get ? d : {
45
+ enumerable: true,
46
+ get: function () { return e[k]; }
47
+ });
48
+ }
49
+ });
50
+ }
51
+ n.default = e;
52
+ return Object.freeze(n);
53
+ }
54
+
55
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefault(_toConsumableArray);
56
+ var _slicedToArray__default = /*#__PURE__*/_interopDefault(_slicedToArray);
57
+ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefault(_objectWithoutProperties);
58
+ var _asyncToGenerator__default = /*#__PURE__*/_interopDefault(_asyncToGenerator);
59
+ var _regeneratorRuntime__default = /*#__PURE__*/_interopDefault(_regeneratorRuntime);
60
+ var axios__default = /*#__PURE__*/_interopDefault(axios);
61
+ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
62
+ var _defineProperty__default = /*#__PURE__*/_interopDefault(_defineProperty);
63
+
64
+ var DEFAULT_FILE_UPLOAD_CONFIG = {
65
+ directUploadEndpoint: constants.DIRECT_UPLOAD_ENDPOINT,
66
+ restrictions: {
67
+ maxFileSize: initializers.globalProps.endUserUploadedFileSizeLimitInMb * 1024 * 1024
68
+ }
69
+ };
70
+ var ATTACHMENT_OPTIONS = {
71
+ OPEN_IN_NEW_TAB: i18n.t("neetoEditor.common.openInNewTab"),
72
+ DOWNLOAD: i18n.t("neetoEditor.common.download"),
73
+ RENAME: i18n.t("neetoEditor.attachments.rename"),
74
+ DELETE: i18n.t("neetoEditor.menu.delete")
75
+ };
76
+ var ATTACHMENTS_PREVIEW_DATA_CY = "ne-attachments-preview-content";
77
+
78
+ var MAX_VIDEO_SIZE_IN_MB = 100;
79
+ var maxVideoSizeInMb = initializers.globalProps.directUploadsMaxFileSizeInMb ? Math.min(MAX_VIDEO_SIZE_IN_MB, initializers.globalProps.directUploadsMaxFileSizeInMb) : MAX_VIDEO_SIZE_IN_MB;
80
+ var FILE_SIZE_UNITS = ["B", "KB", "MB", "GB"];
81
+ var ALLOWED_IMAGE_TYPES = [".jpg", ".jpeg", ".png", ".gif"];
82
+ var ALLOWED_VIDEO_TYPES = [".mp4", ".mov", ".avi", ".mkv"];
83
+ var DEFAULT_IMAGE_UPLOAD_CONFIG = {
84
+ directUploadEndpoint: constants.DIRECT_UPLOAD_ENDPOINT,
85
+ restrictions: {
86
+ maxNumberOfFiles: 5,
87
+ maxFileSize: initializers.globalProps.endUserUploadedFileSizeLimitInMb * 1024 * 1024,
88
+ allowedFileTypes: ALLOWED_IMAGE_TYPES
89
+ }
90
+ };
91
+ var DEFAULT_VIDEO_UPLOAD_CONFIG = {
92
+ directUploadEndpoint: constants.DIRECT_UPLOAD_ENDPOINT,
93
+ restrictions: {
94
+ maxNumberOfFiles: 5,
95
+ maxFileSize: maxVideoSizeInMb * 1024 * 1024,
96
+ allowedFileTypes: ALLOWED_VIDEO_TYPES
97
+ }
98
+ };
99
+ var VIDEO_EMBED_FORM_VALIDATION_SCHEMA = yup__namespace.object().shape({
100
+ url: yup__namespace.string().required(i18n.t("neetoEditor.error.fieldRequired")).matches(constants.URL_REGEXP, i18n.t("neetoEditor.error.invalidUrl"))
101
+ });
102
+ var DEFAULT_ASPECT_RATIO = "16/9";
103
+
104
+ var convertToFileSize = function convertToFileSize() {
105
+ var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10 * 1024 * 1024;
106
+ var fileSize = size;
107
+ var i = 0;
108
+ while (fileSize >= 1024 && i < FILE_SIZE_UNITS.length) {
109
+ fileSize /= 1024;
110
+ ++i;
111
+ }
112
+ return "".concat(fileSize.toFixed(1), " ").concat(FILE_SIZE_UNITS[i]);
113
+ };
114
+ var getTabs = function getTabs(mediaUploader) {
115
+ if (mediaUploader.video) {
116
+ return [{
117
+ title: "Upload",
118
+ key: "local"
119
+ }, {
120
+ title: "Embed",
121
+ key: "embed"
122
+ }];
123
+ }
124
+ return [];
125
+ };
126
+
127
+ var getFileExtension = function getFileExtension(filename) {
128
+ if (!filename) return "";
129
+ var parts = filename.split(".");
130
+ return parts.length > 1 ? ".".concat(parts.pop()) : "";
131
+ };
132
+ var showWarningToastr = function showWarningToastr(_ref) {
133
+ var selectedFiles = _ref.selectedFiles,
134
+ initialFiles = _ref.initialFiles,
135
+ config = _ref.config,
136
+ largeFilesCount = _ref.largeFilesCount,
137
+ unSupportedFilesCount = _ref.unSupportedFilesCount;
138
+ var _config$restrictions = config.restrictions,
139
+ maxNumberOfFiles = _config$restrictions.maxNumberOfFiles,
140
+ maxFileSize = _config$restrictions.maxFileSize;
141
+ if (unSupportedFilesCount > 0 || largeFilesCount > 0) {
142
+ if (unSupportedFilesCount > 0) {
143
+ neetoAtoms.Toastr.error(i18n.t("neetoEditor.error.fileNotAllowed"));
144
+ }
145
+ if (largeFilesCount > 0) {
146
+ neetoAtoms.Toastr.error(i18n.t("neetoEditor.error.fileIsTooLarge", {
147
+ maxFileSize: convertToFileSize(maxFileSize)
148
+ }));
149
+ }
150
+ } else if (selectedFiles.length < initialFiles.length) {
151
+ neetoAtoms.Toastr.warning(i18n.t("neetoEditor.attachments.maxNumberOfFiles", {
152
+ entity: maxNumberOfFiles
153
+ }));
154
+ }
155
+ };
156
+ var shouldAddFile = function shouldAddFile(config) {
157
+ return function (file) {
158
+ var _config$restrictions2 = config.restrictions,
159
+ maxFileSize = _config$restrictions2.maxFileSize,
160
+ allowedFileTypes = _config$restrictions2.allowedFileTypes;
161
+ if (neetoCist.isPresent(maxFileSize) && file.size > maxFileSize) {
162
+ return {
163
+ canAdd: false
164
+ };
165
+ }
166
+ if (neetoCist.isPresent(allowedFileTypes)) {
167
+ var fileExtension = getFileExtension(file.name);
168
+ var mimeType = file.type;
169
+ var extensionAllowed = allowedFileTypes.includes(fileExtension);
170
+ var mimeAllowed = allowedFileTypes.includes(mimeType);
171
+ var canAdd = extensionAllowed || mimeAllowed;
172
+ return {
173
+ canAdd: canAdd,
174
+ isUnsupportedFile: !canAdd
175
+ };
176
+ }
177
+ return {
178
+ canAdd: true
179
+ };
180
+ };
181
+ };
182
+ var selectFiles = function selectFiles(_ref2) {
183
+ var previousAttachmentsCount = _ref2.previousAttachmentsCount,
184
+ config = _ref2.config,
185
+ files = _ref2.files;
186
+ var addedFilesCount = 0,
187
+ largeFilesCount = 0,
188
+ unSupportedFilesCount = 0;
189
+ var fallbackMaxNumberOfFiles = previousAttachmentsCount + files.length;
190
+ var _config$restrictions$ = config.restrictions.maxNumberOfFiles,
191
+ maxNumberOfFiles = _config$restrictions$ === void 0 ? fallbackMaxNumberOfFiles : _config$restrictions$;
192
+ var canAddFile = shouldAddFile(config);
193
+ var remainingAttachments = maxNumberOfFiles - previousAttachmentsCount;
194
+ if (remainingAttachments <= 0) {
195
+ neetoAtoms.Toastr.warning(i18n.t("neetoEditor.attachments.maxNumberOfFiles", {
196
+ entity: maxNumberOfFiles
197
+ }));
198
+ return [];
199
+ }
200
+ var selectedFiles = files.filter(function (file) {
201
+ var _canAddFile = canAddFile(file),
202
+ canAdd = _canAddFile.canAdd,
203
+ isUnsupportedFile = _canAddFile.isUnsupportedFile;
204
+ if (canAdd && addedFilesCount + 1 <= remainingAttachments) {
205
+ addedFilesCount += 1;
206
+ return true;
207
+ }
208
+ if (isUnsupportedFile) unSupportedFilesCount += 1;else if (!canAdd) largeFilesCount += 1;
209
+ return false;
210
+ });
211
+ showWarningToastr({
212
+ selectedFiles: selectedFiles,
213
+ initialFiles: files,
214
+ config: config,
215
+ unSupportedFilesCount: unSupportedFilesCount,
216
+ largeFilesCount: largeFilesCount
217
+ });
218
+ return selectedFiles;
219
+ };
220
+
221
+ var _excluded = ["data"];
222
+ var uploadControllers = {};
223
+ var useFileUploader = function useFileUploader(_ref) {
224
+ var config = _ref.config,
225
+ _ref$attachments = _ref.attachments,
226
+ previousAttachments = _ref$attachments === void 0 ? [] : _ref$attachments,
227
+ _ref$setIsUploadingOn = _ref.setIsUploadingOnHost,
228
+ setIsUploadingOnHost = _ref$setIsUploadingOn === void 0 ? neetoCist.noop : _ref$setIsUploadingOn;
229
+ var contextIdRef = React.useRef(reactFileIcon_esm.getRandomString());
230
+ var _useTranslation = reactI18next.useTranslation(),
231
+ t = _useTranslation.t;
232
+ var contextId = contextIdRef.current;
233
+ var _useFileUploadStore = reactFileIcon_esm.useFileUploadStore(function (store) {
234
+ return {
235
+ addFiles: store["addFiles"],
236
+ getNextQueuedFile: store["getNextQueuedFile"],
237
+ updateFileStatus: store["updateFileStatus"],
238
+ removeFilesFromQueue: store["removeFilesFromQueue"],
239
+ setIsUploading: store["setIsUploading"],
240
+ updateFileUploadProgress: store["updateFileUploadProgress"],
241
+ removeFile: store["removeFile"]
242
+ };
243
+ }, shallow.shallow),
244
+ addFilesToStore = _useFileUploadStore.addFiles,
245
+ getNextQueuedFile = _useFileUploadStore.getNextQueuedFile,
246
+ updateFileStatus = _useFileUploadStore.updateFileStatus,
247
+ removeFilesFromQueue = _useFileUploadStore.removeFilesFromQueue,
248
+ setIsUploading = _useFileUploadStore.setIsUploading,
249
+ updateFileUploadProgress = _useFileUploadStore.updateFileUploadProgress,
250
+ removeFile = _useFileUploadStore.removeFile;
251
+ var _useFileUploadStore2 = reactFileIcon_esm.useFileUploadStore(function (store) {
252
+ var _store$contextId, _store$contextId2;
253
+ return {
254
+ files: (_store$contextId = store[contextId]) === null || _store$contextId === void 0 ? void 0 : _store$contextId["files"],
255
+ isUploading: (_store$contextId2 = store[contextId]) === null || _store$contextId2 === void 0 ? void 0 : _store$contextId2["isUploading"]
256
+ };
257
+ }, shallow.shallow),
258
+ _useFileUploadStore2$ = _useFileUploadStore2.files,
259
+ files = _useFileUploadStore2$ === void 0 ? [] : _useFileUploadStore2$,
260
+ isUploading = _useFileUploadStore2.isUploading;
261
+ var handleUploadProgress = function handleUploadProgress(xhr, file) {
262
+ if (!xhr.event.lengthComputable) return;
263
+ var bytesUploaded = xhr.loaded;
264
+ var bytesTotal = xhr.total;
265
+ var progress = Math.round(bytesUploaded / bytesTotal * 100);
266
+ updateFileUploadProgress(contextId, file.id, progress);
267
+ };
268
+ var uploadFile = /*#__PURE__*/function () {
269
+ var _ref2 = _asyncToGenerator__default.default(/*#__PURE__*/_regeneratorRuntime__default.default.mark(function _callee(file) {
270
+ var upload, _data$signed_id, _data$blob_url, _data$content_type, _yield$upload$create, _yield$upload$create$, data, response;
271
+ return _regeneratorRuntime__default.default.wrap(function _callee$(_context) {
272
+ while (1) switch (_context.prev = _context.next) {
273
+ case 0:
274
+ upload = new reactFileIcon_esm.DirectUpload({
275
+ file: file.data,
276
+ url: config.directUploadEndpoint,
277
+ progress: function progress(xhr) {
278
+ return handleUploadProgress(xhr, file);
279
+ }
280
+ });
281
+ uploadControllers[file.id] = upload;
282
+ _context.prev = 2;
283
+ _context.next = 5;
284
+ return upload.create();
285
+ case 5:
286
+ _yield$upload$create = _context.sent;
287
+ _yield$upload$create$ = _yield$upload$create.data;
288
+ data = _yield$upload$create$ === void 0 ? {} : _yield$upload$create$;
289
+ response = _objectWithoutProperties__default.default(_yield$upload$create, _excluded);
290
+ updateFileStatus(contextId, file.id, reactFileIcon_esm.FILE_UPLOAD_STATUS.UPLOADED);
291
+ return _context.abrupt("return", {
292
+ id: file.id,
293
+ filename: file.filename,
294
+ signedId: (_data$signed_id = data.signed_id) !== null && _data$signed_id !== void 0 ? _data$signed_id : response.signed_id,
295
+ url: (_data$blob_url = data.blob_url) !== null && _data$blob_url !== void 0 ? _data$blob_url : response.blob_url,
296
+ contentType: (_data$content_type = data.content_type) !== null && _data$content_type !== void 0 ? _data$content_type : response.content_type
297
+ });
298
+ case 13:
299
+ _context.prev = 13;
300
+ _context.t0 = _context["catch"](2);
301
+ if (!axios__default.default.isCancel(_context.t0)) {
302
+ neetoAtoms.Toastr.error(t("neetoEditor.error.uploadFileFailed"));
303
+ }
304
+ // eslint-disable-next-line no-console
305
+ console.error("Attachment upload failed", _context.t0);
306
+ removeFile(contextId, file.id);
307
+ return _context.abrupt("return", null);
308
+ case 19:
309
+ case "end":
310
+ return _context.stop();
311
+ }
312
+ }, _callee, null, [[2, 13]]);
313
+ }));
314
+ return function uploadFile(_x) {
315
+ return _ref2.apply(this, arguments);
316
+ };
317
+ }();
318
+ var _handleUploadFiles = /*#__PURE__*/function () {
319
+ var _ref3 = _asyncToGenerator__default.default(/*#__PURE__*/_regeneratorRuntime__default.default.mark(function _callee2() {
320
+ var queuedFile, _yield$Promise$all, _yield$Promise$all2, uploadedFile, remainingUploadedFiles, uploadedFiles, uploadedFileIds;
321
+ return _regeneratorRuntime__default.default.wrap(function _callee2$(_context2) {
322
+ while (1) switch (_context2.prev = _context2.next) {
323
+ case 0:
324
+ queuedFile = getNextQueuedFile(contextId);
325
+ if (!neetoCist.isNotPresent(queuedFile)) {
326
+ _context2.next = 5;
327
+ break;
328
+ }
329
+ setIsUploading(contextId, false);
330
+ setIsUploadingOnHost(false);
331
+ return _context2.abrupt("return", []);
332
+ case 5:
333
+ updateFileStatus(contextId, queuedFile.id, reactFileIcon_esm.FILE_UPLOAD_STATUS.UPLOADING);
334
+ _context2.next = 8;
335
+ return Promise.all([uploadFile(queuedFile), _handleUploadFiles()]);
336
+ case 8:
337
+ _yield$Promise$all = _context2.sent;
338
+ _yield$Promise$all2 = _slicedToArray__default.default(_yield$Promise$all, 2);
339
+ uploadedFile = _yield$Promise$all2[0];
340
+ remainingUploadedFiles = _yield$Promise$all2[1];
341
+ uploadedFiles = [uploadedFile].concat(_toConsumableArray__default.default(remainingUploadedFiles));
342
+ uploadedFileIds = ramda.pluck("id", uploadedFiles);
343
+ removeFilesFromQueue(contextId, uploadedFileIds);
344
+ uploadControllers = ramda.omit(uploadedFileIds, uploadControllers);
345
+ return _context2.abrupt("return", uploadedFiles.filter(neetoCist.isNot(null)));
346
+ case 17:
347
+ case "end":
348
+ return _context2.stop();
349
+ }
350
+ }, _callee2);
351
+ }));
352
+ return function handleUploadFiles() {
353
+ return _ref3.apply(this, arguments);
354
+ };
355
+ }();
356
+ var uploadFiles = function uploadFiles() {
357
+ setIsUploading(contextId, true);
358
+ setIsUploadingOnHost(true);
359
+ return _handleUploadFiles();
360
+ };
361
+ var addFiles = function addFiles(addedFiles) {
362
+ var selectedFiles = selectFiles({
363
+ previousAttachmentsCount: previousAttachments.length,
364
+ config: config,
365
+ files: Array.from(addedFiles)
366
+ }).map(function (file) {
367
+ return {
368
+ id: neetoCist.hyphenate("".concat(file.name.toLowerCase(), "-").concat(Date.now())),
369
+ data: file,
370
+ filename: file.name,
371
+ signedId: "awaiting",
372
+ url: "",
373
+ type: file.type,
374
+ status: reactFileIcon_esm.FILE_UPLOAD_STATUS.QUEUED
375
+ };
376
+ });
377
+ addFilesToStore(contextId, selectedFiles);
378
+ };
379
+ var cancelUpload = function cancelUpload(fileId) {
380
+ var _uploadControllers$fi, _uploadControllers$fi2;
381
+ (_uploadControllers$fi = uploadControllers[fileId]) === null || _uploadControllers$fi === void 0 || (_uploadControllers$fi2 = _uploadControllers$fi.abort) === null || _uploadControllers$fi2 === void 0 || _uploadControllers$fi2.call(_uploadControllers$fi);
382
+ removeFile(contextId, fileId);
383
+ };
384
+ return {
385
+ addFiles: addFiles,
386
+ uploadFiles: uploadFiles,
387
+ queuedFiles: files,
388
+ cancelUpload: cancelUpload,
389
+ isUploading: isUploading
390
+ };
391
+ };
392
+
393
+ 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; }
394
+ 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; }
395
+ var File = function File(_ref) {
396
+ var fileName = _ref.fileName,
397
+ className = _ref.className;
398
+ var extension = fileName.match(/([^.]+)$/) & [1];
399
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
400
+ className: className,
401
+ children: /*#__PURE__*/jsxRuntime.jsx(reactFileIcon_esm.FileIcon, _objectSpread({
402
+ extension: extension,
403
+ labelColor: "#4558f9"
404
+ }, reactFileIcon_esm.defaultStyles[extension]))
405
+ });
406
+ };
407
+
408
+ exports.ALLOWED_IMAGE_TYPES = ALLOWED_IMAGE_TYPES;
409
+ exports.ALLOWED_VIDEO_TYPES = ALLOWED_VIDEO_TYPES;
410
+ exports.ATTACHMENTS_PREVIEW_DATA_CY = ATTACHMENTS_PREVIEW_DATA_CY;
411
+ exports.ATTACHMENT_OPTIONS = ATTACHMENT_OPTIONS;
412
+ exports.DEFAULT_ASPECT_RATIO = DEFAULT_ASPECT_RATIO;
413
+ exports.DEFAULT_FILE_UPLOAD_CONFIG = DEFAULT_FILE_UPLOAD_CONFIG;
414
+ exports.DEFAULT_IMAGE_UPLOAD_CONFIG = DEFAULT_IMAGE_UPLOAD_CONFIG;
415
+ exports.DEFAULT_VIDEO_UPLOAD_CONFIG = DEFAULT_VIDEO_UPLOAD_CONFIG;
416
+ exports.File = File;
417
+ exports.VIDEO_EMBED_FORM_VALIDATION_SCHEMA = VIDEO_EMBED_FORM_VALIDATION_SCHEMA;
418
+ exports.convertToFileSize = convertToFileSize;
419
+ exports.getTabs = getTabs;
420
+ exports.useFileUploader = useFileUploader;
421
+ //# sourceMappingURL=chunk-D6ygkQBu.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-D6ygkQBu.cjs.js","sources":["../../app/javascript/src/v2/components/Attachments/constants.js","../../app/javascript/src/v2/components/Editor/MediaUploader/constants.js","../../app/javascript/src/v2/components/Editor/MediaUploader/utils.js","../../app/javascript/src/v2/hooks/utils/fileUploader.js","../../app/javascript/src/v2/hooks/useFileUploader.js","../../app/javascript/src/v2/components/Common/FileIcon.jsx"],"sourcesContent":["import { t } from \"i18next\";\nimport { globalProps } from \"neetocommons/v2/initializers\";\n\nimport { DIRECT_UPLOAD_ENDPOINT } from \"src/common/constants\";\n\nexport const DEFAULT_FILE_UPLOAD_CONFIG = {\n directUploadEndpoint: DIRECT_UPLOAD_ENDPOINT,\n restrictions: {\n maxFileSize: globalProps.endUserUploadedFileSizeLimitInMb * 1024 * 1024,\n },\n};\n\nexport const ATTACHMENT_OPTIONS = {\n OPEN_IN_NEW_TAB: t(\"neetoEditor.common.openInNewTab\"),\n DOWNLOAD: t(\"neetoEditor.common.download\"),\n RENAME: t(\"neetoEditor.attachments.rename\"),\n DELETE: t(\"neetoEditor.menu.delete\"),\n};\n\nexport const ATTACHMENTS_PREVIEW_DATA_CY = \"ne-attachments-preview-content\";\n","import { t } from \"i18next\";\nimport { globalProps } from \"neetocommons/v2/initializers\";\nimport * as yup from \"yup\";\n\nimport { DIRECT_UPLOAD_ENDPOINT, URL_REGEXP } from \"src/common/constants\";\n\nconst MAX_VIDEO_SIZE_IN_MB = 100;\n\nconst maxVideoSizeInMb = globalProps.directUploadsMaxFileSizeInMb\n ? Math.min(MAX_VIDEO_SIZE_IN_MB, globalProps.directUploadsMaxFileSizeInMb)\n : MAX_VIDEO_SIZE_IN_MB;\n\nexport const FILE_SIZE_UNITS = [\"B\", \"KB\", \"MB\", \"GB\"];\n\nexport const ALLOWED_IMAGE_TYPES = [\".jpg\", \".jpeg\", \".png\", \".gif\"];\nexport const ALLOWED_VIDEO_TYPES = [\".mp4\", \".mov\", \".avi\", \".mkv\"];\n\nexport const DEFAULT_IMAGE_UPLOAD_CONFIG = {\n directUploadEndpoint: DIRECT_UPLOAD_ENDPOINT,\n restrictions: {\n maxNumberOfFiles: 5,\n maxFileSize: globalProps.endUserUploadedFileSizeLimitInMb * 1024 * 1024,\n allowedFileTypes: ALLOWED_IMAGE_TYPES,\n },\n};\n\nexport const DEFAULT_VIDEO_UPLOAD_CONFIG = {\n directUploadEndpoint: DIRECT_UPLOAD_ENDPOINT,\n restrictions: {\n maxNumberOfFiles: 5,\n maxFileSize: maxVideoSizeInMb * 1024 * 1024,\n allowedFileTypes: ALLOWED_VIDEO_TYPES,\n },\n};\n\nexport const VIDEO_EMBED_FORM_VALIDATION_SCHEMA = yup.object().shape({\n url: yup\n .string()\n .required(t(\"neetoEditor.error.fieldRequired\"))\n .matches(URL_REGEXP, t(\"neetoEditor.error.invalidUrl\")),\n});\n\nexport const DEFAULT_ASPECT_RATIO = \"16/9\";\n","import { t } from \"i18next\";\nimport {\n LeftAlign,\n CenterAlign,\n RightAlign,\n Delete,\n CustomSize,\n BorderDisable,\n BorderEnable,\n AspectRatio11,\n AspectRatio169,\n AspectRatio916,\n AspectRatio43,\n AspectRatio32,\n} from \"neetoicons\";\n\nimport { FILE_SIZE_UNITS } from \"./constants\";\n\nexport const convertToFileSize = (size = 10 * 1024 * 1024) => {\n let fileSize = size;\n let i = 0;\n while (fileSize >= 1024 && i < FILE_SIZE_UNITS.length) {\n fileSize /= 1024;\n ++i;\n }\n\n return `${fileSize.toFixed(1)} ${FILE_SIZE_UNITS[i]}`;\n};\n\nexport const buildImageOptions = (border = true, showAspectRatio = false) => {\n const options = [\n {\n Icon: LeftAlign,\n type: \"button\",\n alignPos: \"left\",\n optionName: t(\"neetoEditor.menu.alignLeft\"),\n },\n {\n Icon: CenterAlign,\n type: \"button\",\n alignPos: \"center\",\n optionName: t(\"neetoEditor.menu.alignCenter\"),\n },\n {\n Icon: RightAlign,\n type: \"button\",\n alignPos: \"right\",\n optionName: t(\"neetoEditor.menu.alignRight\"),\n },\n ];\n\n if (showAspectRatio) {\n options.push({\n Icon: CustomSize,\n type: \"dropdown\",\n alignPos: \"center\",\n optionName: t(\"neetoEditor.menu.aspectRatio\"),\n items: [\n { ratio: \"16/9\", tooltipLabel: \"16/9\", icon: AspectRatio169 },\n { ratio: \"9/16\", tooltipLabel: \"9/16\", icon: AspectRatio916 },\n { ratio: \"4/3\", tooltipLabel: \"4/3\", icon: AspectRatio43 },\n { ratio: \"3/2\", tooltipLabel: \"3/2\", icon: AspectRatio32 },\n { ratio: \"1/1\", tooltipLabel: \"1/1\", icon: AspectRatio11 },\n ],\n });\n }\n\n options.push(\n {\n Icon: border ? BorderDisable : BorderEnable,\n type: \"button\",\n alignPos: \"center\",\n borderToggle: true,\n optionName: border\n ? t(\"neetoEditor.menu.removeBorder\")\n : t(\"neetoEditor.menu.addBorder\"),\n },\n {\n Icon: Delete,\n type: \"button\",\n optionName: t(\"neetoEditor.menu.delete\"),\n }\n );\n\n return options;\n};\n\nexport const getTabs = mediaUploader => {\n if (mediaUploader.video) {\n return [\n { title: \"Upload\", key: \"local\" },\n { title: \"Embed\", key: \"embed\" },\n ];\n }\n\n return [];\n};\n","import { Toastr } from \"@bigbinary/neeto-atoms\";\nimport { t } from \"i18next\";\nimport { isPresent } from \"neetocist\";\nimport { mergeRight } from \"ramda\";\n\nimport { DEFAULT_FILE_UPLOAD_CONFIG } from \"src/v2/components/Attachments/constants\";\nimport { convertToFileSize } from \"src/v2/components/Editor/MediaUploader/utils\";\n\nconst getFileExtension = filename => {\n if (!filename) return \"\";\n const parts = filename.split(\".\");\n\n return parts.length > 1 ? `.${parts.pop()}` : \"\";\n};\n\nconst showWarningToastr = ({\n selectedFiles,\n initialFiles,\n config,\n largeFilesCount,\n unSupportedFilesCount,\n}) => {\n const { maxNumberOfFiles, maxFileSize } = config.restrictions;\n\n if (unSupportedFilesCount > 0 || largeFilesCount > 0) {\n if (unSupportedFilesCount > 0) {\n Toastr.error(t(\"neetoEditor.error.fileNotAllowed\"));\n }\n\n if (largeFilesCount > 0) {\n Toastr.error(\n t(\"neetoEditor.error.fileIsTooLarge\", {\n maxFileSize: convertToFileSize(maxFileSize),\n })\n );\n }\n } else if (selectedFiles.length < initialFiles.length) {\n Toastr.warning(\n t(\"neetoEditor.attachments.maxNumberOfFiles\", {\n entity: maxNumberOfFiles,\n })\n );\n }\n};\n\nexport const buildFileUploadConfig = config =>\n mergeRight(DEFAULT_FILE_UPLOAD_CONFIG, config);\n\nexport const shouldAddFile = config => file => {\n const { maxFileSize, allowedFileTypes } = config.restrictions;\n\n if (isPresent(maxFileSize) && file.size > maxFileSize) {\n return { canAdd: false };\n }\n\n if (isPresent(allowedFileTypes)) {\n const fileExtension = getFileExtension(file.name);\n const mimeType = file.type;\n\n const extensionAllowed = allowedFileTypes.includes(fileExtension);\n const mimeAllowed = allowedFileTypes.includes(mimeType);\n\n const canAdd = extensionAllowed || mimeAllowed;\n\n return { canAdd, isUnsupportedFile: !canAdd };\n }\n\n return { canAdd: true };\n};\n\nexport const selectFiles = ({ previousAttachmentsCount, config, files }) => {\n let addedFilesCount = 0,\n largeFilesCount = 0,\n unSupportedFilesCount = 0;\n const fallbackMaxNumberOfFiles = previousAttachmentsCount + files.length;\n const { maxNumberOfFiles = fallbackMaxNumberOfFiles } = config.restrictions;\n const canAddFile = shouldAddFile(config);\n\n const remainingAttachments = maxNumberOfFiles - previousAttachmentsCount;\n\n if (remainingAttachments <= 0) {\n Toastr.warning(\n t(\"neetoEditor.attachments.maxNumberOfFiles\", {\n entity: maxNumberOfFiles,\n })\n );\n\n return [];\n }\n\n const selectedFiles = files.filter(file => {\n const { canAdd, isUnsupportedFile } = canAddFile(file);\n\n if (canAdd && addedFilesCount + 1 <= remainingAttachments) {\n addedFilesCount += 1;\n\n return true;\n }\n\n if (isUnsupportedFile) unSupportedFilesCount += 1;\n else if (!canAdd) largeFilesCount += 1;\n\n return false;\n });\n\n showWarningToastr({\n selectedFiles,\n initialFiles: files,\n config,\n unSupportedFilesCount,\n largeFilesCount,\n });\n\n return selectedFiles;\n};\n","// eslint-disable-next-line @bigbinary/neeto/use-snake-case-for-api-connector-filename\nimport { useRef } from \"react\";\n\nimport { Toastr } from \"@bigbinary/neeto-atoms\";\n// eslint-disable-next-line @bigbinary/neeto/no-axios-import-outside-apis,\nimport axios from \"axios\";\nimport { noop, hyphenate, isNot, isNotPresent } from \"neetocist\";\nimport { omit, pluck } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { FILE_UPLOAD_STATUS } from \"hooks/constants/fileUploader\";\nimport { getRandomString } from \"hooks/utils\";\nimport useFileUploadStore from \"src/stores/useFileUploadStore\";\nimport DirectUpload from \"utils/DirectUpload\";\n\nimport { selectFiles } from \"./utils/fileUploader\";\n\nlet uploadControllers = {};\n\nconst useFileUploader = ({\n config,\n attachments: previousAttachments = [],\n setIsUploadingOnHost = noop,\n}) => {\n const contextIdRef = useRef(getRandomString());\n const { t } = useTranslation();\n\n const { current: contextId } = contextIdRef;\n const {\n addFiles: addFilesToStore,\n getNextQueuedFile,\n updateFileStatus,\n removeFilesFromQueue,\n setIsUploading,\n updateFileUploadProgress,\n removeFile,\n } = useFileUploadStore.pick();\n const { files = [], isUploading } = useFileUploadStore.pick([contextId]);\n\n const handleUploadProgress = (xhr, file) => {\n if (!xhr.event.lengthComputable) return;\n const bytesUploaded = xhr.loaded;\n const bytesTotal = xhr.total;\n const progress = Math.round((bytesUploaded / bytesTotal) * 100);\n updateFileUploadProgress(contextId, file.id, progress);\n };\n\n const uploadFile = async file => {\n const upload = new DirectUpload({\n file: file.data,\n url: config.directUploadEndpoint,\n progress: xhr => handleUploadProgress(xhr, file),\n });\n\n uploadControllers[file.id] = upload;\n\n try {\n const { data = {}, ...response } = await upload.create();\n updateFileStatus(contextId, file.id, FILE_UPLOAD_STATUS.UPLOADED);\n\n return {\n id: file.id,\n filename: file.filename,\n signedId: data.signed_id ?? response.signed_id,\n url: data.blob_url ?? response.blob_url,\n contentType: data.content_type ?? response.content_type,\n };\n } catch (error) {\n if (!axios.isCancel(error)) {\n Toastr.error(t(\"neetoEditor.error.uploadFileFailed\"));\n }\n // eslint-disable-next-line no-console\n console.error(\"Attachment upload failed\", error);\n removeFile(contextId, file.id);\n\n return null;\n }\n };\n\n const handleUploadFiles = async () => {\n const queuedFile = getNextQueuedFile(contextId);\n\n if (isNotPresent(queuedFile)) {\n setIsUploading(contextId, false);\n setIsUploadingOnHost(false);\n\n return [];\n }\n\n updateFileStatus(contextId, queuedFile.id, FILE_UPLOAD_STATUS.UPLOADING);\n\n const [uploadedFile, remainingUploadedFiles] = await Promise.all([\n uploadFile(queuedFile),\n handleUploadFiles(),\n ]);\n\n const uploadedFiles = [uploadedFile, ...remainingUploadedFiles];\n const uploadedFileIds = pluck(\"id\", uploadedFiles);\n removeFilesFromQueue(contextId, uploadedFileIds);\n uploadControllers = omit(uploadedFileIds, uploadControllers);\n\n return uploadedFiles.filter(isNot(null));\n };\n\n const uploadFiles = () => {\n setIsUploading(contextId, true);\n setIsUploadingOnHost(true);\n\n return handleUploadFiles();\n };\n\n const addFiles = addedFiles => {\n const selectedFiles = selectFiles({\n previousAttachmentsCount: previousAttachments.length,\n config,\n files: Array.from(addedFiles),\n }).map(file => ({\n id: hyphenate(`${file.name.toLowerCase()}-${Date.now()}`),\n data: file,\n filename: file.name,\n signedId: \"awaiting\",\n url: \"\",\n type: file.type,\n status: FILE_UPLOAD_STATUS.QUEUED,\n }));\n\n addFilesToStore(contextId, selectedFiles);\n };\n\n const cancelUpload = fileId => {\n uploadControllers[fileId]?.abort?.();\n removeFile(contextId, fileId);\n };\n\n return {\n addFiles,\n uploadFiles,\n queuedFiles: files,\n cancelUpload,\n isUploading,\n };\n};\n\nexport default useFileUploader;\n","import { FileIcon, defaultStyles } from \"react-file-icon\";\n\nconst File = ({ fileName, className }) => {\n const extension = fileName.match(/([^.]+)$/) & [1];\n\n return (\n <div {...{ className }}>\n <FileIcon\n {...{ extension }}\n labelColor=\"#4558f9\"\n {...defaultStyles[extension]}\n />\n </div>\n );\n};\n\nexport default File;\n"],"names":["DEFAULT_FILE_UPLOAD_CONFIG","directUploadEndpoint","DIRECT_UPLOAD_ENDPOINT","restrictions","maxFileSize","globalProps","endUserUploadedFileSizeLimitInMb","ATTACHMENT_OPTIONS","OPEN_IN_NEW_TAB","t","DOWNLOAD","RENAME","DELETE","ATTACHMENTS_PREVIEW_DATA_CY","MAX_VIDEO_SIZE_IN_MB","maxVideoSizeInMb","directUploadsMaxFileSizeInMb","Math","min","FILE_SIZE_UNITS","ALLOWED_IMAGE_TYPES","ALLOWED_VIDEO_TYPES","DEFAULT_IMAGE_UPLOAD_CONFIG","maxNumberOfFiles","allowedFileTypes","DEFAULT_VIDEO_UPLOAD_CONFIG","VIDEO_EMBED_FORM_VALIDATION_SCHEMA","yup","object","shape","url","string","required","matches","URL_REGEXP","DEFAULT_ASPECT_RATIO","convertToFileSize","size","arguments","length","undefined","fileSize","i","concat","toFixed","getTabs","mediaUploader","video","title","key","getFileExtension","filename","parts","split","pop","showWarningToastr","_ref","selectedFiles","initialFiles","config","largeFilesCount","unSupportedFilesCount","_config$restrictions","Toastr","error","warning","entity","shouldAddFile","file","_config$restrictions2","isPresent","canAdd","fileExtension","name","mimeType","type","extensionAllowed","includes","mimeAllowed","isUnsupportedFile","selectFiles","_ref2","previousAttachmentsCount","files","addedFilesCount","fallbackMaxNumberOfFiles","_config$restrictions$","canAddFile","remainingAttachments","filter","_canAddFile","uploadControllers","useFileUploader","_ref$attachments","attachments","previousAttachments","_ref$setIsUploadingOn","setIsUploadingOnHost","noop","contextIdRef","useRef","getRandomString","_useTranslation","useTranslation","contextId","current","_useFileUploadStore","useFileUploadStore","store","addFiles","getNextQueuedFile","updateFileStatus","removeFilesFromQueue","setIsUploading","updateFileUploadProgress","removeFile","shallow","addFilesToStore","_useFileUploadStore2","_store$contextId","_store$contextId2","isUploading","_useFileUploadStore2$","handleUploadProgress","xhr","event","lengthComputable","bytesUploaded","loaded","bytesTotal","total","progress","round","id","uploadFile","_asyncToGenerator","_regeneratorRuntime","mark","_callee","upload","_data$signed_id","_data$blob_url","_data$content_type","_yield$upload$create","_yield$upload$create$","data","response","wrap","_callee$","_context","prev","next","DirectUpload","create","sent","_objectWithoutProperties","_excluded","FILE_UPLOAD_STATUS","UPLOADED","abrupt","signedId","signed_id","blob_url","contentType","content_type","t0","axios","isCancel","console","stop","_x","apply","handleUploadFiles","_ref3","_callee2","queuedFile","_yield$Promise$all","_yield$Promise$all2","uploadedFile","remainingUploadedFiles","uploadedFiles","uploadedFileIds","_callee2$","_context2","isNotPresent","UPLOADING","Promise","all","_slicedToArray","_toConsumableArray","pluck","omit","isNot","uploadFiles","addedFiles","Array","from","map","hyphenate","toLowerCase","Date","now","status","QUEUED","cancelUpload","fileId","_uploadControllers$fi","_uploadControllers$fi2","abort","call","queuedFiles","File","fileName","className","extension","match","_jsx","children","FileIcon","_objectSpread","labelColor","defaultStyles"],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var index = require('./chunk-Crp27WMe.cjs.js');
5
+ var neetoCist = require('@bigbinary/neeto-cist');
6
+ var constants$1 = require('./chunk-Bmjmsp-E.cjs.js');
7
+ var constants = require('./chunk-CNIzgxEP.cjs.js');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var _defineProperty__default = /*#__PURE__*/_interopDefault(_defineProperty);
12
+
13
+ var getEditorStyles = function getEditorStyles(_ref) {
14
+ var rows = _ref.rows;
15
+ var editorHeight = rows * constants.EDITOR_LINE_HEIGHT + 2 * (constants.EDITOR_PADDING_SIZE + constants.EDITOR_BORDER_SIZE);
16
+ return "min-height: ".concat(editorHeight, "px;");
17
+ };
18
+ var clipboardTextParser = function clipboardTextParser(text, context) {
19
+ var nodes = [];
20
+ var blocks = text.split(/\n/);
21
+ blocks.forEach(function (line) {
22
+ var nodeJson = {
23
+ type: "paragraph"
24
+ };
25
+ if (neetoCist.isNotEmpty(line)) {
26
+ nodeJson.content = [{
27
+ type: "text",
28
+ text: line
29
+ }];
30
+ }
31
+ var node = index.Node.fromJSON(context.doc.type.schema, nodeJson);
32
+ nodes.push(node);
33
+ });
34
+ var fragment = index.Fragment.fromArray(nodes);
35
+ return index.Slice.maxOpen(fragment);
36
+ };
37
+ var setInitialPosition = function setInitialPosition(editor) {
38
+ var state = editor.state,
39
+ view = editor.view;
40
+ var endPosition = index.Selection.atEnd(state.doc);
41
+ var transaction = state.tr;
42
+ transaction.setSelection(endPosition);
43
+ view.dispatch(transaction);
44
+ };
45
+ var isEditorOverlaysActive = function isEditorOverlaysActive() {
46
+ return document.querySelector(".ne-media-uploader,.ne-embed-modal,.tippy-content,.ne-link-popover");
47
+ };
48
+ var validateAndFormatUrl = function validateAndFormatUrl(url) {
49
+ if (!constants$1.ALL_PROTOCOL_URL_REGEXP.test(url)) {
50
+ return null;
51
+ }
52
+ if (!/^[a-zA-Z]\w*:/i.test(url)) {
53
+ return "https://".concat(url);
54
+ }
55
+ return url;
56
+ };
57
+ var transformEditorContent = function transformEditorContent(content) {
58
+ var _content$replaceAll;
59
+ return content === null || content === void 0 || (_content$replaceAll = content.replaceAll(constants.IMAGE_REGEX, constants.IMAGE_REPLACEMENT_PATTERN)) === null || _content$replaceAll === void 0 || (_content$replaceAll = _content$replaceAll.replaceAll(constants.EMPTY_DIV_REGEX, "")) === null || _content$replaceAll === void 0 ? void 0 : _content$replaceAll.replace(constants.TRAILING_BR_REGEX, "");
60
+ };
61
+ var isEmojiSuggestionsMenuActive = function isEmojiSuggestionsMenuActive() {
62
+ return !!document.querySelector(".neeto-editor-emoji-suggestion");
63
+ };
64
+ var transformPastedHTML = function transformPastedHTML(content) {
65
+ var contentWithoutBr = content.replaceAll("<br />", "<p></p>");
66
+ var doc = new DOMParser().parseFromString(contentWithoutBr, "text/html");
67
+
68
+ // ProseMirror tags clipboard output from any TipTap/ProseMirror editor with
69
+ // `data-pm-slice`. When present, the paste is coming from another
70
+ // neeto-editor instance and we preserve the author's color choices. When
71
+ // absent, the source is external (Word, websites, customer messages) and we
72
+ // strip inline colors so foreign theming does not bleed into the editor.
73
+ var isInternalPaste = doc.querySelector("[data-pm-slice]") !== null;
74
+ if (!isInternalPaste) {
75
+ doc.querySelectorAll("[style]").forEach(function (el) {
76
+ el.style.color = "";
77
+ el.style.backgroundColor = "";
78
+ });
79
+ }
80
+ return doc.body.innerHTML;
81
+ };
82
+ var handlePaste = function handlePaste(view, event, slice) {
83
+ try {
84
+ view.state.tr.replaceSelection(slice);
85
+ return false;
86
+ } catch (_unused) {
87
+ var _event$clipboardData;
88
+ var text = ((_event$clipboardData = event.clipboardData) === null || _event$clipboardData === void 0 ? void 0 : _event$clipboardData.getData("text/plain")) || slice.content.textBetween(0, slice.content.size, "\n").trim();
89
+ if (text) view.dispatch(view.state.tr.insertText(text).scrollIntoView());
90
+ return true;
91
+ }
92
+ };
93
+ var buildLevelsFromOptions = function buildLevelsFromOptions(options) {
94
+ var levels = _defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default(_defineProperty__default.default({}, constants$1.EDITOR_OPTIONS.H1, 1), constants$1.EDITOR_OPTIONS.H2, 2), constants$1.EDITOR_OPTIONS.H3, 3), constants$1.EDITOR_OPTIONS.H4, 4), constants$1.EDITOR_OPTIONS.H5, 5), constants$1.EDITOR_OPTIONS.H6, 6);
95
+ return Object.entries(levels).filter(function (heading) {
96
+ return options.includes(heading[0]);
97
+ }).map(function (heading) {
98
+ return heading[1];
99
+ });
100
+ };
101
+
102
+ exports.buildLevelsFromOptions = buildLevelsFromOptions;
103
+ exports.clipboardTextParser = clipboardTextParser;
104
+ exports.getEditorStyles = getEditorStyles;
105
+ exports.handlePaste = handlePaste;
106
+ exports.isEditorOverlaysActive = isEditorOverlaysActive;
107
+ exports.isEmojiSuggestionsMenuActive = isEmojiSuggestionsMenuActive;
108
+ exports.setInitialPosition = setInitialPosition;
109
+ exports.transformEditorContent = transformEditorContent;
110
+ exports.transformPastedHTML = transformPastedHTML;
111
+ exports.validateAndFormatUrl = validateAndFormatUrl;
112
+ //# sourceMappingURL=chunk-D7p10rIr.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-D7p10rIr.cjs.js","sources":["../../app/javascript/src/components/Editor/utils.js"],"sourcesContent":["import { Slice, Fragment, Node } from \"@tiptap/pm/model\";\nimport { Selection } from \"@tiptap/pm/state\";\nimport { isNotEmpty } from \"neetocist\";\n\nimport { ALL_PROTOCOL_URL_REGEXP, EDITOR_OPTIONS } from \"src/common/constants\";\n\nimport {\n EDITOR_LINE_HEIGHT,\n EDITOR_BORDER_SIZE,\n EDITOR_PADDING_SIZE,\n IMAGE_REGEX,\n IMAGE_REPLACEMENT_PATTERN,\n EMPTY_DIV_REGEX,\n TRAILING_BR_REGEX,\n} from \"./constants\";\n\nexport const getEditorStyles = ({ rows }) => {\n const editorHeight =\n rows * EDITOR_LINE_HEIGHT + 2 * (EDITOR_PADDING_SIZE + EDITOR_BORDER_SIZE);\n\n return `min-height: ${editorHeight}px;`;\n};\n\nexport const clipboardTextParser = (text, context) => {\n const nodes = [];\n const blocks = text.split(/\\n/);\n\n blocks.forEach(line => {\n const nodeJson = { type: \"paragraph\" };\n if (isNotEmpty(line)) {\n nodeJson.content = [{ type: \"text\", text: line }];\n }\n const node = Node.fromJSON(context.doc.type.schema, nodeJson);\n nodes.push(node);\n });\n\n const fragment = Fragment.fromArray(nodes);\n\n return Slice.maxOpen(fragment);\n};\n\nexport const setInitialPosition = editor => {\n const { state, view } = editor;\n const endPosition = Selection.atEnd(state.doc);\n const transaction = state.tr;\n transaction.setSelection(endPosition);\n view.dispatch(transaction);\n};\n\nexport const isEditorOverlaysActive = () =>\n document.querySelector(\n \".ne-media-uploader,.ne-embed-modal,.tippy-content,.ne-link-popover\"\n );\n\nexport const validateAndFormatUrl = url => {\n if (!ALL_PROTOCOL_URL_REGEXP.test(url)) {\n return null;\n }\n\n if (!/^[a-zA-Z]\\w*:/i.test(url)) {\n return `https://${url}`;\n }\n\n return url;\n};\n\nexport const transformEditorContent = content =>\n content\n ?.replaceAll(IMAGE_REGEX, IMAGE_REPLACEMENT_PATTERN)\n ?.replaceAll(EMPTY_DIV_REGEX, \"\")\n ?.replace(TRAILING_BR_REGEX, \"\");\n\nexport const isEmojiSuggestionsMenuActive = () =>\n !!document.querySelector(\".neeto-editor-emoji-suggestion\");\n\nexport const transformPastedHTML = content => {\n const contentWithoutBr = content.replaceAll(\"<br />\", \"<p></p>\");\n const doc = new DOMParser().parseFromString(contentWithoutBr, \"text/html\");\n\n // ProseMirror tags clipboard output from any TipTap/ProseMirror editor with\n // `data-pm-slice`. When present, the paste is coming from another\n // neeto-editor instance and we preserve the author's color choices. When\n // absent, the source is external (Word, websites, customer messages) and we\n // strip inline colors so foreign theming does not bleed into the editor.\n const isInternalPaste = doc.querySelector(\"[data-pm-slice]\") !== null;\n\n if (!isInternalPaste) {\n doc.querySelectorAll(\"[style]\").forEach(el => {\n el.style.color = \"\";\n el.style.backgroundColor = \"\";\n });\n }\n\n return doc.body.innerHTML;\n};\n\nexport const handlePaste = (view, event, slice) => {\n try {\n view.state.tr.replaceSelection(slice);\n\n return false;\n } catch {\n const text =\n event.clipboardData?.getData(\"text/plain\") ||\n slice.content.textBetween(0, slice.content.size, \"\\n\").trim();\n if (text) view.dispatch(view.state.tr.insertText(text).scrollIntoView());\n\n return true;\n }\n};\n\nexport const buildLevelsFromOptions = options => {\n const levels = {\n [EDITOR_OPTIONS.H1]: 1,\n [EDITOR_OPTIONS.H2]: 2,\n [EDITOR_OPTIONS.H3]: 3,\n [EDITOR_OPTIONS.H4]: 4,\n [EDITOR_OPTIONS.H5]: 5,\n [EDITOR_OPTIONS.H6]: 6,\n };\n\n return Object.entries(levels)\n .filter(heading => options.includes(heading[0]))\n .map(heading => heading[1]);\n};\n"],"names":["getEditorStyles","_ref","rows","editorHeight","EDITOR_LINE_HEIGHT","EDITOR_PADDING_SIZE","EDITOR_BORDER_SIZE","concat","clipboardTextParser","text","context","nodes","blocks","split","forEach","line","nodeJson","type","isNotEmpty","content","node","Node","fromJSON","doc","schema","push","fragment","Fragment","fromArray","Slice","maxOpen","setInitialPosition","editor","state","view","endPosition","Selection","atEnd","transaction","tr","setSelection","dispatch","isEditorOverlaysActive","document","querySelector","validateAndFormatUrl","url","ALL_PROTOCOL_URL_REGEXP","test","transformEditorContent","_content$replaceAll","replaceAll","IMAGE_REGEX","IMAGE_REPLACEMENT_PATTERN","EMPTY_DIV_REGEX","replace","TRAILING_BR_REGEX","isEmojiSuggestionsMenuActive","transformPastedHTML","contentWithoutBr","DOMParser","parseFromString","isInternalPaste","querySelectorAll","el","style","color","backgroundColor","body","innerHTML","handlePaste","event","slice","replaceSelection","_unused","_event$clipboardData","clipboardData","getData","textBetween","size","trim","insertText","scrollIntoView","buildLevelsFromOptions","options","levels","_defineProperty","EDITOR_OPTIONS","H1","H2","H3","H4","H5","H6","Object","entries","filter","heading","includes","map"],"mappings":"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"}