one
Version:
One is a React framework for web, iOS, and Android apps.
101 lines (98 loc) • 4.6 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all) __defProp(target, name, {
get: all[name],
enumerable: true
});
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: () => from[key],
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var tamagui_native_exports = {};
__export(tamagui_native_exports, { setupTamaguiNativeSheet: () => setupTamaguiNativeSheet });
module.exports = __toCommonJS(tamagui_native_exports);
var import_jsx_runtime = require("react/jsx-runtime");
var import_sheet = require("@tamagui/sheet");
var import_internal_runtime = require("@tamagui/web/internal-runtime");
var import_react = require("react");
var import_react_native = require("react-native");
var import_Sheet = require("./platform/Sheet.native.js");
function TamaguiNativeSheetRenderer(param) {
var { open, onOpenChange, snapPoints, position, onPositionChange, onDismiss, children, ref, modal = false, disableDrag = false, dismissOnOverlayPress = true, containerComponent: ContentContainer = import_react.Fragment, portalProps, zIndex } = param;
var [, themeState] = (0, import_internal_runtime.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 = (0, import_react.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 = (0, import_react.useMemo)(function() {
return disableDrag && selectedDetent ? [selectedDetent] : detents;
}, [
disableDrag,
selectedDetent,
detents
]);
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_native.View, {
ref,
style: {
position: "absolute",
width: 0,
height: 0,
zIndex
},
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Sheet.SheetAppearanceContext.Provider, {
value: colorScheme,
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Sheet.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__ */ (0, import_jsx_runtime.jsx)(ContentContainer, { children })
})
})
});
}
function setupTamaguiNativeSheet() {
if (import_react_native.Platform.OS === "ios") (0, import_sheet.setupNativeSheet)("ios", TamaguiNativeSheetRenderer);
}
//# sourceMappingURL=tamagui.native.js.map