@atlaskit/media-common 2.19.1 → 2.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/analytics/index.js +0 -2
  3. package/dist/cjs/analytics/withMediaAnalyticsContext.js +3 -17
  4. package/dist/cjs/docs/index.js +0 -2
  5. package/dist/cjs/docs/media-use-only.js +0 -8
  6. package/dist/cjs/docs/rxjs-notice.js +0 -4
  7. package/dist/cjs/downloadUrl.js +0 -6
  8. package/dist/cjs/index.js +0 -6
  9. package/dist/cjs/mediaFeatureFlag-local.js +2 -4
  10. package/dist/cjs/mediaFeatureFlags/index.js +0 -1
  11. package/dist/cjs/mediaFeatureFlags/mediaFeatureFlags.js +9 -34
  12. package/dist/cjs/mediaFeatureFlags/productKeys.js +0 -2
  13. package/dist/cjs/mediaFeatureFlags/types.js +2 -0
  14. package/dist/cjs/mediaTypeUtils/index.js +0 -10
  15. package/dist/cjs/mediaTypeUtils/isArchive.js +0 -2
  16. package/dist/cjs/mediaTypeUtils/isMimeTypeSupportedByBrowser.js +3 -12
  17. package/dist/cjs/mediaTypeUtils/isMimeTypeSupportedByServer.js +27 -26
  18. package/dist/cjs/utils/helpers.js +3 -28
  19. package/dist/cjs/version.json +1 -1
  20. package/dist/es2019/analytics/index.js +3 -1
  21. package/dist/es2019/analytics/withMediaAnalyticsContext.js +9 -7
  22. package/dist/es2019/docs/media-use-only.js +0 -4
  23. package/dist/es2019/downloadUrl.js +0 -4
  24. package/dist/es2019/index.js +4 -2
  25. package/dist/es2019/mediaFeatureFlag-local.js +2 -2
  26. package/dist/es2019/mediaFeatureFlags/mediaFeatureFlags.js +6 -12
  27. package/dist/es2019/mediaFeatureFlags/types.js +2 -0
  28. package/dist/es2019/mediaTypeUtils/index.js +0 -5
  29. package/dist/es2019/mediaTypeUtils/isMimeTypeSupportedByBrowser.js +3 -2
  30. package/dist/es2019/mediaTypeUtils/isMimeTypeSupportedByServer.js +27 -14
  31. package/dist/es2019/utils/helpers.js +0 -8
  32. package/dist/es2019/version.json +1 -1
  33. package/dist/esm/analytics/index.js +3 -1
  34. package/dist/esm/analytics/withMediaAnalyticsContext.js +3 -7
  35. package/dist/esm/docs/media-use-only.js +0 -5
  36. package/dist/esm/downloadUrl.js +0 -4
  37. package/dist/esm/index.js +4 -2
  38. package/dist/esm/mediaFeatureFlag-local.js +2 -2
  39. package/dist/esm/mediaFeatureFlags/mediaFeatureFlags.js +9 -17
  40. package/dist/esm/mediaFeatureFlags/types.js +2 -0
  41. package/dist/esm/mediaTypeUtils/index.js +0 -5
  42. package/dist/esm/mediaTypeUtils/isMimeTypeSupportedByBrowser.js +3 -2
  43. package/dist/esm/mediaTypeUtils/isMimeTypeSupportedByServer.js +27 -14
  44. package/dist/esm/utils/helpers.js +3 -15
  45. package/dist/esm/version.json +1 -1
  46. package/package.json +2 -2
@@ -1,96 +1,72 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.debounce = void 0;
9
8
  exports.getRandomHex = getRandomHex;
10
9
  exports.pick = exports.omitBy = exports.matches = exports.isUndefined = void 0;
11
-
12
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
-
14
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
-
16
12
  var isUndefined = function isUndefined(value) {
17
13
  return value === undefined;
18
14
  };
19
-
20
15
  exports.isUndefined = isUndefined;
21
-
22
16
  var pick = function pick(obj) {
23
17
  var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
24
-
25
18
  if (obj === undefined) {
26
19
  return {};
27
20
  }
28
-
29
21
  return Object.fromEntries(Object.entries(obj).filter(function (_ref) {
30
22
  var _ref2 = (0, _slicedToArray2.default)(_ref, 1),
31
- k = _ref2[0];
32
-
23
+ k = _ref2[0];
33
24
  return keys.includes(k);
34
25
  }));
35
26
  };
36
-
37
27
  exports.pick = pick;
38
-
39
28
  var omitBy = function omitBy(obj, predicate) {
40
29
  return Object.fromEntries(Object.entries(obj).filter(function (_ref3) {
41
30
  var _ref4 = (0, _slicedToArray2.default)(_ref3, 2),
42
- k = _ref4[0],
43
- v = _ref4[1];
44
-
31
+ k = _ref4[0],
32
+ v = _ref4[1];
45
33
  return !predicate(v);
46
34
  }));
47
35
  };
48
-
49
36
  exports.omitBy = omitBy;
50
-
51
37
  var debounce = function debounce(func, wait) {
52
38
  var timeout;
53
39
  return function () {
54
40
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
55
41
  args[_key] = arguments[_key];
56
42
  }
57
-
58
43
  clearTimeout(timeout);
59
44
  timeout = setTimeout(function () {
60
45
  return func.apply(void 0, args);
61
46
  }, wait);
62
47
  };
63
48
  };
64
-
65
49
  exports.debounce = debounce;
66
-
67
50
  var matches = function matches(srcObj) {
68
51
  return function (obj) {
69
52
  var key;
70
-
71
53
  for (key in srcObj) {
72
54
  if (obj[key] === undefined || obj[key] !== srcObj[key]) {
73
55
  return false;
74
56
  }
75
57
  }
76
-
77
58
  return true;
78
59
  };
79
60
  };
80
-
81
61
  exports.matches = matches;
82
-
83
62
  function getRandomHexValues(byte) {
84
63
  return (0, _toConsumableArray2.default)(Array(byte * 2)).map(function () {
85
64
  return Math.floor(Math.random() * 16).toString(16);
86
65
  }).join('');
87
66
  }
88
-
89
67
  function getRandomHex(byte) {
90
68
  var _window;
91
-
92
69
  var randomHex;
93
-
94
70
  if ((_window = window) !== null && _window !== void 0 && _window.crypto) {
95
71
  try {
96
72
  randomHex = Array.from(window.crypto.getRandomValues(new Uint8Array(byte))).map(function (b) {
@@ -102,6 +78,5 @@ function getRandomHex(byte) {
102
78
  } else {
103
79
  randomHex = getRandomHexValues(byte);
104
80
  }
105
-
106
81
  return randomHex;
107
82
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-common",
3
- "version": "2.19.1",
3
+ "version": "2.19.2",
4
4
  "sideEffects": false
5
5
  }
@@ -1,5 +1,7 @@
1
1
  // Analytics base types
2
+
2
3
  // Analytics context
3
- export { withMediaAnalyticsContext } from './withMediaAnalyticsContext'; // Analytics constants
4
+ export { withMediaAnalyticsContext } from './withMediaAnalyticsContext';
4
5
 
6
+ // Analytics constants
5
7
  export { ANALYTICS_MEDIA_CHANNEL } from './constants';
@@ -3,10 +3,11 @@ import React, { forwardRef, useMemo } from 'react';
3
3
  import { AnalyticsContext } from '@atlaskit/analytics-next';
4
4
  import { MEDIA_CONTEXT } from '@atlaskit/analytics-namespaced-context/MediaAnalyticsContext';
5
5
  import { getMediaFeatureFlag } from '../mediaFeatureFlags';
6
-
7
- const getFilteredFeatureFlags = (keys, featureFlags) => keys.reduce((result, key) => ({ ...result,
6
+ const getFilteredFeatureFlags = (keys, featureFlags) => keys.reduce((result, key) => ({
7
+ ...result,
8
8
  [key]: getMediaFeatureFlag(key, featureFlags)
9
9
  }), {});
10
+
10
11
  /**
11
12
  * HOC for attaching MediaAnalyticsContext to a top-level React Component.
12
13
  *
@@ -19,8 +20,6 @@ const getFilteredFeatureFlags = (keys, featureFlags) => keys.reduce((result, key
19
20
  *
20
21
  * @see packages/analytics/analytics-next/src/hocs/withAnalyticsContext.tsx
21
22
  */
22
-
23
-
24
23
  export const withMediaAnalyticsContext = (contextPublicAttributes, options = {}) => WrappedComponent => {
25
24
  // forwardRef() allows passing React refs to the wrapped component WithMediaAnalyticsContext
26
25
  const WithMediaAnalyticsContext = /*#__PURE__*/forwardRef((props, ref) => {
@@ -35,8 +34,10 @@ export const withMediaAnalyticsContext = (contextPublicAttributes, options = {})
35
34
  const contextPrivateAttributes = {
36
35
  featureFlags: filteredFlags
37
36
  };
38
- return { ...contextPublicAttributes,
39
- [MEDIA_CONTEXT]: { ...contextPrivateAttributes
37
+ return {
38
+ ...contextPublicAttributes,
39
+ [MEDIA_CONTEXT]: {
40
+ ...contextPrivateAttributes
40
41
  }
41
42
  };
42
43
  }, [filterFeatureFlags, featureFlags]);
@@ -46,7 +47,8 @@ export const withMediaAnalyticsContext = (contextPublicAttributes, options = {})
46
47
  ref: ref
47
48
  })));
48
49
  });
49
- WithMediaAnalyticsContext.displayName = `WithMediaAnalyticsContext(${// @ts-ignore displayName doesn't exist on type
50
+ WithMediaAnalyticsContext.displayName = `WithMediaAnalyticsContext(${
51
+ // @ts-ignore displayName doesn't exist on type
50
52
  WrappedComponent.displayName || WrappedComponent.name})`;
51
53
  return WithMediaAnalyticsContext;
52
54
  };
@@ -1,24 +1,20 @@
1
1
  import React from 'react';
2
2
  import SectionMessage from '@atlaskit/section-message';
3
-
4
3
  function AlternativePackagesMessage({
5
4
  alternatePackages
6
5
  }) {
7
6
  if (!alternatePackages) {
8
7
  return null;
9
8
  }
10
-
11
9
  if (alternatePackages.length === 1) {
12
10
  return /*#__PURE__*/React.createElement("p", null, "Consider using", ' ', /*#__PURE__*/React.createElement("a", {
13
11
  href: alternatePackages[0].link
14
12
  }, alternatePackages[0].name), ' ', "instead.");
15
13
  }
16
-
17
14
  return /*#__PURE__*/React.createElement("p", null, "Consider using one of these packages instead:", /*#__PURE__*/React.createElement("ul", null, alternatePackages.map(p => /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("a", {
18
15
  href: p.link
19
16
  }, p.name)))));
20
17
  }
21
-
22
18
  export function createMediaUseOnlyNotice(componentName, alternatePackages) {
23
19
  return /*#__PURE__*/React.createElement(SectionMessage, {
24
20
  title: "Internal Media Use Only",
@@ -4,7 +4,6 @@ export const downloadUrl = (url, options) => {
4
4
  const iframeName = 'media-download-iframe';
5
5
  const link = document.createElement('a');
6
6
  let iframe = document.getElementById(iframeName);
7
-
8
7
  if (!iframe) {
9
8
  iframe = document.createElement('iframe');
10
9
  iframe.style.display = 'none';
@@ -12,13 +11,10 @@ export const downloadUrl = (url, options) => {
12
11
  iframe.name = iframeName;
13
12
  document.body.appendChild(iframe);
14
13
  }
15
-
16
14
  link.href = url;
17
-
18
15
  if (options && options.name) {
19
16
  link.download = options.name;
20
17
  }
21
-
22
18
  link.target = isIE11 || isSafari ? '_blank' : iframeName;
23
19
  document.body.appendChild(link);
24
20
  link.click();
@@ -1,11 +1,13 @@
1
- export { downloadUrl } from './downloadUrl'; // Warning! You can't add new media types!
1
+ export { downloadUrl } from './downloadUrl';
2
+ // Warning! You can't add new media types!
2
3
  // See packages/media/media-core/src/__tests__/cache-backward-compatibility.spec.ts
3
4
 
4
5
  // Media Feature Flags
5
6
  export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts } from './mediaFeatureFlags';
6
7
  // Analytics context
7
- export { withMediaAnalyticsContext } from './analytics/withMediaAnalyticsContext'; // Analytics constants
8
+ export { withMediaAnalyticsContext } from './analytics/withMediaAnalyticsContext';
8
9
 
10
+ // Analytics constants
9
11
  export { ANALYTICS_MEDIA_CHANNEL } from './analytics/constants';
10
12
  export { getMediaTypeFromMimeType, isImageMimeTypeSupportedByBrowser, isDocumentMimeTypeSupportedByBrowser, isMimeTypeSupportedByBrowser, isImageMimeTypeSupportedByServer, isDocumentMimeTypeSupportedByServer, isAudioMimeTypeSupportedByServer, isVideoMimeTypeSupportedByServer, isUnknownMimeTypeSupportedByServer, isMimeTypeSupportedByServer } from './mediaTypeUtils';
11
13
  export { isUndefined, pick, omitBy, debounce, matches, getRandomHex } from './utils/helpers';
@@ -2,8 +2,8 @@
2
2
  export const getLocalMediaFeatureFlag = key => {
3
3
  try {
4
4
  return typeof window !== 'undefined' && window.localStorage ? window.localStorage.getItem(key) : null;
5
- } catch (e) {// do nothing, return null by default
5
+ } catch (e) {
6
+ // do nothing, return null by default
6
7
  }
7
-
8
8
  return null;
9
9
  };
@@ -6,11 +6,9 @@ export const areEqualFeatureFlags = (ffA, ffB) => {
6
6
  if (!ffA && !ffB) {
7
7
  return true;
8
8
  }
9
-
10
9
  if (!ffA || !ffB) {
11
10
  return false;
12
11
  }
13
-
14
12
  const results = {
15
13
  newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
16
14
  captions: ffA.captions === ffB.captions,
@@ -29,28 +27,29 @@ export const filterFeatureFlagNames = flags => {
29
27
  const pairs = Object.entries(flags);
30
28
  return pairs.filter(([_key, value]) => !!value).map(([key]) => key);
31
29
  };
30
+
32
31
  /**
33
32
  * Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
34
33
  * Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
35
34
  * */
36
-
37
35
  export const mapAndFilterFeatureFlagNames = (flags, product) => {
38
36
  const mediaFeatureFlags = filterFeatureFlagNames(flags);
39
37
  return mediaFeatureFlags.map(key => getProductKeys()[product][key]);
40
- }; // TODO(MEX-1547): This is temporary solution to just return the launch darkly feature flags for all products.
38
+ };
41
39
 
40
+ // TODO(MEX-1547): This is temporary solution to just return the launch darkly feature flags for all products.
42
41
  /**
43
42
  * Takes a record of {Media Feature Flag Names → boolean}.
44
43
  * Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
45
44
  * */
46
-
47
45
  export const filterFeatureFlagKeysAllProducts = flags => {
48
46
  const filteredFlags = filterFeatureFlagNames(flags);
49
47
  const ldFeatureFlags = [];
50
48
  filteredFlags.forEach(flag => supportedProducts.forEach(product => ldFeatureFlags.push(getProductKeys()[product][flag])));
51
49
  return ldFeatureFlags.filter(flag => flag !== '');
52
- }; // default values defined here, not necessary for components to know directly as they should use the function below
50
+ };
53
51
 
52
+ // default values defined here, not necessary for components to know directly as they should use the function below
54
53
  export const defaultMediaFeatureFlags = {
55
54
  newCardExperience: false,
56
55
  captions: false,
@@ -65,6 +64,7 @@ export const defaultMediaFeatureFlags = {
65
64
  memoryCacheLogging: false,
66
65
  fetchFileStateAfterUpload: false
67
66
  };
67
+
68
68
  /**
69
69
  * Public accessor from components to fallback to defaults if flags not passed,
70
70
  * otherwise whatever product has set will be returned.
@@ -75,28 +75,22 @@ export const defaultMediaFeatureFlags = {
75
75
  *
76
76
  * (you will see a warning in console if override used)
77
77
  * */
78
-
79
78
  export function getMediaFeatureFlag(flagName, featureFlags) {
80
79
  const devOverride = getLocalMediaFeatureFlag(flagName);
81
-
82
80
  if (devOverride !== null) {
83
81
  try {
84
82
  return JSON.parse(devOverride);
85
83
  } catch (e) {}
86
84
  }
87
-
88
85
  if (featureFlags) {
89
86
  return flagName in featureFlags ? featureFlags[flagName] : defaultMediaFeatureFlags[flagName];
90
87
  }
91
-
92
88
  return defaultMediaFeatureFlags[flagName];
93
89
  }
94
90
  export const useMemoizeFeatureFlags = featureFlags => {
95
91
  const ref = useRef();
96
-
97
92
  if (!areEqualFeatureFlags(featureFlags, ref.current)) {
98
93
  ref.current = featureFlags;
99
94
  }
100
-
101
95
  return ref.current;
102
96
  };
@@ -1,3 +1,5 @@
1
1
  // Media feature flags - type and defaults defined here in one source of truth
2
+
2
3
  // With this type we ensure the object will contain all the flags
4
+
3
5
  export const supportedProducts = ['confluence', 'jira'];
@@ -7,22 +7,17 @@ export const getMediaTypeFromMimeType = mimeType => {
7
7
  if (isArchive(mimeType)) {
8
8
  return 'archive';
9
9
  }
10
-
11
10
  if (isImageMimeTypeSupportedByBrowser(mimeType) || isImageMimeTypeSupportedByServer(mimeType)) {
12
11
  return 'image';
13
12
  }
14
-
15
13
  if (isDocumentMimeTypeSupportedByBrowser(mimeType) || isDocumentMimeTypeSupportedByServer(mimeType)) {
16
14
  return 'doc';
17
15
  }
18
-
19
16
  if (isAudioMimeTypeSupportedByBrowser(mimeType) || isAudioMimeTypeSupportedByServer(mimeType)) {
20
17
  return 'audio';
21
18
  }
22
-
23
19
  if (isVideoMimeTypeSupportedByBrowser(mimeType) || isVideoMimeTypeSupportedByServer(mimeType)) {
24
20
  return 'video';
25
21
  }
26
-
27
22
  return 'unknown';
28
23
  };
@@ -1,8 +1,10 @@
1
1
  // Based on https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types
2
- export const isImageMimeTypeSupportedByBrowser = mimeType => ['image/apng', 'image/bmp', 'image/gif', 'image/x-icon', 'image/jpeg', 'image/png', 'image/webp' //'image/svg+xml', // Removed because of https://product-fabric.atlassian.net/browse/BMPT-625
2
+ export const isImageMimeTypeSupportedByBrowser = mimeType => ['image/apng', 'image/bmp', 'image/gif', 'image/x-icon', 'image/jpeg', 'image/png', 'image/webp'
3
+ //'image/svg+xml', // Removed because of https://product-fabric.atlassian.net/browse/BMPT-625
3
4
  ].indexOf(mimeType.toLowerCase()) > -1;
4
5
  export const isDocumentMimeTypeSupportedByBrowser = mimeType => mimeType.toLowerCase() === 'application/pdf';
5
6
  export const isAudioMimeTypeSupportedByBrowser = mimeType => ['audio/aac', 'audio/flac', 'audio/mp4', 'audio/mpeg', 'audio/ogg', 'audio/x-ogg', 'audio/wav', 'audio/x-wav'].indexOf(mimeType.toLowerCase()) > -1;
7
+
6
8
  /**
7
9
  * For backward compatilbity, we assume MP4/MOV is natively supported.
8
10
  * TODO: Improve detection of supported video formats by the browser.
@@ -12,6 +14,5 @@ export const isAudioMimeTypeSupportedByBrowser = mimeType => ['audio/aac', 'audi
12
14
  * - https://product-fabric.atlassian.net/browse/EDM-634
13
15
  * - https://product-fabric.atlassian.net/browse/EDM-426
14
16
  */
15
-
16
17
  export const isVideoMimeTypeSupportedByBrowser = mimeType => ['video/mp4', 'video/quicktime'].indexOf(mimeType.toLowerCase()) > -1;
17
18
  export const isMimeTypeSupportedByBrowser = mimeType => isDocumentMimeTypeSupportedByBrowser(mimeType) || isImageMimeTypeSupportedByBrowser(mimeType) || isAudioMimeTypeSupportedByBrowser(mimeType) || isVideoMimeTypeSupportedByBrowser(mimeType);
@@ -1,21 +1,34 @@
1
1
  // Based on https://developer.atlassian.com/platform/media/learning/file-previews/
2
2
  export const isImageMimeTypeSupportedByServer = mimeType => ['image/bmp', 'image/x-windows-bmp', 'application/dicom', 'image/gif', 'image/jpeg', 'image/jpg', 'image/jp_', 'application/jpg', 'application/x-jpg', 'image/png', 'application/png', 'application/x-png', 'application/vnd.adobe.photoshop', 'image/vnd.adobe.photoshop', 'image/photoshop', 'image/x-photoshop', 'image/psd', 'application/photoshop', 'application/psd', 'zz-application/zz-winassoc-psd', 'image/tiff', 'image/x-tif', 'image/x-tiff', 'application/tif', 'application/x-tif', 'application/tiff', 'application/x-tiff', 'image/svg+xml', 'image/heif', 'image/heif-sequence', 'image/heic', 'image/heic-sequence'].indexOf(mimeType.toLowerCase()) > -1;
3
- export const isDocumentMimeTypeSupportedByServer = mimeType => [// Adobe PDF
4
- 'application/pdf', 'application/x-pdf', 'application/acrobat', 'applications/vnd.pdf', 'text/pdf', 'text/x-pdf', // Adobe Illustrator
5
- 'application/vnd.adobe.illustrator', // Microsoft Office
6
- 'application/vnd.ms-office', // Microsoft Word
7
- 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', 'application/vnd.ms-word.document.macroenabled.12', 'application/vnd.ms-word.template.macroenabled.12', // Microsoft Excel
8
- 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', 'application/vnd.ms-excel.sheet.macroenabled.12', 'application/vnd.ms-excel.template.macroenabled.12', 'application/vnd.ms-excel.addin.macroenabled.12', 'application/vnd.ms-excel.sheet.macroenabled', 'application/vnd.ms-excel.template.macroenabled', 'application/vnd.ms-excel.addin.macroenabled', // Microsoft Powerpoint
9
- 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.openxmlformats-officedocument.presentationml.template', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'application/vnd.ms-powerpoint.presentation.macroenabled.12', 'application/vnd.ms-powerpoint.template.macroenabled.12', 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', // OpenOffice
10
- 'application/vnd.sun.xml.writer', 'application/vnd.sun.xml.writer.template', // OpenDocument
11
- 'application/vnd.sun.xml.draw', 'application/vnd.sun.xml.draw.template', 'application/vnd.oasis.opendocument.graphics', 'application/vnd.oasis.opendocument.presentation', 'application/x-vnd.oasis.opendocument.presentation', 'application/vnd.sun.xml.calc', 'application/vnd.sun.xml.calc.template', 'application/vnd.oasis.opendocument.spreadsheet', 'application/x-vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.spreadsheet-template', 'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.text-template', 'application/vnd.oasis.opendocument.text-master', 'application/x-vnd.oasis.opendocument.text', 'application/x-vnd.oasis.opendocument.text-template', 'application/x-vnd.oasis.opendocument.text-master', // WordPerfect
12
- 'application/vnd.wordperfect', // Text files
13
- 'text/csv', 'text/x-diff', 'text/x-perl', 'text/x-python', 'text/x-ruby', 'text/rtf', 'text/richtext', 'text/plain', 'application/txt', // Rich text
14
- 'application/rtf', 'application/x-rtf', // PostScript
3
+ export const isDocumentMimeTypeSupportedByServer = mimeType => [
4
+ // Adobe PDF
5
+ 'application/pdf', 'application/x-pdf', 'application/acrobat', 'applications/vnd.pdf', 'text/pdf', 'text/x-pdf',
6
+ // Adobe Illustrator
7
+ 'application/vnd.adobe.illustrator',
8
+ // Microsoft Office
9
+ 'application/vnd.ms-office',
10
+ // Microsoft Word
11
+ 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', 'application/vnd.ms-word.document.macroenabled.12', 'application/vnd.ms-word.template.macroenabled.12',
12
+ // Microsoft Excel
13
+ 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', 'application/vnd.ms-excel.sheet.macroenabled.12', 'application/vnd.ms-excel.template.macroenabled.12', 'application/vnd.ms-excel.addin.macroenabled.12', 'application/vnd.ms-excel.sheet.macroenabled', 'application/vnd.ms-excel.template.macroenabled', 'application/vnd.ms-excel.addin.macroenabled',
14
+ // Microsoft Powerpoint
15
+ 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.openxmlformats-officedocument.presentationml.template', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'application/vnd.ms-powerpoint.presentation.macroenabled.12', 'application/vnd.ms-powerpoint.template.macroenabled.12', 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
16
+ // OpenOffice
17
+ 'application/vnd.sun.xml.writer', 'application/vnd.sun.xml.writer.template',
18
+ // OpenDocument
19
+ 'application/vnd.sun.xml.draw', 'application/vnd.sun.xml.draw.template', 'application/vnd.oasis.opendocument.graphics', 'application/vnd.oasis.opendocument.presentation', 'application/x-vnd.oasis.opendocument.presentation', 'application/vnd.sun.xml.calc', 'application/vnd.sun.xml.calc.template', 'application/vnd.oasis.opendocument.spreadsheet', 'application/x-vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.spreadsheet-template', 'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.text-template', 'application/vnd.oasis.opendocument.text-master', 'application/x-vnd.oasis.opendocument.text', 'application/x-vnd.oasis.opendocument.text-template', 'application/x-vnd.oasis.opendocument.text-master',
20
+ // WordPerfect
21
+ 'application/vnd.wordperfect',
22
+ // Text files
23
+ 'text/csv', 'text/x-diff', 'text/x-perl', 'text/x-python', 'text/x-ruby', 'text/rtf', 'text/richtext', 'text/plain', 'application/txt',
24
+ // Rich text
25
+ 'application/rtf', 'application/x-rtf',
26
+ // PostScript
15
27
  'application/postscript'].indexOf(mimeType.toLowerCase()) > -1;
16
28
  export const isAudioMimeTypeSupportedByServer = mimeType => ['audio/aac', 'audio/x-hx-aac-adts', 'audio/vnd.dolby.dd-raw', 'audio/aiff', 'audio/x-aiff', 'audio/x-monkeys-audio', 'audio/x-ape', 'audio/basic', 'audio/flac', 'audio/mp4', 'audio/midi', 'audio/x-matroska', 'audio/x-mod', 'audio/mpeg', 'audio/ogg', 'audio/x-ogg', 'audio/x-pn-realaudio', 'audio/wav', 'audio/x-wav', 'audio/x-ms-wma'].indexOf(mimeType.toLowerCase()) > -1;
17
- export const isVideoMimeTypeSupportedByServer = mimeType => ['video/3gpp', 'video/3gpp2', 'video/x-ms-asf', 'video/avi', 'video/msvideo', 'video/x-msvideo', 'video/x-dv', 'video/x-flv', 'video/m2ts', 'video/x-m4v', 'video/x-matroska', 'video/quicktime', 'video/mp4', 'video/mpeg', 'video/ogg', 'video/x-ogg', 'video/webm', 'video/x-ms-wmv'].indexOf(mimeType.toLowerCase()) > -1; // BMPT-620: The backend momentarily returns this mimeType for cloud files imported via dt-api-mediapicker
18
- // Once these cloud files are processed they are receiving a more relevant mimeType
29
+ export const isVideoMimeTypeSupportedByServer = mimeType => ['video/3gpp', 'video/3gpp2', 'video/x-ms-asf', 'video/avi', 'video/msvideo', 'video/x-msvideo', 'video/x-dv', 'video/x-flv', 'video/m2ts', 'video/x-m4v', 'video/x-matroska', 'video/quicktime', 'video/mp4', 'video/mpeg', 'video/ogg', 'video/x-ogg', 'video/webm', 'video/x-ms-wmv'].indexOf(mimeType.toLowerCase()) > -1;
19
30
 
31
+ // BMPT-620: The backend momentarily returns this mimeType for cloud files imported via dt-api-mediapicker
32
+ // Once these cloud files are processed they are receiving a more relevant mimeType
20
33
  export const isUnknownMimeTypeSupportedByServer = mimeType => ['binary/octet-stream'].indexOf(mimeType.toLowerCase()) > -1;
21
34
  export const isMimeTypeSupportedByServer = mimeType => isImageMimeTypeSupportedByServer(mimeType) || isDocumentMimeTypeSupportedByServer(mimeType) || isAudioMimeTypeSupportedByServer(mimeType) || isVideoMimeTypeSupportedByServer(mimeType) || isUnknownMimeTypeSupportedByServer(mimeType);
@@ -3,7 +3,6 @@ export const pick = (obj, keys = []) => {
3
3
  if (obj === undefined) {
4
4
  return {};
5
5
  }
6
-
7
6
  return Object.fromEntries(Object.entries(obj).filter(([k]) => keys.includes(k)));
8
7
  };
9
8
  export const omitBy = (obj, predicate) => Object.fromEntries(Object.entries(obj).filter(([k, v]) => !predicate(v)));
@@ -17,26 +16,20 @@ export const debounce = (func, wait) => {
17
16
  export const matches = srcObj => {
18
17
  return obj => {
19
18
  let key;
20
-
21
19
  for (key in srcObj) {
22
20
  if (obj[key] === undefined || obj[key] !== srcObj[key]) {
23
21
  return false;
24
22
  }
25
23
  }
26
-
27
24
  return true;
28
25
  };
29
26
  };
30
-
31
27
  function getRandomHexValues(byte) {
32
28
  return [...Array(byte * 2)].map(() => Math.floor(Math.random() * 16).toString(16)).join('');
33
29
  }
34
-
35
30
  export function getRandomHex(byte) {
36
31
  var _window;
37
-
38
32
  let randomHex;
39
-
40
33
  if ((_window = window) !== null && _window !== void 0 && _window.crypto) {
41
34
  try {
42
35
  randomHex = Array.from(window.crypto.getRandomValues(new Uint8Array(byte))).map(b => b.toString(16).padStart(2, '0')).join('');
@@ -46,6 +39,5 @@ export function getRandomHex(byte) {
46
39
  } else {
47
40
  randomHex = getRandomHexValues(byte);
48
41
  }
49
-
50
42
  return randomHex;
51
43
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-common",
3
- "version": "2.19.1",
3
+ "version": "2.19.2",
4
4
  "sideEffects": false
5
5
  }
@@ -1,5 +1,7 @@
1
1
  // Analytics base types
2
+
2
3
  // Analytics context
3
- export { withMediaAnalyticsContext } from './withMediaAnalyticsContext'; // Analytics constants
4
+ export { withMediaAnalyticsContext } from './withMediaAnalyticsContext';
4
5
 
6
+ // Analytics constants
5
7
  export { ANALYTICS_MEDIA_CHANNEL } from './constants';
@@ -1,20 +1,17 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
-
4
3
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
-
6
4
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
-
8
5
  import React, { forwardRef, useMemo } from 'react';
9
6
  import { AnalyticsContext } from '@atlaskit/analytics-next';
10
7
  import { MEDIA_CONTEXT } from '@atlaskit/analytics-namespaced-context/MediaAnalyticsContext';
11
8
  import { getMediaFeatureFlag } from '../mediaFeatureFlags';
12
-
13
9
  var getFilteredFeatureFlags = function getFilteredFeatureFlags(keys, featureFlags) {
14
10
  return keys.reduce(function (result, key) {
15
11
  return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, key, getMediaFeatureFlag(key, featureFlags)));
16
12
  }, {});
17
13
  };
14
+
18
15
  /**
19
16
  * HOC for attaching MediaAnalyticsContext to a top-level React Component.
20
17
  *
@@ -27,8 +24,6 @@ var getFilteredFeatureFlags = function getFilteredFeatureFlags(keys, featureFlag
27
24
  *
28
25
  * @see packages/analytics/analytics-next/src/hocs/withAnalyticsContext.tsx
29
26
  */
30
-
31
-
32
27
  export var withMediaAnalyticsContext = function withMediaAnalyticsContext(contextPublicAttributes) {
33
28
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
34
29
  return function (WrappedComponent) {
@@ -49,7 +44,8 @@ export var withMediaAnalyticsContext = function withMediaAnalyticsContext(contex
49
44
  ref: ref
50
45
  })));
51
46
  });
52
- WithMediaAnalyticsContext.displayName = "WithMediaAnalyticsContext(".concat( // @ts-ignore displayName doesn't exist on type
47
+ WithMediaAnalyticsContext.displayName = "WithMediaAnalyticsContext(".concat(
48
+ // @ts-ignore displayName doesn't exist on type
53
49
  WrappedComponent.displayName || WrappedComponent.name, ")");
54
50
  return WithMediaAnalyticsContext;
55
51
  };
@@ -1,26 +1,21 @@
1
1
  import React from 'react';
2
2
  import SectionMessage from '@atlaskit/section-message';
3
-
4
3
  function AlternativePackagesMessage(_ref) {
5
4
  var alternatePackages = _ref.alternatePackages;
6
-
7
5
  if (!alternatePackages) {
8
6
  return null;
9
7
  }
10
-
11
8
  if (alternatePackages.length === 1) {
12
9
  return /*#__PURE__*/React.createElement("p", null, "Consider using", ' ', /*#__PURE__*/React.createElement("a", {
13
10
  href: alternatePackages[0].link
14
11
  }, alternatePackages[0].name), ' ', "instead.");
15
12
  }
16
-
17
13
  return /*#__PURE__*/React.createElement("p", null, "Consider using one of these packages instead:", /*#__PURE__*/React.createElement("ul", null, alternatePackages.map(function (p) {
18
14
  return /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("a", {
19
15
  href: p.link
20
16
  }, p.name));
21
17
  })));
22
18
  }
23
-
24
19
  export function createMediaUseOnlyNotice(componentName, alternatePackages) {
25
20
  return /*#__PURE__*/React.createElement(SectionMessage, {
26
21
  title: "Internal Media Use Only",
@@ -4,7 +4,6 @@ export var downloadUrl = function downloadUrl(url, options) {
4
4
  var iframeName = 'media-download-iframe';
5
5
  var link = document.createElement('a');
6
6
  var iframe = document.getElementById(iframeName);
7
-
8
7
  if (!iframe) {
9
8
  iframe = document.createElement('iframe');
10
9
  iframe.style.display = 'none';
@@ -12,13 +11,10 @@ export var downloadUrl = function downloadUrl(url, options) {
12
11
  iframe.name = iframeName;
13
12
  document.body.appendChild(iframe);
14
13
  }
15
-
16
14
  link.href = url;
17
-
18
15
  if (options && options.name) {
19
16
  link.download = options.name;
20
17
  }
21
-
22
18
  link.target = isIE11 || isSafari ? '_blank' : iframeName;
23
19
  document.body.appendChild(link);
24
20
  link.click();
package/dist/esm/index.js CHANGED
@@ -1,11 +1,13 @@
1
- export { downloadUrl } from './downloadUrl'; // Warning! You can't add new media types!
1
+ export { downloadUrl } from './downloadUrl';
2
+ // Warning! You can't add new media types!
2
3
  // See packages/media/media-core/src/__tests__/cache-backward-compatibility.spec.ts
3
4
 
4
5
  // Media Feature Flags
5
6
  export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts } from './mediaFeatureFlags';
6
7
  // Analytics context
7
- export { withMediaAnalyticsContext } from './analytics/withMediaAnalyticsContext'; // Analytics constants
8
+ export { withMediaAnalyticsContext } from './analytics/withMediaAnalyticsContext';
8
9
 
10
+ // Analytics constants
9
11
  export { ANALYTICS_MEDIA_CHANNEL } from './analytics/constants';
10
12
  export { getMediaTypeFromMimeType, isImageMimeTypeSupportedByBrowser, isDocumentMimeTypeSupportedByBrowser, isMimeTypeSupportedByBrowser, isImageMimeTypeSupportedByServer, isDocumentMimeTypeSupportedByServer, isAudioMimeTypeSupportedByServer, isVideoMimeTypeSupportedByServer, isUnknownMimeTypeSupportedByServer, isMimeTypeSupportedByServer } from './mediaTypeUtils';
11
13
  export { isUndefined, pick, omitBy, debounce, matches, getRandomHex } from './utils/helpers';
@@ -2,8 +2,8 @@
2
2
  export var getLocalMediaFeatureFlag = function getLocalMediaFeatureFlag(key) {
3
3
  try {
4
4
  return typeof window !== 'undefined' && window.localStorage ? window.localStorage.getItem(key) : null;
5
- } catch (e) {// do nothing, return null by default
5
+ } catch (e) {
6
+ // do nothing, return null by default
6
7
  }
7
-
8
8
  return null;
9
9
  };