zkit-ui 2.0.4 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/android/build.gradle +100 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewLayoutSupport.java +450 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewMediaItem.java +36 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewModule.kt +43 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewPagerAdapter.java +140 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewSharedElementGeometry.java +25 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewSharedElementNames.java +39 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewSharedElementState.java +25 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewSourceViewRegistry.java +115 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewTransitionSnapshotView.java +60 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewVideoPlayerView.java +338 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewView.kt +305 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewViewerOverlayView.java +636 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewViewerPageView.java +357 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewViewerTransitionController.java +223 -0
- package/android/src/main/res/layout/native_image_preview_player_view.xml +9 -0
- package/dist/all.d.ts +2 -0
- package/dist/all.d.ts.map +1 -1
- package/dist/all.js +24 -22
- package/dist/ui/NativeImagePreview/NativeImagePreview.d.ts +3 -0
- package/dist/ui/NativeImagePreview/NativeImagePreview.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/NativeImagePreview.js +99 -0
- package/dist/ui/NativeImagePreview/NativeImagePreview.web.d.ts +4 -0
- package/dist/ui/NativeImagePreview/NativeImagePreview.web.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/NativeImagePreview.web.js +150 -0
- package/dist/ui/NativeImagePreview/context.d.ts +14 -0
- package/dist/ui/NativeImagePreview/context.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/context.js +38 -0
- package/dist/ui/NativeImagePreview/index.d.ts +3 -0
- package/dist/ui/NativeImagePreview/index.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/index.js +5 -0
- package/dist/ui/NativeImagePreview/types.d.ts +68 -0
- package/dist/ui/NativeImagePreview/types.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/types.js +2 -0
- package/dist/ui/NativeImagePreview/utils.d.ts +8 -0
- package/dist/ui/NativeImagePreview/utils.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/utils.js +83 -0
- package/dist/ui/NativeImagePreview/web/geometry.d.ts +20 -0
- package/dist/ui/NativeImagePreview/web/geometry.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/web/geometry.js +121 -0
- package/dist/ui/NativeImagePreview/web/media.d.ts +6 -0
- package/dist/ui/NativeImagePreview/web/media.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/web/media.js +90 -0
- package/dist/ui/NativeImagePreview/web/styles.css +137 -0
- package/dist/ui/NativeImagePreview/web/transition.d.ts +15 -0
- package/dist/ui/NativeImagePreview/web/transition.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/web/transition.js +77 -0
- package/dist/ui/NativeImagePreview/web/types.d.ts +74 -0
- package/dist/ui/NativeImagePreview/web/types.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/web/types.js +3 -0
- package/dist/ui/NativeImagePreview/web/viewer.d.ts +104 -0
- package/dist/ui/NativeImagePreview/web/viewer.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/web/viewer.js +894 -0
- package/expo-module.config.json +11 -0
- package/ios/NativeImagePreview/NativeImagePreviewImageLoader.swift +73 -0
- package/ios/NativeImagePreview/NativeImagePreviewImageViewInteraction.swift +245 -0
- package/ios/NativeImagePreview/NativeImagePreviewLayoutSupport.swift +143 -0
- package/ios/NativeImagePreview/NativeImagePreviewMedia.swift +28 -0
- package/ios/NativeImagePreview/NativeImagePreviewSourceViewRegistry.swift +80 -0
- package/ios/NativeImagePreview/NativeImagePreviewVideoPlayerView.swift +437 -0
- package/ios/NativeImagePreview/NativeImagePreviewViewerConfiguration.swift +51 -0
- package/ios/NativeImagePreview/NativeImagePreviewViewerController.swift +745 -0
- package/ios/NativeImagePreview/NativeImagePreviewViewerPageView.swift +623 -0
- package/ios/NativeImagePreview/NativeImagePreviewViewerTransitionCoordinator.swift +312 -0
- package/ios/NativeImagePreviewModule.swift +46 -0
- package/ios/NativeImagePreviewView.swift +252 -0
- package/package.json +16 -2
- package/src/all.ts +18 -0
- package/src/services/ImagePreviewService/README.md +19 -0
- package/src/types.d.ts +1 -0
- package/src/ui/NativeImagePreview/NativeImagePreview.tsx +146 -0
- package/src/ui/NativeImagePreview/NativeImagePreview.web.tsx +201 -0
- package/src/ui/NativeImagePreview/README.md +111 -0
- package/src/ui/NativeImagePreview/context.tsx +22 -0
- package/src/ui/NativeImagePreview/index.tsx +18 -0
- package/src/ui/NativeImagePreview/types.ts +94 -0
- package/src/ui/NativeImagePreview/utils.ts +108 -0
- package/src/ui/NativeImagePreview/web/geometry.ts +134 -0
- package/src/ui/NativeImagePreview/web/media.ts +91 -0
- package/src/ui/NativeImagePreview/web/styles.css +137 -0
- package/src/ui/NativeImagePreview/web/transition.ts +111 -0
- package/src/ui/NativeImagePreview/web/types.ts +88 -0
- package/src/ui/NativeImagePreview/web/viewer.ts +1024 -0
- package/zkit-ui.podspec +13 -1
package/dist/all.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.ImagePreviewProvider = exports.ImagePreview = exports.imagePreview = exports.PermissionPurposeDialogProvider = exports.permissionPurposeDialog = exports.LoadingProvider = exports.loading = exports.ActionDialogProvider = void 0;
|
|
3
|
+
exports.ActionDialog = exports.ToastProvider = exports.toast = exports.PickerServiceProvider = exports.pickerService = exports.ZKitCoreProvider = exports.ZKitProvider = exports.useI18n = exports.I18nProvider = exports.resolveSystemBuiltinLocale = exports.resolveBuiltinLocale = exports.DEFAULT_I18N_LOCALE = exports.BUILTIN_I18N_LOCALES = exports.configureZKit = exports.useTheme = exports.ThemeProvider = exports.NativeImagePreview = exports.LinkedScroll = exports.RadioIndicator = exports.RadioGroup = exports.Radio = exports.SliderCaptcha = exports.Switch = exports.DatePicker = exports.AddressCascader = exports.WHEEL_VISIBLE_ITEMS = exports.WHEEL_VIEWPORT_HEIGHT = exports.WHEEL_ITEM_HEIGHT = exports.WHEEL_AREA_VERTICAL_INSET = exports.WHEEL_AREA_HEIGHT = exports.WheelColumn = exports.Picker = exports.BetweenTime = exports.AccordionTrigger = exports.AccordionItem = exports.AccordionIndicator = exports.AccordionContent = exports.Accordion = exports.SheetHeader = exports.SheetFooter = exports.SheetContent = exports.Sheet = exports.TextInputPrimitive = exports.TextInput = exports.Text = exports.CheckboxIndicator = exports.CheckboxGroup = exports.Checkbox = exports.LoadingSpinner = exports.Button = void 0;
|
|
4
|
+
exports.ImagePreviewProvider = exports.ImagePreview = exports.imagePreview = exports.PermissionPurposeDialogProvider = exports.permissionPurposeDialog = exports.LoadingProvider = exports.loading = exports.ActionDialogProvider = exports.actionDialog = void 0;
|
|
5
5
|
var index_1 = require("./ui/Button/index");
|
|
6
6
|
Object.defineProperty(exports, "Button", { enumerable: true, get: function () { return index_1.Button; } });
|
|
7
7
|
var index_2 = require("./ui/LoadingSpinner/index");
|
|
@@ -51,6 +51,8 @@ Object.defineProperty(exports, "RadioGroup", { enumerable: true, get: function (
|
|
|
51
51
|
Object.defineProperty(exports, "RadioIndicator", { enumerable: true, get: function () { return index_15.RadioIndicator; } });
|
|
52
52
|
var index_16 = require("./ui/LinkedScroll/index");
|
|
53
53
|
Object.defineProperty(exports, "LinkedScroll", { enumerable: true, get: function () { return index_16.LinkedScroll; } });
|
|
54
|
+
var index_17 = require("./ui/NativeImagePreview/index");
|
|
55
|
+
Object.defineProperty(exports, "NativeImagePreview", { enumerable: true, get: function () { return index_17.NativeImagePreview; } });
|
|
54
56
|
var ThemeProvider_1 = require("./theme/ThemeProvider");
|
|
55
57
|
Object.defineProperty(exports, "ThemeProvider", { enumerable: true, get: function () { return ThemeProvider_1.ThemeProvider; } });
|
|
56
58
|
var useTheme_1 = require("./theme/useTheme");
|
|
@@ -70,23 +72,23 @@ var ZKitProvider_1 = require("./ZKitProvider");
|
|
|
70
72
|
Object.defineProperty(exports, "ZKitProvider", { enumerable: true, get: function () { return ZKitProvider_1.ZKitProvider; } });
|
|
71
73
|
var ZKitCoreProvider_1 = require("./ZKitCoreProvider");
|
|
72
74
|
Object.defineProperty(exports, "ZKitCoreProvider", { enumerable: true, get: function () { return ZKitCoreProvider_1.ZKitCoreProvider; } });
|
|
73
|
-
var
|
|
74
|
-
Object.defineProperty(exports, "pickerService", { enumerable: true, get: function () { return
|
|
75
|
-
Object.defineProperty(exports, "PickerServiceProvider", { enumerable: true, get: function () { return
|
|
76
|
-
var
|
|
77
|
-
Object.defineProperty(exports, "toast", { enumerable: true, get: function () { return
|
|
78
|
-
Object.defineProperty(exports, "ToastProvider", { enumerable: true, get: function () { return
|
|
79
|
-
var
|
|
80
|
-
Object.defineProperty(exports, "ActionDialog", { enumerable: true, get: function () { return
|
|
81
|
-
Object.defineProperty(exports, "actionDialog", { enumerable: true, get: function () { return
|
|
82
|
-
Object.defineProperty(exports, "ActionDialogProvider", { enumerable: true, get: function () { return
|
|
83
|
-
var
|
|
84
|
-
Object.defineProperty(exports, "loading", { enumerable: true, get: function () { return
|
|
85
|
-
Object.defineProperty(exports, "LoadingProvider", { enumerable: true, get: function () { return
|
|
86
|
-
var
|
|
87
|
-
Object.defineProperty(exports, "permissionPurposeDialog", { enumerable: true, get: function () { return
|
|
88
|
-
Object.defineProperty(exports, "PermissionPurposeDialogProvider", { enumerable: true, get: function () { return
|
|
89
|
-
var
|
|
90
|
-
Object.defineProperty(exports, "imagePreview", { enumerable: true, get: function () { return
|
|
91
|
-
Object.defineProperty(exports, "ImagePreview", { enumerable: true, get: function () { return
|
|
92
|
-
Object.defineProperty(exports, "ImagePreviewProvider", { enumerable: true, get: function () { return
|
|
75
|
+
var index_18 = require("./services/PickerService/index");
|
|
76
|
+
Object.defineProperty(exports, "pickerService", { enumerable: true, get: function () { return index_18.pickerService; } });
|
|
77
|
+
Object.defineProperty(exports, "PickerServiceProvider", { enumerable: true, get: function () { return index_18.PickerServiceProvider; } });
|
|
78
|
+
var index_19 = require("./services/CardToastService/index");
|
|
79
|
+
Object.defineProperty(exports, "toast", { enumerable: true, get: function () { return index_19.toast; } });
|
|
80
|
+
Object.defineProperty(exports, "ToastProvider", { enumerable: true, get: function () { return index_19.ToastProvider; } });
|
|
81
|
+
var index_20 = require("./services/ActionDialogService/index");
|
|
82
|
+
Object.defineProperty(exports, "ActionDialog", { enumerable: true, get: function () { return index_20.ActionDialog; } });
|
|
83
|
+
Object.defineProperty(exports, "actionDialog", { enumerable: true, get: function () { return index_20.actionDialog; } });
|
|
84
|
+
Object.defineProperty(exports, "ActionDialogProvider", { enumerable: true, get: function () { return index_20.ActionDialogProvider; } });
|
|
85
|
+
var index_21 = require("./services/LoadingService/index");
|
|
86
|
+
Object.defineProperty(exports, "loading", { enumerable: true, get: function () { return index_21.loading; } });
|
|
87
|
+
Object.defineProperty(exports, "LoadingProvider", { enumerable: true, get: function () { return index_21.LoadingProvider; } });
|
|
88
|
+
var index_22 = require("./services/PermissionPurposeDialogService/index");
|
|
89
|
+
Object.defineProperty(exports, "permissionPurposeDialog", { enumerable: true, get: function () { return index_22.permissionPurposeDialog; } });
|
|
90
|
+
Object.defineProperty(exports, "PermissionPurposeDialogProvider", { enumerable: true, get: function () { return index_22.PermissionPurposeDialogProvider; } });
|
|
91
|
+
var index_23 = require("./services/ImagePreviewService/index");
|
|
92
|
+
Object.defineProperty(exports, "imagePreview", { enumerable: true, get: function () { return index_23.imagePreview; } });
|
|
93
|
+
Object.defineProperty(exports, "ImagePreview", { enumerable: true, get: function () { return index_23.ImagePreview; } });
|
|
94
|
+
Object.defineProperty(exports, "ImagePreviewProvider", { enumerable: true, get: function () { return index_23.ImagePreviewProvider; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeImagePreview.d.ts","sourceRoot":"","sources":["../../../src/ui/NativeImagePreview/NativeImagePreview.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,2BAA2B,EAI5B,MAAM,SAAS,CAAC;AAgIjB,eAAO,MAAM,kBAAkB,EAEzB,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
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.NativeImagePreview = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const expo_1 = require("expo");
|
|
39
|
+
const React = __importStar(require("react"));
|
|
40
|
+
const react_native_1 = require("react-native");
|
|
41
|
+
const react_native_is_edge_to_edge_1 = require("react-native-is-edge-to-edge");
|
|
42
|
+
const context_1 = require("./context");
|
|
43
|
+
const utils_1 = require("./utils");
|
|
44
|
+
const NativePreviewView = (0, expo_1.requireNativeView)('ZKitNativeImagePreview');
|
|
45
|
+
const ANDROID_EDGE_TO_EDGE = react_native_1.Platform.OS === 'android' ? (0, react_native_is_edge_to_edge_1.isEdgeToEdge)() : false;
|
|
46
|
+
function createPreviewGroupId() {
|
|
47
|
+
return `zkit-native-image-preview-${Date.now().toString(36)}-${Math.random()
|
|
48
|
+
.toString(36)
|
|
49
|
+
.slice(2, 10)}`;
|
|
50
|
+
}
|
|
51
|
+
const NativeImagePreviewRoot = React.memo(function NativeImagePreview({ children, colorScheme = 'dark', disabled = false, edgeToEdge = false, items, nativeProps, onChange, }) {
|
|
52
|
+
const systemColorScheme = (0, react_native_1.useColorScheme)();
|
|
53
|
+
const previewGroupIdRef = React.useRef(null);
|
|
54
|
+
if (previewGroupIdRef.current == null) {
|
|
55
|
+
previewGroupIdRef.current = createPreviewGroupId();
|
|
56
|
+
}
|
|
57
|
+
const resolvedItems = React.useMemo(() => (0, utils_1.normalizeNativeImagePreviewItems)(items), [items]);
|
|
58
|
+
const nativeItems = React.useMemo(() => (0, utils_1.toNativePreviewItems)(resolvedItems), [resolvedItems]);
|
|
59
|
+
const resolvedColorScheme = (0, utils_1.resolveNativeImagePreviewColorScheme)(colorScheme, systemColorScheme);
|
|
60
|
+
const contextValue = React.useMemo(() => ({
|
|
61
|
+
previewGroupId: previewGroupIdRef.current,
|
|
62
|
+
items: resolvedItems,
|
|
63
|
+
nativeItems,
|
|
64
|
+
colorScheme: resolvedColorScheme,
|
|
65
|
+
disabled,
|
|
66
|
+
edgeToEdge,
|
|
67
|
+
nativeProps,
|
|
68
|
+
onChange,
|
|
69
|
+
}), [disabled, edgeToEdge, nativeItems, nativeProps, onChange, resolvedColorScheme, resolvedItems]);
|
|
70
|
+
return ((0, jsx_runtime_1.jsx)(context_1.NativeImagePreviewContext.Provider, { value: contextValue, children: children }));
|
|
71
|
+
});
|
|
72
|
+
const NativeImagePreviewItem = React.memo(function NativeImagePreviewItem({ children, disabled = false, index, onChange, style, }) {
|
|
73
|
+
var _a;
|
|
74
|
+
const context = React.useContext(context_1.NativeImagePreviewContext);
|
|
75
|
+
const handleIndexChange = React.useCallback((event) => {
|
|
76
|
+
var _a, _b;
|
|
77
|
+
if (!context)
|
|
78
|
+
return;
|
|
79
|
+
const value = event.nativeEvent.currentIndex;
|
|
80
|
+
const meta = {
|
|
81
|
+
reason: 'swipe',
|
|
82
|
+
item: (_a = context.items[value]) !== null && _a !== void 0 ? _a : null,
|
|
83
|
+
nativeEvent: event,
|
|
84
|
+
};
|
|
85
|
+
(_b = context.onChange) === null || _b === void 0 ? void 0 : _b.call(context, value, meta);
|
|
86
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(value, meta);
|
|
87
|
+
}, [context, onChange]);
|
|
88
|
+
if (!context || context.disabled || disabled || context.nativeItems.length === 0) {
|
|
89
|
+
return (0, jsx_runtime_1.jsx)(react_native_1.View, { style: style, children: children });
|
|
90
|
+
}
|
|
91
|
+
const resolvedEdgeToEdge = ANDROID_EDGE_TO_EDGE || context.edgeToEdge;
|
|
92
|
+
if (__DEV__ && react_native_1.Platform.OS === 'android') {
|
|
93
|
+
(0, react_native_is_edge_to_edge_1.controlEdgeToEdgeValues)({ edgeToEdge: resolvedEdgeToEdge });
|
|
94
|
+
}
|
|
95
|
+
return ((0, jsx_runtime_1.jsx)(NativePreviewView, { closeIconName: (_a = context.nativeProps) === null || _a === void 0 ? void 0 : _a.iosCloseIconName, edgeToEdge: resolvedEdgeToEdge, previewGroupId: context.previewGroupId, index: (0, utils_1.clampPreviewIndex)(index, context.nativeItems.length), items: context.nativeItems, onIndexChange: handleIndexChange, style: style, theme: context.colorScheme, children: children }));
|
|
96
|
+
});
|
|
97
|
+
exports.NativeImagePreview = Object.assign(NativeImagePreviewRoot, {
|
|
98
|
+
Item: NativeImagePreviewItem,
|
|
99
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeImagePreview.web.d.ts","sourceRoot":"","sources":["../../../src/ui/NativeImagePreview/NativeImagePreview.web.tsx"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,CAAC;AAK1B,OAAO,KAAK,EAEV,2BAA2B,EAI5B,MAAM,SAAS,CAAC;AAyLjB,eAAO,MAAM,kBAAkB,EAEzB,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
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.NativeImagePreview = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
/// <reference lib="dom" />
|
|
39
|
+
require("./web/styles.css");
|
|
40
|
+
const React = __importStar(require("react"));
|
|
41
|
+
const react_native_1 = require("react-native");
|
|
42
|
+
const utils_1 = require("./utils");
|
|
43
|
+
const viewer_1 = require("./web/viewer");
|
|
44
|
+
const NativeImagePreviewWebContext = React.createContext(null);
|
|
45
|
+
const WebView = react_native_1.View;
|
|
46
|
+
function toWebPreviewItems(items) {
|
|
47
|
+
return items.map(({ alt, height, id, poster, type, url, width }) => ({
|
|
48
|
+
alt: alt !== null && alt !== void 0 ? alt : id,
|
|
49
|
+
height,
|
|
50
|
+
id,
|
|
51
|
+
poster,
|
|
52
|
+
type,
|
|
53
|
+
url,
|
|
54
|
+
width,
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
function findPreviewSourceElement(element) {
|
|
58
|
+
var _a;
|
|
59
|
+
if (!element)
|
|
60
|
+
return null;
|
|
61
|
+
if (element instanceof HTMLImageElement || element instanceof HTMLVideoElement) {
|
|
62
|
+
return element;
|
|
63
|
+
}
|
|
64
|
+
return (_a = element.querySelector('img, video')) !== null && _a !== void 0 ? _a : element;
|
|
65
|
+
}
|
|
66
|
+
function toChangeMeta(meta, items) {
|
|
67
|
+
var _a;
|
|
68
|
+
return {
|
|
69
|
+
reason: meta.reason,
|
|
70
|
+
item: (_a = items[meta.index]) !== null && _a !== void 0 ? _a : null,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const NativeImagePreviewRoot = React.memo(function NativeImagePreview({ children, colorScheme = 'dark', disabled = false, items, onChange, }) {
|
|
74
|
+
const systemColorScheme = (0, react_native_1.useColorScheme)();
|
|
75
|
+
const controllerRef = React.useRef(null);
|
|
76
|
+
const sourceElementsRef = React.useRef([]);
|
|
77
|
+
const resolvedItems = React.useMemo(() => (0, utils_1.normalizeNativeImagePreviewItems)(items), [items]);
|
|
78
|
+
const webItems = React.useMemo(() => toWebPreviewItems(resolvedItems), [resolvedItems]);
|
|
79
|
+
const resolvedColorScheme = (0, utils_1.resolveNativeImagePreviewColorScheme)(colorScheme, systemColorScheme);
|
|
80
|
+
React.useEffect(() => {
|
|
81
|
+
const controller = (0, viewer_1.createNativeImagePreviewWeb)();
|
|
82
|
+
controllerRef.current = controller;
|
|
83
|
+
return () => {
|
|
84
|
+
controller.destroy();
|
|
85
|
+
controllerRef.current = null;
|
|
86
|
+
};
|
|
87
|
+
}, []);
|
|
88
|
+
const open = React.useCallback((index, onItemChange) => {
|
|
89
|
+
var _a, _b;
|
|
90
|
+
const controller = controllerRef.current;
|
|
91
|
+
if (disabled || !controller || webItems.length === 0)
|
|
92
|
+
return;
|
|
93
|
+
const value = (0, utils_1.clampPreviewIndex)(index, webItems.length);
|
|
94
|
+
const getSourceElement = (nextIndex) => { var _a; return findPreviewSourceElement((_a = sourceElementsRef.current[nextIndex]) !== null && _a !== void 0 ? _a : null); };
|
|
95
|
+
void controller.open({
|
|
96
|
+
getSourceElement,
|
|
97
|
+
index: value,
|
|
98
|
+
items: webItems,
|
|
99
|
+
objectFit: 'cover',
|
|
100
|
+
sourceElement: getSourceElement(value),
|
|
101
|
+
sourceImageSize: resolvedItems[value]
|
|
102
|
+
? {
|
|
103
|
+
width: (_a = resolvedItems[value].width) !== null && _a !== void 0 ? _a : 0,
|
|
104
|
+
height: (_b = resolvedItems[value].height) !== null && _b !== void 0 ? _b : 0,
|
|
105
|
+
}
|
|
106
|
+
: null,
|
|
107
|
+
sourceObjectFit: 'cover',
|
|
108
|
+
sourceVisibility: 'hidden',
|
|
109
|
+
theme: resolvedColorScheme,
|
|
110
|
+
onChange: (nextValue, meta) => {
|
|
111
|
+
const changeMeta = toChangeMeta(meta, resolvedItems);
|
|
112
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, changeMeta);
|
|
113
|
+
onItemChange === null || onItemChange === void 0 ? void 0 : onItemChange(nextValue, changeMeta);
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
}, [disabled, onChange, resolvedColorScheme, resolvedItems, webItems]);
|
|
117
|
+
const contextValue = React.useMemo(() => ({
|
|
118
|
+
disabled,
|
|
119
|
+
items: resolvedItems,
|
|
120
|
+
open,
|
|
121
|
+
sourceElementsRef,
|
|
122
|
+
}), [disabled, open, resolvedItems]);
|
|
123
|
+
return ((0, jsx_runtime_1.jsx)(NativeImagePreviewWebContext.Provider, { value: contextValue, children: children }));
|
|
124
|
+
});
|
|
125
|
+
const NativeImagePreviewItem = React.memo(function NativeImagePreviewItem({ children, disabled = false, index, onChange, style, }) {
|
|
126
|
+
const context = React.useContext(NativeImagePreviewWebContext);
|
|
127
|
+
const sourceRef = React.useCallback((node) => {
|
|
128
|
+
if (!context)
|
|
129
|
+
return;
|
|
130
|
+
context.sourceElementsRef.current[index] = node;
|
|
131
|
+
}, [context, index]);
|
|
132
|
+
const itemDisabled = !context || context.disabled || disabled || context.items.length === 0;
|
|
133
|
+
const open = React.useCallback(() => {
|
|
134
|
+
if (itemDisabled)
|
|
135
|
+
return;
|
|
136
|
+
context.open(index, onChange);
|
|
137
|
+
}, [context, index, itemDisabled, onChange]);
|
|
138
|
+
const handleKeyDown = React.useCallback((event) => {
|
|
139
|
+
if (itemDisabled)
|
|
140
|
+
return;
|
|
141
|
+
if (event.key !== 'Enter' && event.key !== ' ')
|
|
142
|
+
return;
|
|
143
|
+
event.preventDefault();
|
|
144
|
+
open();
|
|
145
|
+
}, [itemDisabled, open]);
|
|
146
|
+
return ((0, jsx_runtime_1.jsx)(WebView, { ref: sourceRef, "aria-label": itemDisabled ? undefined : 'Open image preview', onClick: itemDisabled ? undefined : open, onKeyDown: itemDisabled ? undefined : handleKeyDown, role: itemDisabled ? undefined : 'button', style: style, tabIndex: itemDisabled ? undefined : 0, children: children }));
|
|
147
|
+
});
|
|
148
|
+
exports.NativeImagePreview = Object.assign(NativeImagePreviewRoot, {
|
|
149
|
+
Item: NativeImagePreviewItem,
|
|
150
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { NativeImagePreviewChangeMeta, NativeImagePreviewNativeItem, NativeImagePreviewNativeProps, NativeImagePreviewResolvedItem, NativeImagePreviewResolvedColorScheme } from './types';
|
|
3
|
+
export type NativeImagePreviewContextValue = {
|
|
4
|
+
previewGroupId: string;
|
|
5
|
+
items: readonly NativeImagePreviewResolvedItem[];
|
|
6
|
+
nativeItems: readonly NativeImagePreviewNativeItem[];
|
|
7
|
+
colorScheme: NativeImagePreviewResolvedColorScheme;
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
edgeToEdge: boolean;
|
|
10
|
+
nativeProps?: NativeImagePreviewNativeProps;
|
|
11
|
+
onChange?: (value: number, meta: NativeImagePreviewChangeMeta) => void;
|
|
12
|
+
};
|
|
13
|
+
export declare const NativeImagePreviewContext: React.Context<NativeImagePreviewContextValue | null>;
|
|
14
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/ui/NativeImagePreview/context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EACV,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,qCAAqC,EACtC,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,8BAA8B,GAAG;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACjD,WAAW,EAAE,SAAS,4BAA4B,EAAE,CAAC;IACrD,WAAW,EAAE,qCAAqC,CAAC;IACnD,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,6BAA6B,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,KAAK,IAAI,CAAC;CACxE,CAAC;AAEF,eAAO,MAAM,yBAAyB,sDAC4B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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.NativeImagePreviewContext = void 0;
|
|
37
|
+
const React = __importStar(require("react"));
|
|
38
|
+
exports.NativeImagePreviewContext = React.createContext(null);
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { NativeImagePreview } from './NativeImagePreview';
|
|
2
|
+
export type { NativeImagePreviewChangeEvent, NativeImagePreviewChangeEventPayload, NativeImagePreviewChangeMeta, NativeImagePreviewChangeReason, NativeImagePreviewColorScheme, NativeImagePreviewComponent, NativeImagePreviewItem, NativeImagePreviewItemDescriptor, NativeImagePreviewItemProps, NativeImagePreviewMediaType, NativeImagePreviewNativeProps, NativeImagePreviewProps, NativeImagePreviewResolvedItem, NativeImagePreviewResolvedColorScheme, NativeImagePreviewSource, } from './types';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/NativeImagePreview/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,6BAA6B,EAC7B,oCAAoC,EACpC,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAC3B,sBAAsB,EACtB,gCAAgC,EAChC,2BAA2B,EAC3B,2BAA2B,EAC3B,6BAA6B,EAC7B,uBAAuB,EACvB,8BAA8B,EAC9B,qCAAqC,EACrC,wBAAwB,GACzB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NativeImagePreview = void 0;
|
|
4
|
+
var NativeImagePreview_1 = require("./NativeImagePreview");
|
|
5
|
+
Object.defineProperty(exports, "NativeImagePreview", { enumerable: true, get: function () { return NativeImagePreview_1.NativeImagePreview; } });
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type * as React from 'react';
|
|
2
|
+
import type { ImageSourcePropType, NativeSyntheticEvent, StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
export type NativeImagePreviewResolvedColorScheme = 'dark' | 'light';
|
|
4
|
+
export type NativeImagePreviewColorScheme = NativeImagePreviewResolvedColorScheme | 'system';
|
|
5
|
+
export type NativeImagePreviewMediaType = 'image' | 'video';
|
|
6
|
+
export type NativeImagePreviewSource = ImageSourcePropType | string;
|
|
7
|
+
export type NativeImagePreviewItemDescriptor = {
|
|
8
|
+
id?: string;
|
|
9
|
+
alt?: string;
|
|
10
|
+
type?: NativeImagePreviewMediaType;
|
|
11
|
+
url?: string;
|
|
12
|
+
source?: NativeImagePreviewSource;
|
|
13
|
+
poster?: NativeImagePreviewSource;
|
|
14
|
+
width?: number;
|
|
15
|
+
height?: number;
|
|
16
|
+
};
|
|
17
|
+
export type NativeImagePreviewItem = NativeImagePreviewSource | NativeImagePreviewItemDescriptor;
|
|
18
|
+
export type NativeImagePreviewResolvedItem = {
|
|
19
|
+
id: string;
|
|
20
|
+
type: NativeImagePreviewMediaType;
|
|
21
|
+
url: string;
|
|
22
|
+
poster?: string;
|
|
23
|
+
width?: number;
|
|
24
|
+
height?: number;
|
|
25
|
+
alt?: string;
|
|
26
|
+
raw: NativeImagePreviewItem;
|
|
27
|
+
};
|
|
28
|
+
export type NativeImagePreviewNativeItem = {
|
|
29
|
+
id: string;
|
|
30
|
+
type: NativeImagePreviewMediaType;
|
|
31
|
+
url: string;
|
|
32
|
+
poster?: string;
|
|
33
|
+
width?: number;
|
|
34
|
+
height?: number;
|
|
35
|
+
};
|
|
36
|
+
export type NativeImagePreviewChangeReason = 'api' | 'swipe';
|
|
37
|
+
export type NativeImagePreviewChangeEventPayload = {
|
|
38
|
+
currentIndex: number;
|
|
39
|
+
};
|
|
40
|
+
export type NativeImagePreviewChangeEvent = NativeSyntheticEvent<NativeImagePreviewChangeEventPayload>;
|
|
41
|
+
export type NativeImagePreviewChangeMeta = {
|
|
42
|
+
reason: NativeImagePreviewChangeReason;
|
|
43
|
+
item: NativeImagePreviewResolvedItem | null;
|
|
44
|
+
nativeEvent?: NativeImagePreviewChangeEvent;
|
|
45
|
+
};
|
|
46
|
+
export type NativeImagePreviewNativeProps = {
|
|
47
|
+
iosCloseIconName?: string;
|
|
48
|
+
};
|
|
49
|
+
export type NativeImagePreviewProps = {
|
|
50
|
+
items: readonly NativeImagePreviewItem[];
|
|
51
|
+
children: React.ReactNode;
|
|
52
|
+
colorScheme?: NativeImagePreviewColorScheme;
|
|
53
|
+
disabled?: boolean;
|
|
54
|
+
edgeToEdge?: boolean;
|
|
55
|
+
nativeProps?: NativeImagePreviewNativeProps;
|
|
56
|
+
onChange?: (value: number, meta: NativeImagePreviewChangeMeta) => void;
|
|
57
|
+
};
|
|
58
|
+
export type NativeImagePreviewItemProps = {
|
|
59
|
+
index: number;
|
|
60
|
+
children: React.ReactElement;
|
|
61
|
+
disabled?: boolean;
|
|
62
|
+
style?: StyleProp<ViewStyle>;
|
|
63
|
+
onChange?: (value: number, meta: NativeImagePreviewChangeMeta) => void;
|
|
64
|
+
};
|
|
65
|
+
export type NativeImagePreviewComponent = React.MemoExoticComponent<(props: NativeImagePreviewProps) => React.ReactElement> & {
|
|
66
|
+
Item: React.MemoExoticComponent<(props: NativeImagePreviewItemProps) => React.ReactElement>;
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/NativeImagePreview/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ColorSchemeName } from 'react-native';
|
|
2
|
+
import type { NativeImagePreviewColorScheme, NativeImagePreviewItem, NativeImagePreviewNativeItem, NativeImagePreviewResolvedItem, NativeImagePreviewResolvedColorScheme, NativeImagePreviewSource } from './types';
|
|
3
|
+
export declare function resolvePreviewSourceUri(source: NativeImagePreviewSource | undefined): string | undefined;
|
|
4
|
+
export declare function normalizeNativeImagePreviewItems(items: readonly NativeImagePreviewItem[]): NativeImagePreviewResolvedItem[];
|
|
5
|
+
export declare function toNativePreviewItems(items: readonly NativeImagePreviewResolvedItem[]): NativeImagePreviewNativeItem[];
|
|
6
|
+
export declare function clampPreviewIndex(index: number, length: number): number;
|
|
7
|
+
export declare function resolveNativeImagePreviewColorScheme(colorScheme: NativeImagePreviewColorScheme | undefined, systemColorScheme: ColorSchemeName): NativeImagePreviewResolvedColorScheme;
|
|
8
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/ui/NativeImagePreview/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,6BAA6B,EAC7B,sBAAsB,EAEtB,4BAA4B,EAC5B,8BAA8B,EAC9B,qCAAqC,EACrC,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAejB,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,wBAAwB,GAAG,SAAS,sBAQ7C;AAqCD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,SAAS,sBAAsB,EAAE,oCAKzC;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,8BAA8B,EAAE,GAC/C,4BAA4B,EAAE,CAShC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAG9D;AAED,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,6BAA6B,GAAG,SAAS,EACtD,iBAAiB,EAAE,eAAe,GACjC,qCAAqC,CAIvC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolvePreviewSourceUri = resolvePreviewSourceUri;
|
|
4
|
+
exports.normalizeNativeImagePreviewItems = normalizeNativeImagePreviewItems;
|
|
5
|
+
exports.toNativePreviewItems = toNativePreviewItems;
|
|
6
|
+
exports.clampPreviewIndex = clampPreviewIndex;
|
|
7
|
+
exports.resolveNativeImagePreviewColorScheme = resolveNativeImagePreviewColorScheme;
|
|
8
|
+
const react_native_1 = require("react-native");
|
|
9
|
+
function isDescriptor(item) {
|
|
10
|
+
if (item == null || typeof item !== 'object' || Array.isArray(item))
|
|
11
|
+
return false;
|
|
12
|
+
return ('source' in item ||
|
|
13
|
+
'url' in item ||
|
|
14
|
+
'poster' in item ||
|
|
15
|
+
'type' in item ||
|
|
16
|
+
'id' in item);
|
|
17
|
+
}
|
|
18
|
+
function resolvePreviewSourceUri(source) {
|
|
19
|
+
if (source == null)
|
|
20
|
+
return undefined;
|
|
21
|
+
if (typeof source === 'string')
|
|
22
|
+
return source;
|
|
23
|
+
const normalizedSource = Array.isArray(source) ? source[0] : source;
|
|
24
|
+
const resolved = react_native_1.Image.resolveAssetSource(normalizedSource);
|
|
25
|
+
return resolved === null || resolved === void 0 ? void 0 : resolved.uri;
|
|
26
|
+
}
|
|
27
|
+
function normalizePreviewItem(item, index) {
|
|
28
|
+
var _a, _b, _c, _d;
|
|
29
|
+
if (isDescriptor(item)) {
|
|
30
|
+
const type = (_a = item.type) !== null && _a !== void 0 ? _a : 'image';
|
|
31
|
+
const sourceUrl = resolvePreviewSourceUri(item.source);
|
|
32
|
+
const url = (_b = item.url) !== null && _b !== void 0 ? _b : sourceUrl;
|
|
33
|
+
if (!url)
|
|
34
|
+
return null;
|
|
35
|
+
const poster = (_c = resolvePreviewSourceUri(item.poster)) !== null && _c !== void 0 ? _c : (type === 'video' ? sourceUrl : undefined);
|
|
36
|
+
return {
|
|
37
|
+
id: (_d = item.id) !== null && _d !== void 0 ? _d : `${index}`,
|
|
38
|
+
type,
|
|
39
|
+
url,
|
|
40
|
+
poster,
|
|
41
|
+
width: item.width,
|
|
42
|
+
height: item.height,
|
|
43
|
+
alt: item.alt,
|
|
44
|
+
raw: item,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const url = resolvePreviewSourceUri(item);
|
|
48
|
+
if (!url)
|
|
49
|
+
return null;
|
|
50
|
+
return {
|
|
51
|
+
id: `${index}`,
|
|
52
|
+
type: 'image',
|
|
53
|
+
url,
|
|
54
|
+
raw: item,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function normalizeNativeImagePreviewItems(items) {
|
|
58
|
+
return items
|
|
59
|
+
.map((item, index) => normalizePreviewItem(item, index))
|
|
60
|
+
.filter((item) => item != null);
|
|
61
|
+
}
|
|
62
|
+
function toNativePreviewItems(items) {
|
|
63
|
+
return items.map(({ id, type, url, poster, width, height }) => ({
|
|
64
|
+
id,
|
|
65
|
+
type,
|
|
66
|
+
url,
|
|
67
|
+
poster,
|
|
68
|
+
width,
|
|
69
|
+
height,
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
function clampPreviewIndex(index, length) {
|
|
73
|
+
if (!Number.isFinite(index))
|
|
74
|
+
return 0;
|
|
75
|
+
return Math.max(0, Math.min(Math.round(index), Math.max(0, length - 1)));
|
|
76
|
+
}
|
|
77
|
+
function resolveNativeImagePreviewColorScheme(colorScheme, systemColorScheme) {
|
|
78
|
+
if (colorScheme === 'light' || colorScheme === 'dark')
|
|
79
|
+
return colorScheme;
|
|
80
|
+
if (colorScheme === 'system')
|
|
81
|
+
return systemColorScheme === 'light' ? 'light' : 'dark';
|
|
82
|
+
return 'dark';
|
|
83
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { NativeImagePreviewWebImageSize, NativeImagePreviewWebObjectFit, NativeImagePreviewWebRect } from './types';
|
|
2
|
+
export type SharedElementGeometry = {
|
|
3
|
+
visibleFrame: NativeImagePreviewWebRect;
|
|
4
|
+
contentFrame: NativeImagePreviewWebRect;
|
|
5
|
+
};
|
|
6
|
+
export declare function rectFromDOMRect(rect: DOMRectReadOnly | NativeImagePreviewWebRect): NativeImagePreviewWebRect;
|
|
7
|
+
export declare function rectFromElement(element: Element): NativeImagePreviewWebRect;
|
|
8
|
+
export declare function viewportRect(): NativeImagePreviewWebRect;
|
|
9
|
+
export declare function normalizeRect(input: Pick<NativeImagePreviewWebRect, 'left' | 'top' | 'width' | 'height'>): NativeImagePreviewWebRect;
|
|
10
|
+
export declare function isUsableRect(rect: NativeImagePreviewWebRect | null | undefined): rect is NativeImagePreviewWebRect;
|
|
11
|
+
export declare function clamp(value: number, min: number, max: number): number;
|
|
12
|
+
export declare function fitRect(mediaSize: NativeImagePreviewWebImageSize, container: NativeImagePreviewWebRect, objectFit: NativeImagePreviewWebObjectFit): NativeImagePreviewWebRect;
|
|
13
|
+
export declare function sharedGeometryFor(container: NativeImagePreviewWebRect, mediaSize: NativeImagePreviewWebImageSize, objectFit: NativeImagePreviewWebObjectFit): SharedElementGeometry;
|
|
14
|
+
export declare function targetGeometryFor(mediaSize: NativeImagePreviewWebImageSize, container: NativeImagePreviewWebRect): SharedElementGeometry;
|
|
15
|
+
export declare function intersectRects(first: NativeImagePreviewWebRect, second: NativeImagePreviewWebRect): NativeImagePreviewWebRect | null;
|
|
16
|
+
export declare function lerp(start: number, end: number, progress: number): number;
|
|
17
|
+
export declare function lerpRect(start: NativeImagePreviewWebRect, end: NativeImagePreviewWebRect, progress: number): NativeImagePreviewWebRect;
|
|
18
|
+
export declare function easeOutCubic(t: number): number;
|
|
19
|
+
export declare function easeOutQuart(t: number): number;
|
|
20
|
+
//# sourceMappingURL=geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../../../src/ui/NativeImagePreview/web/geometry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAEzH,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,yBAAyB,CAAC;IACxC,YAAY,EAAE,yBAAyB,CAAC;CACzC,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,yBAAyB,GAAG,yBAAyB,CAO5G;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,yBAAyB,CAE3E;AAED,wBAAgB,YAAY,IAAI,yBAAyB,CAOxD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG,yBAAyB,CASpI;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,yBAAyB,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,yBAAyB,CAElH;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,OAAO,CACrB,SAAS,EAAE,8BAA8B,EACzC,SAAS,EAAE,yBAAyB,EACpC,SAAS,EAAE,8BAA8B,GACxC,yBAAyB,CAkB3B;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,yBAAyB,EACpC,SAAS,EAAE,8BAA8B,EACzC,SAAS,EAAE,8BAA8B,GACxC,qBAAqB,CAUvB;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,8BAA8B,EAAE,SAAS,EAAE,yBAAyB,GAAG,qBAAqB,CAWxI;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,yBAAyB,GAAG,yBAAyB,GAAG,IAAI,CASpI;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,yBAAyB,EAAE,GAAG,EAAE,yBAAyB,EAAE,QAAQ,EAAE,MAAM,GAAG,yBAAyB,CAOtI;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C"}
|