UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

177 lines (175 loc) 6.62 kB
"use strict"; "use client"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; 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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var WebStackView_exports = {}; __export(WebStackView_exports, { WebStackView: () => WebStackView }); module.exports = __toCommonJS(WebStackView_exports); var import_jsx_runtime = require("react/jsx-runtime"); var import_routers = require("@react-navigation/routers"); var import_react = require("react"); var import_use_latest_callback = __toESM(require("use-latest-callback"), 1); var import_devHeadlessNote = require("../../headless/devHeadlessNote.native.js"); var import_Presentations = require("../../headless/Presentations.native.js"); var import_useStack = require("../../headless/useStack.native.js"); var import_stackStateUtils = require("./stackStateUtils.native.js"); function WebStackView(param) { var { state, navigation, descriptors, customChildren } = param; return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_useStack.StackStateProvider, { state, descriptors, children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(HeadlessStackView, { state, navigation, descriptors, customChildren }) }); } function HeadlessStackView(param) { var { state, navigation, descriptors, customChildren } = param; var _state_routes_lastBaseIndex; var stack = (0, import_useStack.useStack)(); var presentations = (0, import_Presentations.useWebPresentations)(); if (customChildren === null || customChildren === void 0 ? void 0 : customChildren.length) { return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.Fragment, { children: customChildren }); } (0, import_devHeadlessNote.devHeadlessNote)("Stack"); var lastBaseIndex = (0, import_stackStateUtils.findLastNonOverlayIndex)(state, descriptors, function (options) { return getPresentationType(options) !== void 0; }); var baseRouteKeys = new Set(state.routes.slice(0, lastBaseIndex + 1).map(function (route) { return route.key; })); var baseFocusedKey = (_state_routes_lastBaseIndex = state.routes[lastBaseIndex]) === null || _state_routes_lastBaseIndex === void 0 ? void 0 : _state_routes_lastBaseIndex.key; var overlayRoutes = state.routes.slice(lastBaseIndex + 1); return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_react.Fragment, { children: [stack.screens.map(function (screen) { if (!baseRouteKeys.has(screen.key)) return null; if (screen.key === baseFocusedKey) { return screen.keepMounted ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.Activity, { mode: "visible", children: screen.element }, screen.key) : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.Fragment, { children: screen.element }, screen.key); } if (!screen.keepMounted) return null; return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.Activity, { mode: "hidden", children: screen.element }, screen.key); }), overlayRoutes.map(function (route) { var _descriptors_route_key; var screen = stack.screens.find(function (entry) { return entry.key === route.key; }); var type = getPresentationType((_descriptors_route_key = descriptors[route.key]) === null || _descriptors_route_key === void 0 ? void 0 : _descriptors_route_key.options); if (!screen || !type) return null; return /* @__PURE__ */(0, import_jsx_runtime.jsx)(PresentationScreen, { screen, type, presentations, onDismiss: function () { return navigation.dispatch({ ...import_routers.StackActions.pop(), source: route.key, target: state.key }); } }, route.key); })] }); } function PresentationScreen(param) { var { screen, type, presentations, onDismiss } = param; var dismiss = (0, import_use_latest_callback.default)(onDismiss); var onOpenChange = (0, import_react.useCallback)(function (nextOpen) { if (!nextOpen) dismiss(); }, [dismiss]); var [open, setOpen] = (0, import_react.useState)(false); (0, import_react.useEffect)(function () { return setOpen(true); }, []); if (type === "sheet") { var Sheet = presentations === null || presentations === void 0 ? void 0 : presentations.sheet; if (!Sheet) return screen.element; return /* @__PURE__ */(0, import_jsx_runtime.jsx)(Sheet, { open, onOpenChange, options: screen.options, screen, children: screen.element }); } var Modal = presentations === null || presentations === void 0 ? void 0 : presentations.modal; if (!Modal) return screen.element; return /* @__PURE__ */(0, import_jsx_runtime.jsx)(Modal, { open, onOpenChange, options: screen.options, screen, children: screen.element }); } function getPresentationType(options) { var presentation = options === null || options === void 0 ? void 0 : options.presentation; if (!presentation || presentation === "card" || presentation === "push") { return void 0; } if (presentation === "sheet" || presentation === "formSheet" || presentation === "pageSheet") { return "sheet"; } return "modal"; } //# sourceMappingURL=WebStackView.native.js.map