one 1.2.5 → 1.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/cjs/ui/Slot.cjs +42 -0
  2. package/dist/cjs/ui/Slot.js +27 -0
  3. package/dist/cjs/ui/Slot.js.map +6 -0
  4. package/dist/cjs/ui/Slot.native.js +48 -0
  5. package/dist/cjs/ui/Slot.native.js.map +1 -0
  6. package/dist/cjs/ui/TabContext.cjs +44 -0
  7. package/dist/cjs/ui/TabContext.js +35 -0
  8. package/dist/cjs/ui/TabContext.js.map +6 -0
  9. package/dist/cjs/ui/TabContext.native.js +47 -0
  10. package/dist/cjs/ui/TabContext.native.js.map +1 -0
  11. package/dist/cjs/ui/TabList.cjs +52 -0
  12. package/dist/cjs/ui/TabList.js +38 -0
  13. package/dist/cjs/ui/TabList.js.map +6 -0
  14. package/dist/cjs/ui/TabList.native.js +57 -0
  15. package/dist/cjs/ui/TabList.native.js.map +1 -0
  16. package/dist/cjs/ui/TabRouter.cjs +47 -0
  17. package/dist/cjs/ui/TabRouter.js +41 -0
  18. package/dist/cjs/ui/TabRouter.js.map +6 -0
  19. package/dist/cjs/ui/TabRouter.native.js +57 -0
  20. package/dist/cjs/ui/TabRouter.native.js.map +1 -0
  21. package/dist/cjs/ui/TabSlot.cjs +115 -0
  22. package/dist/cjs/ui/TabSlot.js +91 -0
  23. package/dist/cjs/ui/TabSlot.js.map +6 -0
  24. package/dist/cjs/ui/TabSlot.native.js +120 -0
  25. package/dist/cjs/ui/TabSlot.native.js.map +1 -0
  26. package/dist/cjs/ui/TabTrigger.cjs +151 -0
  27. package/dist/cjs/ui/TabTrigger.js +120 -0
  28. package/dist/cjs/ui/TabTrigger.js.map +6 -0
  29. package/dist/cjs/ui/TabTrigger.native.js +153 -0
  30. package/dist/cjs/ui/TabTrigger.native.js.map +1 -0
  31. package/dist/cjs/ui/Tabs.cjs +175 -0
  32. package/dist/cjs/ui/Tabs.js +121 -0
  33. package/dist/cjs/ui/Tabs.js.map +6 -0
  34. package/dist/cjs/ui/Tabs.native.js +191 -0
  35. package/dist/cjs/ui/Tabs.native.js.map +1 -0
  36. package/dist/cjs/ui/common.cjs +160 -0
  37. package/dist/cjs/ui/common.js +146 -0
  38. package/dist/cjs/ui/common.js.map +6 -0
  39. package/dist/cjs/ui/common.native.js +223 -0
  40. package/dist/cjs/ui/common.native.js.map +1 -0
  41. package/dist/cjs/ui/index.cjs +18 -0
  42. package/dist/cjs/ui/index.js +15 -0
  43. package/dist/cjs/ui/index.js.map +6 -0
  44. package/dist/cjs/ui/index.native.js +21 -0
  45. package/dist/cjs/ui/index.native.js.map +1 -0
  46. package/dist/cjs/ui/useComponent.cjs +46 -0
  47. package/dist/cjs/ui/useComponent.js +37 -0
  48. package/dist/cjs/ui/useComponent.js.map +6 -0
  49. package/dist/cjs/ui/useComponent.native.js +53 -0
  50. package/dist/cjs/ui/useComponent.native.js.map +1 -0
  51. package/dist/esm/ui/Slot.js +17 -0
  52. package/dist/esm/ui/Slot.js.map +6 -0
  53. package/dist/esm/ui/Slot.mjs +19 -0
  54. package/dist/esm/ui/Slot.mjs.map +1 -0
  55. package/dist/esm/ui/Slot.native.js +22 -0
  56. package/dist/esm/ui/Slot.native.js.map +1 -0
  57. package/dist/esm/ui/TabContext.js +19 -0
  58. package/dist/esm/ui/TabContext.js.map +6 -0
  59. package/dist/esm/ui/TabContext.mjs +17 -0
  60. package/dist/esm/ui/TabContext.mjs.map +1 -0
  61. package/dist/esm/ui/TabContext.native.js +17 -0
  62. package/dist/esm/ui/TabContext.native.js.map +1 -0
  63. package/dist/esm/ui/TabList.js +24 -0
  64. package/dist/esm/ui/TabList.js.map +6 -0
  65. package/dist/esm/ui/TabList.mjs +28 -0
  66. package/dist/esm/ui/TabList.mjs.map +1 -0
  67. package/dist/esm/ui/TabList.native.js +30 -0
  68. package/dist/esm/ui/TabList.native.js.map +1 -0
  69. package/dist/esm/ui/TabRouter.js +27 -0
  70. package/dist/esm/ui/TabRouter.js.map +6 -0
  71. package/dist/esm/ui/TabRouter.mjs +24 -0
  72. package/dist/esm/ui/TabRouter.mjs.map +1 -0
  73. package/dist/esm/ui/TabRouter.native.js +31 -0
  74. package/dist/esm/ui/TabRouter.native.js.map +1 -0
  75. package/dist/esm/ui/TabSlot.js +80 -0
  76. package/dist/esm/ui/TabSlot.js.map +6 -0
  77. package/dist/esm/ui/TabSlot.mjs +89 -0
  78. package/dist/esm/ui/TabSlot.mjs.map +1 -0
  79. package/dist/esm/ui/TabSlot.native.js +91 -0
  80. package/dist/esm/ui/TabSlot.native.js.map +1 -0
  81. package/dist/esm/ui/TabTrigger.js +115 -0
  82. package/dist/esm/ui/TabTrigger.js.map +6 -0
  83. package/dist/esm/ui/TabTrigger.mjs +126 -0
  84. package/dist/esm/ui/TabTrigger.mjs.map +1 -0
  85. package/dist/esm/ui/TabTrigger.native.js +125 -0
  86. package/dist/esm/ui/TabTrigger.native.js.map +1 -0
  87. package/dist/esm/ui/Tabs.js +130 -0
  88. package/dist/esm/ui/Tabs.js.map +6 -0
  89. package/dist/esm/ui/Tabs.mjs +149 -0
  90. package/dist/esm/ui/Tabs.mjs.map +1 -0
  91. package/dist/esm/ui/Tabs.native.js +162 -0
  92. package/dist/esm/ui/Tabs.native.js.map +1 -0
  93. package/dist/esm/ui/common.js +133 -0
  94. package/dist/esm/ui/common.js.map +6 -0
  95. package/dist/esm/ui/common.mjs +135 -0
  96. package/dist/esm/ui/common.mjs.map +1 -0
  97. package/dist/esm/ui/common.native.js +195 -0
  98. package/dist/esm/ui/common.native.js.map +1 -0
  99. package/dist/esm/ui/index.js +2 -0
  100. package/dist/esm/ui/index.js.map +6 -0
  101. package/dist/esm/ui/index.mjs +2 -0
  102. package/dist/esm/ui/index.mjs.map +1 -0
  103. package/dist/esm/ui/index.native.js +2 -0
  104. package/dist/esm/ui/index.native.js.map +1 -0
  105. package/dist/esm/ui/useComponent.js +22 -0
  106. package/dist/esm/ui/useComponent.js.map +6 -0
  107. package/dist/esm/ui/useComponent.mjs +23 -0
  108. package/dist/esm/ui/useComponent.mjs.map +1 -0
  109. package/dist/esm/ui/useComponent.native.js +27 -0
  110. package/dist/esm/ui/useComponent.native.js.map +1 -0
  111. package/package.json +18 -9
  112. package/src/ui/README.md +121 -0
  113. package/src/ui/Slot.tsx +34 -0
  114. package/src/ui/TabContext.tsx +115 -0
  115. package/src/ui/TabList.tsx +47 -0
  116. package/src/ui/TabRouter.tsx +79 -0
  117. package/src/ui/TabSlot.tsx +170 -0
  118. package/src/ui/TabTrigger.tsx +282 -0
  119. package/src/ui/Tabs.tsx +313 -0
  120. package/src/ui/common.tsx +277 -0
  121. package/src/ui/index.ts +1 -0
  122. package/src/ui/useComponent.tsx +42 -0
  123. package/types/ui/Slot.d.ts +6 -0
  124. package/types/ui/Slot.d.ts.map +1 -0
  125. package/types/ui/TabContext.d.ts +190 -0
  126. package/types/ui/TabContext.d.ts.map +1 -0
  127. package/types/ui/TabList.d.ts +25 -0
  128. package/types/ui/TabList.d.ts.map +1 -0
  129. package/types/ui/TabRouter.d.ts +103 -0
  130. package/types/ui/TabRouter.d.ts.map +1 -0
  131. package/types/ui/TabSlot.d.ts +73 -0
  132. package/types/ui/TabSlot.d.ts.map +1 -0
  133. package/types/ui/TabTrigger.d.ts +88 -0
  134. package/types/ui/TabTrigger.d.ts.map +1 -0
  135. package/types/ui/Tabs.d.ts +255 -0
  136. package/types/ui/Tabs.d.ts.map +1 -0
  137. package/types/ui/common.d.ts +40 -0
  138. package/types/ui/common.d.ts.map +1 -0
  139. package/types/ui/index.d.ts +2 -0
  140. package/types/ui/index.d.ts.map +1 -0
  141. package/types/ui/useComponent.d.ts +10 -0
  142. package/types/ui/useComponent.d.ts.map +1 -0
@@ -0,0 +1,130 @@
1
+ import {
2
+ LinkingContext,
3
+ useNavigationBuilder
4
+ } from "@react-navigation/native";
5
+ import {
6
+ Children,
7
+ Fragment,
8
+ isValidElement,
9
+ use,
10
+ useMemo
11
+ } from "react";
12
+ import { StyleSheet, View } from "react-native-web";
13
+ import {
14
+ TabTriggerMapContext
15
+ } from "./TabContext";
16
+ import { isTabList } from "./TabList";
17
+ import { ExpoTabRouter } from "./TabRouter";
18
+ import { isTabSlot } from "./TabSlot";
19
+ import { isTabTrigger } from "./TabTrigger";
20
+ import { ViewSlot, triggersToScreens } from "./common";
21
+ import { useComponent } from "./useComponent";
22
+ import { useRouteNode, useContextKey } from "../router/Route";
23
+ import { useRouteInfo } from "../hooks";
24
+ import { resolveHref } from "../link/href";
25
+ import { shouldLinkExternally } from "../utils/url";
26
+ import { NavigatorContext } from "../views/Navigator";
27
+ export * from "./TabContext";
28
+ export * from "./TabList";
29
+ export * from "./TabSlot";
30
+ export * from "./TabTrigger";
31
+ import { jsx } from "react/jsx-runtime";
32
+ function Tabs(props) {
33
+ const { children, asChild, options, ...rest } = props, Comp = asChild ? ViewSlot : View, { NavigationContent } = useTabsWithChildren({
34
+ // asChild adds an extra layer, so we need to process the child's children
35
+ children: asChild && isValidElement(children) && children.props && typeof children.props == "object" && "children" in children.props ? children.props.children : children,
36
+ ...options
37
+ });
38
+ return /* @__PURE__ */ jsx(Comp, { style: styles.tabsRoot, ...rest, children: /* @__PURE__ */ jsx(NavigationContent, { children }) });
39
+ }
40
+ function useTabsWithChildren(options) {
41
+ const { children, ...rest } = options;
42
+ return useTabsWithTriggers({ triggers: parseTriggersFromChildren(children), ...rest });
43
+ }
44
+ function useTabsWithTriggers(options) {
45
+ const { triggers, ...rest } = options, parentTriggerMap = use(TabTriggerMapContext), routeNode = useRouteNode(), contextKey = useContextKey(), linking = use(LinkingContext).options, routeInfo = useRouteInfo();
46
+ if (!routeNode || !linking)
47
+ throw new Error("No RouteNode. This is likely a bug in one router.");
48
+ const initialRouteName = routeNode.initialRouteName, { children, triggerMap } = triggersToScreens(
49
+ triggers,
50
+ routeNode,
51
+ linking,
52
+ initialRouteName,
53
+ parentTriggerMap,
54
+ routeInfo,
55
+ contextKey
56
+ ), navigatorContext = useNavigationBuilder(ExpoTabRouter, {
57
+ children,
58
+ ...rest,
59
+ triggerMap,
60
+ id: contextKey,
61
+ initialRouteName
62
+ }), {
63
+ state,
64
+ descriptors,
65
+ navigation,
66
+ describe,
67
+ NavigationContent: RNNavigationContent
68
+ } = navigatorContext, navigatorContextValue = useMemo(
69
+ () => ({
70
+ ...navigatorContext,
71
+ contextKey,
72
+ router: ExpoTabRouter
73
+ }),
74
+ [navigatorContext, contextKey, ExpoTabRouter]
75
+ ), NavigationContent = useComponent((children2) => /* @__PURE__ */ jsx(TabTriggerMapContext.Provider, { value: triggerMap, children: /* @__PURE__ */ jsx(NavigatorContext.Provider, { value: navigatorContextValue, children: /* @__PURE__ */ jsx(RNNavigationContent, { children: children2 }) }) }));
76
+ return { state, descriptors, navigation, NavigationContent, describe };
77
+ }
78
+ function parseTriggersFromChildren(children, screenTriggers = [], isInTabList = !1) {
79
+ return Children.forEach(children, (child) => {
80
+ if (!child || !isValidElement(child) || isTabSlot(child))
81
+ return;
82
+ if (isFragment(child) && typeof child.props.children != "function")
83
+ return parseTriggersFromChildren(
84
+ child.props.children,
85
+ screenTriggers,
86
+ isInTabList || isTabList(child)
87
+ );
88
+ if (isTabList(child) && typeof child.props.children != "function") {
89
+ let children2 = child.props.children;
90
+ return child.props.asChild && isValidElement(children2) && children2.props && typeof children2.props == "object" && "children" in children2.props && (children2 = children2.props.children), parseTriggersFromChildren(children2, screenTriggers, isInTabList || isTabList(child));
91
+ }
92
+ if (!isInTabList || !isTabTrigger(child))
93
+ return;
94
+ const { href, name } = child.props;
95
+ if (!href) {
96
+ process.env.NODE_ENV === "development" && console.warn(
97
+ `<TabTrigger name={${name}}> does not have a 'href' prop. TabTriggers within a <TabList /> are required to have an href.`
98
+ );
99
+ return;
100
+ }
101
+ const resolvedHref = resolveHref(href);
102
+ if (shouldLinkExternally(resolvedHref))
103
+ return screenTriggers.push({
104
+ type: "external",
105
+ name,
106
+ href: resolvedHref
107
+ });
108
+ if (!name) {
109
+ process.env.NODE_ENV === "development" && console.warn(
110
+ "<TabTrigger> does not have a 'name' prop. TabTriggers within a <TabList /> are required to have a name."
111
+ );
112
+ return;
113
+ }
114
+ return screenTriggers.push({ type: "internal", href: resolvedHref, name });
115
+ }), screenTriggers;
116
+ }
117
+ function isFragment(child) {
118
+ return child.type === Fragment;
119
+ }
120
+ const styles = StyleSheet.create({
121
+ tabsRoot: {
122
+ flex: 1
123
+ }
124
+ });
125
+ export {
126
+ Tabs,
127
+ useTabsWithChildren,
128
+ useTabsWithTriggers
129
+ };
130
+ //# sourceMappingURL=Tabs.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ui/Tabs.tsx"],
4
+ "mappings": "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",
5
+ "names": ["children"]
6
+ }
@@ -0,0 +1,149 @@
1
+ import { LinkingContext, useNavigationBuilder } from "@react-navigation/native";
2
+ import { Children, Fragment, isValidElement, use, useMemo } from "react";
3
+ import { StyleSheet, View } from "react-native-web";
4
+ import { TabTriggerMapContext } from "./TabContext.mjs";
5
+ import { isTabList } from "./TabList.mjs";
6
+ import { ExpoTabRouter } from "./TabRouter.mjs";
7
+ import { isTabSlot } from "./TabSlot.mjs";
8
+ import { isTabTrigger } from "./TabTrigger.mjs";
9
+ import { ViewSlot, triggersToScreens } from "./common.mjs";
10
+ import { useComponent } from "./useComponent.mjs";
11
+ import { useRouteNode, useContextKey } from "../router/Route.mjs";
12
+ import { useRouteInfo } from "../hooks.mjs";
13
+ import { resolveHref } from "../link/href.mjs";
14
+ import { shouldLinkExternally } from "../utils/url.mjs";
15
+ import { NavigatorContext } from "../views/Navigator.mjs";
16
+ export * from "./TabContext.mjs";
17
+ export * from "./TabList.mjs";
18
+ export * from "./TabSlot.mjs";
19
+ export * from "./TabTrigger.mjs";
20
+ import { jsx } from "react/jsx-runtime";
21
+ function Tabs(props) {
22
+ const {
23
+ children,
24
+ asChild,
25
+ options,
26
+ ...rest
27
+ } = props,
28
+ Comp = asChild ? ViewSlot : View,
29
+ {
30
+ NavigationContent
31
+ } = useTabsWithChildren({
32
+ // asChild adds an extra layer, so we need to process the child's children
33
+ children: asChild && isValidElement(children) && children.props && typeof children.props == "object" && "children" in children.props ? children.props.children : children,
34
+ ...options
35
+ });
36
+ return /* @__PURE__ */jsx(Comp, {
37
+ style: styles.tabsRoot,
38
+ ...rest,
39
+ children: /* @__PURE__ */jsx(NavigationContent, {
40
+ children
41
+ })
42
+ });
43
+ }
44
+ function useTabsWithChildren(options) {
45
+ const {
46
+ children,
47
+ ...rest
48
+ } = options;
49
+ return useTabsWithTriggers({
50
+ triggers: parseTriggersFromChildren(children),
51
+ ...rest
52
+ });
53
+ }
54
+ function useTabsWithTriggers(options) {
55
+ const {
56
+ triggers,
57
+ ...rest
58
+ } = options,
59
+ parentTriggerMap = use(TabTriggerMapContext),
60
+ routeNode = useRouteNode(),
61
+ contextKey = useContextKey(),
62
+ linking = use(LinkingContext).options,
63
+ routeInfo = useRouteInfo();
64
+ if (!routeNode || !linking) throw new Error("No RouteNode. This is likely a bug in one router.");
65
+ const initialRouteName = routeNode.initialRouteName,
66
+ {
67
+ children,
68
+ triggerMap
69
+ } = triggersToScreens(triggers, routeNode, linking, initialRouteName, parentTriggerMap, routeInfo, contextKey),
70
+ navigatorContext = useNavigationBuilder(ExpoTabRouter, {
71
+ children,
72
+ ...rest,
73
+ triggerMap,
74
+ id: contextKey,
75
+ initialRouteName
76
+ }),
77
+ {
78
+ state,
79
+ descriptors,
80
+ navigation,
81
+ describe,
82
+ NavigationContent: RNNavigationContent
83
+ } = navigatorContext,
84
+ navigatorContextValue = useMemo(() => ({
85
+ ...navigatorContext,
86
+ contextKey,
87
+ router: ExpoTabRouter
88
+ }), [navigatorContext, contextKey, ExpoTabRouter]),
89
+ NavigationContent = useComponent(children2 => /* @__PURE__ */jsx(TabTriggerMapContext.Provider, {
90
+ value: triggerMap,
91
+ children: /* @__PURE__ */jsx(NavigatorContext.Provider, {
92
+ value: navigatorContextValue,
93
+ children: /* @__PURE__ */jsx(RNNavigationContent, {
94
+ children: children2
95
+ })
96
+ })
97
+ }));
98
+ return {
99
+ state,
100
+ descriptors,
101
+ navigation,
102
+ NavigationContent,
103
+ describe
104
+ };
105
+ }
106
+ function parseTriggersFromChildren(children, screenTriggers = [], isInTabList = !1) {
107
+ return Children.forEach(children, child => {
108
+ if (!child || !isValidElement(child) || isTabSlot(child)) return;
109
+ if (isFragment(child) && typeof child.props.children != "function") return parseTriggersFromChildren(child.props.children, screenTriggers, isInTabList || isTabList(child));
110
+ if (isTabList(child) && typeof child.props.children != "function") {
111
+ let children2 = child.props.children;
112
+ return child.props.asChild && isValidElement(children2) && children2.props && typeof children2.props == "object" && "children" in children2.props && (children2 = children2.props.children), parseTriggersFromChildren(children2, screenTriggers, isInTabList || isTabList(child));
113
+ }
114
+ if (!isInTabList || !isTabTrigger(child)) return;
115
+ const {
116
+ href,
117
+ name
118
+ } = child.props;
119
+ if (!href) {
120
+ 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.`);
121
+ return;
122
+ }
123
+ const resolvedHref = resolveHref(href);
124
+ if (shouldLinkExternally(resolvedHref)) return screenTriggers.push({
125
+ type: "external",
126
+ name,
127
+ href: resolvedHref
128
+ });
129
+ if (!name) {
130
+ process.env.NODE_ENV === "development" && console.warn("<TabTrigger> does not have a 'name' prop. TabTriggers within a <TabList /> are required to have a name.");
131
+ return;
132
+ }
133
+ return screenTriggers.push({
134
+ type: "internal",
135
+ href: resolvedHref,
136
+ name
137
+ });
138
+ }), screenTriggers;
139
+ }
140
+ function isFragment(child) {
141
+ return child.type === Fragment;
142
+ }
143
+ const styles = StyleSheet.create({
144
+ tabsRoot: {
145
+ flex: 1
146
+ }
147
+ });
148
+ export { Tabs, useTabsWithChildren, useTabsWithTriggers };
149
+ //# sourceMappingURL=Tabs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["LinkingContext","useNavigationBuilder","Children","Fragment","isValidElement","use","useMemo","StyleSheet","View","TabTriggerMapContext","isTabList","ExpoTabRouter","isTabSlot","isTabTrigger","ViewSlot","triggersToScreens","useComponent","useRouteNode","useContextKey","useRouteInfo","resolveHref","shouldLinkExternally","NavigatorContext","jsx","Tabs","props","children","asChild","options","rest","Comp","NavigationContent","useTabsWithChildren","style","styles","tabsRoot","useTabsWithTriggers","triggers","parseTriggersFromChildren","parentTriggerMap","routeNode","contextKey","linking","routeInfo","Error","initialRouteName","triggerMap","navigatorContext","id","state","descriptors","navigation","describe","RNNavigationContent","navigatorContextValue","router","children2","Provider","value","screenTriggers","isInTabList","forEach","child","isFragment","href","name","process","env","NODE_ENV","console","warn","resolvedHref","push","type","create","flex"],"sources":["../../../src/ui/Tabs.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,162 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { LinkingContext, useNavigationBuilder } from "@react-navigation/native";
3
+ import { Children, Fragment, isValidElement, use, useMemo } from "react";
4
+ import { StyleSheet, View } from "react-native";
5
+ import { TabTriggerMapContext } from "./TabContext.native.js";
6
+ import { isTabList } from "./TabList.native.js";
7
+ import { ExpoTabRouter } from "./TabRouter.native.js";
8
+ import { isTabSlot } from "./TabSlot.native.js";
9
+ import { isTabTrigger } from "./TabTrigger.native.js";
10
+ import { ViewSlot, triggersToScreens } from "./common.native.js";
11
+ import { useComponent } from "./useComponent.native.js";
12
+ import { useRouteNode, useContextKey } from "../router/Route.native.js";
13
+ import { useRouteInfo } from "../hooks.native.js";
14
+ import { resolveHref } from "../link/href.native.js";
15
+ import { shouldLinkExternally } from "../utils/url.native.js";
16
+ import { NavigatorContext } from "../views/Navigator.native.js";
17
+ export * from "./TabContext.native.js";
18
+ export * from "./TabList.native.js";
19
+ export * from "./TabSlot.native.js";
20
+ export * from "./TabTrigger.native.js";
21
+ function _type_of(obj) {
22
+ "@swc/helpers - typeof";
23
+
24
+ return obj && typeof Symbol < "u" && obj.constructor === Symbol ? "symbol" : typeof obj;
25
+ }
26
+ function Tabs(props) {
27
+ var {
28
+ children,
29
+ asChild,
30
+ options,
31
+ ...rest
32
+ } = props,
33
+ Comp = asChild ? ViewSlot : View,
34
+ {
35
+ NavigationContent
36
+ } = useTabsWithChildren({
37
+ // asChild adds an extra layer, so we need to process the child's children
38
+ children: asChild && /* @__PURE__ */isValidElement(children) && children.props && _type_of(children.props) === "object" && "children" in children.props ? children.props.children : children,
39
+ ...options
40
+ });
41
+ return /* @__PURE__ */_jsx(Comp, {
42
+ style: styles.tabsRoot,
43
+ ...rest,
44
+ children: /* @__PURE__ */_jsx(NavigationContent, {
45
+ children
46
+ })
47
+ });
48
+ }
49
+ function useTabsWithChildren(options) {
50
+ var {
51
+ children,
52
+ ...rest
53
+ } = options;
54
+ return useTabsWithTriggers({
55
+ triggers: parseTriggersFromChildren(children),
56
+ ...rest
57
+ });
58
+ }
59
+ function useTabsWithTriggers(options) {
60
+ var {
61
+ triggers,
62
+ ...rest
63
+ } = options,
64
+ parentTriggerMap = use(TabTriggerMapContext),
65
+ routeNode = useRouteNode(),
66
+ contextKey = useContextKey(),
67
+ linking = use(LinkingContext).options,
68
+ routeInfo = useRouteInfo();
69
+ if (!routeNode || !linking) throw new Error("No RouteNode. This is likely a bug in one router.");
70
+ var initialRouteName = routeNode.initialRouteName,
71
+ {
72
+ children,
73
+ triggerMap
74
+ } = triggersToScreens(triggers, routeNode, linking, initialRouteName, parentTriggerMap, routeInfo, contextKey),
75
+ navigatorContext = useNavigationBuilder(ExpoTabRouter, {
76
+ children,
77
+ ...rest,
78
+ triggerMap,
79
+ id: contextKey,
80
+ initialRouteName
81
+ }),
82
+ {
83
+ state,
84
+ descriptors,
85
+ navigation,
86
+ describe,
87
+ NavigationContent: RNNavigationContent
88
+ } = navigatorContext,
89
+ navigatorContextValue = useMemo(function () {
90
+ return {
91
+ ...navigatorContext,
92
+ contextKey,
93
+ router: ExpoTabRouter
94
+ };
95
+ }, [navigatorContext, contextKey, ExpoTabRouter]),
96
+ NavigationContent = useComponent(function (children2) {
97
+ return /* @__PURE__ */_jsx(TabTriggerMapContext.Provider, {
98
+ value: triggerMap,
99
+ children: /* @__PURE__ */_jsx(NavigatorContext.Provider, {
100
+ value: navigatorContextValue,
101
+ children: /* @__PURE__ */_jsx(RNNavigationContent, {
102
+ children: children2
103
+ })
104
+ })
105
+ });
106
+ });
107
+ return {
108
+ state,
109
+ descriptors,
110
+ navigation,
111
+ NavigationContent,
112
+ describe
113
+ };
114
+ }
115
+ function parseTriggersFromChildren(children) {
116
+ var screenTriggers = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [],
117
+ isInTabList = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : !1;
118
+ return Children.forEach(children, function (child) {
119
+ if (!(!child || ! /* @__PURE__ */isValidElement(child) || isTabSlot(child))) {
120
+ if (isFragment(child) && typeof child.props.children != "function") return parseTriggersFromChildren(child.props.children, screenTriggers, isInTabList || isTabList(child));
121
+ if (isTabList(child) && typeof child.props.children != "function") {
122
+ var _$children = child.props.children;
123
+ return child.props.asChild && /* @__PURE__ */isValidElement(_$children) && _$children.props && _type_of(_$children.props) === "object" && "children" in _$children.props && (_$children = _$children.props.children), parseTriggersFromChildren(_$children, screenTriggers, isInTabList || isTabList(child));
124
+ }
125
+ if (!(!isInTabList || !isTabTrigger(child))) {
126
+ var {
127
+ href,
128
+ name
129
+ } = child.props;
130
+ if (!href) {
131
+ 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.`);
132
+ return;
133
+ }
134
+ var resolvedHref = resolveHref(href);
135
+ if (shouldLinkExternally(resolvedHref)) return screenTriggers.push({
136
+ type: "external",
137
+ name,
138
+ href: resolvedHref
139
+ });
140
+ if (!name) {
141
+ process.env.NODE_ENV === "development" && console.warn("<TabTrigger> does not have a 'name' prop. TabTriggers within a <TabList /> are required to have a name.");
142
+ return;
143
+ }
144
+ return screenTriggers.push({
145
+ type: "internal",
146
+ href: resolvedHref,
147
+ name
148
+ });
149
+ }
150
+ }
151
+ }), screenTriggers;
152
+ }
153
+ function isFragment(child) {
154
+ return child.type === Fragment;
155
+ }
156
+ var styles = StyleSheet.create({
157
+ tabsRoot: {
158
+ flex: 1
159
+ }
160
+ });
161
+ export { Tabs, useTabsWithChildren, useTabsWithTriggers };
162
+ //# sourceMappingURL=Tabs.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jsx","_jsx","LinkingContext","useNavigationBuilder","Children","Fragment","isValidElement","use","useMemo","StyleSheet","View","TabTriggerMapContext","isTabList","ExpoTabRouter","isTabSlot","isTabTrigger","ViewSlot","triggersToScreens","useComponent","useRouteNode","useContextKey","useRouteInfo","resolveHref","shouldLinkExternally","NavigatorContext","_type_of","obj","Symbol","constructor","Tabs","props","children","asChild","options","rest","Comp","NavigationContent","useTabsWithChildren","style","styles","tabsRoot","useTabsWithTriggers","triggers","parseTriggersFromChildren","parentTriggerMap","routeNode","contextKey","linking","routeInfo","Error","initialRouteName","triggerMap","navigatorContext","id","state","descriptors","navigation","describe","RNNavigationContent","navigatorContextValue","router","children2","Provider","value","screenTriggers","arguments","length","isInTabList","forEach","child","isFragment","_$children","href","name","process","env","NODE_ENV","console","warn","resolvedHref","push","type","create"],"sources":["../../../src/ui/Tabs.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,133 @@
1
+ import { resolveHref } from "../link/href";
2
+ import { sortRoutesWithInitial } from "../router/sortRoutes";
3
+ import { Slot } from "./Slot";
4
+ import { jsx } from "react/jsx-runtime";
5
+ const ViewSlot = Slot;
6
+ function resolveHrefWithSegments(href, routeInfo, segmentsWithoutGroups) {
7
+ if (href.startsWith("./") || href.startsWith("../")) {
8
+ const parts = ((("/" + segmentsWithoutGroups.join("/")).replace(/\/[^/]*$/, "") || "/") + "/" + href).split("/"), resolved = [];
9
+ for (const part of parts)
10
+ part === "." || part === "" || (part === ".." ? resolved.pop() : resolved.push(part));
11
+ return "/" + resolved.join("/");
12
+ }
13
+ return href;
14
+ }
15
+ function triggersToScreens(triggers, layoutRouteNode, linking, initialRouteName, parentTriggerMap, routeInfo, contextKey) {
16
+ const configs = [];
17
+ for (const trigger of triggers) {
18
+ if (trigger.name in parentTriggerMap) {
19
+ const parentTrigger = parentTriggerMap[trigger.name];
20
+ throw new Error(
21
+ `Trigger ${JSON.stringify({
22
+ name: trigger.name,
23
+ href: trigger.href
24
+ })} has the same name as parent trigger ${JSON.stringify({
25
+ name: parentTrigger.name,
26
+ href: parentTrigger.href
27
+ })}. Triggers must have unique names.`
28
+ );
29
+ }
30
+ if (trigger.type === "external") {
31
+ configs.push(trigger);
32
+ continue;
33
+ }
34
+ let resolvedHref = resolveHref(trigger.href);
35
+ if (resolvedHref.startsWith("../"))
36
+ throw new Error("Trigger href cannot link to a parent directory");
37
+ const segmentsWithoutGroups = contextKey.split("/").filter((segment) => !(segment.startsWith("(") && segment.endsWith(")")));
38
+ resolvedHref = resolveHrefWithSegments(resolvedHref, routeInfo, segmentsWithoutGroups);
39
+ let state = linking.getStateFromPath?.(resolvedHref, linking.config)?.routes[0];
40
+ if (!state) {
41
+ console.warn(
42
+ `Unable to find screen for trigger ${JSON.stringify(trigger)}. Does this point to a valid screen?`
43
+ );
44
+ continue;
45
+ }
46
+ let routeState = state;
47
+ if (routeState.name === "+not-found") {
48
+ process.env.NODE_ENV !== "production" && console.warn(
49
+ `Tab trigger '${trigger.name}' has the href '${trigger.href}' which points to a +not-found route.`
50
+ );
51
+ continue;
52
+ }
53
+ const targetStateName = layoutRouteNode.route || "__root";
54
+ for (; state?.state && state.name !== targetStateName; )
55
+ state = state.state.routes[state.state.index ?? state.state.routes.length - 1];
56
+ routeState = state.state?.routes[state.state.index ?? state.state.routes.length - 1] || state;
57
+ const routeNode = layoutRouteNode.children.find((child) => child.route === routeState?.name);
58
+ if (!routeNode) {
59
+ console.warn(
60
+ `Unable to find routeNode for trigger ${JSON.stringify(trigger)}. This might be a bug in One router`
61
+ );
62
+ continue;
63
+ }
64
+ const duplicateTrigger = trigger.type === "internal" && configs.find((config) => config.type === "external" ? !1 : config.routeNode.route === routeNode.route);
65
+ if (duplicateTrigger) {
66
+ const duplicateTriggerText = `${JSON.stringify({ name: duplicateTrigger.name, href: duplicateTrigger.href })} and ${JSON.stringify({ name: trigger.name, href: trigger.href })}`;
67
+ throw new Error(
68
+ `A navigator cannot contain multiple trigger components that map to the same sub-segment. Consider adding a shared group and assigning a group to each trigger. Conflicting triggers:
69
+ ${duplicateTriggerText}.
70
+ Both triggers map to route ${routeNode.route}.`
71
+ );
72
+ }
73
+ configs.push({
74
+ ...trigger,
75
+ href: resolvedHref,
76
+ routeNode,
77
+ action: stateToAction(state, layoutRouteNode.route)
78
+ });
79
+ }
80
+ const sortFn = sortRoutesWithInitial(initialRouteName), sortedConfigs = configs.sort((a, b) => a.type === "external" && b.type === "external" ? 0 : a.type === "external" ? 1 : b.type === "external" ? -1 : sortFn(a.routeNode, b.routeNode)), children = [], triggerMap = { ...parentTriggerMap }, { Screen } = require("../router/useScreens"), { createGetIdForRoute } = require("../router/useScreens");
81
+ for (const [index, config] of sortedConfigs.entries())
82
+ if (triggerMap[config.name] = { ...config, index }, config.type === "internal") {
83
+ const route = config.routeNode;
84
+ children.push(
85
+ /* @__PURE__ */ jsx(
86
+ Screen,
87
+ {
88
+ getId: createGetIdForRoute(route),
89
+ name: route.route,
90
+ options: (args) => {
91
+ const staticOptions = route.generated ? route.loadRoute()?.getNavOptions : null, output = {
92
+ ...typeof staticOptions == "function" ? staticOptions(args) : staticOptions
93
+ };
94
+ return route.generated && (output.tabBarButton = () => null, output.drawerItemStyle = { height: 0, display: "none" }), output;
95
+ },
96
+ getComponent: () => {
97
+ const { getQualifiedRouteComponent } = require("../router/useScreens");
98
+ return getQualifiedRouteComponent(route);
99
+ }
100
+ },
101
+ route.route
102
+ )
103
+ );
104
+ }
105
+ return {
106
+ children,
107
+ triggerMap
108
+ };
109
+ }
110
+ function stateToAction(state, startAtRoute) {
111
+ const rootPayload = {};
112
+ let payload = rootPayload;
113
+ startAtRoute = startAtRoute === "" ? "__root" : startAtRoute;
114
+ let foundStartingPoint = startAtRoute === void 0 || !state?.state;
115
+ for (; state; )
116
+ if (foundStartingPoint)
117
+ payload === rootPayload ? payload.name = state.name : payload.screen = state.name, payload.params = state.params ? { ...state.params } : {}, state = state.state?.routes[state.state?.routes.length - 1], state && (payload.params ??= {}, payload = payload.params);
118
+ else {
119
+ state.name === startAtRoute && (foundStartingPoint = !0);
120
+ const nextState = state.state?.routes[state.state?.routes.length - 1];
121
+ nextState && (state = nextState);
122
+ }
123
+ return {
124
+ type: "JUMP_TO",
125
+ payload: rootPayload
126
+ };
127
+ }
128
+ export {
129
+ ViewSlot,
130
+ stateToAction,
131
+ triggersToScreens
132
+ };
133
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ui/common.tsx"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }