@chayns-components/gallery 5.2.5 → 5.2.6
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.
- package/lib/cjs/components/gallery-viewer/GalleryViewer.js +1 -1
- package/lib/cjs/components/gallery-viewer/GalleryViewer.js.map +1 -1
- package/lib/cjs/components/gallery-viewer/gallery-viewer-item/GalleryViewerItem.js +11 -8
- package/lib/cjs/components/gallery-viewer/gallery-viewer-item/GalleryViewerItem.js.map +1 -1
- package/lib/cjs/components/media-content/MediaContent.constants.js +5 -6
- package/lib/cjs/components/media-content/MediaContent.constants.js.map +1 -1
- package/lib/cjs/components/media-content/MediaContent.js +15 -27
- package/lib/cjs/components/media-content/MediaContent.js.map +1 -1
- package/lib/cjs/components/media-content/MediaContent.styles.js +6 -5
- package/lib/cjs/components/media-content/MediaContent.styles.js.map +1 -1
- package/lib/cjs/components/media-content/MediaContent.utils.js +1 -63
- package/lib/cjs/components/media-content/MediaContent.utils.js.map +1 -1
- package/lib/esm/components/gallery-viewer/GalleryViewer.js +2 -2
- package/lib/esm/components/gallery-viewer/GalleryViewer.js.map +1 -1
- package/lib/esm/components/gallery-viewer/gallery-viewer-item/GalleryViewerItem.js +12 -9
- package/lib/esm/components/gallery-viewer/gallery-viewer-item/GalleryViewerItem.js.map +1 -1
- package/lib/esm/components/media-content/MediaContent.constants.js +4 -5
- package/lib/esm/components/media-content/MediaContent.constants.js.map +1 -1
- package/lib/esm/components/media-content/MediaContent.js +18 -29
- package/lib/esm/components/media-content/MediaContent.js.map +1 -1
- package/lib/esm/components/media-content/MediaContent.styles.js +7 -6
- package/lib/esm/components/media-content/MediaContent.styles.js.map +1 -1
- package/lib/esm/components/media-content/MediaContent.utils.js +0 -59
- package/lib/esm/components/media-content/MediaContent.utils.js.map +1 -1
- package/lib/types/components/gallery-viewer/GalleryViewer.d.ts +3 -3
- package/lib/types/components/media-content/MediaContent.constants.d.ts +4 -5
- package/lib/types/components/media-content/MediaContent.utils.d.ts +0 -7
- package/package.json +2 -2
- package/lib/cjs/components/media-content/useMediaContentSize.js +0 -68
- package/lib/cjs/components/media-content/useMediaContentSize.js.map +0 -1
- package/lib/esm/components/media-content/useMediaContentSize.js +0 -62
- package/lib/esm/components/media-content/useMediaContentSize.js.map +0 -1
- package/lib/types/components/media-content/useMediaContentSize.d.ts +0 -3
|
@@ -42,5 +42,5 @@ const GalleryViewer = ({
|
|
|
42
42
|
}))));
|
|
43
43
|
};
|
|
44
44
|
GalleryViewer.displayName = 'GalleryViewer';
|
|
45
|
-
var _default = exports.default = GalleryViewer;
|
|
45
|
+
var _default = exports.default = /*#__PURE__*/(0, _react.memo)(GalleryViewer);
|
|
46
46
|
//# sourceMappingURL=GalleryViewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GalleryViewer.js","names":["_react","_interopRequireWildcard","require","_GalleryViewerItem","_interopRequireDefault","_GalleryViewer","_gallery","_gallery2","_GalleryViewer2","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","EMPTY_FILE_ITEMS","GalleryViewer","files","shouldLoadImages","viewMode","GalleryViewMode","GRID","fileItems","ratio","getGalleryRatio","handleOpenFiles","useCallback","file","openKnownFiles","visibleItems","slice","GALLERY_VIEWER_MAX_VISIBLE_ITEMS","createElement","StyledGalleryViewer","StyledGalleryViewerItemWrapper","$ratio","$itemCount","length","$viewMode","map","index","key","getGalleryViewerKey","fileItem","onClick","getReadOnlyItemRatio","remainingItemsLength","undefined","displayName","_default","exports"],"sources":["../../../../src/components/gallery-viewer/GalleryViewer.tsx"],"sourcesContent":["import type { FileItem } from '@chayns-components/core';\nimport React, { FC, useCallback } from 'react';\nimport GalleryViewerItem from './gallery-viewer-item/GalleryViewerItem';\nimport { StyledGalleryViewer, StyledGalleryViewerItemWrapper } from './GalleryViewer.styles';\nimport type { GalleryViewerProps } from './GalleryViewer.types';\nimport {\n getGalleryRatio,\n getGalleryViewerKey,\n getReadOnlyItemRatio,\n openKnownFiles,\n} from '../../utils/gallery';\nimport { GalleryViewMode } from '../../types/gallery';\nimport { GALLERY_VIEWER_MAX_VISIBLE_ITEMS } from './GalleryViewer.constants';\n\nconst EMPTY_FILE_ITEMS: FileItem[] = [];\n\nconst GalleryViewer: FC<GalleryViewerProps> = ({\n files,\n shouldLoadImages = true,\n viewMode = GalleryViewMode.GRID,\n}) => {\n const fileItems = files ?? EMPTY_FILE_ITEMS;\n const ratio = getGalleryRatio(fileItems);\n\n const handleOpenFiles = useCallback(\n (file: FileItem) => {\n openKnownFiles(fileItems, file);\n },\n [fileItems],\n );\n\n const visibleItems = fileItems.slice(0, GALLERY_VIEWER_MAX_VISIBLE_ITEMS);\n\n return (\n <StyledGalleryViewer>\n <StyledGalleryViewerItemWrapper\n $ratio={ratio}\n $itemCount={fileItems.length}\n $viewMode={viewMode}\n >\n {visibleItems.map((file, index) => (\n <GalleryViewerItem\n key={getGalleryViewerKey(file, index)}\n fileItem={file}\n onClick={handleOpenFiles}\n ratio={getReadOnlyItemRatio({ fileItems, index, viewMode })}\n shouldLoadImages={shouldLoadImages}\n remainingItemsLength={\n fileItems.length > GALLERY_VIEWER_MAX_VISIBLE_ITEMS && index === 3\n ? fileItems.length\n : undefined\n }\n />\n ))}\n </StyledGalleryViewerItemWrapper>\n </StyledGalleryViewer>\n );\n};\n\nGalleryViewer.displayName = 'GalleryViewer';\n\nexport default GalleryViewer;\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"GalleryViewer.js","names":["_react","_interopRequireWildcard","require","_GalleryViewerItem","_interopRequireDefault","_GalleryViewer","_gallery","_gallery2","_GalleryViewer2","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","EMPTY_FILE_ITEMS","GalleryViewer","files","shouldLoadImages","viewMode","GalleryViewMode","GRID","fileItems","ratio","getGalleryRatio","handleOpenFiles","useCallback","file","openKnownFiles","visibleItems","slice","GALLERY_VIEWER_MAX_VISIBLE_ITEMS","createElement","StyledGalleryViewer","StyledGalleryViewerItemWrapper","$ratio","$itemCount","length","$viewMode","map","index","key","getGalleryViewerKey","fileItem","onClick","getReadOnlyItemRatio","remainingItemsLength","undefined","displayName","_default","exports","memo"],"sources":["../../../../src/components/gallery-viewer/GalleryViewer.tsx"],"sourcesContent":["import type { FileItem } from '@chayns-components/core';\nimport React, { FC, memo, useCallback } from 'react';\nimport GalleryViewerItem from './gallery-viewer-item/GalleryViewerItem';\nimport { StyledGalleryViewer, StyledGalleryViewerItemWrapper } from './GalleryViewer.styles';\nimport type { GalleryViewerProps } from './GalleryViewer.types';\nimport {\n getGalleryRatio,\n getGalleryViewerKey,\n getReadOnlyItemRatio,\n openKnownFiles,\n} from '../../utils/gallery';\nimport { GalleryViewMode } from '../../types/gallery';\nimport { GALLERY_VIEWER_MAX_VISIBLE_ITEMS } from './GalleryViewer.constants';\n\nconst EMPTY_FILE_ITEMS: FileItem[] = [];\n\nconst GalleryViewer: FC<GalleryViewerProps> = ({\n files,\n shouldLoadImages = true,\n viewMode = GalleryViewMode.GRID,\n}) => {\n const fileItems = files ?? EMPTY_FILE_ITEMS;\n const ratio = getGalleryRatio(fileItems);\n\n const handleOpenFiles = useCallback(\n (file: FileItem) => {\n openKnownFiles(fileItems, file);\n },\n [fileItems],\n );\n\n const visibleItems = fileItems.slice(0, GALLERY_VIEWER_MAX_VISIBLE_ITEMS);\n\n return (\n <StyledGalleryViewer>\n <StyledGalleryViewerItemWrapper\n $ratio={ratio}\n $itemCount={fileItems.length}\n $viewMode={viewMode}\n >\n {visibleItems.map((file, index) => (\n <GalleryViewerItem\n key={getGalleryViewerKey(file, index)}\n fileItem={file}\n onClick={handleOpenFiles}\n ratio={getReadOnlyItemRatio({ fileItems, index, viewMode })}\n shouldLoadImages={shouldLoadImages}\n remainingItemsLength={\n fileItems.length > GALLERY_VIEWER_MAX_VISIBLE_ITEMS && index === 3\n ? fileItems.length\n : undefined\n }\n />\n ))}\n </StyledGalleryViewerItemWrapper>\n </StyledGalleryViewer>\n );\n};\n\nGalleryViewer.displayName = 'GalleryViewer';\n\nexport default memo(GalleryViewer);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,14 +15,17 @@ const GalleryViewerItem = ({
|
|
|
15
15
|
ratio = 1,
|
|
16
16
|
remainingItemsLength,
|
|
17
17
|
onClick
|
|
18
|
-
}) =>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
18
|
+
}) => {
|
|
19
|
+
const handleClick = (0, _react.useCallback)(() => onClick(fileItem), [fileItem, onClick]);
|
|
20
|
+
return /*#__PURE__*/_react.default.createElement(_GalleryViewerItem.StyledGalleryViewerItem, null, /*#__PURE__*/_react.default.createElement(_MediaContent.default, {
|
|
21
|
+
file: fileItem.file,
|
|
22
|
+
onClick: handleClick,
|
|
23
|
+
ratio: ratio,
|
|
24
|
+
shouldLoadImages: shouldLoadImages
|
|
25
|
+
}), remainingItemsLength && /*#__PURE__*/_react.default.createElement(_GalleryViewerItem.StyledGalleryViewerMoreItemsIndicator, {
|
|
26
|
+
onClick: handleClick
|
|
27
|
+
}, /*#__PURE__*/_react.default.createElement("p", null, `+ ${remainingItemsLength - 3}`)));
|
|
28
|
+
};
|
|
26
29
|
GalleryViewerItem.displayName = 'GalleryViewerItem';
|
|
27
30
|
var _default = exports.default = /*#__PURE__*/(0, _react.memo)(GalleryViewerItem);
|
|
28
31
|
//# sourceMappingURL=GalleryViewerItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GalleryViewerItem.js","names":["_react","_interopRequireWildcard","require","_MediaContent","_interopRequireDefault","_GalleryViewerItem","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","GalleryViewerItem","fileItem","shouldLoadImages","ratio","remainingItemsLength","onClick","createElement","StyledGalleryViewerItem","file","StyledGalleryViewerMoreItemsIndicator","displayName","_default","exports","memo"],"sources":["../../../../../src/components/gallery-viewer/gallery-viewer-item/GalleryViewerItem.tsx"],"sourcesContent":["import React, { FC, memo } from 'react';\nimport MediaContent from '../../media-content/MediaContent';\nimport {\n StyledGalleryViewerItem,\n StyledGalleryViewerMoreItemsIndicator,\n} from './GalleryViewerItem.styles';\nimport type { GalleryViewerItemProps } from './GalleryViewerItem.types';\n\nconst GalleryViewerItem: FC<GalleryViewerItemProps> = ({\n fileItem,\n shouldLoadImages = true,\n ratio = 1,\n remainingItemsLength,\n onClick,\n}) => (\n <StyledGalleryViewerItem>\n
|
|
1
|
+
{"version":3,"file":"GalleryViewerItem.js","names":["_react","_interopRequireWildcard","require","_MediaContent","_interopRequireDefault","_GalleryViewerItem","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","GalleryViewerItem","fileItem","shouldLoadImages","ratio","remainingItemsLength","onClick","handleClick","useCallback","createElement","StyledGalleryViewerItem","file","StyledGalleryViewerMoreItemsIndicator","displayName","_default","exports","memo"],"sources":["../../../../../src/components/gallery-viewer/gallery-viewer-item/GalleryViewerItem.tsx"],"sourcesContent":["import React, { FC, memo, useCallback } from 'react';\nimport MediaContent from '../../media-content/MediaContent';\nimport {\n StyledGalleryViewerItem,\n StyledGalleryViewerMoreItemsIndicator,\n} from './GalleryViewerItem.styles';\nimport type { GalleryViewerItemProps } from './GalleryViewerItem.types';\n\nconst GalleryViewerItem: FC<GalleryViewerItemProps> = ({\n fileItem,\n shouldLoadImages = true,\n ratio = 1,\n remainingItemsLength,\n onClick,\n}) => {\n const handleClick = useCallback(() => onClick(fileItem), [fileItem, onClick]);\n\n return (\n <StyledGalleryViewerItem>\n <MediaContent\n file={fileItem.file}\n onClick={handleClick}\n ratio={ratio}\n shouldLoadImages={shouldLoadImages}\n />\n {remainingItemsLength && (\n <StyledGalleryViewerMoreItemsIndicator onClick={handleClick}>\n <p>{`+ ${remainingItemsLength - 3}`}</p>\n </StyledGalleryViewerMoreItemsIndicator>\n )}\n </StyledGalleryViewerItem>\n );\n};\n\nGalleryViewerItem.displayName = 'GalleryViewerItem';\n\nexport default memo(GalleryViewerItem);\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAH,OAAA;AAGoC,SAAAE,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAL,wBAAAK,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAT,uBAAA,YAAAA,CAAAK,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAGpC,MAAMgB,iBAA6C,GAAGA,CAAC;EACnDC,QAAQ;EACRC,gBAAgB,GAAG,IAAI;EACvBC,KAAK,GAAG,CAAC;EACTC,oBAAoB;EACpBC;AACJ,CAAC,KAAK;EACF,MAAMC,WAAW,GAAG,IAAAC,kBAAW,EAAC,MAAMF,OAAO,CAACJ,QAAQ,CAAC,EAAE,CAACA,QAAQ,EAAEI,OAAO,CAAC,CAAC;EAE7E,oBACI9B,MAAA,CAAAQ,OAAA,CAAAyB,aAAA,CAAC5B,kBAAA,CAAA6B,uBAAuB,qBACpBlC,MAAA,CAAAQ,OAAA,CAAAyB,aAAA,CAAC9B,aAAA,CAAAK,OAAY;IACT2B,IAAI,EAAET,QAAQ,CAACS,IAAK;IACpBL,OAAO,EAAEC,WAAY;IACrBH,KAAK,EAAEA,KAAM;IACbD,gBAAgB,EAAEA;EAAiB,CACtC,CAAC,EACDE,oBAAoB,iBACjB7B,MAAA,CAAAQ,OAAA,CAAAyB,aAAA,CAAC5B,kBAAA,CAAA+B,qCAAqC;IAACN,OAAO,EAAEC;EAAY,gBACxD/B,MAAA,CAAAQ,OAAA,CAAAyB,aAAA,YAAI,KAAKJ,oBAAoB,GAAG,CAAC,EAAM,CACJ,CAEtB,CAAC;AAElC,CAAC;AAEDJ,iBAAiB,CAACY,WAAW,GAAG,mBAAmB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAA/B,OAAA,gBAErC,IAAAgC,WAAI,EAACf,iBAAiB,CAAC","ignoreList":[]}
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
const MEDIA_CONTENT_IMAGE_FADE_DURATION_MS = exports.MEDIA_CONTENT_IMAGE_FADE_DURATION_MS =
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const MEDIA_CONTENT_PREVIEW_SCALE = exports.MEDIA_CONTENT_PREVIEW_SCALE = 1.05;
|
|
6
|
+
exports.MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS = exports.MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS = exports.MEDIA_CONTENT_PREVIEW_BLUR = exports.MEDIA_CONTENT_IMAGE_FADE_DURATION_MS = void 0;
|
|
7
|
+
const MEDIA_CONTENT_IMAGE_FADE_DURATION_MS = exports.MEDIA_CONTENT_IMAGE_FADE_DURATION_MS = 180;
|
|
8
|
+
const MEDIA_CONTENT_PREVIEW_BLUR = exports.MEDIA_CONTENT_PREVIEW_BLUR = 'blur(6px)';
|
|
9
|
+
const MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS = exports.MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS = 100;
|
|
10
|
+
const MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS = exports.MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS = 200;
|
|
12
11
|
//# sourceMappingURL=MediaContent.constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaContent.constants.js","names":["MEDIA_CONTENT_IMAGE_FADE_DURATION_MS","exports","
|
|
1
|
+
{"version":3,"file":"MediaContent.constants.js","names":["MEDIA_CONTENT_IMAGE_FADE_DURATION_MS","exports","MEDIA_CONTENT_PREVIEW_BLUR","MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS","MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS"],"sources":["../../../../src/components/media-content/MediaContent.constants.ts"],"sourcesContent":["export const MEDIA_CONTENT_IMAGE_FADE_DURATION_MS = 180;\nexport const MEDIA_CONTENT_PREVIEW_BLUR = 'blur(6px)';\nexport const MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS = 100;\nexport const MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS = 200;\n"],"mappings":";;;;;;AAAO,MAAMA,oCAAoC,GAAAC,OAAA,CAAAD,oCAAA,GAAG,GAAG;AAChD,MAAME,0BAA0B,GAAAD,OAAA,CAAAC,0BAAA,GAAG,WAAW;AAC9C,MAAMC,0CAA0C,GAAAF,OAAA,CAAAE,0CAAA,GAAG,GAAG;AACtD,MAAMC,6CAA6C,GAAAH,OAAA,CAAAG,6CAAA,GAAG,GAAG","ignoreList":[]}
|
|
@@ -9,8 +9,6 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
9
9
|
var _MediaContent = require("./MediaContent.styles");
|
|
10
10
|
var _MediaContent2 = require("./MediaContent.utils");
|
|
11
11
|
var _MediaContent3 = require("./MediaContent.constants");
|
|
12
|
-
var _useMediaContentSize = _interopRequireDefault(require("./useMediaContentSize"));
|
|
13
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
12
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
15
13
|
const MediaContent = ({
|
|
16
14
|
file,
|
|
@@ -26,11 +24,17 @@ const MediaContent = ({
|
|
|
26
24
|
const [hasLoadedFinalMedia, setHasLoadedFinalMedia] = (0, _react.useState)(false);
|
|
27
25
|
const imageRef = (0, _react.useRef)(null);
|
|
28
26
|
const videoRef = (0, _react.useRef)(null);
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
27
|
+
const finalSourceUrl = sourceKey;
|
|
28
|
+
const displayPreviewUrl = previewSourceUrl;
|
|
29
|
+
const shouldHidePreview = shouldLoadImages && hasLoadedFinalMedia;
|
|
30
|
+
const previewLayerStyle = {
|
|
31
|
+
opacity: shouldHidePreview ? 0 : 1,
|
|
32
|
+
filter: shouldHidePreview ? 'blur(0px)' : undefined
|
|
33
|
+
};
|
|
34
|
+
const finalMediaStyle = {
|
|
35
|
+
opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,
|
|
36
|
+
transition: `opacity ${_MediaContent3.MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease`
|
|
37
|
+
};
|
|
34
38
|
(0, _react.useLayoutEffect)(() => {
|
|
35
39
|
setHasLoadedFinalMedia(false);
|
|
36
40
|
}, [sourceKey]);
|
|
@@ -50,7 +54,6 @@ const MediaContent = ({
|
|
|
50
54
|
const shouldShowPreview = Boolean(displayPreviewUrl);
|
|
51
55
|
if (isVideo) {
|
|
52
56
|
return /*#__PURE__*/_react.default.createElement(_MediaContent.StyledMediaContentVideoWrapper, {
|
|
53
|
-
ref: setContainerElement,
|
|
54
57
|
onClick: onClick,
|
|
55
58
|
$ratio: ratio
|
|
56
59
|
}, displayPreviewUrl && /*#__PURE__*/_react.default.createElement(_MediaContent.StyledMediaContentPreviewImage, {
|
|
@@ -58,9 +61,7 @@ const MediaContent = ({
|
|
|
58
61
|
src: displayPreviewUrl,
|
|
59
62
|
alt: "",
|
|
60
63
|
"aria-hidden": "true",
|
|
61
|
-
style:
|
|
62
|
-
opacity: shouldLoadImages && hasLoadedFinalMedia ? 0 : 1
|
|
63
|
-
}
|
|
64
|
+
style: previewLayerStyle
|
|
64
65
|
}), /*#__PURE__*/_react.default.createElement(_MediaContent.StyledMediaContentPlayIcon, null, /*#__PURE__*/_react.default.createElement(_core.Icon, {
|
|
65
66
|
size: playIconSize,
|
|
66
67
|
icons: ['fa fa-play']
|
|
@@ -69,19 +70,13 @@ const MediaContent = ({
|
|
|
69
70
|
poster: displayPreviewUrl,
|
|
70
71
|
preload: "metadata",
|
|
71
72
|
onLoadedData: () => setHasLoadedFinalMedia(true),
|
|
72
|
-
style:
|
|
73
|
-
filter: displayPreviewUrl && !hasLoadedFinalMedia ? _MediaContent3.MEDIA_CONTENT_PREVIEW_BLUR : 'none',
|
|
74
|
-
transform: displayPreviewUrl && !hasLoadedFinalMedia ? `scale(${_MediaContent3.MEDIA_CONTENT_PREVIEW_SCALE})` : 'none',
|
|
75
|
-
opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,
|
|
76
|
-
transition: `opacity ${_MediaContent3.MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease, filter ${_MediaContent3.MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${_MediaContent3.MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms, transform ${_MediaContent3.MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${_MediaContent3.MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms`
|
|
77
|
-
}
|
|
73
|
+
style: finalMediaStyle
|
|
78
74
|
}, /*#__PURE__*/_react.default.createElement("source", {
|
|
79
75
|
src: finalSourceUrl,
|
|
80
76
|
type: "video/mp4"
|
|
81
77
|
})));
|
|
82
78
|
}
|
|
83
79
|
return /*#__PURE__*/_react.default.createElement(_MediaContent.StyledMediaContentImageWrapper, {
|
|
84
|
-
ref: setContainerElement,
|
|
85
80
|
onClick: onClick,
|
|
86
81
|
$ratio: ratio
|
|
87
82
|
}, shouldShowPreview && /*#__PURE__*/_react.default.createElement(_MediaContent.StyledMediaContentPreviewImage, {
|
|
@@ -89,21 +84,14 @@ const MediaContent = ({
|
|
|
89
84
|
src: displayPreviewUrl,
|
|
90
85
|
alt: "",
|
|
91
86
|
"aria-hidden": "true",
|
|
92
|
-
style:
|
|
93
|
-
opacity: shouldLoadImages && hasLoadedFinalMedia ? 0 : 1
|
|
94
|
-
}
|
|
87
|
+
style: previewLayerStyle
|
|
95
88
|
}), shouldRenderFinalImage && /*#__PURE__*/_react.default.createElement(_MediaContent.StyledMediaContentImage, {
|
|
96
89
|
ref: imageRef,
|
|
97
90
|
draggable: false,
|
|
98
91
|
src: finalSourceUrl,
|
|
99
92
|
alt: "",
|
|
100
93
|
onLoad: () => setHasLoadedFinalMedia(true),
|
|
101
|
-
style:
|
|
102
|
-
filter: displayPreviewUrl && !hasLoadedFinalMedia ? _MediaContent3.MEDIA_CONTENT_PREVIEW_BLUR : 'none',
|
|
103
|
-
transform: displayPreviewUrl && !hasLoadedFinalMedia ? `scale(${_MediaContent3.MEDIA_CONTENT_PREVIEW_SCALE})` : 'none',
|
|
104
|
-
opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,
|
|
105
|
-
transition: `opacity ${_MediaContent3.MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease, filter ${_MediaContent3.MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${_MediaContent3.MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms, transform ${_MediaContent3.MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${_MediaContent3.MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms`
|
|
106
|
-
}
|
|
94
|
+
style: finalMediaStyle
|
|
107
95
|
}));
|
|
108
96
|
};
|
|
109
97
|
MediaContent.displayName = 'MediaContent';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaContent.js","names":["_core","require","_react","_interopRequireWildcard","_MediaContent","_MediaContent2","_MediaContent3","_useMediaContentSize","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","MediaContent","file","previewUrl","ratio","onClick","shouldLoadImages","playIconSize","isVideo","isVideoFile","sourceKey","getMediaSourceUrl","previewSourceUrl","getMediaPreviewUrl","hasLoadedFinalMedia","setHasLoadedFinalMedia","useState","imageRef","useRef","videoRef","containerElement","setContainerElement","renderSize","useMediaContentSize","devicePixelRatio","window","Number","isFinite","finalSourceUrl","useMemo","getResponsiveImageServiceUrl","displayPreviewUrl","undefined","useLayoutEffect","_imageRef$current","_videoRef$current","current","complete","naturalWidth","readyState","shouldRenderFinalImage","Boolean","shouldShowPreview","createElement","StyledMediaContentVideoWrapper","ref","$ratio","StyledMediaContentPreviewImage","draggable","src","alt","style","opacity","StyledMediaContentPlayIcon","Icon","size","icons","StyledMediaContentVideo","poster","preload","onLoadedData","filter","MEDIA_CONTENT_PREVIEW_BLUR","transform","MEDIA_CONTENT_PREVIEW_SCALE","transition","MEDIA_CONTENT_IMAGE_FADE_DURATION_MS","MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS","MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS","type","StyledMediaContentImageWrapper","StyledMediaContentImage","onLoad","displayName","_default","exports","memo"],"sources":["../../../../src/components/media-content/MediaContent.tsx"],"sourcesContent":["import { Icon } from '@chayns-components/core';\nimport React, { FC, memo, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport {\n StyledMediaContentImage,\n StyledMediaContentImageWrapper,\n StyledMediaContentPlayIcon,\n StyledMediaContentPreviewImage,\n StyledMediaContentVideo,\n StyledMediaContentVideoWrapper,\n} from './MediaContent.styles';\nimport type { MediaContentProps } from './MediaContent.types';\nimport {\n getMediaPreviewUrl,\n getMediaSourceUrl,\n getResponsiveImageServiceUrl,\n isVideoFile,\n} from './MediaContent.utils';\nimport {\n MEDIA_CONTENT_IMAGE_FADE_DURATION_MS,\n MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS,\n MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS,\n MEDIA_CONTENT_PREVIEW_BLUR,\n MEDIA_CONTENT_PREVIEW_SCALE,\n} from './MediaContent.constants';\nimport useMediaContentSize from './useMediaContentSize';\n\nconst MediaContent: FC<MediaContentProps> = ({\n file,\n previewUrl,\n ratio,\n onClick,\n shouldLoadImages = true,\n playIconSize = 50,\n}) => {\n const isVideo = isVideoFile(file);\n const sourceKey = getMediaSourceUrl(file);\n const previewSourceUrl = getMediaPreviewUrl(file, previewUrl);\n const [hasLoadedFinalMedia, setHasLoadedFinalMedia] = useState(false);\n const imageRef = useRef<HTMLImageElement>(null);\n const videoRef = useRef<HTMLVideoElement>(null);\n const [containerElement, setContainerElement] = useState<HTMLDivElement | null>(null);\n const renderSize = useMediaContentSize(containerElement);\n const devicePixelRatio =\n typeof window !== 'undefined' &&\n Number.isFinite(window.devicePixelRatio) &&\n window.devicePixelRatio > 0\n ? window.devicePixelRatio\n : 1;\n\n const finalSourceUrl = useMemo(\n () =>\n isVideo\n ? sourceKey\n : getResponsiveImageServiceUrl(sourceKey, renderSize, devicePixelRatio),\n [devicePixelRatio, isVideo, renderSize, sourceKey],\n );\n const displayPreviewUrl = useMemo(\n () =>\n previewSourceUrl\n ? getResponsiveImageServiceUrl(previewSourceUrl, renderSize, devicePixelRatio)\n : undefined,\n [devicePixelRatio, previewSourceUrl, renderSize],\n );\n\n useLayoutEffect(() => {\n setHasLoadedFinalMedia(false);\n }, [sourceKey]);\n\n useLayoutEffect(() => {\n if (!shouldLoadImages) {\n return;\n }\n\n if (!isVideo && imageRef.current?.complete && imageRef.current.naturalWidth > 0) {\n setHasLoadedFinalMedia(true);\n }\n\n if (isVideo && videoRef.current?.readyState && videoRef.current.readyState >= 2) {\n setHasLoadedFinalMedia(true);\n }\n }, [finalSourceUrl, isVideo, shouldLoadImages]);\n\n const shouldRenderFinalImage = shouldLoadImages && Boolean(finalSourceUrl);\n const shouldShowPreview = Boolean(displayPreviewUrl);\n\n if (isVideo) {\n return (\n <StyledMediaContentVideoWrapper\n ref={setContainerElement}\n onClick={onClick}\n $ratio={ratio}\n >\n {displayPreviewUrl && (\n <StyledMediaContentPreviewImage\n draggable={false}\n src={displayPreviewUrl}\n alt=\"\"\n aria-hidden=\"true\"\n style={{\n opacity: shouldLoadImages && hasLoadedFinalMedia ? 0 : 1,\n }}\n />\n )}\n <StyledMediaContentPlayIcon>\n <Icon size={playIconSize} icons={['fa fa-play']} />\n </StyledMediaContentPlayIcon>\n {shouldRenderFinalImage && (\n <StyledMediaContentVideo\n ref={videoRef}\n poster={displayPreviewUrl}\n preload=\"metadata\"\n onLoadedData={() => setHasLoadedFinalMedia(true)}\n style={{\n filter:\n displayPreviewUrl && !hasLoadedFinalMedia\n ? MEDIA_CONTENT_PREVIEW_BLUR\n : 'none',\n transform:\n displayPreviewUrl && !hasLoadedFinalMedia\n ? `scale(${MEDIA_CONTENT_PREVIEW_SCALE})`\n : 'none',\n opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,\n transition: `opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease, filter ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms, transform ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms`,\n }}\n >\n <source src={finalSourceUrl} type=\"video/mp4\" />\n </StyledMediaContentVideo>\n )}\n </StyledMediaContentVideoWrapper>\n );\n }\n\n return (\n <StyledMediaContentImageWrapper ref={setContainerElement} onClick={onClick} $ratio={ratio}>\n {shouldShowPreview && (\n <StyledMediaContentPreviewImage\n draggable={false}\n src={displayPreviewUrl}\n alt=\"\"\n aria-hidden=\"true\"\n style={{\n opacity: shouldLoadImages && hasLoadedFinalMedia ? 0 : 1,\n }}\n />\n )}\n {shouldRenderFinalImage && (\n <StyledMediaContentImage\n ref={imageRef}\n draggable={false}\n src={finalSourceUrl}\n alt=\"\"\n onLoad={() => setHasLoadedFinalMedia(true)}\n style={{\n filter:\n displayPreviewUrl && !hasLoadedFinalMedia\n ? MEDIA_CONTENT_PREVIEW_BLUR\n : 'none',\n transform:\n displayPreviewUrl && !hasLoadedFinalMedia\n ? `scale(${MEDIA_CONTENT_PREVIEW_SCALE})`\n : 'none',\n opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,\n transition: `opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease, filter ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms, transform ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms`,\n }}\n />\n )}\n </StyledMediaContentImageWrapper>\n );\n};\n\nMediaContent.displayName = 'MediaContent';\n\nexport default memo(MediaContent);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MediaContent.js","names":["_core","require","_react","_interopRequireWildcard","_MediaContent","_MediaContent2","_MediaContent3","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","MediaContent","file","previewUrl","ratio","onClick","shouldLoadImages","playIconSize","isVideo","isVideoFile","sourceKey","getMediaSourceUrl","previewSourceUrl","getMediaPreviewUrl","hasLoadedFinalMedia","setHasLoadedFinalMedia","useState","imageRef","useRef","videoRef","finalSourceUrl","displayPreviewUrl","shouldHidePreview","previewLayerStyle","opacity","filter","undefined","finalMediaStyle","transition","MEDIA_CONTENT_IMAGE_FADE_DURATION_MS","useLayoutEffect","_imageRef$current","_videoRef$current","current","complete","naturalWidth","readyState","shouldRenderFinalImage","Boolean","shouldShowPreview","createElement","StyledMediaContentVideoWrapper","$ratio","StyledMediaContentPreviewImage","draggable","src","alt","style","StyledMediaContentPlayIcon","Icon","size","icons","StyledMediaContentVideo","ref","poster","preload","onLoadedData","type","StyledMediaContentImageWrapper","StyledMediaContentImage","onLoad","displayName","_default","exports","memo"],"sources":["../../../../src/components/media-content/MediaContent.tsx"],"sourcesContent":["import { Icon } from '@chayns-components/core';\nimport React, { FC, memo, useLayoutEffect, useRef, useState } from 'react';\nimport {\n StyledMediaContentImage,\n StyledMediaContentImageWrapper,\n StyledMediaContentPlayIcon,\n StyledMediaContentPreviewImage,\n StyledMediaContentVideo,\n StyledMediaContentVideoWrapper,\n} from './MediaContent.styles';\nimport type { MediaContentProps } from './MediaContent.types';\nimport { getMediaPreviewUrl, getMediaSourceUrl, isVideoFile } from './MediaContent.utils';\nimport { MEDIA_CONTENT_IMAGE_FADE_DURATION_MS } from './MediaContent.constants';\n\nconst MediaContent: FC<MediaContentProps> = ({\n file,\n previewUrl,\n ratio,\n onClick,\n shouldLoadImages = true,\n playIconSize = 50,\n}) => {\n const isVideo = isVideoFile(file);\n const sourceKey = getMediaSourceUrl(file);\n const previewSourceUrl = getMediaPreviewUrl(file, previewUrl);\n const [hasLoadedFinalMedia, setHasLoadedFinalMedia] = useState(false);\n const imageRef = useRef<HTMLImageElement>(null);\n const videoRef = useRef<HTMLVideoElement>(null);\n const finalSourceUrl = sourceKey;\n const displayPreviewUrl = previewSourceUrl;\n const shouldHidePreview = shouldLoadImages && hasLoadedFinalMedia;\n const previewLayerStyle = {\n opacity: shouldHidePreview ? 0 : 1,\n filter: shouldHidePreview ? 'blur(0px)' : undefined,\n };\n const finalMediaStyle = {\n opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,\n transition: `opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease`,\n };\n\n useLayoutEffect(() => {\n setHasLoadedFinalMedia(false);\n }, [sourceKey]);\n\n useLayoutEffect(() => {\n if (!shouldLoadImages) {\n return;\n }\n\n if (!isVideo && imageRef.current?.complete && imageRef.current.naturalWidth > 0) {\n setHasLoadedFinalMedia(true);\n }\n\n if (isVideo && videoRef.current?.readyState && videoRef.current.readyState >= 2) {\n setHasLoadedFinalMedia(true);\n }\n }, [finalSourceUrl, isVideo, shouldLoadImages]);\n\n const shouldRenderFinalImage = shouldLoadImages && Boolean(finalSourceUrl);\n const shouldShowPreview = Boolean(displayPreviewUrl);\n\n if (isVideo) {\n return (\n <StyledMediaContentVideoWrapper onClick={onClick} $ratio={ratio}>\n {displayPreviewUrl && (\n <StyledMediaContentPreviewImage\n draggable={false}\n src={displayPreviewUrl}\n alt=\"\"\n aria-hidden=\"true\"\n style={previewLayerStyle}\n />\n )}\n <StyledMediaContentPlayIcon>\n <Icon size={playIconSize} icons={['fa fa-play']} />\n </StyledMediaContentPlayIcon>\n {shouldRenderFinalImage && (\n <StyledMediaContentVideo\n ref={videoRef}\n poster={displayPreviewUrl}\n preload=\"metadata\"\n onLoadedData={() => setHasLoadedFinalMedia(true)}\n style={finalMediaStyle}\n >\n <source src={finalSourceUrl} type=\"video/mp4\" />\n </StyledMediaContentVideo>\n )}\n </StyledMediaContentVideoWrapper>\n );\n }\n\n return (\n <StyledMediaContentImageWrapper onClick={onClick} $ratio={ratio}>\n {shouldShowPreview && (\n <StyledMediaContentPreviewImage\n draggable={false}\n src={displayPreviewUrl}\n alt=\"\"\n aria-hidden=\"true\"\n style={previewLayerStyle}\n />\n )}\n {shouldRenderFinalImage && (\n <StyledMediaContentImage\n ref={imageRef}\n draggable={false}\n src={finalSourceUrl}\n alt=\"\"\n onLoad={() => setHasLoadedFinalMedia(true)}\n style={finalMediaStyle}\n />\n )}\n </StyledMediaContentImageWrapper>\n );\n};\n\nMediaContent.displayName = 'MediaContent';\n\nexport default memo(MediaContent);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -43,12 +43,12 @@ const StyledMediaContentPreviewImage = exports.StyledMediaContentPreviewImage =
|
|
|
43
43
|
rgba(${({
|
|
44
44
|
theme
|
|
45
45
|
}) => theme['009-rgb']}, 0.08) inset;
|
|
46
|
-
z-index:
|
|
46
|
+
z-index: 2;
|
|
47
47
|
filter: ${_MediaContent.MEDIA_CONTENT_PREVIEW_BLUR};
|
|
48
|
-
transform: scale(${_MediaContent.MEDIA_CONTENT_PREVIEW_SCALE});
|
|
49
48
|
transition:
|
|
50
49
|
opacity ${_MediaContent.MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease,
|
|
51
|
-
filter ${_MediaContent.
|
|
50
|
+
filter ${_MediaContent.MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS}ms ease
|
|
51
|
+
${_MediaContent.MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS}ms;
|
|
52
52
|
`;
|
|
53
53
|
const StyledMediaContentImage = exports.StyledMediaContentImage = (0, _styledComponents.default)(StyledMediaContentLayer)`
|
|
54
54
|
background-color: ${({
|
|
@@ -58,7 +58,7 @@ const StyledMediaContentImage = exports.StyledMediaContentImage = (0, _styledCom
|
|
|
58
58
|
rgba(${({
|
|
59
59
|
theme
|
|
60
60
|
}) => theme['009-rgb']}, 0.08) inset;
|
|
61
|
-
z-index:
|
|
61
|
+
z-index: 1;
|
|
62
62
|
transition: opacity ${_MediaContent.MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease;
|
|
63
63
|
`;
|
|
64
64
|
const StyledMediaContentVideo = exports.StyledMediaContentVideo = _styledComponents.default.video`
|
|
@@ -75,10 +75,11 @@ const StyledMediaContentVideo = exports.StyledMediaContentVideo = _styledCompone
|
|
|
75
75
|
height: 100%;
|
|
76
76
|
object-fit: cover;
|
|
77
77
|
pointer-events: none;
|
|
78
|
+
z-index: 1;
|
|
78
79
|
`;
|
|
79
80
|
const StyledMediaContentPlayIcon = exports.StyledMediaContentPlayIcon = _styledComponents.default.div`
|
|
80
81
|
position: absolute;
|
|
81
|
-
z-index:
|
|
82
|
+
z-index: 3;
|
|
82
83
|
top: 50%;
|
|
83
84
|
left: 50%;
|
|
84
85
|
transform: translate(-50%, -50%);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaContent.styles.js","names":["_styledComponents","_interopRequireDefault","require","_MediaContent","e","__esModule","default","StyledMediaContentVideoWrapper","exports","styled","div","$ratio","StyledMediaContentImageWrapper","StyledMediaContentLayer","img","StyledMediaContentPreviewImage","theme","MEDIA_CONTENT_PREVIEW_BLUR","
|
|
1
|
+
{"version":3,"file":"MediaContent.styles.js","names":["_styledComponents","_interopRequireDefault","require","_MediaContent","e","__esModule","default","StyledMediaContentVideoWrapper","exports","styled","div","$ratio","StyledMediaContentImageWrapper","StyledMediaContentLayer","img","StyledMediaContentPreviewImage","theme","MEDIA_CONTENT_PREVIEW_BLUR","MEDIA_CONTENT_IMAGE_FADE_DURATION_MS","MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS","MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS","StyledMediaContentImage","StyledMediaContentVideo","video","StyledMediaContentPlayIcon"],"sources":["../../../../src/components/media-content/MediaContent.styles.ts"],"sourcesContent":["import type { WithTheme } from '@chayns-components/core';\nimport styled from 'styled-components';\nimport {\n MEDIA_CONTENT_IMAGE_FADE_DURATION_MS,\n MEDIA_CONTENT_PREVIEW_BLUR,\n MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS,\n MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS,\n} from './MediaContent.constants';\n\nexport const StyledMediaContentVideoWrapper = styled.div<{ $ratio: number }>`\n display: flex;\n position: relative;\n overflow: hidden;\n width: 100%;\n height: 100%;\n aspect-ratio: ${({ $ratio }) => $ratio};\n`;\n\nexport const StyledMediaContentImageWrapper = styled.div<{ $ratio: number }>`\n display: flex;\n position: relative;\n overflow: hidden;\n width: 100%;\n height: 100%;\n aspect-ratio: ${({ $ratio }) => $ratio};\n`;\n\ntype StyledMediaContentVideoProps = WithTheme<unknown>;\n\ntype StyledMediaContentImageProps = WithTheme<unknown>;\n\nconst StyledMediaContentLayer = styled.img<StyledMediaContentImageProps>`\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n pointer-events: none;\n`;\n\nexport const StyledMediaContentPreviewImage = styled(StyledMediaContentLayer)`\n background-color: ${({ theme }: StyledMediaContentImageProps) => theme['101']};\n box-shadow: 0 0 0 1px\n rgba(${({ theme }: StyledMediaContentImageProps) => theme['009-rgb']}, 0.08) inset;\n z-index: 2;\n filter: ${MEDIA_CONTENT_PREVIEW_BLUR};\n transition:\n opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease,\n filter ${MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS}ms ease\n ${MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS}ms;\n`;\n\nexport const StyledMediaContentImage = styled(StyledMediaContentLayer)`\n background-color: ${({ theme }: StyledMediaContentImageProps) => theme['101']};\n box-shadow: 0 0 0 1px\n rgba(${({ theme }: StyledMediaContentImageProps) => theme['009-rgb']}, 0.08) inset;\n z-index: 1;\n transition: opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease;\n`;\n\nexport const StyledMediaContentVideo = styled.video<StyledMediaContentVideoProps>`\n background-color: ${({ theme }: StyledMediaContentVideoProps) => theme['101']};\n box-shadow: 0 0 0 1px\n rgba(${({ theme }: StyledMediaContentVideoProps) => theme['009-rgb']}, 0.08) inset;\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n pointer-events: none;\n z-index: 1;\n`;\n\nexport const StyledMediaContentPlayIcon = styled.div`\n position: absolute;\n z-index: 3;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKkC,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE3B,MAAMG,8BAA8B,GAAAC,OAAA,CAAAD,8BAAA,GAAGE,yBAAM,CAACC,GAAuB;AAC5E;AACA;AACA;AACA;AACA;AACA,oBAAoB,CAAC;EAAEC;AAAO,CAAC,KAAKA,MAAM;AAC1C,CAAC;AAEM,MAAMC,8BAA8B,GAAAJ,OAAA,CAAAI,8BAAA,GAAGH,yBAAM,CAACC,GAAuB;AAC5E;AACA;AACA;AACA;AACA;AACA,oBAAoB,CAAC;EAAEC;AAAO,CAAC,KAAKA,MAAM;AAC1C,CAAC;AAMD,MAAME,uBAAuB,GAAGJ,yBAAM,CAACK,GAAiC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAEM,MAAMC,8BAA8B,GAAAP,OAAA,CAAAO,8BAAA,GAAG,IAAAN,yBAAM,EAACI,uBAAuB,CAAC;AAC7E,wBAAwB,CAAC;EAAEG;AAAoC,CAAC,KAAKA,KAAK,CAAC,KAAK,CAAC;AACjF;AACA,eAAe,CAAC;EAAEA;AAAoC,CAAC,KAAKA,KAAK,CAAC,SAAS,CAAC;AAC5E;AACA,cAAcC,wCAA0B;AACxC;AACA,kBAAkBC,kDAAoC;AACtD,iBAAiBC,2DAA6C;AAC9D,cAAcC,wDAA0C;AACxD,CAAC;AAEM,MAAMC,uBAAuB,GAAAb,OAAA,CAAAa,uBAAA,GAAG,IAAAZ,yBAAM,EAACI,uBAAuB,CAAC;AACtE,wBAAwB,CAAC;EAAEG;AAAoC,CAAC,KAAKA,KAAK,CAAC,KAAK,CAAC;AACjF;AACA,eAAe,CAAC;EAAEA;AAAoC,CAAC,KAAKA,KAAK,CAAC,SAAS,CAAC;AAC5E;AACA,0BAA0BE,kDAAoC;AAC9D,CAAC;AAEM,MAAMI,uBAAuB,GAAAd,OAAA,CAAAc,uBAAA,GAAGb,yBAAM,CAACc,KAAmC;AACjF,wBAAwB,CAAC;EAAEP;AAAoC,CAAC,KAAKA,KAAK,CAAC,KAAK,CAAC;AACjF;AACA,eAAe,CAAC;EAAEA;AAAoC,CAAC,KAAKA,KAAK,CAAC,SAAS,CAAC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAEM,MAAMQ,0BAA0B,GAAAhB,OAAA,CAAAgB,0BAAA,GAAGf,yBAAM,CAACC,GAAG;AACpD;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.isVideoFile = exports.
|
|
7
|
-
const IMAGE_SERVICE_ORIGINS = new Set(['https://tsimg.cloud', 'https://tsimg.space']);
|
|
8
|
-
const IMAGE_SERVICE_PARAM_PATTERN = /^(?:m(?:scale|crop|shortedgescale)|[whsbd]\d+)$/i;
|
|
9
|
-
const IMAGE_SERVICE_RESIZE_OVERSCAN = 1.25;
|
|
6
|
+
exports.isVideoFile = exports.getMediaSourceUrl = exports.getMediaPreviewUrl = void 0;
|
|
10
7
|
const isVideoFile = file => 'thumbnailUrl' in file;
|
|
11
8
|
exports.isVideoFile = isVideoFile;
|
|
12
9
|
const getMediaSourceUrl = file => file.url.replace('_0.mp4', '.mp4');
|
|
@@ -22,63 +19,4 @@ const getMediaPreviewUrl = (file, previewUrl) => {
|
|
|
22
19
|
return (_file$meta = file.meta) === null || _file$meta === void 0 ? void 0 : _file$meta.preview;
|
|
23
20
|
};
|
|
24
21
|
exports.getMediaPreviewUrl = getMediaPreviewUrl;
|
|
25
|
-
const isImageServiceUrl = url => {
|
|
26
|
-
try {
|
|
27
|
-
return IMAGE_SERVICE_ORIGINS.has(new URL(url).origin);
|
|
28
|
-
} catch (_) {
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
exports.isImageServiceUrl = isImageServiceUrl;
|
|
33
|
-
const hasImageServiceTransformParameters = url => {
|
|
34
|
-
if (!isImageServiceUrl(url)) {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
try {
|
|
38
|
-
const urlObject = new URL(url);
|
|
39
|
-
const fileName = urlObject.pathname.split('/').pop();
|
|
40
|
-
if (!fileName) {
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
const extensionIndex = fileName.lastIndexOf('.');
|
|
44
|
-
const nameWithoutExtension = extensionIndex > -1 ? fileName.slice(0, extensionIndex) : fileName;
|
|
45
|
-
const parameterSegment = nameWithoutExtension.split('_').pop();
|
|
46
|
-
if (!parameterSegment || parameterSegment === nameWithoutExtension) {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
return parameterSegment.split('-').every(parameter => IMAGE_SERVICE_PARAM_PATTERN.test(parameter));
|
|
50
|
-
} catch (_) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
exports.hasImageServiceTransformParameters = hasImageServiceTransformParameters;
|
|
55
|
-
const buildImageServiceParameterSegment = (size, devicePixelRatio) => {
|
|
56
|
-
const scaleFactor = Number.isFinite(devicePixelRatio) && devicePixelRatio > 0 ? devicePixelRatio : 1;
|
|
57
|
-
const width = Math.max(1, Math.ceil(size.width * scaleFactor * IMAGE_SERVICE_RESIZE_OVERSCAN));
|
|
58
|
-
const height = Math.max(1, Math.ceil(size.height * scaleFactor * IMAGE_SERVICE_RESIZE_OVERSCAN));
|
|
59
|
-
return `w${width}-h${height}`;
|
|
60
|
-
};
|
|
61
|
-
const getResponsiveImageServiceUrl = (url, size, devicePixelRatio = 1) => {
|
|
62
|
-
if (!size || hasImageServiceTransformParameters(url) || !isImageServiceUrl(url)) {
|
|
63
|
-
return url;
|
|
64
|
-
}
|
|
65
|
-
try {
|
|
66
|
-
const urlObject = new URL(url);
|
|
67
|
-
const pathSegments = urlObject.pathname.split('/');
|
|
68
|
-
const fileName = pathSegments.pop();
|
|
69
|
-
if (!fileName) {
|
|
70
|
-
return url;
|
|
71
|
-
}
|
|
72
|
-
const extensionIndex = fileName.lastIndexOf('.');
|
|
73
|
-
const extension = extensionIndex > -1 ? fileName.slice(extensionIndex) : '';
|
|
74
|
-
const fileBaseName = extensionIndex > -1 ? fileName.slice(0, extensionIndex) : fileName;
|
|
75
|
-
const parameterSegment = buildImageServiceParameterSegment(size, devicePixelRatio);
|
|
76
|
-
pathSegments.push(`${fileBaseName}_${parameterSegment}${extension}`);
|
|
77
|
-
urlObject.pathname = pathSegments.join('/');
|
|
78
|
-
return urlObject.toString();
|
|
79
|
-
} catch (_) {
|
|
80
|
-
return url;
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
exports.getResponsiveImageServiceUrl = getResponsiveImageServiceUrl;
|
|
84
22
|
//# sourceMappingURL=MediaContent.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaContent.utils.js","names":["
|
|
1
|
+
{"version":3,"file":"MediaContent.utils.js","names":["isVideoFile","file","exports","getMediaSourceUrl","url","replace","getMediaPreviewUrl","previewUrl","_file$meta","thumbnailUrl","meta","preview"],"sources":["../../../../src/components/media-content/MediaContent.utils.ts"],"sourcesContent":["import type { FileItem, Video } from '@chayns-components/core';\n\nexport type GalleryMediaFile = FileItem['file'];\n\nexport const isVideoFile = (file: GalleryMediaFile): file is Video => 'thumbnailUrl' in file;\n\nexport const getMediaSourceUrl = (file: GalleryMediaFile): string =>\n file.url.replace('_0.mp4', '.mp4');\n\nexport const getMediaPreviewUrl = (\n file: GalleryMediaFile,\n previewUrl?: string,\n): string | undefined => {\n if (previewUrl) {\n return previewUrl;\n }\n\n if (isVideoFile(file)) {\n return file.thumbnailUrl;\n }\n\n return file.meta?.preview;\n};\n"],"mappings":";;;;;;AAIO,MAAMA,WAAW,GAAIC,IAAsB,IAAoB,cAAc,IAAIA,IAAI;AAACC,OAAA,CAAAF,WAAA,GAAAA,WAAA;AAEtF,MAAMG,iBAAiB,GAAIF,IAAsB,IACpDA,IAAI,CAACG,GAAG,CAACC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;AAACH,OAAA,CAAAC,iBAAA,GAAAA,iBAAA;AAEhC,MAAMG,kBAAkB,GAAGA,CAC9BL,IAAsB,EACtBM,UAAmB,KACE;EAAA,IAAAC,UAAA;EACrB,IAAID,UAAU,EAAE;IACZ,OAAOA,UAAU;EACrB;EAEA,IAAIP,WAAW,CAACC,IAAI,CAAC,EAAE;IACnB,OAAOA,IAAI,CAACQ,YAAY;EAC5B;EAEA,QAAAD,UAAA,GAAOP,IAAI,CAACS,IAAI,cAAAF,UAAA,uBAATA,UAAA,CAAWG,OAAO;AAC7B,CAAC;AAACT,OAAA,CAAAI,kBAAA,GAAAA,kBAAA","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useCallback } from 'react';
|
|
1
|
+
import React, { memo, useCallback } from 'react';
|
|
2
2
|
import GalleryViewerItem from './gallery-viewer-item/GalleryViewerItem';
|
|
3
3
|
import { StyledGalleryViewer, StyledGalleryViewerItemWrapper } from './GalleryViewer.styles';
|
|
4
4
|
import { getGalleryRatio, getGalleryViewerKey, getReadOnlyItemRatio, openKnownFiles } from '../../utils/gallery';
|
|
@@ -34,5 +34,5 @@ const GalleryViewer = ({
|
|
|
34
34
|
}))));
|
|
35
35
|
};
|
|
36
36
|
GalleryViewer.displayName = 'GalleryViewer';
|
|
37
|
-
export default GalleryViewer;
|
|
37
|
+
export default /*#__PURE__*/memo(GalleryViewer);
|
|
38
38
|
//# sourceMappingURL=GalleryViewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GalleryViewer.js","names":["React","useCallback","GalleryViewerItem","StyledGalleryViewer","StyledGalleryViewerItemWrapper","getGalleryRatio","getGalleryViewerKey","getReadOnlyItemRatio","openKnownFiles","GalleryViewMode","GALLERY_VIEWER_MAX_VISIBLE_ITEMS","EMPTY_FILE_ITEMS","GalleryViewer","files","shouldLoadImages","viewMode","GRID","fileItems","ratio","handleOpenFiles","file","visibleItems","slice","createElement","$ratio","$itemCount","length","$viewMode","map","index","key","fileItem","onClick","remainingItemsLength","undefined","displayName"],"sources":["../../../../src/components/gallery-viewer/GalleryViewer.tsx"],"sourcesContent":["import type { FileItem } from '@chayns-components/core';\nimport React, { FC, useCallback } from 'react';\nimport GalleryViewerItem from './gallery-viewer-item/GalleryViewerItem';\nimport { StyledGalleryViewer, StyledGalleryViewerItemWrapper } from './GalleryViewer.styles';\nimport type { GalleryViewerProps } from './GalleryViewer.types';\nimport {\n getGalleryRatio,\n getGalleryViewerKey,\n getReadOnlyItemRatio,\n openKnownFiles,\n} from '../../utils/gallery';\nimport { GalleryViewMode } from '../../types/gallery';\nimport { GALLERY_VIEWER_MAX_VISIBLE_ITEMS } from './GalleryViewer.constants';\n\nconst EMPTY_FILE_ITEMS: FileItem[] = [];\n\nconst GalleryViewer: FC<GalleryViewerProps> = ({\n files,\n shouldLoadImages = true,\n viewMode = GalleryViewMode.GRID,\n}) => {\n const fileItems = files ?? EMPTY_FILE_ITEMS;\n const ratio = getGalleryRatio(fileItems);\n\n const handleOpenFiles = useCallback(\n (file: FileItem) => {\n openKnownFiles(fileItems, file);\n },\n [fileItems],\n );\n\n const visibleItems = fileItems.slice(0, GALLERY_VIEWER_MAX_VISIBLE_ITEMS);\n\n return (\n <StyledGalleryViewer>\n <StyledGalleryViewerItemWrapper\n $ratio={ratio}\n $itemCount={fileItems.length}\n $viewMode={viewMode}\n >\n {visibleItems.map((file, index) => (\n <GalleryViewerItem\n key={getGalleryViewerKey(file, index)}\n fileItem={file}\n onClick={handleOpenFiles}\n ratio={getReadOnlyItemRatio({ fileItems, index, viewMode })}\n shouldLoadImages={shouldLoadImages}\n remainingItemsLength={\n fileItems.length > GALLERY_VIEWER_MAX_VISIBLE_ITEMS && index === 3\n ? fileItems.length\n : undefined\n }\n />\n ))}\n </StyledGalleryViewerItemWrapper>\n </StyledGalleryViewer>\n );\n};\n\nGalleryViewer.displayName = 'GalleryViewer';\n\nexport default GalleryViewer;\n"],"mappings":"AACA,OAAOA,KAAK,IAAQC,WAAW,QAAQ,OAAO;
|
|
1
|
+
{"version":3,"file":"GalleryViewer.js","names":["React","memo","useCallback","GalleryViewerItem","StyledGalleryViewer","StyledGalleryViewerItemWrapper","getGalleryRatio","getGalleryViewerKey","getReadOnlyItemRatio","openKnownFiles","GalleryViewMode","GALLERY_VIEWER_MAX_VISIBLE_ITEMS","EMPTY_FILE_ITEMS","GalleryViewer","files","shouldLoadImages","viewMode","GRID","fileItems","ratio","handleOpenFiles","file","visibleItems","slice","createElement","$ratio","$itemCount","length","$viewMode","map","index","key","fileItem","onClick","remainingItemsLength","undefined","displayName"],"sources":["../../../../src/components/gallery-viewer/GalleryViewer.tsx"],"sourcesContent":["import type { FileItem } from '@chayns-components/core';\nimport React, { FC, memo, useCallback } from 'react';\nimport GalleryViewerItem from './gallery-viewer-item/GalleryViewerItem';\nimport { StyledGalleryViewer, StyledGalleryViewerItemWrapper } from './GalleryViewer.styles';\nimport type { GalleryViewerProps } from './GalleryViewer.types';\nimport {\n getGalleryRatio,\n getGalleryViewerKey,\n getReadOnlyItemRatio,\n openKnownFiles,\n} from '../../utils/gallery';\nimport { GalleryViewMode } from '../../types/gallery';\nimport { GALLERY_VIEWER_MAX_VISIBLE_ITEMS } from './GalleryViewer.constants';\n\nconst EMPTY_FILE_ITEMS: FileItem[] = [];\n\nconst GalleryViewer: FC<GalleryViewerProps> = ({\n files,\n shouldLoadImages = true,\n viewMode = GalleryViewMode.GRID,\n}) => {\n const fileItems = files ?? EMPTY_FILE_ITEMS;\n const ratio = getGalleryRatio(fileItems);\n\n const handleOpenFiles = useCallback(\n (file: FileItem) => {\n openKnownFiles(fileItems, file);\n },\n [fileItems],\n );\n\n const visibleItems = fileItems.slice(0, GALLERY_VIEWER_MAX_VISIBLE_ITEMS);\n\n return (\n <StyledGalleryViewer>\n <StyledGalleryViewerItemWrapper\n $ratio={ratio}\n $itemCount={fileItems.length}\n $viewMode={viewMode}\n >\n {visibleItems.map((file, index) => (\n <GalleryViewerItem\n key={getGalleryViewerKey(file, index)}\n fileItem={file}\n onClick={handleOpenFiles}\n ratio={getReadOnlyItemRatio({ fileItems, index, viewMode })}\n shouldLoadImages={shouldLoadImages}\n remainingItemsLength={\n fileItems.length > GALLERY_VIEWER_MAX_VISIBLE_ITEMS && index === 3\n ? fileItems.length\n : undefined\n }\n />\n ))}\n </StyledGalleryViewerItemWrapper>\n </StyledGalleryViewer>\n );\n};\n\nGalleryViewer.displayName = 'GalleryViewer';\n\nexport default memo(GalleryViewer);\n"],"mappings":"AACA,OAAOA,KAAK,IAAQC,IAAI,EAAEC,WAAW,QAAQ,OAAO;AACpD,OAAOC,iBAAiB,MAAM,yCAAyC;AACvE,SAASC,mBAAmB,EAAEC,8BAA8B,QAAQ,wBAAwB;AAE5F,SACIC,eAAe,EACfC,mBAAmB,EACnBC,oBAAoB,EACpBC,cAAc,QACX,qBAAqB;AAC5B,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,gCAAgC,QAAQ,2BAA2B;AAE5E,MAAMC,gBAA4B,GAAG,EAAE;AAEvC,MAAMC,aAAqC,GAAGA,CAAC;EAC3CC,KAAK;EACLC,gBAAgB,GAAG,IAAI;EACvBC,QAAQ,GAAGN,eAAe,CAACO;AAC/B,CAAC,KAAK;EACF,MAAMC,SAAS,GAAGJ,KAAK,IAAIF,gBAAgB;EAC3C,MAAMO,KAAK,GAAGb,eAAe,CAACY,SAAS,CAAC;EAExC,MAAME,eAAe,GAAGlB,WAAW,CAC9BmB,IAAc,IAAK;IAChBZ,cAAc,CAACS,SAAS,EAAEG,IAAI,CAAC;EACnC,CAAC,EACD,CAACH,SAAS,CACd,CAAC;EAED,MAAMI,YAAY,GAAGJ,SAAS,CAACK,KAAK,CAAC,CAAC,EAAEZ,gCAAgC,CAAC;EAEzE,oBACIX,KAAA,CAAAwB,aAAA,CAACpB,mBAAmB,qBAChBJ,KAAA,CAAAwB,aAAA,CAACnB,8BAA8B;IAC3BoB,MAAM,EAAEN,KAAM;IACdO,UAAU,EAAER,SAAS,CAACS,MAAO;IAC7BC,SAAS,EAAEZ;EAAS,GAEnBM,YAAY,CAACO,GAAG,CAAC,CAACR,IAAI,EAAES,KAAK,kBAC1B9B,KAAA,CAAAwB,aAAA,CAACrB,iBAAiB;IACd4B,GAAG,EAAExB,mBAAmB,CAACc,IAAI,EAAES,KAAK,CAAE;IACtCE,QAAQ,EAAEX,IAAK;IACfY,OAAO,EAAEb,eAAgB;IACzBD,KAAK,EAAEX,oBAAoB,CAAC;MAAEU,SAAS;MAAEY,KAAK;MAAEd;IAAS,CAAC,CAAE;IAC5DD,gBAAgB,EAAEA,gBAAiB;IACnCmB,oBAAoB,EAChBhB,SAAS,CAACS,MAAM,GAAGhB,gCAAgC,IAAImB,KAAK,KAAK,CAAC,GAC5DZ,SAAS,CAACS,MAAM,GAChBQ;EACT,CACJ,CACJ,CAC2B,CACf,CAAC;AAE9B,CAAC;AAEDtB,aAAa,CAACuB,WAAW,GAAG,eAAe;AAE3C,4BAAenC,IAAI,CAACY,aAAa,CAAC","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { memo } from 'react';
|
|
1
|
+
import React, { memo, useCallback } from 'react';
|
|
2
2
|
import MediaContent from '../../media-content/MediaContent';
|
|
3
3
|
import { StyledGalleryViewerItem, StyledGalleryViewerMoreItemsIndicator } from './GalleryViewerItem.styles';
|
|
4
4
|
const GalleryViewerItem = ({
|
|
@@ -7,14 +7,17 @@ const GalleryViewerItem = ({
|
|
|
7
7
|
ratio = 1,
|
|
8
8
|
remainingItemsLength,
|
|
9
9
|
onClick
|
|
10
|
-
}) =>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}, /*#__PURE__*/React.createElement(
|
|
10
|
+
}) => {
|
|
11
|
+
const handleClick = useCallback(() => onClick(fileItem), [fileItem, onClick]);
|
|
12
|
+
return /*#__PURE__*/React.createElement(StyledGalleryViewerItem, null, /*#__PURE__*/React.createElement(MediaContent, {
|
|
13
|
+
file: fileItem.file,
|
|
14
|
+
onClick: handleClick,
|
|
15
|
+
ratio: ratio,
|
|
16
|
+
shouldLoadImages: shouldLoadImages
|
|
17
|
+
}), remainingItemsLength && /*#__PURE__*/React.createElement(StyledGalleryViewerMoreItemsIndicator, {
|
|
18
|
+
onClick: handleClick
|
|
19
|
+
}, /*#__PURE__*/React.createElement("p", null, `+ ${remainingItemsLength - 3}`)));
|
|
20
|
+
};
|
|
18
21
|
GalleryViewerItem.displayName = 'GalleryViewerItem';
|
|
19
22
|
export default /*#__PURE__*/memo(GalleryViewerItem);
|
|
20
23
|
//# sourceMappingURL=GalleryViewerItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GalleryViewerItem.js","names":["React","memo","MediaContent","StyledGalleryViewerItem","StyledGalleryViewerMoreItemsIndicator","GalleryViewerItem","fileItem","shouldLoadImages","ratio","remainingItemsLength","onClick","createElement","file","displayName"],"sources":["../../../../../src/components/gallery-viewer/gallery-viewer-item/GalleryViewerItem.tsx"],"sourcesContent":["import React, { FC, memo } from 'react';\nimport MediaContent from '../../media-content/MediaContent';\nimport {\n StyledGalleryViewerItem,\n StyledGalleryViewerMoreItemsIndicator,\n} from './GalleryViewerItem.styles';\nimport type { GalleryViewerItemProps } from './GalleryViewerItem.types';\n\nconst GalleryViewerItem: FC<GalleryViewerItemProps> = ({\n fileItem,\n shouldLoadImages = true,\n ratio = 1,\n remainingItemsLength,\n onClick,\n}) => (\n <StyledGalleryViewerItem>\n
|
|
1
|
+
{"version":3,"file":"GalleryViewerItem.js","names":["React","memo","useCallback","MediaContent","StyledGalleryViewerItem","StyledGalleryViewerMoreItemsIndicator","GalleryViewerItem","fileItem","shouldLoadImages","ratio","remainingItemsLength","onClick","handleClick","createElement","file","displayName"],"sources":["../../../../../src/components/gallery-viewer/gallery-viewer-item/GalleryViewerItem.tsx"],"sourcesContent":["import React, { FC, memo, useCallback } from 'react';\nimport MediaContent from '../../media-content/MediaContent';\nimport {\n StyledGalleryViewerItem,\n StyledGalleryViewerMoreItemsIndicator,\n} from './GalleryViewerItem.styles';\nimport type { GalleryViewerItemProps } from './GalleryViewerItem.types';\n\nconst GalleryViewerItem: FC<GalleryViewerItemProps> = ({\n fileItem,\n shouldLoadImages = true,\n ratio = 1,\n remainingItemsLength,\n onClick,\n}) => {\n const handleClick = useCallback(() => onClick(fileItem), [fileItem, onClick]);\n\n return (\n <StyledGalleryViewerItem>\n <MediaContent\n file={fileItem.file}\n onClick={handleClick}\n ratio={ratio}\n shouldLoadImages={shouldLoadImages}\n />\n {remainingItemsLength && (\n <StyledGalleryViewerMoreItemsIndicator onClick={handleClick}>\n <p>{`+ ${remainingItemsLength - 3}`}</p>\n </StyledGalleryViewerMoreItemsIndicator>\n )}\n </StyledGalleryViewerItem>\n );\n};\n\nGalleryViewerItem.displayName = 'GalleryViewerItem';\n\nexport default memo(GalleryViewerItem);\n"],"mappings":"AAAA,OAAOA,KAAK,IAAQC,IAAI,EAAEC,WAAW,QAAQ,OAAO;AACpD,OAAOC,YAAY,MAAM,kCAAkC;AAC3D,SACIC,uBAAuB,EACvBC,qCAAqC,QAClC,4BAA4B;AAGnC,MAAMC,iBAA6C,GAAGA,CAAC;EACnDC,QAAQ;EACRC,gBAAgB,GAAG,IAAI;EACvBC,KAAK,GAAG,CAAC;EACTC,oBAAoB;EACpBC;AACJ,CAAC,KAAK;EACF,MAAMC,WAAW,GAAGV,WAAW,CAAC,MAAMS,OAAO,CAACJ,QAAQ,CAAC,EAAE,CAACA,QAAQ,EAAEI,OAAO,CAAC,CAAC;EAE7E,oBACIX,KAAA,CAAAa,aAAA,CAACT,uBAAuB,qBACpBJ,KAAA,CAAAa,aAAA,CAACV,YAAY;IACTW,IAAI,EAAEP,QAAQ,CAACO,IAAK;IACpBH,OAAO,EAAEC,WAAY;IACrBH,KAAK,EAAEA,KAAM;IACbD,gBAAgB,EAAEA;EAAiB,CACtC,CAAC,EACDE,oBAAoB,iBACjBV,KAAA,CAAAa,aAAA,CAACR,qCAAqC;IAACM,OAAO,EAAEC;EAAY,gBACxDZ,KAAA,CAAAa,aAAA,YAAI,KAAKH,oBAAoB,GAAG,CAAC,EAAM,CACJ,CAEtB,CAAC;AAElC,CAAC;AAEDJ,iBAAiB,CAACS,WAAW,GAAG,mBAAmB;AAEnD,4BAAed,IAAI,CAACK,iBAAiB,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export const MEDIA_CONTENT_IMAGE_FADE_DURATION_MS =
|
|
2
|
-
export const
|
|
3
|
-
export const
|
|
4
|
-
export const
|
|
5
|
-
export const MEDIA_CONTENT_PREVIEW_SCALE = 1.05;
|
|
1
|
+
export const MEDIA_CONTENT_IMAGE_FADE_DURATION_MS = 180;
|
|
2
|
+
export const MEDIA_CONTENT_PREVIEW_BLUR = 'blur(6px)';
|
|
3
|
+
export const MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS = 100;
|
|
4
|
+
export const MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS = 200;
|
|
6
5
|
//# sourceMappingURL=MediaContent.constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaContent.constants.js","names":["MEDIA_CONTENT_IMAGE_FADE_DURATION_MS","
|
|
1
|
+
{"version":3,"file":"MediaContent.constants.js","names":["MEDIA_CONTENT_IMAGE_FADE_DURATION_MS","MEDIA_CONTENT_PREVIEW_BLUR","MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS","MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS"],"sources":["../../../../src/components/media-content/MediaContent.constants.ts"],"sourcesContent":["export const MEDIA_CONTENT_IMAGE_FADE_DURATION_MS = 180;\nexport const MEDIA_CONTENT_PREVIEW_BLUR = 'blur(6px)';\nexport const MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS = 100;\nexport const MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS = 200;\n"],"mappings":"AAAA,OAAO,MAAMA,oCAAoC,GAAG,GAAG;AACvD,OAAO,MAAMC,0BAA0B,GAAG,WAAW;AACrD,OAAO,MAAMC,0CAA0C,GAAG,GAAG;AAC7D,OAAO,MAAMC,6CAA6C,GAAG,GAAG","ignoreList":[]}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Icon } from '@chayns-components/core';
|
|
2
|
-
import React, { memo, useLayoutEffect,
|
|
2
|
+
import React, { memo, useLayoutEffect, useRef, useState } from 'react';
|
|
3
3
|
import { StyledMediaContentImage, StyledMediaContentImageWrapper, StyledMediaContentPlayIcon, StyledMediaContentPreviewImage, StyledMediaContentVideo, StyledMediaContentVideoWrapper } from './MediaContent.styles';
|
|
4
|
-
import { getMediaPreviewUrl, getMediaSourceUrl,
|
|
5
|
-
import { MEDIA_CONTENT_IMAGE_FADE_DURATION_MS
|
|
6
|
-
import useMediaContentSize from './useMediaContentSize';
|
|
4
|
+
import { getMediaPreviewUrl, getMediaSourceUrl, isVideoFile } from './MediaContent.utils';
|
|
5
|
+
import { MEDIA_CONTENT_IMAGE_FADE_DURATION_MS } from './MediaContent.constants';
|
|
7
6
|
const MediaContent = ({
|
|
8
7
|
file,
|
|
9
8
|
previewUrl,
|
|
@@ -18,11 +17,17 @@ const MediaContent = ({
|
|
|
18
17
|
const [hasLoadedFinalMedia, setHasLoadedFinalMedia] = useState(false);
|
|
19
18
|
const imageRef = useRef(null);
|
|
20
19
|
const videoRef = useRef(null);
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
|
|
20
|
+
const finalSourceUrl = sourceKey;
|
|
21
|
+
const displayPreviewUrl = previewSourceUrl;
|
|
22
|
+
const shouldHidePreview = shouldLoadImages && hasLoadedFinalMedia;
|
|
23
|
+
const previewLayerStyle = {
|
|
24
|
+
opacity: shouldHidePreview ? 0 : 1,
|
|
25
|
+
filter: shouldHidePreview ? 'blur(0px)' : undefined
|
|
26
|
+
};
|
|
27
|
+
const finalMediaStyle = {
|
|
28
|
+
opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,
|
|
29
|
+
transition: `opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease`
|
|
30
|
+
};
|
|
26
31
|
useLayoutEffect(() => {
|
|
27
32
|
setHasLoadedFinalMedia(false);
|
|
28
33
|
}, [sourceKey]);
|
|
@@ -41,7 +46,6 @@ const MediaContent = ({
|
|
|
41
46
|
const shouldShowPreview = Boolean(displayPreviewUrl);
|
|
42
47
|
if (isVideo) {
|
|
43
48
|
return /*#__PURE__*/React.createElement(StyledMediaContentVideoWrapper, {
|
|
44
|
-
ref: setContainerElement,
|
|
45
49
|
onClick: onClick,
|
|
46
50
|
$ratio: ratio
|
|
47
51
|
}, displayPreviewUrl && /*#__PURE__*/React.createElement(StyledMediaContentPreviewImage, {
|
|
@@ -49,9 +53,7 @@ const MediaContent = ({
|
|
|
49
53
|
src: displayPreviewUrl,
|
|
50
54
|
alt: "",
|
|
51
55
|
"aria-hidden": "true",
|
|
52
|
-
style:
|
|
53
|
-
opacity: shouldLoadImages && hasLoadedFinalMedia ? 0 : 1
|
|
54
|
-
}
|
|
56
|
+
style: previewLayerStyle
|
|
55
57
|
}), /*#__PURE__*/React.createElement(StyledMediaContentPlayIcon, null, /*#__PURE__*/React.createElement(Icon, {
|
|
56
58
|
size: playIconSize,
|
|
57
59
|
icons: ['fa fa-play']
|
|
@@ -60,19 +62,13 @@ const MediaContent = ({
|
|
|
60
62
|
poster: displayPreviewUrl,
|
|
61
63
|
preload: "metadata",
|
|
62
64
|
onLoadedData: () => setHasLoadedFinalMedia(true),
|
|
63
|
-
style:
|
|
64
|
-
filter: displayPreviewUrl && !hasLoadedFinalMedia ? MEDIA_CONTENT_PREVIEW_BLUR : 'none',
|
|
65
|
-
transform: displayPreviewUrl && !hasLoadedFinalMedia ? `scale(${MEDIA_CONTENT_PREVIEW_SCALE})` : 'none',
|
|
66
|
-
opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,
|
|
67
|
-
transition: `opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease, filter ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms, transform ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms`
|
|
68
|
-
}
|
|
65
|
+
style: finalMediaStyle
|
|
69
66
|
}, /*#__PURE__*/React.createElement("source", {
|
|
70
67
|
src: finalSourceUrl,
|
|
71
68
|
type: "video/mp4"
|
|
72
69
|
})));
|
|
73
70
|
}
|
|
74
71
|
return /*#__PURE__*/React.createElement(StyledMediaContentImageWrapper, {
|
|
75
|
-
ref: setContainerElement,
|
|
76
72
|
onClick: onClick,
|
|
77
73
|
$ratio: ratio
|
|
78
74
|
}, shouldShowPreview && /*#__PURE__*/React.createElement(StyledMediaContentPreviewImage, {
|
|
@@ -80,21 +76,14 @@ const MediaContent = ({
|
|
|
80
76
|
src: displayPreviewUrl,
|
|
81
77
|
alt: "",
|
|
82
78
|
"aria-hidden": "true",
|
|
83
|
-
style:
|
|
84
|
-
opacity: shouldLoadImages && hasLoadedFinalMedia ? 0 : 1
|
|
85
|
-
}
|
|
79
|
+
style: previewLayerStyle
|
|
86
80
|
}), shouldRenderFinalImage && /*#__PURE__*/React.createElement(StyledMediaContentImage, {
|
|
87
81
|
ref: imageRef,
|
|
88
82
|
draggable: false,
|
|
89
83
|
src: finalSourceUrl,
|
|
90
84
|
alt: "",
|
|
91
85
|
onLoad: () => setHasLoadedFinalMedia(true),
|
|
92
|
-
style:
|
|
93
|
-
filter: displayPreviewUrl && !hasLoadedFinalMedia ? MEDIA_CONTENT_PREVIEW_BLUR : 'none',
|
|
94
|
-
transform: displayPreviewUrl && !hasLoadedFinalMedia ? `scale(${MEDIA_CONTENT_PREVIEW_SCALE})` : 'none',
|
|
95
|
-
opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,
|
|
96
|
-
transition: `opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease, filter ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms, transform ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms`
|
|
97
|
-
}
|
|
86
|
+
style: finalMediaStyle
|
|
98
87
|
}));
|
|
99
88
|
};
|
|
100
89
|
MediaContent.displayName = 'MediaContent';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaContent.js","names":["Icon","React","memo","useLayoutEffect","useMemo","useRef","useState","StyledMediaContentImage","StyledMediaContentImageWrapper","StyledMediaContentPlayIcon","StyledMediaContentPreviewImage","StyledMediaContentVideo","StyledMediaContentVideoWrapper","getMediaPreviewUrl","getMediaSourceUrl","getResponsiveImageServiceUrl","isVideoFile","MEDIA_CONTENT_IMAGE_FADE_DURATION_MS","MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS","MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS","MEDIA_CONTENT_PREVIEW_BLUR","MEDIA_CONTENT_PREVIEW_SCALE","useMediaContentSize","MediaContent","file","previewUrl","ratio","onClick","shouldLoadImages","playIconSize","isVideo","sourceKey","previewSourceUrl","hasLoadedFinalMedia","setHasLoadedFinalMedia","imageRef","videoRef","containerElement","setContainerElement","renderSize","devicePixelRatio","window","Number","isFinite","finalSourceUrl","displayPreviewUrl","undefined","current","complete","naturalWidth","readyState","shouldRenderFinalImage","Boolean","shouldShowPreview","createElement","ref","$ratio","draggable","src","alt","style","opacity","size","icons","poster","preload","onLoadedData","filter","transform","transition","type","onLoad","displayName"],"sources":["../../../../src/components/media-content/MediaContent.tsx"],"sourcesContent":["import { Icon } from '@chayns-components/core';\nimport React, { FC, memo, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport {\n StyledMediaContentImage,\n StyledMediaContentImageWrapper,\n StyledMediaContentPlayIcon,\n StyledMediaContentPreviewImage,\n StyledMediaContentVideo,\n StyledMediaContentVideoWrapper,\n} from './MediaContent.styles';\nimport type { MediaContentProps } from './MediaContent.types';\nimport {\n getMediaPreviewUrl,\n getMediaSourceUrl,\n getResponsiveImageServiceUrl,\n isVideoFile,\n} from './MediaContent.utils';\nimport {\n MEDIA_CONTENT_IMAGE_FADE_DURATION_MS,\n MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS,\n MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS,\n MEDIA_CONTENT_PREVIEW_BLUR,\n MEDIA_CONTENT_PREVIEW_SCALE,\n} from './MediaContent.constants';\nimport useMediaContentSize from './useMediaContentSize';\n\nconst MediaContent: FC<MediaContentProps> = ({\n file,\n previewUrl,\n ratio,\n onClick,\n shouldLoadImages = true,\n playIconSize = 50,\n}) => {\n const isVideo = isVideoFile(file);\n const sourceKey = getMediaSourceUrl(file);\n const previewSourceUrl = getMediaPreviewUrl(file, previewUrl);\n const [hasLoadedFinalMedia, setHasLoadedFinalMedia] = useState(false);\n const imageRef = useRef<HTMLImageElement>(null);\n const videoRef = useRef<HTMLVideoElement>(null);\n const [containerElement, setContainerElement] = useState<HTMLDivElement | null>(null);\n const renderSize = useMediaContentSize(containerElement);\n const devicePixelRatio =\n typeof window !== 'undefined' &&\n Number.isFinite(window.devicePixelRatio) &&\n window.devicePixelRatio > 0\n ? window.devicePixelRatio\n : 1;\n\n const finalSourceUrl = useMemo(\n () =>\n isVideo\n ? sourceKey\n : getResponsiveImageServiceUrl(sourceKey, renderSize, devicePixelRatio),\n [devicePixelRatio, isVideo, renderSize, sourceKey],\n );\n const displayPreviewUrl = useMemo(\n () =>\n previewSourceUrl\n ? getResponsiveImageServiceUrl(previewSourceUrl, renderSize, devicePixelRatio)\n : undefined,\n [devicePixelRatio, previewSourceUrl, renderSize],\n );\n\n useLayoutEffect(() => {\n setHasLoadedFinalMedia(false);\n }, [sourceKey]);\n\n useLayoutEffect(() => {\n if (!shouldLoadImages) {\n return;\n }\n\n if (!isVideo && imageRef.current?.complete && imageRef.current.naturalWidth > 0) {\n setHasLoadedFinalMedia(true);\n }\n\n if (isVideo && videoRef.current?.readyState && videoRef.current.readyState >= 2) {\n setHasLoadedFinalMedia(true);\n }\n }, [finalSourceUrl, isVideo, shouldLoadImages]);\n\n const shouldRenderFinalImage = shouldLoadImages && Boolean(finalSourceUrl);\n const shouldShowPreview = Boolean(displayPreviewUrl);\n\n if (isVideo) {\n return (\n <StyledMediaContentVideoWrapper\n ref={setContainerElement}\n onClick={onClick}\n $ratio={ratio}\n >\n {displayPreviewUrl && (\n <StyledMediaContentPreviewImage\n draggable={false}\n src={displayPreviewUrl}\n alt=\"\"\n aria-hidden=\"true\"\n style={{\n opacity: shouldLoadImages && hasLoadedFinalMedia ? 0 : 1,\n }}\n />\n )}\n <StyledMediaContentPlayIcon>\n <Icon size={playIconSize} icons={['fa fa-play']} />\n </StyledMediaContentPlayIcon>\n {shouldRenderFinalImage && (\n <StyledMediaContentVideo\n ref={videoRef}\n poster={displayPreviewUrl}\n preload=\"metadata\"\n onLoadedData={() => setHasLoadedFinalMedia(true)}\n style={{\n filter:\n displayPreviewUrl && !hasLoadedFinalMedia\n ? MEDIA_CONTENT_PREVIEW_BLUR\n : 'none',\n transform:\n displayPreviewUrl && !hasLoadedFinalMedia\n ? `scale(${MEDIA_CONTENT_PREVIEW_SCALE})`\n : 'none',\n opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,\n transition: `opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease, filter ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms, transform ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms`,\n }}\n >\n <source src={finalSourceUrl} type=\"video/mp4\" />\n </StyledMediaContentVideo>\n )}\n </StyledMediaContentVideoWrapper>\n );\n }\n\n return (\n <StyledMediaContentImageWrapper ref={setContainerElement} onClick={onClick} $ratio={ratio}>\n {shouldShowPreview && (\n <StyledMediaContentPreviewImage\n draggable={false}\n src={displayPreviewUrl}\n alt=\"\"\n aria-hidden=\"true\"\n style={{\n opacity: shouldLoadImages && hasLoadedFinalMedia ? 0 : 1,\n }}\n />\n )}\n {shouldRenderFinalImage && (\n <StyledMediaContentImage\n ref={imageRef}\n draggable={false}\n src={finalSourceUrl}\n alt=\"\"\n onLoad={() => setHasLoadedFinalMedia(true)}\n style={{\n filter:\n displayPreviewUrl && !hasLoadedFinalMedia\n ? MEDIA_CONTENT_PREVIEW_BLUR\n : 'none',\n transform:\n displayPreviewUrl && !hasLoadedFinalMedia\n ? `scale(${MEDIA_CONTENT_PREVIEW_SCALE})`\n : 'none',\n opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,\n transition: `opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease, filter ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms, transform ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DURATION_MS}ms ease ${MEDIA_CONTENT_IMAGE_BLUR_REMOVE_DELAY_MS}ms`,\n }}\n />\n )}\n </StyledMediaContentImageWrapper>\n );\n};\n\nMediaContent.displayName = 'MediaContent';\n\nexport default memo(MediaContent);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MediaContent.js","names":["Icon","React","memo","useLayoutEffect","useRef","useState","StyledMediaContentImage","StyledMediaContentImageWrapper","StyledMediaContentPlayIcon","StyledMediaContentPreviewImage","StyledMediaContentVideo","StyledMediaContentVideoWrapper","getMediaPreviewUrl","getMediaSourceUrl","isVideoFile","MEDIA_CONTENT_IMAGE_FADE_DURATION_MS","MediaContent","file","previewUrl","ratio","onClick","shouldLoadImages","playIconSize","isVideo","sourceKey","previewSourceUrl","hasLoadedFinalMedia","setHasLoadedFinalMedia","imageRef","videoRef","finalSourceUrl","displayPreviewUrl","shouldHidePreview","previewLayerStyle","opacity","filter","undefined","finalMediaStyle","transition","current","complete","naturalWidth","readyState","shouldRenderFinalImage","Boolean","shouldShowPreview","createElement","$ratio","draggable","src","alt","style","size","icons","ref","poster","preload","onLoadedData","type","onLoad","displayName"],"sources":["../../../../src/components/media-content/MediaContent.tsx"],"sourcesContent":["import { Icon } from '@chayns-components/core';\nimport React, { FC, memo, useLayoutEffect, useRef, useState } from 'react';\nimport {\n StyledMediaContentImage,\n StyledMediaContentImageWrapper,\n StyledMediaContentPlayIcon,\n StyledMediaContentPreviewImage,\n StyledMediaContentVideo,\n StyledMediaContentVideoWrapper,\n} from './MediaContent.styles';\nimport type { MediaContentProps } from './MediaContent.types';\nimport { getMediaPreviewUrl, getMediaSourceUrl, isVideoFile } from './MediaContent.utils';\nimport { MEDIA_CONTENT_IMAGE_FADE_DURATION_MS } from './MediaContent.constants';\n\nconst MediaContent: FC<MediaContentProps> = ({\n file,\n previewUrl,\n ratio,\n onClick,\n shouldLoadImages = true,\n playIconSize = 50,\n}) => {\n const isVideo = isVideoFile(file);\n const sourceKey = getMediaSourceUrl(file);\n const previewSourceUrl = getMediaPreviewUrl(file, previewUrl);\n const [hasLoadedFinalMedia, setHasLoadedFinalMedia] = useState(false);\n const imageRef = useRef<HTMLImageElement>(null);\n const videoRef = useRef<HTMLVideoElement>(null);\n const finalSourceUrl = sourceKey;\n const displayPreviewUrl = previewSourceUrl;\n const shouldHidePreview = shouldLoadImages && hasLoadedFinalMedia;\n const previewLayerStyle = {\n opacity: shouldHidePreview ? 0 : 1,\n filter: shouldHidePreview ? 'blur(0px)' : undefined,\n };\n const finalMediaStyle = {\n opacity: hasLoadedFinalMedia || !displayPreviewUrl ? 1 : 0,\n transition: `opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease`,\n };\n\n useLayoutEffect(() => {\n setHasLoadedFinalMedia(false);\n }, [sourceKey]);\n\n useLayoutEffect(() => {\n if (!shouldLoadImages) {\n return;\n }\n\n if (!isVideo && imageRef.current?.complete && imageRef.current.naturalWidth > 0) {\n setHasLoadedFinalMedia(true);\n }\n\n if (isVideo && videoRef.current?.readyState && videoRef.current.readyState >= 2) {\n setHasLoadedFinalMedia(true);\n }\n }, [finalSourceUrl, isVideo, shouldLoadImages]);\n\n const shouldRenderFinalImage = shouldLoadImages && Boolean(finalSourceUrl);\n const shouldShowPreview = Boolean(displayPreviewUrl);\n\n if (isVideo) {\n return (\n <StyledMediaContentVideoWrapper onClick={onClick} $ratio={ratio}>\n {displayPreviewUrl && (\n <StyledMediaContentPreviewImage\n draggable={false}\n src={displayPreviewUrl}\n alt=\"\"\n aria-hidden=\"true\"\n style={previewLayerStyle}\n />\n )}\n <StyledMediaContentPlayIcon>\n <Icon size={playIconSize} icons={['fa fa-play']} />\n </StyledMediaContentPlayIcon>\n {shouldRenderFinalImage && (\n <StyledMediaContentVideo\n ref={videoRef}\n poster={displayPreviewUrl}\n preload=\"metadata\"\n onLoadedData={() => setHasLoadedFinalMedia(true)}\n style={finalMediaStyle}\n >\n <source src={finalSourceUrl} type=\"video/mp4\" />\n </StyledMediaContentVideo>\n )}\n </StyledMediaContentVideoWrapper>\n );\n }\n\n return (\n <StyledMediaContentImageWrapper onClick={onClick} $ratio={ratio}>\n {shouldShowPreview && (\n <StyledMediaContentPreviewImage\n draggable={false}\n src={displayPreviewUrl}\n alt=\"\"\n aria-hidden=\"true\"\n style={previewLayerStyle}\n />\n )}\n {shouldRenderFinalImage && (\n <StyledMediaContentImage\n ref={imageRef}\n draggable={false}\n src={finalSourceUrl}\n alt=\"\"\n onLoad={() => setHasLoadedFinalMedia(true)}\n style={finalMediaStyle}\n />\n )}\n </StyledMediaContentImageWrapper>\n );\n};\n\nMediaContent.displayName = 'MediaContent';\n\nexport default memo(MediaContent);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import styled from 'styled-components';
|
|
2
|
-
import { MEDIA_CONTENT_IMAGE_FADE_DURATION_MS, MEDIA_CONTENT_PREVIEW_BLUR,
|
|
2
|
+
import { MEDIA_CONTENT_IMAGE_FADE_DURATION_MS, MEDIA_CONTENT_PREVIEW_BLUR, MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS, MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS } from './MediaContent.constants';
|
|
3
3
|
export const StyledMediaContentVideoWrapper = styled.div`
|
|
4
4
|
display: flex;
|
|
5
5
|
position: relative;
|
|
@@ -36,12 +36,12 @@ export const StyledMediaContentPreviewImage = styled(StyledMediaContentLayer)`
|
|
|
36
36
|
rgba(${({
|
|
37
37
|
theme
|
|
38
38
|
}) => theme['009-rgb']}, 0.08) inset;
|
|
39
|
-
z-index:
|
|
39
|
+
z-index: 2;
|
|
40
40
|
filter: ${MEDIA_CONTENT_PREVIEW_BLUR};
|
|
41
|
-
transform: scale(${MEDIA_CONTENT_PREVIEW_SCALE});
|
|
42
41
|
transition:
|
|
43
42
|
opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease,
|
|
44
|
-
filter ${
|
|
43
|
+
filter ${MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS}ms ease
|
|
44
|
+
${MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS}ms;
|
|
45
45
|
`;
|
|
46
46
|
export const StyledMediaContentImage = styled(StyledMediaContentLayer)`
|
|
47
47
|
background-color: ${({
|
|
@@ -51,7 +51,7 @@ export const StyledMediaContentImage = styled(StyledMediaContentLayer)`
|
|
|
51
51
|
rgba(${({
|
|
52
52
|
theme
|
|
53
53
|
}) => theme['009-rgb']}, 0.08) inset;
|
|
54
|
-
z-index:
|
|
54
|
+
z-index: 1;
|
|
55
55
|
transition: opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease;
|
|
56
56
|
`;
|
|
57
57
|
export const StyledMediaContentVideo = styled.video`
|
|
@@ -68,10 +68,11 @@ export const StyledMediaContentVideo = styled.video`
|
|
|
68
68
|
height: 100%;
|
|
69
69
|
object-fit: cover;
|
|
70
70
|
pointer-events: none;
|
|
71
|
+
z-index: 1;
|
|
71
72
|
`;
|
|
72
73
|
export const StyledMediaContentPlayIcon = styled.div`
|
|
73
74
|
position: absolute;
|
|
74
|
-
z-index:
|
|
75
|
+
z-index: 3;
|
|
75
76
|
top: 50%;
|
|
76
77
|
left: 50%;
|
|
77
78
|
transform: translate(-50%, -50%);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaContent.styles.js","names":["styled","MEDIA_CONTENT_IMAGE_FADE_DURATION_MS","MEDIA_CONTENT_PREVIEW_BLUR","
|
|
1
|
+
{"version":3,"file":"MediaContent.styles.js","names":["styled","MEDIA_CONTENT_IMAGE_FADE_DURATION_MS","MEDIA_CONTENT_PREVIEW_BLUR","MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS","MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS","StyledMediaContentVideoWrapper","div","$ratio","StyledMediaContentImageWrapper","StyledMediaContentLayer","img","StyledMediaContentPreviewImage","theme","StyledMediaContentImage","StyledMediaContentVideo","video","StyledMediaContentPlayIcon"],"sources":["../../../../src/components/media-content/MediaContent.styles.ts"],"sourcesContent":["import type { WithTheme } from '@chayns-components/core';\nimport styled from 'styled-components';\nimport {\n MEDIA_CONTENT_IMAGE_FADE_DURATION_MS,\n MEDIA_CONTENT_PREVIEW_BLUR,\n MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS,\n MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS,\n} from './MediaContent.constants';\n\nexport const StyledMediaContentVideoWrapper = styled.div<{ $ratio: number }>`\n display: flex;\n position: relative;\n overflow: hidden;\n width: 100%;\n height: 100%;\n aspect-ratio: ${({ $ratio }) => $ratio};\n`;\n\nexport const StyledMediaContentImageWrapper = styled.div<{ $ratio: number }>`\n display: flex;\n position: relative;\n overflow: hidden;\n width: 100%;\n height: 100%;\n aspect-ratio: ${({ $ratio }) => $ratio};\n`;\n\ntype StyledMediaContentVideoProps = WithTheme<unknown>;\n\ntype StyledMediaContentImageProps = WithTheme<unknown>;\n\nconst StyledMediaContentLayer = styled.img<StyledMediaContentImageProps>`\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n pointer-events: none;\n`;\n\nexport const StyledMediaContentPreviewImage = styled(StyledMediaContentLayer)`\n background-color: ${({ theme }: StyledMediaContentImageProps) => theme['101']};\n box-shadow: 0 0 0 1px\n rgba(${({ theme }: StyledMediaContentImageProps) => theme['009-rgb']}, 0.08) inset;\n z-index: 2;\n filter: ${MEDIA_CONTENT_PREVIEW_BLUR};\n transition:\n opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease,\n filter ${MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS}ms ease\n ${MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS}ms;\n`;\n\nexport const StyledMediaContentImage = styled(StyledMediaContentLayer)`\n background-color: ${({ theme }: StyledMediaContentImageProps) => theme['101']};\n box-shadow: 0 0 0 1px\n rgba(${({ theme }: StyledMediaContentImageProps) => theme['009-rgb']}, 0.08) inset;\n z-index: 1;\n transition: opacity ${MEDIA_CONTENT_IMAGE_FADE_DURATION_MS}ms ease;\n`;\n\nexport const StyledMediaContentVideo = styled.video<StyledMediaContentVideoProps>`\n background-color: ${({ theme }: StyledMediaContentVideoProps) => theme['101']};\n box-shadow: 0 0 0 1px\n rgba(${({ theme }: StyledMediaContentVideoProps) => theme['009-rgb']}, 0.08) inset;\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n pointer-events: none;\n z-index: 1;\n`;\n\nexport const StyledMediaContentPlayIcon = styled.div`\n position: absolute;\n z-index: 3;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n"],"mappings":"AACA,OAAOA,MAAM,MAAM,mBAAmB;AACtC,SACIC,oCAAoC,EACpCC,0BAA0B,EAC1BC,0CAA0C,EAC1CC,6CAA6C,QAC1C,0BAA0B;AAEjC,OAAO,MAAMC,8BAA8B,GAAGL,MAAM,CAACM,GAAuB;AAC5E;AACA;AACA;AACA;AACA;AACA,oBAAoB,CAAC;EAAEC;AAAO,CAAC,KAAKA,MAAM;AAC1C,CAAC;AAED,OAAO,MAAMC,8BAA8B,GAAGR,MAAM,CAACM,GAAuB;AAC5E;AACA;AACA;AACA;AACA;AACA,oBAAoB,CAAC;EAAEC;AAAO,CAAC,KAAKA,MAAM;AAC1C,CAAC;AAMD,MAAME,uBAAuB,GAAGT,MAAM,CAACU,GAAiC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,8BAA8B,GAAGX,MAAM,CAACS,uBAAuB,CAAC;AAC7E,wBAAwB,CAAC;EAAEG;AAAoC,CAAC,KAAKA,KAAK,CAAC,KAAK,CAAC;AACjF;AACA,eAAe,CAAC;EAAEA;AAAoC,CAAC,KAAKA,KAAK,CAAC,SAAS,CAAC;AAC5E;AACA,cAAcV,0BAA0B;AACxC;AACA,kBAAkBD,oCAAoC;AACtD,iBAAiBG,6CAA6C;AAC9D,cAAcD,0CAA0C;AACxD,CAAC;AAED,OAAO,MAAMU,uBAAuB,GAAGb,MAAM,CAACS,uBAAuB,CAAC;AACtE,wBAAwB,CAAC;EAAEG;AAAoC,CAAC,KAAKA,KAAK,CAAC,KAAK,CAAC;AACjF;AACA,eAAe,CAAC;EAAEA;AAAoC,CAAC,KAAKA,KAAK,CAAC,SAAS,CAAC;AAC5E;AACA,0BAA0BX,oCAAoC;AAC9D,CAAC;AAED,OAAO,MAAMa,uBAAuB,GAAGd,MAAM,CAACe,KAAmC;AACjF,wBAAwB,CAAC;EAAEH;AAAoC,CAAC,KAAKA,KAAK,CAAC,KAAK,CAAC;AACjF;AACA,eAAe,CAAC;EAAEA;AAAoC,CAAC,KAAKA,KAAK,CAAC,SAAS,CAAC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMI,0BAA0B,GAAGhB,MAAM,CAACM,GAAG;AACpD;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
const IMAGE_SERVICE_ORIGINS = new Set(['https://tsimg.cloud', 'https://tsimg.space']);
|
|
2
|
-
const IMAGE_SERVICE_PARAM_PATTERN = /^(?:m(?:scale|crop|shortedgescale)|[whsbd]\d+)$/i;
|
|
3
|
-
const IMAGE_SERVICE_RESIZE_OVERSCAN = 1.25;
|
|
4
1
|
export const isVideoFile = file => 'thumbnailUrl' in file;
|
|
5
2
|
export const getMediaSourceUrl = file => file.url.replace('_0.mp4', '.mp4');
|
|
6
3
|
export const getMediaPreviewUrl = (file, previewUrl) => {
|
|
@@ -12,60 +9,4 @@ export const getMediaPreviewUrl = (file, previewUrl) => {
|
|
|
12
9
|
}
|
|
13
10
|
return file.meta?.preview;
|
|
14
11
|
};
|
|
15
|
-
export const isImageServiceUrl = url => {
|
|
16
|
-
try {
|
|
17
|
-
return IMAGE_SERVICE_ORIGINS.has(new URL(url).origin);
|
|
18
|
-
} catch (_) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
export const hasImageServiceTransformParameters = url => {
|
|
23
|
-
if (!isImageServiceUrl(url)) {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
try {
|
|
27
|
-
const urlObject = new URL(url);
|
|
28
|
-
const fileName = urlObject.pathname.split('/').pop();
|
|
29
|
-
if (!fileName) {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
const extensionIndex = fileName.lastIndexOf('.');
|
|
33
|
-
const nameWithoutExtension = extensionIndex > -1 ? fileName.slice(0, extensionIndex) : fileName;
|
|
34
|
-
const parameterSegment = nameWithoutExtension.split('_').pop();
|
|
35
|
-
if (!parameterSegment || parameterSegment === nameWithoutExtension) {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
return parameterSegment.split('-').every(parameter => IMAGE_SERVICE_PARAM_PATTERN.test(parameter));
|
|
39
|
-
} catch (_) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
const buildImageServiceParameterSegment = (size, devicePixelRatio) => {
|
|
44
|
-
const scaleFactor = Number.isFinite(devicePixelRatio) && devicePixelRatio > 0 ? devicePixelRatio : 1;
|
|
45
|
-
const width = Math.max(1, Math.ceil(size.width * scaleFactor * IMAGE_SERVICE_RESIZE_OVERSCAN));
|
|
46
|
-
const height = Math.max(1, Math.ceil(size.height * scaleFactor * IMAGE_SERVICE_RESIZE_OVERSCAN));
|
|
47
|
-
return `w${width}-h${height}`;
|
|
48
|
-
};
|
|
49
|
-
export const getResponsiveImageServiceUrl = (url, size, devicePixelRatio = 1) => {
|
|
50
|
-
if (!size || hasImageServiceTransformParameters(url) || !isImageServiceUrl(url)) {
|
|
51
|
-
return url;
|
|
52
|
-
}
|
|
53
|
-
try {
|
|
54
|
-
const urlObject = new URL(url);
|
|
55
|
-
const pathSegments = urlObject.pathname.split('/');
|
|
56
|
-
const fileName = pathSegments.pop();
|
|
57
|
-
if (!fileName) {
|
|
58
|
-
return url;
|
|
59
|
-
}
|
|
60
|
-
const extensionIndex = fileName.lastIndexOf('.');
|
|
61
|
-
const extension = extensionIndex > -1 ? fileName.slice(extensionIndex) : '';
|
|
62
|
-
const fileBaseName = extensionIndex > -1 ? fileName.slice(0, extensionIndex) : fileName;
|
|
63
|
-
const parameterSegment = buildImageServiceParameterSegment(size, devicePixelRatio);
|
|
64
|
-
pathSegments.push(`${fileBaseName}_${parameterSegment}${extension}`);
|
|
65
|
-
urlObject.pathname = pathSegments.join('/');
|
|
66
|
-
return urlObject.toString();
|
|
67
|
-
} catch (_) {
|
|
68
|
-
return url;
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
12
|
//# sourceMappingURL=MediaContent.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaContent.utils.js","names":["
|
|
1
|
+
{"version":3,"file":"MediaContent.utils.js","names":["isVideoFile","file","getMediaSourceUrl","url","replace","getMediaPreviewUrl","previewUrl","thumbnailUrl","meta","preview"],"sources":["../../../../src/components/media-content/MediaContent.utils.ts"],"sourcesContent":["import type { FileItem, Video } from '@chayns-components/core';\n\nexport type GalleryMediaFile = FileItem['file'];\n\nexport const isVideoFile = (file: GalleryMediaFile): file is Video => 'thumbnailUrl' in file;\n\nexport const getMediaSourceUrl = (file: GalleryMediaFile): string =>\n file.url.replace('_0.mp4', '.mp4');\n\nexport const getMediaPreviewUrl = (\n file: GalleryMediaFile,\n previewUrl?: string,\n): string | undefined => {\n if (previewUrl) {\n return previewUrl;\n }\n\n if (isVideoFile(file)) {\n return file.thumbnailUrl;\n }\n\n return file.meta?.preview;\n};\n"],"mappings":"AAIA,OAAO,MAAMA,WAAW,GAAIC,IAAsB,IAAoB,cAAc,IAAIA,IAAI;AAE5F,OAAO,MAAMC,iBAAiB,GAAID,IAAsB,IACpDA,IAAI,CAACE,GAAG,CAACC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;AAEtC,OAAO,MAAMC,kBAAkB,GAAGA,CAC9BJ,IAAsB,EACtBK,UAAmB,KACE;EACrB,IAAIA,UAAU,EAAE;IACZ,OAAOA,UAAU;EACrB;EAEA,IAAIN,WAAW,CAACC,IAAI,CAAC,EAAE;IACnB,OAAOA,IAAI,CAACM,YAAY;EAC5B;EAEA,OAAON,IAAI,CAACO,IAAI,EAAEC,OAAO;AAC7B,CAAC","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import type { GalleryViewerProps } from './GalleryViewer.types';
|
|
3
|
-
declare const
|
|
4
|
-
export default
|
|
3
|
+
declare const _default: React.NamedExoticComponent<GalleryViewerProps>;
|
|
4
|
+
export default _default;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export declare const MEDIA_CONTENT_IMAGE_FADE_DURATION_MS =
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const MEDIA_CONTENT_PREVIEW_SCALE = 1.05;
|
|
1
|
+
export declare const MEDIA_CONTENT_IMAGE_FADE_DURATION_MS = 180;
|
|
2
|
+
export declare const MEDIA_CONTENT_PREVIEW_BLUR = "blur(6px)";
|
|
3
|
+
export declare const MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DELAY_MS = 100;
|
|
4
|
+
export declare const MEDIA_CONTENT_PREVIEW_BLUR_REMOVE_DURATION_MS = 200;
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import type { FileItem, Video } from '@chayns-components/core';
|
|
2
2
|
export type GalleryMediaFile = FileItem['file'];
|
|
3
|
-
export type MediaContentSize = {
|
|
4
|
-
height: number;
|
|
5
|
-
width: number;
|
|
6
|
-
};
|
|
7
3
|
export declare const isVideoFile: (file: GalleryMediaFile) => file is Video;
|
|
8
4
|
export declare const getMediaSourceUrl: (file: GalleryMediaFile) => string;
|
|
9
5
|
export declare const getMediaPreviewUrl: (file: GalleryMediaFile, previewUrl?: string) => string | undefined;
|
|
10
|
-
export declare const isImageServiceUrl: (url: string) => boolean;
|
|
11
|
-
export declare const hasImageServiceTransformParameters: (url: string) => boolean;
|
|
12
|
-
export declare const getResponsiveImageServiceUrl: (url: string, size?: MediaContentSize, devicePixelRatio?: number) => string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chayns-components/gallery",
|
|
3
|
-
"version": "5.2.
|
|
3
|
+
"version": "5.2.6",
|
|
4
4
|
"description": "A set of beautiful React components for developing your own applications with chayns.",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"browserslist": [
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
"publishConfig": {
|
|
85
85
|
"access": "public"
|
|
86
86
|
},
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "59187422f25173dbdf15343d50fe1363e93d16ff"
|
|
88
88
|
}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _react = require("react");
|
|
8
|
-
const MEDIA_CONTENT_SIZE_RESIZE_DEBOUNCE_MS = 100;
|
|
9
|
-
const getSizeFromElement = element => {
|
|
10
|
-
if (!element) {
|
|
11
|
-
return undefined;
|
|
12
|
-
}
|
|
13
|
-
const {
|
|
14
|
-
width,
|
|
15
|
-
height
|
|
16
|
-
} = element.getBoundingClientRect();
|
|
17
|
-
if (width <= 0 || height <= 0) {
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
return {
|
|
21
|
-
width,
|
|
22
|
-
height
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
const useMediaContentSize = element => {
|
|
26
|
-
const [size, setSize] = (0, _react.useState)();
|
|
27
|
-
(0, _react.useEffect)(() => {
|
|
28
|
-
if (!element) {
|
|
29
|
-
setSize(undefined);
|
|
30
|
-
return undefined;
|
|
31
|
-
}
|
|
32
|
-
let timeoutId;
|
|
33
|
-
const updateSize = () => {
|
|
34
|
-
const nextSize = getSizeFromElement(element);
|
|
35
|
-
if (!nextSize) {
|
|
36
|
-
setSize(undefined);
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (timeoutId) {
|
|
40
|
-
clearTimeout(timeoutId);
|
|
41
|
-
}
|
|
42
|
-
timeoutId = setTimeout(() => {
|
|
43
|
-
setSize(nextSize);
|
|
44
|
-
}, MEDIA_CONTENT_SIZE_RESIZE_DEBOUNCE_MS);
|
|
45
|
-
};
|
|
46
|
-
updateSize();
|
|
47
|
-
if (typeof ResizeObserver === 'undefined') {
|
|
48
|
-
return () => {
|
|
49
|
-
if (timeoutId) {
|
|
50
|
-
clearTimeout(timeoutId);
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
const resizeObserver = new ResizeObserver(() => {
|
|
55
|
-
updateSize();
|
|
56
|
-
});
|
|
57
|
-
resizeObserver.observe(element);
|
|
58
|
-
return () => {
|
|
59
|
-
resizeObserver.disconnect();
|
|
60
|
-
if (timeoutId) {
|
|
61
|
-
clearTimeout(timeoutId);
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
}, [element]);
|
|
65
|
-
return size;
|
|
66
|
-
};
|
|
67
|
-
var _default = exports.default = useMediaContentSize;
|
|
68
|
-
//# sourceMappingURL=useMediaContentSize.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaContentSize.js","names":["_react","require","MEDIA_CONTENT_SIZE_RESIZE_DEBOUNCE_MS","getSizeFromElement","element","undefined","width","height","getBoundingClientRect","useMediaContentSize","size","setSize","useState","useEffect","timeoutId","updateSize","nextSize","clearTimeout","setTimeout","ResizeObserver","resizeObserver","observe","disconnect","_default","exports","default"],"sources":["../../../../src/components/media-content/useMediaContentSize.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport type { MediaContentSize } from './MediaContent.utils';\n\nconst MEDIA_CONTENT_SIZE_RESIZE_DEBOUNCE_MS = 100;\n\nconst getSizeFromElement = (element: HTMLElement | null): MediaContentSize | undefined => {\n if (!element) {\n return undefined;\n }\n\n const { width, height } = element.getBoundingClientRect();\n\n if (width <= 0 || height <= 0) {\n return undefined;\n }\n\n return {\n width,\n height,\n };\n};\n\nconst useMediaContentSize = (element: HTMLElement | null) => {\n const [size, setSize] = useState<MediaContentSize>();\n\n useEffect(() => {\n if (!element) {\n setSize(undefined);\n return undefined;\n }\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const updateSize = () => {\n const nextSize = getSizeFromElement(element);\n\n if (!nextSize) {\n setSize(undefined);\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n setSize(nextSize);\n }, MEDIA_CONTENT_SIZE_RESIZE_DEBOUNCE_MS);\n };\n\n updateSize();\n\n if (typeof ResizeObserver === 'undefined') {\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n }\n\n const resizeObserver = new ResizeObserver(() => {\n updateSize();\n });\n\n resizeObserver.observe(element);\n\n return () => {\n resizeObserver.disconnect();\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n }, [element]);\n\n return size;\n};\n\nexport default useMediaContentSize;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,MAAMC,qCAAqC,GAAG,GAAG;AAEjD,MAAMC,kBAAkB,GAAIC,OAA2B,IAAmC;EACtF,IAAI,CAACA,OAAO,EAAE;IACV,OAAOC,SAAS;EACpB;EAEA,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGH,OAAO,CAACI,qBAAqB,CAAC,CAAC;EAEzD,IAAIF,KAAK,IAAI,CAAC,IAAIC,MAAM,IAAI,CAAC,EAAE;IAC3B,OAAOF,SAAS;EACpB;EAEA,OAAO;IACHC,KAAK;IACLC;EACJ,CAAC;AACL,CAAC;AAED,MAAME,mBAAmB,GAAIL,OAA2B,IAAK;EACzD,MAAM,CAACM,IAAI,EAAEC,OAAO,CAAC,GAAG,IAAAC,eAAQ,EAAmB,CAAC;EAEpD,IAAAC,gBAAS,EAAC,MAAM;IACZ,IAAI,CAACT,OAAO,EAAE;MACVO,OAAO,CAACN,SAAS,CAAC;MAClB,OAAOA,SAAS;IACpB;IAEA,IAAIS,SAAoD;IAExD,MAAMC,UAAU,GAAGA,CAAA,KAAM;MACrB,MAAMC,QAAQ,GAAGb,kBAAkB,CAACC,OAAO,CAAC;MAE5C,IAAI,CAACY,QAAQ,EAAE;QACXL,OAAO,CAACN,SAAS,CAAC;QAClB;MACJ;MAEA,IAAIS,SAAS,EAAE;QACXG,YAAY,CAACH,SAAS,CAAC;MAC3B;MAEAA,SAAS,GAAGI,UAAU,CAAC,MAAM;QACzBP,OAAO,CAACK,QAAQ,CAAC;MACrB,CAAC,EAAEd,qCAAqC,CAAC;IAC7C,CAAC;IAEDa,UAAU,CAAC,CAAC;IAEZ,IAAI,OAAOI,cAAc,KAAK,WAAW,EAAE;MACvC,OAAO,MAAM;QACT,IAAIL,SAAS,EAAE;UACXG,YAAY,CAACH,SAAS,CAAC;QAC3B;MACJ,CAAC;IACL;IAEA,MAAMM,cAAc,GAAG,IAAID,cAAc,CAAC,MAAM;MAC5CJ,UAAU,CAAC,CAAC;IAChB,CAAC,CAAC;IAEFK,cAAc,CAACC,OAAO,CAACjB,OAAO,CAAC;IAE/B,OAAO,MAAM;MACTgB,cAAc,CAACE,UAAU,CAAC,CAAC;MAE3B,IAAIR,SAAS,EAAE;QACXG,YAAY,CAACH,SAAS,CAAC;MAC3B;IACJ,CAAC;EACL,CAAC,EAAE,CAACV,OAAO,CAAC,CAAC;EAEb,OAAOM,IAAI;AACf,CAAC;AAAC,IAAAa,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEahB,mBAAmB","ignoreList":[]}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from 'react';
|
|
2
|
-
const MEDIA_CONTENT_SIZE_RESIZE_DEBOUNCE_MS = 100;
|
|
3
|
-
const getSizeFromElement = element => {
|
|
4
|
-
if (!element) {
|
|
5
|
-
return undefined;
|
|
6
|
-
}
|
|
7
|
-
const {
|
|
8
|
-
width,
|
|
9
|
-
height
|
|
10
|
-
} = element.getBoundingClientRect();
|
|
11
|
-
if (width <= 0 || height <= 0) {
|
|
12
|
-
return undefined;
|
|
13
|
-
}
|
|
14
|
-
return {
|
|
15
|
-
width,
|
|
16
|
-
height
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
const useMediaContentSize = element => {
|
|
20
|
-
const [size, setSize] = useState();
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
if (!element) {
|
|
23
|
-
setSize(undefined);
|
|
24
|
-
return undefined;
|
|
25
|
-
}
|
|
26
|
-
let timeoutId;
|
|
27
|
-
const updateSize = () => {
|
|
28
|
-
const nextSize = getSizeFromElement(element);
|
|
29
|
-
if (!nextSize) {
|
|
30
|
-
setSize(undefined);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
if (timeoutId) {
|
|
34
|
-
clearTimeout(timeoutId);
|
|
35
|
-
}
|
|
36
|
-
timeoutId = setTimeout(() => {
|
|
37
|
-
setSize(nextSize);
|
|
38
|
-
}, MEDIA_CONTENT_SIZE_RESIZE_DEBOUNCE_MS);
|
|
39
|
-
};
|
|
40
|
-
updateSize();
|
|
41
|
-
if (typeof ResizeObserver === 'undefined') {
|
|
42
|
-
return () => {
|
|
43
|
-
if (timeoutId) {
|
|
44
|
-
clearTimeout(timeoutId);
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
const resizeObserver = new ResizeObserver(() => {
|
|
49
|
-
updateSize();
|
|
50
|
-
});
|
|
51
|
-
resizeObserver.observe(element);
|
|
52
|
-
return () => {
|
|
53
|
-
resizeObserver.disconnect();
|
|
54
|
-
if (timeoutId) {
|
|
55
|
-
clearTimeout(timeoutId);
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
}, [element]);
|
|
59
|
-
return size;
|
|
60
|
-
};
|
|
61
|
-
export default useMediaContentSize;
|
|
62
|
-
//# sourceMappingURL=useMediaContentSize.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaContentSize.js","names":["useEffect","useState","MEDIA_CONTENT_SIZE_RESIZE_DEBOUNCE_MS","getSizeFromElement","element","undefined","width","height","getBoundingClientRect","useMediaContentSize","size","setSize","timeoutId","updateSize","nextSize","clearTimeout","setTimeout","ResizeObserver","resizeObserver","observe","disconnect"],"sources":["../../../../src/components/media-content/useMediaContentSize.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport type { MediaContentSize } from './MediaContent.utils';\n\nconst MEDIA_CONTENT_SIZE_RESIZE_DEBOUNCE_MS = 100;\n\nconst getSizeFromElement = (element: HTMLElement | null): MediaContentSize | undefined => {\n if (!element) {\n return undefined;\n }\n\n const { width, height } = element.getBoundingClientRect();\n\n if (width <= 0 || height <= 0) {\n return undefined;\n }\n\n return {\n width,\n height,\n };\n};\n\nconst useMediaContentSize = (element: HTMLElement | null) => {\n const [size, setSize] = useState<MediaContentSize>();\n\n useEffect(() => {\n if (!element) {\n setSize(undefined);\n return undefined;\n }\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const updateSize = () => {\n const nextSize = getSizeFromElement(element);\n\n if (!nextSize) {\n setSize(undefined);\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n setSize(nextSize);\n }, MEDIA_CONTENT_SIZE_RESIZE_DEBOUNCE_MS);\n };\n\n updateSize();\n\n if (typeof ResizeObserver === 'undefined') {\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n }\n\n const resizeObserver = new ResizeObserver(() => {\n updateSize();\n });\n\n resizeObserver.observe(element);\n\n return () => {\n resizeObserver.disconnect();\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n }, [element]);\n\n return size;\n};\n\nexport default useMediaContentSize;\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAG3C,MAAMC,qCAAqC,GAAG,GAAG;AAEjD,MAAMC,kBAAkB,GAAIC,OAA2B,IAAmC;EACtF,IAAI,CAACA,OAAO,EAAE;IACV,OAAOC,SAAS;EACpB;EAEA,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGH,OAAO,CAACI,qBAAqB,CAAC,CAAC;EAEzD,IAAIF,KAAK,IAAI,CAAC,IAAIC,MAAM,IAAI,CAAC,EAAE;IAC3B,OAAOF,SAAS;EACpB;EAEA,OAAO;IACHC,KAAK;IACLC;EACJ,CAAC;AACL,CAAC;AAED,MAAME,mBAAmB,GAAIL,OAA2B,IAAK;EACzD,MAAM,CAACM,IAAI,EAAEC,OAAO,CAAC,GAAGV,QAAQ,CAAmB,CAAC;EAEpDD,SAAS,CAAC,MAAM;IACZ,IAAI,CAACI,OAAO,EAAE;MACVO,OAAO,CAACN,SAAS,CAAC;MAClB,OAAOA,SAAS;IACpB;IAEA,IAAIO,SAAoD;IAExD,MAAMC,UAAU,GAAGA,CAAA,KAAM;MACrB,MAAMC,QAAQ,GAAGX,kBAAkB,CAACC,OAAO,CAAC;MAE5C,IAAI,CAACU,QAAQ,EAAE;QACXH,OAAO,CAACN,SAAS,CAAC;QAClB;MACJ;MAEA,IAAIO,SAAS,EAAE;QACXG,YAAY,CAACH,SAAS,CAAC;MAC3B;MAEAA,SAAS,GAAGI,UAAU,CAAC,MAAM;QACzBL,OAAO,CAACG,QAAQ,CAAC;MACrB,CAAC,EAAEZ,qCAAqC,CAAC;IAC7C,CAAC;IAEDW,UAAU,CAAC,CAAC;IAEZ,IAAI,OAAOI,cAAc,KAAK,WAAW,EAAE;MACvC,OAAO,MAAM;QACT,IAAIL,SAAS,EAAE;UACXG,YAAY,CAACH,SAAS,CAAC;QAC3B;MACJ,CAAC;IACL;IAEA,MAAMM,cAAc,GAAG,IAAID,cAAc,CAAC,MAAM;MAC5CJ,UAAU,CAAC,CAAC;IAChB,CAAC,CAAC;IAEFK,cAAc,CAACC,OAAO,CAACf,OAAO,CAAC;IAE/B,OAAO,MAAM;MACTc,cAAc,CAACE,UAAU,CAAC,CAAC;MAE3B,IAAIR,SAAS,EAAE;QACXG,YAAY,CAACH,SAAS,CAAC;MAC3B;IACJ,CAAC;EACL,CAAC,EAAE,CAACR,OAAO,CAAC,CAAC;EAEb,OAAOM,IAAI;AACf,CAAC;AAED,eAAeD,mBAAmB","ignoreList":[]}
|