one
Version:
One is a React framework for web, iOS, and Android apps.
78 lines (75 loc) • 3.41 kB
JavaScript
import { jsx } from "react/jsx-runtime";
import { setupNativeSheet } from "@tamagui/sheet";
import { useThemeWithState } from "@tamagui/web/internal-runtime";
import { Fragment, useMemo } from "react";
import { Platform, View } from "react-native";
import { Sheet, SheetAppearanceContext } from "./platform/Sheet.native.js";
function TamaguiNativeSheetRenderer(param) {
var { open, onOpenChange, snapPoints, position, onPositionChange, onDismiss, children, ref, modal = false, disableDrag = false, dismissOnOverlayPress = true, containerComponent: ContentContainer = Fragment, portalProps, zIndex } = param;
var [, themeState] = useThemeWithState({ needsUpdate: function needsUpdate() {
return true;
} });
var colorScheme = (themeState === null || themeState === void 0 ? void 0 : themeState.scheme) === "light" || (themeState === null || themeState === void 0 ? void 0 : themeState.scheme) === "dark" ? themeState.scheme : void 0;
var fitToContents = snapPoints.length === 1 && snapPoints[0].type === "fit";
var detents = useMemo(function() {
if (fitToContents) return void 0;
return snapPoints.map(function(point) {
if (point.type === "fit") {
throw new Error("One native Sheet does not yet support fit combined with other snap points");
}
if (point.value <= 0) {
throw new Error("One native Sheet requires positive authored snap points");
}
return point.type === "percent" ? { fraction: point.value / 100 } : { height: point.value };
});
}, [snapPoints, fitToContents]);
if (disableDrag === dismissOnOverlayPress) {
throw new Error("One native Sheet cannot control drag and backdrop dismissal independently");
}
if (portalProps) {
throw new Error("One native Sheet uses the system presentation host, so portalProps are unavailable");
}
var selectedDetent = detents === null || detents === void 0 ? void 0 : detents[open ? position : 0];
var presentationDetents = useMemo(function() {
return disableDrag && selectedDetent ? [selectedDetent] : detents;
}, [
disableDrag,
selectedDetent,
detents
]);
return /* @__PURE__ */ jsx(View, {
ref,
style: {
position: "absolute",
width: 0,
height: 0,
zIndex
},
children: /* @__PURE__ */ jsx(SheetAppearanceContext.Provider, {
value: colorScheme,
children: /* @__PURE__ */ jsx(Sheet, {
isPresented: open,
onIsPresentedChange: onOpenChange,
onDidDismiss: onDismiss,
fitToContents,
presentationDetents,
selectedDetent: disableDrag ? void 0 : selectedDetent,
onSelectedDetentChange: detents && !disableDrag ? function(detent) {
var index = detents.findIndex(function(point) {
return typeof point === "object" && typeof detent === "object" && ("fraction" in point && "fraction" in detent && point.fraction === detent.fraction || "height" in point && "height" in detent && point.height === detent.height);
});
if (index < 0) throw new Error("One native Sheet selected an unauthored snap point");
onPositionChange(index);
} : void 0,
interactiveDismissDisabled: disableDrag,
presentationBackgroundInteraction: modal ? "disabled" : "enabled",
children: /* @__PURE__ */ jsx(ContentContainer, { children })
})
})
});
}
function setupTamaguiNativeSheet() {
if (Platform.OS === "ios") setupNativeSheet("ios", TamaguiNativeSheetRenderer);
}
export { setupTamaguiNativeSheet };
//# sourceMappingURL=tamagui.native.js.map