@scaleflex/widget-utils 4.4.0 → 4.5.0

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 (176) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/AbortController.js +20 -0
  3. package/lib/BlurHash/base83.js +10 -0
  4. package/lib/BlurHash/decode.js +80 -0
  5. package/lib/BlurHash/error.js +28 -0
  6. package/lib/BlurHash/utils.js +22 -0
  7. package/lib/CustomDate.js +157 -0
  8. package/lib/EventTracker.js +42 -0
  9. package/lib/FOCUSABLE_ELEMENTS.js +1 -0
  10. package/lib/LinkHelper.js +153 -0
  11. package/lib/NetworkError.js +30 -0
  12. package/lib/ProgressTimeout.js +45 -0
  13. package/lib/RateLimitedQueue.js +197 -0
  14. package/lib/RequestError.js +36 -0
  15. package/lib/Timeframes/getDateRange.js +45 -0
  16. package/lib/TranslationMissingKeysConsoleHelper.js +113 -0
  17. package/lib/Translator.js +200 -0
  18. package/lib/addUrlParams.js +27 -0
  19. package/lib/adjustUpdatedFolders.js +22 -0
  20. package/lib/asyncTimeout.js +6 -0
  21. package/lib/audioMimeTypes.js +3 -0
  22. package/lib/blobToDataURI.js +13 -0
  23. package/lib/callIfFunction.js +10 -0
  24. package/lib/canEditVideo.js +9 -0
  25. package/lib/canvasToBlob.js +18 -0
  26. package/lib/capitalizeFirstLetter.js +4 -0
  27. package/lib/checkConnection.js +4 -0
  28. package/lib/checkFileOrFolderNameValidation.js +4 -0
  29. package/lib/checkIfPngSvgGIF.js +3 -0
  30. package/lib/checkImageIfPngJpegOrWebpOrAvif.js +5 -0
  31. package/lib/checkItemsSupportExportWithReason.js +41 -0
  32. package/lib/checkPermissions.js +26 -0
  33. package/lib/cloudimageSupportedInputMimeTypes.js +2 -0
  34. package/lib/clsx.js +14 -0
  35. package/lib/constants.js +570 -0
  36. package/lib/convertBytesToMb.js +5 -0
  37. package/lib/convertGbToBytes.js +4 -0
  38. package/lib/convertVideoFileTypeToSupported.js +17 -0
  39. package/lib/copyText.js +25 -0
  40. package/lib/createFolderVirtualPath.js +14 -0
  41. package/lib/createThunk.js +349 -0
  42. package/lib/customEncodeURIComponent.js +47 -0
  43. package/lib/dataURItoBlob.js +33 -0
  44. package/lib/dataURItoFile.js +4 -0
  45. package/lib/dateStrToClearDateTime.js +20 -0
  46. package/lib/debounce.js +14 -0
  47. package/lib/deepEqual.js +23 -0
  48. package/lib/deepMerge.js +56 -0
  49. package/lib/deserializeFunction.js +5 -0
  50. package/lib/documentMimeTypes.js +2 -0
  51. package/lib/downloadFromBlob.js +16 -0
  52. package/lib/emitSocketProgress.js +18 -0
  53. package/lib/escapeRegExp.js +4 -0
  54. package/lib/extractFileDataNoBlob.js +12 -0
  55. package/lib/fetchWithNetworkError.js +14 -0
  56. package/lib/fieldsQueriesGetters.js +46 -0
  57. package/lib/findAllDOMElements.js +18 -0
  58. package/lib/findAllRegexMatchesInString.js +16 -0
  59. package/lib/findDOMElement.js +17 -0
  60. package/lib/findIndex.js +9 -0
  61. package/lib/formatDuration.js +22 -0
  62. package/lib/formatNumbers.js +32 -0
  63. package/lib/formatResolution.js +17 -0
  64. package/lib/formatSeconds.js +14 -0
  65. package/lib/generateFileId.js +53 -0
  66. package/lib/generateI18nKeyFromString.js +11 -0
  67. package/lib/generatePsdThumbnail/adaptHexBoundries.js +9 -0
  68. package/lib/generatePsdThumbnail/bufferToHex.js +12 -0
  69. package/lib/generatePsdThumbnail/generatePsdThumbnail.js +36 -0
  70. package/lib/generatePsdThumbnail/generatePsdThumbnailBytes.js +8 -0
  71. package/lib/generatePsdThumbnail/generatePsdThumbnailHex.js +4 -0
  72. package/lib/generateSelectInputPlaceholder.js +24 -0
  73. package/lib/getActionErrorState.js +17 -0
  74. package/lib/getArraysMutualObjects.js +12 -0
  75. package/lib/getBytesRemaining.js +9 -0
  76. package/lib/getClientTimezone.js +5 -0
  77. package/lib/getCloudimagePrefixedUrl.js +23 -0
  78. package/lib/getDateDaysFromNow.js +17 -0
  79. package/lib/getDateMinusDay.js +5 -0
  80. package/lib/getDateString.js +20 -0
  81. package/lib/getDaysLeft.js +9 -0
  82. package/lib/getDecodedUriComponent.js +10 -0
  83. package/lib/getDownloadSpeed.js +7 -0
  84. package/lib/getDroppedFiles/index.js +24 -0
  85. package/lib/getDroppedFiles/utils/fallbackApi.js +7 -0
  86. package/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js +36 -0
  87. package/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getRelativePath.js +16 -0
  88. package/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js +57 -0
  89. package/lib/getEncodedWrappedUrl.js +7 -0
  90. package/lib/getFileAssetsTokenUrl.js +14 -0
  91. package/lib/getFileCdnLink.js +6 -0
  92. package/lib/getFileDefaultIcon.js +14 -0
  93. package/lib/getFileDetails.js +81 -0
  94. package/lib/getFileExtension.js +32 -0
  95. package/lib/getFileLink.js +17 -0
  96. package/lib/getFileNameAndExtension.js +22 -0
  97. package/lib/getFileType.js +23 -0
  98. package/lib/getFileTypeExtension.js +22 -0
  99. package/lib/getFilterFileFormatIcon.js +6 -0
  100. package/lib/getFolderDetails.js +30 -0
  101. package/lib/getFormattedPreviewUrl.js +79 -0
  102. package/lib/getHoursAndMinutes.js +9 -0
  103. package/lib/getImageEditUrl.js +36 -0
  104. package/lib/getImgFileDimensions.js +25 -0
  105. package/lib/getItemIcon.js +112 -0
  106. package/lib/getItemPath.js +10 -0
  107. package/lib/getItemPreviewWidthHeight.js +10 -0
  108. package/lib/getItemsSizeInBytes.js +12 -0
  109. package/lib/getJsonParsedValue.js +11 -0
  110. package/lib/getLinkWithNewParams.js +13 -0
  111. package/lib/getMetadataMultiSelectQuery.js +66 -0
  112. package/lib/getNormalizedItems.js +55 -0
  113. package/lib/getObjectsMutualProperties.js +32 -0
  114. package/lib/getRandomNumber.js +12 -0
  115. package/lib/getSocketHost.js +7 -0
  116. package/lib/getSpeed.js +8 -0
  117. package/lib/getTime.js +18 -0
  118. package/lib/getTimeStamp.js +18 -0
  119. package/lib/handleError.js +13 -0
  120. package/lib/handlePressEnter.js +9 -0
  121. package/lib/handlePromise.js +39 -0
  122. package/lib/hasProperty.js +3 -0
  123. package/lib/hexToRgb.js +15 -0
  124. package/lib/htmlSanitizer.js +6 -0
  125. package/lib/humanReadableDate.js +45 -0
  126. package/lib/humanReadableDateWithTranslations.js +29 -0
  127. package/lib/i18n.client.js +54 -0
  128. package/lib/ignoreEvent.js +10 -0
  129. package/lib/index.js +0 -0
  130. package/lib/injectVirtualPathToFolders.js +24 -0
  131. package/lib/isAi.js +7 -0
  132. package/lib/isArchive.js +12 -0
  133. package/lib/isAudio.js +9 -0
  134. package/lib/isAudioAndSupportsPlayback.js +10 -0
  135. package/lib/isCloudimageFastPreviewSupported.js +16 -0
  136. package/lib/isDOMElement.js +9 -0
  137. package/lib/isDocument.js +10 -0
  138. package/lib/isDragDropSupported.js +20 -0
  139. package/lib/isEmptyObject.js +4 -0
  140. package/lib/isEps.js +8 -0
  141. package/lib/isFile.js +5 -0
  142. package/lib/isFileSupportedByCloudimage.js +14 -0
  143. package/lib/isFolder.js +4 -0
  144. package/lib/isFontFile.js +9 -0
  145. package/lib/isFunction.js +4 -0
  146. package/lib/isImage.js +11 -0
  147. package/lib/isJpg.js +8 -0
  148. package/lib/isMobileDevice.js +12 -0
  149. package/lib/isNetworkError.js +7 -0
  150. package/lib/isNumber.js +4 -0
  151. package/lib/isObjectType.js +5 -0
  152. package/lib/isObjectURL.js +10 -0
  153. package/lib/isOpenedFromAdobe.js +3 -0
  154. package/lib/isOtf.js +10 -0
  155. package/lib/isPdf.js +9 -0
  156. package/lib/isPhotoshopFile.js +8 -0
  157. package/lib/isPreviewSupported.js +12 -0
  158. package/lib/isPromise.js +5 -0
  159. package/lib/metadata/checkFieldValidation.js +51 -0
  160. package/lib/metadata/generateItemMetadataState.js +63 -0
  161. package/lib/metadata/generateMetadataDefaultState.js +30 -0
  162. package/lib/metadata/getFileCustomMetadataGroups.js +23 -0
  163. package/lib/metadata/getGeoPointValidationErrors.js +32 -0
  164. package/lib/metadata/getMetaAttachmentFields.js +9 -0
  165. package/lib/metadata/getMetadataEmptyAssets.js +28 -0
  166. package/lib/metadata/getMetadataFieldGeoPointValue.js +42 -0
  167. package/lib/metadata/getMetadataFieldVariantValue.js +31 -0
  168. package/lib/metadata/getMetadataGroups.js +16 -0
  169. package/lib/metadata/getRequiredMetadataFields.js +13 -0
  170. package/lib/metadata/isM0LegacyMetaVersion.js +5 -0
  171. package/lib/metadata/isM1EdgyMetaVersion.js +5 -0
  172. package/lib/metadata/mapMetaAttachmentsObjsToUuids.js +21 -0
  173. package/lib/metadata/updateValidationErrors.js +59 -0
  174. package/lib/metadata/validateItemMetadata.js +70 -0
  175. package/lib/styledComponentsMixins/truncate.mixin.js +8 -0
  176. package/package.json +3 -3
@@ -0,0 +1,46 @@
1
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
2
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
5
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ import getDateRange from './Timeframes/getDateRange';
8
+ import { FILTER_CONDITIONS } from './constants';
9
+ import isNumber from './isNumber';
10
+ import literalDateFromDateObj from './literalDateFromDateObj';
11
+ export var getFieldValueQuery = function getFieldValueQuery(metadataFilter, value) {
12
+ var key = metadataFilter.key,
13
+ _metadataFilter$condi = metadataFilter.condition,
14
+ condition = _metadataFilter$condi === void 0 ? FILTER_CONDITIONS.IS : _metadataFilter$condi,
15
+ _metadataFilter$opera = metadataFilter.operator,
16
+ operator = _metadataFilter$opera === void 0 ? ':' : _metadataFilter$opera;
17
+ var conditionPrefix = condition === FILTER_CONDITIONS.IS_NOT ? '-' : '';
18
+ return "".concat(key).concat(operator).concat(conditionPrefix).concat(value);
19
+ };
20
+ export var getDateFieldQuery = function getDateFieldQuery(metadataFilter) {
21
+ var value = metadataFilter.value;
22
+ var query = isNumber(value) ? getDateRange(value, literalDateFromDateObj, value > -1) : value;
23
+ if (Array.isArray(query)) {
24
+ query = _toConsumableArray(query);
25
+ if (isNumber(query[0])) {
26
+ query[0] = getDateRange(query[0], literalDateFromDateObj, query[0] > -1);
27
+ }
28
+ if (isNumber(query[1])) {
29
+ query[1] = getDateRange(query[1], literalDateFromDateObj, query[1] > -1);
30
+ }
31
+ if (query.length === 2) {
32
+ query = "".concat(query[0] || '', "..").concat(query[1] || '');
33
+ }
34
+ }
35
+ return "\"".concat(getFieldValueQuery(metadataFilter, query), "\"");
36
+ };
37
+ export var getTextFieldQuery = function getTextFieldQuery(metadataFilter) {
38
+ var key = metadataFilter.key,
39
+ value = metadataFilter.value,
40
+ _metadataFilter$condi2 = metadataFilter.condition,
41
+ condition = _metadataFilter$condi2 === void 0 ? FILTER_CONDITIONS.IS : _metadataFilter$condi2;
42
+ if (condition === FILTER_CONDITIONS.IS) {
43
+ return "".concat(key, ":\"").concat(value, "\"");
44
+ }
45
+ return "".concat(key, "~\"").concat(value, "\"");
46
+ };
@@ -0,0 +1,18 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ import isDOMElement from './isDOMElement';
3
+
4
+ /**
5
+ * Find one or more DOM elements.
6
+ *
7
+ * @param {string} element
8
+ * @returns {Array|null}
9
+ */
10
+ export default function findAllDOMElements(element) {
11
+ if (typeof element === 'string') {
12
+ var elements = [].slice.call(document.querySelectorAll(element));
13
+ return elements.length > 0 ? elements : null;
14
+ }
15
+ if (_typeof(element) === 'object' && isDOMElement(element)) {
16
+ return [element];
17
+ }
18
+ }
@@ -0,0 +1,16 @@
1
+ var findAllRegexMatchesInString = function findAllRegexMatchesInString() {
2
+ var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
3
+ var regex = arguments.length > 1 ? arguments[1] : undefined;
4
+ var output = [];
5
+ var tmpResult;
6
+ // eslint-disable-next-line no-cond-assign
7
+ while ((tmpResult = regex.exec(str)) !== null) {
8
+ output.push({
9
+ startIndex: tmpResult.index,
10
+ endIndex: regex.lastIndex,
11
+ match: tmpResult[0]
12
+ });
13
+ }
14
+ return output;
15
+ };
16
+ export default findAllRegexMatchesInString;
@@ -0,0 +1,17 @@
1
+ import isDOMElement from './isDOMElement';
2
+
3
+ /**
4
+ * Find a DOM element.
5
+ *
6
+ * @param {Node|string} element
7
+ * @returns {Node|null}
8
+ */
9
+ export default function findDOMElement(element) {
10
+ var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
11
+ if (typeof element === 'string') {
12
+ return context.querySelector(element);
13
+ }
14
+ if (isDOMElement(element)) {
15
+ return element;
16
+ }
17
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Array.prototype.findIndex ponyfill for old browsers.
3
+ */
4
+ export default function findIndex(array, predicate) {
5
+ for (var i = 0; i < array.length; i++) {
6
+ if (predicate(array[i])) return i;
7
+ }
8
+ return -1;
9
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Formats duration from 02:25:33 to 2h 25m 33s (separator is configurable, so possible to convert 02.33.44)
3
+ *
4
+ * @returns {string}
5
+ *
6
+ * @param {string|number} duration -- Duration as string or number
7
+ * @param {Function} i18n -- The translation function for translating the shown confirmation message - eg. plugin.i18n
8
+ * @param {string} separator -- The separator is used between time parts
9
+ */
10
+ export default (function (duration) {
11
+ var i18n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
12
+ var separator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ':';
13
+ var DURATION_LABELS = [i18n('durationSeconds', 's'), i18n('durationMinutes', 'm'), i18n('durationHours', 'h')];
14
+ var durationArray = duration.toString().split(separator).reverse();
15
+ return durationArray.map(function (part) {
16
+ return Number(part);
17
+ }).map(function () {
18
+ var part = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
19
+ var index = arguments.length > 1 ? arguments[1] : undefined;
20
+ return part > 0 ? "".concat(part).concat(DURATION_LABELS[index]) : '';
21
+ }).reverse().join(' ');
22
+ });
@@ -0,0 +1,32 @@
1
+ export var convertToLocaleNumber = function convertToLocaleNumber(value, language) {
2
+ if (!language || value !== 0 && !value) return value;
3
+ try {
4
+ var _value$toString$trim;
5
+ var splitValue = (_value$toString$trim = value.toString().trim()) === null || _value$toString$trim === void 0 ? void 0 : _value$toString$trim.match(/[a-z]+|[^a-z]+/gi);
6
+ var formattedValue = splitValue.map(function (val) {
7
+ return isNaN(val) ? val : new Intl.NumberFormat(language, {
8
+ maximumFractionDigits: 20
9
+ }).format(val);
10
+ });
11
+ return formattedValue.join(' ');
12
+ } catch (e) {
13
+ return value;
14
+ }
15
+ };
16
+ export var toInitialNumber = function toInitialNumber(value) {
17
+ var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.';
18
+ if (!value) {
19
+ return value;
20
+ }
21
+ return ((value === null || value === void 0 ? void 0 : value.toString()) || '').replace(new RegExp("[^0-9".concat(separator, "]"), 'g'), '').replace(',', '.');
22
+ };
23
+ export var getLocaleNumberSeparator = function getLocaleNumberSeparator() {
24
+ var language = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en-US';
25
+ var separator;
26
+ try {
27
+ separator = new Intl.NumberFormat(language).format('0.1') === '0.1' ? '.' : ',';
28
+ } catch (e) {
29
+ separator = '';
30
+ }
31
+ return separator;
32
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Formats resolution from 1200x800 to 1200 x 800 px
3
+ *
4
+ * @returns {string}
5
+ *
6
+ * @param {string} resolution -- Resolution as string
7
+ * @param {string} separator -- Separator that should be replaced
8
+ * @param {string} newSeparator -- Separator that should be placed
9
+ * @param {boolean} addPx -- Either add px at the end or not
10
+ */
11
+ export default (function () {
12
+ var resolution = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
13
+ var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';
14
+ var newSeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'x';
15
+ var addPx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
16
+ return resolution.replace(separator, " ".concat(newSeparator, " ")) + (addPx ? ' px' : '');
17
+ });
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Takes an Integer value of seconds (e.g. 83) and converts it into a human-readable formatted string (e.g. '1:10:23').
3
+ *
4
+ * @param {Integer} seconds
5
+ * @returns {string} the formatted seconds (e.g. '1:10:23' for 1 hour, 10 minutes and 23 seconds)
6
+ *
7
+ */
8
+ export default function formatSeconds(seconds) {
9
+ if (!seconds) return;
10
+ var formattedHours = Math.floor(seconds / 3600);
11
+ var formattedMinutes = Math.floor(seconds % 3600 / 60);
12
+ var formattedSeconds = Math.floor(seconds % 3600 % 60);
13
+ return "".concat(formattedHours ? "".concat(formattedHours, ":") : '').concat(String(formattedMinutes).padStart(2, 0), ":").concat(String(Math.floor(formattedSeconds % 60)).padStart(2, 0));
14
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Takes a file object and turns it into fileID, by converting file.name to lowercase,
3
+ * removing extra characters and adding type, size and lastModified
4
+ *
5
+ * @param {object} file
6
+ * @returns {string} the fileID
7
+ */
8
+ export default function generateFileId(file) {
9
+ // It's tempting to do `[items].filter(Boolean).join('-')` here, but that
10
+ // is slower! simple string concatenation is fast
11
+
12
+ var id = 'filerobot';
13
+ if (typeof file.name === 'string') {
14
+ id += '-' + encodeFilename(file.name.toLowerCase());
15
+ }
16
+ if (file.toFolder !== undefined) {
17
+ id += '-' + encodeFilename(file.toFolder.toLowerCase());
18
+ }
19
+ if (file.type !== undefined) {
20
+ id += '-' + file.type;
21
+ }
22
+ if (file.data) {
23
+ if (typeof file.data.relativePath === 'string') {
24
+ id += '-' + encodeFilename(file.data.relativePath.toLowerCase());
25
+ }
26
+
27
+ /**
28
+ * TODO: check the following comment after the commiting time,
29
+ * Removed the data size, and last modified, to make the id unified for the files
30
+ * so if a new version is being uploaded we will override the base on in the progress panel's activities if there
31
+ * If no issues reported about progress panel/activities related to this comment after some time, please remove it and improve the wrapper condition.
32
+ * related to this task: https://scaleflexhq.atlassian.net/browse/FRA-7291
33
+ */
34
+
35
+ // if (file.data.size !== undefined) {
36
+ // id += '-' + file.data.size
37
+ // }
38
+ // if (file.data.lastModified !== undefined) {
39
+ // id += '-' + file.data.lastModified
40
+ // }
41
+ }
42
+ return id;
43
+ }
44
+ function encodeFilename(name) {
45
+ var suffix = '';
46
+ return name.replace(/[^A-Z0-9]/ig, function (character) {
47
+ suffix += '-' + encodeCharacter(character);
48
+ return '/';
49
+ }) + suffix;
50
+ }
51
+ function encodeCharacter(character) {
52
+ return character.charCodeAt(0).toString(32);
53
+ }
@@ -0,0 +1,11 @@
1
+ import capitalizeFirstLetter from './capitalizeFirstLetter';
2
+ import lowercaseFirstLetter from './lowercaseFirstLetter';
3
+ export default (function () {
4
+ var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
5
+ if (typeof str === 'string') {
6
+ return str.split(' ').filter(Boolean).map(function (item, index) {
7
+ return (index === 0 ? lowercaseFirstLetter : capitalizeFirstLetter)(item.trim());
8
+ }).join('');
9
+ }
10
+ return str;
11
+ });
@@ -0,0 +1,9 @@
1
+ var toLowerCaseWithTrim = function toLowerCaseWithTrim(string) {
2
+ return string.toLowerCase().replaceAll(/ /g, '');
3
+ };
4
+ var adaptHexBoundries = function adaptHexBoundries() {
5
+ var startingHex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
6
+ var endingHex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
7
+ return [toLowerCaseWithTrim(startingHex), toLowerCaseWithTrim(endingHex)];
8
+ };
9
+ export default adaptHexBoundries;
@@ -0,0 +1,12 @@
1
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
2
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
5
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ var bufferToHex = function bufferToHex(buffer) {
8
+ return _toConsumableArray(new Uint8Array(buffer)).map(function (x) {
9
+ return x.toString(16).padStart(2, '0');
10
+ }).join('');
11
+ };
12
+ export default bufferToHex;
@@ -0,0 +1,36 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
7
+ import { IMAGE_START_HEX, IMAGE_END_HEX, FIFTY_KILO_BYTES } from '@scaleflex/widget-utils/lib/constants';
8
+ import bufferToHex from '@scaleflex/widget-utils/lib/generatePsdThumbnail/bufferToHex';
9
+ import generatePsdThumbnailHex from '@scaleflex/widget-utils/lib/generatePsdThumbnail/generatePsdThumbnailHex';
10
+ import generatePsdThumbnailBytes from '@scaleflex/widget-utils/lib/generatePsdThumbnail/generatePsdThumbnailBytes';
11
+ import adaptHexBoundries from '@scaleflex/widget-utils/lib/generatePsdThumbnail/adaptHexBoundries';
12
+ var generatePsdThumbnail = function generatePsdThumbnail(fileData) {
13
+ return new Promise(function (resolve, reject) {
14
+ try {
15
+ var previewChunk = fileData.slice(0, FIFTY_KILO_BYTES);
16
+ var _adaptHexBoundries = adaptHexBoundries(IMAGE_START_HEX, IMAGE_END_HEX),
17
+ _adaptHexBoundries2 = _slicedToArray(_adaptHexBoundries, 2),
18
+ hexStart = _adaptHexBoundries2[0],
19
+ hexEnd = _adaptHexBoundries2[1];
20
+ var buffer = new FileReader();
21
+ buffer.readAsArrayBuffer(previewChunk);
22
+ buffer.onload = function () {
23
+ var bufferHex = bufferToHex(buffer.result);
24
+ var imageHex = generatePsdThumbnailHex(bufferHex, hexStart, hexEnd);
25
+ var imageBytes = generatePsdThumbnailBytes(imageHex);
26
+ var blob = new Blob([imageBytes], {
27
+ type: 'image/jpeg'
28
+ });
29
+ resolve(URL.createObjectURL(blob));
30
+ };
31
+ } catch (err) {
32
+ reject(err);
33
+ }
34
+ });
35
+ };
36
+ export default generatePsdThumbnail;
@@ -0,0 +1,8 @@
1
+ var generatePsdThumbnailBytes = function generatePsdThumbnailBytes(imageHex) {
2
+ var bytes = new Uint8Array(imageHex.length / 2);
3
+ for (var i = 0; i < imageHex.length; i += 2) {
4
+ bytes[i / 2] = parseInt(imageHex.substring(i, i + 2), 16);
5
+ }
6
+ return bytes;
7
+ };
8
+ export default generatePsdThumbnailBytes;
@@ -0,0 +1,4 @@
1
+ var generatePsdThumbnailHex = function generatePsdThumbnailHex(bufferHex, imageHexStart, imageHexEnd) {
2
+ return bufferHex.substring(bufferHex.indexOf(imageHexStart), bufferHex.indexOf(imageHexEnd) + imageHexEnd.length);
3
+ };
4
+ export default generatePsdThumbnailHex;
@@ -0,0 +1,24 @@
1
+ var style = {
2
+ opacity: 1,
3
+ border: 0,
4
+ background: 'transparent',
5
+ padding: '5px 12px',
6
+ fontSize: 14
7
+ };
8
+
9
+ /**
10
+ * [TODO] We may remove this util when this feature implemented in Scaleflex UI
11
+ * @param {string} placeholder
12
+ * @param {value} string
13
+ * @param {value} Array
14
+ * @returns {Object} placeholder with styles
15
+ */
16
+
17
+ export default function generateSelectInputPlaceholder(placeholder) {
18
+ var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
19
+ if (value.length) return;
20
+ return {
21
+ placeholder: placeholder,
22
+ style: style
23
+ };
24
+ }
@@ -0,0 +1,17 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ 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; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ var getActionErrorState = function getActionErrorState(state, action) {
8
+ var _action$meta;
9
+ var noOtherStates = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
10
+ var showAbortError = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
11
+ var error = (_action$meta = action.meta) !== null && _action$meta !== void 0 && _action$meta.aborted && !showAbortError ? null : action.error;
12
+ return noOtherStates ? error : error && _objectSpread(_objectSpread({}, state), {}, {
13
+ error: error,
14
+ loading: false
15
+ }) || state;
16
+ };
17
+ export default getActionErrorState;
@@ -0,0 +1,12 @@
1
+ var getArraysMutualObjects = function getArraysMutualObjects() {
2
+ var arraysOfObjects = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
3
+ var propertyUsedInCompare = arguments.length > 1 ? arguments[1] : undefined;
4
+ return Array.isArray(arraysOfObjects) && propertyUsedInCompare && (arraysOfObjects.length > 1 ? arraysOfObjects.reduce(function (mutualObjectsArray, currArray) {
5
+ return currArray.filter(function (currObj) {
6
+ return mutualObjectsArray.some(function (mutualCurrObj) {
7
+ return mutualCurrObj[propertyUsedInCompare] === currObj[propertyUsedInCompare];
8
+ });
9
+ });
10
+ }) : arraysOfObjects[0]);
11
+ };
12
+ export default getArraysMutualObjects;
@@ -0,0 +1,9 @@
1
+ var getBytesRemaining = function getBytesRemaining(files) {
2
+ return files.reduce(function (total, file) {
3
+ if (!file.progress.bytesFinished) {
4
+ return total + (100 - file.progress.percentage);
5
+ }
6
+ return total + (file.progress.bytesTotal - file.progress.bytesFinished);
7
+ }, 0);
8
+ };
9
+ export default getBytesRemaining;
@@ -0,0 +1,5 @@
1
+ var getClientTimezone = function getClientTimezone() {
2
+ var _Intl, _Intl$DateTimeFormat, _Intl$DateTimeFormat$, _Intl$DateTimeFormat$2;
3
+ return ((_Intl = Intl) === null || _Intl === void 0 ? void 0 : (_Intl$DateTimeFormat = _Intl.DateTimeFormat) === null || _Intl$DateTimeFormat === void 0 ? void 0 : (_Intl$DateTimeFormat$ = (_Intl$DateTimeFormat$2 = _Intl$DateTimeFormat.call(_Intl)).resolvedOptions) === null || _Intl$DateTimeFormat$ === void 0 ? void 0 : _Intl$DateTimeFormat$.call(_Intl$DateTimeFormat$2).timeZone) || '';
4
+ };
5
+ export default getClientTimezone;
@@ -0,0 +1,23 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ /**
3
+ * Get url prefixed by Cloudimage, to be able to process original image and cache it on CDN.
4
+ * @param {string} url - Original URL
5
+ * @param {object} opts
6
+ * @param {object} opts.params - Cloudimage params (https://docs.scaleflex.com/filerobot-documentation/media-optimizers-and-cdn-delivery/image-optimization)
7
+ * @returns {string} - Prefixed url with params
8
+ */
9
+ var getCloudimagePrefixedUrl = function getCloudimagePrefixedUrl(url, opts) {
10
+ var _url$split;
11
+ var _ref = opts || {},
12
+ _ref$params = _ref.params,
13
+ params = _ref$params === void 0 ? {} : _ref$params;
14
+ if (typeof url !== 'string') {
15
+ return url;
16
+ }
17
+ var formattedUrl = (_url$split = url.split('?')) === null || _url$split === void 0 ? void 0 : _url$split[0];
18
+ var paramsStr = params && _typeof(params) === 'object' ? Object.keys(params).map(function (paramName) {
19
+ return "".concat(paramName, "=").concat(params[paramName]);
20
+ }).join('&') : '';
21
+ return "https://assets.filerobot.com/v7/".concat(formattedUrl).concat(paramsStr ? '?' : '').concat(paramsStr);
22
+ };
23
+ export default getCloudimagePrefixedUrl;
@@ -0,0 +1,17 @@
1
+ import { ONE_DAY_MS } from './constants';
2
+ var ONE_MIN_IN_MS = 1000 * 60;
3
+ /**
4
+ * Returns a date days from now
5
+ * @param {Number} days - sets the new date by adding the provided number of days for the current date
6
+ * @param {Boolean} timeExcluded - either to return timestamp with time (hours, minutes etc) or without
7
+ * @returns {number} - timestamp in milliseconds
8
+ */
9
+
10
+ export default (function (_ref) {
11
+ var days = _ref.days,
12
+ _ref$timeExcluded = _ref.timeExcluded,
13
+ timeExcluded = _ref$timeExcluded === void 0 ? true : _ref$timeExcluded;
14
+ var todayTimestamp = timeExcluded ? Date.now() - Date.now() % ONE_DAY_MS + new Date().getTimezoneOffset() * ONE_MIN_IN_MS : Date.now();
15
+ var now = new Date(todayTimestamp);
16
+ return now.setDate(now.getDate() + days);
17
+ });
@@ -0,0 +1,5 @@
1
+ import { ONE_DAY_MS } from './constants';
2
+ var getDateMinusDay = function getDateMinusDay(dateStr) {
3
+ return new Date(Date.parse(!dateStr || isNaN(new Date(dateStr)) ? new Date() : dateStr) - ONE_DAY_MS);
4
+ };
5
+ export default getDateMinusDay;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Returns a date in the all formats
3
+ */
4
+
5
+ export default function getDateString(format, spaceType, timeStamp) {
6
+ var dateObject = timeStamp ? new Date(timeStamp) : new Date();
7
+ var getMonth = dateObject.getMonth() + 1;
8
+ var getDay = dateObject.getDate();
9
+ var month = getMonth < 10 ? '0' + getMonth : getMonth;
10
+ var day = getDay < 10 ? '0' + getDay : getDay;
11
+ var year = dateObject.getFullYear();
12
+ switch (format) {
13
+ case 'mdy':
14
+ return month + spaceType + day + spaceType + year;
15
+ case 'dmy':
16
+ return day + spaceType + month + spaceType + year;
17
+ case 'ymd':
18
+ return year + spaceType + month + spaceType + day;
19
+ }
20
+ }
@@ -0,0 +1,9 @@
1
+ var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
2
+
3
+ var getDaysLeft = function getDaysLeft(date) {
4
+ var dateNow = Date.now();
5
+ var finalDay = new Date(date);
6
+ if (isNaN(finalDay)) return;
7
+ return -((dateNow - finalDay) / oneDay);
8
+ };
9
+ export default getDaysLeft;
@@ -0,0 +1,10 @@
1
+ var getDecodedUriComponent = function getDecodedUriComponent(value) {
2
+ var decodedValue = value;
3
+ if (typeof decodedValue === 'string') {
4
+ try {
5
+ decodedValue = decodeURIComponent(decodedValue);
6
+ } catch (e) {}
7
+ }
8
+ return decodedValue;
9
+ };
10
+ export default getDecodedUriComponent;
@@ -0,0 +1,7 @@
1
+ export default function getDownloadSpeed(_ref) {
2
+ var downloadStartedAt = _ref.downloadStartedAt,
3
+ downloaded = _ref.downloaded;
4
+ var timeElapsed = new Date() - downloadStartedAt;
5
+ var downloadSpeed = downloaded / (timeElapsed / 1000);
6
+ return downloadSpeed || 1;
7
+ }
@@ -0,0 +1,24 @@
1
+ import webkitGetAsEntryApi from './utils/webkitGetAsEntryApi/index';
2
+ import fallbackApi from './utils/fallbackApi';
3
+
4
+ /**
5
+ * Returns a promise that resolves to the array of dropped files (if a folder is dropped, and browser supports folder parsing - promise resolves to the flat array of all files in all directories).
6
+ * Each file has .relativePath prop appended to it (e.g. "/docs/Prague/ticket_from_prague_to_ufa.pdf") if browser supports it. Otherwise it's undefined.
7
+ *
8
+ * @param {DataTransfer} dataTransfer
9
+ * @param {Function} logDropError - a function that's called every time some folder or some file error out (e.g. because of the folder name being too long on Windows). Notice that resulting promise will always be resolved anyway.
10
+ *
11
+ * @returns {Promise} - Array<File>
12
+ */
13
+ export default function getDroppedFiles(dataTransfer) {
14
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
15
+ _ref$logDropError = _ref.logDropError,
16
+ logDropError = _ref$logDropError === void 0 ? function () {} : _ref$logDropError;
17
+ // Get all files from all subdirs. Works (at least) in Chrome, Mozilla, and Safari
18
+ if (dataTransfer.items && dataTransfer.items[0] && 'webkitGetAsEntry' in dataTransfer.items[0]) {
19
+ return webkitGetAsEntryApi(dataTransfer, logDropError);
20
+ // Otherwise just return all first-order files
21
+ } else {
22
+ return fallbackApi(dataTransfer);
23
+ }
24
+ }
@@ -0,0 +1,7 @@
1
+ import toArray from '../../toArray';
2
+
3
+ // .files fallback, should be implemented in any browser
4
+ export default function fallbackApi(dataTransfer) {
5
+ var files = toArray(dataTransfer.files);
6
+ return Promise.resolve(files);
7
+ }
@@ -0,0 +1,36 @@
1
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
2
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
5
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ /**
8
+ * Recursive function, calls the original callback() when the directory is entirely parsed.
9
+ *
10
+ * @param {FileSystemDirectoryReader} directoryReader
11
+ * @param {Array} oldEntries
12
+ * @param {Function} logDropError
13
+ * @param {Function} callback - called with ([ all files and directories in that directoryReader ])
14
+ */
15
+ export default function getFilesAndDirectoriesFromDirectory(directoryReader, oldEntries, logDropError, _ref) {
16
+ var onSuccess = _ref.onSuccess;
17
+ directoryReader.readEntries(function (entries) {
18
+ var newEntries = [].concat(_toConsumableArray(oldEntries), _toConsumableArray(entries));
19
+ // According to the FileSystem API spec, getFilesAndDirectoriesFromDirectory() must be called until it calls the onSuccess with an empty array.
20
+ if (entries.length) {
21
+ setTimeout(function () {
22
+ getFilesAndDirectoriesFromDirectory(directoryReader, newEntries, logDropError, {
23
+ onSuccess: onSuccess
24
+ });
25
+ }, 0);
26
+ // Done iterating this particular directory
27
+ } else {
28
+ onSuccess(newEntries);
29
+ }
30
+ },
31
+ // Make sure we resolve on error anyway, it's fine if only one directory couldn't be parsed!
32
+ function (error) {
33
+ logDropError(error);
34
+ onSuccess(oldEntries);
35
+ });
36
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Get the relative path from the FileEntry#fullPath, because File#webkitRelativePath is always '', at least onDrop.
3
+ *
4
+ * @param {FileEntry} fileEntry
5
+ *
6
+ * @returns {string|null} - if file is not in a folder - return null (this is to be consistent with .relativePath-s of files selected from My Device). If file is in a folder - return its fullPath, e.g. '/simpsons/hi.jpeg'.
7
+ */
8
+ export default function getRelativePath(fileEntry) {
9
+ // fileEntry.fullPath - "/simpsons/hi.jpeg" or undefined (for browsers that don't support it)
10
+ // fileEntry.name - "hi.jpeg"
11
+ if (!fileEntry.fullPath || fileEntry.fullPath === '/' + fileEntry.name) {
12
+ return null;
13
+ } else {
14
+ return fileEntry.fullPath;
15
+ }
16
+ }