@scaleflex/widget-utils 0.0.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 (227) hide show
  1. package/CHANGELOG.md +7100 -0
  2. package/LICENSE +21 -0
  3. package/README.md +58 -0
  4. package/lib/AbortController.js +20 -0
  5. package/lib/BlurHash/base83.js +10 -0
  6. package/lib/BlurHash/decode.js +80 -0
  7. package/lib/BlurHash/error.js +28 -0
  8. package/lib/BlurHash/utils.js +22 -0
  9. package/lib/CustomDate.js +157 -0
  10. package/lib/EventTracker.js +42 -0
  11. package/lib/FOCUSABLE_ELEMENTS.js +1 -0
  12. package/lib/LinkHelper.js +153 -0
  13. package/lib/NetworkError.js +30 -0
  14. package/lib/ProgressTimeout.js +45 -0
  15. package/lib/RateLimitedQueue.js +197 -0
  16. package/lib/RequestError.js +36 -0
  17. package/lib/Timeframes/getDateRange.js +45 -0
  18. package/lib/TranslationMissingKeysConsoleHelper.js +113 -0
  19. package/lib/Translator.js +200 -0
  20. package/lib/addUrlParams.js +27 -0
  21. package/lib/adjustUpdatedFolders.js +22 -0
  22. package/lib/asyncTimeout.js +6 -0
  23. package/lib/audioMimeTypes.js +3 -0
  24. package/lib/blobToDataURI.js +13 -0
  25. package/lib/callIfFunction.js +10 -0
  26. package/lib/canEditVideo.js +9 -0
  27. package/lib/canvasToBlob.js +18 -0
  28. package/lib/capitalizeFirstLetter.js +4 -0
  29. package/lib/checkConnection.js +4 -0
  30. package/lib/checkFileOrFolderNameValidation.js +4 -0
  31. package/lib/checkIfPngSvgGIF.js +3 -0
  32. package/lib/checkImageIfPngJpegOrWebpOrAvif.js +5 -0
  33. package/lib/checkItemsSupportExportWithReason.js +41 -0
  34. package/lib/checkPermissions.js +26 -0
  35. package/lib/cloudimageSupportedInputMimeTypes.js +2 -0
  36. package/lib/clsx.js +14 -0
  37. package/lib/constants.js +570 -0
  38. package/lib/convertBytesToMb.js +5 -0
  39. package/lib/convertGbToBytes.js +4 -0
  40. package/lib/convertVideoFileTypeToSupported.js +17 -0
  41. package/lib/copyText.js +25 -0
  42. package/lib/createFolderVirtualPath.js +14 -0
  43. package/lib/createThunk.js +349 -0
  44. package/lib/customEncodeURIComponent.js +47 -0
  45. package/lib/dataURItoBlob.js +33 -0
  46. package/lib/dataURItoFile.js +4 -0
  47. package/lib/dateStrToClearDateTime.js +20 -0
  48. package/lib/debounce.js +14 -0
  49. package/lib/deepEqual.js +23 -0
  50. package/lib/deepMerge.js +56 -0
  51. package/lib/deserializeFunction.js +5 -0
  52. package/lib/documentMimeTypes.js +2 -0
  53. package/lib/downloadFromBlob.js +16 -0
  54. package/lib/emitSocketProgress.js +18 -0
  55. package/lib/escapeRegExp.js +4 -0
  56. package/lib/extractFileDataNoBlob.js +12 -0
  57. package/lib/fetchWithNetworkError.js +14 -0
  58. package/lib/fieldsQueriesGetters.js +46 -0
  59. package/lib/findAllDOMElements.js +18 -0
  60. package/lib/findAllRegexMatchesInString.js +16 -0
  61. package/lib/findDOMElement.js +17 -0
  62. package/lib/findIndex.js +9 -0
  63. package/lib/formatDuration.js +22 -0
  64. package/lib/formatNumbers.js +32 -0
  65. package/lib/formatResolution.js +17 -0
  66. package/lib/formatSeconds.js +14 -0
  67. package/lib/generateFileId.js +53 -0
  68. package/lib/generateI18nKeyFromString.js +11 -0
  69. package/lib/generatePsdThumbnail/adaptHexBoundries.js +9 -0
  70. package/lib/generatePsdThumbnail/bufferToHex.js +12 -0
  71. package/lib/generatePsdThumbnail/generatePsdThumbnail.js +36 -0
  72. package/lib/generatePsdThumbnail/generatePsdThumbnailBytes.js +8 -0
  73. package/lib/generatePsdThumbnail/generatePsdThumbnailHex.js +4 -0
  74. package/lib/generateSelectInputPlaceholder.js +24 -0
  75. package/lib/getActionErrorState.js +17 -0
  76. package/lib/getArraysMutualObjects.js +12 -0
  77. package/lib/getBytesRemaining.js +9 -0
  78. package/lib/getClientTimezone.js +5 -0
  79. package/lib/getCloudimagePrefixedUrl.js +23 -0
  80. package/lib/getDateDaysFromNow.js +17 -0
  81. package/lib/getDateMinusDay.js +5 -0
  82. package/lib/getDateString.js +20 -0
  83. package/lib/getDaysLeft.js +9 -0
  84. package/lib/getDecodedUriComponent.js +10 -0
  85. package/lib/getDownloadSpeed.js +7 -0
  86. package/lib/getDroppedFiles/index.js +24 -0
  87. package/lib/getDroppedFiles/utils/fallbackApi.js +7 -0
  88. package/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js +36 -0
  89. package/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getRelativePath.js +16 -0
  90. package/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js +57 -0
  91. package/lib/getEncodedWrappedUrl.js +7 -0
  92. package/lib/getFileAssetsTokenUrl.js +14 -0
  93. package/lib/getFileCdnLink.js +6 -0
  94. package/lib/getFileDefaultIcon.js +14 -0
  95. package/lib/getFileDetails.js +81 -0
  96. package/lib/getFileExtension.js +32 -0
  97. package/lib/getFileLink.js +17 -0
  98. package/lib/getFileNameAndExtension.js +22 -0
  99. package/lib/getFileType.js +23 -0
  100. package/lib/getFileTypeExtension.js +22 -0
  101. package/lib/getFilterFileFormatIcon.js +6 -0
  102. package/lib/getFolderDetails.js +30 -0
  103. package/lib/getFormattedPreviewUrl.js +79 -0
  104. package/lib/getHoursAndMinutes.js +9 -0
  105. package/lib/getImageEditUrl.js +36 -0
  106. package/lib/getImgFileDimensions.js +25 -0
  107. package/lib/getItemIcon.js +112 -0
  108. package/lib/getItemPath.js +10 -0
  109. package/lib/getItemPreviewWidthHeight.js +10 -0
  110. package/lib/getItemsSizeInBytes.js +12 -0
  111. package/lib/getJsonParsedValue.js +11 -0
  112. package/lib/getLinkWithNewParams.js +13 -0
  113. package/lib/getMetadataMultiSelectQuery.js +66 -0
  114. package/lib/getNormalizedItems.js +55 -0
  115. package/lib/getObjectsMutualProperties.js +32 -0
  116. package/lib/getRandomNumber.js +12 -0
  117. package/lib/getSocketHost.js +7 -0
  118. package/lib/getSpeed.js +8 -0
  119. package/lib/getTime.js +18 -0
  120. package/lib/getTimeStamp.js +18 -0
  121. package/lib/handleError.js +13 -0
  122. package/lib/handlePressEnter.js +9 -0
  123. package/lib/handlePromise.js +39 -0
  124. package/lib/hasProperty.js +3 -0
  125. package/lib/hexToRgb.js +15 -0
  126. package/lib/htmlSanitizer.js +6 -0
  127. package/lib/humanReadableDate.js +45 -0
  128. package/lib/humanReadableDateWithTranslations.js +29 -0
  129. package/lib/i18n.client.js +54 -0
  130. package/lib/ignoreEvent.js +10 -0
  131. package/lib/index.js +0 -0
  132. package/lib/injectVirtualPathToFolders.js +24 -0
  133. package/lib/isAi.js +7 -0
  134. package/lib/isArchive.js +12 -0
  135. package/lib/isAudio.js +9 -0
  136. package/lib/isAudioAndSupportsPlayback.js +10 -0
  137. package/lib/isCloudimageFastPreviewSupported.js +16 -0
  138. package/lib/isDOMElement.js +9 -0
  139. package/lib/isDocument.js +10 -0
  140. package/lib/isDragDropSupported.js +20 -0
  141. package/lib/isEmptyObject.js +4 -0
  142. package/lib/isEps.js +8 -0
  143. package/lib/isFile.js +5 -0
  144. package/lib/isFileSupportedByCloudimage.js +14 -0
  145. package/lib/isFolder.js +4 -0
  146. package/lib/isFontFile.js +9 -0
  147. package/lib/isFunction.js +4 -0
  148. package/lib/isImage.js +11 -0
  149. package/lib/isJpg.js +8 -0
  150. package/lib/isMobileDevice.js +12 -0
  151. package/lib/isNetworkError.js +7 -0
  152. package/lib/isNumber.js +4 -0
  153. package/lib/isObjectType.js +5 -0
  154. package/lib/isObjectURL.js +10 -0
  155. package/lib/isOpenedFromAdobe.js +3 -0
  156. package/lib/isOtf.js +10 -0
  157. package/lib/isPdf.js +9 -0
  158. package/lib/isPhotoshopFile.js +8 -0
  159. package/lib/isPreviewSupported.js +12 -0
  160. package/lib/isPromise.js +5 -0
  161. package/lib/isPsd.js +8 -0
  162. package/lib/isScriptFile.js +12 -0
  163. package/lib/isSupportedVideo.js +8 -0
  164. package/lib/isSvg.js +5 -0
  165. package/lib/isTextFile.js +8 -0
  166. package/lib/isThumbnailCloudimgSupported.js +13 -0
  167. package/lib/isThumbnailLocallySupported.js +9 -0
  168. package/lib/isTiff.js +8 -0
  169. package/lib/isTransparencySupported.js +12 -0
  170. package/lib/isTtf.js +11 -0
  171. package/lib/isUploadableFile.js +7 -0
  172. package/lib/isUrl.js +5 -0
  173. package/lib/isValidUri.js +18 -0
  174. package/lib/isVideo.js +8 -0
  175. package/lib/isVideoResourceIntensive.js +9 -0
  176. package/lib/literalDateFromDateObj.js +6 -0
  177. package/lib/logErrorIfDevEnv.js +7 -0
  178. package/lib/lowercaseFirstLetter.js +4 -0
  179. package/lib/mapArrayByStep.js +12 -0
  180. package/lib/metadata/checkFieldValidation.js +51 -0
  181. package/lib/metadata/generateItemMetadataState.js +63 -0
  182. package/lib/metadata/generateMetadataDefaultState.js +30 -0
  183. package/lib/metadata/getFileCustomMetadataGroups.js +23 -0
  184. package/lib/metadata/getGeoPointValidationErrors.js +32 -0
  185. package/lib/metadata/getMetaAttachmentFields.js +9 -0
  186. package/lib/metadata/getMetadataEmptyAssets.js +28 -0
  187. package/lib/metadata/getMetadataFieldGeoPointValue.js +42 -0
  188. package/lib/metadata/getMetadataFieldVariantValue.js +31 -0
  189. package/lib/metadata/getMetadataGroups.js +16 -0
  190. package/lib/metadata/getRequiredMetadataFields.js +13 -0
  191. package/lib/metadata/isM0LegacyMetaVersion.js +5 -0
  192. package/lib/metadata/isM1EdgyMetaVersion.js +5 -0
  193. package/lib/metadata/mapMetaAttachmentsObjsToUuids.js +21 -0
  194. package/lib/metadata/updateValidationErrors.js +59 -0
  195. package/lib/metadata/validateItemMetadata.js +70 -0
  196. package/lib/mimeTypes.js +60 -0
  197. package/lib/nanoid.js +18 -0
  198. package/lib/openLink.js +3 -0
  199. package/lib/openLinkInNewTab.js +12 -0
  200. package/lib/prettyETA.js +15 -0
  201. package/lib/prettyFileSize.js +7 -0
  202. package/lib/preventDefault.js +4 -0
  203. package/lib/provideSvgStrWithCurrColor.js +10 -0
  204. package/lib/recursiveFnCall.js +26 -0
  205. package/lib/removeAllUrlParams.js +4 -0
  206. package/lib/removeDuplicatesFromArray.js +20 -0
  207. package/lib/removeEmptyFolders.js +8 -0
  208. package/lib/removeFileExtension.js +4 -0
  209. package/lib/removeUrlParamsWithRegex.js +14 -0
  210. package/lib/reorder.js +15 -0
  211. package/lib/requestFile.js +36 -0
  212. package/lib/rgbToHex.js +4 -0
  213. package/lib/secondsToTime.js +10 -0
  214. package/lib/serializeFunction.js +4 -0
  215. package/lib/settle.js +19 -0
  216. package/lib/sortEntitiesByName.js +18 -0
  217. package/lib/splitCamelCase.js +4 -0
  218. package/lib/splitPathToPathsAndNames.js +25 -0
  219. package/lib/stopPropagation.js +4 -0
  220. package/lib/styledComponentsMixins/truncate.mixin.js +8 -0
  221. package/lib/timeZones.js +1 -0
  222. package/lib/toArray.js +6 -0
  223. package/lib/toLowerCase.js +5 -0
  224. package/lib/toggleElementFullscreen.js +27 -0
  225. package/lib/visibility.js +39 -0
  226. package/package.json +25 -0
  227. package/types/index.d.ts +279 -0
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Checks if the browser supports Drag & Drop (not supported on mobile devices, for example).
3
+ * @property {HTMLElement} htmlElement
4
+ * @returns {boolean}
5
+ */
6
+ export default function isDragDropSupported(htmlElement) {
7
+ var element = htmlElement || document.createElement('div');
8
+ if (element !== document) {
9
+ if (!('draggable' in element) || !('ondragstart' in element && 'ondrop' in element)) {
10
+ return false;
11
+ }
12
+ }
13
+ if (!('FormData' in window)) {
14
+ return false;
15
+ }
16
+ if (!('FileReader' in window)) {
17
+ return false;
18
+ }
19
+ return true;
20
+ }
@@ -0,0 +1,4 @@
1
+ var isEmptyObject = function isEmptyObject(value) {
2
+ return Object.keys(value).length === 0 && value.constructor === Object;
3
+ };
4
+ export default isEmptyObject;
package/lib/isEps.js ADDED
@@ -0,0 +1,8 @@
1
+ import getFileType from './getFileType';
2
+ import mimeTypes from './mimeTypes';
3
+ export default function isEps(file) {
4
+ if (!file) {
5
+ return false;
6
+ }
7
+ return getFileType(file).toLowerCase() === mimeTypes.eps;
8
+ }
package/lib/isFile.js ADDED
@@ -0,0 +1,5 @@
1
+ import isFolder from './isFolder';
2
+ var isFile = function isFile(item) {
3
+ return !isFolder(item);
4
+ };
5
+ export default isFile;
@@ -0,0 +1,14 @@
1
+ import cloudimageSupportedInputMimiTypes from './cloudimageSupportedInputMimeTypes';
2
+ import getFileType from './getFileType';
3
+
4
+ /**
5
+ * Check if the selected item type is supported input for cloudimage
6
+ *
7
+ * @param {object} item
8
+ * @returns {Boolean}
9
+ */
10
+
11
+ var isFileSupportedByCloudimage = function isFileSupportedByCloudimage(file) {
12
+ return cloudimageSupportedInputMimiTypes.includes(getFileType(file));
13
+ };
14
+ export default isFileSupportedByCloudimage;
@@ -0,0 +1,4 @@
1
+ var isFolder = function isFolder(item) {
2
+ return (item === null || item === void 0 ? void 0 : item.isFolder) || (item === null || item === void 0 ? void 0 : item.type) === 'folder' || Boolean(item.path);
3
+ };
4
+ export default isFolder;
@@ -0,0 +1,9 @@
1
+ import mimeTypes from './mimeTypes';
2
+ import getFileType from './getFileType';
3
+ var isFontFile = function isFontFile() {
4
+ var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
5
+ if (!file) return false;
6
+ var fileType = getFileType(file).toLowerCase();
7
+ return fileType.toLowerCase().includes('font') || fileType === mimeTypes.otf || fileType === mimeTypes.ttf || fileType === mimeTypes.xttf || fileType === mimeTypes.sfnt;
8
+ };
9
+ export default isFontFile;
@@ -0,0 +1,4 @@
1
+ var isFunction = function isFunction(func) {
2
+ return typeof func === 'function';
3
+ };
4
+ export default isFunction;
package/lib/isImage.js ADDED
@@ -0,0 +1,11 @@
1
+ import getFileType from './getFileType';
2
+ export default function isImage() {
3
+ var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4
+ if (!file) {
5
+ return false;
6
+ }
7
+
8
+ // More determined logic as some mimeTypes like photoshop has (image/vnd.photoshop...)
9
+ // which shouldn't be treated as image in that case.
10
+ return /^image\/(jpeg|jpg|png|gif|apng|avif|heif|heic|svg\+xml|svg|webp|x-icon|bmp|x-ms-bmp|tiff|vnd\.microsoft\.icon)$/.test(getFileType(file).toLowerCase());
11
+ }
package/lib/isJpg.js ADDED
@@ -0,0 +1,8 @@
1
+ import getFileType from './getFileType';
2
+ import mimeTypes from './mimeTypes';
3
+ export default function isJpg(file) {
4
+ if (!file) {
5
+ return false;
6
+ }
7
+ return getFileType(file).toLowerCase() === mimeTypes.jpg;
8
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Checks if current device reports itself as “mobile”.
3
+ * Very simple, not very reliable.
4
+ *
5
+ * @returns {boolean}
6
+ */
7
+ export default function isMobileDevice() {
8
+ if (typeof window !== 'undefined' && window.navigator && window.navigator.userAgent && window.navigator.userAgent.match(/Mobi/)) {
9
+ return true;
10
+ }
11
+ return false;
12
+ }
@@ -0,0 +1,7 @@
1
+ function isNetworkError(xhr) {
2
+ if (!xhr) {
3
+ return false;
4
+ }
5
+ return xhr.readyState !== 0 && xhr.readyState !== 4 || xhr.status === 0;
6
+ }
7
+ export default isNetworkError;
@@ -0,0 +1,4 @@
1
+ var isNumber = function isNumber(value) {
2
+ return Number.isFinite(value);
3
+ };
4
+ export default isNumber;
@@ -0,0 +1,5 @@
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
+ var isObjectType = function isObjectType(variable) {
3
+ return _typeof(variable) === 'object' && !Array.isArray(variable) && variable !== null;
4
+ };
5
+ export default isObjectType;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Check if a URL string is an object URL from `URL.createObjectURL`.
3
+ *
4
+ * @param {string} url
5
+ * @returns {boolean}
6
+ */
7
+ export default function isObjectURL() {
8
+ var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
9
+ return url.indexOf('blob:') === 0;
10
+ }
@@ -0,0 +1,3 @@
1
+ export default function isOpenedFromAdobe() {
2
+ return Boolean(window.cep);
3
+ }
package/lib/isOtf.js ADDED
@@ -0,0 +1,10 @@
1
+ import mimeTypes from './mimeTypes';
2
+ import getFileType from './getFileType';
3
+ var isOtf = function isOtf(file) {
4
+ if (!file) {
5
+ return false;
6
+ }
7
+ var fileType = getFileType(file).toLowerCase();
8
+ return fileType === mimeTypes.otf || file.name.includes('.otf');
9
+ };
10
+ export default isOtf;
package/lib/isPdf.js ADDED
@@ -0,0 +1,9 @@
1
+ import getFileType from './getFileType';
2
+ import mimeTypes from './mimeTypes';
3
+ var PDF_MIME_TYPES = [mimeTypes.pdf, mimeTypes.postScript];
4
+ export default function isPdf(file) {
5
+ if (!file) {
6
+ return false;
7
+ }
8
+ return PDF_MIME_TYPES.includes(getFileType(file).toLowerCase());
9
+ }
@@ -0,0 +1,8 @@
1
+ import getFileType from './getFileType';
2
+ import mimeTypes from './mimeTypes';
3
+ export default function isPhotoshopFile(file) {
4
+ if (!file) {
5
+ return false;
6
+ }
7
+ return getFileType(file).toLowerCase() === mimeTypes.psd;
8
+ }
@@ -0,0 +1,12 @@
1
+ import isImage from './isImage';
2
+ import isPdf from './isPdf';
3
+ import isOpenedFromAdobe from './isOpenedFromAdobe';
4
+ import isSupportedVideo from './isSupportedVideo';
5
+ import isFontFile from './isFontFile';
6
+ export default function isPreviewSupported(file) {
7
+ // Checking if we could show a preview for this item or not
8
+ if (isImage(file) || isPdf(file) && !isOpenedFromAdobe() || isSupportedVideo(file) && !isOpenedFromAdobe() || isFontFile(file)) {
9
+ return true;
10
+ }
11
+ return false;
12
+ }
@@ -0,0 +1,5 @@
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
+ var isPromise = function isPromise(obj) {
3
+ return obj && (obj instanceof Promise || (_typeof(obj) === 'object' || typeof obj === 'function') && typeof obj.then === 'function' && typeof obj["catch"] === 'function');
4
+ };
5
+ export default isPromise;
package/lib/isPsd.js ADDED
@@ -0,0 +1,8 @@
1
+ import getFileType from './getFileType';
2
+ import mimeTypes from './mimeTypes';
3
+ export default function isPsd(file) {
4
+ if (!file) {
5
+ return false;
6
+ }
7
+ return getFileType(file).toLowerCase() === mimeTypes.psd;
8
+ }
@@ -0,0 +1,12 @@
1
+ import getFileExtension from './getFileExtension';
2
+ export default function isScriptFile() {
3
+ var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4
+ if (!file) {
5
+ return false;
6
+ }
7
+ var scriptExtensions = ['js', 'py', 'sh', 'php', 'jsx', 'tsx'];
8
+ var fileType = getFileExtension(file).toLowerCase();
9
+ return scriptExtensions.some(function (ext) {
10
+ return fileType === ext;
11
+ });
12
+ }
@@ -0,0 +1,8 @@
1
+ import getFileType from './getFileType';
2
+ export default function isSupportedVideo() {
3
+ var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4
+ if (!file) {
5
+ return false;
6
+ }
7
+ return /^video\/(mp4|quicktime|3gpp|x-msvideo|webm|x-matroska)/.test(getFileType(file).toLowerCase());
8
+ }
package/lib/isSvg.js ADDED
@@ -0,0 +1,5 @@
1
+ import getFileType from './getFileType';
2
+ var isSvg = function isSvg(file) {
3
+ return getFileType(file) === 'image/svg+xml';
4
+ };
5
+ export default isSvg;
@@ -0,0 +1,8 @@
1
+ import getFileType from './getFileType';
2
+ export default function isTextFile() {
3
+ var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4
+ if (!file) {
5
+ return false;
6
+ }
7
+ return /^text\/(plain|markdown|yaml|tab-separated-values)/.test(getFileType(file).toLowerCase());
8
+ }
@@ -0,0 +1,13 @@
1
+ import isAi from './isAi';
2
+ import isEps from './isEps';
3
+ import isFontFile from './isFontFile';
4
+ import isImage from './isImage';
5
+ import isPdf from './isPdf';
6
+ import isPhotoshopFile from './isPhotoshopFile';
7
+ export default function isThumbnailCloudimgSupported(file) {
8
+ // Checking if we could show a preview for this item or not
9
+ if (isImage(file) || isPdf(file) || isPhotoshopFile(file) || isEps(file) || isAi(file) || isFontFile(file)) {
10
+ return true;
11
+ }
12
+ return false;
13
+ }
@@ -0,0 +1,9 @@
1
+ import isImage from './isImage';
2
+ import isPhotoshopFile from './isPhotoshopFile';
3
+ export default function isThumbnailLocallySupported(file) {
4
+ // Checking if we could show a preview for this item or not
5
+ if (isImage(file) || isPhotoshopFile(file)) {
6
+ return true;
7
+ }
8
+ return false;
9
+ }
package/lib/isTiff.js ADDED
@@ -0,0 +1,8 @@
1
+ import getFileType from './getFileType';
2
+ import mimeTypes from './mimeTypes';
3
+ export default function isTiff(file) {
4
+ if (!file) {
5
+ return false;
6
+ }
7
+ return getFileType(file).toLowerCase() === mimeTypes.tiff;
8
+ }
@@ -0,0 +1,12 @@
1
+ import isSvg from '@scaleflex/widget-utils/lib/isSvg';
2
+ import isTiff from './isTiff';
3
+ export default function isTransparencySupported(file) {
4
+ var _file$type, _file$type2, _file$type3;
5
+ if (!file) {
6
+ return false;
7
+ }
8
+ var isPng = (_file$type = file.type) === null || _file$type === void 0 ? void 0 : _file$type.includes('png');
9
+ var isGif = (_file$type2 = file.type) === null || _file$type2 === void 0 ? void 0 : _file$type2.includes('gif');
10
+ var isBmp = (_file$type3 = file.type) === null || _file$type3 === void 0 ? void 0 : _file$type3.includes('bmp');
11
+ return isPng || isGif || isBmp || isSvg(file) || isTiff(file);
12
+ }
package/lib/isTtf.js ADDED
@@ -0,0 +1,11 @@
1
+ import { TTF_FONT_MIME_TYPES } from './constants';
2
+ import getFileType from './getFileType';
3
+ var isTtf = function isTtf(file) {
4
+ var _file$name, _file$name$toLowerCas;
5
+ if (!file) {
6
+ return false;
7
+ }
8
+ var fileType = getFileType(file).toLowerCase();
9
+ return TTF_FONT_MIME_TYPES.includes(fileType) && ((_file$name = file.name) === null || _file$name === void 0 ? void 0 : (_file$name$toLowerCas = _file$name.toLowerCase()) === null || _file$name$toLowerCas === void 0 ? void 0 : _file$name$toLowerCas.includes('.ttf'));
10
+ };
11
+ export default isTtf;
@@ -0,0 +1,7 @@
1
+ // as uploadStep is a property of the files being uploaded, also id is specificed in the files being uploaded
2
+ // cause the files found on backend are using uuid instead of id.
3
+ var isUploadableFile = function isUploadableFile() {
4
+ var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
5
+ return file ? Boolean(file.uploadStep || file.id) : false;
6
+ };
7
+ export default isUploadableFile;
package/lib/isUrl.js ADDED
@@ -0,0 +1,5 @@
1
+ var isUrl = function isUrl() {
2
+ var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
3
+ return url.startsWith('http://') || url.startsWith('https://');
4
+ };
5
+ export default isUrl;
@@ -0,0 +1,18 @@
1
+ var VALID_PROTOCOLS = ['http', 'https', 'ftp'];
2
+ var isValidUri = function isValidUri() {
3
+ var uri = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
4
+ if (typeof uri !== 'string') {
5
+ return false;
6
+ }
7
+
8
+ // to prevent javascript: for some security reasons
9
+ if (uri.trim().toLowerCase().startsWith('javascript:')) {
10
+ return false;
11
+ }
12
+ var isProtocol = VALID_PROTOCOLS.some(function (protocol) {
13
+ return uri === null || uri === void 0 ? void 0 : uri.startsWith(protocol);
14
+ });
15
+ var uriRex = isProtocol ? /^(http|https|ftp):\/\/[^\s.]+\.[^\s]+$/ : /^(www\.[^:/]+\.[^/]+|[^:/]+:[^/]+)$/;
16
+ return uriRex.test(uri);
17
+ };
18
+ export default isValidUri;
package/lib/isVideo.js ADDED
@@ -0,0 +1,8 @@
1
+ import getFileType from './getFileType';
2
+ export default function isVideo() {
3
+ var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4
+ if (!file) {
5
+ return false;
6
+ }
7
+ return /^video\/(mp4|m4p|m4v|quicktime|3gpp|x-msvideo|webm|x-matroska|x-ms-wmv|x-ms-asf|MP2T|x-flv|ogg)/.test(getFileType(file).toLowerCase());
8
+ }
@@ -0,0 +1,9 @@
1
+ export var isVideoResourceIntensive = function isVideoResourceIntensive(file) {
2
+ return file.info.img_w > 720 ||
3
+ // width greater than 720px
4
+ file.info.img_h > 720 ||
5
+ // height greater than 720px
6
+ file.info.video_duration > 5 * 60 ||
7
+ // video duration greater than 5 minutes
8
+ file.size > 100 * 1024 * 1024;
9
+ }; // size greater than 100 MB
@@ -0,0 +1,6 @@
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
+ var literalDateFromDateObj = function literalDateFromDateObj(date) {
3
+ var _date$toISOString;
4
+ return _typeof(date) === 'object' ? (_date$toISOString = date.toISOString()) === null || _date$toISOString === void 0 ? void 0 : _date$toISOString.split('T')[0] : '';
5
+ };
6
+ export default literalDateFromDateObj;
@@ -0,0 +1,7 @@
1
+ var logErrorIfDevEnv = function logErrorIfDevEnv(error) {
2
+ var isDev = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3
+ if (error && (isDev || process.env.NODE_ENV === 'development')) {
4
+ console.error("[Development env. error]: ".concat(error.stack || error.message || (error === null || error === void 0 ? void 0 : error.toString()) || error));
5
+ }
6
+ };
7
+ export default logErrorIfDevEnv;
@@ -0,0 +1,4 @@
1
+ export default (function () {
2
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
3
+ return value.charAt(0).toLowerCase() + value.slice(1);
4
+ });
@@ -0,0 +1,12 @@
1
+ var mapArrayByStep = function mapArrayByStep() {
2
+ var array = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
3
+ var startIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
4
+ var step = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
5
+ var callback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function () {};
6
+ var mapped = [];
7
+ for (var i = startIndex; i < array.length; i += step) {
8
+ mapped.push(callback(array[i]));
9
+ }
10
+ return mapped;
11
+ };
12
+ export default mapArrayByStep;
@@ -0,0 +1,51 @@
1
+ import getGeoPointValidationErrors from './getGeoPointValidationErrors';
2
+ import isValidUri from '../isValidUri';
3
+
4
+ /**
5
+ * Check is metadata field value valid
6
+ * @param {(string|number|array)} value
7
+ * @param {string} [fieldValidation]
8
+ * @param {boolean} [required]
9
+ * @returns {(boolean|string)} - If TRUE field is valid, if FALSE or message field is not valid.
10
+ * @param {boolean} [canEdit=true]
11
+ */
12
+ function checkFieldValidation(_ref) {
13
+ var fieldValue = _ref.fieldValue,
14
+ fieldValidation = _ref.fieldValidation,
15
+ isFieldRequired = _ref.isFieldRequired,
16
+ _ref$editable = _ref.editable,
17
+ editable = _ref$editable === void 0 ? true : _ref$editable,
18
+ i18n = _ref.i18n,
19
+ fieldType = _ref.fieldType;
20
+ if (isFieldRequired && editable && (!fieldValue || Array.isArray(fieldValue) && !fieldValue.length)) {
21
+ return typeof i18n === 'function' ? i18n('mutualizedFieldRequired') : 'Field is required!';
22
+ }
23
+
24
+ /**
25
+ * When field is required but current user can't edit the field, we have to set that current value is valid to unlock other fields save.
26
+ */
27
+ if (isFieldRequired && !editable) {
28
+ return true;
29
+ }
30
+ if (fieldType === 'attachment-uri' && !isValidUri(fieldValue) && fieldValue) {
31
+ return false;
32
+ }
33
+ if (fieldType === 'geopoint' && Object.keys(getGeoPointValidationErrors({
34
+ geoPoint: fieldValue
35
+ })).length > 0 && fieldValue) {
36
+ return false;
37
+ }
38
+ if (!fieldValidation) {
39
+ // If no fieldValidation rules return TRUE (field valid)
40
+ return true;
41
+ }
42
+ if (typeof fieldValidation !== 'string') {
43
+ console.warn('Metadata field validation: support string only!', {
44
+ fieldValue: fieldValue,
45
+ fieldValidation: fieldValidation
46
+ });
47
+ return true;
48
+ }
49
+ return new RegExp(fieldValidation).test(fieldValue) ? true : "String \"".concat(fieldValue, "\" not match regexp ").concat(fieldValidation);
50
+ }
51
+ export default checkFieldValidation;
@@ -0,0 +1,63 @@
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
+ import generateMetadataDefaultState from '@scaleflex/widget-utils/lib/metadata/generateMetadataDefaultState';
8
+
9
+ /**
10
+ * @param {object[]} metaDataGroups
11
+ * @param {object} item - File or folder
12
+ * @param {object[]} metaRegionalGroups
13
+ * @returns {object} - Item metadata state
14
+ */
15
+ export function generateItemMetadataState(metaDataGroups, item, metaRegionalGroups) {
16
+ var defaultState = generateMetadataDefaultState(metaDataGroups, metaRegionalGroups);
17
+ var itemMetadataState = _objectSpread(_objectSpread({}, defaultState), JSON.parse(JSON.stringify(item.meta || {})));
18
+
19
+ /**
20
+ * Sometimes we have cases when field had simple value like string (ex: {title: "My title"}) and then
21
+ * field config was changed and now we have regional_variants. Now {title: {en: "Eng title", fr: "title"}}
22
+ */
23
+ (metaDataGroups || []).forEach(function (group) {
24
+ ((group || {}).fields || []).forEach(function (field) {
25
+ var _metaRegionalGroups$f;
26
+ var fieldRegionalVariants = metaRegionalGroups === null || metaRegionalGroups === void 0 ? void 0 : (_metaRegionalGroups$f = metaRegionalGroups.find(function (group) {
27
+ return group.uuid === (field === null || field === void 0 ? void 0 : field.regional_variants_group_uuid);
28
+ })) === null || _metaRegionalGroups$f === void 0 ? void 0 : _metaRegionalGroups$f.variants;
29
+ var fieldHasRegionalVars = (fieldRegionalVariants || []).length > 0;
30
+ var isStateValueObject = _typeof(itemMetadataState[field.key]) === 'object' && !Array.isArray(itemMetadataState[field.key]) && itemMetadataState[field.key] !== null;
31
+ if (fieldHasRegionalVars && !isStateValueObject || !fieldHasRegionalVars && isStateValueObject) {
32
+ itemMetadataState[field.key] = defaultState[field.key];
33
+ }
34
+ if ((field === null || field === void 0 ? void 0 : field.type) === 'tags' && fieldHasRegionalVars) {
35
+ // Fix bug https://sfx.li/6AGcWPsVyfZakK (also we need 2 fixed: BE and @scaleflex/ui)
36
+ itemMetadataState[field.key] = itemMetadataState[field.key] || {};
37
+ fieldRegionalVariants.forEach(function (regVar) {
38
+ var _itemMetadataState$fi;
39
+ var value = (_itemMetadataState$fi = itemMetadataState[field.key]) === null || _itemMetadataState$fi === void 0 ? void 0 : _itemMetadataState$fi[regVar === null || regVar === void 0 ? void 0 : regVar.api_value];
40
+ itemMetadataState[field.key][regVar === null || regVar === void 0 ? void 0 : regVar.api_value] = adaptStringifiedArray(value);
41
+ });
42
+ }
43
+ });
44
+ });
45
+ return itemMetadataState;
46
+ }
47
+ function adaptStringifiedArray(value) {
48
+ if (value) {
49
+ if (Array.isArray(value)) {
50
+ return value;
51
+ } else if (typeof value === 'string') {
52
+ try {
53
+ var arrayVal = JSON.parse(value);
54
+ if (arrayVal && Array.isArray(arrayVal)) {
55
+ return arrayVal;
56
+ }
57
+ } catch (error) {
58
+ console.warn("Meta tag field has not valid value, must be an array but we receive \"".concat(value, "\""));
59
+ }
60
+ }
61
+ }
62
+ return [];
63
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @param {{fields: object}[]} metabaseGroups
3
+ * @param {object[]} metaRegionalGroups
4
+ * @returns {object}
5
+ */
6
+ function generateMetadataDefaultState(metabaseGroups, metaRegionalGroups) {
7
+ var defaultMetadata = {};
8
+ (metabaseGroups || []).forEach(function (group) {
9
+ ((group || {}).fields || []).filter(function (field) {
10
+ return field.key;
11
+ }).forEach(function (field) {
12
+ var _metaRegionalGroups$f;
13
+ var value = typeof field.default_value !== 'undefined' ? field.default_value : ['tags', 'multi-select'].indexOf(field.type) > -1 ? [] : null;
14
+ var fieldRegionalVariants = metaRegionalGroups === null || metaRegionalGroups === void 0 ? void 0 : (_metaRegionalGroups$f = metaRegionalGroups.find(function (group) {
15
+ return group.uuid === (field === null || field === void 0 ? void 0 : field.regional_variants_group_uuid);
16
+ })) === null || _metaRegionalGroups$f === void 0 ? void 0 : _metaRegionalGroups$f.variants;
17
+ if (fieldRegionalVariants && Array.isArray(fieldRegionalVariants)) {
18
+ defaultMetadata[field.key] = defaultMetadata[field.key] || {};
19
+ fieldRegionalVariants.forEach(function (_ref) {
20
+ var regionalVariantKey = _ref.api_value;
21
+ defaultMetadata[field.key][regionalVariantKey] = value;
22
+ });
23
+ } else {
24
+ defaultMetadata[field.key] = value;
25
+ }
26
+ });
27
+ });
28
+ return defaultMetadata;
29
+ }
30
+ export default generateMetadataDefaultState;
@@ -0,0 +1,23 @@
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 { METADATA_MODEL_TYPE_IDS } from '../constants';
8
+ var getFileCustomMetadataGroup = function getFileCustomMetadataGroup(metadataModel) {
9
+ var _metadataModel$filter;
10
+ var customMetadataGroups = [];
11
+ metadataModel === null || metadataModel === void 0 ? void 0 : (_metadataModel$filter = metadataModel.filter(function (_ref) {
12
+ var appliesTo = _ref.applies_to;
13
+ return appliesTo === METADATA_MODEL_TYPE_IDS.FILES;
14
+ })) === null || _metadataModel$filter === void 0 ? void 0 : _metadataModel$filter.forEach(function (_ref2) {
15
+ var _ref3;
16
+ var groups = _ref2.groups;
17
+ customMetadataGroups.push.apply(customMetadataGroups, _toConsumableArray((_ref3 = groups || []) === null || _ref3 === void 0 ? void 0 : _ref3.filter(function (group) {
18
+ return !group.isRoot;
19
+ })));
20
+ });
21
+ return customMetadataGroups;
22
+ };
23
+ export default getFileCustomMetadataGroup;
@@ -0,0 +1,32 @@
1
+ import { MAX_LONGITUDE, MIN_LONGITUDE, MAX_LATITUDE, MIN_LATITUDE } from '@scaleflex/widget-common/lib/MetaData/MetaDataFieldTypes/MetadataGeoPointField/constants';
2
+ import getMetadataFieldGeoPointValue from './getMetadataFieldGeoPointValue';
3
+ var getGeoPointValidationErrors = function getGeoPointValidationErrors(_ref) {
4
+ var _ref$geoPoint = _ref.geoPoint,
5
+ geoPoint = _ref$geoPoint === void 0 ? '' : _ref$geoPoint,
6
+ _ref$showDistanceFiel = _ref.showDistanceField,
7
+ showDistanceField = _ref$showDistanceFiel === void 0 ? false : _ref$showDistanceFiel;
8
+ if (!geoPoint || typeof geoPoint !== 'string') return {};
9
+ var baseGeoPoint = geoPoint.replace('~', '');
10
+ var errors = {};
11
+ var _ref2 = getMetadataFieldGeoPointValue(baseGeoPoint, showDistanceField) || {},
12
+ longitude = _ref2.longitude,
13
+ latitude = _ref2.latitude,
14
+ distance = _ref2.distance;
15
+ if (!longitude && !latitude) {
16
+ return errors;
17
+ }
18
+ var longitudeNum = Number(longitude);
19
+ var latitudeNum = Number(latitude);
20
+ var isLongitudeValid = longitudeNum >= MIN_LONGITUDE && longitudeNum <= MAX_LONGITUDE;
21
+ var isLatitudeValid = latitudeNum >= MIN_LATITUDE && latitudeNum <= MAX_LATITUDE;
22
+ if (showDistanceField && !distance) errors.distance = 'metadataDistanceGeoPointFieldError';
23
+ if (!isLongitudeValid) errors.longitude = 'metadataLongitudeGeoPointLimitFieldError';
24
+ if (!isLatitudeValid) errors.latitude = 'metadataLatitudeGeoPointLimitFieldError';
25
+ if (!longitude || !latitude) {
26
+ if (!longitude) errors.longitude = 'metadataLongitudeGeoPointFieldError';
27
+ if (!latitude) errors.latitude = 'metadataLatitudeGeoPointFieldError';
28
+ return errors;
29
+ }
30
+ return errors;
31
+ };
32
+ export default getGeoPointValidationErrors;
@@ -0,0 +1,9 @@
1
+ var getMetaAttachmentFields = function getMetaAttachmentFields(customMetadataGroups) {
2
+ return customMetadataGroups.reduce(function (acc, curr) {
3
+ var filteredFields = curr.fields.filter(function (field) {
4
+ return field.type === 'attachments-assets';
5
+ });
6
+ return acc.concat(filteredFields);
7
+ }, []);
8
+ };
9
+ export default getMetaAttachmentFields;