expo-router 5.0.1-preview.1 → 5.0.2-preview.1

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 (274) hide show
  1. package/build/ExpoRoot.js +18 -9
  2. package/build/ExpoRoot.js.map +1 -1
  3. package/build/LocationProvider.js +2 -3
  4. package/build/LocationProvider.js.map +1 -1
  5. package/build/Route.js +4 -4
  6. package/build/Route.js.map +1 -1
  7. package/build/doctor/index.js +1 -2
  8. package/build/doctor/index.js.map +1 -1
  9. package/build/exports.js +17 -7
  10. package/build/exports.js.map +1 -1
  11. package/build/fast-refresh.js.map +1 -1
  12. package/build/fork/NavigationContainer.d.ts +2 -7
  13. package/build/fork/NavigationContainer.d.ts.map +1 -1
  14. package/build/fork/NavigationContainer.js.map +1 -1
  15. package/build/fork/createMemoryHistory.d.ts.map +1 -1
  16. package/build/fork/createMemoryHistory.js +1 -2
  17. package/build/fork/createMemoryHistory.js.map +1 -1
  18. package/build/fork/extractPathFromURL.js +3 -4
  19. package/build/fork/extractPathFromURL.js.map +1 -1
  20. package/build/fork/findFocusedRoute.d.ts +1 -11
  21. package/build/fork/findFocusedRoute.d.ts.map +1 -1
  22. package/build/fork/findFocusedRoute.js +1 -2
  23. package/build/fork/findFocusedRoute.js.map +1 -1
  24. package/build/fork/getPathFromState-forks.d.ts.map +1 -1
  25. package/build/fork/getPathFromState-forks.js +24 -14
  26. package/build/fork/getPathFromState-forks.js.map +1 -1
  27. package/build/fork/getPathFromState.js +20 -11
  28. package/build/fork/getPathFromState.js.map +1 -1
  29. package/build/fork/getStateFromPath-forks.d.ts +4 -4
  30. package/build/fork/getStateFromPath-forks.d.ts.map +1 -1
  31. package/build/fork/getStateFromPath-forks.js +18 -19
  32. package/build/fork/getStateFromPath-forks.js.map +1 -1
  33. package/build/fork/getStateFromPath.js +18 -9
  34. package/build/fork/getStateFromPath.js.map +1 -1
  35. package/build/fork/native-stack/NativeStackView.js +1 -2
  36. package/build/fork/native-stack/NativeStackView.js.map +1 -1
  37. package/build/fork/native-stack/createNativeStackNavigator.js +18 -9
  38. package/build/fork/native-stack/createNativeStackNavigator.js.map +1 -1
  39. package/build/fork/useBackButton.d.ts +0 -1
  40. package/build/fork/useBackButton.d.ts.map +1 -1
  41. package/build/fork/useBackButton.js +1 -2
  42. package/build/fork/useBackButton.js.map +1 -1
  43. package/build/fork/useBackButton.native.js +18 -9
  44. package/build/fork/useBackButton.native.js.map +1 -1
  45. package/build/fork/useDocumentTitle.js +18 -9
  46. package/build/fork/useDocumentTitle.js.map +1 -1
  47. package/build/fork/useDocumentTitle.native.js +1 -2
  48. package/build/fork/useDocumentTitle.native.js.map +1 -1
  49. package/build/fork/useLinking.d.ts +3 -26
  50. package/build/fork/useLinking.d.ts.map +1 -1
  51. package/build/fork/useLinking.js +20 -10
  52. package/build/fork/useLinking.js.map +1 -1
  53. package/build/fork/useLinking.native.d.ts +6 -6
  54. package/build/fork/useLinking.native.js +19 -10
  55. package/build/fork/useLinking.native.js.map +1 -1
  56. package/build/fork/useThenable.js +18 -9
  57. package/build/fork/useThenable.js.map +1 -1
  58. package/build/fork/validatePathConfig.js +1 -1
  59. package/build/fork/validatePathConfig.js.map +1 -1
  60. package/build/getDevServer/index.js.map +1 -1
  61. package/build/getLinkingConfig.js +3 -3
  62. package/build/getLinkingConfig.js.map +1 -1
  63. package/build/getReactNavigationConfig.js +3 -4
  64. package/build/getReactNavigationConfig.js.map +1 -1
  65. package/build/getRoutes.js +3 -3
  66. package/build/getRoutes.js.map +1 -1
  67. package/build/getRoutesCore.js +6 -7
  68. package/build/getRoutesCore.js.map +1 -1
  69. package/build/getRoutesRedirects.d.ts +0 -1
  70. package/build/getRoutesRedirects.d.ts.map +1 -1
  71. package/build/getRoutesRedirects.js +3 -4
  72. package/build/getRoutesRedirects.js.map +1 -1
  73. package/build/getRoutesSSR.js +3 -3
  74. package/build/getRoutesSSR.js.map +1 -1
  75. package/build/getServerManifest.js +2 -3
  76. package/build/getServerManifest.js.map +1 -1
  77. package/build/global-state/routeInfo.js +18 -9
  78. package/build/global-state/routeInfo.js.map +1 -1
  79. package/build/global-state/router-store.d.ts +6 -6
  80. package/build/global-state/router-store.d.ts.map +1 -1
  81. package/build/global-state/router-store.js +22 -12
  82. package/build/global-state/router-store.js.map +1 -1
  83. package/build/global-state/routing.js +29 -20
  84. package/build/global-state/routing.js.map +1 -1
  85. package/build/global-state/serverLocationContext.d.ts +0 -1
  86. package/build/global-state/serverLocationContext.d.ts.map +1 -1
  87. package/build/global-state/sort-routes.js +1 -2
  88. package/build/global-state/sort-routes.js.map +1 -1
  89. package/build/head/ExpoHead.android.d.ts +1 -1
  90. package/build/head/ExpoHead.android.js +1 -2
  91. package/build/head/ExpoHead.android.js.map +1 -1
  92. package/build/head/ExpoHead.ios.js.map +1 -1
  93. package/build/head/ExpoHeadModule.js.map +1 -1
  94. package/build/head/url.js +2 -3
  95. package/build/head/url.js.map +1 -1
  96. package/build/hooks.js +11 -12
  97. package/build/hooks.js.map +1 -1
  98. package/build/layouts/DrawerClient.d.ts +16 -17
  99. package/build/layouts/DrawerClient.d.ts.map +1 -1
  100. package/build/layouts/RootModal.d.ts +1 -2
  101. package/build/layouts/RootModal.d.ts.map +1 -1
  102. package/build/layouts/RootModal.js +2 -2
  103. package/build/layouts/RootModal.js.map +1 -1
  104. package/build/layouts/StackClient.d.ts +16 -16
  105. package/build/layouts/StackClient.d.ts.map +1 -1
  106. package/build/layouts/StackClient.js.map +1 -1
  107. package/build/layouts/TabsClient.d.ts +12 -12
  108. package/build/layouts/TabsClient.js.map +1 -1
  109. package/build/layouts/withLayoutContext.d.ts +2 -2
  110. package/build/layouts/withLayoutContext.d.ts.map +1 -1
  111. package/build/layouts/withLayoutContext.js +19 -10
  112. package/build/layouts/withLayoutContext.js.map +1 -1
  113. package/build/link/Link.d.ts.map +1 -1
  114. package/build/link/Link.js +2 -2
  115. package/build/link/Link.js.map +1 -1
  116. package/build/link/href.d.ts.map +1 -1
  117. package/build/link/href.js +2 -2
  118. package/build/link/href.js.map +1 -1
  119. package/build/link/linking.d.ts.map +1 -1
  120. package/build/link/linking.js +21 -11
  121. package/build/link/linking.js.map +1 -1
  122. package/build/link/useDomComponentNavigation.js +6 -7
  123. package/build/link/useDomComponentNavigation.js.map +1 -1
  124. package/build/link/useLinkHooks.d.ts.map +1 -1
  125. package/build/link/useLinkHooks.js +2 -2
  126. package/build/link/useLinkHooks.js.map +1 -1
  127. package/build/link/useLinkToPathProps.d.ts.map +1 -1
  128. package/build/link/useLinkToPathProps.js +2 -3
  129. package/build/link/useLinkToPathProps.js.map +1 -1
  130. package/build/link/useLoadedNavigation.d.ts.map +1 -1
  131. package/build/link/useLoadedNavigation.js +2 -3
  132. package/build/link/useLoadedNavigation.js.map +1 -1
  133. package/build/loadStaticParamsAsync.js +3 -4
  134. package/build/loadStaticParamsAsync.js.map +1 -1
  135. package/build/matchers.js +14 -15
  136. package/build/matchers.js.map +1 -1
  137. package/build/onboard/Tutorial.js +1 -2
  138. package/build/onboard/Tutorial.js.map +1 -1
  139. package/build/onboard/createEntryFile.js +2 -3
  140. package/build/onboard/createEntryFile.js.map +1 -1
  141. package/build/qualified-entry.js +1 -2
  142. package/build/qualified-entry.js.map +1 -1
  143. package/build/renderRootComponent.js +18 -9
  144. package/build/renderRootComponent.js.map +1 -1
  145. package/build/routes-manifest.js +1 -2
  146. package/build/routes-manifest.js.map +1 -1
  147. package/build/rsc/entry.js +1 -2
  148. package/build/rsc/entry.js.map +1 -1
  149. package/build/rsc/exports.d.ts +0 -1
  150. package/build/rsc/exports.d.ts.map +1 -1
  151. package/build/rsc/exports.js +18 -18
  152. package/build/rsc/exports.js.map +1 -1
  153. package/build/rsc/middleware.js +2 -3
  154. package/build/rsc/middleware.js.map +1 -1
  155. package/build/rsc/path.d.ts.map +1 -1
  156. package/build/rsc/path.js.map +1 -1
  157. package/build/rsc/router/client.d.ts +7 -7
  158. package/build/rsc/router/client.d.ts.map +1 -1
  159. package/build/rsc/router/client.js +4 -4
  160. package/build/rsc/router/client.js.map +1 -1
  161. package/build/rsc/router/common.js +4 -4
  162. package/build/rsc/router/common.js.map +1 -1
  163. package/build/rsc/router/create-expo-pages.d.ts.map +1 -1
  164. package/build/rsc/router/create-expo-pages.js +1 -2
  165. package/build/rsc/router/create-expo-pages.js.map +1 -1
  166. package/build/rsc/router/create-pages.d.ts +1 -3
  167. package/build/rsc/router/create-pages.d.ts.map +1 -1
  168. package/build/rsc/router/create-pages.js +1 -2
  169. package/build/rsc/router/create-pages.js.map +1 -1
  170. package/build/rsc/router/defineRouter.js +2 -3
  171. package/build/rsc/router/defineRouter.js.map +1 -1
  172. package/build/rsc/router/errors.js.map +1 -1
  173. package/build/rsc/router/expo-definedRouter.d.ts +1 -1
  174. package/build/rsc/router/expo-definedRouter.js.map +1 -1
  175. package/build/rsc/router/fetch.js +1 -2
  176. package/build/rsc/router/fetch.js.map +1 -1
  177. package/build/rsc/router/host.d.ts +3 -3
  178. package/build/rsc/router/host.d.ts.map +1 -1
  179. package/build/rsc/router/host.js.map +1 -1
  180. package/build/rsc/router/noopRouter.d.ts +1 -1
  181. package/build/rsc/router/utils.d.ts.map +1 -1
  182. package/build/rsc/router/utils.js.map +1 -1
  183. package/build/rsc/rsc-renderer.js +1 -2
  184. package/build/rsc/rsc-renderer.js.map +1 -1
  185. package/build/rsc/server.d.ts.map +1 -1
  186. package/build/rsc/server.js +5 -5
  187. package/build/rsc/server.js.map +1 -1
  188. package/build/sortRoutes.d.ts.map +1 -1
  189. package/build/sortRoutes.js +2 -3
  190. package/build/sortRoutes.js.map +1 -1
  191. package/build/static/getRootComponent.js +1 -2
  192. package/build/static/getRootComponent.js.map +1 -1
  193. package/build/static/getServerManifest.js +2 -3
  194. package/build/static/getServerManifest.js.map +1 -1
  195. package/build/static/html.js +2 -3
  196. package/build/static/html.js.map +1 -1
  197. package/build/static/renderStaticContent.js +19 -9
  198. package/build/static/renderStaticContent.js.map +1 -1
  199. package/build/testing-library/context-stubs.d.ts +1 -2
  200. package/build/testing-library/context-stubs.d.ts.map +1 -1
  201. package/build/testing-library/context-stubs.js +3 -3
  202. package/build/testing-library/context-stubs.js.map +1 -1
  203. package/build/testing-library/index.d.ts.map +1 -1
  204. package/build/testing-library/index.js +2 -2
  205. package/build/testing-library/index.js.map +1 -1
  206. package/build/testing-library/mock-config.js +2 -3
  207. package/build/testing-library/mock-config.js.map +1 -1
  208. package/build/testing-library/mocks.js.map +1 -1
  209. package/build/testing-library/require-context-ponyfill.js +1 -1
  210. package/build/testing-library/require-context-ponyfill.js.map +1 -1
  211. package/build/typed-routes/generate.js +4 -5
  212. package/build/typed-routes/generate.js.map +1 -1
  213. package/build/typed-routes/index.d.ts.map +1 -1
  214. package/build/typed-routes/index.js +2 -2
  215. package/build/typed-routes/index.js.map +1 -1
  216. package/build/ui/Slot.d.ts +0 -1
  217. package/build/ui/Slot.d.ts.map +1 -1
  218. package/build/ui/TabContext.d.ts +47 -55
  219. package/build/ui/TabContext.d.ts.map +1 -1
  220. package/build/ui/TabList.js +2 -3
  221. package/build/ui/TabList.js.map +1 -1
  222. package/build/ui/TabRouter.d.ts +27 -27
  223. package/build/ui/TabRouter.d.ts.map +1 -1
  224. package/build/ui/TabRouter.js +18 -9
  225. package/build/ui/TabRouter.js.map +1 -1
  226. package/build/ui/TabSlot.js +4 -5
  227. package/build/ui/TabSlot.js.map +1 -1
  228. package/build/ui/TabTrigger.js +3 -4
  229. package/build/ui/TabTrigger.js.map +1 -1
  230. package/build/ui/Tabs.d.ts +73 -78
  231. package/build/ui/Tabs.d.ts.map +1 -1
  232. package/build/ui/Tabs.js +3 -4
  233. package/build/ui/Tabs.js.map +1 -1
  234. package/build/ui/common.d.ts +2 -3
  235. package/build/ui/common.d.ts.map +1 -1
  236. package/build/ui/common.js +3 -3
  237. package/build/ui/common.js.map +1 -1
  238. package/build/ui/useComponent.d.ts.map +1 -1
  239. package/build/ui/useComponent.js +1 -2
  240. package/build/ui/useComponent.js.map +1 -1
  241. package/build/useDeprecated.js +2 -3
  242. package/build/useDeprecated.js.map +1 -1
  243. package/build/useFocusEffect.js +18 -9
  244. package/build/useFocusEffect.js.map +1 -1
  245. package/build/useNavigation.js +1 -2
  246. package/build/useNavigation.js.map +1 -1
  247. package/build/useScreens.js +5 -6
  248. package/build/useScreens.js.map +1 -1
  249. package/build/utils/splash.js +5 -6
  250. package/build/utils/splash.js.map +1 -1
  251. package/build/utils/url.js +3 -4
  252. package/build/utils/url.js.map +1 -1
  253. package/build/views/EmptyRoute.js +1 -2
  254. package/build/views/EmptyRoute.js.map +1 -1
  255. package/build/views/ErrorBoundary.d.ts +0 -1
  256. package/build/views/ErrorBoundary.d.ts.map +1 -1
  257. package/build/views/ErrorBoundary.js +1 -2
  258. package/build/views/ErrorBoundary.js.map +1 -1
  259. package/build/views/Navigator.js +22 -12
  260. package/build/views/Navigator.js.map +1 -1
  261. package/build/views/Pressable.d.ts.map +1 -1
  262. package/build/views/Screen.js +1 -2
  263. package/build/views/Screen.js.map +1 -1
  264. package/build/views/Sitemap.js +2 -3
  265. package/build/views/Sitemap.js.map +1 -1
  266. package/build/views/SuspenseFallback.js +1 -2
  267. package/build/views/SuspenseFallback.js.map +1 -1
  268. package/build/views/Toast.js +3 -3
  269. package/build/views/Toast.js.map +1 -1
  270. package/build/views/Try.js +17 -7
  271. package/build/views/Try.js.map +1 -1
  272. package/build/views/Unmatched.js +1 -2
  273. package/build/views/Unmatched.js.map +1 -1
  274. package/package.json +4 -4
@@ -3,11 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Head = void 0;
6
+ exports.Head = Head;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  function Head(props) {
9
9
  return null;
10
10
  }
11
- exports.Head = Head;
12
11
  Head.Provider = react_1.default.Fragment;
13
12
  //# sourceMappingURL=ExpoHead.android.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoHead.android.js","sourceRoot":"","sources":["../../src/head/ExpoHead.android.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAAsD;AAEtD,SAAgB,IAAI,CAAC,KAAwB;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC;AAFD,oBAEC;AAED,IAAI,CAAC,QAAQ,GAAG,eAAK,CAAC,QAAQ,CAAC","sourcesContent":["import React, { type PropsWithChildren } from 'react';\n\nexport function Head(props: PropsWithChildren) {\n return null;\n}\n\nHead.Provider = React.Fragment;\n"]}
1
+ {"version":3,"file":"ExpoHead.android.js","sourceRoot":"","sources":["../../src/head/ExpoHead.android.tsx"],"names":[],"mappings":";;;;;AAEA,oBAEC;AAJD,kDAAsD;AAEtD,SAAgB,IAAI,CAAC,KAAwB;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,IAAI,CAAC,QAAQ,GAAG,eAAK,CAAC,QAAQ,CAAC","sourcesContent":["import React, { type PropsWithChildren } from 'react';\n\nexport function Head(props: PropsWithChildren) {\n return null;\n}\n\nHead.Provider = React.Fragment;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoHead.ios.js","sourceRoot":"","sources":["../../src/head/ExpoHead.ios.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useIsFocused } from '@react-navigation/native';\nimport React, { JSX } from 'react';\n\nimport { ExpoHead, UserActivity } from './ExpoHeadModule';\nimport { getStaticUrlFromExpoRouter } from './url';\nimport { useLocalSearchParams, useUnstableGlobalHref, usePathname, useSegments } from '../hooks';\n\nfunction urlToId(url: string) {\n return url.replace(/[^a-zA-Z0-9]/g, '-');\n}\n\nfunction getLastSegment(path: string) {\n // Remove the extension\n const lastSegment = path.split('/').pop() ?? '';\n return lastSegment.replace(/\\.[^/.]+$/, '').split('?')[0];\n}\n\n// TODO: Use Head Provider to collect all props so only one Head is rendered for a given route.\n\nfunction useAddressableLink() {\n const pathname = useUnstableGlobalHref();\n const params = useLocalSearchParams<any>();\n const url = getStaticUrlFromExpoRouter(pathname);\n return { url, pathname, params };\n}\n\ntype MetaNode =\n | React.ReactPortal\n | React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;\n\nfunction useMetaChildren(children: React.ReactNode) {\n return React.useMemo(() => {\n const renderableChildren: React.ReactNode[] = [];\n const metaChildren: MetaNode[] = [];\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) {\n return;\n }\n if (typeof child.type === 'string') {\n metaChildren.push(child);\n } else {\n renderableChildren.push(child);\n }\n });\n\n return { children: renderableChildren, metaChildren };\n }, [children]);\n}\n\ntype SerializedMeta = {\n type: string;\n props: Record<string, string | undefined>;\n};\n\nfunction serializedMetaChildren(meta: MetaNode[]): SerializedMeta[] {\n const validMeta = meta.filter((child) => child.type === 'meta' || child.type === 'title');\n\n return validMeta.map((child) => {\n if (child.type === 'title') {\n return {\n type: 'title',\n props: {\n children:\n child.props &&\n typeof child.props === 'object' &&\n 'children' in child.props &&\n typeof child.props.children === 'string'\n ? child.props.children\n : undefined,\n },\n };\n }\n return {\n type: 'meta',\n props: {\n property:\n child.props &&\n typeof child.props === 'object' &&\n 'property' in child.props &&\n typeof child.props.property === 'string'\n ? child.props.property\n : undefined,\n content:\n child.props &&\n typeof child.props === 'object' &&\n 'content' in child.props &&\n typeof child.props.content === 'string'\n ? child.props.content\n : undefined,\n },\n };\n });\n}\n\nfunction useActivityFromMetaChildren(meta: MetaNode[]) {\n const { url: href, pathname } = useAddressableLink();\n\n const previousMeta = React.useRef<SerializedMeta[]>([]);\n const cachedActivity = React.useRef<Partial<UserActivity>>({});\n\n const sortedMeta = React.useMemo(() => serializedMetaChildren(meta), [meta]);\n\n const url = React.useMemo(() => {\n const urlMeta = sortedMeta.find(\n (child) => child.type === 'meta' && child.props.property === 'og:url'\n );\n\n if (urlMeta) {\n // Support =`/foo/bar` -> `https://example.com/foo/bar`\n if (urlMeta.props.content?.startsWith('/')) {\n return getStaticUrlFromExpoRouter(urlMeta.props.content);\n }\n return urlMeta.props.content;\n }\n return href;\n }, [sortedMeta, href]);\n\n const title = React.useMemo(() => {\n const titleTag = sortedMeta.find((child) => child.type === 'title');\n if (titleTag) {\n return titleTag.props.children ?? '';\n }\n const titleMeta = sortedMeta.find(\n (child) => child.type === 'meta' && child.props.property === 'og:title'\n );\n if (titleMeta) {\n return titleMeta.props.content ?? '';\n }\n\n return getLastSegment(pathname);\n }, [sortedMeta, pathname]);\n\n const activity = React.useMemo(() => {\n if (\n !!previousMeta.current &&\n !!cachedActivity.current &&\n deepObjectCompare(previousMeta.current, sortedMeta)\n ) {\n return cachedActivity.current;\n }\n previousMeta.current = sortedMeta;\n\n const userActivity: Partial<UserActivity> = {};\n\n sortedMeta.forEach((child) => {\n if (\n // <meta />\n child.type === 'meta'\n ) {\n const { property, content } = child.props;\n\n switch (property) {\n case 'og:description':\n userActivity.description = content;\n break;\n // Custom properties\n case 'expo:handoff':\n userActivity.isEligibleForHandoff = isTruthy(content);\n break;\n case 'expo:spotlight':\n userActivity.isEligibleForSearch = isTruthy(content);\n break;\n }\n\n // // <meta name=\"keywords\" content=\"foo,bar,baz\" />\n // if ([\"keywords\"].includes(name)) {\n // userActivity.keywords = Array.isArray(content)\n // ? content\n // : content.split(\",\");\n // }\n }\n });\n\n cachedActivity.current = userActivity;\n return userActivity;\n }, [meta, pathname, href]);\n\n const parsedActivity: UserActivity = {\n keywords: [title],\n ...activity,\n title,\n webpageURL: url,\n activityType: ExpoHead!.activities.INDEXED_ROUTE,\n userInfo: {\n // TODO: This may need to be versioned in the future, e.g. `_v1` if we change the format.\n href,\n },\n };\n\n return parsedActivity;\n}\n\nfunction isTruthy(value: any): boolean {\n return [true, 'true'].includes(value);\n}\n\nfunction HeadNative(props: { children?: React.ReactNode }) {\n const isFocused = useIsFocused();\n if (!isFocused) {\n return <UnfocusedHead />;\n }\n return <FocusedHead {...props} />;\n}\n\nfunction UnfocusedHead(props: { children?: React.ReactNode }): JSX.Element {\n const { children } = useMetaChildren(props.children);\n return <>{children}</>;\n}\n\nfunction FocusedHead(props: { children?: React.ReactNode }): JSX.Element {\n const { metaChildren, children } = useMetaChildren(props.children);\n const activity = useActivityFromMetaChildren(metaChildren);\n useRegisterCurrentActivity(activity);\n return <>{children}</>;\n}\n\n// segments => activity\nconst activities: Map<string, UserActivity> = new Map();\n\nfunction useRegisterCurrentActivity(activity: UserActivity) {\n // ID is tied to Expo Router and agnostic of URLs to ensure dynamic parameters are not considered.\n // Using all segments ensures that cascading routes are considered.\n const activityId = urlToId(usePathname() || '/');\n const cascadingId = urlToId(useSegments().join('-') || '-');\n const activityIds = Array.from(activities.keys());\n const cascadingActivity: UserActivity = React.useMemo(() => {\n // Get all nested activities together, then update the id to match the current pathname.\n // This enables cases like `/user/[name]/post/[id]` to match all nesting, while still having a URL-specific ID, i.e. `/user/evanbacon/post/123`\n const cascadingActivity = activities.has(cascadingId)\n ? {\n ...activities.get(cascadingId),\n ...activity,\n id: activityId,\n }\n : {\n ...activity,\n id: activityId,\n };\n activities.set(cascadingId, cascadingActivity);\n\n return cascadingActivity;\n }, [cascadingId, activityId, activity, activityIds]);\n\n const previousActivity = React.useRef<UserActivity | null>(null);\n\n React.useEffect(() => {\n if (!cascadingActivity) {\n return () => {};\n }\n if (\n !!previousActivity.current &&\n deepObjectCompare(previousActivity.current, cascadingActivity)\n ) {\n return () => {};\n }\n\n previousActivity.current = cascadingActivity;\n if (!cascadingActivity.id) {\n throw new Error('Activity must have an ID');\n }\n\n // If no features are enabled, then skip registering the activity\n if (cascadingActivity.isEligibleForHandoff || cascadingActivity.isEligibleForSearch) {\n ExpoHead?.createActivity(cascadingActivity);\n }\n\n return () => {};\n }, [cascadingActivity]);\n\n React.useEffect(() => {\n return () => {\n if (activityId) {\n ExpoHead?.suspendActivity(activityId);\n }\n };\n }, [activityId]);\n}\n\nfunction deepObjectCompare(a: any, b: any) {\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'object') {\n if (Array.isArray(a) !== Array.isArray(b)) {\n return false;\n }\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n return a.every((item, index) => deepObjectCompare(item, b[index]));\n }\n // handle null\n if (a === null || b === null) {\n return a === b;\n }\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n return aKeys.every((key) => deepObjectCompare(a[key], b[key]));\n }\n return a === b;\n}\n\nHeadNative.Provider = React.Fragment;\n\nfunction HeadShim(props: React.PropsWithChildren) {\n return null;\n}\n\nHeadShim.Provider = React.Fragment;\n\n// Native Head is only enabled in bare iOS apps.\nexport const Head: ((props: React.PropsWithChildren) => React.ReactNode) & {\n Provider: React.ComponentType;\n} = ExpoHead ? HeadNative : HeadShim;\n"]}
1
+ {"version":3,"file":"ExpoHead.ios.js","sourceRoot":"","sources":["../../src/head/ExpoHead.ios.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useIsFocused } from '@react-navigation/native';\nimport React, { JSX } from 'react';\n\nimport { ExpoHead, UserActivity } from './ExpoHeadModule';\nimport { getStaticUrlFromExpoRouter } from './url';\nimport { useLocalSearchParams, useUnstableGlobalHref, usePathname, useSegments } from '../hooks';\n\nfunction urlToId(url: string) {\n return url.replace(/[^a-zA-Z0-9]/g, '-');\n}\n\nfunction getLastSegment(path: string) {\n // Remove the extension\n const lastSegment = path.split('/').pop() ?? '';\n return lastSegment.replace(/\\.[^/.]+$/, '').split('?')[0];\n}\n\n// TODO: Use Head Provider to collect all props so only one Head is rendered for a given route.\n\nfunction useAddressableLink() {\n const pathname = useUnstableGlobalHref();\n const params = useLocalSearchParams<any>();\n const url = getStaticUrlFromExpoRouter(pathname);\n return { url, pathname, params };\n}\n\ntype MetaNode =\n | React.ReactPortal\n | React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;\n\nfunction useMetaChildren(children: React.ReactNode) {\n return React.useMemo(() => {\n const renderableChildren: React.ReactNode[] = [];\n const metaChildren: MetaNode[] = [];\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) {\n return;\n }\n if (typeof child.type === 'string') {\n metaChildren.push(child);\n } else {\n renderableChildren.push(child);\n }\n });\n\n return { children: renderableChildren, metaChildren };\n }, [children]);\n}\n\ntype SerializedMeta = {\n type: string;\n props: Record<string, string | undefined>;\n};\n\nfunction serializedMetaChildren(meta: MetaNode[]): SerializedMeta[] {\n const validMeta = meta.filter((child) => child.type === 'meta' || child.type === 'title');\n\n return validMeta.map((child) => {\n if (child.type === 'title') {\n return {\n type: 'title',\n props: {\n children:\n child.props &&\n typeof child.props === 'object' &&\n 'children' in child.props &&\n typeof child.props.children === 'string'\n ? child.props.children\n : undefined,\n },\n };\n }\n return {\n type: 'meta',\n props: {\n property:\n child.props &&\n typeof child.props === 'object' &&\n 'property' in child.props &&\n typeof child.props.property === 'string'\n ? child.props.property\n : undefined,\n content:\n child.props &&\n typeof child.props === 'object' &&\n 'content' in child.props &&\n typeof child.props.content === 'string'\n ? child.props.content\n : undefined,\n },\n };\n });\n}\n\nfunction useActivityFromMetaChildren(meta: MetaNode[]) {\n const { url: href, pathname } = useAddressableLink();\n\n const previousMeta = React.useRef<SerializedMeta[]>([]);\n const cachedActivity = React.useRef<Partial<UserActivity>>({});\n\n const sortedMeta = React.useMemo(() => serializedMetaChildren(meta), [meta]);\n\n const url = React.useMemo(() => {\n const urlMeta = sortedMeta.find(\n (child) => child.type === 'meta' && child.props.property === 'og:url'\n );\n\n if (urlMeta) {\n // Support =`/foo/bar` -> `https://example.com/foo/bar`\n if (urlMeta.props.content?.startsWith('/')) {\n return getStaticUrlFromExpoRouter(urlMeta.props.content);\n }\n return urlMeta.props.content;\n }\n return href;\n }, [sortedMeta, href]);\n\n const title = React.useMemo(() => {\n const titleTag = sortedMeta.find((child) => child.type === 'title');\n if (titleTag) {\n return titleTag.props.children ?? '';\n }\n const titleMeta = sortedMeta.find(\n (child) => child.type === 'meta' && child.props.property === 'og:title'\n );\n if (titleMeta) {\n return titleMeta.props.content ?? '';\n }\n\n return getLastSegment(pathname);\n }, [sortedMeta, pathname]);\n\n const activity = React.useMemo(() => {\n if (\n !!previousMeta.current &&\n !!cachedActivity.current &&\n deepObjectCompare(previousMeta.current, sortedMeta)\n ) {\n return cachedActivity.current;\n }\n previousMeta.current = sortedMeta;\n\n const userActivity: Partial<UserActivity> = {};\n\n sortedMeta.forEach((child) => {\n if (\n // <meta />\n child.type === 'meta'\n ) {\n const { property, content } = child.props;\n\n switch (property) {\n case 'og:description':\n userActivity.description = content;\n break;\n // Custom properties\n case 'expo:handoff':\n userActivity.isEligibleForHandoff = isTruthy(content);\n break;\n case 'expo:spotlight':\n userActivity.isEligibleForSearch = isTruthy(content);\n break;\n }\n\n // // <meta name=\"keywords\" content=\"foo,bar,baz\" />\n // if ([\"keywords\"].includes(name)) {\n // userActivity.keywords = Array.isArray(content)\n // ? content\n // : content.split(\",\");\n // }\n }\n });\n\n cachedActivity.current = userActivity;\n return userActivity;\n }, [meta, pathname, href]);\n\n const parsedActivity: UserActivity = {\n keywords: [title],\n ...activity,\n title,\n webpageURL: url,\n activityType: ExpoHead!.activities.INDEXED_ROUTE,\n userInfo: {\n // TODO: This may need to be versioned in the future, e.g. `_v1` if we change the format.\n href,\n },\n };\n\n return parsedActivity;\n}\n\nfunction isTruthy(value: any): boolean {\n return [true, 'true'].includes(value);\n}\n\nfunction HeadNative(props: { children?: React.ReactNode }) {\n const isFocused = useIsFocused();\n if (!isFocused) {\n return <UnfocusedHead />;\n }\n return <FocusedHead {...props} />;\n}\n\nfunction UnfocusedHead(props: { children?: React.ReactNode }): JSX.Element {\n const { children } = useMetaChildren(props.children);\n return <>{children}</>;\n}\n\nfunction FocusedHead(props: { children?: React.ReactNode }): JSX.Element {\n const { metaChildren, children } = useMetaChildren(props.children);\n const activity = useActivityFromMetaChildren(metaChildren);\n useRegisterCurrentActivity(activity);\n return <>{children}</>;\n}\n\n// segments => activity\nconst activities: Map<string, UserActivity> = new Map();\n\nfunction useRegisterCurrentActivity(activity: UserActivity) {\n // ID is tied to Expo Router and agnostic of URLs to ensure dynamic parameters are not considered.\n // Using all segments ensures that cascading routes are considered.\n const activityId = urlToId(usePathname() || '/');\n const cascadingId = urlToId(useSegments().join('-') || '-');\n const activityIds = Array.from(activities.keys());\n const cascadingActivity: UserActivity = React.useMemo(() => {\n // Get all nested activities together, then update the id to match the current pathname.\n // This enables cases like `/user/[name]/post/[id]` to match all nesting, while still having a URL-specific ID, i.e. `/user/evanbacon/post/123`\n const cascadingActivity = activities.has(cascadingId)\n ? {\n ...activities.get(cascadingId),\n ...activity,\n id: activityId,\n }\n : {\n ...activity,\n id: activityId,\n };\n activities.set(cascadingId, cascadingActivity);\n\n return cascadingActivity;\n }, [cascadingId, activityId, activity, activityIds]);\n\n const previousActivity = React.useRef<UserActivity | null>(null);\n\n React.useEffect(() => {\n if (!cascadingActivity) {\n return () => {};\n }\n if (\n !!previousActivity.current &&\n deepObjectCompare(previousActivity.current, cascadingActivity)\n ) {\n return () => {};\n }\n\n previousActivity.current = cascadingActivity;\n if (!cascadingActivity.id) {\n throw new Error('Activity must have an ID');\n }\n\n // If no features are enabled, then skip registering the activity\n if (cascadingActivity.isEligibleForHandoff || cascadingActivity.isEligibleForSearch) {\n ExpoHead?.createActivity(cascadingActivity);\n }\n\n return () => {};\n }, [cascadingActivity]);\n\n React.useEffect(() => {\n return () => {\n if (activityId) {\n ExpoHead?.suspendActivity(activityId);\n }\n };\n }, [activityId]);\n}\n\nfunction deepObjectCompare(a: any, b: any) {\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'object') {\n if (Array.isArray(a) !== Array.isArray(b)) {\n return false;\n }\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n return a.every((item, index) => deepObjectCompare(item, b[index]));\n }\n // handle null\n if (a === null || b === null) {\n return a === b;\n }\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n return aKeys.every((key) => deepObjectCompare(a[key], b[key]));\n }\n return a === b;\n}\n\nHeadNative.Provider = React.Fragment;\n\nfunction HeadShim(props: React.PropsWithChildren) {\n return null;\n}\n\nHeadShim.Provider = React.Fragment;\n\n// Native Head is only enabled in bare iOS apps.\nexport const Head: ((props: React.PropsWithChildren) => React.ReactNode) & {\n Provider: React.ComponentType;\n} = ExpoHead ? HeadNative : HeadShim;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoHeadModule.js","sourceRoot":"","sources":["../../src/head/ExpoHeadModule.ts"],"names":[],"mappings":";AAAA,0BAA0B;AAC1B,sGAAsG;;;AA+BtG,IAAI,QAAQ,GASD,IAAI,CAAC;AAOP,4BAAQ;AALjB,yBAAyB;AACzB,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;IACpE,mBAAA,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;CAC/C","sourcesContent":["// isEligibleForPrediction\n// https://developer.apple.com/documentation/foundation/nsuseractivity/2980674-iseligibleforprediction\n\nexport type UserActivity = {\n id?: string;\n /**\n * The activity title should be clear and concise. This text describes the content of the link, like “Photo taken on July 27, 2020” or “Conversation with Maria”. Use nouns for activity titles.\n */\n title?: string;\n description?: string;\n webpageURL?: string;\n keywords?: string[];\n // TODO: Get this automatically somehow\n activityType: string;\n // TODO: Maybe something like robots.txt?\n phrase?: string;\n\n thumbnailURL?: string;\n\n userInfo?: Record<string, string>;\n\n isEligibleForHandoff?: boolean;\n isEligibleForPrediction?: boolean;\n isEligibleForSearch?: boolean;\n\n /** Local file path for an image */\n imageUrl?: string;\n darkImageUrl?: string;\n dateModified?: Date;\n expirationDate?: Date;\n};\n\nlet ExpoHead: {\n activities: {\n INDEXED_ROUTE: string;\n };\n getLaunchActivity(): UserActivity;\n createActivity(userActivity: UserActivity): void;\n clearActivitiesAsync(ids: string[]): Promise<void>;\n suspendActivity(id: string): void;\n revokeActivity(id: string): void;\n} | null = null;\n\n// If running in Expo Go.\nif (typeof expo !== 'undefined' && !globalThis.expo?.modules?.ExpoGo) {\n ExpoHead = globalThis.expo?.modules?.ExpoHead;\n}\n\nexport { ExpoHead };\n"]}
1
+ {"version":3,"file":"ExpoHeadModule.js","sourceRoot":"","sources":["../../src/head/ExpoHeadModule.ts"],"names":[],"mappings":";AAAA,0BAA0B;AAC1B,sGAAsG;;;AA+BtG,IAAI,QAAQ,GASD,IAAI,CAAC;AAOP,4BAAQ;AALjB,yBAAyB;AACzB,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACrE,mBAAA,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;AAChD,CAAC","sourcesContent":["// isEligibleForPrediction\n// https://developer.apple.com/documentation/foundation/nsuseractivity/2980674-iseligibleforprediction\n\nexport type UserActivity = {\n id?: string;\n /**\n * The activity title should be clear and concise. This text describes the content of the link, like “Photo taken on July 27, 2020” or “Conversation with Maria”. Use nouns for activity titles.\n */\n title?: string;\n description?: string;\n webpageURL?: string;\n keywords?: string[];\n // TODO: Get this automatically somehow\n activityType: string;\n // TODO: Maybe something like robots.txt?\n phrase?: string;\n\n thumbnailURL?: string;\n\n userInfo?: Record<string, string>;\n\n isEligibleForHandoff?: boolean;\n isEligibleForPrediction?: boolean;\n isEligibleForSearch?: boolean;\n\n /** Local file path for an image */\n imageUrl?: string;\n darkImageUrl?: string;\n dateModified?: Date;\n expirationDate?: Date;\n};\n\nlet ExpoHead: {\n activities: {\n INDEXED_ROUTE: string;\n };\n getLaunchActivity(): UserActivity;\n createActivity(userActivity: UserActivity): void;\n clearActivitiesAsync(ids: string[]): Promise<void>;\n suspendActivity(id: string): void;\n revokeActivity(id: string): void;\n} | null = null;\n\n// If running in Expo Go.\nif (typeof expo !== 'undefined' && !globalThis.expo?.modules?.ExpoGo) {\n ExpoHead = globalThis.expo?.modules?.ExpoHead;\n}\n\nexport { ExpoHead };\n"]}
package/build/head/url.js CHANGED
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getStaticUrlFromExpoRouter = exports.getOriginFromConstants = void 0;
6
+ exports.getOriginFromConstants = getOriginFromConstants;
7
+ exports.getStaticUrlFromExpoRouter = getStaticUrlFromExpoRouter;
7
8
  const expo_constants_1 = __importDefault(require("expo-constants"));
8
9
  const protocolWarningString = `{ plugins: [["expo-router", { origin: "...<URL>..." }]] }`;
9
10
  /** `lodash.memoize` */
@@ -65,7 +66,6 @@ function getOriginFromConstants() {
65
66
  // Return the development URL last so the user gets all production warnings first.
66
67
  return memoSanitizeUrl(origin);
67
68
  }
68
- exports.getOriginFromConstants = getOriginFromConstants;
69
69
  function throwOrAlert(msg) {
70
70
  // Production apps fatally crash which is often not helpful.
71
71
  if (
@@ -83,5 +83,4 @@ function getStaticUrlFromExpoRouter(pathname) {
83
83
  // Append the URL we'd find in context
84
84
  return getHeadOriginFromConstants() + pathname;
85
85
  }
86
- exports.getStaticUrlFromExpoRouter = getStaticUrlFromExpoRouter;
87
86
  //# sourceMappingURL=url.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/head/url.tsx"],"names":[],"mappings":";;;;;;AAAA,oEAAuC;AAEvC,MAAM,qBAAqB,GAAG,2DAA2D,CAAC;AAE1F,uBAAuB;AACvB,SAAS,OAAO,CAAoC,EAAK;IACvD,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,OAAO,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACd,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;SACnB;QACD,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC,CAAQ,CAAC;AACZ,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAE5B,wCAAwC;IACxC,MAAM,aAAa,GACjB,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAElF,IAAI,CAAC,aAAa,EAAE;QAClB,YAAY,CACV,kDAAkD,MAAM,CAAC,QAAQ,6BAA6B,qBAAqB,GAAG,CACvH,CAAC;KACH;IAED,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAE7B,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAE7C,SAAS,0BAA0B;IACjC,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,wBAAS,CAAC,UAAU,CAAC;IAEtC,MAAM,MAAM,GACV,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU;QACnC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;QAC/B,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC;IAE3C,IAAI,CAAC,MAAM,EAAE;QACX,YAAY,CACV,kGAAkG,qBAAqB,uCAAuC,CAC/J,CAAC;QACF,kDAAkD;QAClD,OAAO,kBAAkB,CAAC;KAC3B;IAED,uEAAuE;IACvE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE;QACnC,OAAO,CAAC,IAAI,CACV,sBAAsB,MAAM,yCAAyC,qBAAqB,GAAG,CAC9F,CAAC;KACH;IAED,kFAAkF;IAClF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,SAAgB,sBAAsB;IACpC,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,wBAAS,CAAC,UAAU,CAAC;IAEtC,MAAM,MAAM,GACV,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU;QACnC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;QAC/B,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC;IAE3C,IAAI,CAAC,MAAM,EAAE;QACX,YAAY,CACV,yFAAyF,qBAAqB,uCAAuC,CACtJ,CAAC;QACF,kDAAkD;QAClD,OAAO,uBAAuB,CAAC;KAChC;IAED,kFAAkF;IAClF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAnBD,wDAmBC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,4DAA4D;IAC5D;IACE,iCAAiC;IACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EACrC;QACA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,KAAK,CAAC,GAAG,CAAC,CAAC;KACZ;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;KACtB;AACH,CAAC;AAED,SAAgB,0BAA0B,CAAC,QAAgB;IACzD,kCAAkC;IAClC,sCAAsC;IACtC,OAAO,0BAA0B,EAAE,GAAG,QAAQ,CAAC;AACjD,CAAC;AAJD,gEAIC","sourcesContent":["import Constants from 'expo-constants';\n\nconst protocolWarningString = `{ plugins: [[\"expo-router\", { origin: \"...<URL>...\" }]] }`;\n\n/** `lodash.memoize` */\nfunction memoize<T extends (...args: any[]) => any>(fn: T): T {\n const cache: Record<string, any> = {};\n return ((...args: any[]) => {\n const key = JSON.stringify(args);\n if (cache[key]) {\n return cache[key];\n }\n const result = fn(...args);\n cache[key] = result;\n return result;\n }) as any;\n}\n\nfunction sanitizeUrl(url: string): string {\n const parsed = new URL(url);\n\n // Allow empty protocol, http, and https\n const validProtocol =\n !parsed.protocol || parsed.protocol === 'http:' || parsed.protocol === 'https:';\n\n if (!validProtocol) {\n throwOrAlert(\n `Expo Head: Native origin has invalid protocol \"${parsed.protocol}\" for URL in Expo Config: ${protocolWarningString}.`\n );\n }\n\n parsed.pathname = '';\n parsed.search = '';\n parsed.hash = '';\n parsed.protocol ??= 'https:';\n\n return parsed.toString().replace(/\\/$/, '');\n}\n\nconst memoSanitizeUrl = memoize(sanitizeUrl);\n\nfunction getHeadOriginFromConstants(): string | null {\n // This will require a rebuild in bare-workflow to update.\n const manifest = Constants.expoConfig;\n\n const origin =\n manifest?.extra?.router?.headOrigin ??\n manifest?.extra?.router?.origin ??\n manifest?.extra?.router?.generatedOrigin;\n\n if (!origin) {\n throwOrAlert(\n `Expo Head: Add the handoff origin to the Expo Config (requires rebuild). Add the Config Plugin ${protocolWarningString}, where \\`origin\\` is the hosted URL.`\n );\n // Fallback value that shouldn't be used for real.\n return 'https://expo.dev';\n }\n\n // Without this, the URL will go to an IP address which is not allowed.\n if (!origin.match(/^http(s)?:\\/\\//)) {\n console.warn(\n `Expo Head: origin \"${origin}\" is missing a \\`https://\\` protocol. ${protocolWarningString}.`\n );\n }\n\n // Return the development URL last so the user gets all production warnings first.\n return memoSanitizeUrl(origin);\n}\n\nexport function getOriginFromConstants(): string | null {\n // This will require a rebuild in bare-workflow to update.\n const manifest = Constants.expoConfig;\n\n const origin =\n manifest?.extra?.router?.headOrigin ??\n manifest?.extra?.router?.origin ??\n manifest?.extra?.router?.generatedOrigin;\n\n if (!origin) {\n throwOrAlert(\n `Expo RSC: Add the origin to the Expo Config (requires rebuild). Add the Config Plugin ${protocolWarningString}, where \\`origin\\` is the hosted URL.`\n );\n // Fallback value that shouldn't be used for real.\n return 'http://localhost:3000';\n }\n\n // Return the development URL last so the user gets all production warnings first.\n return memoSanitizeUrl(origin);\n}\n\nfunction throwOrAlert(msg: string) {\n // Production apps fatally crash which is often not helpful.\n if (\n // @ts-ignore: process is defined\n process.env.NODE_ENV === 'production'\n ) {\n console.error(msg);\n alert(msg);\n } else {\n throw new Error(msg);\n }\n}\n\nexport function getStaticUrlFromExpoRouter(pathname: string) {\n // const host = \"https://expo.io\";\n // Append the URL we'd find in context\n return getHeadOriginFromConstants() + pathname;\n}\n"]}
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/head/url.tsx"],"names":[],"mappings":"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","sourcesContent":["import Constants from 'expo-constants';\n\nconst protocolWarningString = `{ plugins: [[\"expo-router\", { origin: \"...<URL>...\" }]] }`;\n\n/** `lodash.memoize` */\nfunction memoize<T extends (...args: any[]) => any>(fn: T): T {\n const cache: Record<string, any> = {};\n return ((...args: any[]) => {\n const key = JSON.stringify(args);\n if (cache[key]) {\n return cache[key];\n }\n const result = fn(...args);\n cache[key] = result;\n return result;\n }) as any;\n}\n\nfunction sanitizeUrl(url: string): string {\n const parsed = new URL(url);\n\n // Allow empty protocol, http, and https\n const validProtocol =\n !parsed.protocol || parsed.protocol === 'http:' || parsed.protocol === 'https:';\n\n if (!validProtocol) {\n throwOrAlert(\n `Expo Head: Native origin has invalid protocol \"${parsed.protocol}\" for URL in Expo Config: ${protocolWarningString}.`\n );\n }\n\n parsed.pathname = '';\n parsed.search = '';\n parsed.hash = '';\n parsed.protocol ??= 'https:';\n\n return parsed.toString().replace(/\\/$/, '');\n}\n\nconst memoSanitizeUrl = memoize(sanitizeUrl);\n\nfunction getHeadOriginFromConstants(): string | null {\n // This will require a rebuild in bare-workflow to update.\n const manifest = Constants.expoConfig;\n\n const origin =\n manifest?.extra?.router?.headOrigin ??\n manifest?.extra?.router?.origin ??\n manifest?.extra?.router?.generatedOrigin;\n\n if (!origin) {\n throwOrAlert(\n `Expo Head: Add the handoff origin to the Expo Config (requires rebuild). Add the Config Plugin ${protocolWarningString}, where \\`origin\\` is the hosted URL.`\n );\n // Fallback value that shouldn't be used for real.\n return 'https://expo.dev';\n }\n\n // Without this, the URL will go to an IP address which is not allowed.\n if (!origin.match(/^http(s)?:\\/\\//)) {\n console.warn(\n `Expo Head: origin \"${origin}\" is missing a \\`https://\\` protocol. ${protocolWarningString}.`\n );\n }\n\n // Return the development URL last so the user gets all production warnings first.\n return memoSanitizeUrl(origin);\n}\n\nexport function getOriginFromConstants(): string | null {\n // This will require a rebuild in bare-workflow to update.\n const manifest = Constants.expoConfig;\n\n const origin =\n manifest?.extra?.router?.headOrigin ??\n manifest?.extra?.router?.origin ??\n manifest?.extra?.router?.generatedOrigin;\n\n if (!origin) {\n throwOrAlert(\n `Expo RSC: Add the origin to the Expo Config (requires rebuild). Add the Config Plugin ${protocolWarningString}, where \\`origin\\` is the hosted URL.`\n );\n // Fallback value that shouldn't be used for real.\n return 'http://localhost:3000';\n }\n\n // Return the development URL last so the user gets all production warnings first.\n return memoSanitizeUrl(origin);\n}\n\nfunction throwOrAlert(msg: string) {\n // Production apps fatally crash which is often not helpful.\n if (\n // @ts-ignore: process is defined\n process.env.NODE_ENV === 'production'\n ) {\n console.error(msg);\n alert(msg);\n } else {\n throw new Error(msg);\n }\n}\n\nexport function getStaticUrlFromExpoRouter(pathname: string) {\n // const host = \"https://expo.io\";\n // Append the URL we'd find in context\n return getHeadOriginFromConstants() + pathname;\n}\n"]}
package/build/hooks.js CHANGED
@@ -4,7 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.useSearchParams = exports.useLocalSearchParams = exports.useGlobalSearchParams = exports.usePathname = exports.useSegments = exports.useUnstableGlobalHref = exports.useRouter = exports.useNavigationContainerRef = exports.useRootNavigation = exports.useRouteInfo = exports.useRootNavigationState = void 0;
7
+ exports.useRootNavigationState = useRootNavigationState;
8
+ exports.useRouteInfo = useRouteInfo;
9
+ exports.useRootNavigation = useRootNavigation;
10
+ exports.useNavigationContainerRef = useNavigationContainerRef;
11
+ exports.useRouter = useRouter;
12
+ exports.useUnstableGlobalHref = useUnstableGlobalHref;
13
+ exports.useSegments = useSegments;
14
+ exports.usePathname = usePathname;
15
+ exports.useGlobalSearchParams = useGlobalSearchParams;
16
+ exports.useLocalSearchParams = useLocalSearchParams;
17
+ exports.useSearchParams = useSearchParams;
8
18
  const react_1 = __importDefault(require("react"));
9
19
  const Route_1 = require("./Route");
10
20
  const router_store_1 = require("./global-state/router-store");
@@ -26,11 +36,9 @@ const router_store_1 = require("./global-state/router-store");
26
36
  function useRootNavigationState() {
27
37
  return (0, router_store_1.useStoreRootState)();
28
38
  }
29
- exports.useRootNavigationState = useRootNavigationState;
30
39
  function useRouteInfo() {
31
40
  return (0, router_store_1.useStoreRouteInfo)();
32
41
  }
33
- exports.useRouteInfo = useRouteInfo;
34
42
  /**
35
43
  * @deprecated Use [`useNavigationContainerRef`](#usenavigationcontainerref) instead,
36
44
  * which returns a React `ref`.
@@ -38,7 +46,6 @@ exports.useRouteInfo = useRouteInfo;
38
46
  function useRootNavigation() {
39
47
  return router_store_1.store.navigationRef.current;
40
48
  }
41
- exports.useRootNavigation = useRootNavigation;
42
49
  /**
43
50
  * @return The root `<NavigationContainer />` ref for the app. The `ref.current` may be `null`
44
51
  * if the `<NavigationContainer />` hasn't mounted yet.
@@ -46,7 +53,6 @@ exports.useRootNavigation = useRootNavigation;
46
53
  function useNavigationContainerRef() {
47
54
  return router_store_1.store.navigationRef;
48
55
  }
49
- exports.useNavigationContainerRef = useNavigationContainerRef;
50
56
  /**
51
57
  *
52
58
  * Returns the [Router](#router) object for imperative navigation.
@@ -80,7 +86,6 @@ function useRouter() {
80
86
  reload: router_store_1.store.reload,
81
87
  }), []);
82
88
  }
83
- exports.useRouter = useRouter;
84
89
  /**
85
90
  * @private
86
91
  * @returns The current global pathname with query params attached. This may change in the future to include the hostname
@@ -89,11 +94,9 @@ exports.useRouter = useRouter;
89
94
  function useUnstableGlobalHref() {
90
95
  return (0, router_store_1.useStoreRouteInfo)().unstable_globalHref;
91
96
  }
92
- exports.useUnstableGlobalHref = useUnstableGlobalHref;
93
97
  function useSegments() {
94
98
  return (0, router_store_1.useStoreRouteInfo)().segments;
95
99
  }
96
- exports.useSegments = useSegments;
97
100
  /**
98
101
  * Returns the currently selected route location without search parameters. For example, `/acme?foo=bar` returns `/acme`.
99
102
  * Segments will be normalized. For example, `/[id]?id=normal` becomes `/normal`.
@@ -114,11 +117,9 @@ exports.useSegments = useSegments;
114
117
  function usePathname() {
115
118
  return (0, router_store_1.useStoreRouteInfo)().pathname;
116
119
  }
117
- exports.usePathname = usePathname;
118
120
  function useGlobalSearchParams() {
119
121
  return (0, router_store_1.useStoreRouteInfo)().params;
120
122
  }
121
- exports.useGlobalSearchParams = useGlobalSearchParams;
122
123
  function useLocalSearchParams() {
123
124
  const params = react_1.default.useContext(Route_1.LocalRouteParamsContext) ?? {};
124
125
  return Object.fromEntries(Object.entries(params).map(([key, value]) => {
@@ -145,7 +146,6 @@ function useLocalSearchParams() {
145
146
  }
146
147
  }));
147
148
  }
148
- exports.useLocalSearchParams = useLocalSearchParams;
149
149
  function useSearchParams({ global = false } = {}) {
150
150
  const globalRef = react_1.default.useRef(global);
151
151
  if (process.env.NODE_ENV !== 'production') {
@@ -166,7 +166,6 @@ function useSearchParams({ global = false } = {}) {
166
166
  });
167
167
  return new ReadOnlyURLSearchParams(entries);
168
168
  }
169
- exports.useSearchParams = useSearchParams;
170
169
  class ReadOnlyURLSearchParams extends URLSearchParams {
171
170
  set() {
172
171
  throw new Error('The URLSearchParams object return from useSearchParams is read-only');
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;AAEb,kDAA0B;AAE1B,mCAAkD;AAClD,8DAA0F;AAI1F;;;;;;;;;;;;;;GAcG;AACH,SAAgB,sBAAsB;IACpC,OAAO,IAAA,gCAAiB,GAAE,CAAC;AAC7B,CAAC;AAFD,wDAEC;AAED,SAAgB,YAAY;IAC1B,OAAO,IAAA,gCAAiB,GAAE,CAAC;AAC7B,CAAC;AAFD,oCAEC;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,oBAAK,CAAC,aAAa,CAAC,OAAO,CAAC;AACrC,CAAC;AAFD,8CAEC;AAED;;;GAGG;AACH,SAAgB,yBAAyB;IACvC,OAAO,oBAAK,CAAC,aAAa,CAAC;AAC7B,CAAC;AAFD,8DAEC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,SAAS;IACvB,OAAO,eAAK,CAAC,OAAO,CAClB,GAAG,EAAE,CAAC,CAAC;QACL,IAAI,EAAE,oBAAK,CAAC,IAAI;QAChB,OAAO,EAAE,oBAAK,CAAC,OAAO;QACtB,UAAU,EAAE,oBAAK,CAAC,UAAU;QAC5B,SAAS,EAAE,oBAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,oBAAK,CAAC,UAAU;QAC5B,IAAI,EAAE,oBAAK,CAAC,MAAM;QAClB,OAAO,EAAE,oBAAK,CAAC,OAAO;QACtB,SAAS,EAAE,oBAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,oBAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,oBAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,oBAAK,CAAC,MAAM;KACrB,CAAC,EACF,EAAE,CACH,CAAC;AACJ,CAAC;AAjBD,8BAiBC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB;IACnC,OAAO,IAAA,gCAAiB,GAAE,CAAC,mBAAmB,CAAC;AACjD,CAAC;AAFD,sDAEC;AA2CD,SAAgB,WAAW;IACzB,OAAO,IAAA,gCAAiB,GAAE,CAAC,QAAQ,CAAC;AACtC,CAAC;AAFD,kCAEC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,WAAW;IACzB,OAAO,IAAA,gCAAiB,GAAE,CAAC,QAAQ,CAAC;AACtC,CAAC;AAFD,kCAEC;AA4CD,SAAgB,qBAAqB;IACnC,OAAO,IAAA,gCAAiB,GAAE,CAAC,MAAM,CAAC;AACpC,CAAC;AAFD,sDAEC;AAyCD,SAAgB,oBAAoB;IAClC,MAAM,MAAM,GAAG,eAAK,CAAC,UAAU,CAAC,+BAAuB,CAAC,IAAI,EAAE,CAAC;IAC/D,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO;gBACL,GAAG;gBACH,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACd,IAAI;wBACF,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;qBAC9B;oBAAC,MAAM;wBACN,OAAO,CAAC,CAAC;qBACV;gBACH,CAAC,CAAC;aACH,CAAC;SACH;aAAM;YACL,IAAI;gBACF,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAe,CAAC,CAAC,CAAC;aACnD;YAAC,MAAM;gBACN,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aACrB;SACF;IACH,CAAC,CAAC,CACI,CAAC;AACX,CAAC;AAxBD,oDAwBC;AAED,SAAgB,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE;IACrD,MAAM,SAAS,GAAG,eAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;QACzC,IAAI,MAAM,KAAK,SAAS,CAAC,OAAO,EAAE;YAChC,OAAO,CAAC,IAAI,CACV,iGAAiG,CAClG,CAAC;SACH;KACF;IAED,sDAAsD;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC9D,IAAI,MAAM,EAAE;YACV,IAAI,GAAG,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;YAChC,IAAI,GAAG,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;SACjC;QAED,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAtBD,0CAsBC;AAED,MAAM,uBAAwB,SAAQ,eAAe;IACnD,GAAG;QACD,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM;QACJ,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM;QACJ,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;CACF","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { LocalRouteParamsContext } from './Route';\nimport { store, useStoreRootState, useStoreRouteInfo } from './global-state/router-store';\nimport { Router } from './imperative-api';\nimport { RouteParams, RouteSegments, UnknownOutputParams, Route } from './types';\n\n/**\n * Returns the [navigation state](https://reactnavigation.org/docs/navigation-state/)\n * of the navigator which contains the current screen.\n *\n * @example\n * ```tsx\n * import { useRootNavigationState } from 'expo-router';\n *\n * export default function Route() {\n * const { routes } = useRootNavigationState();\n *\n * return <Text>{routes[0].name}</Text>;\n * }\n * ```\n */\nexport function useRootNavigationState() {\n return useStoreRootState();\n}\n\nexport function useRouteInfo() {\n return useStoreRouteInfo();\n}\n\n/**\n * @deprecated Use [`useNavigationContainerRef`](#usenavigationcontainerref) instead,\n * which returns a React `ref`.\n */\nexport function useRootNavigation() {\n return store.navigationRef.current;\n}\n\n/**\n * @return The root `<NavigationContainer />` ref for the app. The `ref.current` may be `null`\n * if the `<NavigationContainer />` hasn't mounted yet.\n */\nexport function useNavigationContainerRef() {\n return store.navigationRef;\n}\n\n/**\n *\n * Returns the [Router](#router) object for imperative navigation.\n *\n * @example\n *```tsx\n * import { useRouter } from 'expo-router';\n * import { Text } from 'react-native';\n *\n * export default function Route() {\n * const router = useRouter();\n *\n * return (\n * <Text onPress={() => router.push('/home')}>Go Home</Text>\n * );\n *}\n * ```\n */\nexport function useRouter(): Router {\n return React.useMemo(\n () => ({\n push: store.push,\n dismiss: store.dismiss,\n dismissAll: store.dismissAll,\n dismissTo: store.dismissTo,\n canDismiss: store.canDismiss,\n back: store.goBack,\n replace: store.replace,\n setParams: store.setParams,\n canGoBack: store.canGoBack,\n navigate: store.navigate,\n reload: store.reload,\n }),\n []\n );\n}\n\n/**\n * @private\n * @returns The current global pathname with query params attached. This may change in the future to include the hostname\n * from a predefined universal link. For example, `/foobar?hey=world` becomes `https://acme.dev/foobar?hey=world`.\n */\nexport function useUnstableGlobalHref(): string {\n return useStoreRouteInfo().unstable_globalHref;\n}\n\n/**\n * Returns a list of selected file segments for the currently selected route. Segments are not normalized,\n * so they will be the same as the file path. For example, `/[id]?id=normal` becomes `[\"[id]\"]`.\n *\n * @example\n * ```tsx app/profile/[user].tsx\n * import { Text } from 'react-native';\n * import { useSegments } from 'expo-router';\n *\n * export default function Route() {\n * // segments = [\"profile\", \"[user]\"]\n * const segments = useSegments();\n *\n * return <Text>Hello</Text>;\n * }\n * ```\n *\n *\n * `useSegments` can be typed using an abstract. Consider the following file structure:\n *\n * ```md\n * - app\n * - [user]\n * - index.tsx\n * - followers.tsx\n * - settings.tsx\n * ```\n *\n *\n * This can be strictly typed using the following abstract with `useSegments` hook:\n *\n * ```tsx\n * const [first, second] = useSegments<['settings'] | ['[user]'] | ['[user]', 'followers']>()\n * ```\n */\nexport function useSegments<TSegments extends Route = Route>(): RouteSegments<TSegments>;\n\n/**\n * @hidden\n */\nexport function useSegments<TSegments extends RouteSegments<Route>>(): TSegments;\nexport function useSegments() {\n return useStoreRouteInfo().segments;\n}\n\n/**\n * Returns the currently selected route location without search parameters. For example, `/acme?foo=bar` returns `/acme`.\n * Segments will be normalized. For example, `/[id]?id=normal` becomes `/normal`.\n *\n * @example\n * ```tsx app/profile/[user].tsx\n * import { Text } from 'react-native';\n * import { usePathname } from 'expo-router';\n *\n * export default function Route() {\n * // pathname = \"/profile/baconbrix\"\n * const pathname = usePathname();\n *\n * return <Text>User: {user}</Text>;\n * }\n * ```\n */\nexport function usePathname(): string {\n return useStoreRouteInfo().pathname;\n}\n\n/**\n * @hidden\n */\nexport function useGlobalSearchParams<\n TParams extends UnknownOutputParams = UnknownOutputParams,\n>(): TParams;\n\n/**\n * @hidden\n */\nexport function useGlobalSearchParams<TRoute extends Route>(): RouteParams<TRoute>;\n\n/**\n * Returns URL parameters for globally selected route, including dynamic path segments.\n * This function updates even when the route is not focused. Useful for analytics or\n * other background operations that don't draw to the screen.\n *\n * Route URL example: `acme://profile/baconbrix?extra=info`.\n *\n * When querying search params in a stack, opt-towards using\n * [`useLocalSearchParams`](#uselocalsearchparams) because it will only update when the route is focused.\n *\n * > **Note:** For usage information, see\n * [Local versus global search parameters](/router/reference/url-parameters/#local-versus-global-url-parameters).\n *\n * @example\n * ```tsx app/profile/[user].tsx\n * import { Text } from 'react-native';\n * import { useGlobalSearchParams } from 'expo-router';\n *\n * export default function Route() {\n * // user=baconbrix & extra=info\n * const { user, extra } = useGlobalSearchParams();\n *\n * return <Text>User: {user}</Text>;\n * }\n * ```\n */\nexport function useGlobalSearchParams<\n TRoute extends Route,\n TParams extends UnknownOutputParams = UnknownOutputParams,\n>(): RouteParams<TRoute> & TParams;\nexport function useGlobalSearchParams() {\n return useStoreRouteInfo().params;\n}\n\n/**\n * @hidden\n */\nexport function useLocalSearchParams<\n TParams extends UnknownOutputParams = UnknownOutputParams,\n>(): TParams;\n\n/**\n * @hidden\n */\nexport function useLocalSearchParams<TRoute extends Route>(): RouteParams<TRoute>;\n\n/**\n * Returns the URL parameters for the contextually focused route. Useful for stacks where you may push a new screen\n * that changes the query parameters. For dynamic routes, both the route parameters and the search parameters are returned.\n *\n * Route URL example: `acme://profile/baconbrix?extra=info`.\n *\n * To observe updates even when the invoking route is not focused, use [`useGlobalSearchParams`](#useglobalsearchparams).\n *\n * > **Note:** For usage information, see\n * [Local versus global search parameters](/router/reference/url-parameters/#local-versus-global-url-parameters).\n *\n * @example\n * ```tsx app/profile/[user].tsx\n * import { Text } from 'react-native';\n * import { useLocalSearchParams } from 'expo-router';\n *\n * export default function Route() {\n * // user=baconbrix & extra=info\n * const { user, extra } = useLocalSearchParams();\n *\n * return <Text>User: {user}</Text>;\n * }\n */\nexport function useLocalSearchParams<\n TRoute extends Route,\n TParams extends UnknownOutputParams = UnknownOutputParams,\n>(): RouteParams<TRoute> & TParams;\nexport function useLocalSearchParams() {\n const params = React.useContext(LocalRouteParamsContext) ?? {};\n return Object.fromEntries(\n Object.entries(params).map(([key, value]) => {\n if (Array.isArray(value)) {\n return [\n key,\n value.map((v) => {\n try {\n return decodeURIComponent(v);\n } catch {\n return v;\n }\n }),\n ];\n } else {\n try {\n return [key, decodeURIComponent(value as string)];\n } catch {\n return [key, value];\n }\n }\n })\n ) as any;\n}\n\nexport function useSearchParams({ global = false } = {}): URLSearchParams {\n const globalRef = React.useRef(global);\n if (process.env.NODE_ENV !== 'production') {\n if (global !== globalRef.current) {\n console.warn(\n `Detected change in 'global' option of useSearchParams. This value cannot change between renders`\n );\n }\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const params = global ? useGlobalSearchParams() : useLocalSearchParams();\n const entries = Object.entries(params).flatMap(([key, value]) => {\n if (global) {\n if (key === 'params') return [];\n if (key === 'screen') return [];\n }\n\n return Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]];\n });\n\n return new ReadOnlyURLSearchParams(entries);\n}\n\nclass ReadOnlyURLSearchParams extends URLSearchParams {\n set() {\n throw new Error('The URLSearchParams object return from useSearchParams is read-only');\n }\n append() {\n throw new Error('The URLSearchParams object return from useSearchParams is read-only');\n }\n delete() {\n throw new Error('The URLSearchParams object return from useSearchParams is read-only');\n }\n}\n"]}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { LocalRouteParamsContext } from './Route';\nimport { store, useStoreRootState, useStoreRouteInfo } from './global-state/router-store';\nimport { Router } from './imperative-api';\nimport { RouteParams, RouteSegments, UnknownOutputParams, Route } from './types';\n\n/**\n * Returns the [navigation state](https://reactnavigation.org/docs/navigation-state/)\n * of the navigator which contains the current screen.\n *\n * @example\n * ```tsx\n * import { useRootNavigationState } from 'expo-router';\n *\n * export default function Route() {\n * const { routes } = useRootNavigationState();\n *\n * return <Text>{routes[0].name}</Text>;\n * }\n * ```\n */\nexport function useRootNavigationState() {\n return useStoreRootState();\n}\n\nexport function useRouteInfo() {\n return useStoreRouteInfo();\n}\n\n/**\n * @deprecated Use [`useNavigationContainerRef`](#usenavigationcontainerref) instead,\n * which returns a React `ref`.\n */\nexport function useRootNavigation() {\n return store.navigationRef.current;\n}\n\n/**\n * @return The root `<NavigationContainer />` ref for the app. The `ref.current` may be `null`\n * if the `<NavigationContainer />` hasn't mounted yet.\n */\nexport function useNavigationContainerRef() {\n return store.navigationRef;\n}\n\n/**\n *\n * Returns the [Router](#router) object for imperative navigation.\n *\n * @example\n *```tsx\n * import { useRouter } from 'expo-router';\n * import { Text } from 'react-native';\n *\n * export default function Route() {\n * const router = useRouter();\n *\n * return (\n * <Text onPress={() => router.push('/home')}>Go Home</Text>\n * );\n *}\n * ```\n */\nexport function useRouter(): Router {\n return React.useMemo(\n () => ({\n push: store.push,\n dismiss: store.dismiss,\n dismissAll: store.dismissAll,\n dismissTo: store.dismissTo,\n canDismiss: store.canDismiss,\n back: store.goBack,\n replace: store.replace,\n setParams: store.setParams,\n canGoBack: store.canGoBack,\n navigate: store.navigate,\n reload: store.reload,\n }),\n []\n );\n}\n\n/**\n * @private\n * @returns The current global pathname with query params attached. This may change in the future to include the hostname\n * from a predefined universal link. For example, `/foobar?hey=world` becomes `https://acme.dev/foobar?hey=world`.\n */\nexport function useUnstableGlobalHref(): string {\n return useStoreRouteInfo().unstable_globalHref;\n}\n\n/**\n * Returns a list of selected file segments for the currently selected route. Segments are not normalized,\n * so they will be the same as the file path. For example, `/[id]?id=normal` becomes `[\"[id]\"]`.\n *\n * @example\n * ```tsx app/profile/[user].tsx\n * import { Text } from 'react-native';\n * import { useSegments } from 'expo-router';\n *\n * export default function Route() {\n * // segments = [\"profile\", \"[user]\"]\n * const segments = useSegments();\n *\n * return <Text>Hello</Text>;\n * }\n * ```\n *\n *\n * `useSegments` can be typed using an abstract. Consider the following file structure:\n *\n * ```md\n * - app\n * - [user]\n * - index.tsx\n * - followers.tsx\n * - settings.tsx\n * ```\n *\n *\n * This can be strictly typed using the following abstract with `useSegments` hook:\n *\n * ```tsx\n * const [first, second] = useSegments<['settings'] | ['[user]'] | ['[user]', 'followers']>()\n * ```\n */\nexport function useSegments<TSegments extends Route = Route>(): RouteSegments<TSegments>;\n\n/**\n * @hidden\n */\nexport function useSegments<TSegments extends RouteSegments<Route>>(): TSegments;\nexport function useSegments() {\n return useStoreRouteInfo().segments;\n}\n\n/**\n * Returns the currently selected route location without search parameters. For example, `/acme?foo=bar` returns `/acme`.\n * Segments will be normalized. For example, `/[id]?id=normal` becomes `/normal`.\n *\n * @example\n * ```tsx app/profile/[user].tsx\n * import { Text } from 'react-native';\n * import { usePathname } from 'expo-router';\n *\n * export default function Route() {\n * // pathname = \"/profile/baconbrix\"\n * const pathname = usePathname();\n *\n * return <Text>User: {user}</Text>;\n * }\n * ```\n */\nexport function usePathname(): string {\n return useStoreRouteInfo().pathname;\n}\n\n/**\n * @hidden\n */\nexport function useGlobalSearchParams<\n TParams extends UnknownOutputParams = UnknownOutputParams,\n>(): TParams;\n\n/**\n * @hidden\n */\nexport function useGlobalSearchParams<TRoute extends Route>(): RouteParams<TRoute>;\n\n/**\n * Returns URL parameters for globally selected route, including dynamic path segments.\n * This function updates even when the route is not focused. Useful for analytics or\n * other background operations that don't draw to the screen.\n *\n * Route URL example: `acme://profile/baconbrix?extra=info`.\n *\n * When querying search params in a stack, opt-towards using\n * [`useLocalSearchParams`](#uselocalsearchparams) because it will only update when the route is focused.\n *\n * > **Note:** For usage information, see\n * [Local versus global search parameters](/router/reference/url-parameters/#local-versus-global-url-parameters).\n *\n * @example\n * ```tsx app/profile/[user].tsx\n * import { Text } from 'react-native';\n * import { useGlobalSearchParams } from 'expo-router';\n *\n * export default function Route() {\n * // user=baconbrix & extra=info\n * const { user, extra } = useGlobalSearchParams();\n *\n * return <Text>User: {user}</Text>;\n * }\n * ```\n */\nexport function useGlobalSearchParams<\n TRoute extends Route,\n TParams extends UnknownOutputParams = UnknownOutputParams,\n>(): RouteParams<TRoute> & TParams;\nexport function useGlobalSearchParams() {\n return useStoreRouteInfo().params;\n}\n\n/**\n * @hidden\n */\nexport function useLocalSearchParams<\n TParams extends UnknownOutputParams = UnknownOutputParams,\n>(): TParams;\n\n/**\n * @hidden\n */\nexport function useLocalSearchParams<TRoute extends Route>(): RouteParams<TRoute>;\n\n/**\n * Returns the URL parameters for the contextually focused route. Useful for stacks where you may push a new screen\n * that changes the query parameters. For dynamic routes, both the route parameters and the search parameters are returned.\n *\n * Route URL example: `acme://profile/baconbrix?extra=info`.\n *\n * To observe updates even when the invoking route is not focused, use [`useGlobalSearchParams`](#useglobalsearchparams).\n *\n * > **Note:** For usage information, see\n * [Local versus global search parameters](/router/reference/url-parameters/#local-versus-global-url-parameters).\n *\n * @example\n * ```tsx app/profile/[user].tsx\n * import { Text } from 'react-native';\n * import { useLocalSearchParams } from 'expo-router';\n *\n * export default function Route() {\n * // user=baconbrix & extra=info\n * const { user, extra } = useLocalSearchParams();\n *\n * return <Text>User: {user}</Text>;\n * }\n */\nexport function useLocalSearchParams<\n TRoute extends Route,\n TParams extends UnknownOutputParams = UnknownOutputParams,\n>(): RouteParams<TRoute> & TParams;\nexport function useLocalSearchParams() {\n const params = React.useContext(LocalRouteParamsContext) ?? {};\n return Object.fromEntries(\n Object.entries(params).map(([key, value]) => {\n if (Array.isArray(value)) {\n return [\n key,\n value.map((v) => {\n try {\n return decodeURIComponent(v);\n } catch {\n return v;\n }\n }),\n ];\n } else {\n try {\n return [key, decodeURIComponent(value as string)];\n } catch {\n return [key, value];\n }\n }\n })\n ) as any;\n}\n\nexport function useSearchParams({ global = false } = {}): URLSearchParams {\n const globalRef = React.useRef(global);\n if (process.env.NODE_ENV !== 'production') {\n if (global !== globalRef.current) {\n console.warn(\n `Detected change in 'global' option of useSearchParams. This value cannot change between renders`\n );\n }\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const params = global ? useGlobalSearchParams() : useLocalSearchParams();\n const entries = Object.entries(params).flatMap(([key, value]) => {\n if (global) {\n if (key === 'params') return [];\n if (key === 'screen') return [];\n }\n\n return Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]];\n });\n\n return new ReadOnlyURLSearchParams(entries);\n}\n\nclass ReadOnlyURLSearchParams extends URLSearchParams {\n set() {\n throw new Error('The URLSearchParams object return from useSearchParams is read-only');\n }\n append() {\n throw new Error('The URLSearchParams object return from useSearchParams is read-only');\n }\n delete() {\n throw new Error('The URLSearchParams object return from useSearchParams is read-only');\n }\n}\n"]}
@@ -1,14 +1,13 @@
1
- /// <reference types="react" />
2
1
  import { DrawerNavigationOptions, DrawerNavigationEventMap } from '@react-navigation/drawer';
3
2
  import { DrawerNavigationState, ParamListBase } from '@react-navigation/native';
4
3
  export declare const Drawer: import("react").ForwardRefExoticComponent<Omit<Omit<import("@react-navigation/drawer").DrawerNavigatorProps, "initialRouteName" | "children" | "layout" | "id" | "screenListeners" | "screenOptions" | "screenLayout" | "UNSTABLE_router"> & import("@react-navigation/native").DefaultRouterOptions<string> & {
5
- children: import("react").ReactNode;
4
+ children: React.ReactNode;
6
5
  layout?: ((props: {
7
6
  state: DrawerNavigationState<ParamListBase>;
8
7
  navigation: import("@react-navigation/native").NavigationHelpers<ParamListBase, {}>;
9
8
  descriptors: Record<string, import("@react-navigation/native").Descriptor<DrawerNavigationOptions, import("@react-navigation/native").NavigationProp<ParamListBase, string, string | undefined, DrawerNavigationState<ParamListBase>, DrawerNavigationOptions, DrawerNavigationEventMap>, import("@react-navigation/native").RouteProp<ParamListBase, string>>>;
10
- children: import("react").ReactNode;
11
- }) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>) | undefined;
9
+ children: React.ReactNode;
10
+ }) => React.ReactElement) | undefined;
12
11
  screenListeners?: Partial<{
13
12
  drawerItemPress: import("@react-navigation/native").EventListenerCallback<DrawerNavigationEventMap & import("@react-navigation/native").EventMapCore<DrawerNavigationState<ParamListBase>>, "drawerItemPress", true>;
14
13
  transitionStart: import("@react-navigation/native").EventListenerCallback<DrawerNavigationEventMap & import("@react-navigation/native").EventMapCore<DrawerNavigationState<ParamListBase>>, "transitionStart", unknown>;
@@ -44,24 +43,24 @@ export declare const Drawer: import("react").ForwardRefExoticComponent<Omit<Omit
44
43
  route: import("@react-navigation/native").RouteProp<ParamListBase, string>;
45
44
  navigation: import("@react-navigation/drawer").DrawerNavigationProp<ParamListBase, string, undefined>;
46
45
  theme: ReactNavigation.Theme;
47
- children: import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
48
- }) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>) | undefined;
46
+ children: React.ReactElement;
47
+ }) => React.ReactElement) | undefined;
49
48
  UNSTABLE_router?: (<Action extends Readonly<{
50
49
  type: string;
51
- payload?: object | undefined;
52
- source?: string | undefined;
53
- target?: string | undefined;
50
+ payload?: object;
51
+ source?: string;
52
+ target?: string;
54
53
  }>>(original: import("@react-navigation/native").Router<DrawerNavigationState<ParamListBase>, Action>) => Partial<import("@react-navigation/native").Router<DrawerNavigationState<ParamListBase>, Action>>) | undefined;
55
54
  } & {
56
55
  id?: undefined;
57
56
  }, "children"> & Partial<Pick<Omit<import("@react-navigation/drawer").DrawerNavigatorProps, "initialRouteName" | "children" | "layout" | "id" | "screenListeners" | "screenOptions" | "screenLayout" | "UNSTABLE_router"> & import("@react-navigation/native").DefaultRouterOptions<string> & {
58
- children: import("react").ReactNode;
57
+ children: React.ReactNode;
59
58
  layout?: ((props: {
60
59
  state: DrawerNavigationState<ParamListBase>;
61
60
  navigation: import("@react-navigation/native").NavigationHelpers<ParamListBase, {}>;
62
61
  descriptors: Record<string, import("@react-navigation/native").Descriptor<DrawerNavigationOptions, import("@react-navigation/native").NavigationProp<ParamListBase, string, string | undefined, DrawerNavigationState<ParamListBase>, DrawerNavigationOptions, DrawerNavigationEventMap>, import("@react-navigation/native").RouteProp<ParamListBase, string>>>;
63
- children: import("react").ReactNode;
64
- }) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>) | undefined;
62
+ children: React.ReactNode;
63
+ }) => React.ReactElement) | undefined;
65
64
  screenListeners?: Partial<{
66
65
  drawerItemPress: import("@react-navigation/native").EventListenerCallback<DrawerNavigationEventMap & import("@react-navigation/native").EventMapCore<DrawerNavigationState<ParamListBase>>, "drawerItemPress", true>;
67
66
  transitionStart: import("@react-navigation/native").EventListenerCallback<DrawerNavigationEventMap & import("@react-navigation/native").EventMapCore<DrawerNavigationState<ParamListBase>>, "transitionStart", unknown>;
@@ -97,13 +96,13 @@ export declare const Drawer: import("react").ForwardRefExoticComponent<Omit<Omit
97
96
  route: import("@react-navigation/native").RouteProp<ParamListBase, string>;
98
97
  navigation: import("@react-navigation/drawer").DrawerNavigationProp<ParamListBase, string, undefined>;
99
98
  theme: ReactNavigation.Theme;
100
- children: import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
101
- }) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>) | undefined;
99
+ children: React.ReactElement;
100
+ }) => React.ReactElement) | undefined;
102
101
  UNSTABLE_router?: (<Action extends Readonly<{
103
102
  type: string;
104
- payload?: object | undefined;
105
- source?: string | undefined;
106
- target?: string | undefined;
103
+ payload?: object;
104
+ source?: string;
105
+ target?: string;
107
106
  }>>(original: import("@react-navigation/native").Router<DrawerNavigationState<ParamListBase>, Action>) => Partial<import("@react-navigation/native").Router<DrawerNavigationState<ParamListBase>, Action>>) | undefined;
108
107
  } & {
109
108
  id?: undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerClient.d.ts","sourceRoot":"","sources":["../../src/layouts/DrawerClient.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMhF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKD,CAAC;AAEnB,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"DrawerClient.d.ts","sourceRoot":"","sources":["../../src/layouts/DrawerClient.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMhF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKD,CAAC;AAEnB,eAAe,MAAM,CAAC"}
@@ -1,6 +1,5 @@
1
- /// <reference types="react" />
2
1
  type RootModalContextValue = {
3
- root: true;
2
+ root: boolean;
4
3
  routes: never[];
5
4
  addModal: (name: string) => void;
6
5
  removeModal: (name: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"RootModal.d.ts","sourceRoot":"","sources":["../../src/layouts/RootModal.tsx"],"names":[],"mappings":";AAEA,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,gBAAgB,gDAK3B,CAAC;AAEH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,+BAe5E"}
1
+ {"version":3,"file":"RootModal.d.ts","sourceRoot":"","sources":["../../src/layouts/RootModal.tsx"],"names":[],"mappings":"AAEA,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,gBAAgB,gDAK3B,CAAC;AAEH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,+BAe5E"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RootModalProvider = exports.RootModalContext = void 0;
3
+ exports.RootModalContext = void 0;
4
+ exports.RootModalProvider = RootModalProvider;
4
5
  const react_1 = require("react");
5
6
  exports.RootModalContext = (0, react_1.createContext)({
6
7
  root: true,
@@ -22,5 +23,4 @@ function RootModalProvider({ children }) {
22
23
  }));
23
24
  return <exports.RootModalContext.Provider value={state}>{children}</exports.RootModalContext.Provider>;
24
25
  }
25
- exports.RootModalProvider = RootModalProvider;
26
26
  //# sourceMappingURL=RootModal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RootModal.js","sourceRoot":"","sources":["../../src/layouts/RootModal.tsx"],"names":[],"mappings":";;;AAAA,iCAA4D;AAS/C,QAAA,gBAAgB,GAAG,IAAA,qBAAa,EAAwB;IACnE,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;CACtB,CAAC,CAAC;AAEH,SAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAiC;IAC3E,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,wBAAgB,CAAC,CAAC;IAE5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAwB,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE;YACzB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnF,CAAC;QACD,WAAW,EAAE,CAAC,IAAY,EAAE,EAAE;YAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnF,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,OAAO,CAAC,wBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,wBAAgB,CAAC,QAAQ,CAAC,CAAC;AACzF,CAAC;AAfD,8CAeC","sourcesContent":["import { createContext, useContext, useState } from 'react';\n\ntype RootModalContextValue = {\n root: true;\n routes: never[];\n addModal: (name: string) => void;\n removeModal: (name: string) => void;\n};\n\nexport const RootModalContext = createContext<RootModalContextValue>({\n root: true,\n routes: [],\n addModal: () => {},\n removeModal: () => {},\n});\n\nexport function RootModalProvider({ children }: { children: React.ReactNode }) {\n const parent = useContext(RootModalContext);\n\n const [state, setState] = useState<RootModalContextValue>(() => ({\n root: false,\n routes: [],\n addModal: (name: string) => {\n return parent.root ? setState((state) => ({ ...state })) : parent.addModal(name);\n },\n removeModal: (name: string) => {\n return parent.root ? setState((state) => ({ ...state })) : parent.addModal(name);\n },\n }));\n\n return <RootModalContext.Provider value={state}>{children}</RootModalContext.Provider>;\n}\n"]}
1
+ {"version":3,"file":"RootModal.js","sourceRoot":"","sources":["../../src/layouts/RootModal.tsx"],"names":[],"mappings":";;;AAgBA,8CAeC;AA/BD,iCAA4D;AAS/C,QAAA,gBAAgB,GAAG,IAAA,qBAAa,EAAwB;IACnE,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;CACtB,CAAC,CAAC;AAEH,SAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAiC;IAC3E,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,wBAAgB,CAAC,CAAC;IAE5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAwB,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE;YACzB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnF,CAAC;QACD,WAAW,EAAE,CAAC,IAAY,EAAE,EAAE;YAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnF,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,OAAO,CAAC,wBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,wBAAgB,CAAC,QAAQ,CAAC,CAAC;AACzF,CAAC","sourcesContent":["import { createContext, useContext, useState } from 'react';\n\ntype RootModalContextValue = {\n root: boolean;\n routes: never[];\n addModal: (name: string) => void;\n removeModal: (name: string) => void;\n};\n\nexport const RootModalContext = createContext<RootModalContextValue>({\n root: true,\n routes: [],\n addModal: () => {},\n removeModal: () => {},\n});\n\nexport function RootModalProvider({ children }: { children: React.ReactNode }) {\n const parent = useContext(RootModalContext);\n\n const [state, setState] = useState<RootModalContextValue>(() => ({\n root: false,\n routes: [],\n addModal: (name: string) => {\n return parent.root ? setState((state) => ({ ...state })) : parent.addModal(name);\n },\n removeModal: (name: string) => {\n return parent.root ? setState((state) => ({ ...state })) : parent.addModal(name);\n },\n }));\n\n return <RootModalContext.Provider value={state}>{children}</RootModalContext.Provider>;\n}\n"]}
@@ -2,13 +2,13 @@ import { ParamListBase, StackRouter as RNStackRouter, StackNavigationState } fro
2
2
  import { NativeStackNavigationEventMap, NativeStackNavigationOptions } from '@react-navigation/native-stack';
3
3
  import { ComponentProps } from 'react';
4
4
  declare const RNStack: import("react").ForwardRefExoticComponent<Omit<Omit<import("@react-navigation/native-stack").NativeStackNavigatorProps, "initialRouteName" | "children" | "layout" | "id" | "screenListeners" | "screenOptions" | "screenLayout" | "UNSTABLE_router"> & import("@react-navigation/native").DefaultRouterOptions<string> & {
5
- children: import("react").ReactNode;
5
+ children: React.ReactNode;
6
6
  layout?: ((props: {
7
7
  state: StackNavigationState<ParamListBase>;
8
8
  navigation: import("@react-navigation/native").NavigationHelpers<ParamListBase, {}>;
9
9
  descriptors: Record<string, import("@react-navigation/native").Descriptor<NativeStackNavigationOptions, import("@react-navigation/native").NavigationProp<ParamListBase, string, string | undefined, StackNavigationState<ParamListBase>, NativeStackNavigationOptions, NativeStackNavigationEventMap>, import("@react-navigation/native").RouteProp<ParamListBase, string>>>;
10
- children: import("react").ReactNode;
11
- }) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>) | undefined;
10
+ children: React.ReactNode;
11
+ }) => React.ReactElement) | undefined;
12
12
  screenListeners?: Partial<{
13
13
  transitionStart: import("@react-navigation/native").EventListenerCallback<NativeStackNavigationEventMap & import("@react-navigation/native").EventMapCore<StackNavigationState<ParamListBase>>, "transitionStart", unknown>;
14
14
  transitionEnd: import("@react-navigation/native").EventListenerCallback<NativeStackNavigationEventMap & import("@react-navigation/native").EventMapCore<StackNavigationState<ParamListBase>>, "transitionEnd", unknown>;
@@ -40,24 +40,24 @@ declare const RNStack: import("react").ForwardRefExoticComponent<Omit<Omit<impor
40
40
  route: import("@react-navigation/native").RouteProp<ParamListBase, string>;
41
41
  navigation: import("@react-navigation/native-stack").NativeStackNavigationProp<ParamListBase, string, undefined>;
42
42
  theme: ReactNavigation.Theme;
43
- children: import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
44
- }) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>) | undefined;
43
+ children: React.ReactElement;
44
+ }) => React.ReactElement) | undefined;
45
45
  UNSTABLE_router?: (<Action extends Readonly<{
46
46
  type: string;
47
- payload?: object | undefined;
48
- source?: string | undefined;
49
- target?: string | undefined;
47
+ payload?: object;
48
+ source?: string;
49
+ target?: string;
50
50
  }>>(original: import("@react-navigation/native").Router<StackNavigationState<ParamListBase>, Action>) => Partial<import("@react-navigation/native").Router<StackNavigationState<ParamListBase>, Action>>) | undefined;
51
51
  } & {
52
52
  id?: undefined;
53
53
  }, "children"> & Partial<Pick<Omit<import("@react-navigation/native-stack").NativeStackNavigatorProps, "initialRouteName" | "children" | "layout" | "id" | "screenListeners" | "screenOptions" | "screenLayout" | "UNSTABLE_router"> & import("@react-navigation/native").DefaultRouterOptions<string> & {
54
- children: import("react").ReactNode;
54
+ children: React.ReactNode;
55
55
  layout?: ((props: {
56
56
  state: StackNavigationState<ParamListBase>;
57
57
  navigation: import("@react-navigation/native").NavigationHelpers<ParamListBase, {}>;
58
58
  descriptors: Record<string, import("@react-navigation/native").Descriptor<NativeStackNavigationOptions, import("@react-navigation/native").NavigationProp<ParamListBase, string, string | undefined, StackNavigationState<ParamListBase>, NativeStackNavigationOptions, NativeStackNavigationEventMap>, import("@react-navigation/native").RouteProp<ParamListBase, string>>>;
59
- children: import("react").ReactNode;
60
- }) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>) | undefined;
59
+ children: React.ReactNode;
60
+ }) => React.ReactElement) | undefined;
61
61
  screenListeners?: Partial<{
62
62
  transitionStart: import("@react-navigation/native").EventListenerCallback<NativeStackNavigationEventMap & import("@react-navigation/native").EventMapCore<StackNavigationState<ParamListBase>>, "transitionStart", unknown>;
63
63
  transitionEnd: import("@react-navigation/native").EventListenerCallback<NativeStackNavigationEventMap & import("@react-navigation/native").EventMapCore<StackNavigationState<ParamListBase>>, "transitionEnd", unknown>;
@@ -89,13 +89,13 @@ declare const RNStack: import("react").ForwardRefExoticComponent<Omit<Omit<impor
89
89
  route: import("@react-navigation/native").RouteProp<ParamListBase, string>;
90
90
  navigation: import("@react-navigation/native-stack").NativeStackNavigationProp<ParamListBase, string, undefined>;
91
91
  theme: ReactNavigation.Theme;
92
- children: import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
93
- }) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>) | undefined;
92
+ children: React.ReactElement;
93
+ }) => React.ReactElement) | undefined;
94
94
  UNSTABLE_router?: (<Action extends Readonly<{
95
95
  type: string;
96
- payload?: object | undefined;
97
- source?: string | undefined;
98
- target?: string | undefined;
96
+ payload?: object;
97
+ source?: string;
98
+ target?: string;
99
99
  }>>(original: import("@react-navigation/native").Router<StackNavigationState<ParamListBase>, Action>) => Partial<import("@react-navigation/native").Router<StackNavigationState<ParamListBase>, Action>>) | undefined;
100
100
  } & {
101
101
  id?: undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"StackClient.d.ts","sourceRoot":"","sources":["../../src/layouts/StackClient.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,aAAa,EAKb,WAAW,IAAI,aAAa,EAE5B,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAE7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AASvC,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKU,CAAC;AAcxB;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,cAAc,CAAC,OAAO,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAyG9F,CAAC;AAoEF,QAAA,MAAM,KAAK,WACD,eAAe,cAAc,CAAC;oBAK3B,eAAe,OAAO,cAAc,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAClE,IAAI;CAEZ,CAAC;AAEF,eAAe,KAAK,CAAC;AAErB,eAAO,MAAM,WAAW,EAAE,OAAO,aAMhC,CAAC"}
1
+ {"version":3,"file":"StackClient.d.ts","sourceRoot":"","sources":["../../src/layouts/StackClient.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,aAAa,EAKb,WAAW,IAAI,aAAa,EAE5B,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAE7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AASvC,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKU,CAAC;AAcxB;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,cAAc,CAAC,OAAO,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAyG9F,CAAC;AAoEF,QAAA,MAAM,KAAK,WACD,cAAc,CAAC,OAAO,OAAO,CAAC;YAIV,CACxB,KAAK,EAAE,cAAc,CAAC,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAClE,IAAI;CAEZ,CAAC;AAEF,eAAe,KAAK,CAAC;AAErB,eAAO,MAAM,WAAW,EAAE,OAAO,aAMhC,CAAC"}