@bigbinary/neeto-molecules 4.2.0 → 4.3.1

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 (166) hide show
  1. package/dist/{Columns-DpeV3Jzz.js → Columns-gR00LMKF.js} +2 -2
  2. package/dist/Columns-gR00LMKF.js.map +1 -0
  3. package/dist/{ConfigureView-B0UvLoJe.js → ConfigureView-CG1M2-3b.js} +4 -15
  4. package/dist/ConfigureView-CG1M2-3b.js.map +1 -0
  5. package/dist/check-DvxzqR83.js +15 -0
  6. package/dist/check-DvxzqR83.js.map +1 -0
  7. package/dist/chevron-down-BMerqYpK.js +15 -0
  8. package/dist/chevron-down-BMerqYpK.js.map +1 -0
  9. package/dist/chevron-left-BTVCxPw8.js +15 -0
  10. package/dist/chevron-left-BTVCxPw8.js.map +1 -0
  11. package/dist/cjs/{Columns-C2ke8N58.js → Columns-Brpr2a_M.js} +2 -2
  12. package/dist/cjs/Columns-Brpr2a_M.js.map +1 -0
  13. package/dist/cjs/{ConfigureView-Coy1ViRc.js → ConfigureView-BVRHqVpb.js} +5 -16
  14. package/dist/cjs/ConfigureView-BVRHqVpb.js.map +1 -0
  15. package/dist/cjs/check-VgZf0qTr.js +17 -0
  16. package/dist/cjs/check-VgZf0qTr.js.map +1 -0
  17. package/dist/cjs/chevron-down-DwiliwN1.js +17 -0
  18. package/dist/cjs/chevron-down-DwiliwN1.js.map +1 -0
  19. package/dist/cjs/chevron-left-DWN80ILn.js +17 -0
  20. package/dist/cjs/chevron-left-DWN80ILn.js.map +1 -0
  21. package/dist/cjs/{useKeyboardShortcutsPaneState-BG_xVteC.js → useKeyboardShortcutsPaneState-DZUnpw9v.js} +2 -2
  22. package/dist/cjs/useKeyboardShortcutsPaneState-DZUnpw9v.js.map +1 -0
  23. package/dist/cjs/v2/AuditLogs.js +8 -8
  24. package/dist/cjs/v2/AuditLogs.js.map +1 -1
  25. package/dist/cjs/v2/BoardView.js +427 -0
  26. package/dist/cjs/v2/BoardView.js.map +1 -0
  27. package/dist/cjs/v2/Breadcrumbs.js +2 -2
  28. package/dist/cjs/v2/Breadcrumbs.js.map +1 -1
  29. package/dist/cjs/v2/CalendarView.js +429 -0
  30. package/dist/cjs/v2/CalendarView.js.map +1 -0
  31. package/dist/cjs/v2/Columns.js +2 -2
  32. package/dist/cjs/v2/ConfigurePageSidebar.js +4 -3
  33. package/dist/cjs/v2/ConfigurePageSidebar.js.map +1 -1
  34. package/dist/cjs/v2/CopyToClipboardButton.js +3 -13
  35. package/dist/cjs/v2/CopyToClipboardButton.js.map +1 -1
  36. package/dist/cjs/v2/DateFormat.js +42 -0
  37. package/dist/cjs/v2/DateFormat.js.map +1 -0
  38. package/dist/cjs/v2/DocumentEditor.js +329 -0
  39. package/dist/cjs/v2/DocumentEditor.js.map +1 -0
  40. package/dist/cjs/v2/EmojiPicker.js +125 -0
  41. package/dist/cjs/v2/EmojiPicker.js.map +1 -0
  42. package/dist/cjs/v2/Engagements.js +283 -0
  43. package/dist/cjs/v2/Engagements.js.map +1 -0
  44. package/dist/cjs/v2/ErrorPage.js +1 -1
  45. package/dist/cjs/v2/ErrorPage.js.map +1 -1
  46. package/dist/cjs/v2/FileUpload.js +644 -0
  47. package/dist/cjs/v2/FileUpload.js.map +1 -0
  48. package/dist/cjs/v2/FinderModal.js +253 -0
  49. package/dist/cjs/v2/FinderModal.js.map +1 -0
  50. package/dist/cjs/v2/FloatingActionMenu.js +11 -9
  51. package/dist/cjs/v2/FloatingActionMenu.js.map +1 -1
  52. package/dist/cjs/v2/Header.js +6 -6
  53. package/dist/cjs/v2/InlineInput.js +293 -0
  54. package/dist/cjs/v2/InlineInput.js.map +1 -0
  55. package/dist/cjs/v2/KeyboardShortcuts.js +3 -3
  56. package/dist/cjs/v2/KeyboardShortcuts.js.map +1 -1
  57. package/dist/cjs/v2/LoginPage.js +1 -1
  58. package/dist/cjs/v2/LoginPage.js.map +1 -1
  59. package/dist/cjs/v2/MenuBar.js +2 -2
  60. package/dist/cjs/v2/MenuBar.js.map +1 -1
  61. package/dist/cjs/v2/MoreDropdown.js +1 -1
  62. package/dist/cjs/v2/MoreDropdown.js.map +1 -1
  63. package/dist/cjs/v2/NavigationHeader.js +328 -0
  64. package/dist/cjs/v2/NavigationHeader.js.map +1 -0
  65. package/dist/cjs/v2/PublishBlock.js +414 -0
  66. package/dist/cjs/v2/PublishBlock.js.map +1 -0
  67. package/dist/cjs/v2/Rename.js +350 -0
  68. package/dist/cjs/v2/Rename.js.map +1 -0
  69. package/dist/cjs/v2/Scrollable.js +37 -0
  70. package/dist/cjs/v2/Scrollable.js.map +1 -0
  71. package/dist/cjs/v2/Search.js +5 -5
  72. package/dist/cjs/v2/Search.js.map +1 -1
  73. package/dist/cjs/v2/Settings.js +6 -6
  74. package/dist/cjs/v2/Settings.js.map +1 -1
  75. package/dist/cjs/v2/Sidebar.js +8 -7
  76. package/dist/cjs/v2/Sidebar.js.map +1 -1
  77. package/dist/cjs/v2/StickyRibbonsContainer.js +4 -4
  78. package/dist/cjs/v2/StickyRibbonsContainer.js.map +1 -1
  79. package/dist/cjs/v2/SubHeader.js +3 -3
  80. package/dist/cjs/v2/SubHeader.js.map +1 -1
  81. package/dist/cjs/v2/TimeFormat.js +15 -0
  82. package/dist/cjs/v2/TimeFormat.js.map +1 -0
  83. package/dist/{useKeyboardShortcutsPaneState-dNIbb_PI.js → useKeyboardShortcutsPaneState-BlyFMEtW.js} +2 -2
  84. package/dist/useKeyboardShortcutsPaneState-BlyFMEtW.js.map +1 -0
  85. package/dist/v2/AuditLogs.js +8 -8
  86. package/dist/v2/AuditLogs.js.map +1 -1
  87. package/dist/v2/BoardView.js +425 -0
  88. package/dist/v2/BoardView.js.map +1 -0
  89. package/dist/v2/Breadcrumbs.js +2 -2
  90. package/dist/v2/Breadcrumbs.js.map +1 -1
  91. package/dist/v2/CalendarView.js +427 -0
  92. package/dist/v2/CalendarView.js.map +1 -0
  93. package/dist/v2/Columns.js +2 -2
  94. package/dist/v2/ConfigurePageSidebar.js +4 -3
  95. package/dist/v2/ConfigurePageSidebar.js.map +1 -1
  96. package/dist/v2/CopyToClipboardButton.js +2 -12
  97. package/dist/v2/CopyToClipboardButton.js.map +1 -1
  98. package/dist/v2/DateFormat.js +40 -0
  99. package/dist/v2/DateFormat.js.map +1 -0
  100. package/dist/v2/DocumentEditor.js +327 -0
  101. package/dist/v2/DocumentEditor.js.map +1 -0
  102. package/dist/v2/EmojiPicker.js +123 -0
  103. package/dist/v2/EmojiPicker.js.map +1 -0
  104. package/dist/v2/Engagements.js +281 -0
  105. package/dist/v2/Engagements.js.map +1 -0
  106. package/dist/v2/ErrorPage.js +1 -1
  107. package/dist/v2/ErrorPage.js.map +1 -1
  108. package/dist/v2/FileUpload.js +641 -0
  109. package/dist/v2/FileUpload.js.map +1 -0
  110. package/dist/v2/FinderModal.js +251 -0
  111. package/dist/v2/FinderModal.js.map +1 -0
  112. package/dist/v2/FloatingActionMenu.js +11 -9
  113. package/dist/v2/FloatingActionMenu.js.map +1 -1
  114. package/dist/v2/Header.js +6 -6
  115. package/dist/v2/InlineInput.js +290 -0
  116. package/dist/v2/InlineInput.js.map +1 -0
  117. package/dist/v2/KeyboardShortcuts.js +3 -3
  118. package/dist/v2/KeyboardShortcuts.js.map +1 -1
  119. package/dist/v2/LoginPage.js +1 -1
  120. package/dist/v2/LoginPage.js.map +1 -1
  121. package/dist/v2/MenuBar.js +2 -2
  122. package/dist/v2/MenuBar.js.map +1 -1
  123. package/dist/v2/MoreDropdown.js +1 -1
  124. package/dist/v2/MoreDropdown.js.map +1 -1
  125. package/dist/v2/NavigationHeader.js +326 -0
  126. package/dist/v2/NavigationHeader.js.map +1 -0
  127. package/dist/v2/PublishBlock.js +412 -0
  128. package/dist/v2/PublishBlock.js.map +1 -0
  129. package/dist/v2/Rename.js +348 -0
  130. package/dist/v2/Rename.js.map +1 -0
  131. package/dist/v2/Scrollable.js +35 -0
  132. package/dist/v2/Scrollable.js.map +1 -0
  133. package/dist/v2/Search.js +5 -5
  134. package/dist/v2/Search.js.map +1 -1
  135. package/dist/v2/Settings.js +6 -6
  136. package/dist/v2/Settings.js.map +1 -1
  137. package/dist/v2/Sidebar.js +8 -7
  138. package/dist/v2/Sidebar.js.map +1 -1
  139. package/dist/v2/StickyRibbonsContainer.js +4 -4
  140. package/dist/v2/StickyRibbonsContainer.js.map +1 -1
  141. package/dist/v2/SubHeader.js +3 -3
  142. package/dist/v2/SubHeader.js.map +1 -1
  143. package/dist/v2/TimeFormat.js +13 -0
  144. package/dist/v2/TimeFormat.js.map +1 -0
  145. package/package.json +5 -5
  146. package/src/translations/en.json +4 -2
  147. package/types/v2/BoardView.d.ts +27 -0
  148. package/types/v2/CalendarView.d.ts +40 -0
  149. package/types/v2/DateFormat.d.ts +19 -0
  150. package/types/v2/DocumentEditor.d.ts +20 -0
  151. package/types/v2/EmojiPicker.d.ts +14 -0
  152. package/types/v2/Engagements.d.ts +50 -0
  153. package/types/v2/FileUpload.d.ts +30 -0
  154. package/types/v2/FinderModal.d.ts +24 -0
  155. package/types/v2/InlineInput.d.ts +28 -0
  156. package/types/v2/NavigationHeader.d.ts +80 -0
  157. package/types/v2/PublishBlock.d.ts +39 -0
  158. package/types/v2/Rename.d.ts +33 -0
  159. package/types/v2/Scrollable.d.ts +15 -0
  160. package/types/v2/TimeFormat.d.ts +17 -0
  161. package/dist/Columns-DpeV3Jzz.js.map +0 -1
  162. package/dist/ConfigureView-B0UvLoJe.js.map +0 -1
  163. package/dist/cjs/Columns-C2ke8N58.js.map +0 -1
  164. package/dist/cjs/ConfigureView-Coy1ViRc.js.map +0 -1
  165. package/dist/cjs/useKeyboardShortcutsPaneState-BG_xVteC.js.map +0 -1
  166. package/dist/useKeyboardShortcutsPaneState-dNIbb_PI.js.map +0 -1
@@ -0,0 +1,641 @@
1
+ import { isNotPresent, findBy, isNotEmpty, noop } from '@bigbinary/neeto-cist';
2
+ import { assoc, isEmpty, isNotNil } from 'ramda';
3
+ import { globalProps } from '@bigbinary/neeto-commons-frontend/v2/initializers';
4
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
5
+ import { useId, useState, useRef, useCallback, useEffect, createElement } from 'react';
6
+ import classnames from 'classnames';
7
+ import { useTranslation } from 'react-i18next';
8
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
+ import { c as createLucideIcon } from '../createLucideIcon-mNMhCCpf.js';
10
+ import path from 'path';
11
+ import { t } from 'i18next';
12
+ import { Button } from '@bigbinary/neeto-atoms';
13
+ import { withT } from '@bigbinary/neeto-commons-frontend/v2/react-utils';
14
+ import { useReducedMotion, motion } from 'framer-motion';
15
+ import { C as Check } from '../check-DvxzqR83.js';
16
+ import { X } from '../x-B1Er0oV4.js';
17
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
18
+ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
19
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
20
+ import { DirectUpload } from '@rails/activestorage';
21
+ import { useDropzone } from 'react-dropzone';
22
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
23
+ import { useField } from 'formik';
24
+
25
+ /**
26
+ * @license lucide-react v1.7.0 - ISC
27
+ *
28
+ * This source code is licensed under the ISC license.
29
+ * See the LICENSE file in the root directory of this source tree.
30
+ */
31
+
32
+
33
+ const __iconNode$1 = [
34
+ [
35
+ "path",
36
+ {
37
+ d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
38
+ key: "1oefj6"
39
+ }
40
+ ],
41
+ ["path", { d: "M14 2v5a1 1 0 0 0 1 1h5", key: "wfsgrz" }],
42
+ ["path", { d: "M10 9H8", key: "b1mrlr" }],
43
+ ["path", { d: "M16 13H8", key: "t4e002" }],
44
+ ["path", { d: "M16 17H8", key: "z1uh3a" }]
45
+ ];
46
+ const FileText = createLucideIcon("file-text", __iconNode$1);
47
+
48
+ /**
49
+ * @license lucide-react v1.7.0 - ISC
50
+ *
51
+ * This source code is licensed under the ISC license.
52
+ * See the LICENSE file in the root directory of this source tree.
53
+ */
54
+
55
+
56
+ const __iconNode = [
57
+ ["path", { d: "M12 3v12", key: "1x0j5s" }],
58
+ ["path", { d: "m17 8-5-5-5 5", key: "7q97r8" }],
59
+ ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }]
60
+ ];
61
+ const Upload = createLucideIcon("upload", __iconNode);
62
+
63
+ var FILE_MIME_TYPES = {
64
+ pdf: ["application/pdf"],
65
+ doc: ["application/msword", "application/wps-writer"],
66
+ docx: ["application/vnd.openxmlformats-officedocument.wordprocessingml.document"],
67
+ xls: ["application/vnd.ms-excel"],
68
+ xlsx: ["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],
69
+ csv: ["text/csv"],
70
+ txt: ["text/plain"],
71
+ rtf: ["application/rtf", "text/rtf"],
72
+ html: ["text/html"],
73
+ htm: ["text/html"],
74
+ md: ["text/markdown", "text/x-markdown"],
75
+ zip: ["application/zip"],
76
+ mp3: ["audio/mpeg"],
77
+ wma: ["audio/x-ms-wma", "video/x-ms-asf"],
78
+ mp4: ["video/mp4"],
79
+ mpg: ["video/mpeg"],
80
+ mpeg: ["video/mpeg"],
81
+ flv: ["video/x-flv"],
82
+ avi: ["video/x-msvideo"],
83
+ jpg: ["image/jpeg"],
84
+ jpeg: ["image/jpeg"],
85
+ png: ["image/png"],
86
+ gif: ["image/gif"],
87
+ json: ["application/json"],
88
+ epub: ["application/epub+zip"],
89
+ aac: ["audio/aac"],
90
+ svg: ["image/svg+xml"],
91
+ ico: ["image/vnd.microsoft.icon"]
92
+ };
93
+ var ERROR_CODES = {
94
+ FILE_TOO_LARGE: "file-too-large",
95
+ FILE_INVALID_TYPE: "file-invalid-type",
96
+ TOO_MANY_FILES: "too-many-files"
97
+ };
98
+ var DIRECT_UPLOAD_URL = "/api/direct_uploads";
99
+ var MAX_FILE_SIZE = (globalProps === null || globalProps === void 0 ? void 0 : globalProps.endUserUploadedFileSizeLimitInMb) || 10;
100
+
101
+ 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; }
102
+ 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(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; }
103
+ var DropZone = function DropZone(_ref) {
104
+ var isDragActive = _ref.isDragActive,
105
+ getRootProps = _ref.getRootProps,
106
+ getInputProps = _ref.getInputProps,
107
+ multipleFilesAllowed = _ref.multipleFilesAllowed,
108
+ maxFileSize = _ref.maxFileSize,
109
+ allowedFileTypes = _ref.allowedFileTypes,
110
+ hasFileSizeLimit = _ref.hasFileSizeLimit;
111
+ var _useTranslation = useTranslation(),
112
+ t = _useTranslation.t;
113
+ var inputId = useId();
114
+ var shouldAllowSingleFileUpload = !multipleFilesAllowed;
115
+ var shouldShowFileSizeLimit = hasFileSizeLimit && maxFileSize;
116
+ var promptText = t("neetoMolecules.fileUpload.filesDropzone.chooseFileOrDragHere");
117
+ return /*#__PURE__*/jsx("div", _objectSpread$2(_objectSpread$2({}, getRootProps({
118
+ "aria-label": promptText,
119
+ className: classnames("nm-file-upload__dropzone border-border bg-muted/40 hover:border-primary focus-visible:border-primary focus-visible:ring-ring/50 focus-visible:ring-2 cursor-pointer rounded border border-dashed p-6 outline-none transition", {
120
+ "border-primary bg-primary/5": isDragActive
121
+ })
122
+ })), {}, {
123
+ children: /*#__PURE__*/jsxs("div", {
124
+ className: "flex flex-col items-center gap-2 text-center",
125
+ "data-testid": "file-upload-body",
126
+ children: [/*#__PURE__*/jsx(Upload, {
127
+ className: "text-muted-foreground",
128
+ size: 24
129
+ }), /*#__PURE__*/jsxs("div", {
130
+ className: "flex flex-col items-center gap-1",
131
+ children: [/*#__PURE__*/jsxs("label", {
132
+ className: "cursor-pointer",
133
+ htmlFor: inputId,
134
+ children: [/*#__PURE__*/jsx("span", {
135
+ className: "text-sm font-medium",
136
+ children: promptText
137
+ }), /*#__PURE__*/jsx("input", _objectSpread$2(_objectSpread$2({}, getInputProps({
138
+ id: inputId
139
+ })), {}, {
140
+ "data-testid": "image-browse-button"
141
+ }))]
142
+ }), /*#__PURE__*/jsxs("div", {
143
+ className: "flex flex-col items-center gap-0.5",
144
+ children: [shouldAllowSingleFileUpload && /*#__PURE__*/jsx("p", {
145
+ className: "text-muted-foreground text-xs",
146
+ "data-testid": "upload-only-one-file-text",
147
+ children: t("neetoMolecules.fileUpload.filesDropzone.oneFileAllowed")
148
+ }), shouldShowFileSizeLimit && /*#__PURE__*/jsx("p", {
149
+ className: "text-muted-foreground text-xs",
150
+ "data-testid": "maximum-allowed-size-text",
151
+ children: t("neetoMolecules.fileUpload.filesDropzone.maxFileSize", {
152
+ size: maxFileSize,
153
+ unit: "MB"
154
+ })
155
+ }), allowedFileTypes && /*#__PURE__*/jsx("p", {
156
+ className: "text-muted-foreground text-xs",
157
+ "data-testid": "allowed-files-types-text",
158
+ children: t("neetoMolecules.fileUpload.filesDropzone.allowedFileTypes", {
159
+ types: allowedFileTypes
160
+ })
161
+ })]
162
+ })]
163
+ })]
164
+ })
165
+ }));
166
+ };
167
+
168
+ var getAcceptedFileTypes = function getAcceptedFileTypes(allowedFileTypes) {
169
+ var accepted = {};
170
+ allowedFileTypes.split(", ").forEach(function (type) {
171
+ var mimeTypes = FILE_MIME_TYPES[type] || ["application/octet-stream"];
172
+ var extension = ".".concat(type);
173
+ if (isNotPresent(type) || isNotPresent(mimeTypes)) return;
174
+ mimeTypes.forEach(function (mimeType) {
175
+ if (accepted[mimeType]) accepted[mimeType].push(extension);else accepted[mimeType] = [extension];
176
+ });
177
+ });
178
+ return accepted;
179
+ };
180
+ var convertBytesToMb = function convertBytesToMb(bytes) {
181
+ return ((bytes - 10) / (1028 * 1024)).toFixed(2);
182
+ };
183
+ var renderErrorMessage = function renderErrorMessage(errorObject, maxFileSize, isMultiple) {
184
+ var error = errorObject.errors[0];
185
+ var file = errorObject.file;
186
+ if (error) {
187
+ var code = error.code;
188
+ if (code === ERROR_CODES.FILE_TOO_LARGE) {
189
+ return t("neetoMolecules.fileUpload.filesDropzone.errors.fileTooLarge", {
190
+ fileName: file.name,
191
+ maxSize: "".concat(Math.round(maxFileSize / 1048576), "MB")
192
+ });
193
+ } else if (code === ERROR_CODES.FILE_INVALID_TYPE) {
194
+ return t("neetoMolecules.fileUpload.filesDropzone.errors.fileInvalidType", {
195
+ fileType: path.extname(file.name)
196
+ });
197
+ } else if (code === ERROR_CODES.TOO_MANY_FILES && !isMultiple) {
198
+ return t("neetoMolecules.fileUpload.filesDropzone.errors.tooManyFiles", {
199
+ maxFiles: 1
200
+ });
201
+ }
202
+ }
203
+ return t("neetoMolecules.fileUpload.filesDropzone.errors.defaultError", {
204
+ fileName: file.name
205
+ });
206
+ };
207
+ var convertMbToBytes = function convertMbToBytes(mb) {
208
+ return mb * 1028 * 1024 + 10;
209
+ };
210
+
211
+ var ErrorMessages = function ErrorMessages(_ref) {
212
+ var fileRejections = _ref.fileRejections,
213
+ maxFileSizeInBytes = _ref.maxFileSizeInBytes;
214
+ var _useTranslation = useTranslation(),
215
+ t = _useTranslation.t;
216
+ var hasMultipleFileErrors = fileRejections.some(function (_ref2) {
217
+ var errors = _ref2.errors;
218
+ return errors[0].code === ERROR_CODES.TOO_MANY_FILES;
219
+ });
220
+ return /*#__PURE__*/jsxs(Fragment, {
221
+ children: [hasMultipleFileErrors && /*#__PURE__*/jsx("p", {
222
+ className: "text-destructive mt-1 text-xs",
223
+ "data-testid": "form-file-upload-input-error",
224
+ children: /*#__PURE__*/jsx("span", {
225
+ children: t("neetoMolecules.fileUpload.filesDropzone.errors.tooManyFiles", {
226
+ maxFiles: 1
227
+ })
228
+ })
229
+ }), fileRejections.filter(function (_ref3) {
230
+ var errors = _ref3.errors;
231
+ return errors[0].code !== ERROR_CODES.TOO_MANY_FILES;
232
+ }).map(function (file, index) {
233
+ return /*#__PURE__*/jsx("p", {
234
+ className: "text-destructive mt-1 text-xs",
235
+ "data-testid": "form-file-upload-input-error",
236
+ children: /*#__PURE__*/jsx("span", {
237
+ children: renderErrorMessage(file, maxFileSizeInBytes, false)
238
+ })
239
+ }, index);
240
+ })]
241
+ });
242
+ };
243
+
244
+ var Progress = function Progress(_ref) {
245
+ var percents = _ref.percents,
246
+ _ref$stroke = _ref.stroke,
247
+ stroke = _ref$stroke === void 0 ? "currentColor" : _ref$stroke,
248
+ _ref$emptyStroke = _ref.emptyStroke,
249
+ emptyStroke = _ref$emptyStroke === void 0 ? stroke : _ref$emptyStroke,
250
+ _ref$emptyStrokeOpaci = _ref.emptyStrokeOpacity,
251
+ emptyStrokeOpacity = _ref$emptyStrokeOpaci === void 0 ? 0.25 : _ref$emptyStrokeOpaci,
252
+ _ref$duration = _ref.duration,
253
+ duration = _ref$duration === void 0 ? 0.5 : _ref$duration,
254
+ _ref$delay = _ref.delay,
255
+ delay = _ref$delay === void 0 ? 0 : _ref$delay,
256
+ _ref$size = _ref.size,
257
+ size = _ref$size === void 0 ? 100 : _ref$size,
258
+ _ref$strokeWidth = _ref.strokeWidth,
259
+ strokeWidth = _ref$strokeWidth === void 0 ? 12 : _ref$strokeWidth;
260
+ var shouldReduceMotion = useReducedMotion();
261
+ var radius = 45;
262
+ var circumference = Math.ceil(2 * Math.PI * radius);
263
+ var fillPercents = Math.abs(Math.ceil(circumference / 100 * (percents - 100)));
264
+ var transition = {
265
+ duration: shouldReduceMotion ? 0 : duration,
266
+ delay: shouldReduceMotion ? 0 : delay
267
+ };
268
+ var variants = {
269
+ hidden: {
270
+ strokeDashoffset: circumference,
271
+ transition: transition
272
+ },
273
+ show: {
274
+ strokeDashoffset: fillPercents,
275
+ transition: transition
276
+ }
277
+ };
278
+ return /*#__PURE__*/jsx("div", {
279
+ className: "nm-progress__circle",
280
+ children: /*#__PURE__*/jsxs("div", {
281
+ className: "nm-progress__circle-wrapper",
282
+ style: {
283
+ height: size
284
+ },
285
+ children: [/*#__PURE__*/jsx("svg", {
286
+ height: size,
287
+ version: "1.1",
288
+ viewBox: "0 0 100 100",
289
+ width: size,
290
+ xmlns: "http://www.w3.org/2000/svg",
291
+ children: /*#__PURE__*/jsx("circle", {
292
+ strokeWidth: strokeWidth,
293
+ className: "circle",
294
+ cx: "50",
295
+ cy: "50",
296
+ fill: "transparent",
297
+ r: radius,
298
+ stroke: emptyStroke,
299
+ strokeOpacity: emptyStrokeOpacity
300
+ })
301
+ }), /*#__PURE__*/jsx("svg", {
302
+ height: size,
303
+ viewBox: "0 0 100 100",
304
+ width: size,
305
+ style: {
306
+ position: "absolute",
307
+ transform: "rotate(-90deg)",
308
+ overflow: "visible",
309
+ top: 0
310
+ },
311
+ children: /*#__PURE__*/jsx(motion.circle, {
312
+ stroke: stroke,
313
+ strokeWidth: strokeWidth,
314
+ variants: variants,
315
+ animate: "show",
316
+ cx: "50",
317
+ cy: "50",
318
+ fill: "transparent",
319
+ initial: "hidden",
320
+ r: radius,
321
+ strokeDasharray: circumference,
322
+ strokeDashoffset: fillPercents
323
+ })
324
+ })]
325
+ })
326
+ });
327
+ };
328
+
329
+ var FilePreview = withT(function (_ref) {
330
+ var t = _ref.t,
331
+ file = _ref.file,
332
+ isUploading = _ref.isUploading,
333
+ cancel = _ref.cancel,
334
+ progress = _ref.progress;
335
+ return /*#__PURE__*/jsxs("li", {
336
+ className: "flex items-center gap-2 px-3 py-2",
337
+ children: [/*#__PURE__*/jsxs("div", {
338
+ className: "relative flex h-6 w-6 items-center justify-center",
339
+ children: [/*#__PURE__*/jsx("a", {
340
+ className: classnames({
341
+ invisible: isUploading
342
+ }),
343
+ href: file.url,
344
+ rel: "noreferrer",
345
+ target: "_blank",
346
+ children: /*#__PURE__*/jsx(FileText, {
347
+ className: "text-muted-foreground",
348
+ size: 20
349
+ })
350
+ }), isUploading && /*#__PURE__*/jsx("div", {
351
+ className: "absolute inset-0",
352
+ children: /*#__PURE__*/jsx(Progress, {
353
+ percents: progress || 0,
354
+ size: 20
355
+ })
356
+ })]
357
+ }), /*#__PURE__*/jsxs("div", {
358
+ className: "flex flex-1 flex-col",
359
+ children: [/*#__PURE__*/jsx("span", {
360
+ className: "text-xs font-medium",
361
+ "data-testid": "file-name",
362
+ children: file.name
363
+ }), /*#__PURE__*/jsx("span", {
364
+ className: "text-muted-foreground text-[11px]",
365
+ children: file.size ? "".concat(convertBytesToMb(file.size), " MB") : ""
366
+ })]
367
+ }), /*#__PURE__*/jsxs("div", {
368
+ className: "flex items-center gap-2",
369
+ children: [/*#__PURE__*/jsx("span", {
370
+ "aria-hidden": !file.url,
371
+ className: classnames("text-success", {
372
+ "opacity-0": !file.url
373
+ }),
374
+ role: "img",
375
+ "aria-label": t("neetoMolecules.fileUpload.fileUploadSuccessful", {
376
+ defaultValue: "Upload complete"
377
+ }),
378
+ children: file.url && /*#__PURE__*/jsx(Check, {
379
+ "data-testid": "file-upload-success",
380
+ size: 16
381
+ })
382
+ }), /*#__PURE__*/jsx(Button, {
383
+ icon: X,
384
+ size: "icon-sm",
385
+ variant: "ghost",
386
+ "aria-label": t("neetoMolecules.common.actions.remove", {
387
+ defaultValue: "Remove"
388
+ }),
389
+ onClick: cancel
390
+ })]
391
+ })]
392
+ });
393
+ });
394
+
395
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = false, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = true, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), true), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
396
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
397
+ 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; }
398
+ 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(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; }
399
+ var useFileUpload = function useFileUpload(_ref) {
400
+ var disabled = _ref.disabled,
401
+ accept = _ref.accept,
402
+ multiple = _ref.multiple,
403
+ maxFileSize = _ref.maxFileSize,
404
+ minFileSize = _ref.minFileSize,
405
+ files = _ref.files,
406
+ onChange = _ref.onChange,
407
+ setError = _ref.setError,
408
+ setTouched = _ref.setTouched,
409
+ hasFileSizeLimit = _ref.hasFileSizeLimit;
410
+ var _useState = useState({}),
411
+ _useState2 = _slicedToArray(_useState, 2),
412
+ uploadProgress = _useState2[0],
413
+ setUploadProgress = _useState2[1];
414
+ var _useState3 = useState(""),
415
+ _useState4 = _slicedToArray(_useState3, 2),
416
+ uploadError = _useState4[0],
417
+ setUploadError = _useState4[1];
418
+ var filesRef = useRef(files);
419
+ filesRef.current = files;
420
+ var cancel = useCallback(function (index) {
421
+ return function () {
422
+ setUploadProgress(assoc(files[index].name, null));
423
+ var newFiles = files === null || files === void 0 ? void 0 : files.filter(function (_, idx) {
424
+ return idx !== index;
425
+ });
426
+ onChange(newFiles);
427
+ };
428
+ }, [files]);
429
+ useEffect(function () {
430
+ if (uploadError) setError(uploadError);
431
+ }, [uploadError]);
432
+ var onDropAccepted = /*#__PURE__*/function () {
433
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(acceptedFiles) {
434
+ var initialFiles, updatedFiles, newFiles, merged;
435
+ return _regenerator().w(function (_context) {
436
+ while (1) switch (_context.n) {
437
+ case 0:
438
+ setTouched(false);
439
+ setUploadError("");
440
+ initialFiles = acceptedFiles.map(function (file) {
441
+ return {
442
+ name: file.name,
443
+ size: file.size
444
+ };
445
+ });
446
+ updatedFiles = multiple ? [].concat(_toConsumableArray(files || []), _toConsumableArray(initialFiles)) : initialFiles;
447
+ onChange(updatedFiles);
448
+ _context.n = 1;
449
+ return new Promise(function (resolve) {
450
+ var collected = [];
451
+ acceptedFiles.forEach(function (file) {
452
+ setUploadProgress(assoc(file.name, 0));
453
+ var upload = new DirectUpload(file, DIRECT_UPLOAD_URL, {
454
+ directUploadWillStoreFileWithXHR: function directUploadWillStoreFileWithXHR(xhr) {
455
+ xhr.upload.addEventListener("progress", function (event) {
456
+ var percentComplete = Math.round(event.loaded / event.total * 100);
457
+ setUploadProgress(assoc(file.name, percentComplete));
458
+ });
459
+ xhr.upload.addEventListener("load", function () {
460
+ setUploadProgress(assoc(file.name, undefined));
461
+ });
462
+ }
463
+ });
464
+ upload.create(function (error, blob) {
465
+ if (error) {
466
+ return setUploadError(error);
467
+ }
468
+ collected.push({
469
+ url: blob.blob_url,
470
+ name: blob.filename,
471
+ signedId: blob.signed_id
472
+ });
473
+ var isUploadCompleted = multiple ? acceptedFiles.length === collected.length : collected.length === 1;
474
+ if (isUploadCompleted) {
475
+ return resolve(collected);
476
+ }
477
+ return "";
478
+ });
479
+ });
480
+ return collected;
481
+ });
482
+ case 1:
483
+ newFiles = _context.v;
484
+ if (multiple) {
485
+ merged = filesRef.current.map(function (file) {
486
+ var uploadedFile = findBy({
487
+ name: file.name
488
+ }, newFiles);
489
+ return _objectSpread$1(_objectSpread$1({}, file), uploadedFile);
490
+ });
491
+ onChange(merged);
492
+ } else {
493
+ onChange(newFiles);
494
+ }
495
+ case 2:
496
+ return _context.a(2);
497
+ }
498
+ }, _callee);
499
+ }));
500
+ return function onDropAccepted(_x) {
501
+ return _ref2.apply(this, arguments);
502
+ };
503
+ }();
504
+ var onDropRejected = function onDropRejected(fileRejections) {
505
+ fileRejections.forEach(function (fileObject) {
506
+ setTouched(true);
507
+ setUploadError(renderErrorMessage(fileObject, maxFileSize, multiple));
508
+ });
509
+ };
510
+ var _useDropzone = useDropzone(_objectSpread$1({
511
+ disabled: disabled,
512
+ accept: accept,
513
+ multiple: multiple,
514
+ minSize: convertMbToBytes(minFileSize),
515
+ onDropAccepted: onDropAccepted,
516
+ onDropRejected: onDropRejected
517
+ }, maxFileSize && hasFileSizeLimit && {
518
+ maxSize: convertMbToBytes(maxFileSize)
519
+ })),
520
+ getRootProps = _useDropzone.getRootProps,
521
+ getInputProps = _useDropzone.getInputProps,
522
+ isDragActive = _useDropzone.isDragActive,
523
+ fileRejections = _useDropzone.fileRejections;
524
+ return {
525
+ progress: uploadProgress,
526
+ cancel: cancel,
527
+ getRootProps: getRootProps,
528
+ getInputProps: getInputProps,
529
+ isDragActive: isDragActive,
530
+ fileRejections: fileRejections
531
+ };
532
+ };
533
+
534
+ var FileUpload = function FileUpload(_ref) {
535
+ var _ref$allowedFileTypes = _ref.allowedFileTypes,
536
+ allowedFileTypes = _ref$allowedFileTypes === void 0 ? "" : _ref$allowedFileTypes,
537
+ _ref$multipleFilesAll = _ref.multipleFilesAllowed,
538
+ multipleFilesAllowed = _ref$multipleFilesAll === void 0 ? true : _ref$multipleFilesAll,
539
+ _ref$maxFileSize = _ref.maxFileSize,
540
+ maxFileSize = _ref$maxFileSize === void 0 ? MAX_FILE_SIZE : _ref$maxFileSize,
541
+ _ref$hasFileSizeLimit = _ref.hasFileSizeLimit,
542
+ hasFileSizeLimit = _ref$hasFileSizeLimit === void 0 ? true : _ref$hasFileSizeLimit,
543
+ _ref$isPreview = _ref.isPreview,
544
+ isPreview = _ref$isPreview === void 0 ? false : _ref$isPreview,
545
+ _ref$minFileSize = _ref.minFileSize,
546
+ minFileSize = _ref$minFileSize === void 0 ? 0 : _ref$minFileSize,
547
+ _ref$files = _ref.files,
548
+ files = _ref$files === void 0 ? [] : _ref$files,
549
+ _ref$onChange = _ref.onChange,
550
+ onChange = _ref$onChange === void 0 ? noop : _ref$onChange,
551
+ error = _ref.error,
552
+ _ref$setError = _ref.setError,
553
+ setError = _ref$setError === void 0 ? noop : _ref$setError,
554
+ _ref$setTouched = _ref.setTouched,
555
+ setTouched = _ref$setTouched === void 0 ? noop : _ref$setTouched;
556
+ var _useFileUpload = useFileUpload({
557
+ disabled: isPreview,
558
+ accept: getAcceptedFileTypes(allowedFileTypes),
559
+ multiple: multipleFilesAllowed,
560
+ maxFileSize: maxFileSize,
561
+ minFileSize: minFileSize,
562
+ files: files,
563
+ onChange: onChange,
564
+ setError: setError,
565
+ setTouched: setTouched,
566
+ hasFileSizeLimit: hasFileSizeLimit
567
+ }),
568
+ progress = _useFileUpload.progress,
569
+ cancel = _useFileUpload.cancel,
570
+ getRootProps = _useFileUpload.getRootProps,
571
+ getInputProps = _useFileUpload.getInputProps,
572
+ isDragActive = _useFileUpload.isDragActive,
573
+ fileRejections = _useFileUpload.fileRejections;
574
+ var maxFileSizeInBytes = maxFileSize * 1000000;
575
+ var isUploadingFile = function isUploadingFile(file) {
576
+ return isNotNil(progress[file.name]) && (progress[file.name] !== 100 || !file.url);
577
+ };
578
+ var shouldShowError = error && isEmpty(fileRejections);
579
+ return /*#__PURE__*/jsxs(Fragment, {
580
+ children: [/*#__PURE__*/jsx(DropZone, {
581
+ allowedFileTypes: allowedFileTypes,
582
+ getInputProps: getInputProps,
583
+ getRootProps: getRootProps,
584
+ hasFileSizeLimit: hasFileSizeLimit,
585
+ isDragActive: isDragActive,
586
+ maxFileSize: maxFileSize,
587
+ multipleFilesAllowed: multipleFilesAllowed
588
+ }), !isEmpty(files) && /*#__PURE__*/jsx("ul", {
589
+ className: "border-border mt-3 divide-y rounded-md border",
590
+ children: files === null || files === void 0 ? void 0 : files.map(function (file, idx) {
591
+ return /*#__PURE__*/createElement(FilePreview, {
592
+ file: file,
593
+ cancel: cancel(idx),
594
+ isUploading: isUploadingFile(file),
595
+ key: idx,
596
+ progress: progress[file.name]
597
+ });
598
+ })
599
+ }), isNotEmpty(fileRejections) && /*#__PURE__*/jsx(ErrorMessages, {
600
+ fileRejections: fileRejections,
601
+ maxFileSizeInBytes: maxFileSizeInBytes
602
+ }), shouldShowError && /*#__PURE__*/jsx("p", {
603
+ className: "text-destructive mt-1 text-xs",
604
+ "data-testid": "form-file-upload-input-error",
605
+ children: /*#__PURE__*/jsx("span", {
606
+ children: error
607
+ })
608
+ })]
609
+ });
610
+ };
611
+
612
+ var _excluded = ["name"];
613
+ 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; }
614
+ 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(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; }
615
+ var FormikFileUpload = function FormikFileUpload(_ref) {
616
+ var name = _ref.name,
617
+ props = _objectWithoutProperties(_ref, _excluded);
618
+ var _useField = useField(name),
619
+ _useField2 = _slicedToArray(_useField, 3);
620
+ _useField2[0];
621
+ var _useField2$ = _useField2[1],
622
+ value = _useField2$.value,
623
+ touched = _useField2$.touched,
624
+ error = _useField2$.error,
625
+ _useField2$2 = _useField2[2],
626
+ setValue = _useField2$2.setValue,
627
+ setTouched = _useField2$2.setTouched,
628
+ setError = _useField2$2.setError;
629
+ var errorToDisplay = touched && error ? error : "";
630
+ return /*#__PURE__*/jsx(FileUpload, _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({}, props), {}, {
631
+ setError: setError,
632
+ setTouched: setTouched
633
+ })), {}, {
634
+ error: errorToDisplay,
635
+ files: value,
636
+ onChange: setValue
637
+ }));
638
+ };
639
+
640
+ export { FileUpload, FormikFileUpload };
641
+ //# sourceMappingURL=FileUpload.js.map