UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

78 lines (75 loc) • 3.41 kB
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