UNPKG

one

Version:

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

160 lines 5.91 kB
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 Tabs_shared_exports = {}; __export(Tabs_shared_exports, { useTabsWithChildren: () => useTabsWithChildren, useTabsWithTriggers: () => useTabsWithTriggers }); module.exports = __toCommonJS(Tabs_shared_exports); var import_native = require("@react-navigation/native"); var import_react = require("react"); var import_hooks = require("../hooks.cjs"); var import_href = require("../link/href.cjs"); var import_Route = require("../router/Route.cjs"); var import_url = require("../utils/url.cjs"); var import_Navigator = require("../views/Navigator.cjs"); var import_common = require("./common.cjs"); var import_TabContext = require("./TabContext.cjs"); var import_TabList = require("./TabList.cjs"); var import_TabRouter = require("./TabRouter.cjs"); var import_TabSlot = require("./TabSlot.cjs"); var import_TabTrigger = require("./TabTrigger.cjs"); var import_useComponent = require("./useComponent.cjs"); var import_jsx_runtime = require("react/jsx-runtime"); function useTabsWithChildren(options) { const { children, ...rest } = options; return useTabsWithTriggers({ triggers: parseTriggersFromChildren(children), ...rest }); } function useTabsWithTriggers(options) { const { triggers, ...rest } = options; const parentTriggerMap = (0, import_react.use)(import_TabContext.TabTriggerMapContext); const routeNode = (0, import_Route.useRouteNode)(); const contextKey = (0, import_Route.useContextKey)(); const linking = (0, import_react.use)(import_native.LinkingContext).options; const routeInfo = (0, import_hooks.useRouteInfo)(); if (!routeNode || !linking) { throw new Error("No RouteNode. This is likely a bug in one router."); } const { children, triggerMap } = (0, import_common.triggersToScreens)(triggers, routeNode, linking, routeNode.initialRouteName, parentTriggerMap, routeInfo, contextKey); const navigatorContext = (0, import_native.useNavigationBuilder)(import_TabRouter.ExpoTabRouter, { children, ...rest, triggerMap, id: contextKey, initialRouteName: routeNode.initialRouteName }); const { state, descriptors, navigation, describe, NavigationContent: RNNavigationContent } = navigatorContext; const descriptorsRef = (0, import_react.useRef)(descriptors); descriptorsRef.current = descriptors; const navigatorContextValue = (0, import_react.useMemo)(() => ({ state, navigation, contextKey, router: import_TabRouter.ExpoTabRouter, descriptorsRef }), [state, navigation, contextKey]); const NavigationContent = (0, import_useComponent.useComponent)(children2 => /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_TabContext.TabTriggerMapContext.Provider, { value: triggerMap, children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_Navigator.NavigatorContext.Provider, { value: navigatorContextValue, children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(RNNavigationContent, { children: children2 }) }) })); return { state, descriptors, navigation, NavigationContent, describe }; } function parseTriggersFromChildren(children, screenTriggers = [], isInTabList = false) { import_react.Children.forEach(children, child => { if (!child || !(0, import_react.isValidElement)(child) || (0, import_TabSlot.isTabSlot)(child)) return; if (isFragment(child) && typeof child.props.children !== "function") { return parseTriggersFromChildren(child.props.children, screenTriggers, isInTabList || (0, import_TabList.isTabList)(child)); } if ((0, import_TabList.isTabList)(child) && typeof child.props.children !== "function") { let children2 = child.props.children; if (child.props.asChild && (0, import_react.isValidElement)(children2) && children2.props && typeof children2.props === "object" && "children" in children2.props) { children2 = children2.props.children; } return parseTriggersFromChildren(children2, screenTriggers, isInTabList || (0, import_TabList.isTabList)(child)); } if (!isInTabList || !(0, import_TabTrigger.isTabTrigger)(child)) return; const { href, name } = child.props; if (!href) { if (process.env.NODE_ENV === "development") { console.warn(`<TabTrigger name={${name}}> does not have a 'href' prop. TabTriggers within a <TabList /> are required to have an href.`); } return; } const resolvedHref = (0, import_href.resolveHref)(href); if ((0, import_url.shouldLinkExternally)(resolvedHref)) { screenTriggers.push({ type: "external", name, href: resolvedHref }); return; } if (!name) { if (process.env.NODE_ENV === "development") { console.warn(`<TabTrigger> does not have a 'name' prop. TabTriggers within a <TabList /> are required to have a name.`); } return; } screenTriggers.push({ type: "internal", href: resolvedHref, name }); }); return screenTriggers; } function isFragment(child) { return child.type === import_react.Fragment; }