react-native-image-collage 0.2.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/LICENSE +21 -0
- package/README.md +564 -0
- package/dist/CollageImage.d.ts +7 -0
- package/dist/CollageImage.d.ts.map +1 -0
- package/dist/CollageImage.js +49 -0
- package/dist/CollageTile.d.ts +18 -0
- package/dist/CollageTile.d.ts.map +1 -0
- package/dist/CollageTile.js +58 -0
- package/dist/CollageWithViewer.d.ts +4 -0
- package/dist/CollageWithViewer.d.ts.map +1 -0
- package/dist/CollageWithViewer.js +65 -0
- package/dist/ImageCollage.d.ts +4 -0
- package/dist/ImageCollage.d.ts.map +1 -0
- package/dist/ImageCollage.js +135 -0
- package/dist/ImageCollageWithViewer.d.ts +4 -0
- package/dist/ImageCollageWithViewer.d.ts.map +1 -0
- package/dist/ImageCollageWithViewer.js +59 -0
- package/dist/ImageViewer.d.ts +4 -0
- package/dist/ImageViewer.d.ts.map +1 -0
- package/dist/ImageViewer.js +76 -0
- package/dist/constants.d.ts +13 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +13 -0
- package/dist/expo/createExpoImageRenderer.d.ts +9 -0
- package/dist/expo/createExpoImageRenderer.d.ts.map +1 -0
- package/dist/expo/createExpoImageRenderer.js +20 -0
- package/dist/expo/index.d.ts +15 -0
- package/dist/expo/index.d.ts.map +1 -0
- package/dist/expo/index.js +59 -0
- package/dist/hooks/useContainerWidth.d.ts +10 -0
- package/dist/hooks/useContainerWidth.d.ts.map +1 -0
- package/dist/hooks/useContainerWidth.js +22 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/types.d.ts +93 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/utils/imageSources.d.ts +11 -0
- package/dist/utils/imageSources.d.ts.map +1 -0
- package/dist/utils/imageSources.js +131 -0
- package/dist/utils/layoutHeight.d.ts +9 -0
- package/dist/utils/layoutHeight.d.ts.map +1 -0
- package/dist/utils/layoutHeight.js +41 -0
- package/dist/utils/renderCollageLayouts.d.ts +97 -0
- package/dist/utils/renderCollageLayouts.d.ts.map +1 -0
- package/dist/utils/renderCollageLayouts.js +183 -0
- package/dist/viewer/ImageCollageWithViewer.d.ts +4 -0
- package/dist/viewer/ImageCollageWithViewer.d.ts.map +1 -0
- package/dist/viewer/ImageCollageWithViewer.js +43 -0
- package/dist/viewer/ImageViewer.d.ts +5 -0
- package/dist/viewer/ImageViewer.d.ts.map +1 -0
- package/dist/viewer/ImageViewer.js +85 -0
- package/dist/viewer/index.d.ts +4 -0
- package/dist/viewer/index.d.ts.map +1 -0
- package/dist/viewer/index.js +8 -0
- package/package.json +68 -0
- package/src/CollageImage.tsx +41 -0
- package/src/CollageTile.tsx +69 -0
- package/src/CollageWithViewer.tsx +53 -0
- package/src/ImageCollage.tsx +168 -0
- package/src/constants.ts +11 -0
- package/src/expo/createExpoImageRenderer.tsx +43 -0
- package/src/expo/index.tsx +99 -0
- package/src/hooks/useContainerWidth.ts +29 -0
- package/src/index.ts +42 -0
- package/src/types.ts +120 -0
- package/src/utils/imageSources.ts +170 -0
- package/src/utils/layoutHeight.ts +54 -0
- package/src/utils/renderCollageLayouts.tsx +329 -0
- package/src/viewer/ImageCollageWithViewer.tsx +24 -0
- package/src/viewer/ImageViewer.tsx +93 -0
- package/src/viewer/index.ts +10 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.CollageTile = void 0;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
const react_native_1 = require("react-native");
|
|
39
|
+
const CollageImage_1 = require("./CollageImage");
|
|
40
|
+
const constants_1 = require("./constants");
|
|
41
|
+
exports.CollageTile = (0, react_1.memo)(function CollageTile({ source, remoteUri, index, onPress, borderRadius, style, priority = "normal", placeholderColor, renderImage, transition, }) {
|
|
42
|
+
const handlePress = (0, react_1.useCallback)(() => onPress?.(index), [onPress, index]);
|
|
43
|
+
return (<react_native_1.Pressable onPress={handlePress} android_ripple={constants_1.ANDROID_RIPPLE} style={[
|
|
44
|
+
style,
|
|
45
|
+
styles.tile,
|
|
46
|
+
{ borderRadius, backgroundColor: placeholderColor },
|
|
47
|
+
]}>
|
|
48
|
+
{(0, CollageImage_1.renderCollageImage)({
|
|
49
|
+
source,
|
|
50
|
+
remoteUri,
|
|
51
|
+
priority,
|
|
52
|
+
transition: transition ?? (react_native_1.Platform.OS === "android" ? 80 : 150),
|
|
53
|
+
}, renderImage)}
|
|
54
|
+
</react_native_1.Pressable>);
|
|
55
|
+
});
|
|
56
|
+
const styles = react_native_1.StyleSheet.create({
|
|
57
|
+
tile: { overflow: "hidden", minHeight: 0, minWidth: 0 },
|
|
58
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollageWithViewer.d.ts","sourceRoot":"","sources":["../src/CollageWithViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAGpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAGtD,eAAO,MAAM,iBAAiB,oDA8C5B,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.CollageWithViewer = void 0;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
const react_native_1 = require("react-native");
|
|
39
|
+
const ImageCollage_1 = require("./ImageCollage");
|
|
40
|
+
const imageSources_1 = require("./utils/imageSources");
|
|
41
|
+
exports.CollageWithViewer = (0, react_1.memo)(function CollageWithViewer({ images, renderViewer, onImagePress, ...collageProps }) {
|
|
42
|
+
const [viewerVisible, setViewerVisible] = (0, react_1.useState)(false);
|
|
43
|
+
const [viewerIndex, setViewerIndex] = (0, react_1.useState)(0);
|
|
44
|
+
const viewerImages = (0, react_1.useMemo)(() => (0, imageSources_1.toViewerImages)((0, imageSources_1.normalizeImages)(images)), [images]);
|
|
45
|
+
const openViewerAt = (0, react_1.useCallback)((index) => {
|
|
46
|
+
onImagePress?.(index);
|
|
47
|
+
setViewerIndex(index);
|
|
48
|
+
setViewerVisible(true);
|
|
49
|
+
}, [onImagePress]);
|
|
50
|
+
const closeViewer = (0, react_1.useCallback)(() => {
|
|
51
|
+
setViewerVisible(false);
|
|
52
|
+
}, []);
|
|
53
|
+
if (!viewerImages.length) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return (<react_native_1.View>
|
|
57
|
+
<ImageCollage_1.ImageCollage images={images} onImagePress={openViewerAt} {...collageProps}/>
|
|
58
|
+
{renderViewer({
|
|
59
|
+
images: viewerImages,
|
|
60
|
+
visible: viewerVisible,
|
|
61
|
+
imageIndex: viewerIndex,
|
|
62
|
+
onRequestClose: closeViewer,
|
|
63
|
+
})}
|
|
64
|
+
</react_native_1.View>);
|
|
65
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageCollage.d.ts","sourceRoot":"","sources":["../src/ImageCollage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAWlE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,SAAS,CAAC;AAoBjB,eAAO,MAAM,YAAY,+CAoIvB,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ImageCollage = void 0;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
const react_native_1 = require("react-native");
|
|
39
|
+
const constants_1 = require("./constants");
|
|
40
|
+
const useContainerWidth_1 = require("./hooks/useContainerWidth");
|
|
41
|
+
const layoutHeight_1 = require("./utils/layoutHeight");
|
|
42
|
+
const imageSources_1 = require("./utils/imageSources");
|
|
43
|
+
const renderCollageLayouts_1 = require("./utils/renderCollageLayouts");
|
|
44
|
+
exports.ImageCollage = (0, react_1.memo)(function ImageCollage({ images, height, width, horizontalInset = 0, borderRadius = constants_1.DEFAULT_BORDER_RADIUS, spacing = constants_1.DEFAULT_SPACING, maxVisibleImages = constants_1.DEFAULT_MAX_VISIBLE_IMAGES, onImagePress, layoutMinHeight = constants_1.DEFAULT_LAYOUT_MIN_HEIGHT, layoutMaxHeight = constants_1.DEFAULT_LAYOUT_MAX_HEIGHT, placeholderColor = constants_1.DEFAULT_PLACEHOLDER_COLOR, measureAspectRatios = true, getImagePriority, renderImage, style, }) {
|
|
45
|
+
const effectiveMaxVisible = Math.max(1, maxVisibleImages);
|
|
46
|
+
const normalizedImages = (0, react_1.useMemo)(() => (0, imageSources_1.normalizeImages)(images), [images]);
|
|
47
|
+
const [resolvedImages, setResolvedImages] = (0, react_1.useState)(normalizedImages);
|
|
48
|
+
const [isResolving, setIsResolving] = (0, react_1.useState)(false);
|
|
49
|
+
const { containerWidth, onLayout } = (0, useContainerWidth_1.useContainerWidth)({
|
|
50
|
+
width,
|
|
51
|
+
horizontalInset,
|
|
52
|
+
});
|
|
53
|
+
(0, react_1.useEffect)(() => {
|
|
54
|
+
let cancelled = false;
|
|
55
|
+
if (!measureAspectRatios) {
|
|
56
|
+
setResolvedImages(normalizedImages);
|
|
57
|
+
setIsResolving(false);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const needsMeasurement = normalizedImages.some((image) => image.aspectRatio == null);
|
|
61
|
+
if (!needsMeasurement) {
|
|
62
|
+
setResolvedImages(normalizedImages);
|
|
63
|
+
setIsResolving(false);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
setIsResolving(true);
|
|
67
|
+
(0, imageSources_1.resolveImagesWithAspectRatios)(normalizedImages)
|
|
68
|
+
.then((nextImages) => {
|
|
69
|
+
if (!cancelled) {
|
|
70
|
+
setResolvedImages(nextImages);
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
.finally(() => {
|
|
74
|
+
if (!cancelled) {
|
|
75
|
+
setIsResolving(false);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return () => {
|
|
79
|
+
cancelled = true;
|
|
80
|
+
};
|
|
81
|
+
}, [measureAspectRatios, normalizedImages]);
|
|
82
|
+
const layoutHeight = (0, layoutHeight_1.computeLayoutHeight)({
|
|
83
|
+
contentWidth: containerWidth,
|
|
84
|
+
images: resolvedImages,
|
|
85
|
+
height,
|
|
86
|
+
layoutMinHeight,
|
|
87
|
+
layoutMaxHeight,
|
|
88
|
+
});
|
|
89
|
+
const sharedTileConfig = {
|
|
90
|
+
onPress: onImagePress,
|
|
91
|
+
borderRadius,
|
|
92
|
+
placeholderColor,
|
|
93
|
+
getImagePriority,
|
|
94
|
+
renderImage,
|
|
95
|
+
};
|
|
96
|
+
if (!resolvedImages.length) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
if (isResolving && measureAspectRatios) {
|
|
100
|
+
return (<react_native_1.View onLayout={onLayout} style={[
|
|
101
|
+
style,
|
|
102
|
+
{
|
|
103
|
+
height: layoutHeight,
|
|
104
|
+
borderRadius,
|
|
105
|
+
backgroundColor: placeholderColor,
|
|
106
|
+
overflow: "hidden",
|
|
107
|
+
},
|
|
108
|
+
]}/>);
|
|
109
|
+
}
|
|
110
|
+
const count = resolvedImages.length;
|
|
111
|
+
const { containerStyle, row } = (0, renderCollageLayouts_1.getCollageLayoutStyle)({
|
|
112
|
+
count,
|
|
113
|
+
maxVisibleImages: effectiveMaxVisible,
|
|
114
|
+
layoutHeight,
|
|
115
|
+
spacing,
|
|
116
|
+
borderRadius,
|
|
117
|
+
});
|
|
118
|
+
return (<react_native_1.View onLayout={onLayout} style={[
|
|
119
|
+
style,
|
|
120
|
+
row ? renderCollageLayouts_1.collageLayoutStyles.row : undefined,
|
|
121
|
+
containerStyle,
|
|
122
|
+
]}>
|
|
123
|
+
{(0, renderCollageLayouts_1.renderCollageContent)({
|
|
124
|
+
images: resolvedImages,
|
|
125
|
+
layoutHeight,
|
|
126
|
+
spacing,
|
|
127
|
+
borderRadius,
|
|
128
|
+
placeholderColor,
|
|
129
|
+
maxVisibleImages: effectiveMaxVisible,
|
|
130
|
+
onImagePress,
|
|
131
|
+
renderImage,
|
|
132
|
+
sharedTileConfig,
|
|
133
|
+
})}
|
|
134
|
+
</react_native_1.View>);
|
|
135
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageCollageWithViewer.d.ts","sourceRoot":"","sources":["../src/ImageCollageWithViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAIpE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAE3D,eAAO,MAAM,sBAAsB,yDA6CjC,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ImageCollageWithViewer = void 0;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
const react_native_1 = require("react-native");
|
|
39
|
+
const ImageCollage_1 = require("./ImageCollage");
|
|
40
|
+
const ImageViewer_1 = require("./ImageViewer");
|
|
41
|
+
exports.ImageCollageWithViewer = (0, react_1.memo)(function ImageCollageWithViewer({ images, viewerProps, onImagePress, ...collageProps }) {
|
|
42
|
+
const [viewerVisible, setViewerVisible] = (0, react_1.useState)(false);
|
|
43
|
+
const [viewerIndex, setViewerIndex] = (0, react_1.useState)(0);
|
|
44
|
+
const imageSources = (0, react_1.useMemo)(() => (images ?? []).filter(Boolean).map((uri) => ({ uri })), [images]);
|
|
45
|
+
const openViewerAt = (0, react_1.useCallback)((index) => {
|
|
46
|
+
onImagePress?.(index);
|
|
47
|
+
setViewerIndex(index);
|
|
48
|
+
setViewerVisible(true);
|
|
49
|
+
}, [onImagePress]);
|
|
50
|
+
const closeViewer = (0, react_1.useCallback)(() => {
|
|
51
|
+
setViewerVisible(false);
|
|
52
|
+
}, []);
|
|
53
|
+
if (!imageSources.length)
|
|
54
|
+
return null;
|
|
55
|
+
return (<react_native_1.View>
|
|
56
|
+
<ImageCollage_1.ImageCollage images={images} onImagePress={openViewerAt} {...collageProps}/>
|
|
57
|
+
<ImageViewer_1.ImageViewer images={imageSources} imageIndex={viewerIndex} visible={viewerVisible} onRequestClose={closeViewer} {...viewerProps}/>
|
|
58
|
+
</react_native_1.View>);
|
|
59
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageViewer.d.ts","sourceRoot":"","sources":["../src/ImageViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAGpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,eAAO,MAAM,WAAW,8CAwEtB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ImageViewer = void 0;
|
|
40
|
+
const react_1 = __importStar(require("react"));
|
|
41
|
+
const react_native_1 = require("react-native");
|
|
42
|
+
const react_native_image_viewing_1 = __importDefault(require("react-native-image-viewing"));
|
|
43
|
+
exports.ImageViewer = (0, react_1.memo)(function ImageViewer({ images, visible, imageIndex = 0, onRequestClose, swipeToCloseEnabled = true, doubleTapToZoomEnabled = true, presentationStyle = "fullScreen", showCloseButton = true, showIndexFooter = true, closeButtonLabel = "Close", }) {
|
|
44
|
+
return (<react_native_image_viewing_1.default images={images} imageIndex={imageIndex} visible={visible} onRequestClose={onRequestClose} presentationStyle={presentationStyle} swipeToCloseEnabled={swipeToCloseEnabled} doubleTapToZoomEnabled={doubleTapToZoomEnabled} HeaderComponent={showCloseButton
|
|
45
|
+
? () => (<react_native_1.View style={{
|
|
46
|
+
position: "absolute",
|
|
47
|
+
top: react_native_1.Platform.OS === "android" ? 12 : 50,
|
|
48
|
+
right: 12,
|
|
49
|
+
}}>
|
|
50
|
+
<react_native_1.Pressable onPress={onRequestClose} style={{
|
|
51
|
+
backgroundColor: "rgba(0,0,0,0.45)",
|
|
52
|
+
paddingHorizontal: 12,
|
|
53
|
+
paddingVertical: 8,
|
|
54
|
+
borderRadius: 12,
|
|
55
|
+
}}>
|
|
56
|
+
<react_native_1.Text style={{ color: "#fff", fontWeight: "700" }}>
|
|
57
|
+
{closeButtonLabel}
|
|
58
|
+
</react_native_1.Text>
|
|
59
|
+
</react_native_1.Pressable>
|
|
60
|
+
</react_native_1.View>)
|
|
61
|
+
: undefined} FooterComponent={showIndexFooter
|
|
62
|
+
? ({ imageIndex: currentIndex }) => images.length > 1 ? (<react_native_1.View style={{
|
|
63
|
+
position: "absolute",
|
|
64
|
+
bottom: 16,
|
|
65
|
+
alignSelf: "center",
|
|
66
|
+
backgroundColor: "rgba(0,0,0,0.35)",
|
|
67
|
+
paddingHorizontal: 12,
|
|
68
|
+
paddingVertical: 6,
|
|
69
|
+
borderRadius: 12,
|
|
70
|
+
}}>
|
|
71
|
+
<react_native_1.Text style={{ color: "#fff", fontWeight: "700" }}>
|
|
72
|
+
{currentIndex + 1} / {images.length}
|
|
73
|
+
</react_native_1.Text>
|
|
74
|
+
</react_native_1.View>) : null
|
|
75
|
+
: undefined}/>);
|
|
76
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const DEFAULT_BLURHASH = "LEHV6nWB2yk8pyo0adR*.7kCMdnj";
|
|
2
|
+
export declare const DEFAULT_PLACEHOLDER_COLOR = "#E8E8E8";
|
|
3
|
+
export declare const DEFAULT_SPACING = 6;
|
|
4
|
+
export declare const DEFAULT_BORDER_RADIUS = 12;
|
|
5
|
+
export declare const DEFAULT_LAYOUT_MIN_HEIGHT = 200;
|
|
6
|
+
export declare const DEFAULT_LAYOUT_MAX_HEIGHT = 520;
|
|
7
|
+
export declare const DEFAULT_MAX_VISIBLE_IMAGES = 4;
|
|
8
|
+
export declare const ANDROID_RIPPLE: {
|
|
9
|
+
readonly color: "rgba(0,0,0,0.08)";
|
|
10
|
+
};
|
|
11
|
+
/** @deprecated Use `DEFAULT_PLACEHOLDER_COLOR` instead. */
|
|
12
|
+
export declare const DEFAULT_PLACEHOLDER_BG = "#E8E8E8";
|
|
13
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,iCAAiC,CAAC;AAC/D,eAAO,MAAM,yBAAyB,YAAY,CAAC;AACnD,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,cAAc;;CAAyC,CAAC;AAErE,2DAA2D;AAC3D,eAAO,MAAM,sBAAsB,YAA4B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_PLACEHOLDER_BG = exports.ANDROID_RIPPLE = exports.DEFAULT_MAX_VISIBLE_IMAGES = exports.DEFAULT_LAYOUT_MAX_HEIGHT = exports.DEFAULT_LAYOUT_MIN_HEIGHT = exports.DEFAULT_BORDER_RADIUS = exports.DEFAULT_SPACING = exports.DEFAULT_PLACEHOLDER_COLOR = exports.DEFAULT_BLURHASH = void 0;
|
|
4
|
+
exports.DEFAULT_BLURHASH = "LEHV6nWB2yk8pyo0adR*.7kCMdnj";
|
|
5
|
+
exports.DEFAULT_PLACEHOLDER_COLOR = "#E8E8E8";
|
|
6
|
+
exports.DEFAULT_SPACING = 6;
|
|
7
|
+
exports.DEFAULT_BORDER_RADIUS = 12;
|
|
8
|
+
exports.DEFAULT_LAYOUT_MIN_HEIGHT = 200;
|
|
9
|
+
exports.DEFAULT_LAYOUT_MAX_HEIGHT = 520;
|
|
10
|
+
exports.DEFAULT_MAX_VISIBLE_IMAGES = 4;
|
|
11
|
+
exports.ANDROID_RIPPLE = { color: "rgba(0,0,0,0.08)" };
|
|
12
|
+
/** @deprecated Use `DEFAULT_PLACEHOLDER_COLOR` instead. */
|
|
13
|
+
exports.DEFAULT_PLACEHOLDER_BG = exports.DEFAULT_PLACEHOLDER_COLOR;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CollageImageRenderer } from "../types";
|
|
2
|
+
type ExpoImageRendererOptions = {
|
|
3
|
+
blurhash?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function createExpoImageRenderer(options?: ExpoImageRendererOptions): CollageImageRenderer;
|
|
6
|
+
/** Pre-built renderer using `expo-image` and the default blurhash. */
|
|
7
|
+
export declare const expoImageRenderer: CollageImageRenderer;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=createExpoImageRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createExpoImageRenderer.d.ts","sourceRoot":"","sources":["../../src/expo/createExpoImageRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,wBAA6B,GACrC,oBAAoB,CA2BtB;AAED,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,sBAA4B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.expoImageRenderer = void 0;
|
|
7
|
+
exports.createExpoImageRenderer = createExpoImageRenderer;
|
|
8
|
+
const react_1 = __importDefault(require("react"));
|
|
9
|
+
const react_native_1 = require("react-native");
|
|
10
|
+
const expo_image_1 = require("expo-image");
|
|
11
|
+
const constants_1 = require("../constants");
|
|
12
|
+
function createExpoImageRenderer(options = {}) {
|
|
13
|
+
const blurhash = options.blurhash ?? constants_1.DEFAULT_BLURHASH;
|
|
14
|
+
return function ExpoCollageImage({ source, remoteUri, priority, transition, style, }) {
|
|
15
|
+
const recyclingKey = remoteUri ?? undefined;
|
|
16
|
+
return (<expo_image_1.Image source={source} recyclingKey={recyclingKey} cachePolicy="memory-disk" allowDownscaling priority={priority} placeholder={blurhash} placeholderContentFit="cover" contentFit="cover" transition={transition} style={[react_native_1.StyleSheet.absoluteFill, style]}/>);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** Pre-built renderer using `expo-image` and the default blurhash. */
|
|
20
|
+
exports.expoImageRenderer = createExpoImageRenderer();
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ExpoImageCollageOptions, ImageCollageProps, ImageCollageWithViewerProps } from "../types";
|
|
3
|
+
export { CollageImage, renderCollageImage } from "../CollageImage";
|
|
4
|
+
export { CollageTile } from "../CollageTile";
|
|
5
|
+
export { CollageWithViewer } from "../CollageWithViewer";
|
|
6
|
+
export { ImageCollage as ImageCollague } from "../ImageCollage";
|
|
7
|
+
export { ImageViewer, createDefaultViewerRenderer } from "../viewer/ImageViewer";
|
|
8
|
+
export { ImageCollageWithViewer as BaseImageCollageWithViewer } from "../viewer/ImageCollageWithViewer";
|
|
9
|
+
export type { CollageImageInput, CollageImageRenderProps, CollageImageRenderer, CollageViewerRenderProps, CollageViewerRenderer, CollageWithViewerProps, ExpoImageCollageOptions, ImageCollageProps, ImageCollageWithViewerProps, ImagePriority, ImageViewerImage, ImageViewerProps, NormalizedCollageImage, } from "../types";
|
|
10
|
+
export { ANDROID_RIPPLE, DEFAULT_BLURHASH, DEFAULT_BORDER_RADIUS, DEFAULT_LAYOUT_MAX_HEIGHT, DEFAULT_LAYOUT_MIN_HEIGHT, DEFAULT_MAX_VISIBLE_IMAGES, DEFAULT_PLACEHOLDER_BG, DEFAULT_PLACEHOLDER_COLOR, DEFAULT_SPACING, } from "../constants";
|
|
11
|
+
export { createExpoImageRenderer, expoImageRenderer, } from "./createExpoImageRenderer";
|
|
12
|
+
type ExpoCollageProps = ImageCollageProps & ExpoImageCollageOptions;
|
|
13
|
+
export declare function ImageCollage(props: ExpoCollageProps): React.JSX.Element;
|
|
14
|
+
export declare function ImageCollageWithViewer({ blurhash, prioritizeFirstImage, renderImage, getImagePriority, viewerProps, renderViewer, onImagePress, ...collageProps }: ImageCollageWithViewerProps & ExpoImageCollageOptions): React.JSX.Element;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/expo/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EACV,uBAAuB,EACvB,iBAAiB,EACjB,2BAA2B,EAE5B,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,sBAAsB,IAAI,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAExG,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,2BAA2B,EAC3B,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,KAAK,gBAAgB,GAAG,iBAAiB,GAAG,uBAAuB,CAAC;AAmBpE,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,qBAEnD;AAED,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,GAAG,YAAY,EAChB,EAAE,2BAA2B,GAAG,uBAAuB,qBAevD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.expoImageRenderer = exports.createExpoImageRenderer = exports.DEFAULT_SPACING = exports.DEFAULT_PLACEHOLDER_COLOR = exports.DEFAULT_PLACEHOLDER_BG = exports.DEFAULT_MAX_VISIBLE_IMAGES = exports.DEFAULT_LAYOUT_MIN_HEIGHT = exports.DEFAULT_LAYOUT_MAX_HEIGHT = exports.DEFAULT_BORDER_RADIUS = exports.DEFAULT_BLURHASH = exports.ANDROID_RIPPLE = exports.BaseImageCollageWithViewer = exports.createDefaultViewerRenderer = exports.ImageViewer = exports.ImageCollague = exports.CollageWithViewer = exports.CollageTile = exports.renderCollageImage = exports.CollageImage = void 0;
|
|
7
|
+
exports.ImageCollage = ImageCollage;
|
|
8
|
+
exports.ImageCollageWithViewer = ImageCollageWithViewer;
|
|
9
|
+
const react_1 = __importDefault(require("react"));
|
|
10
|
+
const ImageCollage_1 = require("../ImageCollage");
|
|
11
|
+
const ImageCollageWithViewer_1 = require("../viewer/ImageCollageWithViewer");
|
|
12
|
+
const createExpoImageRenderer_1 = require("./createExpoImageRenderer");
|
|
13
|
+
var CollageImage_1 = require("../CollageImage");
|
|
14
|
+
Object.defineProperty(exports, "CollageImage", { enumerable: true, get: function () { return CollageImage_1.CollageImage; } });
|
|
15
|
+
Object.defineProperty(exports, "renderCollageImage", { enumerable: true, get: function () { return CollageImage_1.renderCollageImage; } });
|
|
16
|
+
var CollageTile_1 = require("../CollageTile");
|
|
17
|
+
Object.defineProperty(exports, "CollageTile", { enumerable: true, get: function () { return CollageTile_1.CollageTile; } });
|
|
18
|
+
var CollageWithViewer_1 = require("../CollageWithViewer");
|
|
19
|
+
Object.defineProperty(exports, "CollageWithViewer", { enumerable: true, get: function () { return CollageWithViewer_1.CollageWithViewer; } });
|
|
20
|
+
var ImageCollage_2 = require("../ImageCollage");
|
|
21
|
+
Object.defineProperty(exports, "ImageCollague", { enumerable: true, get: function () { return ImageCollage_2.ImageCollage; } });
|
|
22
|
+
var ImageViewer_1 = require("../viewer/ImageViewer");
|
|
23
|
+
Object.defineProperty(exports, "ImageViewer", { enumerable: true, get: function () { return ImageViewer_1.ImageViewer; } });
|
|
24
|
+
Object.defineProperty(exports, "createDefaultViewerRenderer", { enumerable: true, get: function () { return ImageViewer_1.createDefaultViewerRenderer; } });
|
|
25
|
+
var ImageCollageWithViewer_2 = require("../viewer/ImageCollageWithViewer");
|
|
26
|
+
Object.defineProperty(exports, "BaseImageCollageWithViewer", { enumerable: true, get: function () { return ImageCollageWithViewer_2.ImageCollageWithViewer; } });
|
|
27
|
+
var constants_1 = require("../constants");
|
|
28
|
+
Object.defineProperty(exports, "ANDROID_RIPPLE", { enumerable: true, get: function () { return constants_1.ANDROID_RIPPLE; } });
|
|
29
|
+
Object.defineProperty(exports, "DEFAULT_BLURHASH", { enumerable: true, get: function () { return constants_1.DEFAULT_BLURHASH; } });
|
|
30
|
+
Object.defineProperty(exports, "DEFAULT_BORDER_RADIUS", { enumerable: true, get: function () { return constants_1.DEFAULT_BORDER_RADIUS; } });
|
|
31
|
+
Object.defineProperty(exports, "DEFAULT_LAYOUT_MAX_HEIGHT", { enumerable: true, get: function () { return constants_1.DEFAULT_LAYOUT_MAX_HEIGHT; } });
|
|
32
|
+
Object.defineProperty(exports, "DEFAULT_LAYOUT_MIN_HEIGHT", { enumerable: true, get: function () { return constants_1.DEFAULT_LAYOUT_MIN_HEIGHT; } });
|
|
33
|
+
Object.defineProperty(exports, "DEFAULT_MAX_VISIBLE_IMAGES", { enumerable: true, get: function () { return constants_1.DEFAULT_MAX_VISIBLE_IMAGES; } });
|
|
34
|
+
Object.defineProperty(exports, "DEFAULT_PLACEHOLDER_BG", { enumerable: true, get: function () { return constants_1.DEFAULT_PLACEHOLDER_BG; } });
|
|
35
|
+
Object.defineProperty(exports, "DEFAULT_PLACEHOLDER_COLOR", { enumerable: true, get: function () { return constants_1.DEFAULT_PLACEHOLDER_COLOR; } });
|
|
36
|
+
Object.defineProperty(exports, "DEFAULT_SPACING", { enumerable: true, get: function () { return constants_1.DEFAULT_SPACING; } });
|
|
37
|
+
var createExpoImageRenderer_2 = require("./createExpoImageRenderer");
|
|
38
|
+
Object.defineProperty(exports, "createExpoImageRenderer", { enumerable: true, get: function () { return createExpoImageRenderer_2.createExpoImageRenderer; } });
|
|
39
|
+
Object.defineProperty(exports, "expoImageRenderer", { enumerable: true, get: function () { return createExpoImageRenderer_2.expoImageRenderer; } });
|
|
40
|
+
function buildExpoCollageProps({ blurhash, prioritizeFirstImage = true, renderImage, getImagePriority, ...props }) {
|
|
41
|
+
return {
|
|
42
|
+
...props,
|
|
43
|
+
renderImage: renderImage ?? (0, createExpoImageRenderer_1.createExpoImageRenderer)({ blurhash }),
|
|
44
|
+
getImagePriority: getImagePriority ??
|
|
45
|
+
((index) => index === 0 && prioritizeFirstImage ? "high" : "normal"),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function ImageCollage(props) {
|
|
49
|
+
return <ImageCollage_1.ImageCollage {...buildExpoCollageProps(props)}/>;
|
|
50
|
+
}
|
|
51
|
+
function ImageCollageWithViewer({ blurhash, prioritizeFirstImage, renderImage, getImagePriority, viewerProps, renderViewer, onImagePress, ...collageProps }) {
|
|
52
|
+
return (<ImageCollageWithViewer_1.ImageCollageWithViewer {...buildExpoCollageProps({
|
|
53
|
+
...collageProps,
|
|
54
|
+
blurhash,
|
|
55
|
+
prioritizeFirstImage,
|
|
56
|
+
renderImage,
|
|
57
|
+
getImagePriority,
|
|
58
|
+
})} viewerProps={viewerProps} renderViewer={renderViewer} onImagePress={onImagePress}/>);
|
|
59
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type LayoutChangeEvent } from "react-native";
|
|
2
|
+
export declare function useContainerWidth({ width, horizontalInset, }: {
|
|
3
|
+
width?: number;
|
|
4
|
+
horizontalInset?: number;
|
|
5
|
+
}): {
|
|
6
|
+
containerWidth: number;
|
|
7
|
+
onLayout: (event: LayoutChangeEvent) => void;
|
|
8
|
+
isMeasured: boolean;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=useContainerWidth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useContainerWidth.d.ts","sourceRoot":"","sources":["../../src/hooks/useContainerWidth.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE3E,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,eAAmB,GACpB,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;;sBAIsC,iBAAiB;;EAevD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useContainerWidth = useContainerWidth;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const react_native_1 = require("react-native");
|
|
6
|
+
function useContainerWidth({ width, horizontalInset = 0, }) {
|
|
7
|
+
const { width: windowWidth } = (0, react_native_1.useWindowDimensions)();
|
|
8
|
+
const [measuredWidth, setMeasuredWidth] = (0, react_1.useState)(null);
|
|
9
|
+
const onLayout = (0, react_1.useCallback)((event) => {
|
|
10
|
+
const nextWidth = event.nativeEvent.layout.width;
|
|
11
|
+
if (nextWidth > 0) {
|
|
12
|
+
setMeasuredWidth(nextWidth);
|
|
13
|
+
}
|
|
14
|
+
}, []);
|
|
15
|
+
const fallbackWidth = Math.max(0, windowWidth - horizontalInset);
|
|
16
|
+
const containerWidth = width ?? measuredWidth ?? fallbackWidth;
|
|
17
|
+
return {
|
|
18
|
+
containerWidth,
|
|
19
|
+
onLayout,
|
|
20
|
+
isMeasured: measuredWidth != null,
|
|
21
|
+
};
|
|
22
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { ImageCollage } from "./ImageCollage";
|
|
2
|
+
export { CollageWithViewer } from "./CollageWithViewer";
|
|
3
|
+
export { CollageImage, renderCollageImage } from "./CollageImage";
|
|
4
|
+
export { CollageTile } from "./CollageTile";
|
|
5
|
+
/** @deprecated Use `ImageCollage` instead. Kept for backwards compatibility. */
|
|
6
|
+
export { ImageCollage as ImageCollague } from "./ImageCollage";
|
|
7
|
+
export type { CollageImageInput, CollageImageRenderProps, CollageImageRenderer, CollageViewerRenderProps, CollageViewerRenderer, CollageWithViewerProps, ImageCollageProps, ImagePriority, NormalizedCollageImage, } from "./types";
|
|
8
|
+
export { DEFAULT_PLACEHOLDER_COLOR, DEFAULT_PLACEHOLDER_BG, DEFAULT_SPACING, DEFAULT_BORDER_RADIUS, DEFAULT_LAYOUT_MIN_HEIGHT, DEFAULT_LAYOUT_MAX_HEIGHT, DEFAULT_MAX_VISIBLE_IMAGES, ANDROID_RIPPLE, } from "./constants";
|
|
9
|
+
export { normalizeImageInput, normalizeImages, measureImageAspectRatio, resolveImagesWithAspectRatios, toViewerImages, getRemoteUri, } from "./utils/imageSources";
|
|
10
|
+
export { computeLayoutHeight } from "./utils/layoutHeight";
|
|
11
|
+
export { useContainerWidth } from "./hooks/useContainerWidth";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,gFAAgF;AAChF,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/D,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,sBAAsB,GACvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACvB,6BAA6B,EAC7B,cAAc,EACd,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
|