stream-chat-react-native-core 4.13.1-beta.1 → 4.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/Attachment/utils/getGiphyMimeType.js +15 -0
- package/lib/commonjs/components/Attachment/utils/getGiphyMimeType.js.map +1 -0
- package/lib/commonjs/components/ImageGallery/ImageGallery.js +23 -21
- package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js +7 -3
- package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Attachment/utils/getGiphyMimeType.js +15 -0
- package/lib/module/components/Attachment/utils/getGiphyMimeType.js.map +1 -0
- package/lib/module/components/ImageGallery/ImageGallery.js +23 -21
- package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageTextContainer.js +7 -3
- package/lib/module/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Attachment/utils/getGiphyMimeType.d.ts +6 -0
- package/package.json +1 -1
- package/src/components/Attachment/utils/getGiphyMimeType.ts +13 -0
- package/src/components/ImageGallery/ImageGallery.tsx +2 -1
- package/src/components/Message/MessageSimple/MessageTextContainer.tsx +22 -2
- package/src/version.json +1 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", {
|
|
2
|
+
value: true
|
|
3
|
+
});
|
|
4
|
+
exports.getGiphyMimeType = getGiphyMimeType;
|
|
5
|
+
|
|
6
|
+
function getGiphyMimeType(giphyUrl) {
|
|
7
|
+
if (giphyUrl.includes('.mp4')) {
|
|
8
|
+
return 'video/mp4';
|
|
9
|
+
} else if (giphyUrl.includes('.webp')) {
|
|
10
|
+
return 'image/webp';
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return 'image/gif';
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=getGiphyMimeType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["getGiphyMimeType.ts"],"names":["getGiphyMimeType","giphyUrl","includes"],"mappings":";;;;;AAKO,SAASA,gBAAT,CAA0BC,QAA1B,EAAoD;AACzD,MAAIA,QAAQ,CAACC,QAAT,CAAkB,MAAlB,CAAJ,EAA+B;AAC7B,WAAO,WAAP;AACD,GAFD,MAEO,IAAID,QAAQ,CAACC,QAAT,CAAkB,OAAlB,CAAJ,EAAgC;AACrC,WAAO,YAAP;AACD;;AACD,SAAO,WAAP;AACD","sourcesContent":["/**\n *\n * @param giphyUrl The giphy attachment url\n * @returns mimeType for the giphy attachment\n */\nexport function getGiphyMimeType(giphyUrl: string): string {\n if (giphyUrl.includes('.mp4')) {\n return 'video/mp4';\n } else if (giphyUrl.includes('.webp')) {\n return 'image/webp';\n }\n return 'image/gif';\n}\n"]}
|
|
@@ -53,6 +53,8 @@ var _getUrlOfImageAttachment = require("../../utils/getUrlOfImageAttachment");
|
|
|
53
53
|
|
|
54
54
|
var _utils = require("../../utils/utils");
|
|
55
55
|
|
|
56
|
+
var _getGiphyMimeType = require("../Attachment/utils/getGiphyMimeType");
|
|
57
|
+
|
|
56
58
|
var _this = this,
|
|
57
59
|
_jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/ImageGallery/ImageGallery.tsx";
|
|
58
60
|
|
|
@@ -208,7 +210,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
208
210
|
created_at: cur.created_at,
|
|
209
211
|
id: "photoId-" + cur.id + "-" + imageUrl,
|
|
210
212
|
messageId: cur.id,
|
|
211
|
-
mime_type: a.type === 'giphy' ? '
|
|
213
|
+
mime_type: a.type === 'giphy' ? (0, _getGiphyMimeType.getGiphyMimeType)(giphyURL != null ? giphyURL : '') : a.mime_type,
|
|
212
214
|
original_height: a.original_height,
|
|
213
215
|
original_width: a.original_width,
|
|
214
216
|
type: a.type,
|
|
@@ -382,7 +384,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
382
384
|
__self: _this,
|
|
383
385
|
__source: {
|
|
384
386
|
fileName: _jsxFileName,
|
|
385
|
-
lineNumber:
|
|
387
|
+
lineNumber: 505,
|
|
386
388
|
columnNumber: 5
|
|
387
389
|
}
|
|
388
390
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -390,7 +392,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
390
392
|
__self: _this,
|
|
391
393
|
__source: {
|
|
392
394
|
fileName: _jsxFileName,
|
|
393
|
-
lineNumber:
|
|
395
|
+
lineNumber: 510,
|
|
394
396
|
columnNumber: 7
|
|
395
397
|
}
|
|
396
398
|
}), _react["default"].createElement(_reactNativeGestureHandler.TapGestureHandler, {
|
|
@@ -402,7 +404,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
402
404
|
__self: _this,
|
|
403
405
|
__source: {
|
|
404
406
|
fileName: _jsxFileName,
|
|
405
|
-
lineNumber:
|
|
407
|
+
lineNumber: 511,
|
|
406
408
|
columnNumber: 7
|
|
407
409
|
}
|
|
408
410
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -410,7 +412,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
410
412
|
__self: _this,
|
|
411
413
|
__source: {
|
|
412
414
|
fileName: _jsxFileName,
|
|
413
|
-
lineNumber:
|
|
415
|
+
lineNumber: 518,
|
|
414
416
|
columnNumber: 9
|
|
415
417
|
}
|
|
416
418
|
}, _react["default"].createElement(_reactNativeGestureHandler.TapGestureHandler, {
|
|
@@ -424,7 +426,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
424
426
|
__self: _this,
|
|
425
427
|
__source: {
|
|
426
428
|
fileName: _jsxFileName,
|
|
427
|
-
lineNumber:
|
|
429
|
+
lineNumber: 519,
|
|
428
430
|
columnNumber: 11
|
|
429
431
|
}
|
|
430
432
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -432,7 +434,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
432
434
|
__self: _this,
|
|
433
435
|
__source: {
|
|
434
436
|
fileName: _jsxFileName,
|
|
435
|
-
lineNumber:
|
|
437
|
+
lineNumber: 528,
|
|
436
438
|
columnNumber: 13
|
|
437
439
|
}
|
|
438
440
|
}, _react["default"].createElement(_reactNativeGestureHandler.PinchGestureHandler, {
|
|
@@ -442,7 +444,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
442
444
|
__self: _this,
|
|
443
445
|
__source: {
|
|
444
446
|
fileName: _jsxFileName,
|
|
445
|
-
lineNumber:
|
|
447
|
+
lineNumber: 529,
|
|
446
448
|
columnNumber: 15
|
|
447
449
|
}
|
|
448
450
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -450,7 +452,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
450
452
|
__self: _this,
|
|
451
453
|
__source: {
|
|
452
454
|
fileName: _jsxFileName,
|
|
453
|
-
lineNumber:
|
|
455
|
+
lineNumber: 534,
|
|
454
456
|
columnNumber: 17
|
|
455
457
|
}
|
|
456
458
|
}, _react["default"].createElement(_reactNativeGestureHandler.PanGestureHandler, {
|
|
@@ -463,7 +465,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
463
465
|
__self: _this,
|
|
464
466
|
__source: {
|
|
465
467
|
fileName: _jsxFileName,
|
|
466
|
-
lineNumber:
|
|
468
|
+
lineNumber: 535,
|
|
467
469
|
columnNumber: 19
|
|
468
470
|
}
|
|
469
471
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -471,7 +473,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
471
473
|
__self: _this,
|
|
472
474
|
__source: {
|
|
473
475
|
fileName: _jsxFileName,
|
|
474
|
-
lineNumber:
|
|
476
|
+
lineNumber: 543,
|
|
475
477
|
columnNumber: 21
|
|
476
478
|
}
|
|
477
479
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -485,7 +487,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
485
487
|
__self: _this,
|
|
486
488
|
__source: {
|
|
487
489
|
fileName: _jsxFileName,
|
|
488
|
-
lineNumber:
|
|
490
|
+
lineNumber: 544,
|
|
489
491
|
columnNumber: 23
|
|
490
492
|
}
|
|
491
493
|
}, photos.map(function (photo, i) {
|
|
@@ -516,7 +518,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
516
518
|
__self: _this,
|
|
517
519
|
__source: {
|
|
518
520
|
fileName: _jsxFileName,
|
|
519
|
-
lineNumber:
|
|
521
|
+
lineNumber: 561,
|
|
520
522
|
columnNumber: 29
|
|
521
523
|
}
|
|
522
524
|
}) : _react["default"].createElement(_AnimatedGalleryImage.AnimatedGalleryImage, {
|
|
@@ -540,7 +542,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
540
542
|
__self: _this,
|
|
541
543
|
__source: {
|
|
542
544
|
fileName: _jsxFileName,
|
|
543
|
-
lineNumber:
|
|
545
|
+
lineNumber: 588,
|
|
544
546
|
columnNumber: 29
|
|
545
547
|
}
|
|
546
548
|
});
|
|
@@ -552,7 +554,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
552
554
|
__self: _this,
|
|
553
555
|
__source: {
|
|
554
556
|
fileName: _jsxFileName,
|
|
555
|
-
lineNumber:
|
|
557
|
+
lineNumber: 621,
|
|
556
558
|
columnNumber: 7
|
|
557
559
|
}
|
|
558
560
|
})), _react["default"].createElement(_ImageGalleryFooter.ImageGalleryFooter, (0, _extends2["default"])({
|
|
@@ -572,7 +574,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
572
574
|
__self: _this,
|
|
573
575
|
__source: {
|
|
574
576
|
fileName: _jsxFileName,
|
|
575
|
-
lineNumber:
|
|
577
|
+
lineNumber: 627,
|
|
576
578
|
columnNumber: 7
|
|
577
579
|
}
|
|
578
580
|
})), _react["default"].createElement(_ImageGalleryOverlay.ImageGalleryOverlay, {
|
|
@@ -582,14 +584,14 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
582
584
|
__self: _this,
|
|
583
585
|
__source: {
|
|
584
586
|
fileName: _jsxFileName,
|
|
585
|
-
lineNumber:
|
|
587
|
+
lineNumber: 643,
|
|
586
588
|
columnNumber: 7
|
|
587
589
|
}
|
|
588
590
|
}), _react["default"].createElement(_bottomSheet.BottomSheetModalProvider, {
|
|
589
591
|
__self: _this,
|
|
590
592
|
__source: {
|
|
591
593
|
fileName: _jsxFileName,
|
|
592
|
-
lineNumber:
|
|
594
|
+
lineNumber: 648,
|
|
593
595
|
columnNumber: 7
|
|
594
596
|
}
|
|
595
597
|
}, _react["default"].createElement(_bottomSheet.BottomSheetModal, {
|
|
@@ -602,7 +604,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
602
604
|
__self: _this,
|
|
603
605
|
__source: {
|
|
604
606
|
fileName: _jsxFileName,
|
|
605
|
-
lineNumber:
|
|
607
|
+
lineNumber: 653,
|
|
606
608
|
columnNumber: 13
|
|
607
609
|
}
|
|
608
610
|
}));
|
|
@@ -617,7 +619,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
617
619
|
__self: _this,
|
|
618
620
|
__source: {
|
|
619
621
|
fileName: _jsxFileName,
|
|
620
|
-
lineNumber:
|
|
622
|
+
lineNumber: 649,
|
|
621
623
|
columnNumber: 9
|
|
622
624
|
}
|
|
623
625
|
}, _react["default"].createElement(_ImageGrid.ImageGrid, (0, _extends2["default"])({
|
|
@@ -629,7 +631,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
629
631
|
__self: _this,
|
|
630
632
|
__source: {
|
|
631
633
|
fileName: _jsxFileName,
|
|
632
|
-
lineNumber:
|
|
634
|
+
lineNumber: 664,
|
|
633
635
|
columnNumber: 11
|
|
634
636
|
}
|
|
635
637
|
})))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ImageGallery.tsx"],"names":["isAndroid","Platform","OS","fullScreenHeight","Dimensions","get","height","measuredScreenHeight","screenWidth","halfScreenWidth","MARGIN","HasPinched","IsSwiping","ImageGallery","props","giphyVersion","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","paused","setPaused","progress","setProgress","duration","setDuration","theme","white_snow","colors","imageGallery","backgroundColor","pager","slide","gridPhotos","setGridPhotos","overlay","translucentStatusBar","image","images","setImage","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","snapPoints","React","useMemo","bottomSheetModalRef","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","screenTranslateY","showScreen","value","easing","Easing","out","ease","Keyboard","dismiss","currentImageHeight","setCurrentImageHeight","selectedIndex","setSelectedIndex","index","headerFooterVisible","doubleTapRef","panRef","pinchRef","singleTapRef","translateX","translateY","offsetScale","scale","translationX","photos","reduce","acc","cur","attachmentImages","attachments","filter","attachment","type","giphy","url","thumb_url","image_url","title_link","og_scrape_url","attachmentPhotos","map","a","imageUrl","giphyURL","channelId","cid","created_at","id","messageId","mime_type","original_height","original_width","uri","width","user","user_id","photoLength","length","updatePosition","newIndex","findIndex","photo","uriForCurrentImage","imageHeight","Math","floor","Image","getSize","onDoubleTap","onPan","onPinch","onSingleTap","headerFooterOpacity","pagerStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","current","close","openGridView","present","videoRef","handleEnd","handleLoad","payload","handleProgress","data","currentTime","seekableDuration","handlePlayPause","status","undefined","seek","replayAsync","state","onProgressDrag","setPositionAsync","StyleSheet","absoluteFillObject","absoluteFill","styles","animatedContainer","i","abs","marginRight","header","footer","gridHandle","grid","clamp","lowerBound","upperBound","min","max","create","alignItems","flexDirection","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Dimensions,\n Image,\n ImageStyle,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\n\nimport {\n PanGestureHandler,\n PinchGestureHandler,\n TapGestureHandler,\n} from 'react-native-gesture-handler';\n\nimport Animated, {\n Easing,\n runOnJS,\n runOnUI,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { BottomSheetModal, BottomSheetModalProvider } from '@gorhom/bottom-sheet';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { AnimatedGalleryImage } from './components/AnimatedGalleryImage';\nimport { AnimatedGalleryVideo } from './components/AnimatedGalleryVideo';\nimport {\n ImageGalleryFooter,\n ImageGalleryFooterCustomComponentProps,\n} from './components/ImageGalleryFooter';\nimport {\n ImageGalleryHeader,\n ImageGalleryHeaderCustomComponentProps,\n} from './components/ImageGalleryHeader';\nimport { ImageGalleryOverlay } from './components/ImageGalleryOverlay';\nimport { ImageGalleryGridImageComponents, ImageGrid } from './components/ImageGrid';\nimport {\n ImageGalleryGridHandleCustomComponentProps,\n ImageGridHandle,\n} from './components/ImageGridHandle';\n\nimport { useImageGalleryGestures } from './hooks/useImageGalleryGestures';\n\nimport { useImageGalleryContext } from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n OverlayProviderProps,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport {\n isVideoPackageAvailable,\n VideoPayloadData,\n VideoProgressData,\n VideoType,\n} from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { vh, vw } from '../../utils/utils';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\nconst measuredScreenHeight = vh(100);\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\nconst MARGIN = 32;\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nexport type ImageGalleryCustomComponents<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Override props for following UI components, which are part of [image gallery](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#gallery-components).\n *\n * - [ImageGalleryFooter](#ImageGalleryFooter)\n *\n * - [ImageGrid](#ImageGrid)\n *\n * - [ImageGridHandle](#ImageGridHandle)\n *\n * - [ImageGalleryHeader](#ImageGalleryHeader)\n *\n * e.g.,\n *\n * ```js\n * {\n * footer: {\n * ShareIcon: CustomShareIconComponent\n * },\n * grid: {\n * avatarComponent: CustomAvatarComponent\n * },\n * gridHandle: {\n * centerComponent: CustomCenterComponent\n * },\n * header: {\n * CloseIcon: CustomCloseButtonComponent\n * },\n * }\n * ```\n * @overrideType object\n */\n imageGalleryCustomComponents?: {\n footer?: ImageGalleryFooterCustomComponentProps<StreamChatGenerics>;\n grid?: ImageGalleryGridImageComponents<StreamChatGenerics>;\n gridHandle?: ImageGalleryGridHandleCustomComponentProps;\n header?: ImageGalleryHeaderCustomComponentProps<StreamChatGenerics>;\n };\n};\n\ntype Props<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n ImageGalleryCustomComponents<StreamChatGenerics> & {\n overlayOpacity: Animated.SharedValue<number>;\n } & Pick<\n OverlayProviderProps<StreamChatGenerics>,\n | 'giphyVersion'\n | 'imageGalleryGridSnapPoints'\n | 'imageGalleryGridHandleHeight'\n | 'numberOfImageGalleryGridColumns'\n >;\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\n giphyVersion = 'fixed_height',\n imageGalleryCustomComponents,\n imageGalleryGridHandleHeight,\n imageGalleryGridSnapPoints,\n numberOfImageGalleryGridColumns,\n overlayOpacity,\n } = props;\n const [paused, setPaused] = useState<boolean>(false);\n const [progress, setProgress] = useState<number>(0);\n const [duration, setDuration] = useState<number>(0);\n const {\n theme: {\n colors: { white_snow },\n imageGallery: { backgroundColor, pager, slide },\n },\n } = useTheme();\n const [gridPhotos, setGridPhotos] = useState<Photo<StreamChatGenerics>[]>([]);\n const { overlay, translucentStatusBar } = useOverlayContext();\n const { image, images, setImage } = useImageGalleryContext<StreamChatGenerics>();\n\n /**\n * Height constants\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - measuredScreenHeight - statusBarHeight;\n const androidScreenHeightAdjustment = translucentStatusBar\n ? bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? 0\n : statusBarHeight\n : bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? -statusBarHeight\n : 0;\n const screenHeight = isAndroid\n ? Dimensions.get('window').height + androidScreenHeightAdjustment\n : vh(100);\n const halfScreenHeight = screenHeight / 2;\n const quarterScreenHeight = screenHeight / 4;\n const snapPoints = React.useMemo(\n () => [(screenHeight * 3) / 4, screenHeight - (imageGalleryGridHandleHeight ?? 40)],\n [],\n );\n\n /**\n * BottomSheetModal ref\n */\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n\n /**\n * BottomSheetModal state\n */\n const [currentBottomSheetIndex, setCurrentBottomSheetIndex] = useState(0);\n const animatedBottomSheetIndex = useSharedValue(0);\n\n /**\n * Fade animation for screen, it is always rendered with pointerEvents\n * set to none for fast opening\n */\n const screenTranslateY = useSharedValue(screenHeight);\n const showScreen = () => {\n 'worklet';\n screenTranslateY.value = withTiming(0, {\n duration: 250,\n easing: Easing.out(Easing.ease),\n });\n };\n\n /**\n * Run the fade animation on visible change\n */\n useEffect(() => {\n Keyboard.dismiss();\n showScreen();\n }, []);\n\n /**\n * Image height from URL or default to full screen height\n */\n const [currentImageHeight, setCurrentImageHeight] = useState<number>(screenHeight);\n\n /**\n * JS and UI index values, the JS follows the UI but is needed\n * for rendering the virtualized image list\n */\n const [selectedIndex, setSelectedIndex] = useState(0);\n const index = useSharedValue(0);\n\n /**\n * Header visible value for animating in out\n */\n const headerFooterVisible = useSharedValue(1);\n\n /**\n * Gesture handler refs\n */\n const doubleTapRef = useRef<TapGestureHandler>(null);\n const panRef = useRef<PanGestureHandler>(null);\n const pinchRef = useRef<PinchGestureHandler>(null);\n const singleTapRef = useRef<TapGestureHandler>(null);\n\n /**\n * Shared values for movement\n */\n const translateX = useSharedValue(0);\n const translateY = useSharedValue(0);\n const offsetScale = useSharedValue(1);\n const scale = useSharedValue(1);\n const translationX = useSharedValue(0);\n\n /**\n * Photos array created from all currently available\n * photo attachments\n */\n\n const photos = images.reduce((acc: Photo<StreamChatGenerics>[], cur) => {\n const attachmentImages =\n cur.attachments?.filter(\n (attachment) =>\n (attachment.type === 'giphy' &&\n (attachment.giphy?.[giphyVersion]?.url ||\n attachment.thumb_url ||\n attachment.image_url)) ||\n (attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url &&\n getUrlOfImageAttachment(attachment)) ||\n (isVideoPackageAvailable() && attachment.type === 'video'),\n ) || [];\n\n const attachmentPhotos = attachmentImages.map((a) => {\n const imageUrl = getUrlOfImageAttachment(a) as string;\n const giphyURL = a.giphy?.[giphyVersion]?.url || a.thumb_url || a.image_url;\n\n return {\n channelId: cur.cid,\n created_at: cur.created_at,\n id: `photoId-${cur.id}-${imageUrl}`,\n messageId: cur.id,\n mime_type: a.type === 'giphy' ? 'image/gif' : a.mime_type,\n original_height: a.original_height,\n original_width: a.original_width,\n type: a.type,\n uri:\n a.type === 'giphy'\n ? giphyURL\n : getResizedImageUrl({\n height: screenHeight,\n url: imageUrl,\n width: screenWidth,\n }),\n user: cur.user,\n user_id: cur.user_id,\n };\n });\n\n return [...acc, ...attachmentPhotos] as Photo<StreamChatGenerics>[];\n }, []);\n\n /**\n * Photos length needs to be kept as a const here so if the length\n * changes it causes the pan gesture handler function to refresh. This\n * does not work if the calculation for the length of the array is left\n * inside the gesture handler as it will have an array as a dependency\n */\n const photoLength = photos.length;\n\n /**\n * Set selected photo when changed via pressing in the message list\n */\n useEffect(() => {\n const updatePosition = (newIndex: number) => {\n 'worklet';\n\n if (newIndex > -1) {\n index.value = newIndex;\n translationX.value = -(screenWidth + MARGIN) * newIndex;\n runOnJS(setSelectedIndex)(newIndex);\n }\n };\n\n const newIndex = photos.findIndex(\n (photo) => photo.messageId === image?.messageId && photo.uri === image?.url,\n );\n\n if (photoLength > 1) {\n setPaused(true);\n }\n\n runOnUI(updatePosition)(newIndex);\n }, [image, photoLength]);\n\n /**\n * Image heights are not provided and therefore need to be calculated.\n * We start by allowing the image to be the full height then reduce it\n * to the proper scaled height based on the width being restricted to the\n * screen width when the dimensions are received.\n */\n const uriForCurrentImage = photos[selectedIndex]?.uri;\n useEffect(() => {\n setCurrentImageHeight(screenHeight);\n const photo = photos[index.value];\n const height = photo?.original_height;\n const width = photo?.original_width;\n\n if (height && width) {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n } else if (photo?.uri) {\n if (photo.type === 'image') {\n Image.getSize(photo.uri, (width, height) => {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n });\n }\n }\n }, [uriForCurrentImage]);\n\n const { onDoubleTap, onPan, onPinch, onSingleTap } = useImageGalleryGestures({\n currentImageHeight,\n halfScreenHeight,\n halfScreenWidth,\n headerFooterVisible,\n offsetScale,\n overlayOpacity,\n photoLength,\n scale,\n screenHeight,\n screenWidth,\n setSelectedIndex,\n translateX,\n translateY,\n translationX,\n });\n\n /**\n * If the header is visible we scale down the opacity of it as the\n * image is swiped downward\n */\n const headerFooterOpacity = useDerivedValue(\n () =>\n currentImageHeight * scale.value < screenHeight && translateY.value > 0\n ? 1 - translateY.value / quarterScreenHeight\n : currentImageHeight * scale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? 1 -\n (translateY.value - ((currentImageHeight / 2) * scale.value - halfScreenHeight)) /\n quarterScreenHeight\n : 1,\n [currentImageHeight],\n );\n\n /**\n * This transition and scaleX reverse lets use scroll left\n */\n const pagerStyle = useAnimatedStyle<ImageStyle>(\n () => ({\n transform: [\n { scaleX: -1 },\n {\n translateX: translationX.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Simple background color animation on Y movement\n */\n const containerBackground = useAnimatedStyle<ViewStyle>(\n () => ({\n backgroundColor: backgroundColor || white_snow,\n opacity: headerFooterOpacity.value,\n }),\n [headerFooterOpacity],\n );\n\n /**\n * Show screen style as component is always rendered we hide it\n * down and up and set opacity to 0 for good measure\n */\n const showScreenStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n transform: [\n {\n translateY: screenTranslateY.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Functions toclose BottomSheetModal with image grid\n */\n const closeGridView = () => {\n if (bottomSheetModalRef.current?.close) {\n bottomSheetModalRef.current.close();\n setGridPhotos([]);\n }\n };\n\n /**\n * Function to open BottomSheetModal with image grid\n */\n const openGridView = () => {\n if (bottomSheetModalRef.current?.present) {\n bottomSheetModalRef.current.present();\n setGridPhotos(photos);\n }\n };\n\n const videoRef = useRef<VideoType>(null);\n\n const handleEnd = () => {\n setPaused(true);\n setProgress(1);\n };\n\n const handleLoad = (payload: VideoPayloadData) => {\n if (payload.duration) setDuration(payload.duration);\n };\n\n const handleProgress = (data: VideoProgressData) => {\n if (data.currentTime && data.seekableDuration) {\n setProgress(data.currentTime / data.seekableDuration);\n }\n };\n\n const handlePlayPause = (status?: boolean) => {\n if (status === undefined) {\n // React Native Video for RN CLI has seek as an API to move to a particular location in the video\n if (progress === 1 && videoRef.current && videoRef.current.seek) {\n videoRef.current.seek(0);\n }\n // Expo AV for Expo has replayAsync as an API to move to a starting of the video\n if (progress === 1 && videoRef.current && videoRef.current.replayAsync) {\n videoRef.current.replayAsync();\n }\n\n setPaused((state) => !state);\n } else {\n setPaused(status);\n }\n };\n\n const onProgressDrag = (progress: number) => {\n // React Native Video for RN CLI has seek as an API to move to a particular location in the video\n if (videoRef.current && videoRef.current.seek) {\n videoRef.current.seek(progress);\n }\n\n // Expo AV for Expo has setPositionAsync as an API to move to a particular location of the video\n if (videoRef.current && videoRef.current.setPositionAsync) {\n videoRef.current.setPositionAsync(progress * 1000);\n }\n };\n\n return (\n <Animated.View\n accessibilityLabel='Image Gallery'\n pointerEvents={'auto'}\n style={[StyleSheet.absoluteFillObject, showScreenStyle]}\n >\n <Animated.View style={[StyleSheet.absoluteFillObject, containerBackground]} />\n <TapGestureHandler\n minPointers={1}\n numberOfTaps={1}\n onGestureEvent={onSingleTap}\n ref={singleTapRef}\n waitFor={[panRef, pinchRef, doubleTapRef]}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <TapGestureHandler\n maxDeltaX={8}\n maxDeltaY={8}\n maxDist={8}\n minPointers={1}\n numberOfTaps={2}\n onGestureEvent={onDoubleTap}\n ref={doubleTapRef}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <PinchGestureHandler\n onGestureEvent={onPinch}\n ref={pinchRef}\n simultaneousHandlers={[panRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <PanGestureHandler\n enabled={overlay === 'gallery'}\n maxPointers={isAndroid ? undefined : 1}\n minDist={10}\n onGestureEvent={onPan}\n ref={panRef}\n simultaneousHandlers={[pinchRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <Animated.View\n style={[\n styles.animatedContainer,\n pagerStyle,\n pager,\n {\n transform: [\n { scaleX: -1 }, // Also only here for opening, wrong direction when not included\n {\n translateX: translationX.value, // Only here for opening, wrong index when this is not included\n },\n ],\n },\n ]}\n >\n {photos.map((photo, i) =>\n photo.type === 'video' ? (\n <AnimatedGalleryVideo\n handleEnd={handleEnd}\n handleLoad={handleLoad}\n handleProgress={handleProgress}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n paused={paused}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n source={{ uri: photo.uri }}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n videoRef={videoRef}\n />\n ) : (\n <AnimatedGalleryImage\n accessibilityLabel={'Image Item'}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n photo={photo}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n />\n ),\n )}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </PinchGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n <ImageGalleryHeader<StreamChatGenerics>\n opacity={headerFooterOpacity}\n photo={photos[selectedIndex]}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.header}\n />\n <ImageGalleryFooter<StreamChatGenerics>\n accessibilityLabel={'Image Gallery Footer'}\n duration={duration}\n onPlayPause={handlePlayPause}\n onProgressDrag={onProgressDrag}\n opacity={headerFooterOpacity}\n openGridView={openGridView}\n paused={paused}\n photo={photos[selectedIndex]}\n photoLength={photoLength}\n progress={progress}\n selectedIndex={selectedIndex}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.footer}\n />\n\n <ImageGalleryOverlay\n animatedBottomSheetIndex={animatedBottomSheetIndex}\n closeGridView={closeGridView}\n currentBottomSheetIndex={currentBottomSheetIndex}\n />\n <BottomSheetModalProvider>\n <BottomSheetModal\n animatedIndex={animatedBottomSheetIndex}\n enablePanDownToClose={true}\n handleComponent={() => (\n <ImageGridHandle\n closeGridView={closeGridView}\n {...imageGalleryCustomComponents?.gridHandle}\n />\n )}\n handleHeight={imageGalleryGridHandleHeight ?? 40}\n index={0}\n onChange={(index: number) => setCurrentBottomSheetIndex(index)}\n ref={bottomSheetModalRef}\n snapPoints={imageGalleryGridSnapPoints || snapPoints}\n >\n <ImageGrid\n closeGridView={closeGridView}\n numberOfImageGalleryGridColumns={numberOfImageGalleryGridColumns}\n photos={gridPhotos}\n setImage={setImage}\n {...imageGalleryCustomComponents?.grid}\n />\n </BottomSheetModal>\n </BottomSheetModalProvider>\n </Animated.View>\n );\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n\nconst styles = StyleSheet.create({\n animatedContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n\nexport type Photo<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n id: string;\n uri: string;\n channelId?: string;\n created_at?: string | Date;\n messageId?: string;\n mime_type?: string;\n original_height?: number;\n original_width?: number;\n type?: string;\n user?: UserResponse<StreamChatGenerics> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"]}
|
|
1
|
+
{"version":3,"sources":["ImageGallery.tsx"],"names":["isAndroid","Platform","OS","fullScreenHeight","Dimensions","get","height","measuredScreenHeight","screenWidth","halfScreenWidth","MARGIN","HasPinched","IsSwiping","ImageGallery","props","giphyVersion","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","paused","setPaused","progress","setProgress","duration","setDuration","theme","white_snow","colors","imageGallery","backgroundColor","pager","slide","gridPhotos","setGridPhotos","overlay","translucentStatusBar","image","images","setImage","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","snapPoints","React","useMemo","bottomSheetModalRef","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","screenTranslateY","showScreen","value","easing","Easing","out","ease","Keyboard","dismiss","currentImageHeight","setCurrentImageHeight","selectedIndex","setSelectedIndex","index","headerFooterVisible","doubleTapRef","panRef","pinchRef","singleTapRef","translateX","translateY","offsetScale","scale","translationX","photos","reduce","acc","cur","attachmentImages","attachments","filter","attachment","type","giphy","url","thumb_url","image_url","title_link","og_scrape_url","attachmentPhotos","map","a","imageUrl","giphyURL","channelId","cid","created_at","id","messageId","mime_type","original_height","original_width","uri","width","user","user_id","photoLength","length","updatePosition","newIndex","findIndex","photo","uriForCurrentImage","imageHeight","Math","floor","Image","getSize","onDoubleTap","onPan","onPinch","onSingleTap","headerFooterOpacity","pagerStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","current","close","openGridView","present","videoRef","handleEnd","handleLoad","payload","handleProgress","data","currentTime","seekableDuration","handlePlayPause","status","undefined","seek","replayAsync","state","onProgressDrag","setPositionAsync","StyleSheet","absoluteFillObject","absoluteFill","styles","animatedContainer","i","abs","marginRight","header","footer","gridHandle","grid","clamp","lowerBound","upperBound","min","max","create","alignItems","flexDirection","displayName"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;AAWA;;AAMA;;AAUA;;AAIA;;AACA;;AACA;;AAIA;;AAIA;;AACA;;AACA;;AAKA;;AAEA;;AACA;;AAIA;;AACA;;AAOA;;AACA;;AACA;;AACA;;;;;;;;;AAEA,IAAMA,SAAS,GAAGC,sBAASC,EAAT,KAAgB,SAAlC;;AACA,IAAMC,gBAAgB,GAAGC,wBAAWC,GAAX,CAAe,QAAf,EAAyBC,MAAlD;;AACA,IAAMC,oBAAoB,GAAG,eAAG,GAAH,CAA7B;AACA,IAAMC,WAAW,GAAG,eAAG,GAAH,CAApB;AACA,IAAMC,eAAe,GAAG,eAAG,EAAH,CAAxB;AACA,IAAMC,MAAM,GAAG,EAAf;IAEYC,U;;;WAAAA,U;AAAAA,EAAAA,U,CAAAA,U;AAAAA,EAAAA,U,CAAAA,U;GAAAA,U,0BAAAA,U;;IAKAC,S;;;WAAAA,S;AAAAA,EAAAA,S,CAAAA,S;AAAAA,EAAAA,S,CAAAA,S;AAAAA,EAAAA,S,CAAAA,S;GAAAA,S,yBAAAA,S;;AA2DL,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAG1BC,KAH0B,EAIvB;AAAA;;AACH,4BAOIA,KAPJ,CACEC,YADF;AAAA,MACEA,YADF,oCACiB,cADjB;AAAA,MAEEC,4BAFF,GAOIF,KAPJ,CAEEE,4BAFF;AAAA,MAGEC,4BAHF,GAOIH,KAPJ,CAGEG,4BAHF;AAAA,MAIEC,0BAJF,GAOIJ,KAPJ,CAIEI,0BAJF;AAAA,MAKEC,+BALF,GAOIL,KAPJ,CAKEK,+BALF;AAAA,MAMEC,cANF,GAOIN,KAPJ,CAMEM,cANF;;AAQA,kBAA4B,qBAAkB,KAAlB,CAA5B;AAAA;AAAA,MAAOC,MAAP;AAAA,MAAeC,SAAf;;AACA,mBAAgC,qBAAiB,CAAjB,CAAhC;AAAA;AAAA,MAAOC,QAAP;AAAA,MAAiBC,WAAjB;;AACA,mBAAgC,qBAAiB,CAAjB,CAAhC;AAAA;AAAA,MAAOC,QAAP;AAAA,MAAiBC,WAAjB;;AACA,kBAKI,6BALJ;AAAA,kCACEC,KADF;AAAA,MAEcC,UAFd,mBAEIC,MAFJ,CAEcD,UAFd;AAAA,8CAGIE,YAHJ;AAAA,MAGoBC,eAHpB,yBAGoBA,eAHpB;AAAA,MAGqCC,KAHrC,yBAGqCA,KAHrC;AAAA,MAG4CC,KAH5C,yBAG4CA,KAH5C;;AAMA,mBAAoC,qBAAsC,EAAtC,CAApC;AAAA;AAAA,MAAOC,UAAP;AAAA,MAAmBC,aAAnB;;AACA,2BAA0C,wCAA1C;AAAA,MAAQC,OAAR,sBAAQA,OAAR;AAAA,MAAiBC,oBAAjB,sBAAiBA,oBAAjB;;AACA,8BAAoC,kDAApC;AAAA,MAAQC,KAAR,yBAAQA,KAAR;AAAA,MAAeC,MAAf,yBAAeA,MAAf;AAAA,MAAuBC,QAAvB,yBAAuBA,QAAvB;;AAKA,MAAMC,eAAe,4BAAGC,uBAAUC,aAAb,oCAA8B,CAAnD;AACA,MAAMC,eAAe,GAAGzC,gBAAgB,GAAGI,oBAAnB,GAA0CkC,eAAlE;AACA,MAAMI,6BAA6B,GAAGR,oBAAoB,GACtDO,eAAe,KAAKH,eAApB,IAAuCG,eAAe,GAAG,CAAzD,GACE,CADF,GAEEH,eAHoD,GAItDG,eAAe,KAAKH,eAApB,IAAuCG,eAAe,GAAG,CAAzD,GACA,CAACH,eADD,GAEA,CANJ;AAOA,MAAMK,YAAY,GAAG9C,SAAS,GAC1BI,wBAAWC,GAAX,CAAe,QAAf,EAAyBC,MAAzB,GAAkCuC,6BADR,GAE1B,eAAG,GAAH,CAFJ;AAGA,MAAME,gBAAgB,GAAGD,YAAY,GAAG,CAAxC;AACA,MAAME,mBAAmB,GAAGF,YAAY,GAAG,CAA3C;;AACA,MAAMG,UAAU,GAAGC,kBAAMC,OAAN,CACjB;AAAA,WAAM,CAAEL,YAAY,GAAG,CAAhB,GAAqB,CAAtB,EAAyBA,YAAY,IAAI7B,4BAAJ,WAAIA,4BAAJ,GAAoC,EAApC,CAArC,CAAN;AAAA,GADiB,EAEjB,EAFiB,CAAnB;;AAQA,MAAMmC,mBAAmB,GAAG,mBAAyB,IAAzB,CAA5B;;AAKA,mBAA8D,qBAAS,CAAT,CAA9D;AAAA;AAAA,MAAOC,uBAAP;AAAA,MAAgCC,0BAAhC;;AACA,MAAMC,wBAAwB,GAAG,2CAAe,CAAf,CAAjC;AAMA,MAAMC,gBAAgB,GAAG,2CAAeV,YAAf,CAAzB;;AACA,MAAMW,UAAU,GAAG,SAAbA,UAAa,GAAM;AACvB;;AACAD,IAAAA,gBAAgB,CAACE,KAAjB,GAAyB,uCAAW,CAAX,EAAc;AACrCjC,MAAAA,QAAQ,EAAE,GAD2B;AAErCkC,MAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAF6B,KAAd,CAAzB;AAID,GAND;;AAWA,wBAAU,YAAM;AACdC,0BAASC,OAAT;;AACAP,IAAAA,UAAU;AACX,GAHD,EAGG,EAHH;;AAQA,oBAAoD,qBAAiBX,YAAjB,CAApD;AAAA;AAAA,MAAOmB,kBAAP;AAAA,MAA2BC,qBAA3B;;AAMA,oBAA0C,qBAAS,CAAT,CAA1C;AAAA;AAAA,MAAOC,aAAP;AAAA,MAAsBC,gBAAtB;;AACA,MAAMC,KAAK,GAAG,2CAAe,CAAf,CAAd;AAKA,MAAMC,mBAAmB,GAAG,2CAAe,CAAf,CAA5B;AAKA,MAAMC,YAAY,GAAG,mBAA0B,IAA1B,CAArB;AACA,MAAMC,MAAM,GAAG,mBAA0B,IAA1B,CAAf;AACA,MAAMC,QAAQ,GAAG,mBAA4B,IAA5B,CAAjB;AACA,MAAMC,YAAY,GAAG,mBAA0B,IAA1B,CAArB;AAKA,MAAMC,UAAU,GAAG,2CAAe,CAAf,CAAnB;AACA,MAAMC,UAAU,GAAG,2CAAe,CAAf,CAAnB;AACA,MAAMC,WAAW,GAAG,2CAAe,CAAf,CAApB;AACA,MAAMC,KAAK,GAAG,2CAAe,CAAf,CAAd;AACA,MAAMC,YAAY,GAAG,2CAAe,CAAf,CAArB;AAOA,MAAMC,MAAM,GAAGzC,MAAM,CAAC0C,MAAP,CAAc,UAACC,GAAD,EAAmCC,GAAnC,EAA2C;AAAA;;AACtE,QAAMC,gBAAgB,GACpB,qBAAAD,GAAG,CAACE,WAAJ,sCAAiBC,MAAjB,CACE,UAACC,UAAD;AAAA;;AAAA,aACGA,UAAU,CAACC,IAAX,KAAoB,OAApB,KACE,sBAAAD,UAAU,CAACE,KAAX,gEAAmB1E,YAAnB,4CAAkC2E,GAAlC,KACCH,UAAU,CAACI,SADZ,IAECJ,UAAU,CAACK,SAHd,CAAD,IAICL,UAAU,CAACC,IAAX,KAAoB,OAApB,IACC,CAACD,UAAU,CAACM,UADb,IAEC,CAACN,UAAU,CAACO,aAFb,IAGC,sDAAwBP,UAAxB,CAPF,IAQC,0CAA6BA,UAAU,CAACC,IAAX,KAAoB,OATpD;AAAA,KADF,MAWK,EAZP;AAcA,QAAMO,gBAAgB,GAAGX,gBAAgB,CAACY,GAAjB,CAAqB,UAACC,CAAD,EAAO;AAAA;;AACnD,UAAMC,QAAQ,GAAG,sDAAwBD,CAAxB,CAAjB;AACA,UAAME,QAAQ,GAAG,aAAAF,CAAC,CAACR,KAAF,uDAAU1E,YAAV,4CAAyB2E,GAAzB,KAAgCO,CAAC,CAACN,SAAlC,IAA+CM,CAAC,CAACL,SAAlE;AAEA,aAAO;AACLQ,QAAAA,SAAS,EAAEjB,GAAG,CAACkB,GADV;AAELC,QAAAA,UAAU,EAAEnB,GAAG,CAACmB,UAFX;AAGLC,QAAAA,EAAE,eAAapB,GAAG,CAACoB,EAAjB,SAAuBL,QAHpB;AAILM,QAAAA,SAAS,EAAErB,GAAG,CAACoB,EAJV;AAKLE,QAAAA,SAAS,EAAER,CAAC,CAACT,IAAF,KAAW,OAAX,GAAqB,wCAAiBW,QAAjB,WAAiBA,QAAjB,GAA6B,EAA7B,CAArB,GAAwDF,CAAC,CAACQ,SALhE;AAMLC,QAAAA,eAAe,EAAET,CAAC,CAACS,eANd;AAOLC,QAAAA,cAAc,EAAEV,CAAC,CAACU,cAPb;AAQLnB,QAAAA,IAAI,EAAES,CAAC,CAACT,IARH;AASLoB,QAAAA,GAAG,EACDX,CAAC,CAACT,IAAF,KAAW,OAAX,GACIW,QADJ,GAEI,4CAAmB;AACjB7F,UAAAA,MAAM,EAAEwC,YADS;AAEjB4C,UAAAA,GAAG,EAAEQ,QAFY;AAGjBW,UAAAA,KAAK,EAAErG;AAHU,SAAnB,CAZD;AAiBLsG,QAAAA,IAAI,EAAE3B,GAAG,CAAC2B,IAjBL;AAkBLC,QAAAA,OAAO,EAAE5B,GAAG,CAAC4B;AAlBR,OAAP;AAoBD,KAxBwB,CAAzB;AA0BA,yDAAW7B,GAAX,uCAAmBa,gBAAnB;AACD,GA1Cc,EA0CZ,EA1CY,CAAf;AAkDA,MAAMiB,WAAW,GAAGhC,MAAM,CAACiC,MAA3B;AAKA,wBAAU,YAAM;AACd,QAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACC,QAAD,EAAsB;AAC3C;;AAEA,UAAIA,QAAQ,GAAG,CAAC,CAAhB,EAAmB;AACjB9C,QAAAA,KAAK,CAACX,KAAN,GAAcyD,QAAd;AACApC,QAAAA,YAAY,CAACrB,KAAb,GAAqB,EAAElD,WAAW,GAAGE,MAAhB,IAA0ByG,QAA/C;AACA,4CAAQ/C,gBAAR,EAA0B+C,QAA1B;AACD;AACF,KARD;;AAUA,QAAMA,QAAQ,GAAGnC,MAAM,CAACoC,SAAP,CACf,UAACC,KAAD;AAAA,aAAWA,KAAK,CAACb,SAAN,MAAoBlE,KAApB,oBAAoBA,KAAK,CAAEkE,SAA3B,KAAwCa,KAAK,CAACT,GAAN,MAActE,KAAd,oBAAcA,KAAK,CAAEoD,GAArB,CAAnD;AAAA,KADe,CAAjB;;AAIA,QAAIsB,WAAW,GAAG,CAAlB,EAAqB;AACnB1F,MAAAA,SAAS,CAAC,IAAD,CAAT;AACD;;AAED,wCAAQ4F,cAAR,EAAwBC,QAAxB;AACD,GApBD,EAoBG,CAAC7E,KAAD,EAAQ0E,WAAR,CApBH;AA4BA,MAAMM,kBAAkB,4BAAGtC,MAAM,CAACb,aAAD,CAAT,qBAAG,sBAAuByC,GAAlD;AACA,wBAAU,YAAM;AACd1C,IAAAA,qBAAqB,CAACpB,YAAD,CAArB;AACA,QAAMuE,KAAK,GAAGrC,MAAM,CAACX,KAAK,CAACX,KAAP,CAApB;AACA,QAAMpD,MAAM,GAAG+G,KAAH,oBAAGA,KAAK,CAAEX,eAAtB;AACA,QAAMG,KAAK,GAAGQ,KAAH,oBAAGA,KAAK,CAAEV,cAArB;;AAEA,QAAIrG,MAAM,IAAIuG,KAAd,EAAqB;AACnB,UAAMU,WAAW,GAAGC,IAAI,CAACC,KAAL,CAAWnH,MAAM,IAAIE,WAAW,GAAGqG,KAAlB,CAAjB,CAApB;AACA3C,MAAAA,qBAAqB,CAACqD,WAAW,GAAGzE,YAAd,GAA6BA,YAA7B,GAA4CyE,WAA7C,CAArB;AACD,KAHD,MAGO,IAAIF,KAAJ,YAAIA,KAAK,CAAET,GAAX,EAAgB;AACrB,UAAIS,KAAK,CAAC7B,IAAN,KAAe,OAAnB,EAA4B;AAC1BkC,2BAAMC,OAAN,CAAcN,KAAK,CAACT,GAApB,EAAyB,UAACC,KAAD,EAAQvG,MAAR,EAAmB;AAC1C,cAAMiH,WAAW,GAAGC,IAAI,CAACC,KAAL,CAAWnH,MAAM,IAAIE,WAAW,GAAGqG,KAAlB,CAAjB,CAApB;AACA3C,UAAAA,qBAAqB,CAACqD,WAAW,GAAGzE,YAAd,GAA6BA,YAA7B,GAA4CyE,WAA7C,CAArB;AACD,SAHD;AAID;AACF;AACF,GAjBD,EAiBG,CAACD,kBAAD,CAjBH;;AAmBA,8BAAqD,sDAAwB;AAC3ErD,IAAAA,kBAAkB,EAAlBA,kBAD2E;AAE3ElB,IAAAA,gBAAgB,EAAhBA,gBAF2E;AAG3EtC,IAAAA,eAAe,EAAfA,eAH2E;AAI3E6D,IAAAA,mBAAmB,EAAnBA,mBAJ2E;AAK3EO,IAAAA,WAAW,EAAXA,WAL2E;AAM3EzD,IAAAA,cAAc,EAAdA,cAN2E;AAO3E4F,IAAAA,WAAW,EAAXA,WAP2E;AAQ3ElC,IAAAA,KAAK,EAALA,KAR2E;AAS3EhC,IAAAA,YAAY,EAAZA,YAT2E;AAU3EtC,IAAAA,WAAW,EAAXA,WAV2E;AAW3E4D,IAAAA,gBAAgB,EAAhBA,gBAX2E;AAY3EO,IAAAA,UAAU,EAAVA,UAZ2E;AAa3EC,IAAAA,UAAU,EAAVA,UAb2E;AAc3EG,IAAAA,YAAY,EAAZA;AAd2E,GAAxB,CAArD;AAAA,MAAQ6C,WAAR,yBAAQA,WAAR;AAAA,MAAqBC,KAArB,yBAAqBA,KAArB;AAAA,MAA4BC,OAA5B,yBAA4BA,OAA5B;AAAA,MAAqCC,WAArC,yBAAqCA,WAArC;;AAqBA,MAAMC,mBAAmB,GAAG,4CAC1B;AAAA,WACE/D,kBAAkB,GAAGa,KAAK,CAACpB,KAA3B,GAAmCZ,YAAnC,IAAmD8B,UAAU,CAAClB,KAAX,GAAmB,CAAtE,GACI,IAAIkB,UAAU,CAAClB,KAAX,GAAmBV,mBAD3B,GAEIiB,kBAAkB,GAAGa,KAAK,CAACpB,KAA3B,GAAmCZ,YAAnC,IACA8B,UAAU,CAAClB,KAAX,GAAoBO,kBAAkB,GAAG,CAAtB,GAA2Ba,KAAK,CAACpB,KAAjC,GAAyCX,gBAD5D,GAEA,IACA,CAAC6B,UAAU,CAAClB,KAAX,IAAqBO,kBAAkB,GAAG,CAAtB,GAA2Ba,KAAK,CAACpB,KAAjC,GAAyCX,gBAA7D,CAAD,IACEC,mBAJF,GAKA,CARN;AAAA,GAD0B,EAU1B,CAACiB,kBAAD,CAV0B,CAA5B;AAgBA,MAAMgE,UAAU,GAAG,6CACjB;AAAA,WAAO;AACLC,MAAAA,SAAS,EAAE,CACT;AAAEC,QAAAA,MAAM,EAAE,CAAC;AAAX,OADS,EAET;AACExD,QAAAA,UAAU,EAAEI,YAAY,CAACrB;AAD3B,OAFS;AADN,KAAP;AAAA,GADiB,EASjB,EATiB,CAAnB;AAeA,MAAM0E,mBAAmB,GAAG,6CAC1B;AAAA,WAAO;AACLrG,MAAAA,eAAe,EAAEA,eAAe,IAAIH,UAD/B;AAELyG,MAAAA,OAAO,EAAEL,mBAAmB,CAACtE;AAFxB,KAAP;AAAA,GAD0B,EAK1B,CAACsE,mBAAD,CAL0B,CAA5B;AAYA,MAAMM,eAAe,GAAG,6CACtB;AAAA,WAAO;AACLJ,MAAAA,SAAS,EAAE,CACT;AACEtD,QAAAA,UAAU,EAAEpB,gBAAgB,CAACE;AAD/B,OADS;AADN,KAAP;AAAA,GADsB,EAQtB,EARsB,CAAxB;;AAcA,MAAM6E,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAAA;;AAC1B,iCAAInF,mBAAmB,CAACoF,OAAxB,aAAI,sBAA6BC,KAAjC,EAAwC;AACtCrF,MAAAA,mBAAmB,CAACoF,OAApB,CAA4BC,KAA5B;AACAtG,MAAAA,aAAa,CAAC,EAAD,CAAb;AACD;AACF,GALD;;AAUA,MAAMuG,YAAY,GAAG,SAAfA,YAAe,GAAM;AAAA;;AACzB,kCAAItF,mBAAmB,CAACoF,OAAxB,aAAI,uBAA6BG,OAAjC,EAA0C;AACxCvF,MAAAA,mBAAmB,CAACoF,OAApB,CAA4BG,OAA5B;AACAxG,MAAAA,aAAa,CAAC6C,MAAD,CAAb;AACD;AACF,GALD;;AAOA,MAAM4D,QAAQ,GAAG,mBAAkB,IAAlB,CAAjB;;AAEA,MAAMC,SAAS,GAAG,SAAZA,SAAY,GAAM;AACtBvH,IAAAA,SAAS,CAAC,IAAD,CAAT;AACAE,IAAAA,WAAW,CAAC,CAAD,CAAX;AACD,GAHD;;AAKA,MAAMsH,UAAU,GAAG,SAAbA,UAAa,CAACC,OAAD,EAA+B;AAChD,QAAIA,OAAO,CAACtH,QAAZ,EAAsBC,WAAW,CAACqH,OAAO,CAACtH,QAAT,CAAX;AACvB,GAFD;;AAIA,MAAMuH,cAAc,GAAG,SAAjBA,cAAiB,CAACC,IAAD,EAA6B;AAClD,QAAIA,IAAI,CAACC,WAAL,IAAoBD,IAAI,CAACE,gBAA7B,EAA+C;AAC7C3H,MAAAA,WAAW,CAACyH,IAAI,CAACC,WAAL,GAAmBD,IAAI,CAACE,gBAAzB,CAAX;AACD;AACF,GAJD;;AAMA,MAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACC,MAAD,EAAsB;AAC5C,QAAIA,MAAM,KAAKC,SAAf,EAA0B;AAExB,UAAI/H,QAAQ,KAAK,CAAb,IAAkBqH,QAAQ,CAACJ,OAA3B,IAAsCI,QAAQ,CAACJ,OAAT,CAAiBe,IAA3D,EAAiE;AAC/DX,QAAAA,QAAQ,CAACJ,OAAT,CAAiBe,IAAjB,CAAsB,CAAtB;AACD;;AAED,UAAIhI,QAAQ,KAAK,CAAb,IAAkBqH,QAAQ,CAACJ,OAA3B,IAAsCI,QAAQ,CAACJ,OAAT,CAAiBgB,WAA3D,EAAwE;AACtEZ,QAAAA,QAAQ,CAACJ,OAAT,CAAiBgB,WAAjB;AACD;;AAEDlI,MAAAA,SAAS,CAAC,UAACmI,KAAD;AAAA,eAAW,CAACA,KAAZ;AAAA,OAAD,CAAT;AACD,KAXD,MAWO;AACLnI,MAAAA,SAAS,CAAC+H,MAAD,CAAT;AACD;AACF,GAfD;;AAiBA,MAAMK,cAAc,GAAG,SAAjBA,cAAiB,CAACnI,QAAD,EAAsB;AAE3C,QAAIqH,QAAQ,CAACJ,OAAT,IAAoBI,QAAQ,CAACJ,OAAT,CAAiBe,IAAzC,EAA+C;AAC7CX,MAAAA,QAAQ,CAACJ,OAAT,CAAiBe,IAAjB,CAAsBhI,QAAtB;AACD;;AAGD,QAAIqH,QAAQ,CAACJ,OAAT,IAAoBI,QAAQ,CAACJ,OAAT,CAAiBmB,gBAAzC,EAA2D;AACzDf,MAAAA,QAAQ,CAACJ,OAAT,CAAiBmB,gBAAjB,CAAkCpI,QAAQ,GAAG,IAA7C;AACD;AACF,GAVD;;AAYA,SACE,gCAAC,iCAAD,CAAU,IAAV;AACE,IAAA,kBAAkB,EAAC,eADrB;AAEE,IAAA,aAAa,EAAE,MAFjB;AAGE,IAAA,KAAK,EAAE,CAACqI,wBAAWC,kBAAZ,EAAgCvB,eAAhC,CAHT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAKE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAE,CAACsB,wBAAWC,kBAAZ,EAAgCzB,mBAAhC,CAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IALF,EAME,gCAAC,4CAAD;AACE,IAAA,WAAW,EAAE,CADf;AAEE,IAAA,YAAY,EAAE,CAFhB;AAGE,IAAA,cAAc,EAAEL,WAHlB;AAIE,IAAA,GAAG,EAAErD,YAJP;AAKE,IAAA,OAAO,EAAE,CAACF,MAAD,EAASC,QAAT,EAAmBF,YAAnB,CALX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAEqF,wBAAWC,kBAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,4CAAD;AACE,IAAA,SAAS,EAAE,CADb;AAEE,IAAA,SAAS,EAAE,CAFb;AAGE,IAAA,OAAO,EAAE,CAHX;AAIE,IAAA,WAAW,EAAE,CAJf;AAKE,IAAA,YAAY,EAAE,CALhB;AAME,IAAA,cAAc,EAAEjC,WANlB;AAOE,IAAA,GAAG,EAAErD,YAPP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KASE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAEqF,wBAAWC,kBAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,8CAAD;AACE,IAAA,cAAc,EAAE/B,OADlB;AAEE,IAAA,GAAG,EAAErD,QAFP;AAGE,IAAA,oBAAoB,EAAE,CAACD,MAAD,CAHxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAKE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAEoF,wBAAWE,YAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,4CAAD;AACE,IAAA,OAAO,EAAE1H,OAAO,KAAK,SADvB;AAEE,IAAA,WAAW,EAAEpC,SAAS,GAAGsJ,SAAH,GAAe,CAFvC;AAGE,IAAA,OAAO,EAAE,EAHX;AAIE,IAAA,cAAc,EAAEzB,KAJlB;AAKE,IAAA,GAAG,EAAErD,MALP;AAME,IAAA,oBAAoB,EAAE,CAACC,QAAD,CANxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAQE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAEmF,wBAAWE,YAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,iCAAD,CAAU,IAAV;AACE,IAAA,KAAK,EAAE,CACLC,MAAM,CAACC,iBADF,EAEL/B,UAFK,EAGLjG,KAHK,EAIL;AACEkG,MAAAA,SAAS,EAAE,CACT;AAAEC,QAAAA,MAAM,EAAE,CAAC;AAAX,OADS,EAET;AACExD,QAAAA,UAAU,EAAEI,YAAY,CAACrB;AAD3B,OAFS;AADb,KAJK,CADT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAeGsB,MAAM,CAACgB,GAAP,CAAW,UAACqB,KAAD,EAAQ4C,CAAR;AAAA,WACV5C,KAAK,CAAC7B,IAAN,KAAe,OAAf,GACE,gCAAC,0CAAD;AACE,MAAA,SAAS,EAAEqD,SADb;AAEE,MAAA,UAAU,EAAEC,UAFd;AAGE,MAAA,cAAc,EAAEE,cAHlB;AAIE,MAAA,KAAK,EAAEiB,CAJT;AAKE,MAAA,GAAG,EAAK5C,KAAK,CAACT,GAAX,SAAkBqD,CALvB;AAME,MAAA,WAAW,EAAEpF,WANf;AAOE,MAAA,MAAM,EAAExD,MAPV;AAQE,MAAA,QAAQ,EAAE8C,aAAa,GAAG8F,CAR5B;AASE,MAAA,KAAK,EAAEnF,KATT;AAUE,MAAA,YAAY,EAAEhC,YAVhB;AAWE,MAAA,QAAQ,EAAEqB,aAAa,KAAK8F,CAX9B;AAYE,MAAA,YAAY,EAAEzC,IAAI,CAAC0C,GAAL,CAAS/F,aAAa,GAAG8F,CAAzB,IAA8B,CAZ9C;AAaE,MAAA,MAAM,EAAE;AAAErD,QAAAA,GAAG,EAAES,KAAK,CAACT;AAAb,OAbV;AAcE,MAAA,KAAK,EAAE,CACL;AACEtG,QAAAA,MAAM,EAAEwC,YAAY,GAAG,CADzB;AAEEqH,QAAAA,WAAW,EAAEzJ,MAFf;AAGEmG,QAAAA,KAAK,EAAErG,WAAW,GAAG;AAHvB,OADK,EAMLyB,KANK,CAdT;AAsBE,MAAA,UAAU,EAAE0C,UAtBd;AAuBE,MAAA,UAAU,EAAEC,UAvBd;AAwBE,MAAA,QAAQ,EAAEgE,QAxBZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MADF,GA4BE,gCAAC,0CAAD;AACE,MAAA,kBAAkB,EAAE,YADtB;AAEE,MAAA,KAAK,EAAEqB,CAFT;AAGE,MAAA,GAAG,EAAK5C,KAAK,CAACT,GAAX,SAAkBqD,CAHvB;AAIE,MAAA,WAAW,EAAEpF,WAJf;AAKE,MAAA,KAAK,EAAEwC,KALT;AAME,MAAA,QAAQ,EAAElD,aAAa,GAAG8F,CAN5B;AAOE,MAAA,KAAK,EAAEnF,KAPT;AAQE,MAAA,YAAY,EAAEhC,YARhB;AASE,MAAA,QAAQ,EAAEqB,aAAa,KAAK8F,CAT9B;AAUE,MAAA,YAAY,EAAEzC,IAAI,CAAC0C,GAAL,CAAS/F,aAAa,GAAG8F,CAAzB,IAA8B,CAV9C;AAWE,MAAA,KAAK,EAAE,CACL;AACE3J,QAAAA,MAAM,EAAEwC,YAAY,GAAG,CADzB;AAEEqH,QAAAA,WAAW,EAAEzJ,MAFf;AAGEmG,QAAAA,KAAK,EAAErG,WAAW,GAAG;AAHvB,OADK,EAMLyB,KANK,CAXT;AAmBE,MAAA,UAAU,EAAE0C,UAnBd;AAoBE,MAAA,UAAU,EAAEC,UApBd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA7BQ;AAAA,GAAX,CAfH,CADF,CARF,CADF,CALF,CADF,CATF,CADF,CAPF,CANF,EAoHE,gCAAC,sCAAD;AACE,IAAA,OAAO,EAAEoD,mBADX;AAEE,IAAA,KAAK,EAAEhD,MAAM,CAACb,aAAD,CAFf;AAGE,IAAA,OAAO,EAAEG;AAHX,KAIMtD,4BAJN,oBAIMA,4BAA4B,CAAEoJ,MAJpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KApHF,EA0HE,gCAAC,sCAAD;AACE,IAAA,kBAAkB,EAAE,sBADtB;AAEE,IAAA,QAAQ,EAAE3I,QAFZ;AAGE,IAAA,WAAW,EAAE2H,eAHf;AAIE,IAAA,cAAc,EAAEM,cAJlB;AAKE,IAAA,OAAO,EAAE1B,mBALX;AAME,IAAA,YAAY,EAAEU,YANhB;AAOE,IAAA,MAAM,EAAErH,MAPV;AAQE,IAAA,KAAK,EAAE2D,MAAM,CAACb,aAAD,CARf;AASE,IAAA,WAAW,EAAE6C,WATf;AAUE,IAAA,QAAQ,EAAEzF,QAVZ;AAWE,IAAA,aAAa,EAAE4C,aAXjB;AAYE,IAAA,OAAO,EAAEG;AAZX,KAaMtD,4BAbN,oBAaMA,4BAA4B,CAAEqJ,MAbpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA1HF,EA0IE,gCAAC,wCAAD;AACE,IAAA,wBAAwB,EAAE9G,wBAD5B;AAEE,IAAA,aAAa,EAAEgF,aAFjB;AAGE,IAAA,uBAAuB,EAAElF,uBAH3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA1IF,EA+IE,gCAAC,qCAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,6BAAD;AACE,IAAA,aAAa,EAAEE,wBADjB;AAEE,IAAA,oBAAoB,EAAE,IAFxB;AAGE,IAAA,eAAe,EAAE;AAAA,aACf,gCAAC,gCAAD;AACE,QAAA,aAAa,EAAEgF;AADjB,SAEMvH,4BAFN,oBAEMA,4BAA4B,CAAEsJ,UAFpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SADe;AAAA,KAHnB;AASE,IAAA,YAAY,EAAErJ,4BAAF,WAAEA,4BAAF,GAAkC,EAThD;AAUE,IAAA,KAAK,EAAE,CAVT;AAWE,IAAA,QAAQ,EAAE,kBAACoD,KAAD;AAAA,aAAmBf,0BAA0B,CAACe,KAAD,CAA7C;AAAA,KAXZ;AAYE,IAAA,GAAG,EAAEjB,mBAZP;AAaE,IAAA,UAAU,EAAElC,0BAA0B,IAAI+B,UAb5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAeE,gCAAC,oBAAD;AACE,IAAA,aAAa,EAAEsF,aADjB;AAEE,IAAA,+BAA+B,EAAEpH,+BAFnC;AAGE,IAAA,MAAM,EAAEe,UAHV;AAIE,IAAA,QAAQ,EAAEM;AAJZ,KAKMxB,4BALN,oBAKMA,4BAA4B,CAAEuJ,IALpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAfF,CADF,CA/IF,CADF;AA2KD,CAthBM;;;;AA2hBA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAAC9G,KAAD,EAAgB+G,UAAhB,EAAoCC,UAApC,EAA2D;AAC9E;;AACA,SAAOlD,IAAI,CAACmD,GAAL,CAASnD,IAAI,CAACoD,GAAL,CAASH,UAAT,EAAqB/G,KAArB,CAAT,EAAsCgH,UAAtC,CAAP;AACD,CAHM;;;;AAKP,IAAMX,MAAM,GAAGH,wBAAWiB,MAAX,CAAkB;AAC/Bb,EAAAA,iBAAiB,EAAE;AACjBc,IAAAA,UAAU,EAAE,QADK;AAEjBC,IAAAA,aAAa,EAAE;AAFE;AADY,CAAlB,CAAf;;AAuBAlK,YAAY,CAACmK,WAAb,GAA2B,4BAA3B","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Dimensions,\n Image,\n ImageStyle,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\n\nimport {\n PanGestureHandler,\n PinchGestureHandler,\n TapGestureHandler,\n} from 'react-native-gesture-handler';\n\nimport Animated, {\n Easing,\n runOnJS,\n runOnUI,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { BottomSheetModal, BottomSheetModalProvider } from '@gorhom/bottom-sheet';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { AnimatedGalleryImage } from './components/AnimatedGalleryImage';\nimport { AnimatedGalleryVideo } from './components/AnimatedGalleryVideo';\nimport {\n ImageGalleryFooter,\n ImageGalleryFooterCustomComponentProps,\n} from './components/ImageGalleryFooter';\nimport {\n ImageGalleryHeader,\n ImageGalleryHeaderCustomComponentProps,\n} from './components/ImageGalleryHeader';\nimport { ImageGalleryOverlay } from './components/ImageGalleryOverlay';\nimport { ImageGalleryGridImageComponents, ImageGrid } from './components/ImageGrid';\nimport {\n ImageGalleryGridHandleCustomComponentProps,\n ImageGridHandle,\n} from './components/ImageGridHandle';\n\nimport { useImageGalleryGestures } from './hooks/useImageGalleryGestures';\n\nimport { useImageGalleryContext } from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n OverlayProviderProps,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport {\n isVideoPackageAvailable,\n VideoPayloadData,\n VideoProgressData,\n VideoType,\n} from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { vh, vw } from '../../utils/utils';\nimport { getGiphyMimeType } from '../Attachment/utils/getGiphyMimeType';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\nconst measuredScreenHeight = vh(100);\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\nconst MARGIN = 32;\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nexport type ImageGalleryCustomComponents<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Override props for following UI components, which are part of [image gallery](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#gallery-components).\n *\n * - [ImageGalleryFooter](#ImageGalleryFooter)\n *\n * - [ImageGrid](#ImageGrid)\n *\n * - [ImageGridHandle](#ImageGridHandle)\n *\n * - [ImageGalleryHeader](#ImageGalleryHeader)\n *\n * e.g.,\n *\n * ```js\n * {\n * footer: {\n * ShareIcon: CustomShareIconComponent\n * },\n * grid: {\n * avatarComponent: CustomAvatarComponent\n * },\n * gridHandle: {\n * centerComponent: CustomCenterComponent\n * },\n * header: {\n * CloseIcon: CustomCloseButtonComponent\n * },\n * }\n * ```\n * @overrideType object\n */\n imageGalleryCustomComponents?: {\n footer?: ImageGalleryFooterCustomComponentProps<StreamChatGenerics>;\n grid?: ImageGalleryGridImageComponents<StreamChatGenerics>;\n gridHandle?: ImageGalleryGridHandleCustomComponentProps;\n header?: ImageGalleryHeaderCustomComponentProps<StreamChatGenerics>;\n };\n};\n\ntype Props<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n ImageGalleryCustomComponents<StreamChatGenerics> & {\n overlayOpacity: Animated.SharedValue<number>;\n } & Pick<\n OverlayProviderProps<StreamChatGenerics>,\n | 'giphyVersion'\n | 'imageGalleryGridSnapPoints'\n | 'imageGalleryGridHandleHeight'\n | 'numberOfImageGalleryGridColumns'\n >;\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\n giphyVersion = 'fixed_height',\n imageGalleryCustomComponents,\n imageGalleryGridHandleHeight,\n imageGalleryGridSnapPoints,\n numberOfImageGalleryGridColumns,\n overlayOpacity,\n } = props;\n const [paused, setPaused] = useState<boolean>(false);\n const [progress, setProgress] = useState<number>(0);\n const [duration, setDuration] = useState<number>(0);\n const {\n theme: {\n colors: { white_snow },\n imageGallery: { backgroundColor, pager, slide },\n },\n } = useTheme();\n const [gridPhotos, setGridPhotos] = useState<Photo<StreamChatGenerics>[]>([]);\n const { overlay, translucentStatusBar } = useOverlayContext();\n const { image, images, setImage } = useImageGalleryContext<StreamChatGenerics>();\n\n /**\n * Height constants\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - measuredScreenHeight - statusBarHeight;\n const androidScreenHeightAdjustment = translucentStatusBar\n ? bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? 0\n : statusBarHeight\n : bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? -statusBarHeight\n : 0;\n const screenHeight = isAndroid\n ? Dimensions.get('window').height + androidScreenHeightAdjustment\n : vh(100);\n const halfScreenHeight = screenHeight / 2;\n const quarterScreenHeight = screenHeight / 4;\n const snapPoints = React.useMemo(\n () => [(screenHeight * 3) / 4, screenHeight - (imageGalleryGridHandleHeight ?? 40)],\n [],\n );\n\n /**\n * BottomSheetModal ref\n */\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n\n /**\n * BottomSheetModal state\n */\n const [currentBottomSheetIndex, setCurrentBottomSheetIndex] = useState(0);\n const animatedBottomSheetIndex = useSharedValue(0);\n\n /**\n * Fade animation for screen, it is always rendered with pointerEvents\n * set to none for fast opening\n */\n const screenTranslateY = useSharedValue(screenHeight);\n const showScreen = () => {\n 'worklet';\n screenTranslateY.value = withTiming(0, {\n duration: 250,\n easing: Easing.out(Easing.ease),\n });\n };\n\n /**\n * Run the fade animation on visible change\n */\n useEffect(() => {\n Keyboard.dismiss();\n showScreen();\n }, []);\n\n /**\n * Image height from URL or default to full screen height\n */\n const [currentImageHeight, setCurrentImageHeight] = useState<number>(screenHeight);\n\n /**\n * JS and UI index values, the JS follows the UI but is needed\n * for rendering the virtualized image list\n */\n const [selectedIndex, setSelectedIndex] = useState(0);\n const index = useSharedValue(0);\n\n /**\n * Header visible value for animating in out\n */\n const headerFooterVisible = useSharedValue(1);\n\n /**\n * Gesture handler refs\n */\n const doubleTapRef = useRef<TapGestureHandler>(null);\n const panRef = useRef<PanGestureHandler>(null);\n const pinchRef = useRef<PinchGestureHandler>(null);\n const singleTapRef = useRef<TapGestureHandler>(null);\n\n /**\n * Shared values for movement\n */\n const translateX = useSharedValue(0);\n const translateY = useSharedValue(0);\n const offsetScale = useSharedValue(1);\n const scale = useSharedValue(1);\n const translationX = useSharedValue(0);\n\n /**\n * Photos array created from all currently available\n * photo attachments\n */\n\n const photos = images.reduce((acc: Photo<StreamChatGenerics>[], cur) => {\n const attachmentImages =\n cur.attachments?.filter(\n (attachment) =>\n (attachment.type === 'giphy' &&\n (attachment.giphy?.[giphyVersion]?.url ||\n attachment.thumb_url ||\n attachment.image_url)) ||\n (attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url &&\n getUrlOfImageAttachment(attachment)) ||\n (isVideoPackageAvailable() && attachment.type === 'video'),\n ) || [];\n\n const attachmentPhotos = attachmentImages.map((a) => {\n const imageUrl = getUrlOfImageAttachment(a) as string;\n const giphyURL = a.giphy?.[giphyVersion]?.url || a.thumb_url || a.image_url;\n\n return {\n channelId: cur.cid,\n created_at: cur.created_at,\n id: `photoId-${cur.id}-${imageUrl}`,\n messageId: cur.id,\n mime_type: a.type === 'giphy' ? getGiphyMimeType(giphyURL ?? '') : a.mime_type,\n original_height: a.original_height,\n original_width: a.original_width,\n type: a.type,\n uri:\n a.type === 'giphy'\n ? giphyURL\n : getResizedImageUrl({\n height: screenHeight,\n url: imageUrl,\n width: screenWidth,\n }),\n user: cur.user,\n user_id: cur.user_id,\n };\n });\n\n return [...acc, ...attachmentPhotos] as Photo<StreamChatGenerics>[];\n }, []);\n\n /**\n * Photos length needs to be kept as a const here so if the length\n * changes it causes the pan gesture handler function to refresh. This\n * does not work if the calculation for the length of the array is left\n * inside the gesture handler as it will have an array as a dependency\n */\n const photoLength = photos.length;\n\n /**\n * Set selected photo when changed via pressing in the message list\n */\n useEffect(() => {\n const updatePosition = (newIndex: number) => {\n 'worklet';\n\n if (newIndex > -1) {\n index.value = newIndex;\n translationX.value = -(screenWidth + MARGIN) * newIndex;\n runOnJS(setSelectedIndex)(newIndex);\n }\n };\n\n const newIndex = photos.findIndex(\n (photo) => photo.messageId === image?.messageId && photo.uri === image?.url,\n );\n\n if (photoLength > 1) {\n setPaused(true);\n }\n\n runOnUI(updatePosition)(newIndex);\n }, [image, photoLength]);\n\n /**\n * Image heights are not provided and therefore need to be calculated.\n * We start by allowing the image to be the full height then reduce it\n * to the proper scaled height based on the width being restricted to the\n * screen width when the dimensions are received.\n */\n const uriForCurrentImage = photos[selectedIndex]?.uri;\n useEffect(() => {\n setCurrentImageHeight(screenHeight);\n const photo = photos[index.value];\n const height = photo?.original_height;\n const width = photo?.original_width;\n\n if (height && width) {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n } else if (photo?.uri) {\n if (photo.type === 'image') {\n Image.getSize(photo.uri, (width, height) => {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n });\n }\n }\n }, [uriForCurrentImage]);\n\n const { onDoubleTap, onPan, onPinch, onSingleTap } = useImageGalleryGestures({\n currentImageHeight,\n halfScreenHeight,\n halfScreenWidth,\n headerFooterVisible,\n offsetScale,\n overlayOpacity,\n photoLength,\n scale,\n screenHeight,\n screenWidth,\n setSelectedIndex,\n translateX,\n translateY,\n translationX,\n });\n\n /**\n * If the header is visible we scale down the opacity of it as the\n * image is swiped downward\n */\n const headerFooterOpacity = useDerivedValue(\n () =>\n currentImageHeight * scale.value < screenHeight && translateY.value > 0\n ? 1 - translateY.value / quarterScreenHeight\n : currentImageHeight * scale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? 1 -\n (translateY.value - ((currentImageHeight / 2) * scale.value - halfScreenHeight)) /\n quarterScreenHeight\n : 1,\n [currentImageHeight],\n );\n\n /**\n * This transition and scaleX reverse lets use scroll left\n */\n const pagerStyle = useAnimatedStyle<ImageStyle>(\n () => ({\n transform: [\n { scaleX: -1 },\n {\n translateX: translationX.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Simple background color animation on Y movement\n */\n const containerBackground = useAnimatedStyle<ViewStyle>(\n () => ({\n backgroundColor: backgroundColor || white_snow,\n opacity: headerFooterOpacity.value,\n }),\n [headerFooterOpacity],\n );\n\n /**\n * Show screen style as component is always rendered we hide it\n * down and up and set opacity to 0 for good measure\n */\n const showScreenStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n transform: [\n {\n translateY: screenTranslateY.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Functions toclose BottomSheetModal with image grid\n */\n const closeGridView = () => {\n if (bottomSheetModalRef.current?.close) {\n bottomSheetModalRef.current.close();\n setGridPhotos([]);\n }\n };\n\n /**\n * Function to open BottomSheetModal with image grid\n */\n const openGridView = () => {\n if (bottomSheetModalRef.current?.present) {\n bottomSheetModalRef.current.present();\n setGridPhotos(photos);\n }\n };\n\n const videoRef = useRef<VideoType>(null);\n\n const handleEnd = () => {\n setPaused(true);\n setProgress(1);\n };\n\n const handleLoad = (payload: VideoPayloadData) => {\n if (payload.duration) setDuration(payload.duration);\n };\n\n const handleProgress = (data: VideoProgressData) => {\n if (data.currentTime && data.seekableDuration) {\n setProgress(data.currentTime / data.seekableDuration);\n }\n };\n\n const handlePlayPause = (status?: boolean) => {\n if (status === undefined) {\n // React Native Video for RN CLI has seek as an API to move to a particular location in the video\n if (progress === 1 && videoRef.current && videoRef.current.seek) {\n videoRef.current.seek(0);\n }\n // Expo AV for Expo has replayAsync as an API to move to a starting of the video\n if (progress === 1 && videoRef.current && videoRef.current.replayAsync) {\n videoRef.current.replayAsync();\n }\n\n setPaused((state) => !state);\n } else {\n setPaused(status);\n }\n };\n\n const onProgressDrag = (progress: number) => {\n // React Native Video for RN CLI has seek as an API to move to a particular location in the video\n if (videoRef.current && videoRef.current.seek) {\n videoRef.current.seek(progress);\n }\n\n // Expo AV for Expo has setPositionAsync as an API to move to a particular location of the video\n if (videoRef.current && videoRef.current.setPositionAsync) {\n videoRef.current.setPositionAsync(progress * 1000);\n }\n };\n\n return (\n <Animated.View\n accessibilityLabel='Image Gallery'\n pointerEvents={'auto'}\n style={[StyleSheet.absoluteFillObject, showScreenStyle]}\n >\n <Animated.View style={[StyleSheet.absoluteFillObject, containerBackground]} />\n <TapGestureHandler\n minPointers={1}\n numberOfTaps={1}\n onGestureEvent={onSingleTap}\n ref={singleTapRef}\n waitFor={[panRef, pinchRef, doubleTapRef]}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <TapGestureHandler\n maxDeltaX={8}\n maxDeltaY={8}\n maxDist={8}\n minPointers={1}\n numberOfTaps={2}\n onGestureEvent={onDoubleTap}\n ref={doubleTapRef}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <PinchGestureHandler\n onGestureEvent={onPinch}\n ref={pinchRef}\n simultaneousHandlers={[panRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <PanGestureHandler\n enabled={overlay === 'gallery'}\n maxPointers={isAndroid ? undefined : 1}\n minDist={10}\n onGestureEvent={onPan}\n ref={panRef}\n simultaneousHandlers={[pinchRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <Animated.View\n style={[\n styles.animatedContainer,\n pagerStyle,\n pager,\n {\n transform: [\n { scaleX: -1 }, // Also only here for opening, wrong direction when not included\n {\n translateX: translationX.value, // Only here for opening, wrong index when this is not included\n },\n ],\n },\n ]}\n >\n {photos.map((photo, i) =>\n photo.type === 'video' ? (\n <AnimatedGalleryVideo\n handleEnd={handleEnd}\n handleLoad={handleLoad}\n handleProgress={handleProgress}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n paused={paused}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n source={{ uri: photo.uri }}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n videoRef={videoRef}\n />\n ) : (\n <AnimatedGalleryImage\n accessibilityLabel={'Image Item'}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n photo={photo}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n />\n ),\n )}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </PinchGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n <ImageGalleryHeader<StreamChatGenerics>\n opacity={headerFooterOpacity}\n photo={photos[selectedIndex]}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.header}\n />\n <ImageGalleryFooter<StreamChatGenerics>\n accessibilityLabel={'Image Gallery Footer'}\n duration={duration}\n onPlayPause={handlePlayPause}\n onProgressDrag={onProgressDrag}\n opacity={headerFooterOpacity}\n openGridView={openGridView}\n paused={paused}\n photo={photos[selectedIndex]}\n photoLength={photoLength}\n progress={progress}\n selectedIndex={selectedIndex}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.footer}\n />\n\n <ImageGalleryOverlay\n animatedBottomSheetIndex={animatedBottomSheetIndex}\n closeGridView={closeGridView}\n currentBottomSheetIndex={currentBottomSheetIndex}\n />\n <BottomSheetModalProvider>\n <BottomSheetModal\n animatedIndex={animatedBottomSheetIndex}\n enablePanDownToClose={true}\n handleComponent={() => (\n <ImageGridHandle\n closeGridView={closeGridView}\n {...imageGalleryCustomComponents?.gridHandle}\n />\n )}\n handleHeight={imageGalleryGridHandleHeight ?? 40}\n index={0}\n onChange={(index: number) => setCurrentBottomSheetIndex(index)}\n ref={bottomSheetModalRef}\n snapPoints={imageGalleryGridSnapPoints || snapPoints}\n >\n <ImageGrid\n closeGridView={closeGridView}\n numberOfImageGalleryGridColumns={numberOfImageGalleryGridColumns}\n photos={gridPhotos}\n setImage={setImage}\n {...imageGalleryCustomComponents?.grid}\n />\n </BottomSheetModal>\n </BottomSheetModalProvider>\n </Animated.View>\n );\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n\nconst styles = StyleSheet.create({\n animatedContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n\nexport type Photo<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n id: string;\n uri: string;\n channelId?: string;\n created_at?: string | Date;\n messageId?: string;\n mime_type?: string;\n original_height?: number;\n original_width?: number;\n type?: string;\n user?: UserResponse<StreamChatGenerics> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"]}
|
|
@@ -95,9 +95,11 @@ var MessageTextContainerWithContext = function MessageTextContainerWithContext(p
|
|
|
95
95
|
var areEqual = function areEqual(prevProps, nextProps) {
|
|
96
96
|
var _prevMessage$mentione, _nextMessage$mentione, _nextMessage$mentione2, _prevMessage$mentione2, _nextMessage$mentione3;
|
|
97
97
|
|
|
98
|
-
var
|
|
98
|
+
var prevMarkdownStyles = prevProps.markdownStyles,
|
|
99
|
+
prevMessage = prevProps.message,
|
|
99
100
|
prevOnlyEmojis = prevProps.onlyEmojis;
|
|
100
|
-
var
|
|
101
|
+
var nextMarkdownStyles = nextProps.markdownStyles,
|
|
102
|
+
nextMessage = nextProps.message,
|
|
101
103
|
nextOnlyEmojis = nextProps.onlyEmojis;
|
|
102
104
|
var messageTextEqual = prevMessage.text === nextMessage.text;
|
|
103
105
|
if (!messageTextEqual) return false;
|
|
@@ -105,6 +107,8 @@ var areEqual = function areEqual(prevProps, nextProps) {
|
|
|
105
107
|
if (!onlyEmojisEqual) return false;
|
|
106
108
|
var mentionedUsersEqual = ((_prevMessage$mentione = prevMessage.mentioned_users) == null ? void 0 : _prevMessage$mentione.length) === ((_nextMessage$mentione = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione.length) && (((_nextMessage$mentione2 = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione2.length) === 0 || ((_prevMessage$mentione2 = prevMessage.mentioned_users) == null ? void 0 : _prevMessage$mentione2.length) && ((_nextMessage$mentione3 = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione3.length) && prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name);
|
|
107
109
|
if (!mentionedUsersEqual) return false;
|
|
110
|
+
var markdownStylesEqual = prevMarkdownStyles === nextMarkdownStyles || Object.keys(prevMarkdownStyles || {}).length === 0 && Object.keys(nextMarkdownStyles || {}).length === 0 || JSON.stringify(prevMarkdownStyles) === JSON.stringify(nextMarkdownStyles);
|
|
111
|
+
if (!markdownStylesEqual) return false;
|
|
108
112
|
return true;
|
|
109
113
|
};
|
|
110
114
|
|
|
@@ -136,7 +140,7 @@ var MessageTextContainer = function MessageTextContainer(props) {
|
|
|
136
140
|
__self: _this,
|
|
137
141
|
__source: {
|
|
138
142
|
fileName: _jsxFileName,
|
|
139
|
-
lineNumber:
|
|
143
|
+
lineNumber: 180,
|
|
140
144
|
columnNumber: 5
|
|
141
145
|
}
|
|
142
146
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MessageTextContainer.tsx"],"names":["styles","StyleSheet","create","textContainer","maxWidth","paddingHorizontal","MessageTextContainerWithContext","props","theme","markdownRules","markdownStyles","markdownStylesProp","message","messageOverlay","MessageText","messageTextNumberOfLines","onLongPress","onlyEmojis","onPress","preventPress","stylesProp","colors","messageSimple","content","markdown","onlyEmojiMarkdown","translatedMessage","text","renderText","areEqual","prevProps","nextProps","prevMessage","prevOnlyEmojis","nextMessage","nextOnlyEmojis","messageTextEqual","onlyEmojisEqual","mentionedUsersEqual","mentioned_users","length","name","MemoizedMessageTextContainer","React","memo","MessageTextContainer","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';\n\nimport { renderText, RenderTextParams } from './utils/renderText';\n\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\n\nimport type { MarkdownStyle, Theme } from '../../../contexts/themeContext/utils/theme';\nimport { useTranslatedMessage } from '../../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\n\nconst styles = StyleSheet.create({\n textContainer: { maxWidth: 250, paddingHorizontal: 16 },\n});\n\nexport type MessageTextProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = MessageTextContainerProps<StreamChatGenerics> & {\n renderText: (params: RenderTextParams<StreamChatGenerics>) => JSX.Element | null;\n theme: { theme: Theme };\n};\n\nexport type MessageTextContainerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageContextValue<StreamChatGenerics>,\n 'message' | 'onLongPress' | 'onlyEmojis' | 'onPress' | 'preventPress'\n> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'markdownRules' | 'MessageText'> & {\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n styles?: Partial<{\n textContainer: StyleProp<ViewStyle>;\n }>;\n };\n\nconst MessageTextContainerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const theme = useTheme();\n\n const {\n markdownRules,\n markdownStyles: markdownStylesProp = {},\n message,\n messageOverlay,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n styles: stylesProp = {},\n } = props;\n\n const {\n theme: {\n colors,\n messageSimple: {\n content: {\n markdown,\n textContainer: { onlyEmojiMarkdown, ...textContainer },\n },\n },\n },\n } = theme;\n\n const translatedMessage = useTranslatedMessage<StreamChatGenerics>(\n message,\n ) as MessageType<StreamChatGenerics>;\n\n if (!message.text) return null;\n\n const markdownStyles = { ...markdown, ...markdownStylesProp };\n\n return (\n <View\n style={[styles.textContainer, textContainer, stylesProp.textContainer]}\n testID='message-text-container'\n >\n {MessageText ? (\n <MessageText {...props} renderText={renderText} theme={theme} />\n ) : (\n renderText<StreamChatGenerics>({\n colors,\n markdownRules,\n markdownStyles: {\n ...markdownStyles,\n ...(onlyEmojis ? onlyEmojiMarkdown : {}),\n },\n message: translatedMessage,\n messageOverlay,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n })\n )}\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n nextProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const { message: prevMessage, onlyEmojis: prevOnlyEmojis } = prevProps;\n const { message: nextMessage, onlyEmojis: nextOnlyEmojis } = nextProps;\n\n const messageTextEqual = prevMessage.text === nextMessage.text;\n if (!messageTextEqual) return false;\n\n const onlyEmojisEqual = prevOnlyEmojis === nextOnlyEmojis;\n if (!onlyEmojisEqual) return false;\n\n const mentionedUsersEqual =\n prevMessage.mentioned_users?.length === nextMessage.mentioned_users?.length &&\n (nextMessage.mentioned_users?.length === 0 ||\n (prevMessage.mentioned_users?.length &&\n nextMessage.mentioned_users?.length &&\n prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name));\n if (!mentionedUsersEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageTextContainer = React.memo(\n MessageTextContainerWithContext,\n areEqual,\n) as typeof MessageTextContainerWithContext;\n\nexport type MessageTextContainerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageTextContainerPropsWithContext<StreamChatGenerics>>;\n\nexport const MessageTextContainer = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerProps<StreamChatGenerics>,\n) => {\n const { message, onLongPress, onlyEmojis, onPress, preventPress } =\n useMessageContext<StreamChatGenerics>();\n const { markdownRules, MessageText } = useMessagesContext<StreamChatGenerics>();\n const { messageTextNumberOfLines } = props;\n\n return (\n <MemoizedMessageTextContainer\n {...{\n markdownRules,\n message,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n }}\n {...props}\n />\n );\n};\n\nMessageTextContainer.displayName = 'MessageTextContainer{messageSimple{content}}';\n"]}
|
|
1
|
+
{"version":3,"sources":["MessageTextContainer.tsx"],"names":["styles","StyleSheet","create","textContainer","maxWidth","paddingHorizontal","MessageTextContainerWithContext","props","theme","markdownRules","markdownStyles","markdownStylesProp","message","messageOverlay","MessageText","messageTextNumberOfLines","onLongPress","onlyEmojis","onPress","preventPress","stylesProp","colors","messageSimple","content","markdown","onlyEmojiMarkdown","translatedMessage","text","renderText","areEqual","prevProps","nextProps","prevMarkdownStyles","prevMessage","prevOnlyEmojis","nextMarkdownStyles","nextMessage","nextOnlyEmojis","messageTextEqual","onlyEmojisEqual","mentionedUsersEqual","mentioned_users","length","name","markdownStylesEqual","Object","keys","JSON","stringify","MemoizedMessageTextContainer","React","memo","MessageTextContainer","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';\n\nimport { renderText, RenderTextParams } from './utils/renderText';\n\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\n\nimport type { MarkdownStyle, Theme } from '../../../contexts/themeContext/utils/theme';\nimport { useTranslatedMessage } from '../../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\n\nconst styles = StyleSheet.create({\n textContainer: { maxWidth: 250, paddingHorizontal: 16 },\n});\n\nexport type MessageTextProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = MessageTextContainerProps<StreamChatGenerics> & {\n renderText: (params: RenderTextParams<StreamChatGenerics>) => JSX.Element | null;\n theme: { theme: Theme };\n};\n\nexport type MessageTextContainerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageContextValue<StreamChatGenerics>,\n 'message' | 'onLongPress' | 'onlyEmojis' | 'onPress' | 'preventPress'\n> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'markdownRules' | 'MessageText'> & {\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n styles?: Partial<{\n textContainer: StyleProp<ViewStyle>;\n }>;\n };\n\nconst MessageTextContainerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const theme = useTheme();\n\n const {\n markdownRules,\n markdownStyles: markdownStylesProp = {},\n message,\n messageOverlay,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n styles: stylesProp = {},\n } = props;\n\n const {\n theme: {\n colors,\n messageSimple: {\n content: {\n markdown,\n textContainer: { onlyEmojiMarkdown, ...textContainer },\n },\n },\n },\n } = theme;\n\n const translatedMessage = useTranslatedMessage<StreamChatGenerics>(\n message,\n ) as MessageType<StreamChatGenerics>;\n\n if (!message.text) return null;\n\n const markdownStyles = { ...markdown, ...markdownStylesProp };\n\n return (\n <View\n style={[styles.textContainer, textContainer, stylesProp.textContainer]}\n testID='message-text-container'\n >\n {MessageText ? (\n <MessageText {...props} renderText={renderText} theme={theme} />\n ) : (\n renderText<StreamChatGenerics>({\n colors,\n markdownRules,\n markdownStyles: {\n ...markdownStyles,\n ...(onlyEmojis ? onlyEmojiMarkdown : {}),\n },\n message: translatedMessage,\n messageOverlay,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n })\n )}\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n nextProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n markdownStyles: prevMarkdownStyles,\n message: prevMessage,\n onlyEmojis: prevOnlyEmojis,\n } = prevProps;\n const {\n markdownStyles: nextMarkdownStyles,\n message: nextMessage,\n onlyEmojis: nextOnlyEmojis,\n } = nextProps;\n\n const messageTextEqual = prevMessage.text === nextMessage.text;\n if (!messageTextEqual) return false;\n\n const onlyEmojisEqual = prevOnlyEmojis === nextOnlyEmojis;\n if (!onlyEmojisEqual) return false;\n\n const mentionedUsersEqual =\n prevMessage.mentioned_users?.length === nextMessage.mentioned_users?.length &&\n (nextMessage.mentioned_users?.length === 0 ||\n (prevMessage.mentioned_users?.length &&\n nextMessage.mentioned_users?.length &&\n prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name));\n if (!mentionedUsersEqual) return false;\n\n // stringify could be an expensive operation, so lets rule out the obvious\n // possibilities first such as different object reference or empty objects etc.\n // Also keeping markdown equality check at the last to make sure other less\n // expensive equality checks get executed first and markdown check will be skipped if returned\n // false from previous checks.\n const markdownStylesEqual =\n prevMarkdownStyles === nextMarkdownStyles ||\n (Object.keys(prevMarkdownStyles || {}).length === 0 &&\n Object.keys(nextMarkdownStyles || {}).length === 0) ||\n JSON.stringify(prevMarkdownStyles) === JSON.stringify(nextMarkdownStyles);\n if (!markdownStylesEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageTextContainer = React.memo(\n MessageTextContainerWithContext,\n areEqual,\n) as typeof MessageTextContainerWithContext;\n\nexport type MessageTextContainerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageTextContainerPropsWithContext<StreamChatGenerics>>;\n\nexport const MessageTextContainer = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerProps<StreamChatGenerics>,\n) => {\n const { message, onLongPress, onlyEmojis, onPress, preventPress } =\n useMessageContext<StreamChatGenerics>();\n const { markdownRules, MessageText } = useMessagesContext<StreamChatGenerics>();\n const { messageTextNumberOfLines } = props;\n\n return (\n <MemoizedMessageTextContainer\n {...{\n markdownRules,\n message,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n }}\n {...props}\n />\n );\n};\n\nMessageTextContainer.displayName = 'MessageTextContainer{messageSimple{content}}';\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", {
|
|
2
|
+
value: true
|
|
3
|
+
});
|
|
4
|
+
exports.getGiphyMimeType = getGiphyMimeType;
|
|
5
|
+
|
|
6
|
+
function getGiphyMimeType(giphyUrl) {
|
|
7
|
+
if (giphyUrl.includes('.mp4')) {
|
|
8
|
+
return 'video/mp4';
|
|
9
|
+
} else if (giphyUrl.includes('.webp')) {
|
|
10
|
+
return 'image/webp';
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return 'image/gif';
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=getGiphyMimeType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["getGiphyMimeType.ts"],"names":["getGiphyMimeType","giphyUrl","includes"],"mappings":";;;;;AAKO,SAASA,gBAAT,CAA0BC,QAA1B,EAAoD;AACzD,MAAIA,QAAQ,CAACC,QAAT,CAAkB,MAAlB,CAAJ,EAA+B;AAC7B,WAAO,WAAP;AACD,GAFD,MAEO,IAAID,QAAQ,CAACC,QAAT,CAAkB,OAAlB,CAAJ,EAAgC;AACrC,WAAO,YAAP;AACD;;AACD,SAAO,WAAP;AACD","sourcesContent":["/**\n *\n * @param giphyUrl The giphy attachment url\n * @returns mimeType for the giphy attachment\n */\nexport function getGiphyMimeType(giphyUrl: string): string {\n if (giphyUrl.includes('.mp4')) {\n return 'video/mp4';\n } else if (giphyUrl.includes('.webp')) {\n return 'image/webp';\n }\n return 'image/gif';\n}\n"]}
|
|
@@ -53,6 +53,8 @@ var _getUrlOfImageAttachment = require("../../utils/getUrlOfImageAttachment");
|
|
|
53
53
|
|
|
54
54
|
var _utils = require("../../utils/utils");
|
|
55
55
|
|
|
56
|
+
var _getGiphyMimeType = require("../Attachment/utils/getGiphyMimeType");
|
|
57
|
+
|
|
56
58
|
var _this = this,
|
|
57
59
|
_jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/ImageGallery/ImageGallery.tsx";
|
|
58
60
|
|
|
@@ -208,7 +210,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
208
210
|
created_at: cur.created_at,
|
|
209
211
|
id: "photoId-" + cur.id + "-" + imageUrl,
|
|
210
212
|
messageId: cur.id,
|
|
211
|
-
mime_type: a.type === 'giphy' ? '
|
|
213
|
+
mime_type: a.type === 'giphy' ? (0, _getGiphyMimeType.getGiphyMimeType)(giphyURL != null ? giphyURL : '') : a.mime_type,
|
|
212
214
|
original_height: a.original_height,
|
|
213
215
|
original_width: a.original_width,
|
|
214
216
|
type: a.type,
|
|
@@ -382,7 +384,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
382
384
|
__self: _this,
|
|
383
385
|
__source: {
|
|
384
386
|
fileName: _jsxFileName,
|
|
385
|
-
lineNumber:
|
|
387
|
+
lineNumber: 505,
|
|
386
388
|
columnNumber: 5
|
|
387
389
|
}
|
|
388
390
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -390,7 +392,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
390
392
|
__self: _this,
|
|
391
393
|
__source: {
|
|
392
394
|
fileName: _jsxFileName,
|
|
393
|
-
lineNumber:
|
|
395
|
+
lineNumber: 510,
|
|
394
396
|
columnNumber: 7
|
|
395
397
|
}
|
|
396
398
|
}), _react["default"].createElement(_reactNativeGestureHandler.TapGestureHandler, {
|
|
@@ -402,7 +404,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
402
404
|
__self: _this,
|
|
403
405
|
__source: {
|
|
404
406
|
fileName: _jsxFileName,
|
|
405
|
-
lineNumber:
|
|
407
|
+
lineNumber: 511,
|
|
406
408
|
columnNumber: 7
|
|
407
409
|
}
|
|
408
410
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -410,7 +412,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
410
412
|
__self: _this,
|
|
411
413
|
__source: {
|
|
412
414
|
fileName: _jsxFileName,
|
|
413
|
-
lineNumber:
|
|
415
|
+
lineNumber: 518,
|
|
414
416
|
columnNumber: 9
|
|
415
417
|
}
|
|
416
418
|
}, _react["default"].createElement(_reactNativeGestureHandler.TapGestureHandler, {
|
|
@@ -424,7 +426,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
424
426
|
__self: _this,
|
|
425
427
|
__source: {
|
|
426
428
|
fileName: _jsxFileName,
|
|
427
|
-
lineNumber:
|
|
429
|
+
lineNumber: 519,
|
|
428
430
|
columnNumber: 11
|
|
429
431
|
}
|
|
430
432
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -432,7 +434,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
432
434
|
__self: _this,
|
|
433
435
|
__source: {
|
|
434
436
|
fileName: _jsxFileName,
|
|
435
|
-
lineNumber:
|
|
437
|
+
lineNumber: 528,
|
|
436
438
|
columnNumber: 13
|
|
437
439
|
}
|
|
438
440
|
}, _react["default"].createElement(_reactNativeGestureHandler.PinchGestureHandler, {
|
|
@@ -442,7 +444,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
442
444
|
__self: _this,
|
|
443
445
|
__source: {
|
|
444
446
|
fileName: _jsxFileName,
|
|
445
|
-
lineNumber:
|
|
447
|
+
lineNumber: 529,
|
|
446
448
|
columnNumber: 15
|
|
447
449
|
}
|
|
448
450
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -450,7 +452,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
450
452
|
__self: _this,
|
|
451
453
|
__source: {
|
|
452
454
|
fileName: _jsxFileName,
|
|
453
|
-
lineNumber:
|
|
455
|
+
lineNumber: 534,
|
|
454
456
|
columnNumber: 17
|
|
455
457
|
}
|
|
456
458
|
}, _react["default"].createElement(_reactNativeGestureHandler.PanGestureHandler, {
|
|
@@ -463,7 +465,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
463
465
|
__self: _this,
|
|
464
466
|
__source: {
|
|
465
467
|
fileName: _jsxFileName,
|
|
466
|
-
lineNumber:
|
|
468
|
+
lineNumber: 535,
|
|
467
469
|
columnNumber: 19
|
|
468
470
|
}
|
|
469
471
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -471,7 +473,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
471
473
|
__self: _this,
|
|
472
474
|
__source: {
|
|
473
475
|
fileName: _jsxFileName,
|
|
474
|
-
lineNumber:
|
|
476
|
+
lineNumber: 543,
|
|
475
477
|
columnNumber: 21
|
|
476
478
|
}
|
|
477
479
|
}, _react["default"].createElement(_reactNativeReanimated["default"].View, {
|
|
@@ -485,7 +487,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
485
487
|
__self: _this,
|
|
486
488
|
__source: {
|
|
487
489
|
fileName: _jsxFileName,
|
|
488
|
-
lineNumber:
|
|
490
|
+
lineNumber: 544,
|
|
489
491
|
columnNumber: 23
|
|
490
492
|
}
|
|
491
493
|
}, photos.map(function (photo, i) {
|
|
@@ -516,7 +518,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
516
518
|
__self: _this,
|
|
517
519
|
__source: {
|
|
518
520
|
fileName: _jsxFileName,
|
|
519
|
-
lineNumber:
|
|
521
|
+
lineNumber: 561,
|
|
520
522
|
columnNumber: 29
|
|
521
523
|
}
|
|
522
524
|
}) : _react["default"].createElement(_AnimatedGalleryImage.AnimatedGalleryImage, {
|
|
@@ -540,7 +542,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
540
542
|
__self: _this,
|
|
541
543
|
__source: {
|
|
542
544
|
fileName: _jsxFileName,
|
|
543
|
-
lineNumber:
|
|
545
|
+
lineNumber: 588,
|
|
544
546
|
columnNumber: 29
|
|
545
547
|
}
|
|
546
548
|
});
|
|
@@ -552,7 +554,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
552
554
|
__self: _this,
|
|
553
555
|
__source: {
|
|
554
556
|
fileName: _jsxFileName,
|
|
555
|
-
lineNumber:
|
|
557
|
+
lineNumber: 621,
|
|
556
558
|
columnNumber: 7
|
|
557
559
|
}
|
|
558
560
|
})), _react["default"].createElement(_ImageGalleryFooter.ImageGalleryFooter, (0, _extends2["default"])({
|
|
@@ -572,7 +574,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
572
574
|
__self: _this,
|
|
573
575
|
__source: {
|
|
574
576
|
fileName: _jsxFileName,
|
|
575
|
-
lineNumber:
|
|
577
|
+
lineNumber: 627,
|
|
576
578
|
columnNumber: 7
|
|
577
579
|
}
|
|
578
580
|
})), _react["default"].createElement(_ImageGalleryOverlay.ImageGalleryOverlay, {
|
|
@@ -582,14 +584,14 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
582
584
|
__self: _this,
|
|
583
585
|
__source: {
|
|
584
586
|
fileName: _jsxFileName,
|
|
585
|
-
lineNumber:
|
|
587
|
+
lineNumber: 643,
|
|
586
588
|
columnNumber: 7
|
|
587
589
|
}
|
|
588
590
|
}), _react["default"].createElement(_bottomSheet.BottomSheetModalProvider, {
|
|
589
591
|
__self: _this,
|
|
590
592
|
__source: {
|
|
591
593
|
fileName: _jsxFileName,
|
|
592
|
-
lineNumber:
|
|
594
|
+
lineNumber: 648,
|
|
593
595
|
columnNumber: 7
|
|
594
596
|
}
|
|
595
597
|
}, _react["default"].createElement(_bottomSheet.BottomSheetModal, {
|
|
@@ -602,7 +604,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
602
604
|
__self: _this,
|
|
603
605
|
__source: {
|
|
604
606
|
fileName: _jsxFileName,
|
|
605
|
-
lineNumber:
|
|
607
|
+
lineNumber: 653,
|
|
606
608
|
columnNumber: 13
|
|
607
609
|
}
|
|
608
610
|
}));
|
|
@@ -617,7 +619,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
617
619
|
__self: _this,
|
|
618
620
|
__source: {
|
|
619
621
|
fileName: _jsxFileName,
|
|
620
|
-
lineNumber:
|
|
622
|
+
lineNumber: 649,
|
|
621
623
|
columnNumber: 9
|
|
622
624
|
}
|
|
623
625
|
}, _react["default"].createElement(_ImageGrid.ImageGrid, (0, _extends2["default"])({
|
|
@@ -629,7 +631,7 @@ var ImageGallery = function ImageGallery(props) {
|
|
|
629
631
|
__self: _this,
|
|
630
632
|
__source: {
|
|
631
633
|
fileName: _jsxFileName,
|
|
632
|
-
lineNumber:
|
|
634
|
+
lineNumber: 664,
|
|
633
635
|
columnNumber: 11
|
|
634
636
|
}
|
|
635
637
|
})))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ImageGallery.tsx"],"names":["isAndroid","Platform","OS","fullScreenHeight","Dimensions","get","height","measuredScreenHeight","screenWidth","halfScreenWidth","MARGIN","HasPinched","IsSwiping","ImageGallery","props","giphyVersion","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","paused","setPaused","progress","setProgress","duration","setDuration","theme","white_snow","colors","imageGallery","backgroundColor","pager","slide","gridPhotos","setGridPhotos","overlay","translucentStatusBar","image","images","setImage","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","snapPoints","React","useMemo","bottomSheetModalRef","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","screenTranslateY","showScreen","value","easing","Easing","out","ease","Keyboard","dismiss","currentImageHeight","setCurrentImageHeight","selectedIndex","setSelectedIndex","index","headerFooterVisible","doubleTapRef","panRef","pinchRef","singleTapRef","translateX","translateY","offsetScale","scale","translationX","photos","reduce","acc","cur","attachmentImages","attachments","filter","attachment","type","giphy","url","thumb_url","image_url","title_link","og_scrape_url","attachmentPhotos","map","a","imageUrl","giphyURL","channelId","cid","created_at","id","messageId","mime_type","original_height","original_width","uri","width","user","user_id","photoLength","length","updatePosition","newIndex","findIndex","photo","uriForCurrentImage","imageHeight","Math","floor","Image","getSize","onDoubleTap","onPan","onPinch","onSingleTap","headerFooterOpacity","pagerStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","current","close","openGridView","present","videoRef","handleEnd","handleLoad","payload","handleProgress","data","currentTime","seekableDuration","handlePlayPause","status","undefined","seek","replayAsync","state","onProgressDrag","setPositionAsync","StyleSheet","absoluteFillObject","absoluteFill","styles","animatedContainer","i","abs","marginRight","header","footer","gridHandle","grid","clamp","lowerBound","upperBound","min","max","create","alignItems","flexDirection","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Dimensions,\n Image,\n ImageStyle,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\n\nimport {\n PanGestureHandler,\n PinchGestureHandler,\n TapGestureHandler,\n} from 'react-native-gesture-handler';\n\nimport Animated, {\n Easing,\n runOnJS,\n runOnUI,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { BottomSheetModal, BottomSheetModalProvider } from '@gorhom/bottom-sheet';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { AnimatedGalleryImage } from './components/AnimatedGalleryImage';\nimport { AnimatedGalleryVideo } from './components/AnimatedGalleryVideo';\nimport {\n ImageGalleryFooter,\n ImageGalleryFooterCustomComponentProps,\n} from './components/ImageGalleryFooter';\nimport {\n ImageGalleryHeader,\n ImageGalleryHeaderCustomComponentProps,\n} from './components/ImageGalleryHeader';\nimport { ImageGalleryOverlay } from './components/ImageGalleryOverlay';\nimport { ImageGalleryGridImageComponents, ImageGrid } from './components/ImageGrid';\nimport {\n ImageGalleryGridHandleCustomComponentProps,\n ImageGridHandle,\n} from './components/ImageGridHandle';\n\nimport { useImageGalleryGestures } from './hooks/useImageGalleryGestures';\n\nimport { useImageGalleryContext } from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n OverlayProviderProps,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport {\n isVideoPackageAvailable,\n VideoPayloadData,\n VideoProgressData,\n VideoType,\n} from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { vh, vw } from '../../utils/utils';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\nconst measuredScreenHeight = vh(100);\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\nconst MARGIN = 32;\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nexport type ImageGalleryCustomComponents<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Override props for following UI components, which are part of [image gallery](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#gallery-components).\n *\n * - [ImageGalleryFooter](#ImageGalleryFooter)\n *\n * - [ImageGrid](#ImageGrid)\n *\n * - [ImageGridHandle](#ImageGridHandle)\n *\n * - [ImageGalleryHeader](#ImageGalleryHeader)\n *\n * e.g.,\n *\n * ```js\n * {\n * footer: {\n * ShareIcon: CustomShareIconComponent\n * },\n * grid: {\n * avatarComponent: CustomAvatarComponent\n * },\n * gridHandle: {\n * centerComponent: CustomCenterComponent\n * },\n * header: {\n * CloseIcon: CustomCloseButtonComponent\n * },\n * }\n * ```\n * @overrideType object\n */\n imageGalleryCustomComponents?: {\n footer?: ImageGalleryFooterCustomComponentProps<StreamChatGenerics>;\n grid?: ImageGalleryGridImageComponents<StreamChatGenerics>;\n gridHandle?: ImageGalleryGridHandleCustomComponentProps;\n header?: ImageGalleryHeaderCustomComponentProps<StreamChatGenerics>;\n };\n};\n\ntype Props<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n ImageGalleryCustomComponents<StreamChatGenerics> & {\n overlayOpacity: Animated.SharedValue<number>;\n } & Pick<\n OverlayProviderProps<StreamChatGenerics>,\n | 'giphyVersion'\n | 'imageGalleryGridSnapPoints'\n | 'imageGalleryGridHandleHeight'\n | 'numberOfImageGalleryGridColumns'\n >;\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\n giphyVersion = 'fixed_height',\n imageGalleryCustomComponents,\n imageGalleryGridHandleHeight,\n imageGalleryGridSnapPoints,\n numberOfImageGalleryGridColumns,\n overlayOpacity,\n } = props;\n const [paused, setPaused] = useState<boolean>(false);\n const [progress, setProgress] = useState<number>(0);\n const [duration, setDuration] = useState<number>(0);\n const {\n theme: {\n colors: { white_snow },\n imageGallery: { backgroundColor, pager, slide },\n },\n } = useTheme();\n const [gridPhotos, setGridPhotos] = useState<Photo<StreamChatGenerics>[]>([]);\n const { overlay, translucentStatusBar } = useOverlayContext();\n const { image, images, setImage } = useImageGalleryContext<StreamChatGenerics>();\n\n /**\n * Height constants\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - measuredScreenHeight - statusBarHeight;\n const androidScreenHeightAdjustment = translucentStatusBar\n ? bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? 0\n : statusBarHeight\n : bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? -statusBarHeight\n : 0;\n const screenHeight = isAndroid\n ? Dimensions.get('window').height + androidScreenHeightAdjustment\n : vh(100);\n const halfScreenHeight = screenHeight / 2;\n const quarterScreenHeight = screenHeight / 4;\n const snapPoints = React.useMemo(\n () => [(screenHeight * 3) / 4, screenHeight - (imageGalleryGridHandleHeight ?? 40)],\n [],\n );\n\n /**\n * BottomSheetModal ref\n */\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n\n /**\n * BottomSheetModal state\n */\n const [currentBottomSheetIndex, setCurrentBottomSheetIndex] = useState(0);\n const animatedBottomSheetIndex = useSharedValue(0);\n\n /**\n * Fade animation for screen, it is always rendered with pointerEvents\n * set to none for fast opening\n */\n const screenTranslateY = useSharedValue(screenHeight);\n const showScreen = () => {\n 'worklet';\n screenTranslateY.value = withTiming(0, {\n duration: 250,\n easing: Easing.out(Easing.ease),\n });\n };\n\n /**\n * Run the fade animation on visible change\n */\n useEffect(() => {\n Keyboard.dismiss();\n showScreen();\n }, []);\n\n /**\n * Image height from URL or default to full screen height\n */\n const [currentImageHeight, setCurrentImageHeight] = useState<number>(screenHeight);\n\n /**\n * JS and UI index values, the JS follows the UI but is needed\n * for rendering the virtualized image list\n */\n const [selectedIndex, setSelectedIndex] = useState(0);\n const index = useSharedValue(0);\n\n /**\n * Header visible value for animating in out\n */\n const headerFooterVisible = useSharedValue(1);\n\n /**\n * Gesture handler refs\n */\n const doubleTapRef = useRef<TapGestureHandler>(null);\n const panRef = useRef<PanGestureHandler>(null);\n const pinchRef = useRef<PinchGestureHandler>(null);\n const singleTapRef = useRef<TapGestureHandler>(null);\n\n /**\n * Shared values for movement\n */\n const translateX = useSharedValue(0);\n const translateY = useSharedValue(0);\n const offsetScale = useSharedValue(1);\n const scale = useSharedValue(1);\n const translationX = useSharedValue(0);\n\n /**\n * Photos array created from all currently available\n * photo attachments\n */\n\n const photos = images.reduce((acc: Photo<StreamChatGenerics>[], cur) => {\n const attachmentImages =\n cur.attachments?.filter(\n (attachment) =>\n (attachment.type === 'giphy' &&\n (attachment.giphy?.[giphyVersion]?.url ||\n attachment.thumb_url ||\n attachment.image_url)) ||\n (attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url &&\n getUrlOfImageAttachment(attachment)) ||\n (isVideoPackageAvailable() && attachment.type === 'video'),\n ) || [];\n\n const attachmentPhotos = attachmentImages.map((a) => {\n const imageUrl = getUrlOfImageAttachment(a) as string;\n const giphyURL = a.giphy?.[giphyVersion]?.url || a.thumb_url || a.image_url;\n\n return {\n channelId: cur.cid,\n created_at: cur.created_at,\n id: `photoId-${cur.id}-${imageUrl}`,\n messageId: cur.id,\n mime_type: a.type === 'giphy' ? 'image/gif' : a.mime_type,\n original_height: a.original_height,\n original_width: a.original_width,\n type: a.type,\n uri:\n a.type === 'giphy'\n ? giphyURL\n : getResizedImageUrl({\n height: screenHeight,\n url: imageUrl,\n width: screenWidth,\n }),\n user: cur.user,\n user_id: cur.user_id,\n };\n });\n\n return [...acc, ...attachmentPhotos] as Photo<StreamChatGenerics>[];\n }, []);\n\n /**\n * Photos length needs to be kept as a const here so if the length\n * changes it causes the pan gesture handler function to refresh. This\n * does not work if the calculation for the length of the array is left\n * inside the gesture handler as it will have an array as a dependency\n */\n const photoLength = photos.length;\n\n /**\n * Set selected photo when changed via pressing in the message list\n */\n useEffect(() => {\n const updatePosition = (newIndex: number) => {\n 'worklet';\n\n if (newIndex > -1) {\n index.value = newIndex;\n translationX.value = -(screenWidth + MARGIN) * newIndex;\n runOnJS(setSelectedIndex)(newIndex);\n }\n };\n\n const newIndex = photos.findIndex(\n (photo) => photo.messageId === image?.messageId && photo.uri === image?.url,\n );\n\n if (photoLength > 1) {\n setPaused(true);\n }\n\n runOnUI(updatePosition)(newIndex);\n }, [image, photoLength]);\n\n /**\n * Image heights are not provided and therefore need to be calculated.\n * We start by allowing the image to be the full height then reduce it\n * to the proper scaled height based on the width being restricted to the\n * screen width when the dimensions are received.\n */\n const uriForCurrentImage = photos[selectedIndex]?.uri;\n useEffect(() => {\n setCurrentImageHeight(screenHeight);\n const photo = photos[index.value];\n const height = photo?.original_height;\n const width = photo?.original_width;\n\n if (height && width) {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n } else if (photo?.uri) {\n if (photo.type === 'image') {\n Image.getSize(photo.uri, (width, height) => {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n });\n }\n }\n }, [uriForCurrentImage]);\n\n const { onDoubleTap, onPan, onPinch, onSingleTap } = useImageGalleryGestures({\n currentImageHeight,\n halfScreenHeight,\n halfScreenWidth,\n headerFooterVisible,\n offsetScale,\n overlayOpacity,\n photoLength,\n scale,\n screenHeight,\n screenWidth,\n setSelectedIndex,\n translateX,\n translateY,\n translationX,\n });\n\n /**\n * If the header is visible we scale down the opacity of it as the\n * image is swiped downward\n */\n const headerFooterOpacity = useDerivedValue(\n () =>\n currentImageHeight * scale.value < screenHeight && translateY.value > 0\n ? 1 - translateY.value / quarterScreenHeight\n : currentImageHeight * scale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? 1 -\n (translateY.value - ((currentImageHeight / 2) * scale.value - halfScreenHeight)) /\n quarterScreenHeight\n : 1,\n [currentImageHeight],\n );\n\n /**\n * This transition and scaleX reverse lets use scroll left\n */\n const pagerStyle = useAnimatedStyle<ImageStyle>(\n () => ({\n transform: [\n { scaleX: -1 },\n {\n translateX: translationX.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Simple background color animation on Y movement\n */\n const containerBackground = useAnimatedStyle<ViewStyle>(\n () => ({\n backgroundColor: backgroundColor || white_snow,\n opacity: headerFooterOpacity.value,\n }),\n [headerFooterOpacity],\n );\n\n /**\n * Show screen style as component is always rendered we hide it\n * down and up and set opacity to 0 for good measure\n */\n const showScreenStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n transform: [\n {\n translateY: screenTranslateY.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Functions toclose BottomSheetModal with image grid\n */\n const closeGridView = () => {\n if (bottomSheetModalRef.current?.close) {\n bottomSheetModalRef.current.close();\n setGridPhotos([]);\n }\n };\n\n /**\n * Function to open BottomSheetModal with image grid\n */\n const openGridView = () => {\n if (bottomSheetModalRef.current?.present) {\n bottomSheetModalRef.current.present();\n setGridPhotos(photos);\n }\n };\n\n const videoRef = useRef<VideoType>(null);\n\n const handleEnd = () => {\n setPaused(true);\n setProgress(1);\n };\n\n const handleLoad = (payload: VideoPayloadData) => {\n if (payload.duration) setDuration(payload.duration);\n };\n\n const handleProgress = (data: VideoProgressData) => {\n if (data.currentTime && data.seekableDuration) {\n setProgress(data.currentTime / data.seekableDuration);\n }\n };\n\n const handlePlayPause = (status?: boolean) => {\n if (status === undefined) {\n // React Native Video for RN CLI has seek as an API to move to a particular location in the video\n if (progress === 1 && videoRef.current && videoRef.current.seek) {\n videoRef.current.seek(0);\n }\n // Expo AV for Expo has replayAsync as an API to move to a starting of the video\n if (progress === 1 && videoRef.current && videoRef.current.replayAsync) {\n videoRef.current.replayAsync();\n }\n\n setPaused((state) => !state);\n } else {\n setPaused(status);\n }\n };\n\n const onProgressDrag = (progress: number) => {\n // React Native Video for RN CLI has seek as an API to move to a particular location in the video\n if (videoRef.current && videoRef.current.seek) {\n videoRef.current.seek(progress);\n }\n\n // Expo AV for Expo has setPositionAsync as an API to move to a particular location of the video\n if (videoRef.current && videoRef.current.setPositionAsync) {\n videoRef.current.setPositionAsync(progress * 1000);\n }\n };\n\n return (\n <Animated.View\n accessibilityLabel='Image Gallery'\n pointerEvents={'auto'}\n style={[StyleSheet.absoluteFillObject, showScreenStyle]}\n >\n <Animated.View style={[StyleSheet.absoluteFillObject, containerBackground]} />\n <TapGestureHandler\n minPointers={1}\n numberOfTaps={1}\n onGestureEvent={onSingleTap}\n ref={singleTapRef}\n waitFor={[panRef, pinchRef, doubleTapRef]}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <TapGestureHandler\n maxDeltaX={8}\n maxDeltaY={8}\n maxDist={8}\n minPointers={1}\n numberOfTaps={2}\n onGestureEvent={onDoubleTap}\n ref={doubleTapRef}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <PinchGestureHandler\n onGestureEvent={onPinch}\n ref={pinchRef}\n simultaneousHandlers={[panRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <PanGestureHandler\n enabled={overlay === 'gallery'}\n maxPointers={isAndroid ? undefined : 1}\n minDist={10}\n onGestureEvent={onPan}\n ref={panRef}\n simultaneousHandlers={[pinchRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <Animated.View\n style={[\n styles.animatedContainer,\n pagerStyle,\n pager,\n {\n transform: [\n { scaleX: -1 }, // Also only here for opening, wrong direction when not included\n {\n translateX: translationX.value, // Only here for opening, wrong index when this is not included\n },\n ],\n },\n ]}\n >\n {photos.map((photo, i) =>\n photo.type === 'video' ? (\n <AnimatedGalleryVideo\n handleEnd={handleEnd}\n handleLoad={handleLoad}\n handleProgress={handleProgress}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n paused={paused}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n source={{ uri: photo.uri }}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n videoRef={videoRef}\n />\n ) : (\n <AnimatedGalleryImage\n accessibilityLabel={'Image Item'}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n photo={photo}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n />\n ),\n )}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </PinchGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n <ImageGalleryHeader<StreamChatGenerics>\n opacity={headerFooterOpacity}\n photo={photos[selectedIndex]}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.header}\n />\n <ImageGalleryFooter<StreamChatGenerics>\n accessibilityLabel={'Image Gallery Footer'}\n duration={duration}\n onPlayPause={handlePlayPause}\n onProgressDrag={onProgressDrag}\n opacity={headerFooterOpacity}\n openGridView={openGridView}\n paused={paused}\n photo={photos[selectedIndex]}\n photoLength={photoLength}\n progress={progress}\n selectedIndex={selectedIndex}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.footer}\n />\n\n <ImageGalleryOverlay\n animatedBottomSheetIndex={animatedBottomSheetIndex}\n closeGridView={closeGridView}\n currentBottomSheetIndex={currentBottomSheetIndex}\n />\n <BottomSheetModalProvider>\n <BottomSheetModal\n animatedIndex={animatedBottomSheetIndex}\n enablePanDownToClose={true}\n handleComponent={() => (\n <ImageGridHandle\n closeGridView={closeGridView}\n {...imageGalleryCustomComponents?.gridHandle}\n />\n )}\n handleHeight={imageGalleryGridHandleHeight ?? 40}\n index={0}\n onChange={(index: number) => setCurrentBottomSheetIndex(index)}\n ref={bottomSheetModalRef}\n snapPoints={imageGalleryGridSnapPoints || snapPoints}\n >\n <ImageGrid\n closeGridView={closeGridView}\n numberOfImageGalleryGridColumns={numberOfImageGalleryGridColumns}\n photos={gridPhotos}\n setImage={setImage}\n {...imageGalleryCustomComponents?.grid}\n />\n </BottomSheetModal>\n </BottomSheetModalProvider>\n </Animated.View>\n );\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n\nconst styles = StyleSheet.create({\n animatedContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n\nexport type Photo<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n id: string;\n uri: string;\n channelId?: string;\n created_at?: string | Date;\n messageId?: string;\n mime_type?: string;\n original_height?: number;\n original_width?: number;\n type?: string;\n user?: UserResponse<StreamChatGenerics> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"]}
|
|
1
|
+
{"version":3,"sources":["ImageGallery.tsx"],"names":["isAndroid","Platform","OS","fullScreenHeight","Dimensions","get","height","measuredScreenHeight","screenWidth","halfScreenWidth","MARGIN","HasPinched","IsSwiping","ImageGallery","props","giphyVersion","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","paused","setPaused","progress","setProgress","duration","setDuration","theme","white_snow","colors","imageGallery","backgroundColor","pager","slide","gridPhotos","setGridPhotos","overlay","translucentStatusBar","image","images","setImage","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","snapPoints","React","useMemo","bottomSheetModalRef","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","screenTranslateY","showScreen","value","easing","Easing","out","ease","Keyboard","dismiss","currentImageHeight","setCurrentImageHeight","selectedIndex","setSelectedIndex","index","headerFooterVisible","doubleTapRef","panRef","pinchRef","singleTapRef","translateX","translateY","offsetScale","scale","translationX","photos","reduce","acc","cur","attachmentImages","attachments","filter","attachment","type","giphy","url","thumb_url","image_url","title_link","og_scrape_url","attachmentPhotos","map","a","imageUrl","giphyURL","channelId","cid","created_at","id","messageId","mime_type","original_height","original_width","uri","width","user","user_id","photoLength","length","updatePosition","newIndex","findIndex","photo","uriForCurrentImage","imageHeight","Math","floor","Image","getSize","onDoubleTap","onPan","onPinch","onSingleTap","headerFooterOpacity","pagerStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","current","close","openGridView","present","videoRef","handleEnd","handleLoad","payload","handleProgress","data","currentTime","seekableDuration","handlePlayPause","status","undefined","seek","replayAsync","state","onProgressDrag","setPositionAsync","StyleSheet","absoluteFillObject","absoluteFill","styles","animatedContainer","i","abs","marginRight","header","footer","gridHandle","grid","clamp","lowerBound","upperBound","min","max","create","alignItems","flexDirection","displayName"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;AAWA;;AAMA;;AAUA;;AAIA;;AACA;;AACA;;AAIA;;AAIA;;AACA;;AACA;;AAKA;;AAEA;;AACA;;AAIA;;AACA;;AAOA;;AACA;;AACA;;AACA;;;;;;;;;AAEA,IAAMA,SAAS,GAAGC,sBAASC,EAAT,KAAgB,SAAlC;;AACA,IAAMC,gBAAgB,GAAGC,wBAAWC,GAAX,CAAe,QAAf,EAAyBC,MAAlD;;AACA,IAAMC,oBAAoB,GAAG,eAAG,GAAH,CAA7B;AACA,IAAMC,WAAW,GAAG,eAAG,GAAH,CAApB;AACA,IAAMC,eAAe,GAAG,eAAG,EAAH,CAAxB;AACA,IAAMC,MAAM,GAAG,EAAf;IAEYC,U;;;WAAAA,U;AAAAA,EAAAA,U,CAAAA,U;AAAAA,EAAAA,U,CAAAA,U;GAAAA,U,0BAAAA,U;;IAKAC,S;;;WAAAA,S;AAAAA,EAAAA,S,CAAAA,S;AAAAA,EAAAA,S,CAAAA,S;AAAAA,EAAAA,S,CAAAA,S;GAAAA,S,yBAAAA,S;;AA2DL,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAG1BC,KAH0B,EAIvB;AAAA;;AACH,4BAOIA,KAPJ,CACEC,YADF;AAAA,MACEA,YADF,oCACiB,cADjB;AAAA,MAEEC,4BAFF,GAOIF,KAPJ,CAEEE,4BAFF;AAAA,MAGEC,4BAHF,GAOIH,KAPJ,CAGEG,4BAHF;AAAA,MAIEC,0BAJF,GAOIJ,KAPJ,CAIEI,0BAJF;AAAA,MAKEC,+BALF,GAOIL,KAPJ,CAKEK,+BALF;AAAA,MAMEC,cANF,GAOIN,KAPJ,CAMEM,cANF;;AAQA,kBAA4B,qBAAkB,KAAlB,CAA5B;AAAA;AAAA,MAAOC,MAAP;AAAA,MAAeC,SAAf;;AACA,mBAAgC,qBAAiB,CAAjB,CAAhC;AAAA;AAAA,MAAOC,QAAP;AAAA,MAAiBC,WAAjB;;AACA,mBAAgC,qBAAiB,CAAjB,CAAhC;AAAA;AAAA,MAAOC,QAAP;AAAA,MAAiBC,WAAjB;;AACA,kBAKI,6BALJ;AAAA,kCACEC,KADF;AAAA,MAEcC,UAFd,mBAEIC,MAFJ,CAEcD,UAFd;AAAA,8CAGIE,YAHJ;AAAA,MAGoBC,eAHpB,yBAGoBA,eAHpB;AAAA,MAGqCC,KAHrC,yBAGqCA,KAHrC;AAAA,MAG4CC,KAH5C,yBAG4CA,KAH5C;;AAMA,mBAAoC,qBAAsC,EAAtC,CAApC;AAAA;AAAA,MAAOC,UAAP;AAAA,MAAmBC,aAAnB;;AACA,2BAA0C,wCAA1C;AAAA,MAAQC,OAAR,sBAAQA,OAAR;AAAA,MAAiBC,oBAAjB,sBAAiBA,oBAAjB;;AACA,8BAAoC,kDAApC;AAAA,MAAQC,KAAR,yBAAQA,KAAR;AAAA,MAAeC,MAAf,yBAAeA,MAAf;AAAA,MAAuBC,QAAvB,yBAAuBA,QAAvB;;AAKA,MAAMC,eAAe,4BAAGC,uBAAUC,aAAb,oCAA8B,CAAnD;AACA,MAAMC,eAAe,GAAGzC,gBAAgB,GAAGI,oBAAnB,GAA0CkC,eAAlE;AACA,MAAMI,6BAA6B,GAAGR,oBAAoB,GACtDO,eAAe,KAAKH,eAApB,IAAuCG,eAAe,GAAG,CAAzD,GACE,CADF,GAEEH,eAHoD,GAItDG,eAAe,KAAKH,eAApB,IAAuCG,eAAe,GAAG,CAAzD,GACA,CAACH,eADD,GAEA,CANJ;AAOA,MAAMK,YAAY,GAAG9C,SAAS,GAC1BI,wBAAWC,GAAX,CAAe,QAAf,EAAyBC,MAAzB,GAAkCuC,6BADR,GAE1B,eAAG,GAAH,CAFJ;AAGA,MAAME,gBAAgB,GAAGD,YAAY,GAAG,CAAxC;AACA,MAAME,mBAAmB,GAAGF,YAAY,GAAG,CAA3C;;AACA,MAAMG,UAAU,GAAGC,kBAAMC,OAAN,CACjB;AAAA,WAAM,CAAEL,YAAY,GAAG,CAAhB,GAAqB,CAAtB,EAAyBA,YAAY,IAAI7B,4BAAJ,WAAIA,4BAAJ,GAAoC,EAApC,CAArC,CAAN;AAAA,GADiB,EAEjB,EAFiB,CAAnB;;AAQA,MAAMmC,mBAAmB,GAAG,mBAAyB,IAAzB,CAA5B;;AAKA,mBAA8D,qBAAS,CAAT,CAA9D;AAAA;AAAA,MAAOC,uBAAP;AAAA,MAAgCC,0BAAhC;;AACA,MAAMC,wBAAwB,GAAG,2CAAe,CAAf,CAAjC;AAMA,MAAMC,gBAAgB,GAAG,2CAAeV,YAAf,CAAzB;;AACA,MAAMW,UAAU,GAAG,SAAbA,UAAa,GAAM;AACvB;;AACAD,IAAAA,gBAAgB,CAACE,KAAjB,GAAyB,uCAAW,CAAX,EAAc;AACrCjC,MAAAA,QAAQ,EAAE,GAD2B;AAErCkC,MAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAF6B,KAAd,CAAzB;AAID,GAND;;AAWA,wBAAU,YAAM;AACdC,0BAASC,OAAT;;AACAP,IAAAA,UAAU;AACX,GAHD,EAGG,EAHH;;AAQA,oBAAoD,qBAAiBX,YAAjB,CAApD;AAAA;AAAA,MAAOmB,kBAAP;AAAA,MAA2BC,qBAA3B;;AAMA,oBAA0C,qBAAS,CAAT,CAA1C;AAAA;AAAA,MAAOC,aAAP;AAAA,MAAsBC,gBAAtB;;AACA,MAAMC,KAAK,GAAG,2CAAe,CAAf,CAAd;AAKA,MAAMC,mBAAmB,GAAG,2CAAe,CAAf,CAA5B;AAKA,MAAMC,YAAY,GAAG,mBAA0B,IAA1B,CAArB;AACA,MAAMC,MAAM,GAAG,mBAA0B,IAA1B,CAAf;AACA,MAAMC,QAAQ,GAAG,mBAA4B,IAA5B,CAAjB;AACA,MAAMC,YAAY,GAAG,mBAA0B,IAA1B,CAArB;AAKA,MAAMC,UAAU,GAAG,2CAAe,CAAf,CAAnB;AACA,MAAMC,UAAU,GAAG,2CAAe,CAAf,CAAnB;AACA,MAAMC,WAAW,GAAG,2CAAe,CAAf,CAApB;AACA,MAAMC,KAAK,GAAG,2CAAe,CAAf,CAAd;AACA,MAAMC,YAAY,GAAG,2CAAe,CAAf,CAArB;AAOA,MAAMC,MAAM,GAAGzC,MAAM,CAAC0C,MAAP,CAAc,UAACC,GAAD,EAAmCC,GAAnC,EAA2C;AAAA;;AACtE,QAAMC,gBAAgB,GACpB,qBAAAD,GAAG,CAACE,WAAJ,sCAAiBC,MAAjB,CACE,UAACC,UAAD;AAAA;;AAAA,aACGA,UAAU,CAACC,IAAX,KAAoB,OAApB,KACE,sBAAAD,UAAU,CAACE,KAAX,gEAAmB1E,YAAnB,4CAAkC2E,GAAlC,KACCH,UAAU,CAACI,SADZ,IAECJ,UAAU,CAACK,SAHd,CAAD,IAICL,UAAU,CAACC,IAAX,KAAoB,OAApB,IACC,CAACD,UAAU,CAACM,UADb,IAEC,CAACN,UAAU,CAACO,aAFb,IAGC,sDAAwBP,UAAxB,CAPF,IAQC,0CAA6BA,UAAU,CAACC,IAAX,KAAoB,OATpD;AAAA,KADF,MAWK,EAZP;AAcA,QAAMO,gBAAgB,GAAGX,gBAAgB,CAACY,GAAjB,CAAqB,UAACC,CAAD,EAAO;AAAA;;AACnD,UAAMC,QAAQ,GAAG,sDAAwBD,CAAxB,CAAjB;AACA,UAAME,QAAQ,GAAG,aAAAF,CAAC,CAACR,KAAF,uDAAU1E,YAAV,4CAAyB2E,GAAzB,KAAgCO,CAAC,CAACN,SAAlC,IAA+CM,CAAC,CAACL,SAAlE;AAEA,aAAO;AACLQ,QAAAA,SAAS,EAAEjB,GAAG,CAACkB,GADV;AAELC,QAAAA,UAAU,EAAEnB,GAAG,CAACmB,UAFX;AAGLC,QAAAA,EAAE,eAAapB,GAAG,CAACoB,EAAjB,SAAuBL,QAHpB;AAILM,QAAAA,SAAS,EAAErB,GAAG,CAACoB,EAJV;AAKLE,QAAAA,SAAS,EAAER,CAAC,CAACT,IAAF,KAAW,OAAX,GAAqB,wCAAiBW,QAAjB,WAAiBA,QAAjB,GAA6B,EAA7B,CAArB,GAAwDF,CAAC,CAACQ,SALhE;AAMLC,QAAAA,eAAe,EAAET,CAAC,CAACS,eANd;AAOLC,QAAAA,cAAc,EAAEV,CAAC,CAACU,cAPb;AAQLnB,QAAAA,IAAI,EAAES,CAAC,CAACT,IARH;AASLoB,QAAAA,GAAG,EACDX,CAAC,CAACT,IAAF,KAAW,OAAX,GACIW,QADJ,GAEI,4CAAmB;AACjB7F,UAAAA,MAAM,EAAEwC,YADS;AAEjB4C,UAAAA,GAAG,EAAEQ,QAFY;AAGjBW,UAAAA,KAAK,EAAErG;AAHU,SAAnB,CAZD;AAiBLsG,QAAAA,IAAI,EAAE3B,GAAG,CAAC2B,IAjBL;AAkBLC,QAAAA,OAAO,EAAE5B,GAAG,CAAC4B;AAlBR,OAAP;AAoBD,KAxBwB,CAAzB;AA0BA,yDAAW7B,GAAX,uCAAmBa,gBAAnB;AACD,GA1Cc,EA0CZ,EA1CY,CAAf;AAkDA,MAAMiB,WAAW,GAAGhC,MAAM,CAACiC,MAA3B;AAKA,wBAAU,YAAM;AACd,QAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACC,QAAD,EAAsB;AAC3C;;AAEA,UAAIA,QAAQ,GAAG,CAAC,CAAhB,EAAmB;AACjB9C,QAAAA,KAAK,CAACX,KAAN,GAAcyD,QAAd;AACApC,QAAAA,YAAY,CAACrB,KAAb,GAAqB,EAAElD,WAAW,GAAGE,MAAhB,IAA0ByG,QAA/C;AACA,4CAAQ/C,gBAAR,EAA0B+C,QAA1B;AACD;AACF,KARD;;AAUA,QAAMA,QAAQ,GAAGnC,MAAM,CAACoC,SAAP,CACf,UAACC,KAAD;AAAA,aAAWA,KAAK,CAACb,SAAN,MAAoBlE,KAApB,oBAAoBA,KAAK,CAAEkE,SAA3B,KAAwCa,KAAK,CAACT,GAAN,MAActE,KAAd,oBAAcA,KAAK,CAAEoD,GAArB,CAAnD;AAAA,KADe,CAAjB;;AAIA,QAAIsB,WAAW,GAAG,CAAlB,EAAqB;AACnB1F,MAAAA,SAAS,CAAC,IAAD,CAAT;AACD;;AAED,wCAAQ4F,cAAR,EAAwBC,QAAxB;AACD,GApBD,EAoBG,CAAC7E,KAAD,EAAQ0E,WAAR,CApBH;AA4BA,MAAMM,kBAAkB,4BAAGtC,MAAM,CAACb,aAAD,CAAT,qBAAG,sBAAuByC,GAAlD;AACA,wBAAU,YAAM;AACd1C,IAAAA,qBAAqB,CAACpB,YAAD,CAArB;AACA,QAAMuE,KAAK,GAAGrC,MAAM,CAACX,KAAK,CAACX,KAAP,CAApB;AACA,QAAMpD,MAAM,GAAG+G,KAAH,oBAAGA,KAAK,CAAEX,eAAtB;AACA,QAAMG,KAAK,GAAGQ,KAAH,oBAAGA,KAAK,CAAEV,cAArB;;AAEA,QAAIrG,MAAM,IAAIuG,KAAd,EAAqB;AACnB,UAAMU,WAAW,GAAGC,IAAI,CAACC,KAAL,CAAWnH,MAAM,IAAIE,WAAW,GAAGqG,KAAlB,CAAjB,CAApB;AACA3C,MAAAA,qBAAqB,CAACqD,WAAW,GAAGzE,YAAd,GAA6BA,YAA7B,GAA4CyE,WAA7C,CAArB;AACD,KAHD,MAGO,IAAIF,KAAJ,YAAIA,KAAK,CAAET,GAAX,EAAgB;AACrB,UAAIS,KAAK,CAAC7B,IAAN,KAAe,OAAnB,EAA4B;AAC1BkC,2BAAMC,OAAN,CAAcN,KAAK,CAACT,GAApB,EAAyB,UAACC,KAAD,EAAQvG,MAAR,EAAmB;AAC1C,cAAMiH,WAAW,GAAGC,IAAI,CAACC,KAAL,CAAWnH,MAAM,IAAIE,WAAW,GAAGqG,KAAlB,CAAjB,CAApB;AACA3C,UAAAA,qBAAqB,CAACqD,WAAW,GAAGzE,YAAd,GAA6BA,YAA7B,GAA4CyE,WAA7C,CAArB;AACD,SAHD;AAID;AACF;AACF,GAjBD,EAiBG,CAACD,kBAAD,CAjBH;;AAmBA,8BAAqD,sDAAwB;AAC3ErD,IAAAA,kBAAkB,EAAlBA,kBAD2E;AAE3ElB,IAAAA,gBAAgB,EAAhBA,gBAF2E;AAG3EtC,IAAAA,eAAe,EAAfA,eAH2E;AAI3E6D,IAAAA,mBAAmB,EAAnBA,mBAJ2E;AAK3EO,IAAAA,WAAW,EAAXA,WAL2E;AAM3EzD,IAAAA,cAAc,EAAdA,cAN2E;AAO3E4F,IAAAA,WAAW,EAAXA,WAP2E;AAQ3ElC,IAAAA,KAAK,EAALA,KAR2E;AAS3EhC,IAAAA,YAAY,EAAZA,YAT2E;AAU3EtC,IAAAA,WAAW,EAAXA,WAV2E;AAW3E4D,IAAAA,gBAAgB,EAAhBA,gBAX2E;AAY3EO,IAAAA,UAAU,EAAVA,UAZ2E;AAa3EC,IAAAA,UAAU,EAAVA,UAb2E;AAc3EG,IAAAA,YAAY,EAAZA;AAd2E,GAAxB,CAArD;AAAA,MAAQ6C,WAAR,yBAAQA,WAAR;AAAA,MAAqBC,KAArB,yBAAqBA,KAArB;AAAA,MAA4BC,OAA5B,yBAA4BA,OAA5B;AAAA,MAAqCC,WAArC,yBAAqCA,WAArC;;AAqBA,MAAMC,mBAAmB,GAAG,4CAC1B;AAAA,WACE/D,kBAAkB,GAAGa,KAAK,CAACpB,KAA3B,GAAmCZ,YAAnC,IAAmD8B,UAAU,CAAClB,KAAX,GAAmB,CAAtE,GACI,IAAIkB,UAAU,CAAClB,KAAX,GAAmBV,mBAD3B,GAEIiB,kBAAkB,GAAGa,KAAK,CAACpB,KAA3B,GAAmCZ,YAAnC,IACA8B,UAAU,CAAClB,KAAX,GAAoBO,kBAAkB,GAAG,CAAtB,GAA2Ba,KAAK,CAACpB,KAAjC,GAAyCX,gBAD5D,GAEA,IACA,CAAC6B,UAAU,CAAClB,KAAX,IAAqBO,kBAAkB,GAAG,CAAtB,GAA2Ba,KAAK,CAACpB,KAAjC,GAAyCX,gBAA7D,CAAD,IACEC,mBAJF,GAKA,CARN;AAAA,GAD0B,EAU1B,CAACiB,kBAAD,CAV0B,CAA5B;AAgBA,MAAMgE,UAAU,GAAG,6CACjB;AAAA,WAAO;AACLC,MAAAA,SAAS,EAAE,CACT;AAAEC,QAAAA,MAAM,EAAE,CAAC;AAAX,OADS,EAET;AACExD,QAAAA,UAAU,EAAEI,YAAY,CAACrB;AAD3B,OAFS;AADN,KAAP;AAAA,GADiB,EASjB,EATiB,CAAnB;AAeA,MAAM0E,mBAAmB,GAAG,6CAC1B;AAAA,WAAO;AACLrG,MAAAA,eAAe,EAAEA,eAAe,IAAIH,UAD/B;AAELyG,MAAAA,OAAO,EAAEL,mBAAmB,CAACtE;AAFxB,KAAP;AAAA,GAD0B,EAK1B,CAACsE,mBAAD,CAL0B,CAA5B;AAYA,MAAMM,eAAe,GAAG,6CACtB;AAAA,WAAO;AACLJ,MAAAA,SAAS,EAAE,CACT;AACEtD,QAAAA,UAAU,EAAEpB,gBAAgB,CAACE;AAD/B,OADS;AADN,KAAP;AAAA,GADsB,EAQtB,EARsB,CAAxB;;AAcA,MAAM6E,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAAA;;AAC1B,iCAAInF,mBAAmB,CAACoF,OAAxB,aAAI,sBAA6BC,KAAjC,EAAwC;AACtCrF,MAAAA,mBAAmB,CAACoF,OAApB,CAA4BC,KAA5B;AACAtG,MAAAA,aAAa,CAAC,EAAD,CAAb;AACD;AACF,GALD;;AAUA,MAAMuG,YAAY,GAAG,SAAfA,YAAe,GAAM;AAAA;;AACzB,kCAAItF,mBAAmB,CAACoF,OAAxB,aAAI,uBAA6BG,OAAjC,EAA0C;AACxCvF,MAAAA,mBAAmB,CAACoF,OAApB,CAA4BG,OAA5B;AACAxG,MAAAA,aAAa,CAAC6C,MAAD,CAAb;AACD;AACF,GALD;;AAOA,MAAM4D,QAAQ,GAAG,mBAAkB,IAAlB,CAAjB;;AAEA,MAAMC,SAAS,GAAG,SAAZA,SAAY,GAAM;AACtBvH,IAAAA,SAAS,CAAC,IAAD,CAAT;AACAE,IAAAA,WAAW,CAAC,CAAD,CAAX;AACD,GAHD;;AAKA,MAAMsH,UAAU,GAAG,SAAbA,UAAa,CAACC,OAAD,EAA+B;AAChD,QAAIA,OAAO,CAACtH,QAAZ,EAAsBC,WAAW,CAACqH,OAAO,CAACtH,QAAT,CAAX;AACvB,GAFD;;AAIA,MAAMuH,cAAc,GAAG,SAAjBA,cAAiB,CAACC,IAAD,EAA6B;AAClD,QAAIA,IAAI,CAACC,WAAL,IAAoBD,IAAI,CAACE,gBAA7B,EAA+C;AAC7C3H,MAAAA,WAAW,CAACyH,IAAI,CAACC,WAAL,GAAmBD,IAAI,CAACE,gBAAzB,CAAX;AACD;AACF,GAJD;;AAMA,MAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACC,MAAD,EAAsB;AAC5C,QAAIA,MAAM,KAAKC,SAAf,EAA0B;AAExB,UAAI/H,QAAQ,KAAK,CAAb,IAAkBqH,QAAQ,CAACJ,OAA3B,IAAsCI,QAAQ,CAACJ,OAAT,CAAiBe,IAA3D,EAAiE;AAC/DX,QAAAA,QAAQ,CAACJ,OAAT,CAAiBe,IAAjB,CAAsB,CAAtB;AACD;;AAED,UAAIhI,QAAQ,KAAK,CAAb,IAAkBqH,QAAQ,CAACJ,OAA3B,IAAsCI,QAAQ,CAACJ,OAAT,CAAiBgB,WAA3D,EAAwE;AACtEZ,QAAAA,QAAQ,CAACJ,OAAT,CAAiBgB,WAAjB;AACD;;AAEDlI,MAAAA,SAAS,CAAC,UAACmI,KAAD;AAAA,eAAW,CAACA,KAAZ;AAAA,OAAD,CAAT;AACD,KAXD,MAWO;AACLnI,MAAAA,SAAS,CAAC+H,MAAD,CAAT;AACD;AACF,GAfD;;AAiBA,MAAMK,cAAc,GAAG,SAAjBA,cAAiB,CAACnI,QAAD,EAAsB;AAE3C,QAAIqH,QAAQ,CAACJ,OAAT,IAAoBI,QAAQ,CAACJ,OAAT,CAAiBe,IAAzC,EAA+C;AAC7CX,MAAAA,QAAQ,CAACJ,OAAT,CAAiBe,IAAjB,CAAsBhI,QAAtB;AACD;;AAGD,QAAIqH,QAAQ,CAACJ,OAAT,IAAoBI,QAAQ,CAACJ,OAAT,CAAiBmB,gBAAzC,EAA2D;AACzDf,MAAAA,QAAQ,CAACJ,OAAT,CAAiBmB,gBAAjB,CAAkCpI,QAAQ,GAAG,IAA7C;AACD;AACF,GAVD;;AAYA,SACE,gCAAC,iCAAD,CAAU,IAAV;AACE,IAAA,kBAAkB,EAAC,eADrB;AAEE,IAAA,aAAa,EAAE,MAFjB;AAGE,IAAA,KAAK,EAAE,CAACqI,wBAAWC,kBAAZ,EAAgCvB,eAAhC,CAHT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAKE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAE,CAACsB,wBAAWC,kBAAZ,EAAgCzB,mBAAhC,CAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IALF,EAME,gCAAC,4CAAD;AACE,IAAA,WAAW,EAAE,CADf;AAEE,IAAA,YAAY,EAAE,CAFhB;AAGE,IAAA,cAAc,EAAEL,WAHlB;AAIE,IAAA,GAAG,EAAErD,YAJP;AAKE,IAAA,OAAO,EAAE,CAACF,MAAD,EAASC,QAAT,EAAmBF,YAAnB,CALX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAEqF,wBAAWC,kBAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,4CAAD;AACE,IAAA,SAAS,EAAE,CADb;AAEE,IAAA,SAAS,EAAE,CAFb;AAGE,IAAA,OAAO,EAAE,CAHX;AAIE,IAAA,WAAW,EAAE,CAJf;AAKE,IAAA,YAAY,EAAE,CALhB;AAME,IAAA,cAAc,EAAEjC,WANlB;AAOE,IAAA,GAAG,EAAErD,YAPP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KASE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAEqF,wBAAWC,kBAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,8CAAD;AACE,IAAA,cAAc,EAAE/B,OADlB;AAEE,IAAA,GAAG,EAAErD,QAFP;AAGE,IAAA,oBAAoB,EAAE,CAACD,MAAD,CAHxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAKE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAEoF,wBAAWE,YAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,4CAAD;AACE,IAAA,OAAO,EAAE1H,OAAO,KAAK,SADvB;AAEE,IAAA,WAAW,EAAEpC,SAAS,GAAGsJ,SAAH,GAAe,CAFvC;AAGE,IAAA,OAAO,EAAE,EAHX;AAIE,IAAA,cAAc,EAAEzB,KAJlB;AAKE,IAAA,GAAG,EAAErD,MALP;AAME,IAAA,oBAAoB,EAAE,CAACC,QAAD,CANxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAQE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAEmF,wBAAWE,YAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,iCAAD,CAAU,IAAV;AACE,IAAA,KAAK,EAAE,CACLC,MAAM,CAACC,iBADF,EAEL/B,UAFK,EAGLjG,KAHK,EAIL;AACEkG,MAAAA,SAAS,EAAE,CACT;AAAEC,QAAAA,MAAM,EAAE,CAAC;AAAX,OADS,EAET;AACExD,QAAAA,UAAU,EAAEI,YAAY,CAACrB;AAD3B,OAFS;AADb,KAJK,CADT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAeGsB,MAAM,CAACgB,GAAP,CAAW,UAACqB,KAAD,EAAQ4C,CAAR;AAAA,WACV5C,KAAK,CAAC7B,IAAN,KAAe,OAAf,GACE,gCAAC,0CAAD;AACE,MAAA,SAAS,EAAEqD,SADb;AAEE,MAAA,UAAU,EAAEC,UAFd;AAGE,MAAA,cAAc,EAAEE,cAHlB;AAIE,MAAA,KAAK,EAAEiB,CAJT;AAKE,MAAA,GAAG,EAAK5C,KAAK,CAACT,GAAX,SAAkBqD,CALvB;AAME,MAAA,WAAW,EAAEpF,WANf;AAOE,MAAA,MAAM,EAAExD,MAPV;AAQE,MAAA,QAAQ,EAAE8C,aAAa,GAAG8F,CAR5B;AASE,MAAA,KAAK,EAAEnF,KATT;AAUE,MAAA,YAAY,EAAEhC,YAVhB;AAWE,MAAA,QAAQ,EAAEqB,aAAa,KAAK8F,CAX9B;AAYE,MAAA,YAAY,EAAEzC,IAAI,CAAC0C,GAAL,CAAS/F,aAAa,GAAG8F,CAAzB,IAA8B,CAZ9C;AAaE,MAAA,MAAM,EAAE;AAAErD,QAAAA,GAAG,EAAES,KAAK,CAACT;AAAb,OAbV;AAcE,MAAA,KAAK,EAAE,CACL;AACEtG,QAAAA,MAAM,EAAEwC,YAAY,GAAG,CADzB;AAEEqH,QAAAA,WAAW,EAAEzJ,MAFf;AAGEmG,QAAAA,KAAK,EAAErG,WAAW,GAAG;AAHvB,OADK,EAMLyB,KANK,CAdT;AAsBE,MAAA,UAAU,EAAE0C,UAtBd;AAuBE,MAAA,UAAU,EAAEC,UAvBd;AAwBE,MAAA,QAAQ,EAAEgE,QAxBZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MADF,GA4BE,gCAAC,0CAAD;AACE,MAAA,kBAAkB,EAAE,YADtB;AAEE,MAAA,KAAK,EAAEqB,CAFT;AAGE,MAAA,GAAG,EAAK5C,KAAK,CAACT,GAAX,SAAkBqD,CAHvB;AAIE,MAAA,WAAW,EAAEpF,WAJf;AAKE,MAAA,KAAK,EAAEwC,KALT;AAME,MAAA,QAAQ,EAAElD,aAAa,GAAG8F,CAN5B;AAOE,MAAA,KAAK,EAAEnF,KAPT;AAQE,MAAA,YAAY,EAAEhC,YARhB;AASE,MAAA,QAAQ,EAAEqB,aAAa,KAAK8F,CAT9B;AAUE,MAAA,YAAY,EAAEzC,IAAI,CAAC0C,GAAL,CAAS/F,aAAa,GAAG8F,CAAzB,IAA8B,CAV9C;AAWE,MAAA,KAAK,EAAE,CACL;AACE3J,QAAAA,MAAM,EAAEwC,YAAY,GAAG,CADzB;AAEEqH,QAAAA,WAAW,EAAEzJ,MAFf;AAGEmG,QAAAA,KAAK,EAAErG,WAAW,GAAG;AAHvB,OADK,EAMLyB,KANK,CAXT;AAmBE,MAAA,UAAU,EAAE0C,UAnBd;AAoBE,MAAA,UAAU,EAAEC,UApBd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA7BQ;AAAA,GAAX,CAfH,CADF,CARF,CADF,CALF,CADF,CATF,CADF,CAPF,CANF,EAoHE,gCAAC,sCAAD;AACE,IAAA,OAAO,EAAEoD,mBADX;AAEE,IAAA,KAAK,EAAEhD,MAAM,CAACb,aAAD,CAFf;AAGE,IAAA,OAAO,EAAEG;AAHX,KAIMtD,4BAJN,oBAIMA,4BAA4B,CAAEoJ,MAJpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KApHF,EA0HE,gCAAC,sCAAD;AACE,IAAA,kBAAkB,EAAE,sBADtB;AAEE,IAAA,QAAQ,EAAE3I,QAFZ;AAGE,IAAA,WAAW,EAAE2H,eAHf;AAIE,IAAA,cAAc,EAAEM,cAJlB;AAKE,IAAA,OAAO,EAAE1B,mBALX;AAME,IAAA,YAAY,EAAEU,YANhB;AAOE,IAAA,MAAM,EAAErH,MAPV;AAQE,IAAA,KAAK,EAAE2D,MAAM,CAACb,aAAD,CARf;AASE,IAAA,WAAW,EAAE6C,WATf;AAUE,IAAA,QAAQ,EAAEzF,QAVZ;AAWE,IAAA,aAAa,EAAE4C,aAXjB;AAYE,IAAA,OAAO,EAAEG;AAZX,KAaMtD,4BAbN,oBAaMA,4BAA4B,CAAEqJ,MAbpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA1HF,EA0IE,gCAAC,wCAAD;AACE,IAAA,wBAAwB,EAAE9G,wBAD5B;AAEE,IAAA,aAAa,EAAEgF,aAFjB;AAGE,IAAA,uBAAuB,EAAElF,uBAH3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA1IF,EA+IE,gCAAC,qCAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,6BAAD;AACE,IAAA,aAAa,EAAEE,wBADjB;AAEE,IAAA,oBAAoB,EAAE,IAFxB;AAGE,IAAA,eAAe,EAAE;AAAA,aACf,gCAAC,gCAAD;AACE,QAAA,aAAa,EAAEgF;AADjB,SAEMvH,4BAFN,oBAEMA,4BAA4B,CAAEsJ,UAFpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SADe;AAAA,KAHnB;AASE,IAAA,YAAY,EAAErJ,4BAAF,WAAEA,4BAAF,GAAkC,EAThD;AAUE,IAAA,KAAK,EAAE,CAVT;AAWE,IAAA,QAAQ,EAAE,kBAACoD,KAAD;AAAA,aAAmBf,0BAA0B,CAACe,KAAD,CAA7C;AAAA,KAXZ;AAYE,IAAA,GAAG,EAAEjB,mBAZP;AAaE,IAAA,UAAU,EAAElC,0BAA0B,IAAI+B,UAb5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAeE,gCAAC,oBAAD;AACE,IAAA,aAAa,EAAEsF,aADjB;AAEE,IAAA,+BAA+B,EAAEpH,+BAFnC;AAGE,IAAA,MAAM,EAAEe,UAHV;AAIE,IAAA,QAAQ,EAAEM;AAJZ,KAKMxB,4BALN,oBAKMA,4BAA4B,CAAEuJ,IALpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAfF,CADF,CA/IF,CADF;AA2KD,CAthBM;;;;AA2hBA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAAC9G,KAAD,EAAgB+G,UAAhB,EAAoCC,UAApC,EAA2D;AAC9E;;AACA,SAAOlD,IAAI,CAACmD,GAAL,CAASnD,IAAI,CAACoD,GAAL,CAASH,UAAT,EAAqB/G,KAArB,CAAT,EAAsCgH,UAAtC,CAAP;AACD,CAHM;;;;AAKP,IAAMX,MAAM,GAAGH,wBAAWiB,MAAX,CAAkB;AAC/Bb,EAAAA,iBAAiB,EAAE;AACjBc,IAAAA,UAAU,EAAE,QADK;AAEjBC,IAAAA,aAAa,EAAE;AAFE;AADY,CAAlB,CAAf;;AAuBAlK,YAAY,CAACmK,WAAb,GAA2B,4BAA3B","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Dimensions,\n Image,\n ImageStyle,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\n\nimport {\n PanGestureHandler,\n PinchGestureHandler,\n TapGestureHandler,\n} from 'react-native-gesture-handler';\n\nimport Animated, {\n Easing,\n runOnJS,\n runOnUI,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { BottomSheetModal, BottomSheetModalProvider } from '@gorhom/bottom-sheet';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { AnimatedGalleryImage } from './components/AnimatedGalleryImage';\nimport { AnimatedGalleryVideo } from './components/AnimatedGalleryVideo';\nimport {\n ImageGalleryFooter,\n ImageGalleryFooterCustomComponentProps,\n} from './components/ImageGalleryFooter';\nimport {\n ImageGalleryHeader,\n ImageGalleryHeaderCustomComponentProps,\n} from './components/ImageGalleryHeader';\nimport { ImageGalleryOverlay } from './components/ImageGalleryOverlay';\nimport { ImageGalleryGridImageComponents, ImageGrid } from './components/ImageGrid';\nimport {\n ImageGalleryGridHandleCustomComponentProps,\n ImageGridHandle,\n} from './components/ImageGridHandle';\n\nimport { useImageGalleryGestures } from './hooks/useImageGalleryGestures';\n\nimport { useImageGalleryContext } from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n OverlayProviderProps,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport {\n isVideoPackageAvailable,\n VideoPayloadData,\n VideoProgressData,\n VideoType,\n} from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { vh, vw } from '../../utils/utils';\nimport { getGiphyMimeType } from '../Attachment/utils/getGiphyMimeType';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\nconst measuredScreenHeight = vh(100);\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\nconst MARGIN = 32;\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nexport type ImageGalleryCustomComponents<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Override props for following UI components, which are part of [image gallery](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#gallery-components).\n *\n * - [ImageGalleryFooter](#ImageGalleryFooter)\n *\n * - [ImageGrid](#ImageGrid)\n *\n * - [ImageGridHandle](#ImageGridHandle)\n *\n * - [ImageGalleryHeader](#ImageGalleryHeader)\n *\n * e.g.,\n *\n * ```js\n * {\n * footer: {\n * ShareIcon: CustomShareIconComponent\n * },\n * grid: {\n * avatarComponent: CustomAvatarComponent\n * },\n * gridHandle: {\n * centerComponent: CustomCenterComponent\n * },\n * header: {\n * CloseIcon: CustomCloseButtonComponent\n * },\n * }\n * ```\n * @overrideType object\n */\n imageGalleryCustomComponents?: {\n footer?: ImageGalleryFooterCustomComponentProps<StreamChatGenerics>;\n grid?: ImageGalleryGridImageComponents<StreamChatGenerics>;\n gridHandle?: ImageGalleryGridHandleCustomComponentProps;\n header?: ImageGalleryHeaderCustomComponentProps<StreamChatGenerics>;\n };\n};\n\ntype Props<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n ImageGalleryCustomComponents<StreamChatGenerics> & {\n overlayOpacity: Animated.SharedValue<number>;\n } & Pick<\n OverlayProviderProps<StreamChatGenerics>,\n | 'giphyVersion'\n | 'imageGalleryGridSnapPoints'\n | 'imageGalleryGridHandleHeight'\n | 'numberOfImageGalleryGridColumns'\n >;\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\n giphyVersion = 'fixed_height',\n imageGalleryCustomComponents,\n imageGalleryGridHandleHeight,\n imageGalleryGridSnapPoints,\n numberOfImageGalleryGridColumns,\n overlayOpacity,\n } = props;\n const [paused, setPaused] = useState<boolean>(false);\n const [progress, setProgress] = useState<number>(0);\n const [duration, setDuration] = useState<number>(0);\n const {\n theme: {\n colors: { white_snow },\n imageGallery: { backgroundColor, pager, slide },\n },\n } = useTheme();\n const [gridPhotos, setGridPhotos] = useState<Photo<StreamChatGenerics>[]>([]);\n const { overlay, translucentStatusBar } = useOverlayContext();\n const { image, images, setImage } = useImageGalleryContext<StreamChatGenerics>();\n\n /**\n * Height constants\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - measuredScreenHeight - statusBarHeight;\n const androidScreenHeightAdjustment = translucentStatusBar\n ? bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? 0\n : statusBarHeight\n : bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? -statusBarHeight\n : 0;\n const screenHeight = isAndroid\n ? Dimensions.get('window').height + androidScreenHeightAdjustment\n : vh(100);\n const halfScreenHeight = screenHeight / 2;\n const quarterScreenHeight = screenHeight / 4;\n const snapPoints = React.useMemo(\n () => [(screenHeight * 3) / 4, screenHeight - (imageGalleryGridHandleHeight ?? 40)],\n [],\n );\n\n /**\n * BottomSheetModal ref\n */\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n\n /**\n * BottomSheetModal state\n */\n const [currentBottomSheetIndex, setCurrentBottomSheetIndex] = useState(0);\n const animatedBottomSheetIndex = useSharedValue(0);\n\n /**\n * Fade animation for screen, it is always rendered with pointerEvents\n * set to none for fast opening\n */\n const screenTranslateY = useSharedValue(screenHeight);\n const showScreen = () => {\n 'worklet';\n screenTranslateY.value = withTiming(0, {\n duration: 250,\n easing: Easing.out(Easing.ease),\n });\n };\n\n /**\n * Run the fade animation on visible change\n */\n useEffect(() => {\n Keyboard.dismiss();\n showScreen();\n }, []);\n\n /**\n * Image height from URL or default to full screen height\n */\n const [currentImageHeight, setCurrentImageHeight] = useState<number>(screenHeight);\n\n /**\n * JS and UI index values, the JS follows the UI but is needed\n * for rendering the virtualized image list\n */\n const [selectedIndex, setSelectedIndex] = useState(0);\n const index = useSharedValue(0);\n\n /**\n * Header visible value for animating in out\n */\n const headerFooterVisible = useSharedValue(1);\n\n /**\n * Gesture handler refs\n */\n const doubleTapRef = useRef<TapGestureHandler>(null);\n const panRef = useRef<PanGestureHandler>(null);\n const pinchRef = useRef<PinchGestureHandler>(null);\n const singleTapRef = useRef<TapGestureHandler>(null);\n\n /**\n * Shared values for movement\n */\n const translateX = useSharedValue(0);\n const translateY = useSharedValue(0);\n const offsetScale = useSharedValue(1);\n const scale = useSharedValue(1);\n const translationX = useSharedValue(0);\n\n /**\n * Photos array created from all currently available\n * photo attachments\n */\n\n const photos = images.reduce((acc: Photo<StreamChatGenerics>[], cur) => {\n const attachmentImages =\n cur.attachments?.filter(\n (attachment) =>\n (attachment.type === 'giphy' &&\n (attachment.giphy?.[giphyVersion]?.url ||\n attachment.thumb_url ||\n attachment.image_url)) ||\n (attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url &&\n getUrlOfImageAttachment(attachment)) ||\n (isVideoPackageAvailable() && attachment.type === 'video'),\n ) || [];\n\n const attachmentPhotos = attachmentImages.map((a) => {\n const imageUrl = getUrlOfImageAttachment(a) as string;\n const giphyURL = a.giphy?.[giphyVersion]?.url || a.thumb_url || a.image_url;\n\n return {\n channelId: cur.cid,\n created_at: cur.created_at,\n id: `photoId-${cur.id}-${imageUrl}`,\n messageId: cur.id,\n mime_type: a.type === 'giphy' ? getGiphyMimeType(giphyURL ?? '') : a.mime_type,\n original_height: a.original_height,\n original_width: a.original_width,\n type: a.type,\n uri:\n a.type === 'giphy'\n ? giphyURL\n : getResizedImageUrl({\n height: screenHeight,\n url: imageUrl,\n width: screenWidth,\n }),\n user: cur.user,\n user_id: cur.user_id,\n };\n });\n\n return [...acc, ...attachmentPhotos] as Photo<StreamChatGenerics>[];\n }, []);\n\n /**\n * Photos length needs to be kept as a const here so if the length\n * changes it causes the pan gesture handler function to refresh. This\n * does not work if the calculation for the length of the array is left\n * inside the gesture handler as it will have an array as a dependency\n */\n const photoLength = photos.length;\n\n /**\n * Set selected photo when changed via pressing in the message list\n */\n useEffect(() => {\n const updatePosition = (newIndex: number) => {\n 'worklet';\n\n if (newIndex > -1) {\n index.value = newIndex;\n translationX.value = -(screenWidth + MARGIN) * newIndex;\n runOnJS(setSelectedIndex)(newIndex);\n }\n };\n\n const newIndex = photos.findIndex(\n (photo) => photo.messageId === image?.messageId && photo.uri === image?.url,\n );\n\n if (photoLength > 1) {\n setPaused(true);\n }\n\n runOnUI(updatePosition)(newIndex);\n }, [image, photoLength]);\n\n /**\n * Image heights are not provided and therefore need to be calculated.\n * We start by allowing the image to be the full height then reduce it\n * to the proper scaled height based on the width being restricted to the\n * screen width when the dimensions are received.\n */\n const uriForCurrentImage = photos[selectedIndex]?.uri;\n useEffect(() => {\n setCurrentImageHeight(screenHeight);\n const photo = photos[index.value];\n const height = photo?.original_height;\n const width = photo?.original_width;\n\n if (height && width) {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n } else if (photo?.uri) {\n if (photo.type === 'image') {\n Image.getSize(photo.uri, (width, height) => {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n });\n }\n }\n }, [uriForCurrentImage]);\n\n const { onDoubleTap, onPan, onPinch, onSingleTap } = useImageGalleryGestures({\n currentImageHeight,\n halfScreenHeight,\n halfScreenWidth,\n headerFooterVisible,\n offsetScale,\n overlayOpacity,\n photoLength,\n scale,\n screenHeight,\n screenWidth,\n setSelectedIndex,\n translateX,\n translateY,\n translationX,\n });\n\n /**\n * If the header is visible we scale down the opacity of it as the\n * image is swiped downward\n */\n const headerFooterOpacity = useDerivedValue(\n () =>\n currentImageHeight * scale.value < screenHeight && translateY.value > 0\n ? 1 - translateY.value / quarterScreenHeight\n : currentImageHeight * scale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? 1 -\n (translateY.value - ((currentImageHeight / 2) * scale.value - halfScreenHeight)) /\n quarterScreenHeight\n : 1,\n [currentImageHeight],\n );\n\n /**\n * This transition and scaleX reverse lets use scroll left\n */\n const pagerStyle = useAnimatedStyle<ImageStyle>(\n () => ({\n transform: [\n { scaleX: -1 },\n {\n translateX: translationX.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Simple background color animation on Y movement\n */\n const containerBackground = useAnimatedStyle<ViewStyle>(\n () => ({\n backgroundColor: backgroundColor || white_snow,\n opacity: headerFooterOpacity.value,\n }),\n [headerFooterOpacity],\n );\n\n /**\n * Show screen style as component is always rendered we hide it\n * down and up and set opacity to 0 for good measure\n */\n const showScreenStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n transform: [\n {\n translateY: screenTranslateY.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Functions toclose BottomSheetModal with image grid\n */\n const closeGridView = () => {\n if (bottomSheetModalRef.current?.close) {\n bottomSheetModalRef.current.close();\n setGridPhotos([]);\n }\n };\n\n /**\n * Function to open BottomSheetModal with image grid\n */\n const openGridView = () => {\n if (bottomSheetModalRef.current?.present) {\n bottomSheetModalRef.current.present();\n setGridPhotos(photos);\n }\n };\n\n const videoRef = useRef<VideoType>(null);\n\n const handleEnd = () => {\n setPaused(true);\n setProgress(1);\n };\n\n const handleLoad = (payload: VideoPayloadData) => {\n if (payload.duration) setDuration(payload.duration);\n };\n\n const handleProgress = (data: VideoProgressData) => {\n if (data.currentTime && data.seekableDuration) {\n setProgress(data.currentTime / data.seekableDuration);\n }\n };\n\n const handlePlayPause = (status?: boolean) => {\n if (status === undefined) {\n // React Native Video for RN CLI has seek as an API to move to a particular location in the video\n if (progress === 1 && videoRef.current && videoRef.current.seek) {\n videoRef.current.seek(0);\n }\n // Expo AV for Expo has replayAsync as an API to move to a starting of the video\n if (progress === 1 && videoRef.current && videoRef.current.replayAsync) {\n videoRef.current.replayAsync();\n }\n\n setPaused((state) => !state);\n } else {\n setPaused(status);\n }\n };\n\n const onProgressDrag = (progress: number) => {\n // React Native Video for RN CLI has seek as an API to move to a particular location in the video\n if (videoRef.current && videoRef.current.seek) {\n videoRef.current.seek(progress);\n }\n\n // Expo AV for Expo has setPositionAsync as an API to move to a particular location of the video\n if (videoRef.current && videoRef.current.setPositionAsync) {\n videoRef.current.setPositionAsync(progress * 1000);\n }\n };\n\n return (\n <Animated.View\n accessibilityLabel='Image Gallery'\n pointerEvents={'auto'}\n style={[StyleSheet.absoluteFillObject, showScreenStyle]}\n >\n <Animated.View style={[StyleSheet.absoluteFillObject, containerBackground]} />\n <TapGestureHandler\n minPointers={1}\n numberOfTaps={1}\n onGestureEvent={onSingleTap}\n ref={singleTapRef}\n waitFor={[panRef, pinchRef, doubleTapRef]}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <TapGestureHandler\n maxDeltaX={8}\n maxDeltaY={8}\n maxDist={8}\n minPointers={1}\n numberOfTaps={2}\n onGestureEvent={onDoubleTap}\n ref={doubleTapRef}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <PinchGestureHandler\n onGestureEvent={onPinch}\n ref={pinchRef}\n simultaneousHandlers={[panRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <PanGestureHandler\n enabled={overlay === 'gallery'}\n maxPointers={isAndroid ? undefined : 1}\n minDist={10}\n onGestureEvent={onPan}\n ref={panRef}\n simultaneousHandlers={[pinchRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <Animated.View\n style={[\n styles.animatedContainer,\n pagerStyle,\n pager,\n {\n transform: [\n { scaleX: -1 }, // Also only here for opening, wrong direction when not included\n {\n translateX: translationX.value, // Only here for opening, wrong index when this is not included\n },\n ],\n },\n ]}\n >\n {photos.map((photo, i) =>\n photo.type === 'video' ? (\n <AnimatedGalleryVideo\n handleEnd={handleEnd}\n handleLoad={handleLoad}\n handleProgress={handleProgress}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n paused={paused}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n source={{ uri: photo.uri }}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n videoRef={videoRef}\n />\n ) : (\n <AnimatedGalleryImage\n accessibilityLabel={'Image Item'}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n photo={photo}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n />\n ),\n )}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </PinchGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n <ImageGalleryHeader<StreamChatGenerics>\n opacity={headerFooterOpacity}\n photo={photos[selectedIndex]}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.header}\n />\n <ImageGalleryFooter<StreamChatGenerics>\n accessibilityLabel={'Image Gallery Footer'}\n duration={duration}\n onPlayPause={handlePlayPause}\n onProgressDrag={onProgressDrag}\n opacity={headerFooterOpacity}\n openGridView={openGridView}\n paused={paused}\n photo={photos[selectedIndex]}\n photoLength={photoLength}\n progress={progress}\n selectedIndex={selectedIndex}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.footer}\n />\n\n <ImageGalleryOverlay\n animatedBottomSheetIndex={animatedBottomSheetIndex}\n closeGridView={closeGridView}\n currentBottomSheetIndex={currentBottomSheetIndex}\n />\n <BottomSheetModalProvider>\n <BottomSheetModal\n animatedIndex={animatedBottomSheetIndex}\n enablePanDownToClose={true}\n handleComponent={() => (\n <ImageGridHandle\n closeGridView={closeGridView}\n {...imageGalleryCustomComponents?.gridHandle}\n />\n )}\n handleHeight={imageGalleryGridHandleHeight ?? 40}\n index={0}\n onChange={(index: number) => setCurrentBottomSheetIndex(index)}\n ref={bottomSheetModalRef}\n snapPoints={imageGalleryGridSnapPoints || snapPoints}\n >\n <ImageGrid\n closeGridView={closeGridView}\n numberOfImageGalleryGridColumns={numberOfImageGalleryGridColumns}\n photos={gridPhotos}\n setImage={setImage}\n {...imageGalleryCustomComponents?.grid}\n />\n </BottomSheetModal>\n </BottomSheetModalProvider>\n </Animated.View>\n );\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n\nconst styles = StyleSheet.create({\n animatedContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n\nexport type Photo<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n id: string;\n uri: string;\n channelId?: string;\n created_at?: string | Date;\n messageId?: string;\n mime_type?: string;\n original_height?: number;\n original_width?: number;\n type?: string;\n user?: UserResponse<StreamChatGenerics> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"]}
|
|
@@ -95,9 +95,11 @@ var MessageTextContainerWithContext = function MessageTextContainerWithContext(p
|
|
|
95
95
|
var areEqual = function areEqual(prevProps, nextProps) {
|
|
96
96
|
var _prevMessage$mentione, _nextMessage$mentione, _nextMessage$mentione2, _prevMessage$mentione2, _nextMessage$mentione3;
|
|
97
97
|
|
|
98
|
-
var
|
|
98
|
+
var prevMarkdownStyles = prevProps.markdownStyles,
|
|
99
|
+
prevMessage = prevProps.message,
|
|
99
100
|
prevOnlyEmojis = prevProps.onlyEmojis;
|
|
100
|
-
var
|
|
101
|
+
var nextMarkdownStyles = nextProps.markdownStyles,
|
|
102
|
+
nextMessage = nextProps.message,
|
|
101
103
|
nextOnlyEmojis = nextProps.onlyEmojis;
|
|
102
104
|
var messageTextEqual = prevMessage.text === nextMessage.text;
|
|
103
105
|
if (!messageTextEqual) return false;
|
|
@@ -105,6 +107,8 @@ var areEqual = function areEqual(prevProps, nextProps) {
|
|
|
105
107
|
if (!onlyEmojisEqual) return false;
|
|
106
108
|
var mentionedUsersEqual = ((_prevMessage$mentione = prevMessage.mentioned_users) == null ? void 0 : _prevMessage$mentione.length) === ((_nextMessage$mentione = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione.length) && (((_nextMessage$mentione2 = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione2.length) === 0 || ((_prevMessage$mentione2 = prevMessage.mentioned_users) == null ? void 0 : _prevMessage$mentione2.length) && ((_nextMessage$mentione3 = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione3.length) && prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name);
|
|
107
109
|
if (!mentionedUsersEqual) return false;
|
|
110
|
+
var markdownStylesEqual = prevMarkdownStyles === nextMarkdownStyles || Object.keys(prevMarkdownStyles || {}).length === 0 && Object.keys(nextMarkdownStyles || {}).length === 0 || JSON.stringify(prevMarkdownStyles) === JSON.stringify(nextMarkdownStyles);
|
|
111
|
+
if (!markdownStylesEqual) return false;
|
|
108
112
|
return true;
|
|
109
113
|
};
|
|
110
114
|
|
|
@@ -136,7 +140,7 @@ var MessageTextContainer = function MessageTextContainer(props) {
|
|
|
136
140
|
__self: _this,
|
|
137
141
|
__source: {
|
|
138
142
|
fileName: _jsxFileName,
|
|
139
|
-
lineNumber:
|
|
143
|
+
lineNumber: 180,
|
|
140
144
|
columnNumber: 5
|
|
141
145
|
}
|
|
142
146
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MessageTextContainer.tsx"],"names":["styles","StyleSheet","create","textContainer","maxWidth","paddingHorizontal","MessageTextContainerWithContext","props","theme","markdownRules","markdownStyles","markdownStylesProp","message","messageOverlay","MessageText","messageTextNumberOfLines","onLongPress","onlyEmojis","onPress","preventPress","stylesProp","colors","messageSimple","content","markdown","onlyEmojiMarkdown","translatedMessage","text","renderText","areEqual","prevProps","nextProps","prevMessage","prevOnlyEmojis","nextMessage","nextOnlyEmojis","messageTextEqual","onlyEmojisEqual","mentionedUsersEqual","mentioned_users","length","name","MemoizedMessageTextContainer","React","memo","MessageTextContainer","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';\n\nimport { renderText, RenderTextParams } from './utils/renderText';\n\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\n\nimport type { MarkdownStyle, Theme } from '../../../contexts/themeContext/utils/theme';\nimport { useTranslatedMessage } from '../../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\n\nconst styles = StyleSheet.create({\n textContainer: { maxWidth: 250, paddingHorizontal: 16 },\n});\n\nexport type MessageTextProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = MessageTextContainerProps<StreamChatGenerics> & {\n renderText: (params: RenderTextParams<StreamChatGenerics>) => JSX.Element | null;\n theme: { theme: Theme };\n};\n\nexport type MessageTextContainerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageContextValue<StreamChatGenerics>,\n 'message' | 'onLongPress' | 'onlyEmojis' | 'onPress' | 'preventPress'\n> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'markdownRules' | 'MessageText'> & {\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n styles?: Partial<{\n textContainer: StyleProp<ViewStyle>;\n }>;\n };\n\nconst MessageTextContainerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const theme = useTheme();\n\n const {\n markdownRules,\n markdownStyles: markdownStylesProp = {},\n message,\n messageOverlay,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n styles: stylesProp = {},\n } = props;\n\n const {\n theme: {\n colors,\n messageSimple: {\n content: {\n markdown,\n textContainer: { onlyEmojiMarkdown, ...textContainer },\n },\n },\n },\n } = theme;\n\n const translatedMessage = useTranslatedMessage<StreamChatGenerics>(\n message,\n ) as MessageType<StreamChatGenerics>;\n\n if (!message.text) return null;\n\n const markdownStyles = { ...markdown, ...markdownStylesProp };\n\n return (\n <View\n style={[styles.textContainer, textContainer, stylesProp.textContainer]}\n testID='message-text-container'\n >\n {MessageText ? (\n <MessageText {...props} renderText={renderText} theme={theme} />\n ) : (\n renderText<StreamChatGenerics>({\n colors,\n markdownRules,\n markdownStyles: {\n ...markdownStyles,\n ...(onlyEmojis ? onlyEmojiMarkdown : {}),\n },\n message: translatedMessage,\n messageOverlay,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n })\n )}\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n nextProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const { message: prevMessage, onlyEmojis: prevOnlyEmojis } = prevProps;\n const { message: nextMessage, onlyEmojis: nextOnlyEmojis } = nextProps;\n\n const messageTextEqual = prevMessage.text === nextMessage.text;\n if (!messageTextEqual) return false;\n\n const onlyEmojisEqual = prevOnlyEmojis === nextOnlyEmojis;\n if (!onlyEmojisEqual) return false;\n\n const mentionedUsersEqual =\n prevMessage.mentioned_users?.length === nextMessage.mentioned_users?.length &&\n (nextMessage.mentioned_users?.length === 0 ||\n (prevMessage.mentioned_users?.length &&\n nextMessage.mentioned_users?.length &&\n prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name));\n if (!mentionedUsersEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageTextContainer = React.memo(\n MessageTextContainerWithContext,\n areEqual,\n) as typeof MessageTextContainerWithContext;\n\nexport type MessageTextContainerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageTextContainerPropsWithContext<StreamChatGenerics>>;\n\nexport const MessageTextContainer = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerProps<StreamChatGenerics>,\n) => {\n const { message, onLongPress, onlyEmojis, onPress, preventPress } =\n useMessageContext<StreamChatGenerics>();\n const { markdownRules, MessageText } = useMessagesContext<StreamChatGenerics>();\n const { messageTextNumberOfLines } = props;\n\n return (\n <MemoizedMessageTextContainer\n {...{\n markdownRules,\n message,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n }}\n {...props}\n />\n );\n};\n\nMessageTextContainer.displayName = 'MessageTextContainer{messageSimple{content}}';\n"]}
|
|
1
|
+
{"version":3,"sources":["MessageTextContainer.tsx"],"names":["styles","StyleSheet","create","textContainer","maxWidth","paddingHorizontal","MessageTextContainerWithContext","props","theme","markdownRules","markdownStyles","markdownStylesProp","message","messageOverlay","MessageText","messageTextNumberOfLines","onLongPress","onlyEmojis","onPress","preventPress","stylesProp","colors","messageSimple","content","markdown","onlyEmojiMarkdown","translatedMessage","text","renderText","areEqual","prevProps","nextProps","prevMarkdownStyles","prevMessage","prevOnlyEmojis","nextMarkdownStyles","nextMessage","nextOnlyEmojis","messageTextEqual","onlyEmojisEqual","mentionedUsersEqual","mentioned_users","length","name","markdownStylesEqual","Object","keys","JSON","stringify","MemoizedMessageTextContainer","React","memo","MessageTextContainer","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';\n\nimport { renderText, RenderTextParams } from './utils/renderText';\n\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\n\nimport type { MarkdownStyle, Theme } from '../../../contexts/themeContext/utils/theme';\nimport { useTranslatedMessage } from '../../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\n\nconst styles = StyleSheet.create({\n textContainer: { maxWidth: 250, paddingHorizontal: 16 },\n});\n\nexport type MessageTextProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = MessageTextContainerProps<StreamChatGenerics> & {\n renderText: (params: RenderTextParams<StreamChatGenerics>) => JSX.Element | null;\n theme: { theme: Theme };\n};\n\nexport type MessageTextContainerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageContextValue<StreamChatGenerics>,\n 'message' | 'onLongPress' | 'onlyEmojis' | 'onPress' | 'preventPress'\n> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'markdownRules' | 'MessageText'> & {\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n styles?: Partial<{\n textContainer: StyleProp<ViewStyle>;\n }>;\n };\n\nconst MessageTextContainerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const theme = useTheme();\n\n const {\n markdownRules,\n markdownStyles: markdownStylesProp = {},\n message,\n messageOverlay,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n styles: stylesProp = {},\n } = props;\n\n const {\n theme: {\n colors,\n messageSimple: {\n content: {\n markdown,\n textContainer: { onlyEmojiMarkdown, ...textContainer },\n },\n },\n },\n } = theme;\n\n const translatedMessage = useTranslatedMessage<StreamChatGenerics>(\n message,\n ) as MessageType<StreamChatGenerics>;\n\n if (!message.text) return null;\n\n const markdownStyles = { ...markdown, ...markdownStylesProp };\n\n return (\n <View\n style={[styles.textContainer, textContainer, stylesProp.textContainer]}\n testID='message-text-container'\n >\n {MessageText ? (\n <MessageText {...props} renderText={renderText} theme={theme} />\n ) : (\n renderText<StreamChatGenerics>({\n colors,\n markdownRules,\n markdownStyles: {\n ...markdownStyles,\n ...(onlyEmojis ? onlyEmojiMarkdown : {}),\n },\n message: translatedMessage,\n messageOverlay,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n })\n )}\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n nextProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n markdownStyles: prevMarkdownStyles,\n message: prevMessage,\n onlyEmojis: prevOnlyEmojis,\n } = prevProps;\n const {\n markdownStyles: nextMarkdownStyles,\n message: nextMessage,\n onlyEmojis: nextOnlyEmojis,\n } = nextProps;\n\n const messageTextEqual = prevMessage.text === nextMessage.text;\n if (!messageTextEqual) return false;\n\n const onlyEmojisEqual = prevOnlyEmojis === nextOnlyEmojis;\n if (!onlyEmojisEqual) return false;\n\n const mentionedUsersEqual =\n prevMessage.mentioned_users?.length === nextMessage.mentioned_users?.length &&\n (nextMessage.mentioned_users?.length === 0 ||\n (prevMessage.mentioned_users?.length &&\n nextMessage.mentioned_users?.length &&\n prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name));\n if (!mentionedUsersEqual) return false;\n\n // stringify could be an expensive operation, so lets rule out the obvious\n // possibilities first such as different object reference or empty objects etc.\n // Also keeping markdown equality check at the last to make sure other less\n // expensive equality checks get executed first and markdown check will be skipped if returned\n // false from previous checks.\n const markdownStylesEqual =\n prevMarkdownStyles === nextMarkdownStyles ||\n (Object.keys(prevMarkdownStyles || {}).length === 0 &&\n Object.keys(nextMarkdownStyles || {}).length === 0) ||\n JSON.stringify(prevMarkdownStyles) === JSON.stringify(nextMarkdownStyles);\n if (!markdownStylesEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageTextContainer = React.memo(\n MessageTextContainerWithContext,\n areEqual,\n) as typeof MessageTextContainerWithContext;\n\nexport type MessageTextContainerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageTextContainerPropsWithContext<StreamChatGenerics>>;\n\nexport const MessageTextContainer = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerProps<StreamChatGenerics>,\n) => {\n const { message, onLongPress, onlyEmojis, onPress, preventPress } =\n useMessageContext<StreamChatGenerics>();\n const { markdownRules, MessageText } = useMessagesContext<StreamChatGenerics>();\n const { messageTextNumberOfLines } = props;\n\n return (\n <MemoizedMessageTextContainer\n {...{\n markdownRules,\n message,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n }}\n {...props}\n />\n );\n};\n\nMessageTextContainer.displayName = 'MessageTextContainer{messageSimple{content}}';\n"]}
|
package/lib/module/version.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stream-chat-react-native-core",
|
|
3
3
|
"description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.14.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"company": "Stream.io Inc",
|
|
7
7
|
"name": "Stream.io Inc"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param giphyUrl The giphy attachment url
|
|
4
|
+
* @returns mimeType for the giphy attachment
|
|
5
|
+
*/
|
|
6
|
+
export function getGiphyMimeType(giphyUrl: string): string {
|
|
7
|
+
if (giphyUrl.includes('.mp4')) {
|
|
8
|
+
return 'video/mp4';
|
|
9
|
+
} else if (giphyUrl.includes('.webp')) {
|
|
10
|
+
return 'image/webp';
|
|
11
|
+
}
|
|
12
|
+
return 'image/gif';
|
|
13
|
+
}
|
|
@@ -65,6 +65,7 @@ import type { DefaultStreamChatGenerics } from '../../types/types';
|
|
|
65
65
|
import { getResizedImageUrl } from '../../utils/getResizedImageUrl';
|
|
66
66
|
import { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';
|
|
67
67
|
import { vh, vw } from '../../utils/utils';
|
|
68
|
+
import { getGiphyMimeType } from '../Attachment/utils/getGiphyMimeType';
|
|
68
69
|
|
|
69
70
|
const isAndroid = Platform.OS === 'android';
|
|
70
71
|
const fullScreenHeight = Dimensions.get('screen').height;
|
|
@@ -280,7 +281,7 @@ export const ImageGallery = <
|
|
|
280
281
|
created_at: cur.created_at,
|
|
281
282
|
id: `photoId-${cur.id}-${imageUrl}`,
|
|
282
283
|
messageId: cur.id,
|
|
283
|
-
mime_type: a.type === 'giphy' ? '
|
|
284
|
+
mime_type: a.type === 'giphy' ? getGiphyMimeType(giphyURL ?? '') : a.mime_type,
|
|
284
285
|
original_height: a.original_height,
|
|
285
286
|
original_width: a.original_width,
|
|
286
287
|
type: a.type,
|
|
@@ -117,8 +117,16 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
|
|
|
117
117
|
prevProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,
|
|
118
118
|
nextProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,
|
|
119
119
|
) => {
|
|
120
|
-
const {
|
|
121
|
-
|
|
120
|
+
const {
|
|
121
|
+
markdownStyles: prevMarkdownStyles,
|
|
122
|
+
message: prevMessage,
|
|
123
|
+
onlyEmojis: prevOnlyEmojis,
|
|
124
|
+
} = prevProps;
|
|
125
|
+
const {
|
|
126
|
+
markdownStyles: nextMarkdownStyles,
|
|
127
|
+
message: nextMessage,
|
|
128
|
+
onlyEmojis: nextOnlyEmojis,
|
|
129
|
+
} = nextProps;
|
|
122
130
|
|
|
123
131
|
const messageTextEqual = prevMessage.text === nextMessage.text;
|
|
124
132
|
if (!messageTextEqual) return false;
|
|
@@ -134,6 +142,18 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
|
|
|
134
142
|
prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name));
|
|
135
143
|
if (!mentionedUsersEqual) return false;
|
|
136
144
|
|
|
145
|
+
// stringify could be an expensive operation, so lets rule out the obvious
|
|
146
|
+
// possibilities first such as different object reference or empty objects etc.
|
|
147
|
+
// Also keeping markdown equality check at the last to make sure other less
|
|
148
|
+
// expensive equality checks get executed first and markdown check will be skipped if returned
|
|
149
|
+
// false from previous checks.
|
|
150
|
+
const markdownStylesEqual =
|
|
151
|
+
prevMarkdownStyles === nextMarkdownStyles ||
|
|
152
|
+
(Object.keys(prevMarkdownStyles || {}).length === 0 &&
|
|
153
|
+
Object.keys(nextMarkdownStyles || {}).length === 0) ||
|
|
154
|
+
JSON.stringify(prevMarkdownStyles) === JSON.stringify(nextMarkdownStyles);
|
|
155
|
+
if (!markdownStylesEqual) return false;
|
|
156
|
+
|
|
137
157
|
return true;
|
|
138
158
|
};
|
|
139
159
|
|
package/src/version.json
CHANGED