From a41cf144d320be99121c201346216b2da9a40da2 Mon Sep 17 00:00:00 2001 From: Seydi Charyyev Date: Wed, 13 May 2026 21:00:02 +0500 Subject: [PATCH 01/21] [docs][router] Fix broken anchor in URL parameters hash support section (#45716) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Why The "Hash support" section in `docs/pages/router/reference/url-parameters.mdx` links to `#local-versus-global-search-parameters`, but that anchor doesn't exist on the page — the corresponding heading is `## Local versus global URL parameters` (slug `local-versus-global-url-parameters`). The anchor became stale after #29799 renamed the section from "search parameters" to "URL parameters" to encompass both route and search params. The cross-link in the Hash support section was missed during that rename. Result: clicking "search parameters" in the Hash support paragraph does nothing. # How Updated the anchor in the "Hash support" section to match the current heading slug. ### Diff ```diff - It can be accessed and modified using the same hooks and APIs from [search parameters](#local-versus-global-search-parameters). + It can be accessed and modified using the same hooks and APIs from [search parameters](#local-versus-global-url-parameters). ``` # Test Plan - Verified on http://localhost:3002/router/reference/url-parameters — clicking the "search parameters" link in the Hash support section now scrolls to the "Local versus global URL parameters" heading. - Ran `pnpm lint` in `docs/` — all four checks pass (`oxfmt`, `oxlint`, `tsc`, `eslint`). # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources — N/A (docs-only change) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build — N/A (docs-only change) - [x] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- docs/pages/router/reference/url-parameters.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/router/reference/url-parameters.mdx b/docs/pages/router/reference/url-parameters.mdx index 08debd9e733588..03298fb6a998a0 100644 --- a/docs/pages/router/reference/url-parameters.mdx +++ b/docs/pages/router/reference/url-parameters.mdx @@ -338,7 +338,7 @@ export default function Route() { ## Hash support -The URL [hash](https://developer.mozilla.org/en-US/docs/Web/API/URL/hash) is a string that follows the `#` symbol in a URL. It is commonly used on websites to link to a specific section of a page, but it can also be used to store data. Expo Router treats the hash as a special search parameter using the name `#`. It can be accessed and modified using the same hooks and APIs from [search parameters](#local-versus-global-search-parameters). +The URL [hash](https://developer.mozilla.org/en-US/docs/Web/API/URL/hash) is a string that follows the `#` symbol in a URL. It is commonly used on websites to link to a specific section of a page, but it can also be used to store data. Expo Router treats the hash as a special search parameter using the name `#`. It can be accessed and modified using the same hooks and APIs from [search parameters](#local-versus-global-url-parameters). {/* prettier-ignore */} ```tsx src/app/hash.tsx From 3783d15db47197334fbeb89d66f07220bc67c186 Mon Sep 17 00:00:00 2001 From: Mihail Duchev <8217099+mduchev@users.noreply.github.com> Date: Wed, 13 May 2026 10:25:33 -0600 Subject: [PATCH 02/21] [expo-camera][iOS] Fix itf14 barcode type not detecting Interleaved 2 of 5 (#44796) --- packages/expo-camera/CHANGELOG.md | 2 ++ .../expo-camera/ios/Current/BarcodeRecord.swift | 2 +- .../ios/Current/BarcodeScanner.swift | 17 +++++++++++++++-- .../ios/Current/MetaDataDelegate.swift | 5 +++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/expo-camera/CHANGELOG.md b/packages/expo-camera/CHANGELOG.md index 0aa0c5851151fc..aa984ca1f37c5f 100644 --- a/packages/expo-camera/CHANGELOG.md +++ b/packages/expo-camera/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- [iOS] Fix `itf14` barcode type not detecting generic Interleaved 2 of 5 barcodes, so behavior matches Android's `FORMAT_ITF`. ([#44796](https://github.com/expo/expo/pull/44796) by [@mduchev](https://github.com/mduchev)) + ### 💡 Others ## 56.0.4 — 2026-05-13 diff --git a/packages/expo-camera/ios/Current/BarcodeRecord.swift b/packages/expo-camera/ios/Current/BarcodeRecord.swift index 18fbf0c326ab42..fd5011d59d939f 100644 --- a/packages/expo-camera/ios/Current/BarcodeRecord.swift +++ b/packages/expo-camera/ios/Current/BarcodeRecord.swift @@ -79,7 +79,7 @@ enum BarcodeType: String, Enumerable { return .ean8 case .pdf417: return .pdf417 - case .itf14: + case .itf14, .interleaved2of5: return .itf14 case .upce: return .upc_e diff --git a/packages/expo-camera/ios/Current/BarcodeScanner.swift b/packages/expo-camera/ios/Current/BarcodeScanner.swift index a1d71b6926a4d9..911a21e9ecf748 100644 --- a/packages/expo-camera/ios/Current/BarcodeScanner.swift +++ b/packages/expo-camera/ios/Current/BarcodeScanner.swift @@ -45,10 +45,22 @@ class BarcodeScanner: NSObject, BarcodeScanningResponseHandler { func setSettings(_ newSettings: [String: [AVMetadataObject.ObjectType]]) { for (key, value) in newSettings where key == BARCODE_TYPES_KEY { + // AVFoundation distinguishes `.itf14` (14-digit ITF) from `.interleaved2of5` + // (generic Interleaved 2 of 5), and sometimes reports a given barcode under + // either type. Android's ML Kit uses a single `FORMAT_ITF` for both. To mirror + // that behavior and avoid silently dropping detections, when `.itf14` is + // requested we also register `.interleaved2of5` so both variants are scanned + // for and the delegate's type-match succeeds. Results are normalized back to + // `itf14` by `BarcodeType.toBarcodeType(type:)`, called from + // `BarcodeScannerUtils.avMetadataCodeObjectToDictionary`. + var augmentedValue = value + if augmentedValue.contains(.itf14) && !augmentedValue.contains(.interleaved2of5) { + augmentedValue.append(.interleaved2of5) + } let previousTypes = Set(settings[BARCODE_TYPES_KEY] ?? []) - let newTypes = Set(value) + let newTypes = Set(augmentedValue) if previousTypes != newTypes { - settings[BARCODE_TYPES_KEY] = value + settings[BARCODE_TYPES_KEY] = augmentedValue if let barcodeProvider { let supportedTypeSet = Set(barcodeProvider.supportedTypes) let requestedRawValues = Set(newTypes.map { $0.rawValue }) @@ -56,6 +68,7 @@ class BarcodeScanner: NSObject, BarcodeScanningResponseHandler { } else { barcodeProviderEnabled = false } + delegate?.updateSettings(settings, barcodeProviderEnabled: barcodeProviderEnabled) maybeStartBarcodeScanning() } } diff --git a/packages/expo-camera/ios/Current/MetaDataDelegate.swift b/packages/expo-camera/ios/Current/MetaDataDelegate.swift index fee448f8d5b75f..e8326ac038fa61 100644 --- a/packages/expo-camera/ios/Current/MetaDataDelegate.swift +++ b/packages/expo-camera/ios/Current/MetaDataDelegate.swift @@ -26,6 +26,11 @@ class MetaDataDelegate: NSObject, AVCaptureMetadataOutputObjectsDelegate, AVCapt self.barcodeProvider = barcodeProvider } + func updateSettings(_ settings: [String: [AVMetadataObject.ObjectType]], barcodeProviderEnabled: Bool) { + self.settings = settings + self.barcodeProviderEnabled = barcodeProviderEnabled + } + func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) { guard let settings = settings[BARCODE_TYPES_KEY] else { return From 06ac7f04003de30a15ea64830fa4eef35202bd5e Mon Sep 17 00:00:00 2001 From: Jakub Tkacz <32908614+Ubax@users.noreply.github.com> Date: Wed, 13 May 2026 18:43:18 +0200 Subject: [PATCH 03/21] [expo-router][expo-observe] emit pageFocused after screen did render (#45723) # Why Previously `pageFocused` event did fire, before screen render committed. This caused incorrect metrics to be reported in `expo-observe`. # How 1. Emit `pageFocused` in `useEffect` - after the render is finished # Test Plan 1. Observe tester 2. CI # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --------- Co-authored-by: Expo Bot <34669131+expo-bot@users.noreply.github.com> --- packages/expo-router/CHANGELOG.md | 2 + .../expo-router/build/useScreens.d.ts.map | 2 +- packages/expo-router/build/useScreens.js | 20 ++-- packages/expo-router/build/useScreens.js.map | 2 +- .../__tests__/navigation-events.test.ios.tsx | 98 +++++++++++++++++++ packages/expo-router/src/useScreens.tsx | 20 ++-- 6 files changed, 126 insertions(+), 18 deletions(-) create mode 100644 packages/expo-router/src/__tests__/navigation-events.test.ios.tsx diff --git a/packages/expo-router/CHANGELOG.md b/packages/expo-router/CHANGELOG.md index 29950d39842ef2..75ca9e3591ad4e 100644 --- a/packages/expo-router/CHANGELOG.md +++ b/packages/expo-router/CHANGELOG.md @@ -10,6 +10,8 @@ ### 🐛 Bug fixes +- Emit `pageFocused` navigation event after the focused screen has committed, so consumers like expo-observe report accurate TTR for heavy screens. ([@Ubax](https://github.com/Ubax)) ([#45723](https://github.com/expo/expo/pull/45723) by [@Ubax](https://github.com/Ubax)) + ### 💡 Others ## 56.1.4 — 2026-05-13 diff --git a/packages/expo-router/build/useScreens.d.ts.map b/packages/expo-router/build/useScreens.d.ts.map index 319fbf72db98af..c2b07d58114835 100644 --- a/packages/expo-router/build/useScreens.d.ts.map +++ b/packages/expo-router/build/useScreens.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"useScreens.d.ts","sourceRoot":"","sources":["../src/useScreens.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"useScreens.d.ts","sourceRoot":"","sources":["../src/useScreens.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAyB,MAAM,OAAO,CAAC;AAE9C,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,SAAS,CAAC;AAetD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAQnD,MAAM,MAAM,WAAW,CACrB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1D,MAAM,SAAS,eAAe,GAAG,eAAe,EAChD,SAAS,SAAS,YAAY,GAAG,YAAY,IAC3C;IACF,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,OAAO,CAAC,EACJ,QAAQ,GACR,CAAC,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAAC,UAAU,EAAE,GAAG,CAAA;KAAE,KAAK,QAAQ,CAAC,CAAC;IAEvF,SAAS,CAAC,EACN,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,GAClC,CAAC,CAAC,IAAI,EAAE;QACN,KAAK,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACxC,UAAU,EAAE,GAAG,CAAC;KACjB,KAAK,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAE9C,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,KAAK,MAAM,GAAG,SAAS,CAAC;IAE7E,mBAAmB,CAAC,EAAE,eAAe,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB,OAAO,GACP,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC;AA6FxE;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAAE,EACpB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,yBAAyB,GAAE,OAAe,GACzC,KAAK,CAAC,SAAS,EAAE,CA6BnB;AAsDD,mFAAmF;AACnF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS;sCAyCtD;QACD,KAAK,CAAC,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACzC,UAAU,EAAE,IAAI,CACd,cAAc,CACZ,aAAa,EACb,MAAM,EACN,SAAS,EACT,eAAe,EACf,MAAM,EACN,6BAA6B,GAAG,2BAA2B,CAC5D,EACD,UAAU,CACX,GAAG;YACF,QAAQ,IAAI,eAAe,GAAG,SAAS,CAAC;SACzC,CAAC;KACH;;EAuFF;AAuFD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,GAC/B,WAAW,CAAC,SAAS,CAAC,CAqBxB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAE,OAAO,CAAC,WAAW,CAAM,2CAYxD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,UAa5E"} \ No newline at end of file diff --git a/packages/expo-router/build/useScreens.js b/packages/expo-router/build/useScreens.js index 660b3925e6519d..006be2ef0202e3 100644 --- a/packages/expo-router/build/useScreens.js +++ b/packages/expo-router/build/useScreens.js @@ -286,14 +286,18 @@ function AnalyticsListeners({ navigation, screenId, }) { return () => { }; }, [routeInfo?.params, routeInfo?.pathname, screenId]); const isFocused = navigation.isFocused(); - if (isFocused && routeInfo) { - navigationEvents_1.unstable_navigationEvents.emit('pageFocused', { - pathname: routeInfo.pathname, - params: routeInfo.params, - screenId, - }); - hasBlurredRef.current = false; - } + // Emit `pageFocused` from an effect — not during render — so it fires after the + // focused screen's content has committed. `hasBlurredRef` deduplicates across both paths. + (0, react_2.useEffect)(() => { + if (isFocused && routeInfo && hasBlurredRef.current) { + navigationEvents_1.unstable_navigationEvents.emit('pageFocused', { + pathname: routeInfo.pathname, + params: routeInfo.params, + screenId, + }); + hasBlurredRef.current = false; + } + }, [isFocused, routeInfo?.pathname, routeInfo?.params, screenId]); (0, react_2.useEffect)(() => { if (routeInfo) { const cleanFocus = navigation.addListener('focus', () => { diff --git a/packages/expo-router/build/useScreens.js.map b/packages/expo-router/build/useScreens.js.map index df6a406c3ba2e1..dc50d0e77ff482 100644 --- a/packages/expo-router/build/useScreens.js.map +++ b/packages/expo-router/build/useScreens.js.map @@ -1 +1 @@ -{"version":3,"file":"useScreens.js","sourceRoot":"","sources":["../src/useScreens.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React, { use, useEffect } from 'react';\n\nimport type { LoadedRoute, RouteNode } from './Route';\nimport { SuspenseFallbackContext, Route, sortRoutesWithInitial, useRouteNode } from './Route';\nimport { useExpoRouterStore } from './global-state/storeContext';\nimport { useColorSchemeChangesIfNeeded } from './global-state/utils';\nimport { useCurrentRouteInfo } from './hooks';\nimport EXPO_ROUTER_IMPORT_MODE from './import-mode';\nimport { ZoomTransitionEnabler } from './link/zoom/ZoomTransitionEnabler';\nimport { ZoomTransitionTargetContextProvider } from './link/zoom/zoom-transition-context-providers';\nimport { unstable_navigationEvents } from './navigationEvents';\nimport {\n hasParam,\n INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME,\n removeParams,\n} from './navigationParams';\nimport { Screen } from './primitives';\nimport type { BottomTabNavigationEventMap } from './react-navigation/bottom-tabs';\nimport {\n useStateForPath,\n type EventConsumer,\n type EventMapBase,\n type NavigationProp,\n type NavigationState,\n type ParamListBase,\n type RouteProp,\n type ScreenListeners,\n} from './react-navigation/native';\nimport type { NativeStackNavigationEventMap } from './react-navigation/native-stack';\nimport type { UnknownOutputParams } from './types';\nimport { EmptyRoute } from './views/EmptyRoute';\nimport {\n SuspenseFallback as DefaultSuspenseFallback,\n type SuspenseFallbackProps,\n} from './views/SuspenseFallback';\nimport { Try } from './views/Try';\n\nexport type ScreenProps<\n TOptions extends Record = Record,\n TState extends NavigationState = NavigationState,\n TEventMap extends EventMapBase = EventMapBase,\n> = {\n /** Name is required when used inside a Layout component. */\n name?: string;\n /**\n * Redirect to the nearest sibling route.\n * If all children are `redirect={true}`, the layout will render `null` as there are no children to render.\n */\n redirect?: boolean;\n initialParams?: Record;\n options?:\n | TOptions\n | ((prop: { route: RouteProp; navigation: any }) => TOptions);\n\n listeners?:\n | ScreenListeners\n | ((prop: {\n route: RouteProp;\n navigation: any;\n }) => ScreenListeners);\n\n getId?: ({ params }: { params?: Record }) => string | undefined;\n\n dangerouslySingular?: SingularOptions;\n};\n\nexport type SingularOptions =\n | boolean\n | ((name: string, params: UnknownOutputParams) => string | undefined);\n\nfunction getSortedChildren(\n children: RouteNode[],\n order: ScreenProps[] = [],\n initialRouteName?: string\n): { route: RouteNode; props: Partial }[] {\n if (!order?.length) {\n return children\n .sort(sortRoutesWithInitial(initialRouteName))\n .map((route) => ({ route, props: {} }));\n }\n const entries = [...children];\n\n const ordered = order\n .map(\n ({\n name,\n redirect,\n initialParams,\n listeners,\n options,\n getId,\n dangerouslySingular: singular,\n }) => {\n if (!entries.length) {\n console.warn(\n `[Layout children]: Too many screens defined. Route \"${name}\" is extraneous.`\n );\n return null;\n }\n const matchIndex = entries.findIndex(\n (child) => child.route === name || child.route === `${name}/index`\n );\n if (matchIndex === -1) {\n console.warn(\n `[Layout children]: No route named \"${name}\" exists in nested children:`,\n children.map(({ route }) => route)\n );\n return null;\n } else {\n // Get match and remove from entries\n const match = entries[matchIndex];\n entries.splice(matchIndex, 1);\n\n // Ensure to return null after removing from entries.\n if (redirect) {\n if (typeof redirect === 'string') {\n throw new Error(`Redirecting to a specific route is not supported yet.`);\n }\n return null;\n }\n\n if (getId) {\n console.warn(\n `Deprecated: prop 'getId' on screen ${name} is deprecated. Please rename the prop to 'dangerouslySingular'`\n );\n if (singular) {\n console.warn(\n `Screen ${name} cannot use both getId and dangerouslySingular together.`\n );\n }\n } else if (singular) {\n // If singular is set, use it as the getId function.\n if (typeof singular === 'string') {\n getId = () => singular;\n } else if (typeof singular === 'function' && name) {\n getId = (options) => singular(name, options.params || {});\n } else if (singular === true && name) {\n getId = (options) => getSingularId(name, options);\n }\n }\n\n return {\n route: match,\n props: { initialParams, listeners, options, getId },\n };\n }\n }\n )\n .filter(Boolean) as {\n route: RouteNode;\n props: Partial;\n }[];\n\n // Add any remaining children\n ordered.push(\n ...entries.sort(sortRoutesWithInitial(initialRouteName)).map((route) => ({ route, props: {} }))\n );\n\n return ordered;\n}\n\n/**\n * @returns React Navigation screens sorted by the `route` property.\n */\nexport function useSortedScreens(\n order: ScreenProps[],\n protectedScreens: Set,\n useOnlyUserDefinedScreens: boolean = false\n): React.ReactNode[] {\n const node = useRouteNode();\n\n const nodeChildren = node?.children ?? [];\n const children = useOnlyUserDefinedScreens\n ? nodeChildren.filter((child) =>\n order.some(\n (userDefinedScreen) =>\n userDefinedScreen.name === child.route ||\n `${userDefinedScreen.name}/index` === child.route\n )\n )\n : nodeChildren;\n\n const sorted = children.length ? getSortedChildren(children, order, node?.initialRouteName) : [];\n return React.useMemo(\n () =>\n sorted\n .filter((item) => {\n const route = item.route.route;\n return (\n !protectedScreens.has(route) && !protectedScreens.has(route.replace(/\\/index$/, ''))\n );\n })\n .map((value) => {\n return routeToScreen(value.route, value.props);\n }),\n [sorted, protectedScreens]\n );\n}\n\nfunction fromImport(\n value: RouteNode,\n { ErrorBoundary, SuspenseFallback, ...component }: LoadedRoute\n) {\n // If possible, add a more helpful display name for the component stack to improve debugging of React errors such as `Text strings must be rendered within a component.`.\n if (component?.default && __DEV__) {\n component.default.displayName ??= `${component.default.name ?? 'Route'}(${value.contextKey})`;\n }\n\n if (ErrorBoundary) {\n const Wrapped = React.forwardRef((props: any, ref: any) => {\n const children = React.createElement(component.default || EmptyRoute, {\n ...props,\n ref,\n });\n return {children};\n });\n\n if (__DEV__) {\n Wrapped.displayName = `ErrorBoundary(${value.contextKey})`;\n }\n\n return {\n default: Wrapped,\n SuspenseFallback,\n };\n }\n if (process.env.NODE_ENV !== 'production') {\n if (\n typeof component.default === 'object' &&\n component.default &&\n Object.keys(component.default).length === 0\n ) {\n return { default: EmptyRoute, SuspenseFallback };\n }\n }\n\n return { default: component.default, SuspenseFallback };\n}\n\nfunction fromLoadedRoute(value: RouteNode, res: LoadedRoute) {\n if (!(res instanceof Promise)) {\n return fromImport(value, res);\n }\n\n return res.then(fromImport.bind(null, value));\n}\n\n// TODO: Maybe there's a more React-y way to do this?\n// Without this store, the process enters a recursive loop.\nconst qualifiedStore = new WeakMap>();\n\n/** Wrap the component with various enhancements and add access to child routes. */\nexport function getQualifiedRouteComponent(value: RouteNode) {\n if (qualifiedStore.has(value)) {\n return qualifiedStore.get(value)!;\n }\n\n let ScreenComponent:\n | React.ForwardRefExoticComponent>\n | React.ComponentType<{ segment?: string }>;\n\n let LayoutSuspenseFallback: React.ComponentType | undefined;\n\n // TODO: This ensures sync doesn't use React.lazy, but it's not ideal.\n if (EXPO_ROUTER_IMPORT_MODE === 'lazy') {\n ScreenComponent = React.lazy(async () => {\n const res = value.loadRoute();\n return fromLoadedRoute(value, res) as Promise<{\n default: React.ComponentType;\n }>;\n });\n\n if (__DEV__) {\n ScreenComponent.displayName = `AsyncRoute(${value.route})`;\n }\n } else {\n const res = value.loadRoute();\n const result = fromImport(value, res);\n ScreenComponent = result.default!;\n LayoutSuspenseFallback = value.type === 'layout' ? result.SuspenseFallback : undefined;\n }\n const WrappedScreenComponent: typeof ScreenComponent = (props: object) => {\n useColorSchemeChangesIfNeeded();\n return ;\n };\n function BaseRoute({\n // Remove these React Navigation props to\n // enforce usage of expo-router hooks (where the query params are correct).\n route,\n navigation,\n\n // Pass all other props to the component\n ...props\n }: {\n route?: RouteProp;\n navigation: Omit<\n NavigationProp<\n ParamListBase,\n string,\n undefined,\n NavigationState,\n object,\n NativeStackNavigationEventMap | BottomTabNavigationEventMap\n >,\n 'getState'\n > & {\n getState(): NavigationState | undefined;\n };\n }) {\n const stateForPath = useStateForPath();\n const isFocused = navigation.isFocused();\n const store = useExpoRouterStore();\n const InheritedSuspenseFallback = use(SuspenseFallbackContext);\n\n const ResolvedSuspenseFallback =\n EXPO_ROUTER_IMPORT_MODE === 'lazy'\n ? DefaultSuspenseFallback\n : (LayoutSuspenseFallback ?? InheritedSuspenseFallback ?? DefaultSuspenseFallback);\n const providedSuspenseFallback =\n value.type === 'layout'\n ? (LayoutSuspenseFallback ?? InheritedSuspenseFallback)\n : InheritedSuspenseFallback;\n\n if (isFocused) {\n const state = navigation.getState();\n const isLeaf = !(state && 'state' in state.routes[state.index]!);\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }\n\n useEffect(\n () =>\n navigation.addListener('focus', () => {\n const state = navigation.getState();\n const isLeaf = !(state && 'state' in state.routes[state.index]!);\n // Because setFocusedState caches the route info, this call will only trigger rerenders\n // if the component itself didn’t rerender and the route info changed.\n // Otherwise, the update from the `if` above will handle it,\n // and this won’t cause a redundant second update.\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }),\n [navigation]\n );\n\n useEffect(() => {\n return navigation.addListener('transitionEnd', (e) => {\n if (!e?.data?.closing) {\n // When navigating to a screen, remove the no animation param to re-enable animations\n // Otherwise the navigation back would also have no animation\n if (hasParam(route?.params, INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME)) {\n navigation.replaceParams(\n removeParams(route?.params, [INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME])\n );\n }\n }\n });\n }, [navigation]);\n\n const isRouteType = value.type === 'route';\n const hasRouteKey = !!route?.key;\n\n return (\n \n \n {unstable_navigationEvents.isEnabled() && isRouteType && hasRouteKey && (\n \n )}\n \n \n \n }>\n \n \n \n \n \n );\n }\n\n if (__DEV__) {\n BaseRoute.displayName = `Route(${value.route})`;\n }\n\n qualifiedStore.set(value, BaseRoute);\n return BaseRoute;\n}\n\nfunction AnalyticsListeners({\n navigation,\n screenId,\n}: {\n navigation: EventConsumer & {\n isFocused(): boolean;\n };\n screenId: string;\n}) {\n const isFirstRenderRef = React.useRef(true);\n const hasBlurredRef = React.useRef(true);\n const routeInfo = useCurrentRouteInfo();\n\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n if (routeInfo) {\n unstable_navigationEvents.emit('pageWillRender', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n }\n }\n\n useEffect(() => {\n if (routeInfo) {\n return () => {\n unstable_navigationEvents.emit('pageRemoved', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n };\n }\n return () => {};\n }, [routeInfo?.params, routeInfo?.pathname, screenId]);\n\n const isFocused = navigation.isFocused();\n\n if (isFocused && routeInfo) {\n unstable_navigationEvents.emit('pageFocused', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = false;\n }\n\n useEffect(() => {\n if (routeInfo) {\n const cleanFocus = navigation.addListener('focus', () => {\n // If the screen was not blurred, don't emit focused again\n // hasBlurredRef will be false when the screen was initially focused\n if (hasBlurredRef.current) {\n unstable_navigationEvents.emit('pageFocused', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = false;\n }\n });\n const cleanBlur = navigation.addListener('blur', () => {\n unstable_navigationEvents.emit('pageBlurred', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = true;\n });\n return () => {\n cleanFocus();\n cleanBlur();\n };\n }\n return () => {};\n }, [navigation, routeInfo?.pathname, routeInfo?.params, screenId]);\n\n return null;\n}\n\nexport function screenOptionsFactory(\n route: RouteNode,\n options?: ScreenProps['options']\n): ScreenProps['options'] {\n return (args) => {\n // Only eager load generated components\n const staticOptions = route.generated ? route.loadRoute()?.getNavOptions : null;\n const staticResult = typeof staticOptions === 'function' ? staticOptions(args) : staticOptions;\n const dynamicResult = typeof options === 'function' ? options?.(args) : options;\n const output = {\n ...staticResult,\n ...dynamicResult,\n };\n\n // Prevent generated screens from showing up in the tab bar.\n if (route.internal) {\n output.tabBarItemStyle = { display: 'none' };\n output.tabBarButton = () => null;\n // TODO: React Navigation doesn't provide a way to prevent rendering the drawer item.\n output.drawerItemStyle = { height: 0, display: 'none' };\n }\n\n return output;\n };\n}\n\nexport function routeToScreen(\n route: RouteNode,\n { options, getId, ...props }: Partial = {}\n) {\n return (\n getQualifiedRouteComponent(route)}\n />\n );\n}\n\nexport function getSingularId(name: string, options: Record = {}) {\n return name\n .split('/')\n .map((segment) => {\n if (segment.startsWith('[...')) {\n return options.params?.[segment.slice(4, -1)]?.join('/') || segment;\n } else if (segment.startsWith('[') && segment.endsWith(']')) {\n return options.params?.[segment.slice(1, -1)] || segment;\n } else {\n return segment;\n }\n })\n .join('/');\n}\n"]} \ No newline at end of file +{"version":3,"file":"useScreens.js","sourceRoot":"","sources":["../src/useScreens.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React, { use, useEffect } from 'react';\n\nimport type { LoadedRoute, RouteNode } from './Route';\nimport { SuspenseFallbackContext, Route, sortRoutesWithInitial, useRouteNode } from './Route';\nimport { useExpoRouterStore } from './global-state/storeContext';\nimport { useColorSchemeChangesIfNeeded } from './global-state/utils';\nimport { useCurrentRouteInfo } from './hooks';\nimport EXPO_ROUTER_IMPORT_MODE from './import-mode';\nimport { ZoomTransitionEnabler } from './link/zoom/ZoomTransitionEnabler';\nimport { ZoomTransitionTargetContextProvider } from './link/zoom/zoom-transition-context-providers';\nimport { unstable_navigationEvents } from './navigationEvents';\nimport {\n hasParam,\n INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME,\n removeParams,\n} from './navigationParams';\nimport { Screen } from './primitives';\nimport type { BottomTabNavigationEventMap } from './react-navigation/bottom-tabs';\nimport {\n useStateForPath,\n type EventConsumer,\n type EventMapBase,\n type NavigationProp,\n type NavigationState,\n type ParamListBase,\n type RouteProp,\n type ScreenListeners,\n} from './react-navigation/native';\nimport type { NativeStackNavigationEventMap } from './react-navigation/native-stack';\nimport type { UnknownOutputParams } from './types';\nimport { EmptyRoute } from './views/EmptyRoute';\nimport {\n SuspenseFallback as DefaultSuspenseFallback,\n type SuspenseFallbackProps,\n} from './views/SuspenseFallback';\nimport { Try } from './views/Try';\n\nexport type ScreenProps<\n TOptions extends Record = Record,\n TState extends NavigationState = NavigationState,\n TEventMap extends EventMapBase = EventMapBase,\n> = {\n /** Name is required when used inside a Layout component. */\n name?: string;\n /**\n * Redirect to the nearest sibling route.\n * If all children are `redirect={true}`, the layout will render `null` as there are no children to render.\n */\n redirect?: boolean;\n initialParams?: Record;\n options?:\n | TOptions\n | ((prop: { route: RouteProp; navigation: any }) => TOptions);\n\n listeners?:\n | ScreenListeners\n | ((prop: {\n route: RouteProp;\n navigation: any;\n }) => ScreenListeners);\n\n getId?: ({ params }: { params?: Record }) => string | undefined;\n\n dangerouslySingular?: SingularOptions;\n};\n\nexport type SingularOptions =\n | boolean\n | ((name: string, params: UnknownOutputParams) => string | undefined);\n\nfunction getSortedChildren(\n children: RouteNode[],\n order: ScreenProps[] = [],\n initialRouteName?: string\n): { route: RouteNode; props: Partial }[] {\n if (!order?.length) {\n return children\n .sort(sortRoutesWithInitial(initialRouteName))\n .map((route) => ({ route, props: {} }));\n }\n const entries = [...children];\n\n const ordered = order\n .map(\n ({\n name,\n redirect,\n initialParams,\n listeners,\n options,\n getId,\n dangerouslySingular: singular,\n }) => {\n if (!entries.length) {\n console.warn(\n `[Layout children]: Too many screens defined. Route \"${name}\" is extraneous.`\n );\n return null;\n }\n const matchIndex = entries.findIndex(\n (child) => child.route === name || child.route === `${name}/index`\n );\n if (matchIndex === -1) {\n console.warn(\n `[Layout children]: No route named \"${name}\" exists in nested children:`,\n children.map(({ route }) => route)\n );\n return null;\n } else {\n // Get match and remove from entries\n const match = entries[matchIndex];\n entries.splice(matchIndex, 1);\n\n // Ensure to return null after removing from entries.\n if (redirect) {\n if (typeof redirect === 'string') {\n throw new Error(`Redirecting to a specific route is not supported yet.`);\n }\n return null;\n }\n\n if (getId) {\n console.warn(\n `Deprecated: prop 'getId' on screen ${name} is deprecated. Please rename the prop to 'dangerouslySingular'`\n );\n if (singular) {\n console.warn(\n `Screen ${name} cannot use both getId and dangerouslySingular together.`\n );\n }\n } else if (singular) {\n // If singular is set, use it as the getId function.\n if (typeof singular === 'string') {\n getId = () => singular;\n } else if (typeof singular === 'function' && name) {\n getId = (options) => singular(name, options.params || {});\n } else if (singular === true && name) {\n getId = (options) => getSingularId(name, options);\n }\n }\n\n return {\n route: match,\n props: { initialParams, listeners, options, getId },\n };\n }\n }\n )\n .filter(Boolean) as {\n route: RouteNode;\n props: Partial;\n }[];\n\n // Add any remaining children\n ordered.push(\n ...entries.sort(sortRoutesWithInitial(initialRouteName)).map((route) => ({ route, props: {} }))\n );\n\n return ordered;\n}\n\n/**\n * @returns React Navigation screens sorted by the `route` property.\n */\nexport function useSortedScreens(\n order: ScreenProps[],\n protectedScreens: Set,\n useOnlyUserDefinedScreens: boolean = false\n): React.ReactNode[] {\n const node = useRouteNode();\n\n const nodeChildren = node?.children ?? [];\n const children = useOnlyUserDefinedScreens\n ? nodeChildren.filter((child) =>\n order.some(\n (userDefinedScreen) =>\n userDefinedScreen.name === child.route ||\n `${userDefinedScreen.name}/index` === child.route\n )\n )\n : nodeChildren;\n\n const sorted = children.length ? getSortedChildren(children, order, node?.initialRouteName) : [];\n return React.useMemo(\n () =>\n sorted\n .filter((item) => {\n const route = item.route.route;\n return (\n !protectedScreens.has(route) && !protectedScreens.has(route.replace(/\\/index$/, ''))\n );\n })\n .map((value) => {\n return routeToScreen(value.route, value.props);\n }),\n [sorted, protectedScreens]\n );\n}\n\nfunction fromImport(\n value: RouteNode,\n { ErrorBoundary, SuspenseFallback, ...component }: LoadedRoute\n) {\n // If possible, add a more helpful display name for the component stack to improve debugging of React errors such as `Text strings must be rendered within a component.`.\n if (component?.default && __DEV__) {\n component.default.displayName ??= `${component.default.name ?? 'Route'}(${value.contextKey})`;\n }\n\n if (ErrorBoundary) {\n const Wrapped = React.forwardRef((props: any, ref: any) => {\n const children = React.createElement(component.default || EmptyRoute, {\n ...props,\n ref,\n });\n return {children};\n });\n\n if (__DEV__) {\n Wrapped.displayName = `ErrorBoundary(${value.contextKey})`;\n }\n\n return {\n default: Wrapped,\n SuspenseFallback,\n };\n }\n if (process.env.NODE_ENV !== 'production') {\n if (\n typeof component.default === 'object' &&\n component.default &&\n Object.keys(component.default).length === 0\n ) {\n return { default: EmptyRoute, SuspenseFallback };\n }\n }\n\n return { default: component.default, SuspenseFallback };\n}\n\nfunction fromLoadedRoute(value: RouteNode, res: LoadedRoute) {\n if (!(res instanceof Promise)) {\n return fromImport(value, res);\n }\n\n return res.then(fromImport.bind(null, value));\n}\n\n// TODO: Maybe there's a more React-y way to do this?\n// Without this store, the process enters a recursive loop.\nconst qualifiedStore = new WeakMap>();\n\n/** Wrap the component with various enhancements and add access to child routes. */\nexport function getQualifiedRouteComponent(value: RouteNode) {\n if (qualifiedStore.has(value)) {\n return qualifiedStore.get(value)!;\n }\n\n let ScreenComponent:\n | React.ForwardRefExoticComponent>\n | React.ComponentType<{ segment?: string }>;\n\n let LayoutSuspenseFallback: React.ComponentType | undefined;\n\n // TODO: This ensures sync doesn't use React.lazy, but it's not ideal.\n if (EXPO_ROUTER_IMPORT_MODE === 'lazy') {\n ScreenComponent = React.lazy(async () => {\n const res = value.loadRoute();\n return fromLoadedRoute(value, res) as Promise<{\n default: React.ComponentType;\n }>;\n });\n\n if (__DEV__) {\n ScreenComponent.displayName = `AsyncRoute(${value.route})`;\n }\n } else {\n const res = value.loadRoute();\n const result = fromImport(value, res);\n ScreenComponent = result.default!;\n LayoutSuspenseFallback = value.type === 'layout' ? result.SuspenseFallback : undefined;\n }\n const WrappedScreenComponent: typeof ScreenComponent = (props: object) => {\n useColorSchemeChangesIfNeeded();\n return ;\n };\n function BaseRoute({\n // Remove these React Navigation props to\n // enforce usage of expo-router hooks (where the query params are correct).\n route,\n navigation,\n\n // Pass all other props to the component\n ...props\n }: {\n route?: RouteProp;\n navigation: Omit<\n NavigationProp<\n ParamListBase,\n string,\n undefined,\n NavigationState,\n object,\n NativeStackNavigationEventMap | BottomTabNavigationEventMap\n >,\n 'getState'\n > & {\n getState(): NavigationState | undefined;\n };\n }) {\n const stateForPath = useStateForPath();\n const isFocused = navigation.isFocused();\n const store = useExpoRouterStore();\n const InheritedSuspenseFallback = use(SuspenseFallbackContext);\n\n const ResolvedSuspenseFallback =\n EXPO_ROUTER_IMPORT_MODE === 'lazy'\n ? DefaultSuspenseFallback\n : (LayoutSuspenseFallback ?? InheritedSuspenseFallback ?? DefaultSuspenseFallback);\n const providedSuspenseFallback =\n value.type === 'layout'\n ? (LayoutSuspenseFallback ?? InheritedSuspenseFallback)\n : InheritedSuspenseFallback;\n\n if (isFocused) {\n const state = navigation.getState();\n const isLeaf = !(state && 'state' in state.routes[state.index]!);\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }\n\n useEffect(\n () =>\n navigation.addListener('focus', () => {\n const state = navigation.getState();\n const isLeaf = !(state && 'state' in state.routes[state.index]!);\n // Because setFocusedState caches the route info, this call will only trigger rerenders\n // if the component itself didn’t rerender and the route info changed.\n // Otherwise, the update from the `if` above will handle it,\n // and this won’t cause a redundant second update.\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }),\n [navigation]\n );\n\n useEffect(() => {\n return navigation.addListener('transitionEnd', (e) => {\n if (!e?.data?.closing) {\n // When navigating to a screen, remove the no animation param to re-enable animations\n // Otherwise the navigation back would also have no animation\n if (hasParam(route?.params, INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME)) {\n navigation.replaceParams(\n removeParams(route?.params, [INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME])\n );\n }\n }\n });\n }, [navigation]);\n\n const isRouteType = value.type === 'route';\n const hasRouteKey = !!route?.key;\n\n return (\n \n \n {unstable_navigationEvents.isEnabled() && isRouteType && hasRouteKey && (\n \n )}\n \n \n \n }>\n \n \n \n \n \n );\n }\n\n if (__DEV__) {\n BaseRoute.displayName = `Route(${value.route})`;\n }\n\n qualifiedStore.set(value, BaseRoute);\n return BaseRoute;\n}\n\nfunction AnalyticsListeners({\n navigation,\n screenId,\n}: {\n navigation: EventConsumer & {\n isFocused(): boolean;\n };\n screenId: string;\n}) {\n const isFirstRenderRef = React.useRef(true);\n const hasBlurredRef = React.useRef(true);\n const routeInfo = useCurrentRouteInfo();\n\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n if (routeInfo) {\n unstable_navigationEvents.emit('pageWillRender', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n }\n }\n\n useEffect(() => {\n if (routeInfo) {\n return () => {\n unstable_navigationEvents.emit('pageRemoved', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n };\n }\n return () => {};\n }, [routeInfo?.params, routeInfo?.pathname, screenId]);\n\n const isFocused = navigation.isFocused();\n\n // Emit `pageFocused` from an effect — not during render — so it fires after the\n // focused screen's content has committed. `hasBlurredRef` deduplicates across both paths.\n useEffect(() => {\n if (isFocused && routeInfo && hasBlurredRef.current) {\n unstable_navigationEvents.emit('pageFocused', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = false;\n }\n }, [isFocused, routeInfo?.pathname, routeInfo?.params, screenId]);\n\n useEffect(() => {\n if (routeInfo) {\n const cleanFocus = navigation.addListener('focus', () => {\n // If the screen was not blurred, don't emit focused again\n // hasBlurredRef will be false when the screen was initially focused\n if (hasBlurredRef.current) {\n unstable_navigationEvents.emit('pageFocused', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = false;\n }\n });\n const cleanBlur = navigation.addListener('blur', () => {\n unstable_navigationEvents.emit('pageBlurred', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = true;\n });\n return () => {\n cleanFocus();\n cleanBlur();\n };\n }\n return () => {};\n }, [navigation, routeInfo?.pathname, routeInfo?.params, screenId]);\n\n return null;\n}\n\nexport function screenOptionsFactory(\n route: RouteNode,\n options?: ScreenProps['options']\n): ScreenProps['options'] {\n return (args) => {\n // Only eager load generated components\n const staticOptions = route.generated ? route.loadRoute()?.getNavOptions : null;\n const staticResult = typeof staticOptions === 'function' ? staticOptions(args) : staticOptions;\n const dynamicResult = typeof options === 'function' ? options?.(args) : options;\n const output = {\n ...staticResult,\n ...dynamicResult,\n };\n\n // Prevent generated screens from showing up in the tab bar.\n if (route.internal) {\n output.tabBarItemStyle = { display: 'none' };\n output.tabBarButton = () => null;\n // TODO: React Navigation doesn't provide a way to prevent rendering the drawer item.\n output.drawerItemStyle = { height: 0, display: 'none' };\n }\n\n return output;\n };\n}\n\nexport function routeToScreen(\n route: RouteNode,\n { options, getId, ...props }: Partial = {}\n) {\n return (\n getQualifiedRouteComponent(route)}\n />\n );\n}\n\nexport function getSingularId(name: string, options: Record = {}) {\n return name\n .split('/')\n .map((segment) => {\n if (segment.startsWith('[...')) {\n return options.params?.[segment.slice(4, -1)]?.join('/') || segment;\n } else if (segment.startsWith('[') && segment.endsWith(']')) {\n return options.params?.[segment.slice(1, -1)] || segment;\n } else {\n return segment;\n }\n })\n .join('/');\n}\n"]} \ No newline at end of file diff --git a/packages/expo-router/src/__tests__/navigation-events.test.ios.tsx b/packages/expo-router/src/__tests__/navigation-events.test.ios.tsx new file mode 100644 index 00000000000000..0ac4cb0eed537b --- /dev/null +++ b/packages/expo-router/src/__tests__/navigation-events.test.ios.tsx @@ -0,0 +1,98 @@ +import { act, screen } from '@testing-library/react-native'; +import { useLayoutEffect } from 'react'; +import { Text } from 'react-native'; + +import { router } from '../exports'; +import { Stack } from '../layouts/Stack'; +import { unstable_navigationEvents } from '../navigationEvents'; +import type { PageFocusedEvent } from '../navigationEvents/types'; +import { renderRouter } from '../testing-library'; + +describe('AnalyticsListeners pageFocused timing', () => { + const cleanups: (() => void)[] = []; + + beforeAll(() => { + unstable_navigationEvents.enable(); + }); + + afterEach(() => { + while (cleanups.length) { + cleanups.pop()!(); + } + }); + + function listenForPageFocused(onEvent?: (event: PageFocusedEvent) => void) { + const events: PageFocusedEvent[] = []; + const cleanup = unstable_navigationEvents.addListener('pageFocused', (payload) => { + const event: PageFocusedEvent = { type: 'pageFocused', ...payload }; + events.push(event); + onEvent?.(event); + }); + cleanups.push(cleanup); + return events; + } + + it('emits pageFocused after the focused screen content has committed', () => { + const order: string[] = []; + listenForPageFocused(() => order.push('pageFocused')); + + function HomeScreen() { + useLayoutEffect(() => { + order.push('home-committed'); + }); + return Home; + } + + renderRouter({ + _layout: () => , + index: HomeScreen, + }); + + expect(screen.getByTestId('home-content')).toBeVisible(); + const focusIdx = order.indexOf('pageFocused'); + const commitIdx = order.indexOf('home-committed'); + expect(commitIdx).toBeGreaterThanOrEqual(0); + expect(focusIdx).toBeGreaterThan(commitIdx); + }); + + it('does not re-emit pageFocused on plain re-renders of the focused screen', () => { + const events = listenForPageFocused(); + + renderRouter({ + _layout: () => , + index: () => Home, + }); + + expect(events).toHaveLength(1); + expect(events.at(0)?.pathname).toBe('/'); + + // Force a re-render via a no-op setParams (same focused screen, fresh render pass) + act(() => router.setParams({ ping: '1' })); + act(() => router.setParams({ ping: '2' })); + + expect(events).toHaveLength(1); + }); + + it('re-emits pageFocused when the screen is re-focused after a push/pop', () => { + const events = listenForPageFocused(); + + renderRouter({ + _layout: () => , + index: () => Home, + details: () => Details, + }); + + expect(events).toHaveLength(1); + expect(events.at(0)?.pathname).toBe('/'); + + act(() => router.push('/details')); + expect(screen.getByTestId('details-content')).toBeVisible(); + expect(events).toHaveLength(2); + expect(events.at(1)?.pathname).toBe('/details'); + + act(() => router.back()); + expect(screen.getByTestId('home-content')).toBeVisible(); + expect(events).toHaveLength(3); + expect(events.at(2)?.pathname).toBe('/'); + }); +}); diff --git a/packages/expo-router/src/useScreens.tsx b/packages/expo-router/src/useScreens.tsx index a57c2574b14a55..ad9e9d3f9c6cdf 100644 --- a/packages/expo-router/src/useScreens.tsx +++ b/packages/expo-router/src/useScreens.tsx @@ -436,14 +436,18 @@ function AnalyticsListeners({ const isFocused = navigation.isFocused(); - if (isFocused && routeInfo) { - unstable_navigationEvents.emit('pageFocused', { - pathname: routeInfo.pathname, - params: routeInfo.params, - screenId, - }); - hasBlurredRef.current = false; - } + // Emit `pageFocused` from an effect — not during render — so it fires after the + // focused screen's content has committed. `hasBlurredRef` deduplicates across both paths. + useEffect(() => { + if (isFocused && routeInfo && hasBlurredRef.current) { + unstable_navigationEvents.emit('pageFocused', { + pathname: routeInfo.pathname, + params: routeInfo.params, + screenId, + }); + hasBlurredRef.current = false; + } + }, [isFocused, routeInfo?.pathname, routeInfo?.params, screenId]); useEffect(() => { if (routeInfo) { From 1c8096a1ede160be819e7f0bd82e398e313efc50 Mon Sep 17 00:00:00 2001 From: Jakub Tkacz <32908614+Ubax@users.noreply.github.com> Date: Wed, 13 May 2026 18:43:40 +0200 Subject: [PATCH 04/21] [expo-observe] rename ttr + isInitial with warm and cold ttr (#45697) # Why Using custom param to signal that TTR is initial, is not optimal for processing in Clickhouse. # How Change: - `ttr` with `isInitial=true` to `cold_ttr` - `ttr` with `isInitial=false` to `warm_ttr` # Test Plan 1. Observe tester 2. CI # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- .../expo/modules/observe/OpenTelemetry.kt | 3 +- .../expo/modules/observe/OpenTelemetryTest.kt | 7 ++--- .../integrations/expo-router/init.d.ts.map | 2 +- .../build/integrations/expo-router/init.js | 9 +++--- .../integrations/expo-router/init.js.map | 2 +- packages/expo-observe/ios/OpenTelemetry.swift | 4 +++ .../ios/Tests/OpenTelemetryTests.swift | 29 +++++++++++++++++++ .../expo-router/__tests__/init.test.native.ts | 18 ++++++------ .../src/integrations/expo-router/init.ts | 9 +++--- 9 files changed, 59 insertions(+), 24 deletions(-) diff --git a/packages/expo-observe/android/src/main/java/expo/modules/observe/OpenTelemetry.kt b/packages/expo-observe/android/src/main/java/expo/modules/observe/OpenTelemetry.kt index 0bdbf2cfdee72b..70b600896eef87 100644 --- a/packages/expo-observe/android/src/main/java/expo/modules/observe/OpenTelemetry.kt +++ b/packages/expo-observe/android/src/main/java/expo/modules/observe/OpenTelemetry.kt @@ -191,7 +191,8 @@ private val metricNameMap = mapOf( (MetricCategory.Updates.categoryName to "updateDownloadTime") to "expo.updates.download_time", // Navigation - (MetricCategory.Navigation.categoryName to "ttr") to "expo.navigation.ttr", + (MetricCategory.Navigation.categoryName to "cold_ttr") to "expo.navigation.cold_ttr", + (MetricCategory.Navigation.categoryName to "warm_ttr") to "expo.navigation.warm_ttr", (MetricCategory.Navigation.categoryName to "tti") to "expo.navigation.tti" ) diff --git a/packages/expo-observe/android/src/test/java/expo/modules/observe/OpenTelemetryTest.kt b/packages/expo-observe/android/src/test/java/expo/modules/observe/OpenTelemetryTest.kt index f02bc2007aeec8..964669e8428a31 100644 --- a/packages/expo-observe/android/src/test/java/expo/modules/observe/OpenTelemetryTest.kt +++ b/packages/expo-observe/android/src/test/java/expo/modules/observe/OpenTelemetryTest.kt @@ -111,7 +111,8 @@ class OpenTelemetryTest { val navigation = MetricCategory.Navigation.categoryName assertEquals("expo.navigation.tti", nameFor(navigation, "tti")) - assertEquals("expo.navigation.ttr", nameFor(navigation, "ttr")) + assertEquals("expo.navigation.cold_ttr", nameFor(navigation, "cold_ttr")) + assertEquals("expo.navigation.warm_ttr", nameFor(navigation, "warm_ttr")) } @Test @@ -152,12 +153,11 @@ class OpenTelemetryTest { sessionId = testSessionId, timestamp = "2026-01-01T00:00:00.000Z", category = "navigation", - name = "ttr", + name = "cold_ttr", value = 0.25, routeName = "/home", customParams = JsonObject( mapOf( - "isInitial" to JsonPrimitive(true), "isAppLaunch" to JsonPrimitive(false) ) ) @@ -167,7 +167,6 @@ class OpenTelemetryTest { assertEquals("/home", attrs["expo.route_name"]) val parsed = Json.parseToJsonElement(attrs["expo.custom_params"]!!).jsonObject - assertEquals(true, parsed["isInitial"]!!.jsonPrimitive.content.toBoolean()) assertEquals(false, parsed["isAppLaunch"]!!.jsonPrimitive.content.toBoolean()) } diff --git a/packages/expo-observe/build/integrations/expo-router/init.d.ts.map b/packages/expo-observe/build/integrations/expo-router/init.d.ts.map index 4f2bbe7fb459af..f6ddd88f860359 100644 --- a/packages/expo-observe/build/integrations/expo-router/init.d.ts.map +++ b/packages/expo-observe/build/integrations/expo-router/init.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/integrations/expo-router/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAS1D,eAAO,MAAM,aAAa,eAAoB,CAAC;AAE/C,wBAAgB,qBAAqB,SAGpC;AAED,KAAK,gBAAgB,GAAG,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC,2BAA2B,CAAC,CAAC;AAExF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,wBAAwB,EACjC,gBAAgB,EAAE,gBAAgB,GACjC,MAAM,IAAI,CAyEZ"} \ No newline at end of file +{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/integrations/expo-router/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAS1D,eAAO,MAAM,aAAa,eAAoB,CAAC;AAE/C,wBAAgB,qBAAqB,SAGpC;AAED,KAAK,gBAAgB,GAAG,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC,2BAA2B,CAAC,CAAC;AAExF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,wBAAwB,EACjC,gBAAgB,EAAE,gBAAgB,GACjC,MAAM,IAAI,CA0EZ"} \ No newline at end of file diff --git a/packages/expo-observe/build/integrations/expo-router/init.js b/packages/expo-observe/build/integrations/expo-router/init.js index 7370201e5260de..d464061dcaee75 100644 --- a/packages/expo-observe/build/integrations/expo-router/init.js +++ b/packages/expo-observe/build/integrations/expo-router/init.js @@ -34,6 +34,7 @@ export function initListeners(storage, navigationEvents) { const timestamp = new Date().toISOString(); const isInitial = !storage.renderedScreensIds.has(e.screenId); storage.renderedScreensIds.add(e.screenId); + const name = isInitial ? 'cold_ttr' : 'warm_ttr'; const mainSessionId = (await AppMetrics.getMainSession())?.id; if (!mainSessionId) { return; @@ -46,10 +47,10 @@ export function initListeners(storage, navigationEvents) { sessionId: mainSessionId, timestamp, category: 'navigation', - name: 'ttr', + name, routeName: e.pathname, value: appLaunchTtrSeconds, - params: { isInitial, isAppLaunch: true, routeParams: e.params }, + params: { isAppLaunch: true, routeParams: e.params }, }); return; } @@ -66,10 +67,10 @@ export function initListeners(storage, navigationEvents) { sessionId: mainSessionId, timestamp, category: 'navigation', - name: 'ttr', + name, routeName: e.pathname, value: (now - dispatchTime) / 1000, - params: { isInitial, isAppLaunch: false, routeParams: e.params }, + params: { isAppLaunch: false, routeParams: e.params }, }); } storage.pendingActions.length = 0; diff --git a/packages/expo-observe/build/integrations/expo-router/init.js.map b/packages/expo-observe/build/integrations/expo-router/init.js.map index 766e8ea83cc71c..3aa662ee07e59f 100644 --- a/packages/expo-observe/build/integrations/expo-router/init.js.map +++ b/packages/expo-observe/build/integrations/expo-router/init.js.map @@ -1 +1 @@ -{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/integrations/expo-router/init.ts"],"names":[],"mappings":"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","sourcesContent":["import AppMetrics from 'expo-app-metrics';\n\nimport { optionalRouter } from './router';\nimport { type RouterIntegrationStorage } from './storage';\n\n// TODO(@ubax): split this module into `.native.ts` / `.web.ts` variants so the\n// web bundle doesn't pull in `expo-app-metrics`' native bridge calls. The web\n// version should be an explicit no-op (return a noop cleanup) rather than\n// relying on the web stubs in `expo-app-metrics/module.web.ts`.\n\nlet initialized = false;\n\nexport const isInitialized = () => initialized;\n\nexport function initRouterIntegration() {\n initialized = true;\n optionalRouter?.unstable_navigationEvents.enable();\n}\n\ntype NavigationEvents = NonNullable['unstable_navigationEvents'];\n\nexport function initListeners(\n storage: RouterIntegrationStorage,\n navigationEvents: NavigationEvents\n): () => void {\n const appLaunchTime = performance.now();\n const cleanup = new Set<() => void>();\n\n const unsubscribeAction = navigationEvents.addListener('actionDispatched', (event) => {\n // TODO(@ubax): Handle screen preloading\n // PRELOAD comes from router.prefetch() — a route warm-up, not a user\n // navigation — so it must not seed dispatchTime.\n if (event.actionType === 'PRELOAD') return;\n storage.pendingActions.push({\n actionType: event.actionType,\n dispatchTime: performance.now(),\n });\n });\n cleanup.add(unsubscribeAction);\n\n const unsubscribeFocus = navigationEvents.addListener('pageFocused', async (e) => {\n // Snapshot both clocks once so every metric written below is stamped with\n // the moment the focus event fired, not the moment `addCustomMetricToSession`\n // happens to run after the awaited `getMainSession()` round-trip.\n const now = performance.now();\n const timestamp = new Date().toISOString();\n const isInitial = !storage.renderedScreensIds.has(e.screenId);\n storage.renderedScreensIds.add(e.screenId);\n const mainSessionId = (await AppMetrics.getMainSession())?.id;\n if (!mainSessionId) {\n return;\n }\n\n if (!storage.hasRecordedInitialTtr) {\n // Stored in seconds to match the OTel `unit = \"s\"` convention\n const appLaunchTtrSeconds = (now - appLaunchTime) / 1000;\n storage.hasRecordedInitialTtr = true;\n AppMetrics.addCustomMetricToSession({\n sessionId: mainSessionId,\n timestamp,\n category: 'navigation',\n name: 'ttr',\n routeName: e.pathname,\n value: appLaunchTtrSeconds,\n params: { isInitial, isAppLaunch: true, routeParams: e.params },\n });\n return;\n }\n\n if (storage.pendingActions.length === 0) return;\n\n const last = storage.pendingActions[storage.pendingActions.length - 1];\n if (last) {\n const dispatchTime = last.dispatchTime;\n storage.screenTimes[e.screenId] = {\n ...storage.screenTimes[e.screenId],\n dispatchTime,\n };\n\n AppMetrics.addCustomMetricToSession({\n sessionId: mainSessionId,\n timestamp,\n category: 'navigation',\n name: 'ttr',\n routeName: e.pathname,\n value: (now - dispatchTime) / 1000,\n params: { isInitial, isAppLaunch: false, routeParams: e.params },\n });\n }\n storage.pendingActions.length = 0;\n });\n cleanup.add(unsubscribeFocus);\n\n return () => {\n cleanup.forEach((c) => c());\n cleanup.clear();\n };\n}\n"]} \ No newline at end of file +{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/integrations/expo-router/init.ts"],"names":[],"mappings":"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","sourcesContent":["import AppMetrics from 'expo-app-metrics';\n\nimport { optionalRouter } from './router';\nimport { type RouterIntegrationStorage } from './storage';\n\n// TODO(@ubax): split this module into `.native.ts` / `.web.ts` variants so the\n// web bundle doesn't pull in `expo-app-metrics`' native bridge calls. The web\n// version should be an explicit no-op (return a noop cleanup) rather than\n// relying on the web stubs in `expo-app-metrics/module.web.ts`.\n\nlet initialized = false;\n\nexport const isInitialized = () => initialized;\n\nexport function initRouterIntegration() {\n initialized = true;\n optionalRouter?.unstable_navigationEvents.enable();\n}\n\ntype NavigationEvents = NonNullable['unstable_navigationEvents'];\n\nexport function initListeners(\n storage: RouterIntegrationStorage,\n navigationEvents: NavigationEvents\n): () => void {\n const appLaunchTime = performance.now();\n const cleanup = new Set<() => void>();\n\n const unsubscribeAction = navigationEvents.addListener('actionDispatched', (event) => {\n // TODO(@ubax): Handle screen preloading\n // PRELOAD comes from router.prefetch() — a route warm-up, not a user\n // navigation — so it must not seed dispatchTime.\n if (event.actionType === 'PRELOAD') return;\n storage.pendingActions.push({\n actionType: event.actionType,\n dispatchTime: performance.now(),\n });\n });\n cleanup.add(unsubscribeAction);\n\n const unsubscribeFocus = navigationEvents.addListener('pageFocused', async (e) => {\n // Snapshot both clocks once so every metric written below is stamped with\n // the moment the focus event fired, not the moment `addCustomMetricToSession`\n // happens to run after the awaited `getMainSession()` round-trip.\n const now = performance.now();\n const timestamp = new Date().toISOString();\n const isInitial = !storage.renderedScreensIds.has(e.screenId);\n storage.renderedScreensIds.add(e.screenId);\n const name = isInitial ? 'cold_ttr' : 'warm_ttr';\n const mainSessionId = (await AppMetrics.getMainSession())?.id;\n if (!mainSessionId) {\n return;\n }\n\n if (!storage.hasRecordedInitialTtr) {\n // Stored in seconds to match the OTel `unit = \"s\"` convention\n const appLaunchTtrSeconds = (now - appLaunchTime) / 1000;\n storage.hasRecordedInitialTtr = true;\n AppMetrics.addCustomMetricToSession({\n sessionId: mainSessionId,\n timestamp,\n category: 'navigation',\n name,\n routeName: e.pathname,\n value: appLaunchTtrSeconds,\n params: { isAppLaunch: true, routeParams: e.params },\n });\n return;\n }\n\n if (storage.pendingActions.length === 0) return;\n\n const last = storage.pendingActions[storage.pendingActions.length - 1];\n if (last) {\n const dispatchTime = last.dispatchTime;\n storage.screenTimes[e.screenId] = {\n ...storage.screenTimes[e.screenId],\n dispatchTime,\n };\n\n AppMetrics.addCustomMetricToSession({\n sessionId: mainSessionId,\n timestamp,\n category: 'navigation',\n name,\n routeName: e.pathname,\n value: (now - dispatchTime) / 1000,\n params: { isAppLaunch: false, routeParams: e.params },\n });\n }\n storage.pendingActions.length = 0;\n });\n cleanup.add(unsubscribeFocus);\n\n return () => {\n cleanup.forEach((c) => c());\n cleanup.clear();\n };\n}\n"]} \ No newline at end of file diff --git a/packages/expo-observe/ios/OpenTelemetry.swift b/packages/expo-observe/ios/OpenTelemetry.swift index 2575d3040e58db..f45da57ead7c24 100644 --- a/packages/expo-observe/ios/OpenTelemetry.swift +++ b/packages/expo-observe/ios/OpenTelemetry.swift @@ -197,6 +197,10 @@ let metricNameMap = [ // Updates "updates/updateDownloadTime": "expo.updates.download_time", + + // Navigation + "navigation/cold_ttr": "expo.navigation.cold_ttr", + "navigation/warm_ttr": "expo.navigation.warm_ttr" ] nonisolated(unsafe) let formatter = ISO8601DateFormatter() diff --git a/packages/expo-observe/ios/Tests/OpenTelemetryTests.swift b/packages/expo-observe/ios/Tests/OpenTelemetryTests.swift index dcbd68c612b3c7..82e9865158d626 100644 --- a/packages/expo-observe/ios/Tests/OpenTelemetryTests.swift +++ b/packages/expo-observe/ios/Tests/OpenTelemetryTests.swift @@ -91,6 +91,35 @@ struct OpenTelemetryTests { #expect(custom.toOTMetric().name == "expo.unknown.customMetric") } + @Test + func `navigation metric names are mapped correctly`() { + let cold = Event.Metric( + category: "navigation", + name: "cold_ttr", + value: 1.0, + timestamp: "2026-01-01T00:00:00Z", + sessionId: testSessionId, + parentSessionId: nil, + routeName: nil, + updateId: nil, + customParams: nil + ) + #expect(cold.toOTMetric().name == "expo.navigation.cold_ttr") + + let warm = Event.Metric( + category: "navigation", + name: "warm_ttr", + value: 1.0, + timestamp: "2026-01-01T00:00:00Z", + sessionId: testSessionId, + parentSessionId: nil, + routeName: nil, + updateId: nil, + customParams: nil + ) + #expect(warm.toOTMetric().name == "expo.navigation.warm_ttr") + } + // MARK: - Metric structure @Test diff --git a/packages/expo-observe/src/integrations/expo-router/__tests__/init.test.native.ts b/packages/expo-observe/src/integrations/expo-router/__tests__/init.test.native.ts index 65145fae2c54d7..6011167e9bd2b2 100644 --- a/packages/expo-observe/src/integrations/expo-router/__tests__/init.test.native.ts +++ b/packages/expo-observe/src/integrations/expo-router/__tests__/init.test.native.ts @@ -88,7 +88,7 @@ afterEach(() => { }); describe('initListeners', () => { - it('records TTR with isAppLaunch=true on the first focus after a non-PRELOAD action', async () => { + it('records cold_ttr with isAppLaunch=true on the first focus after a non-PRELOAD action', async () => { const now = performance.now(); jest.spyOn(performance, 'now').mockReturnValue(now + 100); focus(events, 'a'); @@ -99,14 +99,14 @@ describe('initListeners', () => { sessionId: mockSessionId, timestamp: expect.any(String), category: 'navigation', - name: 'ttr', + name: 'cold_ttr', routeName: '/a', value: expect.closeTo(0.1, 2), - params: { isInitial: true, isAppLaunch: true, routeParams: {} }, + params: { isAppLaunch: true, routeParams: {} }, }); }); - it('records TTR with isAppLaunch=false on subsequent focuses', async () => { + it('records cold_ttr with isAppLaunch=false on subsequent focuses of a new screen', async () => { dispatch(events, 'NAVIGATE'); focus(events, 'a'); await flushAsync(); @@ -117,14 +117,14 @@ describe('initListeners', () => { await flushAsync(); expect(mockAddCustomMetric).toHaveBeenCalledTimes(1); + expect(mockAddCustomMetric.mock.calls[0][0].name).toBe('cold_ttr'); expect(mockAddCustomMetric.mock.calls[0][0].params).toEqual({ - isInitial: true, isAppLaunch: false, routeParams: {}, }); }); - it('records TTR with isInitial=false when revisiting a previously rendered screen', async () => { + it('records warm_ttr when revisiting a previously rendered screen', async () => { focus(events, 'a'); await flushAsync(); @@ -137,18 +137,18 @@ describe('initListeners', () => { await flushAsync(); expect(mockAddCustomMetric).toHaveBeenCalledTimes(3); + expect(mockAddCustomMetric.mock.calls[0][0].name).toBe('cold_ttr'); expect(mockAddCustomMetric.mock.calls[0][0].params).toEqual({ - isInitial: true, isAppLaunch: true, routeParams: {}, }); + expect(mockAddCustomMetric.mock.calls[1][0].name).toBe('cold_ttr'); expect(mockAddCustomMetric.mock.calls[1][0].params).toEqual({ - isInitial: true, isAppLaunch: false, routeParams: {}, }); + expect(mockAddCustomMetric.mock.calls[2][0].name).toBe('warm_ttr'); expect(mockAddCustomMetric.mock.calls[2][0].params).toEqual({ - isInitial: false, isAppLaunch: false, routeParams: {}, }); diff --git a/packages/expo-observe/src/integrations/expo-router/init.ts b/packages/expo-observe/src/integrations/expo-router/init.ts index 691aa8d089b1ba..cde391ca78aec1 100644 --- a/packages/expo-observe/src/integrations/expo-router/init.ts +++ b/packages/expo-observe/src/integrations/expo-router/init.ts @@ -46,6 +46,7 @@ export function initListeners( const timestamp = new Date().toISOString(); const isInitial = !storage.renderedScreensIds.has(e.screenId); storage.renderedScreensIds.add(e.screenId); + const name = isInitial ? 'cold_ttr' : 'warm_ttr'; const mainSessionId = (await AppMetrics.getMainSession())?.id; if (!mainSessionId) { return; @@ -59,10 +60,10 @@ export function initListeners( sessionId: mainSessionId, timestamp, category: 'navigation', - name: 'ttr', + name, routeName: e.pathname, value: appLaunchTtrSeconds, - params: { isInitial, isAppLaunch: true, routeParams: e.params }, + params: { isAppLaunch: true, routeParams: e.params }, }); return; } @@ -81,10 +82,10 @@ export function initListeners( sessionId: mainSessionId, timestamp, category: 'navigation', - name: 'ttr', + name, routeName: e.pathname, value: (now - dispatchTime) / 1000, - params: { isInitial, isAppLaunch: false, routeParams: e.params }, + params: { isAppLaunch: false, routeParams: e.params }, }); } storage.pendingActions.length = 0; From 1f61e3e3e5afd65e8f580fa459b1d9e7615efaa4 Mon Sep 17 00:00:00 2001 From: Jakub Tkacz <32908614+Ubax@users.noreply.github.com> Date: Wed, 13 May 2026 18:43:56 +0200 Subject: [PATCH 05/21] [expo-router] add `tabBarRespectsIMEInsets` android property (#45679) # Why Handling the keyboard with native tabs, was simplified in react-native-screens `4.25.0`. We can now expose it as a prop form NativeTabs. **Note**: Technically this is a breaking change on an unstable API, and since we are in beta, I think we can add it to new features section rather then the breaking changes # How Pass `tabBarRespectsIMEInsets` to screens # Test Plan 1. Router e2e `` Screenshot_1778660661 `` Screenshot_1778660676 # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- docs/pages/router/advanced/native-tabs.mdx | 23 +++++++++++------- .../unversioned/expo-router/native-tabs.json | 2 +- .../data/v56.0.0/expo-router/native-tabs.json | 2 +- packages/expo-router/CHANGELOG.md | 1 + .../NativeTabsView.android.d.ts.map | 2 +- .../native-tabs/NativeTabsView.android.js | 11 ++++----- .../native-tabs/NativeTabsView.android.js.map | 2 +- .../expo-router/build/native-tabs/types.d.ts | 9 +++++++ .../build/native-tabs/types.d.ts.map | 2 +- .../build/native-tabs/types.js.map | 2 +- .../native-tabs/NativeTabsView.android.tsx | 8 ++++--- .../__tests__/NativeTabsView.test.android.tsx | 24 ++++++++++++++++++- packages/expo-router/src/native-tabs/types.ts | 9 +++++++ 13 files changed, 72 insertions(+), 25 deletions(-) diff --git a/docs/pages/router/advanced/native-tabs.mdx b/docs/pages/router/advanced/native-tabs.mdx index 5ce3744deb1a7f..0436504f3b2c3c 100644 --- a/docs/pages/router/advanced/native-tabs.mdx +++ b/docs/pages/router/advanced/native-tabs.mdx @@ -985,20 +985,25 @@ const styles = StyleSheet.create({ }); ``` -### Disabling keyboard avoidance on Android +### Keyboard avoidance on Android -By default, when the keyboard is displayed on Android, the native tabs automatically adjust to avoid being obscured. You can disable this behavior by changing the [`android.softwareKeyboardLayoutMode`](/versions/latest/config/app/#softwarekeyboardlayoutmode) property to `pan` in your app config file: +By default on Android, the keyboard overlays the native tab bar. To have the tab bar lift above the keyboard instead, pass the `tabBarRespectsIMEInsets` prop on `NativeTabs`: -```json app.json -{ - "expo": { - "android": { - "softwareKeyboardLayoutMode": "pan" - } - } +```tsx app/_layout.tsx +import { NativeTabs } from 'expo-router/unstable-native-tabs'; + +export default function TabLayout() { + return ( + + + + + ); } ``` +> **info** Requires Android 11 or later and the app config field [`android.softwareKeyboardLayoutMode`](/versions/latest/config/app/#softwarekeyboardlayoutmode) set to `"resize"` (the Expo default). Toggling this prop while the keyboard is open takes effect only after the keyboard closes. + ### Safe area handling > **info** This feature is available in SDK 55 and later. diff --git a/docs/public/static/data/unversioned/expo-router/native-tabs.json b/docs/public/static/data/unversioned/expo-router/native-tabs.json index 06a48ca745dafd..2063d4fde95765 100644 --- a/docs/public/static/data/unversioned/expo-router/native-tabs.json +++ b/docs/public/static/data/unversioned/expo-router/native-tabs.json @@ -1 +1 @@ -{"schemaVersion":"2.0","name":"expo-router/native-tabs","variant":"project","kind":1,"children":[{"name":"DrawableIcon","variant":"declaration","kind":256,"children":[{"name":"drawable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the drawable resource to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}}]},{"name":"MaterialIcon","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Material icon name for Android native tabs."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"md","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Material icon glyph name. See the [Material icons for the complete catalog](https://fonts.google.com/icons)."}]},"type":{"type":"union","types":[{"type":"literal","value":"function"},{"type":"literal","value":"search"},{"type":"literal","value":"repeat"},{"type":"literal","value":"anchor"},{"type":"literal","value":"link"},{"type":"literal","value":"key"},{"type":"literal","value":"history"},{"type":"literal","value":"join"},{"type":"literal","value":"shift"},{"type":"literal","value":"sort"},{"type":"literal","value":"map"},{"type":"literal","value":"filter"},{"type":"literal","value":"source"},{"type":"literal","value":"target"},{"type":"literal","value":"navigation"},{"type":"literal","value":"route"},{"type":"literal","value":"article"},{"type":"literal","value":"code"},{"type":"literal","value":"details"},{"type":"literal","value":"html"},{"type":"literal","value":"iframe"},{"type":"literal","value":"input"},{"type":"literal","value":"label"},{"type":"literal","value":"menu"},{"type":"literal","value":"output"},{"type":"literal","value":"script"},{"type":"literal","value":"select"},{"type":"literal","value":"style"},{"type":"literal","value":"table"},{"type":"literal","value":"title"},{"type":"literal","value":"circle"},{"type":"literal","value":"image"},{"type":"literal","value":"pattern"},{"type":"literal","value":"polyline"},{"type":"literal","value":"stop"},{"type":"literal","value":"switch"},{"type":"literal","value":"event"},{"type":"literal","value":"create"},{"type":"literal","value":"stack"},{"type":"literal","value":"segment"},{"type":"literal","value":"groups"},{"type":"literal","value":"group"},{"type":"literal","value":"router"},{"type":"literal","value":"merge"},{"type":"literal","value":"call"},{"type":"literal","value":"tab"},{"type":"literal","value":"ios"},{"type":"literal","value":"android"},{"type":"literal","value":"web"},{"type":"literal","value":"cancel"},{"type":"literal","value":"close"},{"type":"literal","value":"error"},{"type":"literal","value":"pause"},{"type":"literal","value":"resize"},{"type":"literal","value":"message"},{"type":"literal","value":"storage"},{"type":"literal","value":"accessible"},{"type":"literal","value":"colors"},{"type":"literal","value":"email"},{"type":"literal","value":"radio"},{"type":"literal","value":"timer"},{"type":"literal","value":"list"},{"type":"literal","value":"toolbar"},{"type":"literal","value":"feed"},{"type":"literal","value":"note"},{"type":"literal","value":"tooltip"},{"type":"literal","value":"light"},{"type":"literal","value":"uppercase"},{"type":"literal","value":"lowercase"},{"type":"literal","value":"difference"},{"type":"literal","value":"scale"},{"type":"literal","value":"done"},{"type":"literal","value":"opacity"},{"type":"literal","value":"elevation"},{"type":"literal","value":"visibility"},{"type":"literal","value":"height"},{"type":"literal","value":"margin"},{"type":"literal","value":"padding"},{"type":"literal","value":"start"},{"type":"literal","value":"transform"},{"type":"literal","value":"description"},{"type":"literal","value":"contrast"},{"type":"literal","value":"clear"},{"type":"literal","value":"translate"},{"type":"literal","value":"animation"},{"type":"literal","value":"phone"},{"type":"literal","value":"send"},{"type":"literal","value":"flip"},{"type":"literal","value":"expand"},{"type":"literal","value":"window"},{"type":"literal","value":"speed"},{"type":"literal","value":"badge"},{"type":"literal","value":"warning"},{"type":"literal","value":"toast"},{"type":"literal","value":"api"},{"type":"literal","value":"sync"},{"type":"literal","value":"host"},{"type":"literal","value":"portrait"},{"type":"literal","value":"landscape"},{"type":"literal","value":"alarm"},{"type":"literal","value":"barcode"},{"type":"literal","value":"bolt"},{"type":"literal","value":"book"},{"type":"literal","value":"bookmark"},{"type":"literal","value":"camera"},{"type":"literal","value":"cloud"},{"type":"literal","value":"crop"},{"type":"literal","value":"eject"},{"type":"literal","value":"equal"},{"type":"literal","value":"eyeglasses"},{"type":"literal","value":"flag"},{"type":"literal","value":"flowchart"},{"type":"literal","value":"folder"},{"type":"literal","value":"forward"},{"type":"literal","value":"globe"},{"type":"literal","value":"headphones"},{"type":"literal","value":"hexagon"},{"type":"literal","value":"hourglass"},{"type":"literal","value":"house"},{"type":"literal","value":"info"},{"type":"literal","value":"keyboard"},{"type":"literal","value":"lightbulb"},{"type":"literal","value":"lock"},{"type":"literal","value":"mic"},{"type":"literal","value":"percent"},{"type":"literal","value":"person"},{"type":"literal","value":"photo"},{"type":"literal","value":"pin"},{"type":"literal","value":"power"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"shield"},{"type":"literal","value":"shuffle"},{"type":"literal","value":"signature"},{"type":"literal","value":"speaker"},{"type":"literal","value":"square"},{"type":"literal","value":"star"},{"type":"literal","value":"tag"},{"type":"literal","value":"thermometer"},{"type":"literal","value":"timelapse"},{"type":"literal","value":"tornado"},{"type":"literal","value":"tv"},{"type":"literal","value":"umbrella"},{"type":"literal","value":"wifi"},{"type":"literal","value":"abc"},{"type":"literal","value":"crown"},{"type":"literal","value":"diamond"},{"type":"literal","value":"loupe"},{"type":"literal","value":"mail"},{"type":"literal","value":"newspaper"},{"type":"literal","value":"pip"},{"type":"literal","value":"scanner"},{"type":"literal","value":"shadow"},{"type":"literal","value":"stethoscope"},{"type":"literal","value":"terminal"},{"type":"literal","value":"tram"},{"type":"literal","value":"asterisk"},{"type":"literal","value":"checklist"},{"type":"literal","value":"earbuds"},{"type":"literal","value":"pentagon"},{"type":"literal","value":"scooter"},{"type":"literal","value":"backpack"},{"type":"literal","value":"bathtub"},{"type":"literal","value":"chair"},{"type":"literal","value":"dishwasher"},{"type":"literal","value":"fireplace"},{"type":"literal","value":"microwave"},{"type":"literal","value":"oven"},{"type":"literal","value":"pill"},{"type":"literal","value":"shower"},{"type":"literal","value":"sprinkler"},{"type":"literal","value":"stairs"},{"type":"literal","value":"syringe"},{"type":"literal","value":"trophy"},{"type":"literal","value":"sos"},{"type":"literal","value":"stroller"},{"type":"literal","value":"accessibility"},{"type":"literal","value":"bubble"},{"type":"literal","value":"smartphone"},{"type":"literal","value":"storefront"},{"type":"literal","value":"drone"},{"type":"literal","value":"headset"},{"type":"literal","value":"moped"},{"type":"literal","value":"motorcycle"},{"type":"literal","value":"numbers"},{"type":"literal","value":"receipt"},{"type":"literal","value":"palette"},{"type":"literal","value":"download"},{"type":"literal","value":"security"},{"type":"literal","value":"hide"},{"type":"literal","value":"step"},{"type":"literal","value":"move"},{"type":"literal","value":"scene"},{"type":"literal","value":"bookmarks"},{"type":"literal","value":"contacts"},{"type":"literal","value":"more"},{"type":"literal","value":"tabs"},{"type":"literal","value":"123"},{"type":"literal","value":"360"},{"type":"literal","value":"10k"},{"type":"literal","value":"10mp"},{"type":"literal","value":"11mp"},{"type":"literal","value":"12mp"},{"type":"literal","value":"13mp"},{"type":"literal","value":"14mp"},{"type":"literal","value":"15mp"},{"type":"literal","value":"16mp"},{"type":"literal","value":"17mp"},{"type":"literal","value":"18_up_rating"},{"type":"literal","value":"18mp"},{"type":"literal","value":"19mp"},{"type":"literal","value":"1k"},{"type":"literal","value":"1k_plus"},{"type":"literal","value":"1x_mobiledata"},{"type":"literal","value":"1x_mobiledata_badge"},{"type":"literal","value":"20mp"},{"type":"literal","value":"21mp"},{"type":"literal","value":"22mp"},{"type":"literal","value":"23mp"},{"type":"literal","value":"24fps_select"},{"type":"literal","value":"24mp"},{"type":"literal","value":"2d"},{"type":"literal","value":"2k"},{"type":"literal","value":"2k_plus"},{"type":"literal","value":"2mp"},{"type":"literal","value":"30fps"},{"type":"literal","value":"30fps_select"},{"type":"literal","value":"3d"},{"type":"literal","value":"3d_rotation"},{"type":"literal","value":"3g_mobiledata"},{"type":"literal","value":"3g_mobiledata_badge"},{"type":"literal","value":"3k"},{"type":"literal","value":"3k_plus"},{"type":"literal","value":"3mp"},{"type":"literal","value":"3p"},{"type":"literal","value":"4g_mobiledata"},{"type":"literal","value":"4g_mobiledata_badge"},{"type":"literal","value":"4g_plus_mobiledata"},{"type":"literal","value":"4k"},{"type":"literal","value":"4k_plus"},{"type":"literal","value":"4mp"},{"type":"literal","value":"50mp"},{"type":"literal","value":"5g"},{"type":"literal","value":"5g_mobiledata_badge"},{"type":"literal","value":"5k"},{"type":"literal","value":"5k_plus"},{"type":"literal","value":"5mp"},{"type":"literal","value":"60fps"},{"type":"literal","value":"60fps_select"},{"type":"literal","value":"6_ft_apart"},{"type":"literal","value":"6k"},{"type":"literal","value":"6k_plus"},{"type":"literal","value":"6mp"},{"type":"literal","value":"7k"},{"type":"literal","value":"7k_plus"},{"type":"literal","value":"7mp"},{"type":"literal","value":"8k"},{"type":"literal","value":"8k_plus"},{"type":"literal","value":"8mp"},{"type":"literal","value":"9k"},{"type":"literal","value":"9k_plus"},{"type":"literal","value":"9mp"},{"type":"literal","value":"ac_unit"},{"type":"literal","value":"access_alarm"},{"type":"literal","value":"access_alarms"},{"type":"literal","value":"access_time"},{"type":"literal","value":"access_time_filled"},{"type":"literal","value":"accessibility_new"},{"type":"literal","value":"accessible_forward"},{"type":"literal","value":"accessible_menu"},{"type":"literal","value":"account_balance"},{"type":"literal","value":"account_balance_wallet"},{"type":"literal","value":"account_box"},{"type":"literal","value":"account_child"},{"type":"literal","value":"account_child_invert"},{"type":"literal","value":"account_circle"},{"type":"literal","value":"account_circle_off"},{"type":"literal","value":"account_tree"},{"type":"literal","value":"action_key"},{"type":"literal","value":"activity_zone"},{"type":"literal","value":"acupuncture"},{"type":"literal","value":"acute"},{"type":"literal","value":"ad"},{"type":"literal","value":"ad_group"},{"type":"literal","value":"ad_group_off"},{"type":"literal","value":"ad_off"},{"type":"literal","value":"ad_units"},{"type":"literal","value":"adaptive_audio_mic"},{"type":"literal","value":"adaptive_audio_mic_off"},{"type":"literal","value":"adb"},{"type":"literal","value":"add"},{"type":"literal","value":"add_2"},{"type":"literal","value":"add_a_photo"},{"type":"literal","value":"add_ad"},{"type":"literal","value":"add_alarm"},{"type":"literal","value":"add_alert"},{"type":"literal","value":"add_box"},{"type":"literal","value":"add_business"},{"type":"literal","value":"add_call"},{"type":"literal","value":"add_card"},{"type":"literal","value":"add_chart"},{"type":"literal","value":"add_circle"},{"type":"literal","value":"add_circle_outline"},{"type":"literal","value":"add_column_left"},{"type":"literal","value":"add_column_right"},{"type":"literal","value":"add_comment"},{"type":"literal","value":"add_diamond"},{"type":"literal","value":"add_home"},{"type":"literal","value":"add_home_work"},{"type":"literal","value":"add_ic_call"},{"type":"literal","value":"add_link"},{"type":"literal","value":"add_location"},{"type":"literal","value":"add_location_alt"},{"type":"literal","value":"add_moderator"},{"type":"literal","value":"add_notes"},{"type":"literal","value":"add_photo_alternate"},{"type":"literal","value":"add_reaction"},{"type":"literal","value":"add_road"},{"type":"literal","value":"add_row_above"},{"type":"literal","value":"add_row_below"},{"type":"literal","value":"add_shopping_cart"},{"type":"literal","value":"add_task"},{"type":"literal","value":"add_to_drive"},{"type":"literal","value":"add_to_home_screen"},{"type":"literal","value":"add_to_photos"},{"type":"literal","value":"add_to_queue"},{"type":"literal","value":"add_triangle"},{"type":"literal","value":"addchart"},{"type":"literal","value":"adf_scanner"},{"type":"literal","value":"adjust"},{"type":"literal","value":"admin_meds"},{"type":"literal","value":"admin_panel_settings"},{"type":"literal","value":"ads_click"},{"type":"literal","value":"agender"},{"type":"literal","value":"agriculture"},{"type":"literal","value":"air"},{"type":"literal","value":"air_freshener"},{"type":"literal","value":"air_purifier"},{"type":"literal","value":"air_purifier_gen"},{"type":"literal","value":"airline_seat_flat"},{"type":"literal","value":"airline_seat_flat_angled"},{"type":"literal","value":"airline_seat_individual_suite"},{"type":"literal","value":"airline_seat_legroom_extra"},{"type":"literal","value":"airline_seat_legroom_normal"},{"type":"literal","value":"airline_seat_legroom_reduced"},{"type":"literal","value":"airline_seat_recline_extra"},{"type":"literal","value":"airline_seat_recline_normal"},{"type":"literal","value":"airline_stops"},{"type":"literal","value":"airlines"},{"type":"literal","value":"airplane_ticket"},{"type":"literal","value":"airplanemode_active"},{"type":"literal","value":"airplanemode_inactive"},{"type":"literal","value":"airplay"},{"type":"literal","value":"airport_shuttle"},{"type":"literal","value":"airwave"},{"type":"literal","value":"alarm_add"},{"type":"literal","value":"alarm_off"},{"type":"literal","value":"alarm_on"},{"type":"literal","value":"alarm_pause"},{"type":"literal","value":"alarm_smart_wake"},{"type":"literal","value":"album"},{"type":"literal","value":"align_center"},{"type":"literal","value":"align_end"},{"type":"literal","value":"align_flex_center"},{"type":"literal","value":"align_flex_end"},{"type":"literal","value":"align_flex_start"},{"type":"literal","value":"align_horizontal_center"},{"type":"literal","value":"align_horizontal_left"},{"type":"literal","value":"align_horizontal_right"},{"type":"literal","value":"align_items_stretch"},{"type":"literal","value":"align_justify_center"},{"type":"literal","value":"align_justify_flex_end"},{"type":"literal","value":"align_justify_flex_start"},{"type":"literal","value":"align_justify_space_around"},{"type":"literal","value":"align_justify_space_between"},{"type":"literal","value":"align_justify_space_even"},{"type":"literal","value":"align_justify_stretch"},{"type":"literal","value":"align_self_stretch"},{"type":"literal","value":"align_space_around"},{"type":"literal","value":"align_space_between"},{"type":"literal","value":"align_space_even"},{"type":"literal","value":"align_start"},{"type":"literal","value":"align_stretch"},{"type":"literal","value":"align_vertical_bottom"},{"type":"literal","value":"align_vertical_center"},{"type":"literal","value":"align_vertical_top"},{"type":"literal","value":"all_inbox"},{"type":"literal","value":"all_inclusive"},{"type":"literal","value":"all_match"},{"type":"literal","value":"all_out"},{"type":"literal","value":"allergies"},{"type":"literal","value":"allergy"},{"type":"literal","value":"alt_route"},{"type":"literal","value":"alternate_email"},{"type":"literal","value":"altitude"},{"type":"literal","value":"ambulance"},{"type":"literal","value":"amend"},{"type":"literal","value":"amp_stories"},{"type":"literal","value":"analytics"},{"type":"literal","value":"android_cell_4_bar"},{"type":"literal","value":"android_cell_4_bar_alert"},{"type":"literal","value":"android_cell_4_bar_off"},{"type":"literal","value":"android_cell_4_bar_plus"},{"type":"literal","value":"android_cell_5_bar"},{"type":"literal","value":"android_cell_5_bar_alert"},{"type":"literal","value":"android_cell_5_bar_off"},{"type":"literal","value":"android_cell_5_bar_plus"},{"type":"literal","value":"android_cell_dual_4_bar"},{"type":"literal","value":"android_cell_dual_4_bar_alert"},{"type":"literal","value":"android_cell_dual_4_bar_plus"},{"type":"literal","value":"android_cell_dual_5_bar"},{"type":"literal","value":"android_cell_dual_5_bar_alert"},{"type":"literal","value":"android_cell_dual_5_bar_plus"},{"type":"literal","value":"android_wifi_3_bar"},{"type":"literal","value":"android_wifi_3_bar_alert"},{"type":"literal","value":"android_wifi_3_bar_lock"},{"type":"literal","value":"android_wifi_3_bar_off"},{"type":"literal","value":"android_wifi_3_bar_plus"},{"type":"literal","value":"android_wifi_3_bar_question"},{"type":"literal","value":"android_wifi_4_bar"},{"type":"literal","value":"android_wifi_4_bar_alert"},{"type":"literal","value":"android_wifi_4_bar_lock"},{"type":"literal","value":"android_wifi_4_bar_off"},{"type":"literal","value":"android_wifi_4_bar_plus"},{"type":"literal","value":"android_wifi_4_bar_question"},{"type":"literal","value":"animated_images"},{"type":"literal","value":"announcement"},{"type":"literal","value":"aod"},{"type":"literal","value":"aod_tablet"},{"type":"literal","value":"aod_watch"},{"type":"literal","value":"apartment"},{"type":"literal","value":"apk_document"},{"type":"literal","value":"apk_install"},{"type":"literal","value":"app_badging"},{"type":"literal","value":"app_blocking"},{"type":"literal","value":"app_registration"},{"type":"literal","value":"app_settings_alt"},{"type":"literal","value":"app_shortcut"},{"type":"literal","value":"apparel"},{"type":"literal","value":"approval"},{"type":"literal","value":"approval_delegation"},{"type":"literal","value":"approval_delegation_off"},{"type":"literal","value":"apps"},{"type":"literal","value":"apps_outage"},{"type":"literal","value":"aq"},{"type":"literal","value":"aq_indoor"},{"type":"literal","value":"ar_on_you"},{"type":"literal","value":"ar_stickers"},{"type":"literal","value":"architecture"},{"type":"literal","value":"archive"},{"type":"literal","value":"area_chart"},{"type":"literal","value":"arming_countdown"},{"type":"literal","value":"arrow_and_edge"},{"type":"literal","value":"arrow_back"},{"type":"literal","value":"arrow_back_2"},{"type":"literal","value":"arrow_back_ios"},{"type":"literal","value":"arrow_back_ios_new"},{"type":"literal","value":"arrow_circle_down"},{"type":"literal","value":"arrow_circle_left"},{"type":"literal","value":"arrow_circle_right"},{"type":"literal","value":"arrow_circle_up"},{"type":"literal","value":"arrow_cool_down"},{"type":"literal","value":"arrow_downward"},{"type":"literal","value":"arrow_downward_alt"},{"type":"literal","value":"arrow_drop_down"},{"type":"literal","value":"arrow_drop_down_circle"},{"type":"literal","value":"arrow_drop_up"},{"type":"literal","value":"arrow_forward"},{"type":"literal","value":"arrow_forward_ios"},{"type":"literal","value":"arrow_insert"},{"type":"literal","value":"arrow_left"},{"type":"literal","value":"arrow_left_alt"},{"type":"literal","value":"arrow_menu_close"},{"type":"literal","value":"arrow_menu_open"},{"type":"literal","value":"arrow_or_edge"},{"type":"literal","value":"arrow_outward"},{"type":"literal","value":"arrow_range"},{"type":"literal","value":"arrow_right"},{"type":"literal","value":"arrow_right_alt"},{"type":"literal","value":"arrow_selector_tool"},{"type":"literal","value":"arrow_shape_up"},{"type":"literal","value":"arrow_shape_up_stack"},{"type":"literal","value":"arrow_shape_up_stack_2"},{"type":"literal","value":"arrow_split"},{"type":"literal","value":"arrow_top_left"},{"type":"literal","value":"arrow_top_right"},{"type":"literal","value":"arrow_upload_progress"},{"type":"literal","value":"arrow_upload_ready"},{"type":"literal","value":"arrow_upward"},{"type":"literal","value":"arrow_upward_alt"},{"type":"literal","value":"arrow_warm_up"},{"type":"literal","value":"arrows_input"},{"type":"literal","value":"arrows_more_down"},{"type":"literal","value":"arrows_more_up"},{"type":"literal","value":"arrows_output"},{"type":"literal","value":"arrows_outward"},{"type":"literal","value":"art_track"},{"type":"literal","value":"article_person"},{"type":"literal","value":"article_shortcut"},{"type":"literal","value":"artist"},{"type":"literal","value":"aspect_ratio"},{"type":"literal","value":"assessment"},{"type":"literal","value":"assignment"},{"type":"literal","value":"assignment_add"},{"type":"literal","value":"assignment_ind"},{"type":"literal","value":"assignment_late"},{"type":"literal","value":"assignment_return"},{"type":"literal","value":"assignment_returned"},{"type":"literal","value":"assignment_turned_in"},{"type":"literal","value":"assist_walker"},{"type":"literal","value":"assistant"},{"type":"literal","value":"assistant_device"},{"type":"literal","value":"assistant_direction"},{"type":"literal","value":"assistant_navigation"},{"type":"literal","value":"assistant_on_hub"},{"type":"literal","value":"assistant_photo"},{"type":"literal","value":"assured_workload"},{"type":"literal","value":"atm"},{"type":"literal","value":"atr"},{"type":"literal","value":"attach_email"},{"type":"literal","value":"attach_file"},{"type":"literal","value":"attach_file_add"},{"type":"literal","value":"attach_file_off"},{"type":"literal","value":"attach_money"},{"type":"literal","value":"attachment"},{"type":"literal","value":"attractions"},{"type":"literal","value":"attribution"},{"type":"literal","value":"audio_description"},{"type":"literal","value":"audio_file"},{"type":"literal","value":"audio_video_receiver"},{"type":"literal","value":"audiotrack"},{"type":"literal","value":"auto_awesome"},{"type":"literal","value":"auto_awesome_mosaic"},{"type":"literal","value":"auto_awesome_motion"},{"type":"literal","value":"auto_delete"},{"type":"literal","value":"auto_fix_high"},{"type":"literal","value":"auto_fix_normal"},{"type":"literal","value":"auto_fix_off"},{"type":"literal","value":"auto_graph"},{"type":"literal","value":"auto_mode"},{"type":"literal","value":"auto_read_pause"},{"type":"literal","value":"auto_read_play"},{"type":"literal","value":"auto_stories"},{"type":"literal","value":"auto_stories_off"},{"type":"literal","value":"auto_towing"},{"type":"literal","value":"auto_transmission"},{"type":"literal","value":"autofps_select"},{"type":"literal","value":"automation"},{"type":"literal","value":"autopause"},{"type":"literal","value":"autoplay"},{"type":"literal","value":"autorenew"},{"type":"literal","value":"autostop"},{"type":"literal","value":"av1"},{"type":"literal","value":"av_timer"},{"type":"literal","value":"avc"},{"type":"literal","value":"avg_pace"},{"type":"literal","value":"avg_time"},{"type":"literal","value":"award_meal"},{"type":"literal","value":"award_star"},{"type":"literal","value":"azm"},{"type":"literal","value":"baby_changing_station"},{"type":"literal","value":"back_hand"},{"type":"literal","value":"back_to_tab"},{"type":"literal","value":"background_dot_large"},{"type":"literal","value":"background_dot_small"},{"type":"literal","value":"background_grid_small"},{"type":"literal","value":"background_replace"},{"type":"literal","value":"backlight_high"},{"type":"literal","value":"backlight_high_off"},{"type":"literal","value":"backlight_low"},{"type":"literal","value":"backspace"},{"type":"literal","value":"backup"},{"type":"literal","value":"backup_table"},{"type":"literal","value":"badge_critical_battery"},{"type":"literal","value":"badminton"},{"type":"literal","value":"bakery_dining"},{"type":"literal","value":"balance"},{"type":"literal","value":"balcony"},{"type":"literal","value":"ballot"},{"type":"literal","value":"bar_chart"},{"type":"literal","value":"bar_chart_4_bars"},{"type":"literal","value":"bar_chart_off"},{"type":"literal","value":"barcode_reader"},{"type":"literal","value":"barcode_scanner"},{"type":"literal","value":"barefoot"},{"type":"literal","value":"batch_prediction"},{"type":"literal","value":"bath_bedrock"},{"type":"literal","value":"bath_outdoor"},{"type":"literal","value":"bath_private"},{"type":"literal","value":"bath_public_large"},{"type":"literal","value":"bath_soak"},{"type":"literal","value":"bathroom"},{"type":"literal","value":"battery_0_bar"},{"type":"literal","value":"battery_1_bar"},{"type":"literal","value":"battery_20"},{"type":"literal","value":"battery_2_bar"},{"type":"literal","value":"battery_30"},{"type":"literal","value":"battery_3_bar"},{"type":"literal","value":"battery_4_bar"},{"type":"literal","value":"battery_50"},{"type":"literal","value":"battery_5_bar"},{"type":"literal","value":"battery_60"},{"type":"literal","value":"battery_6_bar"},{"type":"literal","value":"battery_80"},{"type":"literal","value":"battery_90"},{"type":"literal","value":"battery_alert"},{"type":"literal","value":"battery_android_0"},{"type":"literal","value":"battery_android_1"},{"type":"literal","value":"battery_android_2"},{"type":"literal","value":"battery_android_3"},{"type":"literal","value":"battery_android_4"},{"type":"literal","value":"battery_android_5"},{"type":"literal","value":"battery_android_6"},{"type":"literal","value":"battery_android_alert"},{"type":"literal","value":"battery_android_bolt"},{"type":"literal","value":"battery_android_frame_1"},{"type":"literal","value":"battery_android_frame_2"},{"type":"literal","value":"battery_android_frame_3"},{"type":"literal","value":"battery_android_frame_4"},{"type":"literal","value":"battery_android_frame_5"},{"type":"literal","value":"battery_android_frame_6"},{"type":"literal","value":"battery_android_frame_alert"},{"type":"literal","value":"battery_android_frame_bolt"},{"type":"literal","value":"battery_android_frame_full"},{"type":"literal","value":"battery_android_frame_plus"},{"type":"literal","value":"battery_android_frame_question"},{"type":"literal","value":"battery_android_frame_share"},{"type":"literal","value":"battery_android_frame_shield"},{"type":"literal","value":"battery_android_full"},{"type":"literal","value":"battery_android_plus"},{"type":"literal","value":"battery_android_question"},{"type":"literal","value":"battery_android_share"},{"type":"literal","value":"battery_android_shield"},{"type":"literal","value":"battery_change"},{"type":"literal","value":"battery_charging_20"},{"type":"literal","value":"battery_charging_30"},{"type":"literal","value":"battery_charging_50"},{"type":"literal","value":"battery_charging_60"},{"type":"literal","value":"battery_charging_80"},{"type":"literal","value":"battery_charging_90"},{"type":"literal","value":"battery_charging_full"},{"type":"literal","value":"battery_error"},{"type":"literal","value":"battery_full"},{"type":"literal","value":"battery_full_alt"},{"type":"literal","value":"battery_horiz_000"},{"type":"literal","value":"battery_horiz_050"},{"type":"literal","value":"battery_horiz_075"},{"type":"literal","value":"battery_low"},{"type":"literal","value":"battery_plus"},{"type":"literal","value":"battery_profile"},{"type":"literal","value":"battery_saver"},{"type":"literal","value":"battery_share"},{"type":"literal","value":"battery_status_good"},{"type":"literal","value":"battery_std"},{"type":"literal","value":"battery_unknown"},{"type":"literal","value":"battery_very_low"},{"type":"literal","value":"beach_access"},{"type":"literal","value":"bed"},{"type":"literal","value":"bedroom_baby"},{"type":"literal","value":"bedroom_child"},{"type":"literal","value":"bedroom_parent"},{"type":"literal","value":"bedtime"},{"type":"literal","value":"bedtime_off"},{"type":"literal","value":"beenhere"},{"type":"literal","value":"beer_meal"},{"type":"literal","value":"bento"},{"type":"literal","value":"bia"},{"type":"literal","value":"bid_landscape"},{"type":"literal","value":"bid_landscape_disabled"},{"type":"literal","value":"bigtop_updates"},{"type":"literal","value":"bike_dock"},{"type":"literal","value":"bike_lane"},{"type":"literal","value":"bike_scooter"},{"type":"literal","value":"biotech"},{"type":"literal","value":"blanket"},{"type":"literal","value":"blender"},{"type":"literal","value":"blind"},{"type":"literal","value":"blinds"},{"type":"literal","value":"blinds_closed"},{"type":"literal","value":"block"},{"type":"literal","value":"block_flipped"},{"type":"literal","value":"blood_pressure"},{"type":"literal","value":"bloodtype"},{"type":"literal","value":"bluetooth"},{"type":"literal","value":"bluetooth_audio"},{"type":"literal","value":"bluetooth_connected"},{"type":"literal","value":"bluetooth_disabled"},{"type":"literal","value":"bluetooth_drive"},{"type":"literal","value":"bluetooth_searching"},{"type":"literal","value":"blur_circular"},{"type":"literal","value":"blur_linear"},{"type":"literal","value":"blur_medium"},{"type":"literal","value":"blur_off"},{"type":"literal","value":"blur_on"},{"type":"literal","value":"blur_short"},{"type":"literal","value":"boat_bus"},{"type":"literal","value":"boat_railway"},{"type":"literal","value":"body_fat"},{"type":"literal","value":"body_system"},{"type":"literal","value":"bomb"},{"type":"literal","value":"book_2"},{"type":"literal","value":"book_3"},{"type":"literal","value":"book_4"},{"type":"literal","value":"book_5"},{"type":"literal","value":"book_6"},{"type":"literal","value":"book_online"},{"type":"literal","value":"book_ribbon"},{"type":"literal","value":"bookmark_add"},{"type":"literal","value":"bookmark_added"},{"type":"literal","value":"bookmark_bag"},{"type":"literal","value":"bookmark_border"},{"type":"literal","value":"bookmark_check"},{"type":"literal","value":"bookmark_flag"},{"type":"literal","value":"bookmark_heart"},{"type":"literal","value":"bookmark_manager"},{"type":"literal","value":"bookmark_remove"},{"type":"literal","value":"bookmark_star"},{"type":"literal","value":"books_movies_and_music"},{"type":"literal","value":"border_all"},{"type":"literal","value":"border_bottom"},{"type":"literal","value":"border_clear"},{"type":"literal","value":"border_color"},{"type":"literal","value":"border_horizontal"},{"type":"literal","value":"border_inner"},{"type":"literal","value":"border_left"},{"type":"literal","value":"border_outer"},{"type":"literal","value":"border_right"},{"type":"literal","value":"border_style"},{"type":"literal","value":"border_top"},{"type":"literal","value":"border_vertical"},{"type":"literal","value":"borg"},{"type":"literal","value":"bottom_app_bar"},{"type":"literal","value":"bottom_drawer"},{"type":"literal","value":"bottom_navigation"},{"type":"literal","value":"bottom_panel_close"},{"type":"literal","value":"bottom_panel_open"},{"type":"literal","value":"bottom_right_click"},{"type":"literal","value":"bottom_sheets"},{"type":"literal","value":"box"},{"type":"literal","value":"box_add"},{"type":"literal","value":"box_edit"},{"type":"literal","value":"boy"},{"type":"literal","value":"brand_awareness"},{"type":"literal","value":"brand_family"},{"type":"literal","value":"branding_watermark"},{"type":"literal","value":"breakfast_dining"},{"type":"literal","value":"breaking_news"},{"type":"literal","value":"breaking_news_alt_1"},{"type":"literal","value":"breastfeeding"},{"type":"literal","value":"brick"},{"type":"literal","value":"briefcase_meal"},{"type":"literal","value":"brightness_1"},{"type":"literal","value":"brightness_2"},{"type":"literal","value":"brightness_3"},{"type":"literal","value":"brightness_4"},{"type":"literal","value":"brightness_5"},{"type":"literal","value":"brightness_6"},{"type":"literal","value":"brightness_7"},{"type":"literal","value":"brightness_alert"},{"type":"literal","value":"brightness_auto"},{"type":"literal","value":"brightness_empty"},{"type":"literal","value":"brightness_high"},{"type":"literal","value":"brightness_low"},{"type":"literal","value":"brightness_medium"},{"type":"literal","value":"bring_your_own_ip"},{"type":"literal","value":"broadcast_on_home"},{"type":"literal","value":"broadcast_on_personal"},{"type":"literal","value":"broken_image"},{"type":"literal","value":"browse"},{"type":"literal","value":"browse_activity"},{"type":"literal","value":"browse_gallery"},{"type":"literal","value":"browser_not_supported"},{"type":"literal","value":"browser_updated"},{"type":"literal","value":"brunch_dining"},{"type":"literal","value":"brush"},{"type":"literal","value":"bubble_chart"},{"type":"literal","value":"bubbles"},{"type":"literal","value":"bucket_check"},{"type":"literal","value":"bug_report"},{"type":"literal","value":"build"},{"type":"literal","value":"build_circle"},{"type":"literal","value":"bungalow"},{"type":"literal","value":"burst_mode"},{"type":"literal","value":"bus_alert"},{"type":"literal","value":"bus_railway"},{"type":"literal","value":"business"},{"type":"literal","value":"business_center"},{"type":"literal","value":"business_chip"},{"type":"literal","value":"business_messages"},{"type":"literal","value":"buttons_alt"},{"type":"literal","value":"cabin"},{"type":"literal","value":"cable"},{"type":"literal","value":"cable_car"},{"type":"literal","value":"cached"},{"type":"literal","value":"cadence"},{"type":"literal","value":"cake"},{"type":"literal","value":"cake_add"},{"type":"literal","value":"calculate"},{"type":"literal","value":"calendar_add_on"},{"type":"literal","value":"calendar_apps_script"},{"type":"literal","value":"calendar_check"},{"type":"literal","value":"calendar_clock"},{"type":"literal","value":"calendar_lock"},{"type":"literal","value":"calendar_meal"},{"type":"literal","value":"calendar_meal_2"},{"type":"literal","value":"calendar_month"},{"type":"literal","value":"calendar_today"},{"type":"literal","value":"calendar_view_day"},{"type":"literal","value":"calendar_view_month"},{"type":"literal","value":"calendar_view_week"},{"type":"literal","value":"call_end"},{"type":"literal","value":"call_log"},{"type":"literal","value":"call_made"},{"type":"literal","value":"call_merge"},{"type":"literal","value":"call_missed"},{"type":"literal","value":"call_missed_outgoing"},{"type":"literal","value":"call_quality"},{"type":"literal","value":"call_received"},{"type":"literal","value":"call_split"},{"type":"literal","value":"call_to_action"},{"type":"literal","value":"camera_alt"},{"type":"literal","value":"camera_enhance"},{"type":"literal","value":"camera_front"},{"type":"literal","value":"camera_indoor"},{"type":"literal","value":"camera_outdoor"},{"type":"literal","value":"camera_rear"},{"type":"literal","value":"camera_roll"},{"type":"literal","value":"camera_video"},{"type":"literal","value":"cameraswitch"},{"type":"literal","value":"campaign"},{"type":"literal","value":"camping"},{"type":"literal","value":"cancel_presentation"},{"type":"literal","value":"cancel_schedule_send"},{"type":"literal","value":"candle"},{"type":"literal","value":"candlestick_chart"},{"type":"literal","value":"cannabis"},{"type":"literal","value":"captive_portal"},{"type":"literal","value":"capture"},{"type":"literal","value":"car_crash"},{"type":"literal","value":"car_defrost_left"},{"type":"literal","value":"car_defrost_low_left"},{"type":"literal","value":"car_defrost_low_right"},{"type":"literal","value":"car_defrost_mid_left"},{"type":"literal","value":"car_defrost_mid_low_left"},{"type":"literal","value":"car_defrost_mid_low_right"},{"type":"literal","value":"car_defrost_mid_right"},{"type":"literal","value":"car_defrost_right"},{"type":"literal","value":"car_fan_low_left"},{"type":"literal","value":"car_fan_low_mid_left"},{"type":"literal","value":"car_fan_low_right"},{"type":"literal","value":"car_fan_mid_left"},{"type":"literal","value":"car_fan_mid_low_right"},{"type":"literal","value":"car_fan_mid_right"},{"type":"literal","value":"car_fan_recirculate"},{"type":"literal","value":"car_gear"},{"type":"literal","value":"car_lock"},{"type":"literal","value":"car_mirror_heat"},{"type":"literal","value":"car_rental"},{"type":"literal","value":"car_repair"},{"type":"literal","value":"car_tag"},{"type":"literal","value":"card_giftcard"},{"type":"literal","value":"card_membership"},{"type":"literal","value":"card_travel"},{"type":"literal","value":"cardio_load"},{"type":"literal","value":"cardiology"},{"type":"literal","value":"cards"},{"type":"literal","value":"cards_star"},{"type":"literal","value":"carpenter"},{"type":"literal","value":"carry_on_bag"},{"type":"literal","value":"carry_on_bag_checked"},{"type":"literal","value":"carry_on_bag_inactive"},{"type":"literal","value":"carry_on_bag_question"},{"type":"literal","value":"cases"},{"type":"literal","value":"casino"},{"type":"literal","value":"cast"},{"type":"literal","value":"cast_connected"},{"type":"literal","value":"cast_for_education"},{"type":"literal","value":"cast_pause"},{"type":"literal","value":"cast_warning"},{"type":"literal","value":"castle"},{"type":"literal","value":"catching_pokemon"},{"type":"literal","value":"category"},{"type":"literal","value":"category_search"},{"type":"literal","value":"celebration"},{"type":"literal","value":"cell_merge"},{"type":"literal","value":"cell_tower"},{"type":"literal","value":"cell_wifi"},{"type":"literal","value":"center_focus_strong"},{"type":"literal","value":"center_focus_weak"},{"type":"literal","value":"chair_alt"},{"type":"literal","value":"chair_counter"},{"type":"literal","value":"chair_fireplace"},{"type":"literal","value":"chair_umbrella"},{"type":"literal","value":"chalet"},{"type":"literal","value":"change_circle"},{"type":"literal","value":"change_history"},{"type":"literal","value":"charger"},{"type":"literal","value":"charging_station"},{"type":"literal","value":"chart_data"},{"type":"literal","value":"chat"},{"type":"literal","value":"chat_add_on"},{"type":"literal","value":"chat_apps_script"},{"type":"literal","value":"chat_bubble"},{"type":"literal","value":"chat_bubble_outline"},{"type":"literal","value":"chat_error"},{"type":"literal","value":"chat_info"},{"type":"literal","value":"chat_paste_go"},{"type":"literal","value":"chat_paste_go_2"},{"type":"literal","value":"check"},{"type":"literal","value":"check_box"},{"type":"literal","value":"check_box_outline_blank"},{"type":"literal","value":"check_circle"},{"type":"literal","value":"check_circle_outline"},{"type":"literal","value":"check_circle_unread"},{"type":"literal","value":"check_in_out"},{"type":"literal","value":"check_indeterminate_small"},{"type":"literal","value":"check_small"},{"type":"literal","value":"checkbook"},{"type":"literal","value":"checked_bag"},{"type":"literal","value":"checked_bag_question"},{"type":"literal","value":"checklist_rtl"},{"type":"literal","value":"checkroom"},{"type":"literal","value":"cheer"},{"type":"literal","value":"chef_hat"},{"type":"literal","value":"chess"},{"type":"literal","value":"chess_bishop"},{"type":"literal","value":"chess_bishop_2"},{"type":"literal","value":"chess_king"},{"type":"literal","value":"chess_king_2"},{"type":"literal","value":"chess_knight"},{"type":"literal","value":"chess_pawn"},{"type":"literal","value":"chess_pawn_2"},{"type":"literal","value":"chess_queen"},{"type":"literal","value":"chess_rook"},{"type":"literal","value":"chevron_backward"},{"type":"literal","value":"chevron_forward"},{"type":"literal","value":"chevron_left"},{"type":"literal","value":"chevron_right"},{"type":"literal","value":"child_care"},{"type":"literal","value":"child_friendly"},{"type":"literal","value":"child_hat"},{"type":"literal","value":"chip_extraction"},{"type":"literal","value":"chips"},{"type":"literal","value":"chrome_reader_mode"},{"type":"literal","value":"chromecast_2"},{"type":"literal","value":"chromecast_device"},{"type":"literal","value":"chronic"},{"type":"literal","value":"church"},{"type":"literal","value":"cinematic_blur"},{"type":"literal","value":"circle_notifications"},{"type":"literal","value":"circles"},{"type":"literal","value":"circles_ext"},{"type":"literal","value":"clarify"},{"type":"literal","value":"class"},{"type":"literal","value":"clean_hands"},{"type":"literal","value":"cleaning"},{"type":"literal","value":"cleaning_bucket"},{"type":"literal","value":"cleaning_services"},{"type":"literal","value":"clear_all"},{"type":"literal","value":"clear_day"},{"type":"literal","value":"climate_mini_split"},{"type":"literal","value":"clinical_notes"},{"type":"literal","value":"clock_arrow_down"},{"type":"literal","value":"clock_arrow_up"},{"type":"literal","value":"clock_loader_10"},{"type":"literal","value":"clock_loader_20"},{"type":"literal","value":"clock_loader_40"},{"type":"literal","value":"clock_loader_60"},{"type":"literal","value":"clock_loader_80"},{"type":"literal","value":"clock_loader_90"},{"type":"literal","value":"close_fullscreen"},{"type":"literal","value":"close_small"},{"type":"literal","value":"closed_caption"},{"type":"literal","value":"closed_caption_add"},{"type":"literal","value":"closed_caption_disabled"},{"type":"literal","value":"closed_caption_off"},{"type":"literal","value":"cloud_alert"},{"type":"literal","value":"cloud_circle"},{"type":"literal","value":"cloud_done"},{"type":"literal","value":"cloud_download"},{"type":"literal","value":"cloud_lock"},{"type":"literal","value":"cloud_off"},{"type":"literal","value":"cloud_queue"},{"type":"literal","value":"cloud_sync"},{"type":"literal","value":"cloud_upload"},{"type":"literal","value":"cloudy_snowing"},{"type":"literal","value":"co2"},{"type":"literal","value":"co_present"},{"type":"literal","value":"code_blocks"},{"type":"literal","value":"code_off"},{"type":"literal","value":"coffee"},{"type":"literal","value":"coffee_maker"},{"type":"literal","value":"cognition"},{"type":"literal","value":"cognition_2"},{"type":"literal","value":"collapse_all"},{"type":"literal","value":"collapse_content"},{"type":"literal","value":"collections"},{"type":"literal","value":"collections_bookmark"},{"type":"literal","value":"color_lens"},{"type":"literal","value":"colorize"},{"type":"literal","value":"combine_columns"},{"type":"literal","value":"comedy_mask"},{"type":"literal","value":"comic_bubble"},{"type":"literal","value":"comment"},{"type":"literal","value":"comment_bank"},{"type":"literal","value":"comments_disabled"},{"type":"literal","value":"commit"},{"type":"literal","value":"communication"},{"type":"literal","value":"communities"},{"type":"literal","value":"commute"},{"type":"literal","value":"compare"},{"type":"literal","value":"compare_arrows"},{"type":"literal","value":"compass_calibration"},{"type":"literal","value":"component_exchange"},{"type":"literal","value":"compost"},{"type":"literal","value":"compress"},{"type":"literal","value":"computer"},{"type":"literal","value":"computer_arrow_up"},{"type":"literal","value":"computer_cancel"},{"type":"literal","value":"concierge"},{"type":"literal","value":"conditions"},{"type":"literal","value":"confirmation_number"},{"type":"literal","value":"congenital"},{"type":"literal","value":"connect_without_contact"},{"type":"literal","value":"connected_tv"},{"type":"literal","value":"connecting_airports"},{"type":"literal","value":"construction"},{"type":"literal","value":"contact_emergency"},{"type":"literal","value":"contact_mail"},{"type":"literal","value":"contact_page"},{"type":"literal","value":"contact_phone"},{"type":"literal","value":"contact_support"},{"type":"literal","value":"contactless"},{"type":"literal","value":"contactless_off"},{"type":"literal","value":"contacts_product"},{"type":"literal","value":"content_copy"},{"type":"literal","value":"content_cut"},{"type":"literal","value":"content_paste"},{"type":"literal","value":"content_paste_go"},{"type":"literal","value":"content_paste_off"},{"type":"literal","value":"content_paste_search"},{"type":"literal","value":"contextual_token"},{"type":"literal","value":"contextual_token_add"},{"type":"literal","value":"contract"},{"type":"literal","value":"contract_delete"},{"type":"literal","value":"contract_edit"},{"type":"literal","value":"contrast_circle"},{"type":"literal","value":"contrast_rtl_off"},{"type":"literal","value":"contrast_square"},{"type":"literal","value":"control_camera"},{"type":"literal","value":"control_point"},{"type":"literal","value":"control_point_duplicate"},{"type":"literal","value":"controller_gen"},{"type":"literal","value":"conversation"},{"type":"literal","value":"conversion_path"},{"type":"literal","value":"conversion_path_off"},{"type":"literal","value":"convert_to_text"},{"type":"literal","value":"conveyor_belt"},{"type":"literal","value":"cookie"},{"type":"literal","value":"cookie_off"},{"type":"literal","value":"cooking"},{"type":"literal","value":"cool_to_dry"},{"type":"literal","value":"copy_all"},{"type":"literal","value":"copyright"},{"type":"literal","value":"coronavirus"},{"type":"literal","value":"corporate_fare"},{"type":"literal","value":"cottage"},{"type":"literal","value":"counter_0"},{"type":"literal","value":"counter_1"},{"type":"literal","value":"counter_2"},{"type":"literal","value":"counter_3"},{"type":"literal","value":"counter_4"},{"type":"literal","value":"counter_5"},{"type":"literal","value":"counter_6"},{"type":"literal","value":"counter_7"},{"type":"literal","value":"counter_8"},{"type":"literal","value":"counter_9"},{"type":"literal","value":"countertops"},{"type":"literal","value":"create_new_folder"},{"type":"literal","value":"credit_card"},{"type":"literal","value":"credit_card_clock"},{"type":"literal","value":"credit_card_gear"},{"type":"literal","value":"credit_card_heart"},{"type":"literal","value":"credit_card_off"},{"type":"literal","value":"credit_score"},{"type":"literal","value":"crib"},{"type":"literal","value":"crisis_alert"},{"type":"literal","value":"crop_16_9"},{"type":"literal","value":"crop_3_2"},{"type":"literal","value":"crop_5_4"},{"type":"literal","value":"crop_7_5"},{"type":"literal","value":"crop_9_16"},{"type":"literal","value":"crop_din"},{"type":"literal","value":"crop_free"},{"type":"literal","value":"crop_landscape"},{"type":"literal","value":"crop_original"},{"type":"literal","value":"crop_portrait"},{"type":"literal","value":"crop_rotate"},{"type":"literal","value":"crop_square"},{"type":"literal","value":"crossword"},{"type":"literal","value":"crowdsource"},{"type":"literal","value":"cruelty_free"},{"type":"literal","value":"css"},{"type":"literal","value":"csv"},{"type":"literal","value":"currency_bitcoin"},{"type":"literal","value":"currency_exchange"},{"type":"literal","value":"currency_franc"},{"type":"literal","value":"currency_lira"},{"type":"literal","value":"currency_pound"},{"type":"literal","value":"currency_ruble"},{"type":"literal","value":"currency_rupee"},{"type":"literal","value":"currency_rupee_circle"},{"type":"literal","value":"currency_yen"},{"type":"literal","value":"currency_yuan"},{"type":"literal","value":"curtains"},{"type":"literal","value":"curtains_closed"},{"type":"literal","value":"custom_typography"},{"type":"literal","value":"cycle"},{"type":"literal","value":"cyclone"},{"type":"literal","value":"dangerous"},{"type":"literal","value":"dark_mode"},{"type":"literal","value":"dashboard"},{"type":"literal","value":"dashboard_2"},{"type":"literal","value":"dashboard_customize"},{"type":"literal","value":"data_alert"},{"type":"literal","value":"data_array"},{"type":"literal","value":"data_check"},{"type":"literal","value":"data_exploration"},{"type":"literal","value":"data_info_alert"},{"type":"literal","value":"data_loss_prevention"},{"type":"literal","value":"data_object"},{"type":"literal","value":"data_saver_off"},{"type":"literal","value":"data_saver_on"},{"type":"literal","value":"data_table"},{"type":"literal","value":"data_thresholding"},{"type":"literal","value":"data_usage"},{"type":"literal","value":"database"},{"type":"literal","value":"database_off"},{"type":"literal","value":"database_search"},{"type":"literal","value":"database_upload"},{"type":"literal","value":"dataset"},{"type":"literal","value":"dataset_linked"},{"type":"literal","value":"date_range"},{"type":"literal","value":"deblur"},{"type":"literal","value":"deceased"},{"type":"literal","value":"decimal_decrease"},{"type":"literal","value":"decimal_increase"},{"type":"literal","value":"deck"},{"type":"literal","value":"dehaze"},{"type":"literal","value":"delete"},{"type":"literal","value":"delete_forever"},{"type":"literal","value":"delete_history"},{"type":"literal","value":"delete_outline"},{"type":"literal","value":"delete_sweep"},{"type":"literal","value":"delivery_dining"},{"type":"literal","value":"delivery_truck_bolt"},{"type":"literal","value":"delivery_truck_speed"},{"type":"literal","value":"demography"},{"type":"literal","value":"density_large"},{"type":"literal","value":"density_medium"},{"type":"literal","value":"density_small"},{"type":"literal","value":"dentistry"},{"type":"literal","value":"departure_board"},{"type":"literal","value":"deployed_code"},{"type":"literal","value":"deployed_code_account"},{"type":"literal","value":"deployed_code_alert"},{"type":"literal","value":"deployed_code_history"},{"type":"literal","value":"deployed_code_update"},{"type":"literal","value":"dermatology"},{"type":"literal","value":"deselect"},{"type":"literal","value":"design_services"},{"type":"literal","value":"desk"},{"type":"literal","value":"deskphone"},{"type":"literal","value":"desktop_access_disabled"},{"type":"literal","value":"desktop_cloud"},{"type":"literal","value":"desktop_cloud_stack"},{"type":"literal","value":"desktop_landscape"},{"type":"literal","value":"desktop_landscape_add"},{"type":"literal","value":"desktop_mac"},{"type":"literal","value":"desktop_portrait"},{"type":"literal","value":"desktop_windows"},{"type":"literal","value":"destruction"},{"type":"literal","value":"detection_and_zone"},{"type":"literal","value":"detector"},{"type":"literal","value":"detector_alarm"},{"type":"literal","value":"detector_battery"},{"type":"literal","value":"detector_co"},{"type":"literal","value":"detector_offline"},{"type":"literal","value":"detector_smoke"},{"type":"literal","value":"detector_status"},{"type":"literal","value":"developer_board"},{"type":"literal","value":"developer_board_off"},{"type":"literal","value":"developer_guide"},{"type":"literal","value":"developer_mode"},{"type":"literal","value":"developer_mode_tv"},{"type":"literal","value":"device_band"},{"type":"literal","value":"device_hub"},{"type":"literal","value":"device_thermostat"},{"type":"literal","value":"device_unknown"},{"type":"literal","value":"devices"},{"type":"literal","value":"devices_fold"},{"type":"literal","value":"devices_fold_2"},{"type":"literal","value":"devices_off"},{"type":"literal","value":"devices_other"},{"type":"literal","value":"devices_wearables"},{"type":"literal","value":"dew_point"},{"type":"literal","value":"diagnosis"},{"type":"literal","value":"diagonal_line"},{"type":"literal","value":"dialer_sip"},{"type":"literal","value":"dialogs"},{"type":"literal","value":"dialpad"},{"type":"literal","value":"diamond_shine"},{"type":"literal","value":"dictionary"},{"type":"literal","value":"digital_out_of_home"},{"type":"literal","value":"digital_wellbeing"},{"type":"literal","value":"dine_heart"},{"type":"literal","value":"dine_in"},{"type":"literal","value":"dine_lamp"},{"type":"literal","value":"dining"},{"type":"literal","value":"dinner_dining"},{"type":"literal","value":"directions"},{"type":"literal","value":"directions_alt"},{"type":"literal","value":"directions_alt_off"},{"type":"literal","value":"directions_bike"},{"type":"literal","value":"directions_boat"},{"type":"literal","value":"directions_boat_filled"},{"type":"literal","value":"directions_bus"},{"type":"literal","value":"directions_bus_filled"},{"type":"literal","value":"directions_car"},{"type":"literal","value":"directions_car_filled"},{"type":"literal","value":"directions_off"},{"type":"literal","value":"directions_railway"},{"type":"literal","value":"directions_railway_2"},{"type":"literal","value":"directions_railway_filled"},{"type":"literal","value":"directions_run"},{"type":"literal","value":"directions_subway"},{"type":"literal","value":"directions_subway_filled"},{"type":"literal","value":"directions_transit"},{"type":"literal","value":"directions_transit_filled"},{"type":"literal","value":"directions_walk"},{"type":"literal","value":"directory_sync"},{"type":"literal","value":"dirty_lens"},{"type":"literal","value":"disabled_by_default"},{"type":"literal","value":"disabled_visible"},{"type":"literal","value":"disc_full"},{"type":"literal","value":"discount"},{"type":"literal","value":"discover_tune"},{"type":"literal","value":"dishwasher_gen"},{"type":"literal","value":"display_external_input"},{"type":"literal","value":"display_settings"},{"type":"literal","value":"distance"},{"type":"literal","value":"diversity_1"},{"type":"literal","value":"diversity_2"},{"type":"literal","value":"diversity_3"},{"type":"literal","value":"diversity_4"},{"type":"literal","value":"dns"},{"type":"literal","value":"do_disturb"},{"type":"literal","value":"do_disturb_alt"},{"type":"literal","value":"do_disturb_off"},{"type":"literal","value":"do_disturb_on"},{"type":"literal","value":"do_not_disturb"},{"type":"literal","value":"do_not_disturb_alt"},{"type":"literal","value":"do_not_disturb_off"},{"type":"literal","value":"do_not_disturb_on"},{"type":"literal","value":"do_not_disturb_on_total_silence"},{"type":"literal","value":"do_not_step"},{"type":"literal","value":"do_not_touch"},{"type":"literal","value":"dock"},{"type":"literal","value":"dock_to_bottom"},{"type":"literal","value":"dock_to_left"},{"type":"literal","value":"dock_to_right"},{"type":"literal","value":"docs"},{"type":"literal","value":"docs_add_on"},{"type":"literal","value":"docs_apps_script"},{"type":"literal","value":"document_scanner"},{"type":"literal","value":"document_search"},{"type":"literal","value":"domain"},{"type":"literal","value":"domain_add"},{"type":"literal","value":"domain_disabled"},{"type":"literal","value":"domain_verification"},{"type":"literal","value":"domain_verification_off"},{"type":"literal","value":"domino_mask"},{"type":"literal","value":"done_all"},{"type":"literal","value":"done_outline"},{"type":"literal","value":"donut_large"},{"type":"literal","value":"donut_small"},{"type":"literal","value":"door_back"},{"type":"literal","value":"door_front"},{"type":"literal","value":"door_open"},{"type":"literal","value":"door_sensor"},{"type":"literal","value":"door_sliding"},{"type":"literal","value":"doorbell"},{"type":"literal","value":"doorbell_3p"},{"type":"literal","value":"doorbell_chime"},{"type":"literal","value":"double_arrow"},{"type":"literal","value":"downhill_skiing"},{"type":"literal","value":"download_2"},{"type":"literal","value":"download_done"},{"type":"literal","value":"download_for_offline"},{"type":"literal","value":"downloading"},{"type":"literal","value":"draft"},{"type":"literal","value":"draft_orders"},{"type":"literal","value":"drafts"},{"type":"literal","value":"drag_click"},{"type":"literal","value":"drag_handle"},{"type":"literal","value":"drag_indicator"},{"type":"literal","value":"drag_pan"},{"type":"literal","value":"draw"},{"type":"literal","value":"draw_abstract"},{"type":"literal","value":"draw_collage"},{"type":"literal","value":"dresser"},{"type":"literal","value":"drive_eta"},{"type":"literal","value":"drive_export"},{"type":"literal","value":"drive_file_move"},{"type":"literal","value":"drive_file_move_outline"},{"type":"literal","value":"drive_file_move_rtl"},{"type":"literal","value":"drive_file_rename_outline"},{"type":"literal","value":"drive_folder_upload"},{"type":"literal","value":"drone_2"},{"type":"literal","value":"dropdown"},{"type":"literal","value":"dropper_eye"},{"type":"literal","value":"dry"},{"type":"literal","value":"dry_cleaning"},{"type":"literal","value":"dual_screen"},{"type":"literal","value":"duo"},{"type":"literal","value":"dvr"},{"type":"literal","value":"dynamic_feed"},{"type":"literal","value":"dynamic_form"},{"type":"literal","value":"e911_avatar"},{"type":"literal","value":"e911_emergency"},{"type":"literal","value":"e_mobiledata"},{"type":"literal","value":"e_mobiledata_badge"},{"type":"literal","value":"ear_sound"},{"type":"literal","value":"earbud_case"},{"type":"literal","value":"earbud_left"},{"type":"literal","value":"earbud_right"},{"type":"literal","value":"earbuds_2"},{"type":"literal","value":"earbuds_battery"},{"type":"literal","value":"early_on"},{"type":"literal","value":"earthquake"},{"type":"literal","value":"east"},{"type":"literal","value":"ecg"},{"type":"literal","value":"ecg_heart"},{"type":"literal","value":"eco"},{"type":"literal","value":"eda"},{"type":"literal","value":"edgesensor_high"},{"type":"literal","value":"edgesensor_low"},{"type":"literal","value":"edit"},{"type":"literal","value":"edit_arrow_down"},{"type":"literal","value":"edit_arrow_up"},{"type":"literal","value":"edit_attributes"},{"type":"literal","value":"edit_audio"},{"type":"literal","value":"edit_calendar"},{"type":"literal","value":"edit_document"},{"type":"literal","value":"edit_location"},{"type":"literal","value":"edit_location_alt"},{"type":"literal","value":"edit_note"},{"type":"literal","value":"edit_notifications"},{"type":"literal","value":"edit_off"},{"type":"literal","value":"edit_road"},{"type":"literal","value":"edit_square"},{"type":"literal","value":"editor_choice"},{"type":"literal","value":"egg"},{"type":"literal","value":"egg_alt"},{"type":"literal","value":"elderly"},{"type":"literal","value":"elderly_woman"},{"type":"literal","value":"electric_bike"},{"type":"literal","value":"electric_bolt"},{"type":"literal","value":"electric_car"},{"type":"literal","value":"electric_meter"},{"type":"literal","value":"electric_moped"},{"type":"literal","value":"electric_rickshaw"},{"type":"literal","value":"electric_scooter"},{"type":"literal","value":"electrical_services"},{"type":"literal","value":"elevator"},{"type":"literal","value":"emergency"},{"type":"literal","value":"emergency_heat"},{"type":"literal","value":"emergency_heat_2"},{"type":"literal","value":"emergency_home"},{"type":"literal","value":"emergency_recording"},{"type":"literal","value":"emergency_share"},{"type":"literal","value":"emergency_share_off"},{"type":"literal","value":"emoji_emotions"},{"type":"literal","value":"emoji_events"},{"type":"literal","value":"emoji_food_beverage"},{"type":"literal","value":"emoji_language"},{"type":"literal","value":"emoji_nature"},{"type":"literal","value":"emoji_objects"},{"type":"literal","value":"emoji_people"},{"type":"literal","value":"emoji_symbols"},{"type":"literal","value":"emoji_transportation"},{"type":"literal","value":"emoticon"},{"type":"literal","value":"empty_dashboard"},{"type":"literal","value":"enable"},{"type":"literal","value":"encrypted"},{"type":"literal","value":"encrypted_add"},{"type":"literal","value":"encrypted_add_circle"},{"type":"literal","value":"encrypted_minus_circle"},{"type":"literal","value":"encrypted_off"},{"type":"literal","value":"endocrinology"},{"type":"literal","value":"energy"},{"type":"literal","value":"energy_program_saving"},{"type":"literal","value":"energy_program_time_used"},{"type":"literal","value":"energy_savings_leaf"},{"type":"literal","value":"engineering"},{"type":"literal","value":"enhanced_encryption"},{"type":"literal","value":"ent"},{"type":"literal","value":"enterprise"},{"type":"literal","value":"enterprise_off"},{"type":"literal","value":"equalizer"},{"type":"literal","value":"eraser_size_1"},{"type":"literal","value":"eraser_size_2"},{"type":"literal","value":"eraser_size_3"},{"type":"literal","value":"eraser_size_4"},{"type":"literal","value":"eraser_size_5"},{"type":"literal","value":"error_med"},{"type":"literal","value":"error_outline"},{"type":"literal","value":"escalator"},{"type":"literal","value":"escalator_warning"},{"type":"literal","value":"euro"},{"type":"literal","value":"euro_symbol"},{"type":"literal","value":"ev_mobiledata_badge"},{"type":"literal","value":"ev_shadow"},{"type":"literal","value":"ev_shadow_add"},{"type":"literal","value":"ev_shadow_minus"},{"type":"literal","value":"ev_station"},{"type":"literal","value":"event_available"},{"type":"literal","value":"event_busy"},{"type":"literal","value":"event_list"},{"type":"literal","value":"event_note"},{"type":"literal","value":"event_repeat"},{"type":"literal","value":"event_seat"},{"type":"literal","value":"event_upcoming"},{"type":"literal","value":"exclamation"},{"type":"literal","value":"exercise"},{"type":"literal","value":"exit_to_app"},{"type":"literal","value":"expand_all"},{"type":"literal","value":"expand_circle_down"},{"type":"literal","value":"expand_circle_right"},{"type":"literal","value":"expand_circle_up"},{"type":"literal","value":"expand_content"},{"type":"literal","value":"expand_less"},{"type":"literal","value":"expand_more"},{"type":"literal","value":"expansion_panels"},{"type":"literal","value":"experiment"},{"type":"literal","value":"explicit"},{"type":"literal","value":"explore"},{"type":"literal","value":"explore_nearby"},{"type":"literal","value":"explore_off"},{"type":"literal","value":"explosion"},{"type":"literal","value":"export_notes"},{"type":"literal","value":"exposure"},{"type":"literal","value":"exposure_neg_1"},{"type":"literal","value":"exposure_neg_2"},{"type":"literal","value":"exposure_plus_1"},{"type":"literal","value":"exposure_plus_2"},{"type":"literal","value":"exposure_zero"},{"type":"literal","value":"extension"},{"type":"literal","value":"extension_off"},{"type":"literal","value":"eye_tracking"},{"type":"literal","value":"eyeglasses_2"},{"type":"literal","value":"eyeglasses_2_sound"},{"type":"literal","value":"face"},{"type":"literal","value":"face_2"},{"type":"literal","value":"face_3"},{"type":"literal","value":"face_4"},{"type":"literal","value":"face_5"},{"type":"literal","value":"face_6"},{"type":"literal","value":"face_down"},{"type":"literal","value":"face_left"},{"type":"literal","value":"face_nod"},{"type":"literal","value":"face_retouching_natural"},{"type":"literal","value":"face_retouching_off"},{"type":"literal","value":"face_right"},{"type":"literal","value":"face_shake"},{"type":"literal","value":"face_unlock"},{"type":"literal","value":"face_up"},{"type":"literal","value":"fact_check"},{"type":"literal","value":"factory"},{"type":"literal","value":"falling"},{"type":"literal","value":"familiar_face_and_zone"},{"type":"literal","value":"family_group"},{"type":"literal","value":"family_history"},{"type":"literal","value":"family_home"},{"type":"literal","value":"family_link"},{"type":"literal","value":"family_restroom"},{"type":"literal","value":"family_star"},{"type":"literal","value":"fan_focus"},{"type":"literal","value":"fan_indirect"},{"type":"literal","value":"farsight_digital"},{"type":"literal","value":"fast_forward"},{"type":"literal","value":"fast_rewind"},{"type":"literal","value":"fastfood"},{"type":"literal","value":"faucet"},{"type":"literal","value":"favorite"},{"type":"literal","value":"favorite_border"},{"type":"literal","value":"fax"},{"type":"literal","value":"feature_search"},{"type":"literal","value":"featured_play_list"},{"type":"literal","value":"featured_seasonal_and_gifts"},{"type":"literal","value":"featured_video"},{"type":"literal","value":"feedback"},{"type":"literal","value":"female"},{"type":"literal","value":"femur"},{"type":"literal","value":"femur_alt"},{"type":"literal","value":"fence"},{"type":"literal","value":"fertile"},{"type":"literal","value":"festival"},{"type":"literal","value":"fiber_dvr"},{"type":"literal","value":"fiber_manual_record"},{"type":"literal","value":"fiber_new"},{"type":"literal","value":"fiber_pin"},{"type":"literal","value":"fiber_smart_record"},{"type":"literal","value":"file_copy"},{"type":"literal","value":"file_copy_off"},{"type":"literal","value":"file_download"},{"type":"literal","value":"file_download_done"},{"type":"literal","value":"file_download_off"},{"type":"literal","value":"file_export"},{"type":"literal","value":"file_json"},{"type":"literal","value":"file_map"},{"type":"literal","value":"file_map_stack"},{"type":"literal","value":"file_open"},{"type":"literal","value":"file_png"},{"type":"literal","value":"file_present"},{"type":"literal","value":"file_save"},{"type":"literal","value":"file_save_off"},{"type":"literal","value":"file_upload"},{"type":"literal","value":"file_upload_off"},{"type":"literal","value":"files"},{"type":"literal","value":"filter_1"},{"type":"literal","value":"filter_2"},{"type":"literal","value":"filter_3"},{"type":"literal","value":"filter_4"},{"type":"literal","value":"filter_5"},{"type":"literal","value":"filter_6"},{"type":"literal","value":"filter_7"},{"type":"literal","value":"filter_8"},{"type":"literal","value":"filter_9"},{"type":"literal","value":"filter_9_plus"},{"type":"literal","value":"filter_alt"},{"type":"literal","value":"filter_alt_off"},{"type":"literal","value":"filter_arrow_right"},{"type":"literal","value":"filter_b_and_w"},{"type":"literal","value":"filter_center_focus"},{"type":"literal","value":"filter_drama"},{"type":"literal","value":"filter_frames"},{"type":"literal","value":"filter_hdr"},{"type":"literal","value":"filter_list"},{"type":"literal","value":"filter_list_alt"},{"type":"literal","value":"filter_list_off"},{"type":"literal","value":"filter_none"},{"type":"literal","value":"filter_retrolux"},{"type":"literal","value":"filter_tilt_shift"},{"type":"literal","value":"filter_vintage"},{"type":"literal","value":"finance"},{"type":"literal","value":"finance_chip"},{"type":"literal","value":"finance_mode"},{"type":"literal","value":"find_in_page"},{"type":"literal","value":"find_replace"},{"type":"literal","value":"fingerprint"},{"type":"literal","value":"fingerprint_off"},{"type":"literal","value":"fire_extinguisher"},{"type":"literal","value":"fire_hydrant"},{"type":"literal","value":"fire_hydrant_alt"},{"type":"literal","value":"fire_truck"},{"type":"literal","value":"first_page"},{"type":"literal","value":"fit_page"},{"type":"literal","value":"fit_page_height"},{"type":"literal","value":"fit_page_width"},{"type":"literal","value":"fit_screen"},{"type":"literal","value":"fit_width"},{"type":"literal","value":"fitbit"},{"type":"literal","value":"fitness_center"},{"type":"literal","value":"fitness_tracker"},{"type":"literal","value":"fitness_trackers"},{"type":"literal","value":"flag_2"},{"type":"literal","value":"flag_check"},{"type":"literal","value":"flag_circle"},{"type":"literal","value":"flaky"},{"type":"literal","value":"flare"},{"type":"literal","value":"flash_auto"},{"type":"literal","value":"flash_off"},{"type":"literal","value":"flash_on"},{"type":"literal","value":"flashlight_off"},{"type":"literal","value":"flashlight_on"},{"type":"literal","value":"flatware"},{"type":"literal","value":"flex_direction"},{"type":"literal","value":"flex_no_wrap"},{"type":"literal","value":"flex_wrap"},{"type":"literal","value":"flight"},{"type":"literal","value":"flight_class"},{"type":"literal","value":"flight_land"},{"type":"literal","value":"flight_takeoff"},{"type":"literal","value":"flights_and_hotels"},{"type":"literal","value":"flip_camera_android"},{"type":"literal","value":"flip_camera_ios"},{"type":"literal","value":"flip_to_back"},{"type":"literal","value":"flip_to_front"},{"type":"literal","value":"float_landscape_2"},{"type":"literal","value":"float_portrait_2"},{"type":"literal","value":"flood"},{"type":"literal","value":"floor"},{"type":"literal","value":"floor_lamp"},{"type":"literal","value":"flowsheet"},{"type":"literal","value":"fluid"},{"type":"literal","value":"fluid_balance"},{"type":"literal","value":"fluid_med"},{"type":"literal","value":"fluorescent"},{"type":"literal","value":"flutter"},{"type":"literal","value":"flutter_dash"},{"type":"literal","value":"flyover"},{"type":"literal","value":"fmd_bad"},{"type":"literal","value":"fmd_good"},{"type":"literal","value":"foggy"},{"type":"literal","value":"folded_hands"},{"type":"literal","value":"folder_check"},{"type":"literal","value":"folder_check_2"},{"type":"literal","value":"folder_code"},{"type":"literal","value":"folder_copy"},{"type":"literal","value":"folder_data"},{"type":"literal","value":"folder_delete"},{"type":"literal","value":"folder_eye"},{"type":"literal","value":"folder_info"},{"type":"literal","value":"folder_limited"},{"type":"literal","value":"folder_managed"},{"type":"literal","value":"folder_match"},{"type":"literal","value":"folder_off"},{"type":"literal","value":"folder_open"},{"type":"literal","value":"folder_shared"},{"type":"literal","value":"folder_special"},{"type":"literal","value":"folder_supervised"},{"type":"literal","value":"folder_zip"},{"type":"literal","value":"follow_the_signs"},{"type":"literal","value":"font_download"},{"type":"literal","value":"font_download_off"},{"type":"literal","value":"food_bank"},{"type":"literal","value":"foot_bones"},{"type":"literal","value":"footprint"},{"type":"literal","value":"for_you"},{"type":"literal","value":"forest"},{"type":"literal","value":"fork_left"},{"type":"literal","value":"fork_right"},{"type":"literal","value":"fork_spoon"},{"type":"literal","value":"forklift"},{"type":"literal","value":"format_align_center"},{"type":"literal","value":"format_align_justify"},{"type":"literal","value":"format_align_left"},{"type":"literal","value":"format_align_right"},{"type":"literal","value":"format_bold"},{"type":"literal","value":"format_clear"},{"type":"literal","value":"format_color_fill"},{"type":"literal","value":"format_color_reset"},{"type":"literal","value":"format_color_text"},{"type":"literal","value":"format_h1"},{"type":"literal","value":"format_h2"},{"type":"literal","value":"format_h3"},{"type":"literal","value":"format_h4"},{"type":"literal","value":"format_h5"},{"type":"literal","value":"format_h6"},{"type":"literal","value":"format_image_left"},{"type":"literal","value":"format_image_right"},{"type":"literal","value":"format_indent_decrease"},{"type":"literal","value":"format_indent_increase"},{"type":"literal","value":"format_ink_highlighter"},{"type":"literal","value":"format_italic"},{"type":"literal","value":"format_letter_spacing"},{"type":"literal","value":"format_letter_spacing_2"},{"type":"literal","value":"format_letter_spacing_standard"},{"type":"literal","value":"format_letter_spacing_wide"},{"type":"literal","value":"format_letter_spacing_wider"},{"type":"literal","value":"format_line_spacing"},{"type":"literal","value":"format_list_bulleted"},{"type":"literal","value":"format_list_bulleted_add"},{"type":"literal","value":"format_list_numbered"},{"type":"literal","value":"format_list_numbered_rtl"},{"type":"literal","value":"format_overline"},{"type":"literal","value":"format_paint"},{"type":"literal","value":"format_paragraph"},{"type":"literal","value":"format_quote"},{"type":"literal","value":"format_quote_off"},{"type":"literal","value":"format_shapes"},{"type":"literal","value":"format_size"},{"type":"literal","value":"format_strikethrough"},{"type":"literal","value":"format_text_clip"},{"type":"literal","value":"format_text_overflow"},{"type":"literal","value":"format_text_wrap"},{"type":"literal","value":"format_textdirection_l_to_r"},{"type":"literal","value":"format_textdirection_r_to_l"},{"type":"literal","value":"format_textdirection_vertical"},{"type":"literal","value":"format_underlined"},{"type":"literal","value":"format_underlined_squiggle"},{"type":"literal","value":"forms_add_on"},{"type":"literal","value":"forms_apps_script"},{"type":"literal","value":"fort"},{"type":"literal","value":"forum"},{"type":"literal","value":"forward_10"},{"type":"literal","value":"forward_30"},{"type":"literal","value":"forward_5"},{"type":"literal","value":"forward_circle"},{"type":"literal","value":"forward_media"},{"type":"literal","value":"forward_to_inbox"},{"type":"literal","value":"foundation"},{"type":"literal","value":"fragrance"},{"type":"literal","value":"frame_inspect"},{"type":"literal","value":"frame_person"},{"type":"literal","value":"frame_person_mic"},{"type":"literal","value":"frame_person_off"},{"type":"literal","value":"frame_reload"},{"type":"literal","value":"frame_source"},{"type":"literal","value":"free_breakfast"},{"type":"literal","value":"free_cancellation"},{"type":"literal","value":"front_hand"},{"type":"literal","value":"front_loader"},{"type":"literal","value":"full_coverage"},{"type":"literal","value":"full_hd"},{"type":"literal","value":"full_stacked_bar_chart"},{"type":"literal","value":"fullscreen"},{"type":"literal","value":"fullscreen_exit"},{"type":"literal","value":"fullscreen_portrait"},{"type":"literal","value":"functions"},{"type":"literal","value":"funicular"},{"type":"literal","value":"g_mobiledata"},{"type":"literal","value":"g_mobiledata_badge"},{"type":"literal","value":"g_translate"},{"type":"literal","value":"gallery_thumbnail"},{"type":"literal","value":"gamepad"},{"type":"literal","value":"games"},{"type":"literal","value":"garage"},{"type":"literal","value":"garage_check"},{"type":"literal","value":"garage_door"},{"type":"literal","value":"garage_home"},{"type":"literal","value":"garage_money"},{"type":"literal","value":"garden_cart"},{"type":"literal","value":"gas_meter"},{"type":"literal","value":"gastroenterology"},{"type":"literal","value":"gate"},{"type":"literal","value":"gavel"},{"type":"literal","value":"general_device"},{"type":"literal","value":"generating_tokens"},{"type":"literal","value":"genetics"},{"type":"literal","value":"genres"},{"type":"literal","value":"gesture"},{"type":"literal","value":"gesture_select"},{"type":"literal","value":"get_app"},{"type":"literal","value":"gif"},{"type":"literal","value":"gif_2"},{"type":"literal","value":"gif_box"},{"type":"literal","value":"girl"},{"type":"literal","value":"gite"},{"type":"literal","value":"glass_cup"},{"type":"literal","value":"globe_asia"},{"type":"literal","value":"globe_book"},{"type":"literal","value":"globe_location_pin"},{"type":"literal","value":"globe_uk"},{"type":"literal","value":"glucose"},{"type":"literal","value":"glyphs"},{"type":"literal","value":"go_to_line"},{"type":"literal","value":"golf_course"},{"type":"literal","value":"gondola_lift"},{"type":"literal","value":"google_home_devices"},{"type":"literal","value":"google_tv_remote"},{"type":"literal","value":"google_wifi"},{"type":"literal","value":"gpp_bad"},{"type":"literal","value":"gpp_good"},{"type":"literal","value":"gpp_maybe"},{"type":"literal","value":"gps_fixed"},{"type":"literal","value":"gps_not_fixed"},{"type":"literal","value":"gps_off"},{"type":"literal","value":"grade"},{"type":"literal","value":"gradient"},{"type":"literal","value":"grading"},{"type":"literal","value":"grain"},{"type":"literal","value":"graph_1"},{"type":"literal","value":"graph_2"},{"type":"literal","value":"graph_3"},{"type":"literal","value":"graph_4"},{"type":"literal","value":"graph_5"},{"type":"literal","value":"graph_6"},{"type":"literal","value":"graph_7"},{"type":"literal","value":"graphic_eq"},{"type":"literal","value":"grass"},{"type":"literal","value":"grid_3x3"},{"type":"literal","value":"grid_3x3_off"},{"type":"literal","value":"grid_4x4"},{"type":"literal","value":"grid_goldenratio"},{"type":"literal","value":"grid_guides"},{"type":"literal","value":"grid_off"},{"type":"literal","value":"grid_on"},{"type":"literal","value":"grid_view"},{"type":"literal","value":"grocery"},{"type":"literal","value":"group_add"},{"type":"literal","value":"group_off"},{"type":"literal","value":"group_remove"},{"type":"literal","value":"group_search"},{"type":"literal","value":"group_work"},{"type":"literal","value":"grouped_bar_chart"},{"type":"literal","value":"groups_2"},{"type":"literal","value":"groups_3"},{"type":"literal","value":"guardian"},{"type":"literal","value":"gynecology"},{"type":"literal","value":"h_mobiledata"},{"type":"literal","value":"h_mobiledata_badge"},{"type":"literal","value":"h_plus_mobiledata"},{"type":"literal","value":"h_plus_mobiledata_badge"},{"type":"literal","value":"hail"},{"type":"literal","value":"hallway"},{"type":"literal","value":"hanami_dango"},{"type":"literal","value":"hand_bones"},{"type":"literal","value":"hand_gesture"},{"type":"literal","value":"hand_gesture_off"},{"type":"literal","value":"hand_meal"},{"type":"literal","value":"hand_package"},{"type":"literal","value":"handheld_controller"},{"type":"literal","value":"handshake"},{"type":"literal","value":"handyman"},{"type":"literal","value":"hangout_video"},{"type":"literal","value":"hangout_video_off"},{"type":"literal","value":"hard_disk"},{"type":"literal","value":"hard_drive"},{"type":"literal","value":"hard_drive_2"},{"type":"literal","value":"hardware"},{"type":"literal","value":"hd"},{"type":"literal","value":"hdr_auto"},{"type":"literal","value":"hdr_auto_select"},{"type":"literal","value":"hdr_enhanced_select"},{"type":"literal","value":"hdr_off"},{"type":"literal","value":"hdr_off_select"},{"type":"literal","value":"hdr_on"},{"type":"literal","value":"hdr_on_select"},{"type":"literal","value":"hdr_plus"},{"type":"literal","value":"hdr_plus_off"},{"type":"literal","value":"hdr_strong"},{"type":"literal","value":"hdr_weak"},{"type":"literal","value":"head_mounted_device"},{"type":"literal","value":"headphones_battery"},{"type":"literal","value":"headset_mic"},{"type":"literal","value":"headset_off"},{"type":"literal","value":"healing"},{"type":"literal","value":"health_and_beauty"},{"type":"literal","value":"health_and_safety"},{"type":"literal","value":"health_cross"},{"type":"literal","value":"health_metrics"},{"type":"literal","value":"heap_snapshot_large"},{"type":"literal","value":"heap_snapshot_multiple"},{"type":"literal","value":"heap_snapshot_thumbnail"},{"type":"literal","value":"hearing"},{"type":"literal","value":"hearing_aid"},{"type":"literal","value":"hearing_aid_disabled"},{"type":"literal","value":"hearing_aid_disabled_left"},{"type":"literal","value":"hearing_aid_left"},{"type":"literal","value":"hearing_disabled"},{"type":"literal","value":"heart_broken"},{"type":"literal","value":"heart_check"},{"type":"literal","value":"heart_minus"},{"type":"literal","value":"heart_plus"},{"type":"literal","value":"heart_smile"},{"type":"literal","value":"heat"},{"type":"literal","value":"heat_pump"},{"type":"literal","value":"heat_pump_balance"},{"type":"literal","value":"helicopter"},{"type":"literal","value":"help"},{"type":"literal","value":"help_center"},{"type":"literal","value":"help_clinic"},{"type":"literal","value":"help_outline"},{"type":"literal","value":"hematology"},{"type":"literal","value":"hevc"},{"type":"literal","value":"hide_image"},{"type":"literal","value":"hide_source"},{"type":"literal","value":"high_chair"},{"type":"literal","value":"high_density"},{"type":"literal","value":"high_quality"},{"type":"literal","value":"high_res"},{"type":"literal","value":"highlight"},{"type":"literal","value":"highlight_alt"},{"type":"literal","value":"highlight_keyboard_focus"},{"type":"literal","value":"highlight_mouse_cursor"},{"type":"literal","value":"highlight_off"},{"type":"literal","value":"highlight_text_cursor"},{"type":"literal","value":"highlighter_size_1"},{"type":"literal","value":"highlighter_size_2"},{"type":"literal","value":"highlighter_size_3"},{"type":"literal","value":"highlighter_size_4"},{"type":"literal","value":"highlighter_size_5"},{"type":"literal","value":"hiking"},{"type":"literal","value":"history_2"},{"type":"literal","value":"history_edu"},{"type":"literal","value":"history_off"},{"type":"literal","value":"history_toggle_off"},{"type":"literal","value":"hive"},{"type":"literal","value":"hls"},{"type":"literal","value":"hls_off"},{"type":"literal","value":"holiday_village"},{"type":"literal","value":"home"},{"type":"literal","value":"home_and_garden"},{"type":"literal","value":"home_app_logo"},{"type":"literal","value":"home_filled"},{"type":"literal","value":"home_health"},{"type":"literal","value":"home_improvement_and_tools"},{"type":"literal","value":"home_iot_device"},{"type":"literal","value":"home_max"},{"type":"literal","value":"home_max_dots"},{"type":"literal","value":"home_mini"},{"type":"literal","value":"home_pin"},{"type":"literal","value":"home_repair_service"},{"type":"literal","value":"home_speaker"},{"type":"literal","value":"home_storage"},{"type":"literal","value":"home_work"},{"type":"literal","value":"horizontal_distribute"},{"type":"literal","value":"horizontal_rule"},{"type":"literal","value":"horizontal_split"},{"type":"literal","value":"hot_tub"},{"type":"literal","value":"hotel"},{"type":"literal","value":"hotel_class"},{"type":"literal","value":"hourglass_arrow_down"},{"type":"literal","value":"hourglass_arrow_up"},{"type":"literal","value":"hourglass_bottom"},{"type":"literal","value":"hourglass_disabled"},{"type":"literal","value":"hourglass_empty"},{"type":"literal","value":"hourglass_full"},{"type":"literal","value":"hourglass_pause"},{"type":"literal","value":"hourglass_top"},{"type":"literal","value":"house_siding"},{"type":"literal","value":"house_with_shield"},{"type":"literal","value":"houseboat"},{"type":"literal","value":"household_supplies"},{"type":"literal","value":"hov"},{"type":"literal","value":"how_to_reg"},{"type":"literal","value":"how_to_vote"},{"type":"literal","value":"hr_resting"},{"type":"literal","value":"http"},{"type":"literal","value":"https"},{"type":"literal","value":"hub"},{"type":"literal","value":"humerus"},{"type":"literal","value":"humerus_alt"},{"type":"literal","value":"humidity_high"},{"type":"literal","value":"humidity_indoor"},{"type":"literal","value":"humidity_low"},{"type":"literal","value":"humidity_mid"},{"type":"literal","value":"humidity_percentage"},{"type":"literal","value":"hvac"},{"type":"literal","value":"hvac_max_defrost"},{"type":"literal","value":"ice_skating"},{"type":"literal","value":"icecream"},{"type":"literal","value":"id_card"},{"type":"literal","value":"identity_aware_proxy"},{"type":"literal","value":"identity_platform"},{"type":"literal","value":"ifl"},{"type":"literal","value":"iframe_off"},{"type":"literal","value":"image_arrow_up"},{"type":"literal","value":"image_aspect_ratio"},{"type":"literal","value":"image_inset"},{"type":"literal","value":"image_not_supported"},{"type":"literal","value":"image_search"},{"type":"literal","value":"imagesearch_roller"},{"type":"literal","value":"imagesmode"},{"type":"literal","value":"immunology"},{"type":"literal","value":"import_contacts"},{"type":"literal","value":"import_export"},{"type":"literal","value":"important_devices"},{"type":"literal","value":"in_home_mode"},{"type":"literal","value":"inactive_order"},{"type":"literal","value":"inbox"},{"type":"literal","value":"inbox_customize"},{"type":"literal","value":"inbox_text"},{"type":"literal","value":"inbox_text_asterisk"},{"type":"literal","value":"inbox_text_person"},{"type":"literal","value":"inbox_text_share"},{"type":"literal","value":"incomplete_circle"},{"type":"literal","value":"indeterminate_check_box"},{"type":"literal","value":"indeterminate_question_box"},{"type":"literal","value":"info_i"},{"type":"literal","value":"info_outline"},{"type":"literal","value":"infrared"},{"type":"literal","value":"ink_eraser"},{"type":"literal","value":"ink_eraser_off"},{"type":"literal","value":"ink_highlighter"},{"type":"literal","value":"ink_highlighter_move"},{"type":"literal","value":"ink_marker"},{"type":"literal","value":"ink_pen"},{"type":"literal","value":"ink_selection"},{"type":"literal","value":"inpatient"},{"type":"literal","value":"input_circle"},{"type":"literal","value":"insert_chart"},{"type":"literal","value":"insert_chart_outlined"},{"type":"literal","value":"insert_comment"},{"type":"literal","value":"insert_drive_file"},{"type":"literal","value":"insert_emoticon"},{"type":"literal","value":"insert_invitation"},{"type":"literal","value":"insert_link"},{"type":"literal","value":"insert_page_break"},{"type":"literal","value":"insert_photo"},{"type":"literal","value":"insert_text"},{"type":"literal","value":"insights"},{"type":"literal","value":"install_desktop"},{"type":"literal","value":"install_mobile"},{"type":"literal","value":"instant_mix"},{"type":"literal","value":"integration_instructions"},{"type":"literal","value":"interactive_space"},{"type":"literal","value":"interests"},{"type":"literal","value":"interpreter_mode"},{"type":"literal","value":"inventory"},{"type":"literal","value":"inventory_2"},{"type":"literal","value":"invert_colors"},{"type":"literal","value":"invert_colors_off"},{"type":"literal","value":"ios_share"},{"type":"literal","value":"iron"},{"type":"literal","value":"iso"},{"type":"literal","value":"jamboard_kiosk"},{"type":"literal","value":"japanese_curry"},{"type":"literal","value":"japanese_flag"},{"type":"literal","value":"javascript"},{"type":"literal","value":"join_full"},{"type":"literal","value":"join_inner"},{"type":"literal","value":"join_left"},{"type":"literal","value":"join_right"},{"type":"literal","value":"joystick"},{"type":"literal","value":"jump_to_element"},{"type":"literal","value":"kanji_alcohol"},{"type":"literal","value":"kayaking"},{"type":"literal","value":"kebab_dining"},{"type":"literal","value":"keep"},{"type":"literal","value":"keep_off"},{"type":"literal","value":"keep_public"},{"type":"literal","value":"kettle"},{"type":"literal","value":"key_off"},{"type":"literal","value":"key_vertical"},{"type":"literal","value":"key_visualizer"},{"type":"literal","value":"keyboard_alt"},{"type":"literal","value":"keyboard_arrow_down"},{"type":"literal","value":"keyboard_arrow_left"},{"type":"literal","value":"keyboard_arrow_right"},{"type":"literal","value":"keyboard_arrow_up"},{"type":"literal","value":"keyboard_backspace"},{"type":"literal","value":"keyboard_capslock"},{"type":"literal","value":"keyboard_capslock_badge"},{"type":"literal","value":"keyboard_command_key"},{"type":"literal","value":"keyboard_control_key"},{"type":"literal","value":"keyboard_double_arrow_down"},{"type":"literal","value":"keyboard_double_arrow_left"},{"type":"literal","value":"keyboard_double_arrow_right"},{"type":"literal","value":"keyboard_double_arrow_up"},{"type":"literal","value":"keyboard_external_input"},{"type":"literal","value":"keyboard_full"},{"type":"literal","value":"keyboard_hide"},{"type":"literal","value":"keyboard_keys"},{"type":"literal","value":"keyboard_lock"},{"type":"literal","value":"keyboard_lock_off"},{"type":"literal","value":"keyboard_off"},{"type":"literal","value":"keyboard_onscreen"},{"type":"literal","value":"keyboard_option_key"},{"type":"literal","value":"keyboard_previous_language"},{"type":"literal","value":"keyboard_return"},{"type":"literal","value":"keyboard_tab"},{"type":"literal","value":"keyboard_tab_rtl"},{"type":"literal","value":"keyboard_voice"},{"type":"literal","value":"kid_star"},{"type":"literal","value":"king_bed"},{"type":"literal","value":"kitchen"},{"type":"literal","value":"kitesurfing"},{"type":"literal","value":"lab_panel"},{"type":"literal","value":"lab_profile"},{"type":"literal","value":"lab_research"},{"type":"literal","value":"label_important"},{"type":"literal","value":"label_important_outline"},{"type":"literal","value":"label_off"},{"type":"literal","value":"labs"},{"type":"literal","value":"lan"},{"type":"literal","value":"landscape_2"},{"type":"literal","value":"landscape_2_edit"},{"type":"literal","value":"landscape_2_off"},{"type":"literal","value":"landslide"},{"type":"literal","value":"language"},{"type":"literal","value":"language_chinese_array"},{"type":"literal","value":"language_chinese_cangjie"},{"type":"literal","value":"language_chinese_dayi"},{"type":"literal","value":"language_chinese_pinyin"},{"type":"literal","value":"language_chinese_quick"},{"type":"literal","value":"language_chinese_wubi"},{"type":"literal","value":"language_french"},{"type":"literal","value":"language_gb_english"},{"type":"literal","value":"language_international"},{"type":"literal","value":"language_japanese_kana"},{"type":"literal","value":"language_korean_latin"},{"type":"literal","value":"language_pinyin"},{"type":"literal","value":"language_spanish"},{"type":"literal","value":"language_us"},{"type":"literal","value":"language_us_colemak"},{"type":"literal","value":"language_us_dvorak"},{"type":"literal","value":"laps"},{"type":"literal","value":"laptop"},{"type":"literal","value":"laptop_car"},{"type":"literal","value":"laptop_chromebook"},{"type":"literal","value":"laptop_mac"},{"type":"literal","value":"laptop_windows"},{"type":"literal","value":"lasso_select"},{"type":"literal","value":"last_page"},{"type":"literal","value":"launch"},{"type":"literal","value":"laundry"},{"type":"literal","value":"layers"},{"type":"literal","value":"layers_clear"},{"type":"literal","value":"lda"},{"type":"literal","value":"leaderboard"},{"type":"literal","value":"leak_add"},{"type":"literal","value":"leak_remove"},{"type":"literal","value":"left_click"},{"type":"literal","value":"left_panel_close"},{"type":"literal","value":"left_panel_open"},{"type":"literal","value":"legend_toggle"},{"type":"literal","value":"lens"},{"type":"literal","value":"lens_blur"},{"type":"literal","value":"letter_switch"},{"type":"literal","value":"library_add"},{"type":"literal","value":"library_add_check"},{"type":"literal","value":"library_books"},{"type":"literal","value":"library_music"},{"type":"literal","value":"license"},{"type":"literal","value":"lift_to_talk"},{"type":"literal","value":"light_group"},{"type":"literal","value":"light_mode"},{"type":"literal","value":"light_off"},{"type":"literal","value":"lightbulb_2"},{"type":"literal","value":"lightbulb_circle"},{"type":"literal","value":"lightbulb_outline"},{"type":"literal","value":"lightning_stand"},{"type":"literal","value":"line_axis"},{"type":"literal","value":"line_curve"},{"type":"literal","value":"line_end"},{"type":"literal","value":"line_end_arrow"},{"type":"literal","value":"line_end_arrow_notch"},{"type":"literal","value":"line_end_circle"},{"type":"literal","value":"line_end_diamond"},{"type":"literal","value":"line_end_square"},{"type":"literal","value":"line_start"},{"type":"literal","value":"line_start_arrow"},{"type":"literal","value":"line_start_arrow_notch"},{"type":"literal","value":"line_start_circle"},{"type":"literal","value":"line_start_diamond"},{"type":"literal","value":"line_start_square"},{"type":"literal","value":"line_style"},{"type":"literal","value":"line_weight"},{"type":"literal","value":"linear_scale"},{"type":"literal","value":"link_off"},{"type":"literal","value":"linked_camera"},{"type":"literal","value":"linked_services"},{"type":"literal","value":"liquor"},{"type":"literal","value":"list_alt"},{"type":"literal","value":"list_alt_add"},{"type":"literal","value":"list_alt_check"},{"type":"literal","value":"lists"},{"type":"literal","value":"live_help"},{"type":"literal","value":"live_tv"},{"type":"literal","value":"living"},{"type":"literal","value":"local_activity"},{"type":"literal","value":"local_airport"},{"type":"literal","value":"local_atm"},{"type":"literal","value":"local_bar"},{"type":"literal","value":"local_cafe"},{"type":"literal","value":"local_car_wash"},{"type":"literal","value":"local_convenience_store"},{"type":"literal","value":"local_dining"},{"type":"literal","value":"local_drink"},{"type":"literal","value":"local_fire_department"},{"type":"literal","value":"local_florist"},{"type":"literal","value":"local_gas_station"},{"type":"literal","value":"local_grocery_store"},{"type":"literal","value":"local_hospital"},{"type":"literal","value":"local_hotel"},{"type":"literal","value":"local_laundry_service"},{"type":"literal","value":"local_library"},{"type":"literal","value":"local_mall"},{"type":"literal","value":"local_movies"},{"type":"literal","value":"local_offer"},{"type":"literal","value":"local_parking"},{"type":"literal","value":"local_pharmacy"},{"type":"literal","value":"local_phone"},{"type":"literal","value":"local_pizza"},{"type":"literal","value":"local_play"},{"type":"literal","value":"local_police"},{"type":"literal","value":"local_post_office"},{"type":"literal","value":"local_printshop"},{"type":"literal","value":"local_see"},{"type":"literal","value":"local_shipping"},{"type":"literal","value":"local_taxi"},{"type":"literal","value":"location_away"},{"type":"literal","value":"location_chip"},{"type":"literal","value":"location_city"},{"type":"literal","value":"location_disabled"},{"type":"literal","value":"location_home"},{"type":"literal","value":"location_off"},{"type":"literal","value":"location_on"},{"type":"literal","value":"location_pin"},{"type":"literal","value":"location_searching"},{"type":"literal","value":"lock_clock"},{"type":"literal","value":"lock_open"},{"type":"literal","value":"lock_open_circle"},{"type":"literal","value":"lock_open_right"},{"type":"literal","value":"lock_outline"},{"type":"literal","value":"lock_person"},{"type":"literal","value":"lock_reset"},{"type":"literal","value":"login"},{"type":"literal","value":"logo_dev"},{"type":"literal","value":"logout"},{"type":"literal","value":"looks"},{"type":"literal","value":"looks_3"},{"type":"literal","value":"looks_4"},{"type":"literal","value":"looks_5"},{"type":"literal","value":"looks_6"},{"type":"literal","value":"looks_one"},{"type":"literal","value":"looks_two"},{"type":"literal","value":"loop"},{"type":"literal","value":"low_density"},{"type":"literal","value":"low_priority"},{"type":"literal","value":"loyalty"},{"type":"literal","value":"lte_mobiledata"},{"type":"literal","value":"lte_mobiledata_badge"},{"type":"literal","value":"lte_plus_mobiledata"},{"type":"literal","value":"lte_plus_mobiledata_badge"},{"type":"literal","value":"luggage"},{"type":"literal","value":"lunch_dining"},{"type":"literal","value":"lyrics"},{"type":"literal","value":"macro_auto"},{"type":"literal","value":"macro_off"},{"type":"literal","value":"magnification_large"},{"type":"literal","value":"magnification_small"},{"type":"literal","value":"magnify_docked"},{"type":"literal","value":"magnify_fullscreen"},{"type":"literal","value":"mail_asterisk"},{"type":"literal","value":"mail_lock"},{"type":"literal","value":"mail_off"},{"type":"literal","value":"mail_outline"},{"type":"literal","value":"mail_shield"},{"type":"literal","value":"male"},{"type":"literal","value":"man"},{"type":"literal","value":"man_2"},{"type":"literal","value":"man_3"},{"type":"literal","value":"man_4"},{"type":"literal","value":"manage_accounts"},{"type":"literal","value":"manage_history"},{"type":"literal","value":"manage_search"},{"type":"literal","value":"manga"},{"type":"literal","value":"manufacturing"},{"type":"literal","value":"map_pin_heart"},{"type":"literal","value":"map_pin_review"},{"type":"literal","value":"map_search"},{"type":"literal","value":"maps_home_work"},{"type":"literal","value":"maps_ugc"},{"type":"literal","value":"mark_as_unread"},{"type":"literal","value":"mark_chat_read"},{"type":"literal","value":"mark_chat_unread"},{"type":"literal","value":"mark_email_read"},{"type":"literal","value":"mark_email_unread"},{"type":"literal","value":"mark_unread_chat_alt"},{"type":"literal","value":"markdown"},{"type":"literal","value":"markdown_copy"},{"type":"literal","value":"markdown_paste"},{"type":"literal","value":"markunread"},{"type":"literal","value":"markunread_mailbox"},{"type":"literal","value":"masked_transitions"},{"type":"literal","value":"masked_transitions_add"},{"type":"literal","value":"masks"},{"type":"literal","value":"massage"},{"type":"literal","value":"match_case"},{"type":"literal","value":"match_case_off"},{"type":"literal","value":"match_word"},{"type":"literal","value":"matter"},{"type":"literal","value":"maximize"},{"type":"literal","value":"meal_dinner"},{"type":"literal","value":"meal_lunch"},{"type":"literal","value":"measuring_tape"},{"type":"literal","value":"media_bluetooth_off"},{"type":"literal","value":"media_bluetooth_on"},{"type":"literal","value":"media_link"},{"type":"literal","value":"media_output"},{"type":"literal","value":"media_output_off"},{"type":"literal","value":"mediation"},{"type":"literal","value":"medical_information"},{"type":"literal","value":"medical_mask"},{"type":"literal","value":"medical_services"},{"type":"literal","value":"medication"},{"type":"literal","value":"medication_liquid"},{"type":"literal","value":"meeting_room"},{"type":"literal","value":"memory"},{"type":"literal","value":"memory_alt"},{"type":"literal","value":"menstrual_health"},{"type":"literal","value":"menu_book"},{"type":"literal","value":"menu_book_2"},{"type":"literal","value":"menu_open"},{"type":"literal","value":"merge_type"},{"type":"literal","value":"metabolism"},{"type":"literal","value":"metro"},{"type":"literal","value":"mfg_nest_yale_lock"},{"type":"literal","value":"mic_alert"},{"type":"literal","value":"mic_double"},{"type":"literal","value":"mic_external_off"},{"type":"literal","value":"mic_external_on"},{"type":"literal","value":"mic_none"},{"type":"literal","value":"mic_off"},{"type":"literal","value":"microbiology"},{"type":"literal","value":"microwave_gen"},{"type":"literal","value":"military_tech"},{"type":"literal","value":"mimo"},{"type":"literal","value":"mimo_disconnect"},{"type":"literal","value":"mindfulness"},{"type":"literal","value":"minimize"},{"type":"literal","value":"minor_crash"},{"type":"literal","value":"mintmark"},{"type":"literal","value":"miscellaneous_services"},{"type":"literal","value":"missed_video_call"},{"type":"literal","value":"missing_controller"},{"type":"literal","value":"mist"},{"type":"literal","value":"mitre"},{"type":"literal","value":"mixture_med"},{"type":"literal","value":"mms"},{"type":"literal","value":"mobile"},{"type":"literal","value":"mobile_2"},{"type":"literal","value":"mobile_3"},{"type":"literal","value":"mobile_alert"},{"type":"literal","value":"mobile_arrow_down"},{"type":"literal","value":"mobile_arrow_right"},{"type":"literal","value":"mobile_arrow_up_right"},{"type":"literal","value":"mobile_block"},{"type":"literal","value":"mobile_camera"},{"type":"literal","value":"mobile_camera_front"},{"type":"literal","value":"mobile_camera_rear"},{"type":"literal","value":"mobile_cancel"},{"type":"literal","value":"mobile_cast"},{"type":"literal","value":"mobile_charge"},{"type":"literal","value":"mobile_chat"},{"type":"literal","value":"mobile_check"},{"type":"literal","value":"mobile_code"},{"type":"literal","value":"mobile_dots"},{"type":"literal","value":"mobile_friendly"},{"type":"literal","value":"mobile_gear"},{"type":"literal","value":"mobile_hand"},{"type":"literal","value":"mobile_hand_left"},{"type":"literal","value":"mobile_hand_left_off"},{"type":"literal","value":"mobile_hand_off"},{"type":"literal","value":"mobile_info"},{"type":"literal","value":"mobile_landscape"},{"type":"literal","value":"mobile_layout"},{"type":"literal","value":"mobile_lock_landscape"},{"type":"literal","value":"mobile_lock_portrait"},{"type":"literal","value":"mobile_loupe"},{"type":"literal","value":"mobile_menu"},{"type":"literal","value":"mobile_off"},{"type":"literal","value":"mobile_question"},{"type":"literal","value":"mobile_rotate"},{"type":"literal","value":"mobile_rotate_lock"},{"type":"literal","value":"mobile_screen_share"},{"type":"literal","value":"mobile_screensaver"},{"type":"literal","value":"mobile_sensor_hi"},{"type":"literal","value":"mobile_sensor_lo"},{"type":"literal","value":"mobile_share"},{"type":"literal","value":"mobile_share_stack"},{"type":"literal","value":"mobile_sound"},{"type":"literal","value":"mobile_sound_2"},{"type":"literal","value":"mobile_sound_off"},{"type":"literal","value":"mobile_speaker"},{"type":"literal","value":"mobile_text"},{"type":"literal","value":"mobile_text_2"},{"type":"literal","value":"mobile_theft"},{"type":"literal","value":"mobile_ticket"},{"type":"literal","value":"mobile_vibrate"},{"type":"literal","value":"mobile_wrench"},{"type":"literal","value":"mobiledata_off"},{"type":"literal","value":"mode"},{"type":"literal","value":"mode_comment"},{"type":"literal","value":"mode_cool"},{"type":"literal","value":"mode_cool_off"},{"type":"literal","value":"mode_dual"},{"type":"literal","value":"mode_edit"},{"type":"literal","value":"mode_edit_outline"},{"type":"literal","value":"mode_fan"},{"type":"literal","value":"mode_fan_off"},{"type":"literal","value":"mode_heat"},{"type":"literal","value":"mode_heat_cool"},{"type":"literal","value":"mode_heat_off"},{"type":"literal","value":"mode_night"},{"type":"literal","value":"mode_of_travel"},{"type":"literal","value":"mode_off_on"},{"type":"literal","value":"mode_standby"},{"type":"literal","value":"model_training"},{"type":"literal","value":"modeling"},{"type":"literal","value":"monetization_on"},{"type":"literal","value":"money"},{"type":"literal","value":"money_bag"},{"type":"literal","value":"money_off"},{"type":"literal","value":"money_off_csred"},{"type":"literal","value":"money_range"},{"type":"literal","value":"monitor"},{"type":"literal","value":"monitor_heart"},{"type":"literal","value":"monitor_weight"},{"type":"literal","value":"monitor_weight_gain"},{"type":"literal","value":"monitor_weight_loss"},{"type":"literal","value":"monitoring"},{"type":"literal","value":"monochrome_photos"},{"type":"literal","value":"monorail"},{"type":"literal","value":"mood"},{"type":"literal","value":"mood_bad"},{"type":"literal","value":"moon_stars"},{"type":"literal","value":"mop"},{"type":"literal","value":"moped_package"},{"type":"literal","value":"more_down"},{"type":"literal","value":"more_horiz"},{"type":"literal","value":"more_time"},{"type":"literal","value":"more_up"},{"type":"literal","value":"more_vert"},{"type":"literal","value":"mosque"},{"type":"literal","value":"motion_blur"},{"type":"literal","value":"motion_mode"},{"type":"literal","value":"motion_photos_auto"},{"type":"literal","value":"motion_photos_off"},{"type":"literal","value":"motion_photos_on"},{"type":"literal","value":"motion_photos_pause"},{"type":"literal","value":"motion_photos_paused"},{"type":"literal","value":"motion_play"},{"type":"literal","value":"motion_sensor_active"},{"type":"literal","value":"motion_sensor_alert"},{"type":"literal","value":"motion_sensor_idle"},{"type":"literal","value":"motion_sensor_urgent"},{"type":"literal","value":"mountain_flag"},{"type":"literal","value":"mountain_steam"},{"type":"literal","value":"mouse"},{"type":"literal","value":"mouse_lock"},{"type":"literal","value":"mouse_lock_off"},{"type":"literal","value":"move_down"},{"type":"literal","value":"move_group"},{"type":"literal","value":"move_item"},{"type":"literal","value":"move_location"},{"type":"literal","value":"move_selection_down"},{"type":"literal","value":"move_selection_left"},{"type":"literal","value":"move_selection_right"},{"type":"literal","value":"move_selection_up"},{"type":"literal","value":"move_to_inbox"},{"type":"literal","value":"move_up"},{"type":"literal","value":"moved_location"},{"type":"literal","value":"movie"},{"type":"literal","value":"movie_creation"},{"type":"literal","value":"movie_edit"},{"type":"literal","value":"movie_filter"},{"type":"literal","value":"movie_info"},{"type":"literal","value":"movie_off"},{"type":"literal","value":"movie_speaker"},{"type":"literal","value":"moving"},{"type":"literal","value":"moving_beds"},{"type":"literal","value":"moving_ministry"},{"type":"literal","value":"mp"},{"type":"literal","value":"multicooker"},{"type":"literal","value":"multiline_chart"},{"type":"literal","value":"multimodal_hand_eye"},{"type":"literal","value":"multiple_airports"},{"type":"literal","value":"multiple_stop"},{"type":"literal","value":"museum"},{"type":"literal","value":"music_cast"},{"type":"literal","value":"music_history"},{"type":"literal","value":"music_note"},{"type":"literal","value":"music_note_add"},{"type":"literal","value":"music_off"},{"type":"literal","value":"music_video"},{"type":"literal","value":"my_location"},{"type":"literal","value":"mystery"},{"type":"literal","value":"nat"},{"type":"literal","value":"nature"},{"type":"literal","value":"nature_people"},{"type":"literal","value":"navigate_before"},{"type":"literal","value":"navigate_next"},{"type":"literal","value":"near_me"},{"type":"literal","value":"near_me_disabled"},{"type":"literal","value":"nearby"},{"type":"literal","value":"nearby_error"},{"type":"literal","value":"nearby_off"},{"type":"literal","value":"nephrology"},{"type":"literal","value":"nest_audio"},{"type":"literal","value":"nest_cam_floodlight"},{"type":"literal","value":"nest_cam_indoor"},{"type":"literal","value":"nest_cam_iq"},{"type":"literal","value":"nest_cam_iq_outdoor"},{"type":"literal","value":"nest_cam_magnet_mount"},{"type":"literal","value":"nest_cam_outdoor"},{"type":"literal","value":"nest_cam_stand"},{"type":"literal","value":"nest_cam_wall_mount"},{"type":"literal","value":"nest_cam_wired_stand"},{"type":"literal","value":"nest_clock_farsight_analog"},{"type":"literal","value":"nest_clock_farsight_digital"},{"type":"literal","value":"nest_connect"},{"type":"literal","value":"nest_detect"},{"type":"literal","value":"nest_display"},{"type":"literal","value":"nest_display_max"},{"type":"literal","value":"nest_doorbell_visitor"},{"type":"literal","value":"nest_eco_leaf"},{"type":"literal","value":"nest_farsight_cool"},{"type":"literal","value":"nest_farsight_dual"},{"type":"literal","value":"nest_farsight_eco"},{"type":"literal","value":"nest_farsight_heat"},{"type":"literal","value":"nest_farsight_seasonal"},{"type":"literal","value":"nest_farsight_weather"},{"type":"literal","value":"nest_found_savings"},{"type":"literal","value":"nest_heat_link_e"},{"type":"literal","value":"nest_heat_link_gen_3"},{"type":"literal","value":"nest_hello_doorbell"},{"type":"literal","value":"nest_mini"},{"type":"literal","value":"nest_multi_room"},{"type":"literal","value":"nest_protect"},{"type":"literal","value":"nest_remote_comfort_sensor"},{"type":"literal","value":"nest_secure_alarm"},{"type":"literal","value":"nest_sunblock"},{"type":"literal","value":"nest_tag"},{"type":"literal","value":"nest_thermostat"},{"type":"literal","value":"nest_thermostat_e_eu"},{"type":"literal","value":"nest_thermostat_gen_3"},{"type":"literal","value":"nest_thermostat_sensor"},{"type":"literal","value":"nest_thermostat_sensor_eu"},{"type":"literal","value":"nest_thermostat_zirconium_eu"},{"type":"literal","value":"nest_true_radiant"},{"type":"literal","value":"nest_wake_on_approach"},{"type":"literal","value":"nest_wake_on_press"},{"type":"literal","value":"nest_wifi_point"},{"type":"literal","value":"nest_wifi_pro"},{"type":"literal","value":"nest_wifi_pro_2"},{"type":"literal","value":"nest_wifi_router"},{"type":"literal","value":"network_cell"},{"type":"literal","value":"network_check"},{"type":"literal","value":"network_intel_node"},{"type":"literal","value":"network_intelligence"},{"type":"literal","value":"network_intelligence_history"},{"type":"literal","value":"network_intelligence_update"},{"type":"literal","value":"network_locked"},{"type":"literal","value":"network_manage"},{"type":"literal","value":"network_node"},{"type":"literal","value":"network_ping"},{"type":"literal","value":"network_wifi"},{"type":"literal","value":"network_wifi_1_bar"},{"type":"literal","value":"network_wifi_1_bar_locked"},{"type":"literal","value":"network_wifi_2_bar"},{"type":"literal","value":"network_wifi_2_bar_locked"},{"type":"literal","value":"network_wifi_3_bar"},{"type":"literal","value":"network_wifi_3_bar_locked"},{"type":"literal","value":"network_wifi_locked"},{"type":"literal","value":"neurology"},{"type":"literal","value":"new_label"},{"type":"literal","value":"new_releases"},{"type":"literal","value":"new_window"},{"type":"literal","value":"news"},{"type":"literal","value":"newsmode"},{"type":"literal","value":"newsstand"},{"type":"literal","value":"next_plan"},{"type":"literal","value":"next_week"},{"type":"literal","value":"nfc"},{"type":"literal","value":"nfc_off"},{"type":"literal","value":"night_shelter"},{"type":"literal","value":"night_sight_auto"},{"type":"literal","value":"night_sight_auto_off"},{"type":"literal","value":"night_sight_max"},{"type":"literal","value":"nightlife"},{"type":"literal","value":"nightlight"},{"type":"literal","value":"nightlight_round"},{"type":"literal","value":"nights_stay"},{"type":"literal","value":"no_accounts"},{"type":"literal","value":"no_adult_content"},{"type":"literal","value":"no_backpack"},{"type":"literal","value":"no_cell"},{"type":"literal","value":"no_crash"},{"type":"literal","value":"no_drinks"},{"type":"literal","value":"no_encryption"},{"type":"literal","value":"no_encryption_gmailerrorred"},{"type":"literal","value":"no_flash"},{"type":"literal","value":"no_food"},{"type":"literal","value":"no_luggage"},{"type":"literal","value":"no_meals"},{"type":"literal","value":"no_meals_ouline"},{"type":"literal","value":"no_meeting_room"},{"type":"literal","value":"no_photography"},{"type":"literal","value":"no_sim"},{"type":"literal","value":"no_sound"},{"type":"literal","value":"no_stroller"},{"type":"literal","value":"no_transfer"},{"type":"literal","value":"noise_aware"},{"type":"literal","value":"noise_control_off"},{"type":"literal","value":"noise_control_on"},{"type":"literal","value":"nordic_walking"},{"type":"literal","value":"north"},{"type":"literal","value":"north_east"},{"type":"literal","value":"north_west"},{"type":"literal","value":"not_accessible"},{"type":"literal","value":"not_accessible_forward"},{"type":"literal","value":"not_interested"},{"type":"literal","value":"not_listed_location"},{"type":"literal","value":"not_started"},{"type":"literal","value":"note_add"},{"type":"literal","value":"note_alt"},{"type":"literal","value":"note_stack"},{"type":"literal","value":"note_stack_add"},{"type":"literal","value":"notes"},{"type":"literal","value":"notification_add"},{"type":"literal","value":"notification_important"},{"type":"literal","value":"notification_multiple"},{"type":"literal","value":"notification_settings"},{"type":"literal","value":"notification_sound"},{"type":"literal","value":"notifications"},{"type":"literal","value":"notifications_active"},{"type":"literal","value":"notifications_none"},{"type":"literal","value":"notifications_off"},{"type":"literal","value":"notifications_paused"},{"type":"literal","value":"notifications_unread"},{"type":"literal","value":"nutrition"},{"type":"literal","value":"ods"},{"type":"literal","value":"odt"},{"type":"literal","value":"offline_bolt"},{"type":"literal","value":"offline_pin"},{"type":"literal","value":"offline_pin_off"},{"type":"literal","value":"offline_share"},{"type":"literal","value":"oil_barrel"},{"type":"literal","value":"okonomiyaki"},{"type":"literal","value":"on_device_training"},{"type":"literal","value":"on_hub_device"},{"type":"literal","value":"oncology"},{"type":"literal","value":"ondemand_video"},{"type":"literal","value":"online_prediction"},{"type":"literal","value":"onsen"},{"type":"literal","value":"open_in_browser"},{"type":"literal","value":"open_in_full"},{"type":"literal","value":"open_in_new"},{"type":"literal","value":"open_in_new_down"},{"type":"literal","value":"open_in_new_off"},{"type":"literal","value":"open_jam"},{"type":"literal","value":"open_run"},{"type":"literal","value":"open_with"},{"type":"literal","value":"ophthalmology"},{"type":"literal","value":"oral_disease"},{"type":"literal","value":"orbit"},{"type":"literal","value":"order_approve"},{"type":"literal","value":"order_play"},{"type":"literal","value":"orders"},{"type":"literal","value":"orthopedics"},{"type":"literal","value":"other_admission"},{"type":"literal","value":"other_houses"},{"type":"literal","value":"outbound"},{"type":"literal","value":"outbox"},{"type":"literal","value":"outbox_alt"},{"type":"literal","value":"outdoor_garden"},{"type":"literal","value":"outdoor_grill"},{"type":"literal","value":"outgoing_mail"},{"type":"literal","value":"outlet"},{"type":"literal","value":"outlined_flag"},{"type":"literal","value":"outpatient"},{"type":"literal","value":"outpatient_med"},{"type":"literal","value":"output_circle"},{"type":"literal","value":"oven_gen"},{"type":"literal","value":"overview"},{"type":"literal","value":"overview_key"},{"type":"literal","value":"owl"},{"type":"literal","value":"oxygen_saturation"},{"type":"literal","value":"p2p"},{"type":"literal","value":"pace"},{"type":"literal","value":"pacemaker"},{"type":"literal","value":"package"},{"type":"literal","value":"package_2"},{"type":"literal","value":"padel"},{"type":"literal","value":"page_control"},{"type":"literal","value":"page_footer"},{"type":"literal","value":"page_header"},{"type":"literal","value":"page_info"},{"type":"literal","value":"page_menu_ios"},{"type":"literal","value":"pageless"},{"type":"literal","value":"pages"},{"type":"literal","value":"pageview"},{"type":"literal","value":"paid"},{"type":"literal","value":"pallet"},{"type":"literal","value":"pan_tool"},{"type":"literal","value":"pan_tool_alt"},{"type":"literal","value":"pan_zoom"},{"type":"literal","value":"panorama"},{"type":"literal","value":"panorama_fish_eye"},{"type":"literal","value":"panorama_horizontal"},{"type":"literal","value":"panorama_horizontal_select"},{"type":"literal","value":"panorama_photosphere"},{"type":"literal","value":"panorama_photosphere_select"},{"type":"literal","value":"panorama_vertical"},{"type":"literal","value":"panorama_vertical_select"},{"type":"literal","value":"panorama_wide_angle"},{"type":"literal","value":"panorama_wide_angle_select"},{"type":"literal","value":"paragliding"},{"type":"literal","value":"parent_child_dining"},{"type":"literal","value":"park"},{"type":"literal","value":"parking_meter"},{"type":"literal","value":"parking_sign"},{"type":"literal","value":"parking_valet"},{"type":"literal","value":"partly_cloudy_day"},{"type":"literal","value":"partly_cloudy_night"},{"type":"literal","value":"partner_exchange"},{"type":"literal","value":"partner_heart"},{"type":"literal","value":"partner_reports"},{"type":"literal","value":"party_mode"},{"type":"literal","value":"passkey"},{"type":"literal","value":"password"},{"type":"literal","value":"password_2"},{"type":"literal","value":"password_2_off"},{"type":"literal","value":"patient_list"},{"type":"literal","value":"pause_circle"},{"type":"literal","value":"pause_circle_filled"},{"type":"literal","value":"pause_circle_outline"},{"type":"literal","value":"pause_presentation"},{"type":"literal","value":"payment"},{"type":"literal","value":"payment_arrow_down"},{"type":"literal","value":"payment_card"},{"type":"literal","value":"payments"},{"type":"literal","value":"pedal_bike"},{"type":"literal","value":"pediatrics"},{"type":"literal","value":"pen_size_1"},{"type":"literal","value":"pen_size_2"},{"type":"literal","value":"pen_size_3"},{"type":"literal","value":"pen_size_4"},{"type":"literal","value":"pen_size_5"},{"type":"literal","value":"pending"},{"type":"literal","value":"pending_actions"},{"type":"literal","value":"people"},{"type":"literal","value":"people_alt"},{"type":"literal","value":"people_outline"},{"type":"literal","value":"percent_discount"},{"type":"literal","value":"pergola"},{"type":"literal","value":"perm_camera_mic"},{"type":"literal","value":"perm_contact_calendar"},{"type":"literal","value":"perm_data_setting"},{"type":"literal","value":"perm_device_information"},{"type":"literal","value":"perm_identity"},{"type":"literal","value":"perm_media"},{"type":"literal","value":"perm_phone_msg"},{"type":"literal","value":"perm_scan_wifi"},{"type":"literal","value":"person_2"},{"type":"literal","value":"person_3"},{"type":"literal","value":"person_4"},{"type":"literal","value":"person_add"},{"type":"literal","value":"person_add_alt"},{"type":"literal","value":"person_add_alt_1"},{"type":"literal","value":"person_add_disabled"},{"type":"literal","value":"person_alert"},{"type":"literal","value":"person_apron"},{"type":"literal","value":"person_book"},{"type":"literal","value":"person_cancel"},{"type":"literal","value":"person_celebrate"},{"type":"literal","value":"person_check"},{"type":"literal","value":"person_edit"},{"type":"literal","value":"person_heart"},{"type":"literal","value":"person_off"},{"type":"literal","value":"person_outline"},{"type":"literal","value":"person_pin"},{"type":"literal","value":"person_pin_circle"},{"type":"literal","value":"person_play"},{"type":"literal","value":"person_raised_hand"},{"type":"literal","value":"person_remove"},{"type":"literal","value":"person_remove_alt_1"},{"type":"literal","value":"person_search"},{"type":"literal","value":"person_shield"},{"type":"literal","value":"personal_bag"},{"type":"literal","value":"personal_bag_off"},{"type":"literal","value":"personal_bag_question"},{"type":"literal","value":"personal_injury"},{"type":"literal","value":"personal_places"},{"type":"literal","value":"personal_video"},{"type":"literal","value":"pest_control"},{"type":"literal","value":"pest_control_rodent"},{"type":"literal","value":"pet_supplies"},{"type":"literal","value":"pets"},{"type":"literal","value":"phishing"},{"type":"literal","value":"phone_android"},{"type":"literal","value":"phone_bluetooth_speaker"},{"type":"literal","value":"phone_callback"},{"type":"literal","value":"phone_disabled"},{"type":"literal","value":"phone_enabled"},{"type":"literal","value":"phone_forwarded"},{"type":"literal","value":"phone_in_talk"},{"type":"literal","value":"phone_iphone"},{"type":"literal","value":"phone_locked"},{"type":"literal","value":"phone_missed"},{"type":"literal","value":"phone_paused"},{"type":"literal","value":"phonelink"},{"type":"literal","value":"phonelink_erase"},{"type":"literal","value":"phonelink_lock"},{"type":"literal","value":"phonelink_off"},{"type":"literal","value":"phonelink_ring"},{"type":"literal","value":"phonelink_setup"},{"type":"literal","value":"photo_album"},{"type":"literal","value":"photo_auto_merge"},{"type":"literal","value":"photo_camera"},{"type":"literal","value":"photo_camera_back"},{"type":"literal","value":"photo_camera_front"},{"type":"literal","value":"photo_filter"},{"type":"literal","value":"photo_frame"},{"type":"literal","value":"photo_library"},{"type":"literal","value":"photo_prints"},{"type":"literal","value":"photo_size_select_actual"},{"type":"literal","value":"photo_size_select_large"},{"type":"literal","value":"photo_size_select_small"},{"type":"literal","value":"php"},{"type":"literal","value":"physical_therapy"},{"type":"literal","value":"piano"},{"type":"literal","value":"piano_off"},{"type":"literal","value":"pickleball"},{"type":"literal","value":"picture_as_pdf"},{"type":"literal","value":"picture_in_picture"},{"type":"literal","value":"picture_in_picture_alt"},{"type":"literal","value":"picture_in_picture_center"},{"type":"literal","value":"picture_in_picture_large"},{"type":"literal","value":"picture_in_picture_medium"},{"type":"literal","value":"picture_in_picture_mobile"},{"type":"literal","value":"picture_in_picture_off"},{"type":"literal","value":"picture_in_picture_small"},{"type":"literal","value":"pie_chart"},{"type":"literal","value":"pie_chart_outline"},{"type":"literal","value":"pie_chart_outlined"},{"type":"literal","value":"pill_off"},{"type":"literal","value":"pin_drop"},{"type":"literal","value":"pin_end"},{"type":"literal","value":"pin_invoke"},{"type":"literal","value":"pinboard"},{"type":"literal","value":"pinboard_unread"},{"type":"literal","value":"pinch"},{"type":"literal","value":"pinch_zoom_in"},{"type":"literal","value":"pinch_zoom_out"},{"type":"literal","value":"pip_exit"},{"type":"literal","value":"pivot_table_chart"},{"type":"literal","value":"pix"},{"type":"literal","value":"place"},{"type":"literal","value":"place_item"},{"type":"literal","value":"plagiarism"},{"type":"literal","value":"plane_contrails"},{"type":"literal","value":"planet"},{"type":"literal","value":"planner_banner_ad_pt"},{"type":"literal","value":"planner_review"},{"type":"literal","value":"play_arrow"},{"type":"literal","value":"play_circle"},{"type":"literal","value":"play_circle_filled"},{"type":"literal","value":"play_circle_outline"},{"type":"literal","value":"play_disabled"},{"type":"literal","value":"play_for_work"},{"type":"literal","value":"play_lesson"},{"type":"literal","value":"play_pause"},{"type":"literal","value":"playground"},{"type":"literal","value":"playground_2"},{"type":"literal","value":"playing_cards"},{"type":"literal","value":"playlist_add"},{"type":"literal","value":"playlist_add_check"},{"type":"literal","value":"playlist_add_check_circle"},{"type":"literal","value":"playlist_add_circle"},{"type":"literal","value":"playlist_play"},{"type":"literal","value":"playlist_remove"},{"type":"literal","value":"plug_connect"},{"type":"literal","value":"plumbing"},{"type":"literal","value":"plus_one"},{"type":"literal","value":"podcasts"},{"type":"literal","value":"podiatry"},{"type":"literal","value":"podium"},{"type":"literal","value":"point_of_sale"},{"type":"literal","value":"point_scan"},{"type":"literal","value":"poker_chip"},{"type":"literal","value":"policy"},{"type":"literal","value":"policy_alert"},{"type":"literal","value":"poll"},{"type":"literal","value":"polymer"},{"type":"literal","value":"pool"},{"type":"literal","value":"portable_wifi_off"},{"type":"literal","value":"position_bottom_left"},{"type":"literal","value":"position_bottom_right"},{"type":"literal","value":"position_top_right"},{"type":"literal","value":"post"},{"type":"literal","value":"post_add"},{"type":"literal","value":"potted_plant"},{"type":"literal","value":"power_input"},{"type":"literal","value":"power_off"},{"type":"literal","value":"power_settings_circle"},{"type":"literal","value":"power_settings_new"},{"type":"literal","value":"prayer_times"},{"type":"literal","value":"precision_manufacturing"},{"type":"literal","value":"pregnancy"},{"type":"literal","value":"pregnant_woman"},{"type":"literal","value":"preliminary"},{"type":"literal","value":"prescriptions"},{"type":"literal","value":"present_to_all"},{"type":"literal","value":"preview"},{"type":"literal","value":"preview_off"},{"type":"literal","value":"price_change"},{"type":"literal","value":"price_check"},{"type":"literal","value":"print"},{"type":"literal","value":"print_add"},{"type":"literal","value":"print_connect"},{"type":"literal","value":"print_disabled"},{"type":"literal","value":"print_error"},{"type":"literal","value":"print_lock"},{"type":"literal","value":"priority"},{"type":"literal","value":"priority_high"},{"type":"literal","value":"privacy"},{"type":"literal","value":"privacy_tip"},{"type":"literal","value":"private_connectivity"},{"type":"literal","value":"problem"},{"type":"literal","value":"procedure"},{"type":"literal","value":"process_chart"},{"type":"literal","value":"production_quantity_limits"},{"type":"literal","value":"productivity"},{"type":"literal","value":"progress_activity"},{"type":"literal","value":"prompt_suggestion"},{"type":"literal","value":"propane"},{"type":"literal","value":"propane_tank"},{"type":"literal","value":"psychiatry"},{"type":"literal","value":"psychology"},{"type":"literal","value":"psychology_alt"},{"type":"literal","value":"public"},{"type":"literal","value":"public_off"},{"type":"literal","value":"publish"},{"type":"literal","value":"published_with_changes"},{"type":"literal","value":"pulmonology"},{"type":"literal","value":"pulse_alert"},{"type":"literal","value":"punch_clock"},{"type":"literal","value":"push_pin"},{"type":"literal","value":"qr_code"},{"type":"literal","value":"qr_code_2"},{"type":"literal","value":"qr_code_2_add"},{"type":"literal","value":"qr_code_scanner"},{"type":"literal","value":"query_builder"},{"type":"literal","value":"query_stats"},{"type":"literal","value":"question_answer"},{"type":"literal","value":"question_exchange"},{"type":"literal","value":"question_mark"},{"type":"literal","value":"queue"},{"type":"literal","value":"queue_music"},{"type":"literal","value":"queue_play_next"},{"type":"literal","value":"quick_phrases"},{"type":"literal","value":"quick_reference"},{"type":"literal","value":"quick_reference_all"},{"type":"literal","value":"quick_reorder"},{"type":"literal","value":"quickreply"},{"type":"literal","value":"quiz"},{"type":"literal","value":"r_mobiledata"},{"type":"literal","value":"radar"},{"type":"literal","value":"radio_button_checked"},{"type":"literal","value":"radio_button_partial"},{"type":"literal","value":"radio_button_unchecked"},{"type":"literal","value":"radiology"},{"type":"literal","value":"railway_alert"},{"type":"literal","value":"railway_alert_2"},{"type":"literal","value":"rainy"},{"type":"literal","value":"rainy_heavy"},{"type":"literal","value":"rainy_light"},{"type":"literal","value":"rainy_snow"},{"type":"literal","value":"ramen_dining"},{"type":"literal","value":"ramp_left"},{"type":"literal","value":"ramp_right"},{"type":"literal","value":"range_hood"},{"type":"literal","value":"rate_review"},{"type":"literal","value":"raven"},{"type":"literal","value":"raw_off"},{"type":"literal","value":"raw_on"},{"type":"literal","value":"read_more"},{"type":"literal","value":"readiness_score"},{"type":"literal","value":"real_estate_agent"},{"type":"literal","value":"rear_camera"},{"type":"literal","value":"rebase"},{"type":"literal","value":"rebase_edit"},{"type":"literal","value":"receipt_long"},{"type":"literal","value":"receipt_long_off"},{"type":"literal","value":"recent_actors"},{"type":"literal","value":"recent_patient"},{"type":"literal","value":"recenter"},{"type":"literal","value":"recommend"},{"type":"literal","value":"record_voice_over"},{"type":"literal","value":"recycling"},{"type":"literal","value":"redeem"},{"type":"literal","value":"redo"},{"type":"literal","value":"reduce_capacity"},{"type":"literal","value":"refresh"},{"type":"literal","value":"regular_expression"},{"type":"literal","value":"relax"},{"type":"literal","value":"release_alert"},{"type":"literal","value":"remember_me"},{"type":"literal","value":"reminder"},{"type":"literal","value":"remote_gen"},{"type":"literal","value":"remove"},{"type":"literal","value":"remove_circle"},{"type":"literal","value":"remove_circle_outline"},{"type":"literal","value":"remove_done"},{"type":"literal","value":"remove_from_queue"},{"type":"literal","value":"remove_moderator"},{"type":"literal","value":"remove_red_eye"},{"type":"literal","value":"remove_road"},{"type":"literal","value":"remove_selection"},{"type":"literal","value":"remove_shopping_cart"},{"type":"literal","value":"reopen_window"},{"type":"literal","value":"reorder"},{"type":"literal","value":"repartition"},{"type":"literal","value":"repeat_on"},{"type":"literal","value":"repeat_one"},{"type":"literal","value":"repeat_one_on"},{"type":"literal","value":"replace_audio"},{"type":"literal","value":"replace_image"},{"type":"literal","value":"replace_video"},{"type":"literal","value":"replay"},{"type":"literal","value":"replay_10"},{"type":"literal","value":"replay_30"},{"type":"literal","value":"replay_5"},{"type":"literal","value":"replay_circle_filled"},{"type":"literal","value":"reply"},{"type":"literal","value":"reply_all"},{"type":"literal","value":"report"},{"type":"literal","value":"report_gmailerrorred"},{"type":"literal","value":"report_off"},{"type":"literal","value":"report_problem"},{"type":"literal","value":"request_page"},{"type":"literal","value":"request_quote"},{"type":"literal","value":"reset_brightness"},{"type":"literal","value":"reset_exposure"},{"type":"literal","value":"reset_focus"},{"type":"literal","value":"reset_image"},{"type":"literal","value":"reset_iso"},{"type":"literal","value":"reset_settings"},{"type":"literal","value":"reset_shadow"},{"type":"literal","value":"reset_shutter_speed"},{"type":"literal","value":"reset_tv"},{"type":"literal","value":"reset_white_balance"},{"type":"literal","value":"reset_wrench"},{"type":"literal","value":"respiratory_rate"},{"type":"literal","value":"responsive_layout"},{"type":"literal","value":"rest_area"},{"type":"literal","value":"restart_alt"},{"type":"literal","value":"restaurant"},{"type":"literal","value":"restaurant_menu"},{"type":"literal","value":"restore"},{"type":"literal","value":"restore_from_trash"},{"type":"literal","value":"restore_page"},{"type":"literal","value":"resume"},{"type":"literal","value":"reviews"},{"type":"literal","value":"rewarded_ads"},{"type":"literal","value":"rheumatology"},{"type":"literal","value":"rib_cage"},{"type":"literal","value":"rice_bowl"},{"type":"literal","value":"right_click"},{"type":"literal","value":"right_panel_close"},{"type":"literal","value":"right_panel_open"},{"type":"literal","value":"ring_volume"},{"type":"literal","value":"ripples"},{"type":"literal","value":"road"},{"type":"literal","value":"robot"},{"type":"literal","value":"robot_2"},{"type":"literal","value":"rocket"},{"type":"literal","value":"rocket_launch"},{"type":"literal","value":"roller_shades"},{"type":"literal","value":"roller_shades_closed"},{"type":"literal","value":"roller_skating"},{"type":"literal","value":"roofing"},{"type":"literal","value":"room"},{"type":"literal","value":"room_preferences"},{"type":"literal","value":"room_service"},{"type":"literal","value":"rotate_90_degrees_ccw"},{"type":"literal","value":"rotate_90_degrees_cw"},{"type":"literal","value":"rotate_auto"},{"type":"literal","value":"rotate_left"},{"type":"literal","value":"rotate_right"},{"type":"literal","value":"roundabout_left"},{"type":"literal","value":"roundabout_right"},{"type":"literal","value":"rounded_corner"},{"type":"literal","value":"router_off"},{"type":"literal","value":"routine"},{"type":"literal","value":"rowing"},{"type":"literal","value":"rss_feed"},{"type":"literal","value":"rsvp"},{"type":"literal","value":"rtt"},{"type":"literal","value":"rubric"},{"type":"literal","value":"rule"},{"type":"literal","value":"rule_folder"},{"type":"literal","value":"rule_settings"},{"type":"literal","value":"run_circle"},{"type":"literal","value":"running_with_errors"},{"type":"literal","value":"rv_hookup"},{"type":"literal","value":"safety_check"},{"type":"literal","value":"safety_check_off"},{"type":"literal","value":"safety_divider"},{"type":"literal","value":"sailing"},{"type":"literal","value":"salinity"},{"type":"literal","value":"sanitizer"},{"type":"literal","value":"satellite"},{"type":"literal","value":"satellite_alt"},{"type":"literal","value":"sauna"},{"type":"literal","value":"save"},{"type":"literal","value":"save_alt"},{"type":"literal","value":"save_as"},{"type":"literal","value":"save_clock"},{"type":"literal","value":"saved_search"},{"type":"literal","value":"savings"},{"type":"literal","value":"scan"},{"type":"literal","value":"scan_delete"},{"type":"literal","value":"scatter_plot"},{"type":"literal","value":"schedule"},{"type":"literal","value":"schedule_send"},{"type":"literal","value":"schema"},{"type":"literal","value":"school"},{"type":"literal","value":"science"},{"type":"literal","value":"science_off"},{"type":"literal","value":"score"},{"type":"literal","value":"scoreboard"},{"type":"literal","value":"screen_lock_landscape"},{"type":"literal","value":"screen_lock_portrait"},{"type":"literal","value":"screen_lock_rotation"},{"type":"literal","value":"screen_record"},{"type":"literal","value":"screen_rotation"},{"type":"literal","value":"screen_rotation_alt"},{"type":"literal","value":"screen_rotation_up"},{"type":"literal","value":"screen_search_desktop"},{"type":"literal","value":"screen_share"},{"type":"literal","value":"screenshot"},{"type":"literal","value":"screenshot_frame"},{"type":"literal","value":"screenshot_frame_2"},{"type":"literal","value":"screenshot_keyboard"},{"type":"literal","value":"screenshot_monitor"},{"type":"literal","value":"screenshot_region"},{"type":"literal","value":"screenshot_tablet"},{"type":"literal","value":"scrollable_header"},{"type":"literal","value":"scuba_diving"},{"type":"literal","value":"sd"},{"type":"literal","value":"sd_card"},{"type":"literal","value":"sd_card_alert"},{"type":"literal","value":"sd_storage"},{"type":"literal","value":"sdk"},{"type":"literal","value":"search_activity"},{"type":"literal","value":"search_check"},{"type":"literal","value":"search_check_2"},{"type":"literal","value":"search_gear"},{"type":"literal","value":"search_hands_free"},{"type":"literal","value":"search_insights"},{"type":"literal","value":"search_off"},{"type":"literal","value":"seat_cool_left"},{"type":"literal","value":"seat_cool_right"},{"type":"literal","value":"seat_heat_left"},{"type":"literal","value":"seat_heat_right"},{"type":"literal","value":"seat_vent_left"},{"type":"literal","value":"seat_vent_right"},{"type":"literal","value":"security_key"},{"type":"literal","value":"security_update"},{"type":"literal","value":"security_update_good"},{"type":"literal","value":"security_update_warning"},{"type":"literal","value":"select_all"},{"type":"literal","value":"select_check_box"},{"type":"literal","value":"select_to_speak"},{"type":"literal","value":"select_window"},{"type":"literal","value":"select_window_2"},{"type":"literal","value":"select_window_off"},{"type":"literal","value":"self_care"},{"type":"literal","value":"self_improvement"},{"type":"literal","value":"sell"},{"type":"literal","value":"send_and_archive"},{"type":"literal","value":"send_money"},{"type":"literal","value":"send_time_extension"},{"type":"literal","value":"send_to_mobile"},{"type":"literal","value":"sensor_door"},{"type":"literal","value":"sensor_occupied"},{"type":"literal","value":"sensor_window"},{"type":"literal","value":"sensors"},{"type":"literal","value":"sensors_krx"},{"type":"literal","value":"sensors_krx_off"},{"type":"literal","value":"sensors_off"},{"type":"literal","value":"sentiment_calm"},{"type":"literal","value":"sentiment_content"},{"type":"literal","value":"sentiment_dissatisfied"},{"type":"literal","value":"sentiment_excited"},{"type":"literal","value":"sentiment_extremely_dissatisfied"},{"type":"literal","value":"sentiment_frustrated"},{"type":"literal","value":"sentiment_neutral"},{"type":"literal","value":"sentiment_sad"},{"type":"literal","value":"sentiment_satisfied"},{"type":"literal","value":"sentiment_satisfied_alt"},{"type":"literal","value":"sentiment_stressed"},{"type":"literal","value":"sentiment_very_dissatisfied"},{"type":"literal","value":"sentiment_very_satisfied"},{"type":"literal","value":"sentiment_worried"},{"type":"literal","value":"serif"},{"type":"literal","value":"server_person"},{"type":"literal","value":"service_toolbox"},{"type":"literal","value":"set_meal"},{"type":"literal","value":"settings"},{"type":"literal","value":"settings_accessibility"},{"type":"literal","value":"settings_account_box"},{"type":"literal","value":"settings_alert"},{"type":"literal","value":"settings_applications"},{"type":"literal","value":"settings_b_roll"},{"type":"literal","value":"settings_backup_restore"},{"type":"literal","value":"settings_bluetooth"},{"type":"literal","value":"settings_brightness"},{"type":"literal","value":"settings_cell"},{"type":"literal","value":"settings_cinematic_blur"},{"type":"literal","value":"settings_ethernet"},{"type":"literal","value":"settings_heart"},{"type":"literal","value":"settings_input_antenna"},{"type":"literal","value":"settings_input_component"},{"type":"literal","value":"settings_input_composite"},{"type":"literal","value":"settings_input_hdmi"},{"type":"literal","value":"settings_input_svideo"},{"type":"literal","value":"settings_motion_mode"},{"type":"literal","value":"settings_night_sight"},{"type":"literal","value":"settings_overscan"},{"type":"literal","value":"settings_panorama"},{"type":"literal","value":"settings_phone"},{"type":"literal","value":"settings_photo_camera"},{"type":"literal","value":"settings_power"},{"type":"literal","value":"settings_remote"},{"type":"literal","value":"settings_seating"},{"type":"literal","value":"settings_slow_motion"},{"type":"literal","value":"settings_suggest"},{"type":"literal","value":"settings_system_daydream"},{"type":"literal","value":"settings_timelapse"},{"type":"literal","value":"settings_video_camera"},{"type":"literal","value":"settings_voice"},{"type":"literal","value":"settop_component"},{"type":"literal","value":"severe_cold"},{"type":"literal","value":"shadow_add"},{"type":"literal","value":"shadow_minus"},{"type":"literal","value":"shape_line"},{"type":"literal","value":"shapes"},{"type":"literal","value":"share"},{"type":"literal","value":"share_eta"},{"type":"literal","value":"share_location"},{"type":"literal","value":"share_off"},{"type":"literal","value":"share_reviews"},{"type":"literal","value":"share_windows"},{"type":"literal","value":"shaved_ice"},{"type":"literal","value":"sheets_rtl"},{"type":"literal","value":"shelf_auto_hide"},{"type":"literal","value":"shelf_position"},{"type":"literal","value":"shelves"},{"type":"literal","value":"shield_lock"},{"type":"literal","value":"shield_locked"},{"type":"literal","value":"shield_moon"},{"type":"literal","value":"shield_person"},{"type":"literal","value":"shield_question"},{"type":"literal","value":"shield_toggle"},{"type":"literal","value":"shield_watch"},{"type":"literal","value":"shield_with_heart"},{"type":"literal","value":"shield_with_house"},{"type":"literal","value":"shift_lock"},{"type":"literal","value":"shift_lock_off"},{"type":"literal","value":"shop"},{"type":"literal","value":"shop_2"},{"type":"literal","value":"shop_two"},{"type":"literal","value":"shopping_bag"},{"type":"literal","value":"shopping_bag_speed"},{"type":"literal","value":"shopping_basket"},{"type":"literal","value":"shopping_cart"},{"type":"literal","value":"shopping_cart_checkout"},{"type":"literal","value":"shopping_cart_off"},{"type":"literal","value":"shoppingmode"},{"type":"literal","value":"short_stay"},{"type":"literal","value":"short_text"},{"type":"literal","value":"shortcut"},{"type":"literal","value":"show_chart"},{"type":"literal","value":"shuffle_on"},{"type":"literal","value":"shutter_speed"},{"type":"literal","value":"shutter_speed_add"},{"type":"literal","value":"shutter_speed_minus"},{"type":"literal","value":"sick"},{"type":"literal","value":"side_navigation"},{"type":"literal","value":"sign_language"},{"type":"literal","value":"signal_cellular_0_bar"},{"type":"literal","value":"signal_cellular_1_bar"},{"type":"literal","value":"signal_cellular_2_bar"},{"type":"literal","value":"signal_cellular_3_bar"},{"type":"literal","value":"signal_cellular_4_bar"},{"type":"literal","value":"signal_cellular_add"},{"type":"literal","value":"signal_cellular_alt"},{"type":"literal","value":"signal_cellular_alt_1_bar"},{"type":"literal","value":"signal_cellular_alt_2_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_0_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_1_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_2_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_3_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_4_bar"},{"type":"literal","value":"signal_cellular_no_sim"},{"type":"literal","value":"signal_cellular_nodata"},{"type":"literal","value":"signal_cellular_null"},{"type":"literal","value":"signal_cellular_off"},{"type":"literal","value":"signal_cellular_pause"},{"type":"literal","value":"signal_disconnected"},{"type":"literal","value":"signal_wifi_0_bar"},{"type":"literal","value":"signal_wifi_1_bar"},{"type":"literal","value":"signal_wifi_1_bar_lock"},{"type":"literal","value":"signal_wifi_2_bar"},{"type":"literal","value":"signal_wifi_2_bar_lock"},{"type":"literal","value":"signal_wifi_3_bar"},{"type":"literal","value":"signal_wifi_3_bar_lock"},{"type":"literal","value":"signal_wifi_4_bar"},{"type":"literal","value":"signal_wifi_4_bar_lock"},{"type":"literal","value":"signal_wifi_bad"},{"type":"literal","value":"signal_wifi_connected_no_internet_0"},{"type":"literal","value":"signal_wifi_connected_no_internet_1"},{"type":"literal","value":"signal_wifi_connected_no_internet_2"},{"type":"literal","value":"signal_wifi_connected_no_internet_3"},{"type":"literal","value":"signal_wifi_connected_no_internet_4"},{"type":"literal","value":"signal_wifi_off"},{"type":"literal","value":"signal_wifi_statusbar_1_bar"},{"type":"literal","value":"signal_wifi_statusbar_2_bar"},{"type":"literal","value":"signal_wifi_statusbar_3_bar"},{"type":"literal","value":"signal_wifi_statusbar_4_bar"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_1"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_2"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_3"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_4"},{"type":"literal","value":"signal_wifi_statusbar_not_connected"},{"type":"literal","value":"signal_wifi_statusbar_null"},{"type":"literal","value":"signpost"},{"type":"literal","value":"sim_card"},{"type":"literal","value":"sim_card_alert"},{"type":"literal","value":"sim_card_download"},{"type":"literal","value":"simulation"},{"type":"literal","value":"single_bed"},{"type":"literal","value":"sip"},{"type":"literal","value":"siren"},{"type":"literal","value":"siren_check"},{"type":"literal","value":"siren_open"},{"type":"literal","value":"siren_question"},{"type":"literal","value":"skateboarding"},{"type":"literal","value":"skeleton"},{"type":"literal","value":"skillet"},{"type":"literal","value":"skillet_cooktop"},{"type":"literal","value":"skip_next"},{"type":"literal","value":"skip_previous"},{"type":"literal","value":"skull"},{"type":"literal","value":"skull_list"},{"type":"literal","value":"slab_serif"},{"type":"literal","value":"sledding"},{"type":"literal","value":"sleep_score"},{"type":"literal","value":"slide_library"},{"type":"literal","value":"sliders"},{"type":"literal","value":"slideshow"},{"type":"literal","value":"slow_motion_video"},{"type":"literal","value":"smart_button"},{"type":"literal","value":"smart_card_reader"},{"type":"literal","value":"smart_card_reader_off"},{"type":"literal","value":"smart_display"},{"type":"literal","value":"smart_outlet"},{"type":"literal","value":"smart_screen"},{"type":"literal","value":"smart_toy"},{"type":"literal","value":"smb_share"},{"type":"literal","value":"smoke_free"},{"type":"literal","value":"smoking_rooms"},{"type":"literal","value":"sms"},{"type":"literal","value":"sms_failed"},{"type":"literal","value":"snippet_folder"},{"type":"literal","value":"snooze"},{"type":"literal","value":"snowboarding"},{"type":"literal","value":"snowing"},{"type":"literal","value":"snowing_heavy"},{"type":"literal","value":"snowmobile"},{"type":"literal","value":"snowshoeing"},{"type":"literal","value":"soap"},{"type":"literal","value":"soba"},{"type":"literal","value":"social_distance"},{"type":"literal","value":"social_leaderboard"},{"type":"literal","value":"solar_power"},{"type":"literal","value":"solo_dining"},{"type":"literal","value":"sort_by_alpha"},{"type":"literal","value":"sound_detection_dog_barking"},{"type":"literal","value":"sound_detection_glass_break"},{"type":"literal","value":"sound_detection_loud_sound"},{"type":"literal","value":"sound_sampler"},{"type":"literal","value":"soup_kitchen"},{"type":"literal","value":"source_environment"},{"type":"literal","value":"source_notes"},{"type":"literal","value":"south"},{"type":"literal","value":"south_america"},{"type":"literal","value":"south_east"},{"type":"literal","value":"south_west"},{"type":"literal","value":"spa"},{"type":"literal","value":"space_bar"},{"type":"literal","value":"space_dashboard"},{"type":"literal","value":"spatial_audio"},{"type":"literal","value":"spatial_audio_off"},{"type":"literal","value":"spatial_speaker"},{"type":"literal","value":"spatial_tracking"},{"type":"literal","value":"speaker_group"},{"type":"literal","value":"speaker_notes"},{"type":"literal","value":"speaker_notes_off"},{"type":"literal","value":"speaker_phone"},{"type":"literal","value":"special_character"},{"type":"literal","value":"specific_gravity"},{"type":"literal","value":"speech_to_text"},{"type":"literal","value":"speed_0_25"},{"type":"literal","value":"speed_0_2x"},{"type":"literal","value":"speed_0_5"},{"type":"literal","value":"speed_0_5x"},{"type":"literal","value":"speed_0_75"},{"type":"literal","value":"speed_0_7x"},{"type":"literal","value":"speed_1_2"},{"type":"literal","value":"speed_1_25"},{"type":"literal","value":"speed_1_2x"},{"type":"literal","value":"speed_1_5"},{"type":"literal","value":"speed_1_5x"},{"type":"literal","value":"speed_1_75"},{"type":"literal","value":"speed_1_7x"},{"type":"literal","value":"speed_2x"},{"type":"literal","value":"speed_camera"},{"type":"literal","value":"spellcheck"},{"type":"literal","value":"split_scene"},{"type":"literal","value":"split_scene_down"},{"type":"literal","value":"split_scene_left"},{"type":"literal","value":"split_scene_right"},{"type":"literal","value":"split_scene_up"},{"type":"literal","value":"splitscreen"},{"type":"literal","value":"splitscreen_add"},{"type":"literal","value":"splitscreen_bottom"},{"type":"literal","value":"splitscreen_landscape"},{"type":"literal","value":"splitscreen_left"},{"type":"literal","value":"splitscreen_portrait"},{"type":"literal","value":"splitscreen_right"},{"type":"literal","value":"splitscreen_top"},{"type":"literal","value":"splitscreen_vertical_add"},{"type":"literal","value":"spo2"},{"type":"literal","value":"spoke"},{"type":"literal","value":"sports"},{"type":"literal","value":"sports_and_outdoors"},{"type":"literal","value":"sports_bar"},{"type":"literal","value":"sports_baseball"},{"type":"literal","value":"sports_basketball"},{"type":"literal","value":"sports_cricket"},{"type":"literal","value":"sports_esports"},{"type":"literal","value":"sports_football"},{"type":"literal","value":"sports_golf"},{"type":"literal","value":"sports_gymnastics"},{"type":"literal","value":"sports_handball"},{"type":"literal","value":"sports_hockey"},{"type":"literal","value":"sports_kabaddi"},{"type":"literal","value":"sports_martial_arts"},{"type":"literal","value":"sports_mma"},{"type":"literal","value":"sports_motorsports"},{"type":"literal","value":"sports_rugby"},{"type":"literal","value":"sports_score"},{"type":"literal","value":"sports_soccer"},{"type":"literal","value":"sports_tennis"},{"type":"literal","value":"sports_volleyball"},{"type":"literal","value":"sprint"},{"type":"literal","value":"square_dot"},{"type":"literal","value":"square_foot"},{"type":"literal","value":"ssid_chart"},{"type":"literal","value":"stack_group"},{"type":"literal","value":"stack_hexagon"},{"type":"literal","value":"stack_off"},{"type":"literal","value":"stack_star"},{"type":"literal","value":"stacked_bar_chart"},{"type":"literal","value":"stacked_email"},{"type":"literal","value":"stacked_inbox"},{"type":"literal","value":"stacked_line_chart"},{"type":"literal","value":"stacks"},{"type":"literal","value":"stadia_controller"},{"type":"literal","value":"stadium"},{"type":"literal","value":"stairs_2"},{"type":"literal","value":"star_border"},{"type":"literal","value":"star_border_purple500"},{"type":"literal","value":"star_half"},{"type":"literal","value":"star_outline"},{"type":"literal","value":"star_purple500"},{"type":"literal","value":"star_rate"},{"type":"literal","value":"star_rate_half"},{"type":"literal","value":"star_shine"},{"type":"literal","value":"stars"},{"type":"literal","value":"stars_2"},{"type":"literal","value":"stat_0"},{"type":"literal","value":"stat_1"},{"type":"literal","value":"stat_2"},{"type":"literal","value":"stat_3"},{"type":"literal","value":"stat_minus_1"},{"type":"literal","value":"stat_minus_2"},{"type":"literal","value":"stat_minus_3"},{"type":"literal","value":"stay_current_landscape"},{"type":"literal","value":"stay_current_portrait"},{"type":"literal","value":"stay_primary_landscape"},{"type":"literal","value":"stay_primary_portrait"},{"type":"literal","value":"steering_wheel_heat"},{"type":"literal","value":"step_into"},{"type":"literal","value":"step_out"},{"type":"literal","value":"step_over"},{"type":"literal","value":"steppers"},{"type":"literal","value":"steps"},{"type":"literal","value":"stethoscope_arrow"},{"type":"literal","value":"stethoscope_check"},{"type":"literal","value":"sticky_note"},{"type":"literal","value":"sticky_note_2"},{"type":"literal","value":"stock_media"},{"type":"literal","value":"stockpot"},{"type":"literal","value":"stop_circle"},{"type":"literal","value":"stop_screen_share"},{"type":"literal","value":"store"},{"type":"literal","value":"store_mall_directory"},{"type":"literal","value":"storm"},{"type":"literal","value":"straight"},{"type":"literal","value":"straighten"},{"type":"literal","value":"strategy"},{"type":"literal","value":"stream"},{"type":"literal","value":"streetview"},{"type":"literal","value":"stress_management"},{"type":"literal","value":"strikethrough_s"},{"type":"literal","value":"stroke_full"},{"type":"literal","value":"stroke_partial"},{"type":"literal","value":"styler"},{"type":"literal","value":"stylus"},{"type":"literal","value":"stylus_brush"},{"type":"literal","value":"stylus_fountain_pen"},{"type":"literal","value":"stylus_highlighter"},{"type":"literal","value":"stylus_laser_pointer"},{"type":"literal","value":"stylus_note"},{"type":"literal","value":"stylus_pen"},{"type":"literal","value":"stylus_pencil"},{"type":"literal","value":"subdirectory_arrow_left"},{"type":"literal","value":"subdirectory_arrow_right"},{"type":"literal","value":"subheader"},{"type":"literal","value":"subject"},{"type":"literal","value":"subscript"},{"type":"literal","value":"subscriptions"},{"type":"literal","value":"subtitles"},{"type":"literal","value":"subtitles_gear"},{"type":"literal","value":"subtitles_off"},{"type":"literal","value":"subway"},{"type":"literal","value":"subway_walk"},{"type":"literal","value":"summarize"},{"type":"literal","value":"sunny"},{"type":"literal","value":"sunny_snowing"},{"type":"literal","value":"superscript"},{"type":"literal","value":"supervised_user_circle"},{"type":"literal","value":"supervised_user_circle_off"},{"type":"literal","value":"supervisor_account"},{"type":"literal","value":"support"},{"type":"literal","value":"support_agent"},{"type":"literal","value":"surfing"},{"type":"literal","value":"surgical"},{"type":"literal","value":"surround_sound"},{"type":"literal","value":"swap_calls"},{"type":"literal","value":"swap_driving_apps"},{"type":"literal","value":"swap_driving_apps_wheel"},{"type":"literal","value":"swap_horiz"},{"type":"literal","value":"swap_horizontal_circle"},{"type":"literal","value":"swap_vert"},{"type":"literal","value":"swap_vertical_circle"},{"type":"literal","value":"sweep"},{"type":"literal","value":"swipe"},{"type":"literal","value":"swipe_down"},{"type":"literal","value":"swipe_down_alt"},{"type":"literal","value":"swipe_left"},{"type":"literal","value":"swipe_left_alt"},{"type":"literal","value":"swipe_right"},{"type":"literal","value":"swipe_right_alt"},{"type":"literal","value":"swipe_up"},{"type":"literal","value":"swipe_up_alt"},{"type":"literal","value":"swipe_vertical"},{"type":"literal","value":"switch_access"},{"type":"literal","value":"switch_access_2"},{"type":"literal","value":"switch_access_3"},{"type":"literal","value":"switch_access_shortcut"},{"type":"literal","value":"switch_access_shortcut_add"},{"type":"literal","value":"switch_account"},{"type":"literal","value":"switch_camera"},{"type":"literal","value":"switch_left"},{"type":"literal","value":"switch_right"},{"type":"literal","value":"switch_video"},{"type":"literal","value":"switches"},{"type":"literal","value":"sword_rose"},{"type":"literal","value":"swords"},{"type":"literal","value":"symptoms"},{"type":"literal","value":"synagogue"},{"type":"literal","value":"sync_alt"},{"type":"literal","value":"sync_arrow_down"},{"type":"literal","value":"sync_arrow_up"},{"type":"literal","value":"sync_desktop"},{"type":"literal","value":"sync_disabled"},{"type":"literal","value":"sync_lock"},{"type":"literal","value":"sync_problem"},{"type":"literal","value":"sync_saved_locally"},{"type":"literal","value":"sync_saved_locally_off"},{"type":"literal","value":"system_security_update"},{"type":"literal","value":"system_security_update_good"},{"type":"literal","value":"system_security_update_warning"},{"type":"literal","value":"system_update"},{"type":"literal","value":"system_update_alt"},{"type":"literal","value":"tab_close"},{"type":"literal","value":"tab_close_inactive"},{"type":"literal","value":"tab_close_right"},{"type":"literal","value":"tab_duplicate"},{"type":"literal","value":"tab_group"},{"type":"literal","value":"tab_inactive"},{"type":"literal","value":"tab_move"},{"type":"literal","value":"tab_new_right"},{"type":"literal","value":"tab_recent"},{"type":"literal","value":"tab_search"},{"type":"literal","value":"tab_unselected"},{"type":"literal","value":"table_bar"},{"type":"literal","value":"table_chart"},{"type":"literal","value":"table_chart_view"},{"type":"literal","value":"table_convert"},{"type":"literal","value":"table_edit"},{"type":"literal","value":"table_eye"},{"type":"literal","value":"table_lamp"},{"type":"literal","value":"table_large"},{"type":"literal","value":"table_restaurant"},{"type":"literal","value":"table_rows"},{"type":"literal","value":"table_rows_narrow"},{"type":"literal","value":"table_sign"},{"type":"literal","value":"table_view"},{"type":"literal","value":"tablet"},{"type":"literal","value":"tablet_android"},{"type":"literal","value":"tablet_camera"},{"type":"literal","value":"tablet_mac"},{"type":"literal","value":"tactic"},{"type":"literal","value":"tag_faces"},{"type":"literal","value":"takeout_dining"},{"type":"literal","value":"takeout_dining_2"},{"type":"literal","value":"tamper_detection_off"},{"type":"literal","value":"tamper_detection_on"},{"type":"literal","value":"tap_and_play"},{"type":"literal","value":"tapas"},{"type":"literal","value":"task"},{"type":"literal","value":"task_alt"},{"type":"literal","value":"tatami_seat"},{"type":"literal","value":"taunt"},{"type":"literal","value":"taxi_alert"},{"type":"literal","value":"team_dashboard"},{"type":"literal","value":"temp_preferences_eco"},{"type":"literal","value":"temple_buddhist"},{"type":"literal","value":"temple_hindu"},{"type":"literal","value":"tenancy"},{"type":"literal","value":"terrain"},{"type":"literal","value":"text_ad"},{"type":"literal","value":"text_compare"},{"type":"literal","value":"text_decrease"},{"type":"literal","value":"text_fields"},{"type":"literal","value":"text_fields_alt"},{"type":"literal","value":"text_format"},{"type":"literal","value":"text_increase"},{"type":"literal","value":"text_rotate_up"},{"type":"literal","value":"text_rotate_vertical"},{"type":"literal","value":"text_rotation_angledown"},{"type":"literal","value":"text_rotation_angleup"},{"type":"literal","value":"text_rotation_down"},{"type":"literal","value":"text_rotation_none"},{"type":"literal","value":"text_select_end"},{"type":"literal","value":"text_select_jump_to_beginning"},{"type":"literal","value":"text_select_jump_to_end"},{"type":"literal","value":"text_select_move_back_character"},{"type":"literal","value":"text_select_move_back_word"},{"type":"literal","value":"text_select_move_down"},{"type":"literal","value":"text_select_move_forward_character"},{"type":"literal","value":"text_select_move_forward_word"},{"type":"literal","value":"text_select_move_up"},{"type":"literal","value":"text_select_start"},{"type":"literal","value":"text_snippet"},{"type":"literal","value":"text_to_speech"},{"type":"literal","value":"text_up"},{"type":"literal","value":"textsms"},{"type":"literal","value":"texture"},{"type":"literal","value":"texture_add"},{"type":"literal","value":"texture_minus"},{"type":"literal","value":"theater_comedy"},{"type":"literal","value":"theaters"},{"type":"literal","value":"thermometer_add"},{"type":"literal","value":"thermometer_gain"},{"type":"literal","value":"thermometer_loss"},{"type":"literal","value":"thermometer_minus"},{"type":"literal","value":"thermostat"},{"type":"literal","value":"thermostat_arrow_down"},{"type":"literal","value":"thermostat_arrow_up"},{"type":"literal","value":"thermostat_auto"},{"type":"literal","value":"thermostat_carbon"},{"type":"literal","value":"things_to_do"},{"type":"literal","value":"thread_unread"},{"type":"literal","value":"threat_intelligence"},{"type":"literal","value":"thumb_down"},{"type":"literal","value":"thumb_down_alt"},{"type":"literal","value":"thumb_down_off_alt"},{"type":"literal","value":"thumb_up"},{"type":"literal","value":"thumb_up_alt"},{"type":"literal","value":"thumb_up_off_alt"},{"type":"literal","value":"thumbnail_bar"},{"type":"literal","value":"thumbs_up_double"},{"type":"literal","value":"thumbs_up_down"},{"type":"literal","value":"thunderstorm"},{"type":"literal","value":"tibia"},{"type":"literal","value":"tibia_alt"},{"type":"literal","value":"tile_large"},{"type":"literal","value":"tile_medium"},{"type":"literal","value":"tile_small"},{"type":"literal","value":"time_auto"},{"type":"literal","value":"time_to_leave"},{"type":"literal","value":"timeline"},{"type":"literal","value":"timer_1"},{"type":"literal","value":"timer_10"},{"type":"literal","value":"timer_10_alt_1"},{"type":"literal","value":"timer_10_select"},{"type":"literal","value":"timer_2"},{"type":"literal","value":"timer_3"},{"type":"literal","value":"timer_3_alt_1"},{"type":"literal","value":"timer_3_select"},{"type":"literal","value":"timer_5"},{"type":"literal","value":"timer_5_shutter"},{"type":"literal","value":"timer_arrow_down"},{"type":"literal","value":"timer_arrow_up"},{"type":"literal","value":"timer_off"},{"type":"literal","value":"timer_pause"},{"type":"literal","value":"timer_play"},{"type":"literal","value":"tips_and_updates"},{"type":"literal","value":"tire_repair"},{"type":"literal","value":"titlecase"},{"type":"literal","value":"toc"},{"type":"literal","value":"today"},{"type":"literal","value":"toggle_off"},{"type":"literal","value":"toggle_on"},{"type":"literal","value":"token"},{"type":"literal","value":"toll"},{"type":"literal","value":"tonality"},{"type":"literal","value":"tonality_2"},{"type":"literal","value":"tools_flat_head"},{"type":"literal","value":"tools_installation_kit"},{"type":"literal","value":"tools_ladder"},{"type":"literal","value":"tools_level"},{"type":"literal","value":"tools_phillips"},{"type":"literal","value":"tools_pliers_wire_stripper"},{"type":"literal","value":"tools_power_drill"},{"type":"literal","value":"tooltip_2"},{"type":"literal","value":"top_panel_close"},{"type":"literal","value":"top_panel_open"},{"type":"literal","value":"topic"},{"type":"literal","value":"total_dissolved_solids"},{"type":"literal","value":"touch_app"},{"type":"literal","value":"touch_double"},{"type":"literal","value":"touch_long"},{"type":"literal","value":"touch_triple"},{"type":"literal","value":"touchpad_mouse"},{"type":"literal","value":"touchpad_mouse_off"},{"type":"literal","value":"tour"},{"type":"literal","value":"toys"},{"type":"literal","value":"toys_and_games"},{"type":"literal","value":"toys_fan"},{"type":"literal","value":"track_changes"},{"type":"literal","value":"trackpad_input"},{"type":"literal","value":"trackpad_input_2"},{"type":"literal","value":"trackpad_input_3"},{"type":"literal","value":"traffic"},{"type":"literal","value":"traffic_jam"},{"type":"literal","value":"trail_length"},{"type":"literal","value":"trail_length_medium"},{"type":"literal","value":"trail_length_short"},{"type":"literal","value":"train"},{"type":"literal","value":"transcribe"},{"type":"literal","value":"transfer_within_a_station"},{"type":"literal","value":"transgender"},{"type":"literal","value":"transit_enterexit"},{"type":"literal","value":"transit_ticket"},{"type":"literal","value":"transition_chop"},{"type":"literal","value":"transition_dissolve"},{"type":"literal","value":"transition_fade"},{"type":"literal","value":"transition_push"},{"type":"literal","value":"transition_slide"},{"type":"literal","value":"translate_indic"},{"type":"literal","value":"transportation"},{"type":"literal","value":"travel"},{"type":"literal","value":"travel_explore"},{"type":"literal","value":"travel_luggage_and_bags"},{"type":"literal","value":"trending_down"},{"type":"literal","value":"trending_flat"},{"type":"literal","value":"trending_up"},{"type":"literal","value":"trip"},{"type":"literal","value":"trip_origin"},{"type":"literal","value":"trolley"},{"type":"literal","value":"trolley_cable_car"},{"type":"literal","value":"troubleshoot"},{"type":"literal","value":"try"},{"type":"literal","value":"tsunami"},{"type":"literal","value":"tsv"},{"type":"literal","value":"tty"},{"type":"literal","value":"tune"},{"type":"literal","value":"tungsten"},{"type":"literal","value":"turn_left"},{"type":"literal","value":"turn_right"},{"type":"literal","value":"turn_sharp_left"},{"type":"literal","value":"turn_sharp_right"},{"type":"literal","value":"turn_slight_left"},{"type":"literal","value":"turn_slight_right"},{"type":"literal","value":"turned_in"},{"type":"literal","value":"turned_in_not"},{"type":"literal","value":"tv_displays"},{"type":"literal","value":"tv_gen"},{"type":"literal","value":"tv_guide"},{"type":"literal","value":"tv_next"},{"type":"literal","value":"tv_off"},{"type":"literal","value":"tv_options_edit_channels"},{"type":"literal","value":"tv_options_input_settings"},{"type":"literal","value":"tv_remote"},{"type":"literal","value":"tv_signin"},{"type":"literal","value":"tv_with_assistant"},{"type":"literal","value":"two_pager"},{"type":"literal","value":"two_pager_store"},{"type":"literal","value":"two_wheeler"},{"type":"literal","value":"type_specimen"},{"type":"literal","value":"u_turn_left"},{"type":"literal","value":"u_turn_right"},{"type":"literal","value":"udon"},{"type":"literal","value":"ulna_radius"},{"type":"literal","value":"ulna_radius_alt"},{"type":"literal","value":"unarchive"},{"type":"literal","value":"undo"},{"type":"literal","value":"unfold_less"},{"type":"literal","value":"unfold_less_double"},{"type":"literal","value":"unfold_more"},{"type":"literal","value":"unfold_more_double"},{"type":"literal","value":"ungroup"},{"type":"literal","value":"universal_currency"},{"type":"literal","value":"universal_currency_alt"},{"type":"literal","value":"universal_local"},{"type":"literal","value":"unknown_2"},{"type":"literal","value":"unknown_5"},{"type":"literal","value":"unknown_7"},{"type":"literal","value":"unknown_document"},{"type":"literal","value":"unknown_med"},{"type":"literal","value":"unlicense"},{"type":"literal","value":"unpaved_road"},{"type":"literal","value":"unpublished"},{"type":"literal","value":"unsubscribe"},{"type":"literal","value":"upcoming"},{"type":"literal","value":"update"},{"type":"literal","value":"update_disabled"},{"type":"literal","value":"upgrade"},{"type":"literal","value":"upi_pay"},{"type":"literal","value":"upload"},{"type":"literal","value":"upload_2"},{"type":"literal","value":"upload_file"},{"type":"literal","value":"urology"},{"type":"literal","value":"usb"},{"type":"literal","value":"usb_off"},{"type":"literal","value":"user_attributes"},{"type":"literal","value":"vaccines"},{"type":"literal","value":"vacuum"},{"type":"literal","value":"valve"},{"type":"literal","value":"vape_free"},{"type":"literal","value":"vaping_rooms"},{"type":"literal","value":"variable_add"},{"type":"literal","value":"variable_insert"},{"type":"literal","value":"variable_remove"},{"type":"literal","value":"variables"},{"type":"literal","value":"ventilator"},{"type":"literal","value":"verified"},{"type":"literal","value":"verified_off"},{"type":"literal","value":"verified_user"},{"type":"literal","value":"vertical_align_bottom"},{"type":"literal","value":"vertical_align_center"},{"type":"literal","value":"vertical_align_top"},{"type":"literal","value":"vertical_distribute"},{"type":"literal","value":"vertical_shades"},{"type":"literal","value":"vertical_shades_closed"},{"type":"literal","value":"vertical_split"},{"type":"literal","value":"vibration"},{"type":"literal","value":"video_call"},{"type":"literal","value":"video_camera_back"},{"type":"literal","value":"video_camera_back_add"},{"type":"literal","value":"video_camera_front"},{"type":"literal","value":"video_camera_front_off"},{"type":"literal","value":"video_chat"},{"type":"literal","value":"video_file"},{"type":"literal","value":"video_label"},{"type":"literal","value":"video_library"},{"type":"literal","value":"video_search"},{"type":"literal","value":"video_settings"},{"type":"literal","value":"video_stable"},{"type":"literal","value":"videocam"},{"type":"literal","value":"videocam_alert"},{"type":"literal","value":"videocam_off"},{"type":"literal","value":"videogame_asset"},{"type":"literal","value":"videogame_asset_off"},{"type":"literal","value":"view_agenda"},{"type":"literal","value":"view_apps"},{"type":"literal","value":"view_array"},{"type":"literal","value":"view_carousel"},{"type":"literal","value":"view_column"},{"type":"literal","value":"view_column_2"},{"type":"literal","value":"view_comfy"},{"type":"literal","value":"view_comfy_alt"},{"type":"literal","value":"view_compact"},{"type":"literal","value":"view_compact_alt"},{"type":"literal","value":"view_cozy"},{"type":"literal","value":"view_day"},{"type":"literal","value":"view_headline"},{"type":"literal","value":"view_in_ar"},{"type":"literal","value":"view_in_ar_off"},{"type":"literal","value":"view_kanban"},{"type":"literal","value":"view_list"},{"type":"literal","value":"view_module"},{"type":"literal","value":"view_object_track"},{"type":"literal","value":"view_quilt"},{"type":"literal","value":"view_real_size"},{"type":"literal","value":"view_sidebar"},{"type":"literal","value":"view_stream"},{"type":"literal","value":"view_timeline"},{"type":"literal","value":"view_week"},{"type":"literal","value":"vignette"},{"type":"literal","value":"vignette_2"},{"type":"literal","value":"villa"},{"type":"literal","value":"visibility_lock"},{"type":"literal","value":"visibility_off"},{"type":"literal","value":"vital_signs"},{"type":"literal","value":"vo2_max"},{"type":"literal","value":"voice_chat"},{"type":"literal","value":"voice_over_off"},{"type":"literal","value":"voice_selection"},{"type":"literal","value":"voice_selection_off"},{"type":"literal","value":"voicemail"},{"type":"literal","value":"voicemail_2"},{"type":"literal","value":"volcano"},{"type":"literal","value":"volume_down"},{"type":"literal","value":"volume_down_alt"},{"type":"literal","value":"volume_mute"},{"type":"literal","value":"volume_off"},{"type":"literal","value":"volume_up"},{"type":"literal","value":"volunteer_activism"},{"type":"literal","value":"voting_chip"},{"type":"literal","value":"vpn_key"},{"type":"literal","value":"vpn_key_alert"},{"type":"literal","value":"vpn_key_off"},{"type":"literal","value":"vpn_lock"},{"type":"literal","value":"vpn_lock_2"},{"type":"literal","value":"vr180_create2d"},{"type":"literal","value":"vr180_create2d_off"},{"type":"literal","value":"vrpano"},{"type":"literal","value":"wall_art"},{"type":"literal","value":"wall_lamp"},{"type":"literal","value":"wallet"},{"type":"literal","value":"wallpaper"},{"type":"literal","value":"wallpaper_slideshow"},{"type":"literal","value":"wand_shine"},{"type":"literal","value":"wand_stars"},{"type":"literal","value":"ward"},{"type":"literal","value":"warehouse"},{"type":"literal","value":"warning_amber"},{"type":"literal","value":"warning_off"},{"type":"literal","value":"wash"},{"type":"literal","value":"washoku"},{"type":"literal","value":"watch"},{"type":"literal","value":"watch_arrow"},{"type":"literal","value":"watch_button_press"},{"type":"literal","value":"watch_check"},{"type":"literal","value":"watch_later"},{"type":"literal","value":"watch_off"},{"type":"literal","value":"watch_screentime"},{"type":"literal","value":"watch_vibration"},{"type":"literal","value":"watch_wake"},{"type":"literal","value":"water"},{"type":"literal","value":"water_bottle"},{"type":"literal","value":"water_bottle_large"},{"type":"literal","value":"water_damage"},{"type":"literal","value":"water_do"},{"type":"literal","value":"water_drop"},{"type":"literal","value":"water_ec"},{"type":"literal","value":"water_full"},{"type":"literal","value":"water_heater"},{"type":"literal","value":"water_lock"},{"type":"literal","value":"water_loss"},{"type":"literal","value":"water_lux"},{"type":"literal","value":"water_medium"},{"type":"literal","value":"water_orp"},{"type":"literal","value":"water_ph"},{"type":"literal","value":"water_pump"},{"type":"literal","value":"water_voc"},{"type":"literal","value":"waterfall_chart"},{"type":"literal","value":"waves"},{"type":"literal","value":"waving_hand"},{"type":"literal","value":"wb_auto"},{"type":"literal","value":"wb_cloudy"},{"type":"literal","value":"wb_incandescent"},{"type":"literal","value":"wb_iridescent"},{"type":"literal","value":"wb_shade"},{"type":"literal","value":"wb_sunny"},{"type":"literal","value":"wb_twighlight"},{"type":"literal","value":"wb_twilight"},{"type":"literal","value":"wc"},{"type":"literal","value":"weather_hail"},{"type":"literal","value":"weather_mix"},{"type":"literal","value":"weather_snowy"},{"type":"literal","value":"web_asset"},{"type":"literal","value":"web_asset_off"},{"type":"literal","value":"web_stories"},{"type":"literal","value":"web_traffic"},{"type":"literal","value":"webhook"},{"type":"literal","value":"weekend"},{"type":"literal","value":"weight"},{"type":"literal","value":"west"},{"type":"literal","value":"whatshot"},{"type":"literal","value":"wheelchair_pickup"},{"type":"literal","value":"where_to_vote"},{"type":"literal","value":"widget_medium"},{"type":"literal","value":"widget_small"},{"type":"literal","value":"widget_width"},{"type":"literal","value":"widgets"},{"type":"literal","value":"width_full"},{"type":"literal","value":"width_normal"},{"type":"literal","value":"width_wide"},{"type":"literal","value":"wifi_1_bar"},{"type":"literal","value":"wifi_2_bar"},{"type":"literal","value":"wifi_add"},{"type":"literal","value":"wifi_calling"},{"type":"literal","value":"wifi_calling_1"},{"type":"literal","value":"wifi_calling_2"},{"type":"literal","value":"wifi_calling_3"},{"type":"literal","value":"wifi_calling_bar_1"},{"type":"literal","value":"wifi_calling_bar_2"},{"type":"literal","value":"wifi_calling_bar_3"},{"type":"literal","value":"wifi_channel"},{"type":"literal","value":"wifi_find"},{"type":"literal","value":"wifi_home"},{"type":"literal","value":"wifi_lock"},{"type":"literal","value":"wifi_notification"},{"type":"literal","value":"wifi_off"},{"type":"literal","value":"wifi_password"},{"type":"literal","value":"wifi_protected_setup"},{"type":"literal","value":"wifi_proxy"},{"type":"literal","value":"wifi_tethering"},{"type":"literal","value":"wifi_tethering_error"},{"type":"literal","value":"wifi_tethering_off"},{"type":"literal","value":"wind_power"},{"type":"literal","value":"window_closed"},{"type":"literal","value":"window_open"},{"type":"literal","value":"window_sensor"},{"type":"literal","value":"windshield_defrost_auto"},{"type":"literal","value":"windshield_defrost_front"},{"type":"literal","value":"windshield_defrost_rear"},{"type":"literal","value":"windshield_heat_front"},{"type":"literal","value":"wine_bar"},{"type":"literal","value":"woman"},{"type":"literal","value":"woman_2"},{"type":"literal","value":"work"},{"type":"literal","value":"work_alert"},{"type":"literal","value":"work_history"},{"type":"literal","value":"work_off"},{"type":"literal","value":"work_outline"},{"type":"literal","value":"work_update"},{"type":"literal","value":"workspace_premium"},{"type":"literal","value":"workspaces"},{"type":"literal","value":"workspaces_filled"},{"type":"literal","value":"workspaces_outline"},{"type":"literal","value":"wounds_injuries"},{"type":"literal","value":"wrap_text"},{"type":"literal","value":"wrist"},{"type":"literal","value":"wrong_location"},{"type":"literal","value":"wysiwyg"},{"type":"literal","value":"yakitori"},{"type":"literal","value":"yard"},{"type":"literal","value":"yoshoku"},{"type":"literal","value":"your_trips"},{"type":"literal","value":"youtube_activity"},{"type":"literal","value":"youtube_searched_for"},{"type":"literal","value":"zone_person_alert"},{"type":"literal","value":"zone_person_idle"},{"type":"literal","value":"zone_person_urgent"},{"type":"literal","value":"zoom_in"},{"type":"literal","value":"zoom_in_map"},{"type":"literal","value":"zoom_out"},{"type":"literal","value":"zoom_out_map"}]}}]},{"name":"NativeTabsBottomAccessoryProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]},{"name":"NativeTabsProps","variant":"declaration","kind":256,"children":[{"name":"backBehavior","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The behavior when navigating back with the back button."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"history"},{"type":"literal","value":"initialRoute"},{"type":"literal","value":"none"}]}},{"name":"backgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The background color of the tab bar."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"badgeBackgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The background color of every badge in the tab bar."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"badgeTextColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the badge text."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"blurEffect","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The blur effect applied to the tab bar."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"none"},{"type":"literal","value":"regular"},{"type":"literal","value":"light"},{"type":"literal","value":"dark"},{"type":"literal","value":"systemDefault"},{"type":"literal","value":"extraLight"},{"type":"literal","value":"prominent"},{"type":"literal","value":"systemUltraThinMaterial"},{"type":"literal","value":"systemThinMaterial"},{"type":"literal","value":"systemMaterial"},{"type":"literal","value":"systemThickMaterial"},{"type":"literal","value":"systemChromeMaterial"},{"type":"literal","value":"systemUltraThinMaterialLight"},{"type":"literal","value":"systemThinMaterialLight"},{"type":"literal","value":"systemMaterialLight"},{"type":"literal","value":"systemThickMaterialLight"},{"type":"literal","value":"systemChromeMaterialLight"},{"type":"literal","value":"systemUltraThinMaterialDark"},{"type":"literal","value":"systemThinMaterialDark"},{"type":"literal","value":"systemMaterialDark"},{"type":"literal","value":"systemThickMaterialDark"},{"type":"literal","value":"systemChromeMaterialDark"}]}},{"name":"disableIndicator","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Disables the active indicator for the tab bar."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableTransparentOnScrollEdge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab bar will not become transparent when scrolled to the edge."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", hides the tab bar."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"iconColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of every tab icon in the tab bar."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ColorValue | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ColorValue | undefined"}}]}}]}},{"name":"indicatorColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the tab indicator."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"labelStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The style of the every tab label in the tab bar."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}},{"name":"selected","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}}]}}]}},{"name":"labelVisibilityMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The visibility mode of the tab item label."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"auto"},{"type":"literal","value":"selected"},{"type":"literal","value":"labeled"},{"type":"literal","value":"unlabeled"}]}},{"name":"minimizeBehavior","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Specifies the minimize behavior for the tab bar.\n\nAvailable starting from iOS 26.\n\nThe following values are currently supported:\n\n- "},{"kind":"code","text":"`automatic`"},{"kind":"text","text":" - resolves to the system default minimize behavior\n- "},{"kind":"code","text":"`never`"},{"kind":"text","text":" - the tab bar does not minimize\n- "},{"kind":"code","text":"`onScrollDown`"},{"kind":"text","text":" - the tab bar minimizes when scrolling down and\n expands when scrolling back up\n- "},{"kind":"code","text":"`onScrollUp`"},{"kind":"text","text":" - the tab bar minimizes when scrolling up and expands\n when scrolling back down"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)."}]},{"tag":"@default","content":[{"kind":"text","text":"automatic"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"never"},{"type":"literal","value":"onScrollDown"},{"type":"literal","value":"onScrollUp"}]}},{"name":"rippleColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the ripple effect when the tab is pressed."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"screenListeners","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Listeners for navigation events on all tabs.\n\nSupported events:\n- "},{"kind":"code","text":"`tabPress`"},{"kind":"text","text":" - called when a tab is pressed\n- "},{"kind":"code","text":"`focus`"},{"kind":"text","text":" - called when the screen comes into focus\n- "},{"kind":"code","text":"`blur`"},{"kind":"text","text":" - called when the screen loses focus"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n {\n console.log('Any tab pressed');\n },\n }}\n>\n ...\n\n```"}]}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"prop","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenListeners"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"}],"name":"ScreenListeners","package":"expo-router"}}]}},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"beforeRemove","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"beforeRemove"},{"type":"literal","value":true}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"blur","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"blur"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"focus","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"focus"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"state"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"tabPress","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"tabPress"},{"type":"literal","value":false}],"name":"EventListenerCallback","package":"expo-router"}}]}}],"name":"Partial","package":"typescript"}]}},{"name":"shadowColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the shadow."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uibarappearance/shadowcolor)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"sidebarAdaptable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", enables the sidebarAdaptable tab bar style on iPadOS and macOS. This prop has no effect on iPhone."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS 18+"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"tintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The tint color of the tab icon.\n\nCan be overridden by icon color and label color for each tab individually."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"titlePositionAdjustment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/titlepositionadjustment)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"vertical","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"unstable_nativeProps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying native tab host implementation in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":".\nUse this to configure props that are not directly exposed by Expo Router.\n\n> **Note**: This is an unstable API and may change or be removed in minor versions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/host/TabsHost.types.ts","qualifiedName":"TabsHostProps"},"name":"TabsHostProps","package":"react-native-screens"},{"type":"union","types":[{"type":"literal","value":"children"},{"type":"literal","value":"navStateRequest"},{"type":"literal","value":"onTabSelected"}]}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}}],"extendedTypes":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.PropsWithChildren"},"name":"PropsWithChildren","package":"@types/react","qualifiedName":"React.PropsWithChildren"}]},{"name":"NativeTabsTriggerBadgeProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text to display as the badge for the tab.\nIf not provided, the badge will not be displayed."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the badge will be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"selectedBackgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]},{"name":"NativeTabsTriggerLabelProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text to display as the label for the tab."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the label will be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"selectedStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}}]},{"name":"NativeTabTriggerProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The children of the trigger.\n\nUse "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":", "},{"kind":"code","text":"`Label`"},{"kind":"text","text":", and "},{"kind":"code","text":"`Badge`"},{"kind":"text","text":" components to customize the tab."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"contentStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The style applied to the content of the tab\n\nNote: Only certain style properties are supported."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Pick"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"ViewStyle"},"name":"ViewStyle","package":"react-native"},{"type":"union","types":[{"type":"literal","value":"backgroundColor"},{"type":"literal","value":"experimental_backgroundImage"},{"type":"literal","value":"alignContent"},{"type":"literal","value":"alignItems"},{"type":"literal","value":"flexDirection"},{"type":"literal","value":"gap"},{"type":"literal","value":"justifyContent"},{"type":"literal","value":"padding"},{"type":"literal","value":"paddingBottom"},{"type":"literal","value":"paddingEnd"},{"type":"literal","value":"paddingHorizontal"},{"type":"literal","value":"paddingLeft"},{"type":"literal","value":"paddingRight"},{"type":"literal","value":"paddingStart"},{"type":"literal","value":"paddingTop"},{"type":"literal","value":"paddingVertical"},{"type":"literal","value":"paddingBlock"},{"type":"literal","value":"paddingBlockEnd"},{"type":"literal","value":"paddingBlockStart"},{"type":"literal","value":"paddingInline"},{"type":"literal","value":"paddingInlineEnd"},{"type":"literal","value":"paddingInlineStart"}]}],"name":"Pick","package":"typescript"}},{"name":"disableAutomaticContentInsets","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The default behavior differs between iOS and Android.\n\nOn **Android**, the content of a native tabs screen is automatically wrapped in a "},{"kind":"code","text":"`SafeAreaView`"},{"kind":"text","text":",\nand the **bottom** inset is applied. Other insets must be handled manually.\n\nOn **iOS**, the first scroll view nested inside a native tabs screen has\n[automatic content inset adjustment](https://reactnative.dev/docs/scrollview#contentinsetadjustmentbehavior-ios) enabled\n\nWhen this property is set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", automatic content inset adjustment is disabled for the screen\nand must be managed manually. You can use "},{"kind":"code","text":"`SafeAreaView`"},{"kind":"text","text":" from "},{"kind":"code","text":"`react-native-screens/experimental`"},{"kind":"text","text":"\nto handle safe area insets."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab is shown but cannot be selected by tapping it in the\ntab bar.\n\n> **Note:** This only suppresses the native tap interaction. It is not a\n> \"protected\" or authorization gate - JavaScript navigation such as\n> "},{"kind":"code","text":"`router.push()`"},{"kind":"text","text":" or "},{"kind":"code","text":"``"},{"kind":"text","text":" still navigates to the tab. Use this for\n> tabs that should appear visible but be temporarily inert (for example,\n> while a flow is in progress), and gate navigation in your own code if\n> you need to fully prevent access.\n\nUnlike "},{"kind":"code","text":"`hidden`"},{"kind":"text","text":", the tab remains visible in the tab bar."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disablePopToTop","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will not pop stack to the root when selected again."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableScrollToTop","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will not scroll to the top when selected again."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableTransparentOnScrollEdge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab bar will not become transparent when scrolled to the edge.\n\nWhen set on a trigger, it takes precedence over the value set on "},{"kind":"code","text":"`NativeTabs`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will be hidden from the tab bar.\n\n> **Note**: Marking a tab as "},{"kind":"code","text":"`hidden`"},{"kind":"text","text":" means it cannot be navigated to in any way.\n\n> **Note**: Dynamically hiding tabs will remount the navigator and the state will be reset."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"listeners","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Listeners for navigation events on this tab.\n\nSupported events:\n- "},{"kind":"code","text":"`tabPress`"},{"kind":"text","text":" - called when this tab is pressed\n- "},{"kind":"code","text":"`focus`"},{"kind":"text","text":" - called when this screen comes into focus\n- "},{"kind":"code","text":"`blur`"},{"kind":"text","text":" - called when this screen loses focus"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n {\n console.log('Home tab pressed');\n },\n }}\n/>\n```"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"beforeRemove","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"beforeRemove"},{"type":"literal","value":true}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"blur","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"blur"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"focus","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"focus"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"state"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"intrinsic","name":"string"},{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"intrinsic","name":"undefined"}]}],"name":"EventListenerCallback","package":"expo-router"}}]}}],"name":"Partial","package":"typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"prop","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenListeners"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationState"},"name":"NavigationState","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"}],"name":"ScreenListeners","package":"expo-router"}}]}}]}},{"name":"name","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the route.\n\nThis is required when used inside a Layout component.\n\nWhen used in a route it has no effect."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"role","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"System-provided tab bar item with predefined icon and title\n\nUses Apple's built-in tab bar items (e.g., bookmarks, contacts, downloads) with\nstandard iOS styling and localized titles. Custom "},{"kind":"code","text":"`icon`"},{"kind":"text","text":" or "},{"kind":"code","text":"`selectedIcon`"},{"kind":"text","text":"\nproperties will override the system icon, but the system-defined title cannot\nbe customized."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem)."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"search"},{"type":"literal","value":"history"},{"type":"literal","value":"bookmarks"},{"type":"literal","value":"contacts"},{"type":"literal","value":"downloads"},{"type":"literal","value":"favorites"},{"type":"literal","value":"featured"},{"type":"literal","value":"more"},{"type":"literal","value":"mostRecent"},{"type":"literal","value":"mostViewed"},{"type":"literal","value":"recents"},{"type":"literal","value":"topRated"}]}},{"name":"unstable_nativeProps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying native tab screen implementation.\nUse this to configure props not directly exposed by Expo Router, but available in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":".\n\n> **Note**: This will override any other props set by Expo Router and may lead to unexpected behavior.\n\n> **Note**: This is an unstable API and may change or be removed in minor versions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/screen/TabsScreen.types.ts","qualifiedName":"TabsScreenProps"},"name":"TabsScreenProps","package":"react-native-screens"},{"type":"literal","value":"screenKey"}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}}]},{"name":"SFSymbolIcon","variant":"declaration","kind":256,"children":[{"name":"sf","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the SF Symbol to use as an icon.\n\nThe value can be provided in two ways:\n- As a string with the SF Symbol name\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"SFSymbols7_0 | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"}}]}}]}}]},{"name":"SrcIcon","variant":"declaration","kind":256,"children":[{"name":"renderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how the image icon is rendered on iOS.\n\n- "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":": iOS applies tint color to the icon (selected/unselected states)\n- "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":": Preserves original icon colors\n\n**Default behavior:**\n- If tab bar icon color is configured, defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":"\n- If no icon color is set, defaults to "},{"kind":"code","text":"`'original'`"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"src","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The image source to use as an icon.\n\nWhen "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" prop is used it will override this prop on iOS.\n\nWhen "},{"kind":"code","text":"`drawable`"},{"kind":"text","text":" or "},{"kind":"code","text":"`material`"},{"kind":"text","text":" prop is used it will override this prop on Android.\n\nThe value can be provided in two ways:\n- As an image source\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"Android"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactElement"},"typeArguments":[{"type":"intrinsic","name":"unknown"},{"type":"unknown","name":"string | JSXElementConstructor"}],"name":"ReactElement","package":"@types/react","qualifiedName":"React.ReactElement"},{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ReactElement> | ImageSourcePropType | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"unknown","name":"ReactElement> | ImageSourcePropType"}}]}}]}}]},{"name":"XcassetIcon","variant":"declaration","kind":256,"children":[{"name":"xcasset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the iOS asset catalog image to use as an icon.\n\nXcassets provide automatic multi-resolution (@1x/@2x/@3x), dark mode variants,\nand device-specific images via "},{"kind":"code","text":"`[UIImage imageNamed:]`"},{"kind":"text","text":".\n\nThe rendering mode (template vs original) can be controlled via the "},{"kind":"code","text":"`renderingMode`"},{"kind":"text","text":" prop\non the "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" component. By default, icons are tinted when "},{"kind":"code","text":"`iconColor`"},{"kind":"text","text":" is set, and\nrendered as original otherwise.\n\nThe value can be provided in two ways:\n- As a string with the asset catalog image name\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}}]}}]},{"name":"NativeTabsBlurEffect","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiblureffect/style)"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_BLUR_EFFECTS"},"name":"SUPPORTED_BLUR_EFFECTS","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsHostNativeProps","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying tab host implementation in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":"."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/host/TabsHost.types.ts","qualifiedName":"TabsHostProps"},"name":"TabsHostProps","package":"react-native-screens"},{"type":"union","types":[{"type":"literal","value":"navStateRequest"},{"type":"literal","value":"onTabSelected"},{"type":"literal","value":"children"}]}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}},{"name":"NativeTabsLabelStyle","variant":"declaration","kind":2097152,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Pick"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"},{"type":"union","types":[{"type":"literal","value":"fontFamily"},{"type":"literal","value":"fontSize"},{"type":"literal","value":"fontStyle"},{"type":"literal","value":"fontWeight"},{"type":"literal","value":"color"}]}],"name":"Pick","package":"typescript"}},{"name":"NativeTabsTabBarItemLabelVisibilityMode","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES"},"name":"SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTabBarItemRole","variant":"declaration","kind":2097152,"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_ITEM_ROLES"},"name":"SUPPORTED_TAB_BAR_ITEM_ROLES","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTabBarMinimizeBehavior","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS"},"name":"SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTriggerIconProps","variant":"declaration","kind":2097152,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"selectedColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]}},{"type":"union","types":[{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"DrawableIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"MaterialIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"DrawableIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"MaterialIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"MaterialIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"DrawableIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"reference","name":"SrcIcon","package":"expo-router"}]}]}},{"name":"SymbolOrImageSource","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"drawable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the drawable resource to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"sf","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the SF Symbol to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbol"},"name":"SFSymbol","package":"sf-symbols-typescript"}},{"name":"xcasset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the iOS asset catalog image to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"string"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"renderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how the icon is rendered on iOS."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]},{"tag":"@default","content":[{"kind":"text","text":"'template'"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"src","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The image source to use as an icon."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}]}}]}}]}},{"name":"NativeTabs","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"The component used to create native tabs layout."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]}]},"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabsProps","package":"expo-router"}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"BottomAccessory","variant":"declaration","kind":1024,"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsBottomAccessoryProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"usePlacement","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A hook which returns the bottom accessory environment for given component.\n\nNote, that there can be two copies of the same component rendered for different environments.\nThe hook will ensure that component with correct environment is displayed.\n\nBecause two instances of the component will exist simultaneously, **any state kept\ninside the component will not be shared between the regular and inline versions**.\nIf your accessory needs synchronized or persistent state you must store that state\noutside of bottom accessory component (e.g. passing via props or using context).\n\nDon't pass the environment obtained using this hook up the tree."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\n// This component will have two copies rendered, one for `inline` and one for `regular` environment\nfunction AccessoryContent(props) {\n const placement = NativeTabs.BottomAccessory.usePlacement();\n if (placement === 'inline') {\n return ;\n }\n return ;\n}\n\nexport default function Layout(){\n const [isPlaying, setIsPlaying] = useState(false);\n return (\n \n \n \n \n \n \n );\n}\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"union","types":[{"type":"literal","value":"regular"},{"type":"literal","value":"inline"}]}}]}}}]}}]}},{"name":"Trigger","variant":"declaration","kind":1024,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The component used to customize the native tab options both in the _layout file and from the tab screen.\n\nWhen used in the _layout file, you need to provide a "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop.\nWhen used in the tab screen, the "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop takes no effect."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx app/home.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function HomeScreen() {\n return (\n \n \n Home\n \n This is home screen!\n \n );\n}\n```"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabTriggerProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"Badge","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerBadgeProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerBadge"},{"name":"Icon","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerIconProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerIcon"},{"name":"Label","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerLabelProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerLabel"},{"name":"VectorIcon","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Helper component for loading vector icons.\n\nPrefer using the "},{"kind":"code","text":"`md`"},{"kind":"text","text":" and "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" props on "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" rather than using this component directly.\nOnly use this component when you need to load a specific icon from a vector icon family."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Icon, VectorIcon } from 'expo-router';\nimport MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';\n\n} />\n```"}]}]},"typeParameters":[{"name":"NameT","variant":"typeParam","kind":131072,"flags":{"isConst":true},"type":{"type":"intrinsic","name":"string"}}],"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/primitives/types.ts","qualifiedName":"VectorIconProps"},"typeArguments":[{"type":"reference","name":"NameT","package":"expo-router","refersToTypeParameter":true}],"name":"VectorIconProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},"defaultValue":"NativeTabsTriggerVectorIcon"}]}}]},"defaultValue":"NativeTabTrigger"}]}}]},"defaultValue":"..."},{"name":"NativeTabTrigger","variant":"declaration","kind":32,"flags":{"isConst":true},"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The component used to customize the native tab options both in the _layout file and from the tab screen.\n\nWhen used in the _layout file, you need to provide a "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop.\nWhen used in the tab screen, the "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop takes no effect."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx app/home.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function HomeScreen() {\n return (\n \n \n Home\n \n This is home screen!\n \n );\n}\n```"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabTriggerProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"Badge","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerBadgeProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerBadge"},{"name":"Icon","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerIconProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerIcon"},{"name":"Label","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerLabelProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerLabel"},{"name":"VectorIcon","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Helper component for loading vector icons.\n\nPrefer using the "},{"kind":"code","text":"`md`"},{"kind":"text","text":" and "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" props on "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" rather than using this component directly.\nOnly use this component when you need to load a specific icon from a vector icon family."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Icon, VectorIcon } from 'expo-router';\nimport MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';\n\n} />\n```"}]}]},"typeParameters":[{"name":"NameT","variant":"typeParam","kind":131072,"flags":{"isConst":true},"type":{"type":"intrinsic","name":"string"}}],"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/primitives/types.ts","qualifiedName":"VectorIconProps"},"typeArguments":[{"type":"reference","name":"NameT","package":"expo-router","refersToTypeParameter":true}],"name":"VectorIconProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},"defaultValue":"NativeTabsTriggerVectorIcon"}]}}]},"defaultValue":"..."}],"packageName":"expo-router"} \ No newline at end of file +{"schemaVersion":"2.0","name":"expo-router/native-tabs","variant":"project","kind":1,"children":[{"name":"DrawableIcon","variant":"declaration","kind":256,"children":[{"name":"drawable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the drawable resource to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}}]},{"name":"MaterialIcon","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Material icon name for Android native tabs."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"md","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Material icon glyph name. See the [Material icons for the complete catalog](https://fonts.google.com/icons)."}]},"type":{"type":"union","types":[{"type":"literal","value":"function"},{"type":"literal","value":"search"},{"type":"literal","value":"repeat"},{"type":"literal","value":"anchor"},{"type":"literal","value":"link"},{"type":"literal","value":"key"},{"type":"literal","value":"history"},{"type":"literal","value":"join"},{"type":"literal","value":"shift"},{"type":"literal","value":"sort"},{"type":"literal","value":"map"},{"type":"literal","value":"filter"},{"type":"literal","value":"source"},{"type":"literal","value":"target"},{"type":"literal","value":"navigation"},{"type":"literal","value":"route"},{"type":"literal","value":"article"},{"type":"literal","value":"code"},{"type":"literal","value":"details"},{"type":"literal","value":"html"},{"type":"literal","value":"iframe"},{"type":"literal","value":"input"},{"type":"literal","value":"label"},{"type":"literal","value":"menu"},{"type":"literal","value":"output"},{"type":"literal","value":"script"},{"type":"literal","value":"select"},{"type":"literal","value":"style"},{"type":"literal","value":"table"},{"type":"literal","value":"title"},{"type":"literal","value":"circle"},{"type":"literal","value":"image"},{"type":"literal","value":"pattern"},{"type":"literal","value":"polyline"},{"type":"literal","value":"stop"},{"type":"literal","value":"switch"},{"type":"literal","value":"event"},{"type":"literal","value":"create"},{"type":"literal","value":"stack"},{"type":"literal","value":"segment"},{"type":"literal","value":"groups"},{"type":"literal","value":"group"},{"type":"literal","value":"router"},{"type":"literal","value":"merge"},{"type":"literal","value":"call"},{"type":"literal","value":"tab"},{"type":"literal","value":"ios"},{"type":"literal","value":"android"},{"type":"literal","value":"web"},{"type":"literal","value":"cancel"},{"type":"literal","value":"close"},{"type":"literal","value":"error"},{"type":"literal","value":"pause"},{"type":"literal","value":"resize"},{"type":"literal","value":"message"},{"type":"literal","value":"storage"},{"type":"literal","value":"accessible"},{"type":"literal","value":"colors"},{"type":"literal","value":"email"},{"type":"literal","value":"radio"},{"type":"literal","value":"timer"},{"type":"literal","value":"list"},{"type":"literal","value":"toolbar"},{"type":"literal","value":"feed"},{"type":"literal","value":"note"},{"type":"literal","value":"tooltip"},{"type":"literal","value":"light"},{"type":"literal","value":"uppercase"},{"type":"literal","value":"lowercase"},{"type":"literal","value":"difference"},{"type":"literal","value":"scale"},{"type":"literal","value":"done"},{"type":"literal","value":"opacity"},{"type":"literal","value":"elevation"},{"type":"literal","value":"visibility"},{"type":"literal","value":"height"},{"type":"literal","value":"margin"},{"type":"literal","value":"padding"},{"type":"literal","value":"start"},{"type":"literal","value":"transform"},{"type":"literal","value":"description"},{"type":"literal","value":"contrast"},{"type":"literal","value":"clear"},{"type":"literal","value":"translate"},{"type":"literal","value":"animation"},{"type":"literal","value":"phone"},{"type":"literal","value":"send"},{"type":"literal","value":"flip"},{"type":"literal","value":"expand"},{"type":"literal","value":"window"},{"type":"literal","value":"speed"},{"type":"literal","value":"badge"},{"type":"literal","value":"warning"},{"type":"literal","value":"toast"},{"type":"literal","value":"api"},{"type":"literal","value":"sync"},{"type":"literal","value":"host"},{"type":"literal","value":"portrait"},{"type":"literal","value":"landscape"},{"type":"literal","value":"alarm"},{"type":"literal","value":"barcode"},{"type":"literal","value":"bolt"},{"type":"literal","value":"book"},{"type":"literal","value":"bookmark"},{"type":"literal","value":"camera"},{"type":"literal","value":"cloud"},{"type":"literal","value":"crop"},{"type":"literal","value":"eject"},{"type":"literal","value":"equal"},{"type":"literal","value":"eyeglasses"},{"type":"literal","value":"flag"},{"type":"literal","value":"flowchart"},{"type":"literal","value":"folder"},{"type":"literal","value":"forward"},{"type":"literal","value":"globe"},{"type":"literal","value":"headphones"},{"type":"literal","value":"hexagon"},{"type":"literal","value":"hourglass"},{"type":"literal","value":"house"},{"type":"literal","value":"info"},{"type":"literal","value":"keyboard"},{"type":"literal","value":"lightbulb"},{"type":"literal","value":"lock"},{"type":"literal","value":"mic"},{"type":"literal","value":"percent"},{"type":"literal","value":"person"},{"type":"literal","value":"photo"},{"type":"literal","value":"pin"},{"type":"literal","value":"power"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"shield"},{"type":"literal","value":"shuffle"},{"type":"literal","value":"signature"},{"type":"literal","value":"speaker"},{"type":"literal","value":"square"},{"type":"literal","value":"star"},{"type":"literal","value":"tag"},{"type":"literal","value":"thermometer"},{"type":"literal","value":"timelapse"},{"type":"literal","value":"tornado"},{"type":"literal","value":"tv"},{"type":"literal","value":"umbrella"},{"type":"literal","value":"wifi"},{"type":"literal","value":"abc"},{"type":"literal","value":"crown"},{"type":"literal","value":"diamond"},{"type":"literal","value":"loupe"},{"type":"literal","value":"mail"},{"type":"literal","value":"newspaper"},{"type":"literal","value":"pip"},{"type":"literal","value":"scanner"},{"type":"literal","value":"shadow"},{"type":"literal","value":"stethoscope"},{"type":"literal","value":"terminal"},{"type":"literal","value":"tram"},{"type":"literal","value":"asterisk"},{"type":"literal","value":"checklist"},{"type":"literal","value":"earbuds"},{"type":"literal","value":"pentagon"},{"type":"literal","value":"scooter"},{"type":"literal","value":"backpack"},{"type":"literal","value":"bathtub"},{"type":"literal","value":"chair"},{"type":"literal","value":"dishwasher"},{"type":"literal","value":"fireplace"},{"type":"literal","value":"microwave"},{"type":"literal","value":"oven"},{"type":"literal","value":"pill"},{"type":"literal","value":"shower"},{"type":"literal","value":"sprinkler"},{"type":"literal","value":"stairs"},{"type":"literal","value":"syringe"},{"type":"literal","value":"trophy"},{"type":"literal","value":"sos"},{"type":"literal","value":"stroller"},{"type":"literal","value":"accessibility"},{"type":"literal","value":"bubble"},{"type":"literal","value":"smartphone"},{"type":"literal","value":"storefront"},{"type":"literal","value":"drone"},{"type":"literal","value":"headset"},{"type":"literal","value":"moped"},{"type":"literal","value":"motorcycle"},{"type":"literal","value":"numbers"},{"type":"literal","value":"receipt"},{"type":"literal","value":"palette"},{"type":"literal","value":"download"},{"type":"literal","value":"security"},{"type":"literal","value":"hide"},{"type":"literal","value":"step"},{"type":"literal","value":"move"},{"type":"literal","value":"scene"},{"type":"literal","value":"bookmarks"},{"type":"literal","value":"contacts"},{"type":"literal","value":"more"},{"type":"literal","value":"tabs"},{"type":"literal","value":"123"},{"type":"literal","value":"360"},{"type":"literal","value":"10k"},{"type":"literal","value":"10mp"},{"type":"literal","value":"11mp"},{"type":"literal","value":"12mp"},{"type":"literal","value":"13mp"},{"type":"literal","value":"14mp"},{"type":"literal","value":"15mp"},{"type":"literal","value":"16mp"},{"type":"literal","value":"17mp"},{"type":"literal","value":"18_up_rating"},{"type":"literal","value":"18mp"},{"type":"literal","value":"19mp"},{"type":"literal","value":"1k"},{"type":"literal","value":"1k_plus"},{"type":"literal","value":"1x_mobiledata"},{"type":"literal","value":"1x_mobiledata_badge"},{"type":"literal","value":"20mp"},{"type":"literal","value":"21mp"},{"type":"literal","value":"22mp"},{"type":"literal","value":"23mp"},{"type":"literal","value":"24fps_select"},{"type":"literal","value":"24mp"},{"type":"literal","value":"2d"},{"type":"literal","value":"2k"},{"type":"literal","value":"2k_plus"},{"type":"literal","value":"2mp"},{"type":"literal","value":"30fps"},{"type":"literal","value":"30fps_select"},{"type":"literal","value":"3d"},{"type":"literal","value":"3d_rotation"},{"type":"literal","value":"3g_mobiledata"},{"type":"literal","value":"3g_mobiledata_badge"},{"type":"literal","value":"3k"},{"type":"literal","value":"3k_plus"},{"type":"literal","value":"3mp"},{"type":"literal","value":"3p"},{"type":"literal","value":"4g_mobiledata"},{"type":"literal","value":"4g_mobiledata_badge"},{"type":"literal","value":"4g_plus_mobiledata"},{"type":"literal","value":"4k"},{"type":"literal","value":"4k_plus"},{"type":"literal","value":"4mp"},{"type":"literal","value":"50mp"},{"type":"literal","value":"5g"},{"type":"literal","value":"5g_mobiledata_badge"},{"type":"literal","value":"5k"},{"type":"literal","value":"5k_plus"},{"type":"literal","value":"5mp"},{"type":"literal","value":"60fps"},{"type":"literal","value":"60fps_select"},{"type":"literal","value":"6_ft_apart"},{"type":"literal","value":"6k"},{"type":"literal","value":"6k_plus"},{"type":"literal","value":"6mp"},{"type":"literal","value":"7k"},{"type":"literal","value":"7k_plus"},{"type":"literal","value":"7mp"},{"type":"literal","value":"8k"},{"type":"literal","value":"8k_plus"},{"type":"literal","value":"8mp"},{"type":"literal","value":"9k"},{"type":"literal","value":"9k_plus"},{"type":"literal","value":"9mp"},{"type":"literal","value":"ac_unit"},{"type":"literal","value":"access_alarm"},{"type":"literal","value":"access_alarms"},{"type":"literal","value":"access_time"},{"type":"literal","value":"access_time_filled"},{"type":"literal","value":"accessibility_new"},{"type":"literal","value":"accessible_forward"},{"type":"literal","value":"accessible_menu"},{"type":"literal","value":"account_balance"},{"type":"literal","value":"account_balance_wallet"},{"type":"literal","value":"account_box"},{"type":"literal","value":"account_child"},{"type":"literal","value":"account_child_invert"},{"type":"literal","value":"account_circle"},{"type":"literal","value":"account_circle_off"},{"type":"literal","value":"account_tree"},{"type":"literal","value":"action_key"},{"type":"literal","value":"activity_zone"},{"type":"literal","value":"acupuncture"},{"type":"literal","value":"acute"},{"type":"literal","value":"ad"},{"type":"literal","value":"ad_group"},{"type":"literal","value":"ad_group_off"},{"type":"literal","value":"ad_off"},{"type":"literal","value":"ad_units"},{"type":"literal","value":"adaptive_audio_mic"},{"type":"literal","value":"adaptive_audio_mic_off"},{"type":"literal","value":"adb"},{"type":"literal","value":"add"},{"type":"literal","value":"add_2"},{"type":"literal","value":"add_a_photo"},{"type":"literal","value":"add_ad"},{"type":"literal","value":"add_alarm"},{"type":"literal","value":"add_alert"},{"type":"literal","value":"add_box"},{"type":"literal","value":"add_business"},{"type":"literal","value":"add_call"},{"type":"literal","value":"add_card"},{"type":"literal","value":"add_chart"},{"type":"literal","value":"add_circle"},{"type":"literal","value":"add_circle_outline"},{"type":"literal","value":"add_column_left"},{"type":"literal","value":"add_column_right"},{"type":"literal","value":"add_comment"},{"type":"literal","value":"add_diamond"},{"type":"literal","value":"add_home"},{"type":"literal","value":"add_home_work"},{"type":"literal","value":"add_ic_call"},{"type":"literal","value":"add_link"},{"type":"literal","value":"add_location"},{"type":"literal","value":"add_location_alt"},{"type":"literal","value":"add_moderator"},{"type":"literal","value":"add_notes"},{"type":"literal","value":"add_photo_alternate"},{"type":"literal","value":"add_reaction"},{"type":"literal","value":"add_road"},{"type":"literal","value":"add_row_above"},{"type":"literal","value":"add_row_below"},{"type":"literal","value":"add_shopping_cart"},{"type":"literal","value":"add_task"},{"type":"literal","value":"add_to_drive"},{"type":"literal","value":"add_to_home_screen"},{"type":"literal","value":"add_to_photos"},{"type":"literal","value":"add_to_queue"},{"type":"literal","value":"add_triangle"},{"type":"literal","value":"addchart"},{"type":"literal","value":"adf_scanner"},{"type":"literal","value":"adjust"},{"type":"literal","value":"admin_meds"},{"type":"literal","value":"admin_panel_settings"},{"type":"literal","value":"ads_click"},{"type":"literal","value":"agender"},{"type":"literal","value":"agriculture"},{"type":"literal","value":"air"},{"type":"literal","value":"air_freshener"},{"type":"literal","value":"air_purifier"},{"type":"literal","value":"air_purifier_gen"},{"type":"literal","value":"airline_seat_flat"},{"type":"literal","value":"airline_seat_flat_angled"},{"type":"literal","value":"airline_seat_individual_suite"},{"type":"literal","value":"airline_seat_legroom_extra"},{"type":"literal","value":"airline_seat_legroom_normal"},{"type":"literal","value":"airline_seat_legroom_reduced"},{"type":"literal","value":"airline_seat_recline_extra"},{"type":"literal","value":"airline_seat_recline_normal"},{"type":"literal","value":"airline_stops"},{"type":"literal","value":"airlines"},{"type":"literal","value":"airplane_ticket"},{"type":"literal","value":"airplanemode_active"},{"type":"literal","value":"airplanemode_inactive"},{"type":"literal","value":"airplay"},{"type":"literal","value":"airport_shuttle"},{"type":"literal","value":"airwave"},{"type":"literal","value":"alarm_add"},{"type":"literal","value":"alarm_off"},{"type":"literal","value":"alarm_on"},{"type":"literal","value":"alarm_pause"},{"type":"literal","value":"alarm_smart_wake"},{"type":"literal","value":"album"},{"type":"literal","value":"align_center"},{"type":"literal","value":"align_end"},{"type":"literal","value":"align_flex_center"},{"type":"literal","value":"align_flex_end"},{"type":"literal","value":"align_flex_start"},{"type":"literal","value":"align_horizontal_center"},{"type":"literal","value":"align_horizontal_left"},{"type":"literal","value":"align_horizontal_right"},{"type":"literal","value":"align_items_stretch"},{"type":"literal","value":"align_justify_center"},{"type":"literal","value":"align_justify_flex_end"},{"type":"literal","value":"align_justify_flex_start"},{"type":"literal","value":"align_justify_space_around"},{"type":"literal","value":"align_justify_space_between"},{"type":"literal","value":"align_justify_space_even"},{"type":"literal","value":"align_justify_stretch"},{"type":"literal","value":"align_self_stretch"},{"type":"literal","value":"align_space_around"},{"type":"literal","value":"align_space_between"},{"type":"literal","value":"align_space_even"},{"type":"literal","value":"align_start"},{"type":"literal","value":"align_stretch"},{"type":"literal","value":"align_vertical_bottom"},{"type":"literal","value":"align_vertical_center"},{"type":"literal","value":"align_vertical_top"},{"type":"literal","value":"all_inbox"},{"type":"literal","value":"all_inclusive"},{"type":"literal","value":"all_match"},{"type":"literal","value":"all_out"},{"type":"literal","value":"allergies"},{"type":"literal","value":"allergy"},{"type":"literal","value":"alt_route"},{"type":"literal","value":"alternate_email"},{"type":"literal","value":"altitude"},{"type":"literal","value":"ambulance"},{"type":"literal","value":"amend"},{"type":"literal","value":"amp_stories"},{"type":"literal","value":"analytics"},{"type":"literal","value":"android_cell_4_bar"},{"type":"literal","value":"android_cell_4_bar_alert"},{"type":"literal","value":"android_cell_4_bar_off"},{"type":"literal","value":"android_cell_4_bar_plus"},{"type":"literal","value":"android_cell_5_bar"},{"type":"literal","value":"android_cell_5_bar_alert"},{"type":"literal","value":"android_cell_5_bar_off"},{"type":"literal","value":"android_cell_5_bar_plus"},{"type":"literal","value":"android_cell_dual_4_bar"},{"type":"literal","value":"android_cell_dual_4_bar_alert"},{"type":"literal","value":"android_cell_dual_4_bar_plus"},{"type":"literal","value":"android_cell_dual_5_bar"},{"type":"literal","value":"android_cell_dual_5_bar_alert"},{"type":"literal","value":"android_cell_dual_5_bar_plus"},{"type":"literal","value":"android_wifi_3_bar"},{"type":"literal","value":"android_wifi_3_bar_alert"},{"type":"literal","value":"android_wifi_3_bar_lock"},{"type":"literal","value":"android_wifi_3_bar_off"},{"type":"literal","value":"android_wifi_3_bar_plus"},{"type":"literal","value":"android_wifi_3_bar_question"},{"type":"literal","value":"android_wifi_4_bar"},{"type":"literal","value":"android_wifi_4_bar_alert"},{"type":"literal","value":"android_wifi_4_bar_lock"},{"type":"literal","value":"android_wifi_4_bar_off"},{"type":"literal","value":"android_wifi_4_bar_plus"},{"type":"literal","value":"android_wifi_4_bar_question"},{"type":"literal","value":"animated_images"},{"type":"literal","value":"announcement"},{"type":"literal","value":"aod"},{"type":"literal","value":"aod_tablet"},{"type":"literal","value":"aod_watch"},{"type":"literal","value":"apartment"},{"type":"literal","value":"apk_document"},{"type":"literal","value":"apk_install"},{"type":"literal","value":"app_badging"},{"type":"literal","value":"app_blocking"},{"type":"literal","value":"app_registration"},{"type":"literal","value":"app_settings_alt"},{"type":"literal","value":"app_shortcut"},{"type":"literal","value":"apparel"},{"type":"literal","value":"approval"},{"type":"literal","value":"approval_delegation"},{"type":"literal","value":"approval_delegation_off"},{"type":"literal","value":"apps"},{"type":"literal","value":"apps_outage"},{"type":"literal","value":"aq"},{"type":"literal","value":"aq_indoor"},{"type":"literal","value":"ar_on_you"},{"type":"literal","value":"ar_stickers"},{"type":"literal","value":"architecture"},{"type":"literal","value":"archive"},{"type":"literal","value":"area_chart"},{"type":"literal","value":"arming_countdown"},{"type":"literal","value":"arrow_and_edge"},{"type":"literal","value":"arrow_back"},{"type":"literal","value":"arrow_back_2"},{"type":"literal","value":"arrow_back_ios"},{"type":"literal","value":"arrow_back_ios_new"},{"type":"literal","value":"arrow_circle_down"},{"type":"literal","value":"arrow_circle_left"},{"type":"literal","value":"arrow_circle_right"},{"type":"literal","value":"arrow_circle_up"},{"type":"literal","value":"arrow_cool_down"},{"type":"literal","value":"arrow_downward"},{"type":"literal","value":"arrow_downward_alt"},{"type":"literal","value":"arrow_drop_down"},{"type":"literal","value":"arrow_drop_down_circle"},{"type":"literal","value":"arrow_drop_up"},{"type":"literal","value":"arrow_forward"},{"type":"literal","value":"arrow_forward_ios"},{"type":"literal","value":"arrow_insert"},{"type":"literal","value":"arrow_left"},{"type":"literal","value":"arrow_left_alt"},{"type":"literal","value":"arrow_menu_close"},{"type":"literal","value":"arrow_menu_open"},{"type":"literal","value":"arrow_or_edge"},{"type":"literal","value":"arrow_outward"},{"type":"literal","value":"arrow_range"},{"type":"literal","value":"arrow_right"},{"type":"literal","value":"arrow_right_alt"},{"type":"literal","value":"arrow_selector_tool"},{"type":"literal","value":"arrow_shape_up"},{"type":"literal","value":"arrow_shape_up_stack"},{"type":"literal","value":"arrow_shape_up_stack_2"},{"type":"literal","value":"arrow_split"},{"type":"literal","value":"arrow_top_left"},{"type":"literal","value":"arrow_top_right"},{"type":"literal","value":"arrow_upload_progress"},{"type":"literal","value":"arrow_upload_ready"},{"type":"literal","value":"arrow_upward"},{"type":"literal","value":"arrow_upward_alt"},{"type":"literal","value":"arrow_warm_up"},{"type":"literal","value":"arrows_input"},{"type":"literal","value":"arrows_more_down"},{"type":"literal","value":"arrows_more_up"},{"type":"literal","value":"arrows_output"},{"type":"literal","value":"arrows_outward"},{"type":"literal","value":"art_track"},{"type":"literal","value":"article_person"},{"type":"literal","value":"article_shortcut"},{"type":"literal","value":"artist"},{"type":"literal","value":"aspect_ratio"},{"type":"literal","value":"assessment"},{"type":"literal","value":"assignment"},{"type":"literal","value":"assignment_add"},{"type":"literal","value":"assignment_ind"},{"type":"literal","value":"assignment_late"},{"type":"literal","value":"assignment_return"},{"type":"literal","value":"assignment_returned"},{"type":"literal","value":"assignment_turned_in"},{"type":"literal","value":"assist_walker"},{"type":"literal","value":"assistant"},{"type":"literal","value":"assistant_device"},{"type":"literal","value":"assistant_direction"},{"type":"literal","value":"assistant_navigation"},{"type":"literal","value":"assistant_on_hub"},{"type":"literal","value":"assistant_photo"},{"type":"literal","value":"assured_workload"},{"type":"literal","value":"atm"},{"type":"literal","value":"atr"},{"type":"literal","value":"attach_email"},{"type":"literal","value":"attach_file"},{"type":"literal","value":"attach_file_add"},{"type":"literal","value":"attach_file_off"},{"type":"literal","value":"attach_money"},{"type":"literal","value":"attachment"},{"type":"literal","value":"attractions"},{"type":"literal","value":"attribution"},{"type":"literal","value":"audio_description"},{"type":"literal","value":"audio_file"},{"type":"literal","value":"audio_video_receiver"},{"type":"literal","value":"audiotrack"},{"type":"literal","value":"auto_awesome"},{"type":"literal","value":"auto_awesome_mosaic"},{"type":"literal","value":"auto_awesome_motion"},{"type":"literal","value":"auto_delete"},{"type":"literal","value":"auto_fix_high"},{"type":"literal","value":"auto_fix_normal"},{"type":"literal","value":"auto_fix_off"},{"type":"literal","value":"auto_graph"},{"type":"literal","value":"auto_mode"},{"type":"literal","value":"auto_read_pause"},{"type":"literal","value":"auto_read_play"},{"type":"literal","value":"auto_stories"},{"type":"literal","value":"auto_stories_off"},{"type":"literal","value":"auto_towing"},{"type":"literal","value":"auto_transmission"},{"type":"literal","value":"autofps_select"},{"type":"literal","value":"automation"},{"type":"literal","value":"autopause"},{"type":"literal","value":"autoplay"},{"type":"literal","value":"autorenew"},{"type":"literal","value":"autostop"},{"type":"literal","value":"av1"},{"type":"literal","value":"av_timer"},{"type":"literal","value":"avc"},{"type":"literal","value":"avg_pace"},{"type":"literal","value":"avg_time"},{"type":"literal","value":"award_meal"},{"type":"literal","value":"award_star"},{"type":"literal","value":"azm"},{"type":"literal","value":"baby_changing_station"},{"type":"literal","value":"back_hand"},{"type":"literal","value":"back_to_tab"},{"type":"literal","value":"background_dot_large"},{"type":"literal","value":"background_dot_small"},{"type":"literal","value":"background_grid_small"},{"type":"literal","value":"background_replace"},{"type":"literal","value":"backlight_high"},{"type":"literal","value":"backlight_high_off"},{"type":"literal","value":"backlight_low"},{"type":"literal","value":"backspace"},{"type":"literal","value":"backup"},{"type":"literal","value":"backup_table"},{"type":"literal","value":"badge_critical_battery"},{"type":"literal","value":"badminton"},{"type":"literal","value":"bakery_dining"},{"type":"literal","value":"balance"},{"type":"literal","value":"balcony"},{"type":"literal","value":"ballot"},{"type":"literal","value":"bar_chart"},{"type":"literal","value":"bar_chart_4_bars"},{"type":"literal","value":"bar_chart_off"},{"type":"literal","value":"barcode_reader"},{"type":"literal","value":"barcode_scanner"},{"type":"literal","value":"barefoot"},{"type":"literal","value":"batch_prediction"},{"type":"literal","value":"bath_bedrock"},{"type":"literal","value":"bath_outdoor"},{"type":"literal","value":"bath_private"},{"type":"literal","value":"bath_public_large"},{"type":"literal","value":"bath_soak"},{"type":"literal","value":"bathroom"},{"type":"literal","value":"battery_0_bar"},{"type":"literal","value":"battery_1_bar"},{"type":"literal","value":"battery_20"},{"type":"literal","value":"battery_2_bar"},{"type":"literal","value":"battery_30"},{"type":"literal","value":"battery_3_bar"},{"type":"literal","value":"battery_4_bar"},{"type":"literal","value":"battery_50"},{"type":"literal","value":"battery_5_bar"},{"type":"literal","value":"battery_60"},{"type":"literal","value":"battery_6_bar"},{"type":"literal","value":"battery_80"},{"type":"literal","value":"battery_90"},{"type":"literal","value":"battery_alert"},{"type":"literal","value":"battery_android_0"},{"type":"literal","value":"battery_android_1"},{"type":"literal","value":"battery_android_2"},{"type":"literal","value":"battery_android_3"},{"type":"literal","value":"battery_android_4"},{"type":"literal","value":"battery_android_5"},{"type":"literal","value":"battery_android_6"},{"type":"literal","value":"battery_android_alert"},{"type":"literal","value":"battery_android_bolt"},{"type":"literal","value":"battery_android_frame_1"},{"type":"literal","value":"battery_android_frame_2"},{"type":"literal","value":"battery_android_frame_3"},{"type":"literal","value":"battery_android_frame_4"},{"type":"literal","value":"battery_android_frame_5"},{"type":"literal","value":"battery_android_frame_6"},{"type":"literal","value":"battery_android_frame_alert"},{"type":"literal","value":"battery_android_frame_bolt"},{"type":"literal","value":"battery_android_frame_full"},{"type":"literal","value":"battery_android_frame_plus"},{"type":"literal","value":"battery_android_frame_question"},{"type":"literal","value":"battery_android_frame_share"},{"type":"literal","value":"battery_android_frame_shield"},{"type":"literal","value":"battery_android_full"},{"type":"literal","value":"battery_android_plus"},{"type":"literal","value":"battery_android_question"},{"type":"literal","value":"battery_android_share"},{"type":"literal","value":"battery_android_shield"},{"type":"literal","value":"battery_change"},{"type":"literal","value":"battery_charging_20"},{"type":"literal","value":"battery_charging_30"},{"type":"literal","value":"battery_charging_50"},{"type":"literal","value":"battery_charging_60"},{"type":"literal","value":"battery_charging_80"},{"type":"literal","value":"battery_charging_90"},{"type":"literal","value":"battery_charging_full"},{"type":"literal","value":"battery_error"},{"type":"literal","value":"battery_full"},{"type":"literal","value":"battery_full_alt"},{"type":"literal","value":"battery_horiz_000"},{"type":"literal","value":"battery_horiz_050"},{"type":"literal","value":"battery_horiz_075"},{"type":"literal","value":"battery_low"},{"type":"literal","value":"battery_plus"},{"type":"literal","value":"battery_profile"},{"type":"literal","value":"battery_saver"},{"type":"literal","value":"battery_share"},{"type":"literal","value":"battery_status_good"},{"type":"literal","value":"battery_std"},{"type":"literal","value":"battery_unknown"},{"type":"literal","value":"battery_very_low"},{"type":"literal","value":"beach_access"},{"type":"literal","value":"bed"},{"type":"literal","value":"bedroom_baby"},{"type":"literal","value":"bedroom_child"},{"type":"literal","value":"bedroom_parent"},{"type":"literal","value":"bedtime"},{"type":"literal","value":"bedtime_off"},{"type":"literal","value":"beenhere"},{"type":"literal","value":"beer_meal"},{"type":"literal","value":"bento"},{"type":"literal","value":"bia"},{"type":"literal","value":"bid_landscape"},{"type":"literal","value":"bid_landscape_disabled"},{"type":"literal","value":"bigtop_updates"},{"type":"literal","value":"bike_dock"},{"type":"literal","value":"bike_lane"},{"type":"literal","value":"bike_scooter"},{"type":"literal","value":"biotech"},{"type":"literal","value":"blanket"},{"type":"literal","value":"blender"},{"type":"literal","value":"blind"},{"type":"literal","value":"blinds"},{"type":"literal","value":"blinds_closed"},{"type":"literal","value":"block"},{"type":"literal","value":"block_flipped"},{"type":"literal","value":"blood_pressure"},{"type":"literal","value":"bloodtype"},{"type":"literal","value":"bluetooth"},{"type":"literal","value":"bluetooth_audio"},{"type":"literal","value":"bluetooth_connected"},{"type":"literal","value":"bluetooth_disabled"},{"type":"literal","value":"bluetooth_drive"},{"type":"literal","value":"bluetooth_searching"},{"type":"literal","value":"blur_circular"},{"type":"literal","value":"blur_linear"},{"type":"literal","value":"blur_medium"},{"type":"literal","value":"blur_off"},{"type":"literal","value":"blur_on"},{"type":"literal","value":"blur_short"},{"type":"literal","value":"boat_bus"},{"type":"literal","value":"boat_railway"},{"type":"literal","value":"body_fat"},{"type":"literal","value":"body_system"},{"type":"literal","value":"bomb"},{"type":"literal","value":"book_2"},{"type":"literal","value":"book_3"},{"type":"literal","value":"book_4"},{"type":"literal","value":"book_5"},{"type":"literal","value":"book_6"},{"type":"literal","value":"book_online"},{"type":"literal","value":"book_ribbon"},{"type":"literal","value":"bookmark_add"},{"type":"literal","value":"bookmark_added"},{"type":"literal","value":"bookmark_bag"},{"type":"literal","value":"bookmark_border"},{"type":"literal","value":"bookmark_check"},{"type":"literal","value":"bookmark_flag"},{"type":"literal","value":"bookmark_heart"},{"type":"literal","value":"bookmark_manager"},{"type":"literal","value":"bookmark_remove"},{"type":"literal","value":"bookmark_star"},{"type":"literal","value":"books_movies_and_music"},{"type":"literal","value":"border_all"},{"type":"literal","value":"border_bottom"},{"type":"literal","value":"border_clear"},{"type":"literal","value":"border_color"},{"type":"literal","value":"border_horizontal"},{"type":"literal","value":"border_inner"},{"type":"literal","value":"border_left"},{"type":"literal","value":"border_outer"},{"type":"literal","value":"border_right"},{"type":"literal","value":"border_style"},{"type":"literal","value":"border_top"},{"type":"literal","value":"border_vertical"},{"type":"literal","value":"borg"},{"type":"literal","value":"bottom_app_bar"},{"type":"literal","value":"bottom_drawer"},{"type":"literal","value":"bottom_navigation"},{"type":"literal","value":"bottom_panel_close"},{"type":"literal","value":"bottom_panel_open"},{"type":"literal","value":"bottom_right_click"},{"type":"literal","value":"bottom_sheets"},{"type":"literal","value":"box"},{"type":"literal","value":"box_add"},{"type":"literal","value":"box_edit"},{"type":"literal","value":"boy"},{"type":"literal","value":"brand_awareness"},{"type":"literal","value":"brand_family"},{"type":"literal","value":"branding_watermark"},{"type":"literal","value":"breakfast_dining"},{"type":"literal","value":"breaking_news"},{"type":"literal","value":"breaking_news_alt_1"},{"type":"literal","value":"breastfeeding"},{"type":"literal","value":"brick"},{"type":"literal","value":"briefcase_meal"},{"type":"literal","value":"brightness_1"},{"type":"literal","value":"brightness_2"},{"type":"literal","value":"brightness_3"},{"type":"literal","value":"brightness_4"},{"type":"literal","value":"brightness_5"},{"type":"literal","value":"brightness_6"},{"type":"literal","value":"brightness_7"},{"type":"literal","value":"brightness_alert"},{"type":"literal","value":"brightness_auto"},{"type":"literal","value":"brightness_empty"},{"type":"literal","value":"brightness_high"},{"type":"literal","value":"brightness_low"},{"type":"literal","value":"brightness_medium"},{"type":"literal","value":"bring_your_own_ip"},{"type":"literal","value":"broadcast_on_home"},{"type":"literal","value":"broadcast_on_personal"},{"type":"literal","value":"broken_image"},{"type":"literal","value":"browse"},{"type":"literal","value":"browse_activity"},{"type":"literal","value":"browse_gallery"},{"type":"literal","value":"browser_not_supported"},{"type":"literal","value":"browser_updated"},{"type":"literal","value":"brunch_dining"},{"type":"literal","value":"brush"},{"type":"literal","value":"bubble_chart"},{"type":"literal","value":"bubbles"},{"type":"literal","value":"bucket_check"},{"type":"literal","value":"bug_report"},{"type":"literal","value":"build"},{"type":"literal","value":"build_circle"},{"type":"literal","value":"bungalow"},{"type":"literal","value":"burst_mode"},{"type":"literal","value":"bus_alert"},{"type":"literal","value":"bus_railway"},{"type":"literal","value":"business"},{"type":"literal","value":"business_center"},{"type":"literal","value":"business_chip"},{"type":"literal","value":"business_messages"},{"type":"literal","value":"buttons_alt"},{"type":"literal","value":"cabin"},{"type":"literal","value":"cable"},{"type":"literal","value":"cable_car"},{"type":"literal","value":"cached"},{"type":"literal","value":"cadence"},{"type":"literal","value":"cake"},{"type":"literal","value":"cake_add"},{"type":"literal","value":"calculate"},{"type":"literal","value":"calendar_add_on"},{"type":"literal","value":"calendar_apps_script"},{"type":"literal","value":"calendar_check"},{"type":"literal","value":"calendar_clock"},{"type":"literal","value":"calendar_lock"},{"type":"literal","value":"calendar_meal"},{"type":"literal","value":"calendar_meal_2"},{"type":"literal","value":"calendar_month"},{"type":"literal","value":"calendar_today"},{"type":"literal","value":"calendar_view_day"},{"type":"literal","value":"calendar_view_month"},{"type":"literal","value":"calendar_view_week"},{"type":"literal","value":"call_end"},{"type":"literal","value":"call_log"},{"type":"literal","value":"call_made"},{"type":"literal","value":"call_merge"},{"type":"literal","value":"call_missed"},{"type":"literal","value":"call_missed_outgoing"},{"type":"literal","value":"call_quality"},{"type":"literal","value":"call_received"},{"type":"literal","value":"call_split"},{"type":"literal","value":"call_to_action"},{"type":"literal","value":"camera_alt"},{"type":"literal","value":"camera_enhance"},{"type":"literal","value":"camera_front"},{"type":"literal","value":"camera_indoor"},{"type":"literal","value":"camera_outdoor"},{"type":"literal","value":"camera_rear"},{"type":"literal","value":"camera_roll"},{"type":"literal","value":"camera_video"},{"type":"literal","value":"cameraswitch"},{"type":"literal","value":"campaign"},{"type":"literal","value":"camping"},{"type":"literal","value":"cancel_presentation"},{"type":"literal","value":"cancel_schedule_send"},{"type":"literal","value":"candle"},{"type":"literal","value":"candlestick_chart"},{"type":"literal","value":"cannabis"},{"type":"literal","value":"captive_portal"},{"type":"literal","value":"capture"},{"type":"literal","value":"car_crash"},{"type":"literal","value":"car_defrost_left"},{"type":"literal","value":"car_defrost_low_left"},{"type":"literal","value":"car_defrost_low_right"},{"type":"literal","value":"car_defrost_mid_left"},{"type":"literal","value":"car_defrost_mid_low_left"},{"type":"literal","value":"car_defrost_mid_low_right"},{"type":"literal","value":"car_defrost_mid_right"},{"type":"literal","value":"car_defrost_right"},{"type":"literal","value":"car_fan_low_left"},{"type":"literal","value":"car_fan_low_mid_left"},{"type":"literal","value":"car_fan_low_right"},{"type":"literal","value":"car_fan_mid_left"},{"type":"literal","value":"car_fan_mid_low_right"},{"type":"literal","value":"car_fan_mid_right"},{"type":"literal","value":"car_fan_recirculate"},{"type":"literal","value":"car_gear"},{"type":"literal","value":"car_lock"},{"type":"literal","value":"car_mirror_heat"},{"type":"literal","value":"car_rental"},{"type":"literal","value":"car_repair"},{"type":"literal","value":"car_tag"},{"type":"literal","value":"card_giftcard"},{"type":"literal","value":"card_membership"},{"type":"literal","value":"card_travel"},{"type":"literal","value":"cardio_load"},{"type":"literal","value":"cardiology"},{"type":"literal","value":"cards"},{"type":"literal","value":"cards_star"},{"type":"literal","value":"carpenter"},{"type":"literal","value":"carry_on_bag"},{"type":"literal","value":"carry_on_bag_checked"},{"type":"literal","value":"carry_on_bag_inactive"},{"type":"literal","value":"carry_on_bag_question"},{"type":"literal","value":"cases"},{"type":"literal","value":"casino"},{"type":"literal","value":"cast"},{"type":"literal","value":"cast_connected"},{"type":"literal","value":"cast_for_education"},{"type":"literal","value":"cast_pause"},{"type":"literal","value":"cast_warning"},{"type":"literal","value":"castle"},{"type":"literal","value":"catching_pokemon"},{"type":"literal","value":"category"},{"type":"literal","value":"category_search"},{"type":"literal","value":"celebration"},{"type":"literal","value":"cell_merge"},{"type":"literal","value":"cell_tower"},{"type":"literal","value":"cell_wifi"},{"type":"literal","value":"center_focus_strong"},{"type":"literal","value":"center_focus_weak"},{"type":"literal","value":"chair_alt"},{"type":"literal","value":"chair_counter"},{"type":"literal","value":"chair_fireplace"},{"type":"literal","value":"chair_umbrella"},{"type":"literal","value":"chalet"},{"type":"literal","value":"change_circle"},{"type":"literal","value":"change_history"},{"type":"literal","value":"charger"},{"type":"literal","value":"charging_station"},{"type":"literal","value":"chart_data"},{"type":"literal","value":"chat"},{"type":"literal","value":"chat_add_on"},{"type":"literal","value":"chat_apps_script"},{"type":"literal","value":"chat_bubble"},{"type":"literal","value":"chat_bubble_outline"},{"type":"literal","value":"chat_error"},{"type":"literal","value":"chat_info"},{"type":"literal","value":"chat_paste_go"},{"type":"literal","value":"chat_paste_go_2"},{"type":"literal","value":"check"},{"type":"literal","value":"check_box"},{"type":"literal","value":"check_box_outline_blank"},{"type":"literal","value":"check_circle"},{"type":"literal","value":"check_circle_outline"},{"type":"literal","value":"check_circle_unread"},{"type":"literal","value":"check_in_out"},{"type":"literal","value":"check_indeterminate_small"},{"type":"literal","value":"check_small"},{"type":"literal","value":"checkbook"},{"type":"literal","value":"checked_bag"},{"type":"literal","value":"checked_bag_question"},{"type":"literal","value":"checklist_rtl"},{"type":"literal","value":"checkroom"},{"type":"literal","value":"cheer"},{"type":"literal","value":"chef_hat"},{"type":"literal","value":"chess"},{"type":"literal","value":"chess_bishop"},{"type":"literal","value":"chess_bishop_2"},{"type":"literal","value":"chess_king"},{"type":"literal","value":"chess_king_2"},{"type":"literal","value":"chess_knight"},{"type":"literal","value":"chess_pawn"},{"type":"literal","value":"chess_pawn_2"},{"type":"literal","value":"chess_queen"},{"type":"literal","value":"chess_rook"},{"type":"literal","value":"chevron_backward"},{"type":"literal","value":"chevron_forward"},{"type":"literal","value":"chevron_left"},{"type":"literal","value":"chevron_right"},{"type":"literal","value":"child_care"},{"type":"literal","value":"child_friendly"},{"type":"literal","value":"child_hat"},{"type":"literal","value":"chip_extraction"},{"type":"literal","value":"chips"},{"type":"literal","value":"chrome_reader_mode"},{"type":"literal","value":"chromecast_2"},{"type":"literal","value":"chromecast_device"},{"type":"literal","value":"chronic"},{"type":"literal","value":"church"},{"type":"literal","value":"cinematic_blur"},{"type":"literal","value":"circle_notifications"},{"type":"literal","value":"circles"},{"type":"literal","value":"circles_ext"},{"type":"literal","value":"clarify"},{"type":"literal","value":"class"},{"type":"literal","value":"clean_hands"},{"type":"literal","value":"cleaning"},{"type":"literal","value":"cleaning_bucket"},{"type":"literal","value":"cleaning_services"},{"type":"literal","value":"clear_all"},{"type":"literal","value":"clear_day"},{"type":"literal","value":"climate_mini_split"},{"type":"literal","value":"clinical_notes"},{"type":"literal","value":"clock_arrow_down"},{"type":"literal","value":"clock_arrow_up"},{"type":"literal","value":"clock_loader_10"},{"type":"literal","value":"clock_loader_20"},{"type":"literal","value":"clock_loader_40"},{"type":"literal","value":"clock_loader_60"},{"type":"literal","value":"clock_loader_80"},{"type":"literal","value":"clock_loader_90"},{"type":"literal","value":"close_fullscreen"},{"type":"literal","value":"close_small"},{"type":"literal","value":"closed_caption"},{"type":"literal","value":"closed_caption_add"},{"type":"literal","value":"closed_caption_disabled"},{"type":"literal","value":"closed_caption_off"},{"type":"literal","value":"cloud_alert"},{"type":"literal","value":"cloud_circle"},{"type":"literal","value":"cloud_done"},{"type":"literal","value":"cloud_download"},{"type":"literal","value":"cloud_lock"},{"type":"literal","value":"cloud_off"},{"type":"literal","value":"cloud_queue"},{"type":"literal","value":"cloud_sync"},{"type":"literal","value":"cloud_upload"},{"type":"literal","value":"cloudy_snowing"},{"type":"literal","value":"co2"},{"type":"literal","value":"co_present"},{"type":"literal","value":"code_blocks"},{"type":"literal","value":"code_off"},{"type":"literal","value":"coffee"},{"type":"literal","value":"coffee_maker"},{"type":"literal","value":"cognition"},{"type":"literal","value":"cognition_2"},{"type":"literal","value":"collapse_all"},{"type":"literal","value":"collapse_content"},{"type":"literal","value":"collections"},{"type":"literal","value":"collections_bookmark"},{"type":"literal","value":"color_lens"},{"type":"literal","value":"colorize"},{"type":"literal","value":"combine_columns"},{"type":"literal","value":"comedy_mask"},{"type":"literal","value":"comic_bubble"},{"type":"literal","value":"comment"},{"type":"literal","value":"comment_bank"},{"type":"literal","value":"comments_disabled"},{"type":"literal","value":"commit"},{"type":"literal","value":"communication"},{"type":"literal","value":"communities"},{"type":"literal","value":"commute"},{"type":"literal","value":"compare"},{"type":"literal","value":"compare_arrows"},{"type":"literal","value":"compass_calibration"},{"type":"literal","value":"component_exchange"},{"type":"literal","value":"compost"},{"type":"literal","value":"compress"},{"type":"literal","value":"computer"},{"type":"literal","value":"computer_arrow_up"},{"type":"literal","value":"computer_cancel"},{"type":"literal","value":"concierge"},{"type":"literal","value":"conditions"},{"type":"literal","value":"confirmation_number"},{"type":"literal","value":"congenital"},{"type":"literal","value":"connect_without_contact"},{"type":"literal","value":"connected_tv"},{"type":"literal","value":"connecting_airports"},{"type":"literal","value":"construction"},{"type":"literal","value":"contact_emergency"},{"type":"literal","value":"contact_mail"},{"type":"literal","value":"contact_page"},{"type":"literal","value":"contact_phone"},{"type":"literal","value":"contact_support"},{"type":"literal","value":"contactless"},{"type":"literal","value":"contactless_off"},{"type":"literal","value":"contacts_product"},{"type":"literal","value":"content_copy"},{"type":"literal","value":"content_cut"},{"type":"literal","value":"content_paste"},{"type":"literal","value":"content_paste_go"},{"type":"literal","value":"content_paste_off"},{"type":"literal","value":"content_paste_search"},{"type":"literal","value":"contextual_token"},{"type":"literal","value":"contextual_token_add"},{"type":"literal","value":"contract"},{"type":"literal","value":"contract_delete"},{"type":"literal","value":"contract_edit"},{"type":"literal","value":"contrast_circle"},{"type":"literal","value":"contrast_rtl_off"},{"type":"literal","value":"contrast_square"},{"type":"literal","value":"control_camera"},{"type":"literal","value":"control_point"},{"type":"literal","value":"control_point_duplicate"},{"type":"literal","value":"controller_gen"},{"type":"literal","value":"conversation"},{"type":"literal","value":"conversion_path"},{"type":"literal","value":"conversion_path_off"},{"type":"literal","value":"convert_to_text"},{"type":"literal","value":"conveyor_belt"},{"type":"literal","value":"cookie"},{"type":"literal","value":"cookie_off"},{"type":"literal","value":"cooking"},{"type":"literal","value":"cool_to_dry"},{"type":"literal","value":"copy_all"},{"type":"literal","value":"copyright"},{"type":"literal","value":"coronavirus"},{"type":"literal","value":"corporate_fare"},{"type":"literal","value":"cottage"},{"type":"literal","value":"counter_0"},{"type":"literal","value":"counter_1"},{"type":"literal","value":"counter_2"},{"type":"literal","value":"counter_3"},{"type":"literal","value":"counter_4"},{"type":"literal","value":"counter_5"},{"type":"literal","value":"counter_6"},{"type":"literal","value":"counter_7"},{"type":"literal","value":"counter_8"},{"type":"literal","value":"counter_9"},{"type":"literal","value":"countertops"},{"type":"literal","value":"create_new_folder"},{"type":"literal","value":"credit_card"},{"type":"literal","value":"credit_card_clock"},{"type":"literal","value":"credit_card_gear"},{"type":"literal","value":"credit_card_heart"},{"type":"literal","value":"credit_card_off"},{"type":"literal","value":"credit_score"},{"type":"literal","value":"crib"},{"type":"literal","value":"crisis_alert"},{"type":"literal","value":"crop_16_9"},{"type":"literal","value":"crop_3_2"},{"type":"literal","value":"crop_5_4"},{"type":"literal","value":"crop_7_5"},{"type":"literal","value":"crop_9_16"},{"type":"literal","value":"crop_din"},{"type":"literal","value":"crop_free"},{"type":"literal","value":"crop_landscape"},{"type":"literal","value":"crop_original"},{"type":"literal","value":"crop_portrait"},{"type":"literal","value":"crop_rotate"},{"type":"literal","value":"crop_square"},{"type":"literal","value":"crossword"},{"type":"literal","value":"crowdsource"},{"type":"literal","value":"cruelty_free"},{"type":"literal","value":"css"},{"type":"literal","value":"csv"},{"type":"literal","value":"currency_bitcoin"},{"type":"literal","value":"currency_exchange"},{"type":"literal","value":"currency_franc"},{"type":"literal","value":"currency_lira"},{"type":"literal","value":"currency_pound"},{"type":"literal","value":"currency_ruble"},{"type":"literal","value":"currency_rupee"},{"type":"literal","value":"currency_rupee_circle"},{"type":"literal","value":"currency_yen"},{"type":"literal","value":"currency_yuan"},{"type":"literal","value":"curtains"},{"type":"literal","value":"curtains_closed"},{"type":"literal","value":"custom_typography"},{"type":"literal","value":"cycle"},{"type":"literal","value":"cyclone"},{"type":"literal","value":"dangerous"},{"type":"literal","value":"dark_mode"},{"type":"literal","value":"dashboard"},{"type":"literal","value":"dashboard_2"},{"type":"literal","value":"dashboard_customize"},{"type":"literal","value":"data_alert"},{"type":"literal","value":"data_array"},{"type":"literal","value":"data_check"},{"type":"literal","value":"data_exploration"},{"type":"literal","value":"data_info_alert"},{"type":"literal","value":"data_loss_prevention"},{"type":"literal","value":"data_object"},{"type":"literal","value":"data_saver_off"},{"type":"literal","value":"data_saver_on"},{"type":"literal","value":"data_table"},{"type":"literal","value":"data_thresholding"},{"type":"literal","value":"data_usage"},{"type":"literal","value":"database"},{"type":"literal","value":"database_off"},{"type":"literal","value":"database_search"},{"type":"literal","value":"database_upload"},{"type":"literal","value":"dataset"},{"type":"literal","value":"dataset_linked"},{"type":"literal","value":"date_range"},{"type":"literal","value":"deblur"},{"type":"literal","value":"deceased"},{"type":"literal","value":"decimal_decrease"},{"type":"literal","value":"decimal_increase"},{"type":"literal","value":"deck"},{"type":"literal","value":"dehaze"},{"type":"literal","value":"delete"},{"type":"literal","value":"delete_forever"},{"type":"literal","value":"delete_history"},{"type":"literal","value":"delete_outline"},{"type":"literal","value":"delete_sweep"},{"type":"literal","value":"delivery_dining"},{"type":"literal","value":"delivery_truck_bolt"},{"type":"literal","value":"delivery_truck_speed"},{"type":"literal","value":"demography"},{"type":"literal","value":"density_large"},{"type":"literal","value":"density_medium"},{"type":"literal","value":"density_small"},{"type":"literal","value":"dentistry"},{"type":"literal","value":"departure_board"},{"type":"literal","value":"deployed_code"},{"type":"literal","value":"deployed_code_account"},{"type":"literal","value":"deployed_code_alert"},{"type":"literal","value":"deployed_code_history"},{"type":"literal","value":"deployed_code_update"},{"type":"literal","value":"dermatology"},{"type":"literal","value":"deselect"},{"type":"literal","value":"design_services"},{"type":"literal","value":"desk"},{"type":"literal","value":"deskphone"},{"type":"literal","value":"desktop_access_disabled"},{"type":"literal","value":"desktop_cloud"},{"type":"literal","value":"desktop_cloud_stack"},{"type":"literal","value":"desktop_landscape"},{"type":"literal","value":"desktop_landscape_add"},{"type":"literal","value":"desktop_mac"},{"type":"literal","value":"desktop_portrait"},{"type":"literal","value":"desktop_windows"},{"type":"literal","value":"destruction"},{"type":"literal","value":"detection_and_zone"},{"type":"literal","value":"detector"},{"type":"literal","value":"detector_alarm"},{"type":"literal","value":"detector_battery"},{"type":"literal","value":"detector_co"},{"type":"literal","value":"detector_offline"},{"type":"literal","value":"detector_smoke"},{"type":"literal","value":"detector_status"},{"type":"literal","value":"developer_board"},{"type":"literal","value":"developer_board_off"},{"type":"literal","value":"developer_guide"},{"type":"literal","value":"developer_mode"},{"type":"literal","value":"developer_mode_tv"},{"type":"literal","value":"device_band"},{"type":"literal","value":"device_hub"},{"type":"literal","value":"device_thermostat"},{"type":"literal","value":"device_unknown"},{"type":"literal","value":"devices"},{"type":"literal","value":"devices_fold"},{"type":"literal","value":"devices_fold_2"},{"type":"literal","value":"devices_off"},{"type":"literal","value":"devices_other"},{"type":"literal","value":"devices_wearables"},{"type":"literal","value":"dew_point"},{"type":"literal","value":"diagnosis"},{"type":"literal","value":"diagonal_line"},{"type":"literal","value":"dialer_sip"},{"type":"literal","value":"dialogs"},{"type":"literal","value":"dialpad"},{"type":"literal","value":"diamond_shine"},{"type":"literal","value":"dictionary"},{"type":"literal","value":"digital_out_of_home"},{"type":"literal","value":"digital_wellbeing"},{"type":"literal","value":"dine_heart"},{"type":"literal","value":"dine_in"},{"type":"literal","value":"dine_lamp"},{"type":"literal","value":"dining"},{"type":"literal","value":"dinner_dining"},{"type":"literal","value":"directions"},{"type":"literal","value":"directions_alt"},{"type":"literal","value":"directions_alt_off"},{"type":"literal","value":"directions_bike"},{"type":"literal","value":"directions_boat"},{"type":"literal","value":"directions_boat_filled"},{"type":"literal","value":"directions_bus"},{"type":"literal","value":"directions_bus_filled"},{"type":"literal","value":"directions_car"},{"type":"literal","value":"directions_car_filled"},{"type":"literal","value":"directions_off"},{"type":"literal","value":"directions_railway"},{"type":"literal","value":"directions_railway_2"},{"type":"literal","value":"directions_railway_filled"},{"type":"literal","value":"directions_run"},{"type":"literal","value":"directions_subway"},{"type":"literal","value":"directions_subway_filled"},{"type":"literal","value":"directions_transit"},{"type":"literal","value":"directions_transit_filled"},{"type":"literal","value":"directions_walk"},{"type":"literal","value":"directory_sync"},{"type":"literal","value":"dirty_lens"},{"type":"literal","value":"disabled_by_default"},{"type":"literal","value":"disabled_visible"},{"type":"literal","value":"disc_full"},{"type":"literal","value":"discount"},{"type":"literal","value":"discover_tune"},{"type":"literal","value":"dishwasher_gen"},{"type":"literal","value":"display_external_input"},{"type":"literal","value":"display_settings"},{"type":"literal","value":"distance"},{"type":"literal","value":"diversity_1"},{"type":"literal","value":"diversity_2"},{"type":"literal","value":"diversity_3"},{"type":"literal","value":"diversity_4"},{"type":"literal","value":"dns"},{"type":"literal","value":"do_disturb"},{"type":"literal","value":"do_disturb_alt"},{"type":"literal","value":"do_disturb_off"},{"type":"literal","value":"do_disturb_on"},{"type":"literal","value":"do_not_disturb"},{"type":"literal","value":"do_not_disturb_alt"},{"type":"literal","value":"do_not_disturb_off"},{"type":"literal","value":"do_not_disturb_on"},{"type":"literal","value":"do_not_disturb_on_total_silence"},{"type":"literal","value":"do_not_step"},{"type":"literal","value":"do_not_touch"},{"type":"literal","value":"dock"},{"type":"literal","value":"dock_to_bottom"},{"type":"literal","value":"dock_to_left"},{"type":"literal","value":"dock_to_right"},{"type":"literal","value":"docs"},{"type":"literal","value":"docs_add_on"},{"type":"literal","value":"docs_apps_script"},{"type":"literal","value":"document_scanner"},{"type":"literal","value":"document_search"},{"type":"literal","value":"domain"},{"type":"literal","value":"domain_add"},{"type":"literal","value":"domain_disabled"},{"type":"literal","value":"domain_verification"},{"type":"literal","value":"domain_verification_off"},{"type":"literal","value":"domino_mask"},{"type":"literal","value":"done_all"},{"type":"literal","value":"done_outline"},{"type":"literal","value":"donut_large"},{"type":"literal","value":"donut_small"},{"type":"literal","value":"door_back"},{"type":"literal","value":"door_front"},{"type":"literal","value":"door_open"},{"type":"literal","value":"door_sensor"},{"type":"literal","value":"door_sliding"},{"type":"literal","value":"doorbell"},{"type":"literal","value":"doorbell_3p"},{"type":"literal","value":"doorbell_chime"},{"type":"literal","value":"double_arrow"},{"type":"literal","value":"downhill_skiing"},{"type":"literal","value":"download_2"},{"type":"literal","value":"download_done"},{"type":"literal","value":"download_for_offline"},{"type":"literal","value":"downloading"},{"type":"literal","value":"draft"},{"type":"literal","value":"draft_orders"},{"type":"literal","value":"drafts"},{"type":"literal","value":"drag_click"},{"type":"literal","value":"drag_handle"},{"type":"literal","value":"drag_indicator"},{"type":"literal","value":"drag_pan"},{"type":"literal","value":"draw"},{"type":"literal","value":"draw_abstract"},{"type":"literal","value":"draw_collage"},{"type":"literal","value":"dresser"},{"type":"literal","value":"drive_eta"},{"type":"literal","value":"drive_export"},{"type":"literal","value":"drive_file_move"},{"type":"literal","value":"drive_file_move_outline"},{"type":"literal","value":"drive_file_move_rtl"},{"type":"literal","value":"drive_file_rename_outline"},{"type":"literal","value":"drive_folder_upload"},{"type":"literal","value":"drone_2"},{"type":"literal","value":"dropdown"},{"type":"literal","value":"dropper_eye"},{"type":"literal","value":"dry"},{"type":"literal","value":"dry_cleaning"},{"type":"literal","value":"dual_screen"},{"type":"literal","value":"duo"},{"type":"literal","value":"dvr"},{"type":"literal","value":"dynamic_feed"},{"type":"literal","value":"dynamic_form"},{"type":"literal","value":"e911_avatar"},{"type":"literal","value":"e911_emergency"},{"type":"literal","value":"e_mobiledata"},{"type":"literal","value":"e_mobiledata_badge"},{"type":"literal","value":"ear_sound"},{"type":"literal","value":"earbud_case"},{"type":"literal","value":"earbud_left"},{"type":"literal","value":"earbud_right"},{"type":"literal","value":"earbuds_2"},{"type":"literal","value":"earbuds_battery"},{"type":"literal","value":"early_on"},{"type":"literal","value":"earthquake"},{"type":"literal","value":"east"},{"type":"literal","value":"ecg"},{"type":"literal","value":"ecg_heart"},{"type":"literal","value":"eco"},{"type":"literal","value":"eda"},{"type":"literal","value":"edgesensor_high"},{"type":"literal","value":"edgesensor_low"},{"type":"literal","value":"edit"},{"type":"literal","value":"edit_arrow_down"},{"type":"literal","value":"edit_arrow_up"},{"type":"literal","value":"edit_attributes"},{"type":"literal","value":"edit_audio"},{"type":"literal","value":"edit_calendar"},{"type":"literal","value":"edit_document"},{"type":"literal","value":"edit_location"},{"type":"literal","value":"edit_location_alt"},{"type":"literal","value":"edit_note"},{"type":"literal","value":"edit_notifications"},{"type":"literal","value":"edit_off"},{"type":"literal","value":"edit_road"},{"type":"literal","value":"edit_square"},{"type":"literal","value":"editor_choice"},{"type":"literal","value":"egg"},{"type":"literal","value":"egg_alt"},{"type":"literal","value":"elderly"},{"type":"literal","value":"elderly_woman"},{"type":"literal","value":"electric_bike"},{"type":"literal","value":"electric_bolt"},{"type":"literal","value":"electric_car"},{"type":"literal","value":"electric_meter"},{"type":"literal","value":"electric_moped"},{"type":"literal","value":"electric_rickshaw"},{"type":"literal","value":"electric_scooter"},{"type":"literal","value":"electrical_services"},{"type":"literal","value":"elevator"},{"type":"literal","value":"emergency"},{"type":"literal","value":"emergency_heat"},{"type":"literal","value":"emergency_heat_2"},{"type":"literal","value":"emergency_home"},{"type":"literal","value":"emergency_recording"},{"type":"literal","value":"emergency_share"},{"type":"literal","value":"emergency_share_off"},{"type":"literal","value":"emoji_emotions"},{"type":"literal","value":"emoji_events"},{"type":"literal","value":"emoji_food_beverage"},{"type":"literal","value":"emoji_language"},{"type":"literal","value":"emoji_nature"},{"type":"literal","value":"emoji_objects"},{"type":"literal","value":"emoji_people"},{"type":"literal","value":"emoji_symbols"},{"type":"literal","value":"emoji_transportation"},{"type":"literal","value":"emoticon"},{"type":"literal","value":"empty_dashboard"},{"type":"literal","value":"enable"},{"type":"literal","value":"encrypted"},{"type":"literal","value":"encrypted_add"},{"type":"literal","value":"encrypted_add_circle"},{"type":"literal","value":"encrypted_minus_circle"},{"type":"literal","value":"encrypted_off"},{"type":"literal","value":"endocrinology"},{"type":"literal","value":"energy"},{"type":"literal","value":"energy_program_saving"},{"type":"literal","value":"energy_program_time_used"},{"type":"literal","value":"energy_savings_leaf"},{"type":"literal","value":"engineering"},{"type":"literal","value":"enhanced_encryption"},{"type":"literal","value":"ent"},{"type":"literal","value":"enterprise"},{"type":"literal","value":"enterprise_off"},{"type":"literal","value":"equalizer"},{"type":"literal","value":"eraser_size_1"},{"type":"literal","value":"eraser_size_2"},{"type":"literal","value":"eraser_size_3"},{"type":"literal","value":"eraser_size_4"},{"type":"literal","value":"eraser_size_5"},{"type":"literal","value":"error_med"},{"type":"literal","value":"error_outline"},{"type":"literal","value":"escalator"},{"type":"literal","value":"escalator_warning"},{"type":"literal","value":"euro"},{"type":"literal","value":"euro_symbol"},{"type":"literal","value":"ev_mobiledata_badge"},{"type":"literal","value":"ev_shadow"},{"type":"literal","value":"ev_shadow_add"},{"type":"literal","value":"ev_shadow_minus"},{"type":"literal","value":"ev_station"},{"type":"literal","value":"event_available"},{"type":"literal","value":"event_busy"},{"type":"literal","value":"event_list"},{"type":"literal","value":"event_note"},{"type":"literal","value":"event_repeat"},{"type":"literal","value":"event_seat"},{"type":"literal","value":"event_upcoming"},{"type":"literal","value":"exclamation"},{"type":"literal","value":"exercise"},{"type":"literal","value":"exit_to_app"},{"type":"literal","value":"expand_all"},{"type":"literal","value":"expand_circle_down"},{"type":"literal","value":"expand_circle_right"},{"type":"literal","value":"expand_circle_up"},{"type":"literal","value":"expand_content"},{"type":"literal","value":"expand_less"},{"type":"literal","value":"expand_more"},{"type":"literal","value":"expansion_panels"},{"type":"literal","value":"experiment"},{"type":"literal","value":"explicit"},{"type":"literal","value":"explore"},{"type":"literal","value":"explore_nearby"},{"type":"literal","value":"explore_off"},{"type":"literal","value":"explosion"},{"type":"literal","value":"export_notes"},{"type":"literal","value":"exposure"},{"type":"literal","value":"exposure_neg_1"},{"type":"literal","value":"exposure_neg_2"},{"type":"literal","value":"exposure_plus_1"},{"type":"literal","value":"exposure_plus_2"},{"type":"literal","value":"exposure_zero"},{"type":"literal","value":"extension"},{"type":"literal","value":"extension_off"},{"type":"literal","value":"eye_tracking"},{"type":"literal","value":"eyeglasses_2"},{"type":"literal","value":"eyeglasses_2_sound"},{"type":"literal","value":"face"},{"type":"literal","value":"face_2"},{"type":"literal","value":"face_3"},{"type":"literal","value":"face_4"},{"type":"literal","value":"face_5"},{"type":"literal","value":"face_6"},{"type":"literal","value":"face_down"},{"type":"literal","value":"face_left"},{"type":"literal","value":"face_nod"},{"type":"literal","value":"face_retouching_natural"},{"type":"literal","value":"face_retouching_off"},{"type":"literal","value":"face_right"},{"type":"literal","value":"face_shake"},{"type":"literal","value":"face_unlock"},{"type":"literal","value":"face_up"},{"type":"literal","value":"fact_check"},{"type":"literal","value":"factory"},{"type":"literal","value":"falling"},{"type":"literal","value":"familiar_face_and_zone"},{"type":"literal","value":"family_group"},{"type":"literal","value":"family_history"},{"type":"literal","value":"family_home"},{"type":"literal","value":"family_link"},{"type":"literal","value":"family_restroom"},{"type":"literal","value":"family_star"},{"type":"literal","value":"fan_focus"},{"type":"literal","value":"fan_indirect"},{"type":"literal","value":"farsight_digital"},{"type":"literal","value":"fast_forward"},{"type":"literal","value":"fast_rewind"},{"type":"literal","value":"fastfood"},{"type":"literal","value":"faucet"},{"type":"literal","value":"favorite"},{"type":"literal","value":"favorite_border"},{"type":"literal","value":"fax"},{"type":"literal","value":"feature_search"},{"type":"literal","value":"featured_play_list"},{"type":"literal","value":"featured_seasonal_and_gifts"},{"type":"literal","value":"featured_video"},{"type":"literal","value":"feedback"},{"type":"literal","value":"female"},{"type":"literal","value":"femur"},{"type":"literal","value":"femur_alt"},{"type":"literal","value":"fence"},{"type":"literal","value":"fertile"},{"type":"literal","value":"festival"},{"type":"literal","value":"fiber_dvr"},{"type":"literal","value":"fiber_manual_record"},{"type":"literal","value":"fiber_new"},{"type":"literal","value":"fiber_pin"},{"type":"literal","value":"fiber_smart_record"},{"type":"literal","value":"file_copy"},{"type":"literal","value":"file_copy_off"},{"type":"literal","value":"file_download"},{"type":"literal","value":"file_download_done"},{"type":"literal","value":"file_download_off"},{"type":"literal","value":"file_export"},{"type":"literal","value":"file_json"},{"type":"literal","value":"file_map"},{"type":"literal","value":"file_map_stack"},{"type":"literal","value":"file_open"},{"type":"literal","value":"file_png"},{"type":"literal","value":"file_present"},{"type":"literal","value":"file_save"},{"type":"literal","value":"file_save_off"},{"type":"literal","value":"file_upload"},{"type":"literal","value":"file_upload_off"},{"type":"literal","value":"files"},{"type":"literal","value":"filter_1"},{"type":"literal","value":"filter_2"},{"type":"literal","value":"filter_3"},{"type":"literal","value":"filter_4"},{"type":"literal","value":"filter_5"},{"type":"literal","value":"filter_6"},{"type":"literal","value":"filter_7"},{"type":"literal","value":"filter_8"},{"type":"literal","value":"filter_9"},{"type":"literal","value":"filter_9_plus"},{"type":"literal","value":"filter_alt"},{"type":"literal","value":"filter_alt_off"},{"type":"literal","value":"filter_arrow_right"},{"type":"literal","value":"filter_b_and_w"},{"type":"literal","value":"filter_center_focus"},{"type":"literal","value":"filter_drama"},{"type":"literal","value":"filter_frames"},{"type":"literal","value":"filter_hdr"},{"type":"literal","value":"filter_list"},{"type":"literal","value":"filter_list_alt"},{"type":"literal","value":"filter_list_off"},{"type":"literal","value":"filter_none"},{"type":"literal","value":"filter_retrolux"},{"type":"literal","value":"filter_tilt_shift"},{"type":"literal","value":"filter_vintage"},{"type":"literal","value":"finance"},{"type":"literal","value":"finance_chip"},{"type":"literal","value":"finance_mode"},{"type":"literal","value":"find_in_page"},{"type":"literal","value":"find_replace"},{"type":"literal","value":"fingerprint"},{"type":"literal","value":"fingerprint_off"},{"type":"literal","value":"fire_extinguisher"},{"type":"literal","value":"fire_hydrant"},{"type":"literal","value":"fire_hydrant_alt"},{"type":"literal","value":"fire_truck"},{"type":"literal","value":"first_page"},{"type":"literal","value":"fit_page"},{"type":"literal","value":"fit_page_height"},{"type":"literal","value":"fit_page_width"},{"type":"literal","value":"fit_screen"},{"type":"literal","value":"fit_width"},{"type":"literal","value":"fitbit"},{"type":"literal","value":"fitness_center"},{"type":"literal","value":"fitness_tracker"},{"type":"literal","value":"fitness_trackers"},{"type":"literal","value":"flag_2"},{"type":"literal","value":"flag_check"},{"type":"literal","value":"flag_circle"},{"type":"literal","value":"flaky"},{"type":"literal","value":"flare"},{"type":"literal","value":"flash_auto"},{"type":"literal","value":"flash_off"},{"type":"literal","value":"flash_on"},{"type":"literal","value":"flashlight_off"},{"type":"literal","value":"flashlight_on"},{"type":"literal","value":"flatware"},{"type":"literal","value":"flex_direction"},{"type":"literal","value":"flex_no_wrap"},{"type":"literal","value":"flex_wrap"},{"type":"literal","value":"flight"},{"type":"literal","value":"flight_class"},{"type":"literal","value":"flight_land"},{"type":"literal","value":"flight_takeoff"},{"type":"literal","value":"flights_and_hotels"},{"type":"literal","value":"flip_camera_android"},{"type":"literal","value":"flip_camera_ios"},{"type":"literal","value":"flip_to_back"},{"type":"literal","value":"flip_to_front"},{"type":"literal","value":"float_landscape_2"},{"type":"literal","value":"float_portrait_2"},{"type":"literal","value":"flood"},{"type":"literal","value":"floor"},{"type":"literal","value":"floor_lamp"},{"type":"literal","value":"flowsheet"},{"type":"literal","value":"fluid"},{"type":"literal","value":"fluid_balance"},{"type":"literal","value":"fluid_med"},{"type":"literal","value":"fluorescent"},{"type":"literal","value":"flutter"},{"type":"literal","value":"flutter_dash"},{"type":"literal","value":"flyover"},{"type":"literal","value":"fmd_bad"},{"type":"literal","value":"fmd_good"},{"type":"literal","value":"foggy"},{"type":"literal","value":"folded_hands"},{"type":"literal","value":"folder_check"},{"type":"literal","value":"folder_check_2"},{"type":"literal","value":"folder_code"},{"type":"literal","value":"folder_copy"},{"type":"literal","value":"folder_data"},{"type":"literal","value":"folder_delete"},{"type":"literal","value":"folder_eye"},{"type":"literal","value":"folder_info"},{"type":"literal","value":"folder_limited"},{"type":"literal","value":"folder_managed"},{"type":"literal","value":"folder_match"},{"type":"literal","value":"folder_off"},{"type":"literal","value":"folder_open"},{"type":"literal","value":"folder_shared"},{"type":"literal","value":"folder_special"},{"type":"literal","value":"folder_supervised"},{"type":"literal","value":"folder_zip"},{"type":"literal","value":"follow_the_signs"},{"type":"literal","value":"font_download"},{"type":"literal","value":"font_download_off"},{"type":"literal","value":"food_bank"},{"type":"literal","value":"foot_bones"},{"type":"literal","value":"footprint"},{"type":"literal","value":"for_you"},{"type":"literal","value":"forest"},{"type":"literal","value":"fork_left"},{"type":"literal","value":"fork_right"},{"type":"literal","value":"fork_spoon"},{"type":"literal","value":"forklift"},{"type":"literal","value":"format_align_center"},{"type":"literal","value":"format_align_justify"},{"type":"literal","value":"format_align_left"},{"type":"literal","value":"format_align_right"},{"type":"literal","value":"format_bold"},{"type":"literal","value":"format_clear"},{"type":"literal","value":"format_color_fill"},{"type":"literal","value":"format_color_reset"},{"type":"literal","value":"format_color_text"},{"type":"literal","value":"format_h1"},{"type":"literal","value":"format_h2"},{"type":"literal","value":"format_h3"},{"type":"literal","value":"format_h4"},{"type":"literal","value":"format_h5"},{"type":"literal","value":"format_h6"},{"type":"literal","value":"format_image_left"},{"type":"literal","value":"format_image_right"},{"type":"literal","value":"format_indent_decrease"},{"type":"literal","value":"format_indent_increase"},{"type":"literal","value":"format_ink_highlighter"},{"type":"literal","value":"format_italic"},{"type":"literal","value":"format_letter_spacing"},{"type":"literal","value":"format_letter_spacing_2"},{"type":"literal","value":"format_letter_spacing_standard"},{"type":"literal","value":"format_letter_spacing_wide"},{"type":"literal","value":"format_letter_spacing_wider"},{"type":"literal","value":"format_line_spacing"},{"type":"literal","value":"format_list_bulleted"},{"type":"literal","value":"format_list_bulleted_add"},{"type":"literal","value":"format_list_numbered"},{"type":"literal","value":"format_list_numbered_rtl"},{"type":"literal","value":"format_overline"},{"type":"literal","value":"format_paint"},{"type":"literal","value":"format_paragraph"},{"type":"literal","value":"format_quote"},{"type":"literal","value":"format_quote_off"},{"type":"literal","value":"format_shapes"},{"type":"literal","value":"format_size"},{"type":"literal","value":"format_strikethrough"},{"type":"literal","value":"format_text_clip"},{"type":"literal","value":"format_text_overflow"},{"type":"literal","value":"format_text_wrap"},{"type":"literal","value":"format_textdirection_l_to_r"},{"type":"literal","value":"format_textdirection_r_to_l"},{"type":"literal","value":"format_textdirection_vertical"},{"type":"literal","value":"format_underlined"},{"type":"literal","value":"format_underlined_squiggle"},{"type":"literal","value":"forms_add_on"},{"type":"literal","value":"forms_apps_script"},{"type":"literal","value":"fort"},{"type":"literal","value":"forum"},{"type":"literal","value":"forward_10"},{"type":"literal","value":"forward_30"},{"type":"literal","value":"forward_5"},{"type":"literal","value":"forward_circle"},{"type":"literal","value":"forward_media"},{"type":"literal","value":"forward_to_inbox"},{"type":"literal","value":"foundation"},{"type":"literal","value":"fragrance"},{"type":"literal","value":"frame_inspect"},{"type":"literal","value":"frame_person"},{"type":"literal","value":"frame_person_mic"},{"type":"literal","value":"frame_person_off"},{"type":"literal","value":"frame_reload"},{"type":"literal","value":"frame_source"},{"type":"literal","value":"free_breakfast"},{"type":"literal","value":"free_cancellation"},{"type":"literal","value":"front_hand"},{"type":"literal","value":"front_loader"},{"type":"literal","value":"full_coverage"},{"type":"literal","value":"full_hd"},{"type":"literal","value":"full_stacked_bar_chart"},{"type":"literal","value":"fullscreen"},{"type":"literal","value":"fullscreen_exit"},{"type":"literal","value":"fullscreen_portrait"},{"type":"literal","value":"functions"},{"type":"literal","value":"funicular"},{"type":"literal","value":"g_mobiledata"},{"type":"literal","value":"g_mobiledata_badge"},{"type":"literal","value":"g_translate"},{"type":"literal","value":"gallery_thumbnail"},{"type":"literal","value":"gamepad"},{"type":"literal","value":"games"},{"type":"literal","value":"garage"},{"type":"literal","value":"garage_check"},{"type":"literal","value":"garage_door"},{"type":"literal","value":"garage_home"},{"type":"literal","value":"garage_money"},{"type":"literal","value":"garden_cart"},{"type":"literal","value":"gas_meter"},{"type":"literal","value":"gastroenterology"},{"type":"literal","value":"gate"},{"type":"literal","value":"gavel"},{"type":"literal","value":"general_device"},{"type":"literal","value":"generating_tokens"},{"type":"literal","value":"genetics"},{"type":"literal","value":"genres"},{"type":"literal","value":"gesture"},{"type":"literal","value":"gesture_select"},{"type":"literal","value":"get_app"},{"type":"literal","value":"gif"},{"type":"literal","value":"gif_2"},{"type":"literal","value":"gif_box"},{"type":"literal","value":"girl"},{"type":"literal","value":"gite"},{"type":"literal","value":"glass_cup"},{"type":"literal","value":"globe_asia"},{"type":"literal","value":"globe_book"},{"type":"literal","value":"globe_location_pin"},{"type":"literal","value":"globe_uk"},{"type":"literal","value":"glucose"},{"type":"literal","value":"glyphs"},{"type":"literal","value":"go_to_line"},{"type":"literal","value":"golf_course"},{"type":"literal","value":"gondola_lift"},{"type":"literal","value":"google_home_devices"},{"type":"literal","value":"google_tv_remote"},{"type":"literal","value":"google_wifi"},{"type":"literal","value":"gpp_bad"},{"type":"literal","value":"gpp_good"},{"type":"literal","value":"gpp_maybe"},{"type":"literal","value":"gps_fixed"},{"type":"literal","value":"gps_not_fixed"},{"type":"literal","value":"gps_off"},{"type":"literal","value":"grade"},{"type":"literal","value":"gradient"},{"type":"literal","value":"grading"},{"type":"literal","value":"grain"},{"type":"literal","value":"graph_1"},{"type":"literal","value":"graph_2"},{"type":"literal","value":"graph_3"},{"type":"literal","value":"graph_4"},{"type":"literal","value":"graph_5"},{"type":"literal","value":"graph_6"},{"type":"literal","value":"graph_7"},{"type":"literal","value":"graphic_eq"},{"type":"literal","value":"grass"},{"type":"literal","value":"grid_3x3"},{"type":"literal","value":"grid_3x3_off"},{"type":"literal","value":"grid_4x4"},{"type":"literal","value":"grid_goldenratio"},{"type":"literal","value":"grid_guides"},{"type":"literal","value":"grid_off"},{"type":"literal","value":"grid_on"},{"type":"literal","value":"grid_view"},{"type":"literal","value":"grocery"},{"type":"literal","value":"group_add"},{"type":"literal","value":"group_off"},{"type":"literal","value":"group_remove"},{"type":"literal","value":"group_search"},{"type":"literal","value":"group_work"},{"type":"literal","value":"grouped_bar_chart"},{"type":"literal","value":"groups_2"},{"type":"literal","value":"groups_3"},{"type":"literal","value":"guardian"},{"type":"literal","value":"gynecology"},{"type":"literal","value":"h_mobiledata"},{"type":"literal","value":"h_mobiledata_badge"},{"type":"literal","value":"h_plus_mobiledata"},{"type":"literal","value":"h_plus_mobiledata_badge"},{"type":"literal","value":"hail"},{"type":"literal","value":"hallway"},{"type":"literal","value":"hanami_dango"},{"type":"literal","value":"hand_bones"},{"type":"literal","value":"hand_gesture"},{"type":"literal","value":"hand_gesture_off"},{"type":"literal","value":"hand_meal"},{"type":"literal","value":"hand_package"},{"type":"literal","value":"handheld_controller"},{"type":"literal","value":"handshake"},{"type":"literal","value":"handyman"},{"type":"literal","value":"hangout_video"},{"type":"literal","value":"hangout_video_off"},{"type":"literal","value":"hard_disk"},{"type":"literal","value":"hard_drive"},{"type":"literal","value":"hard_drive_2"},{"type":"literal","value":"hardware"},{"type":"literal","value":"hd"},{"type":"literal","value":"hdr_auto"},{"type":"literal","value":"hdr_auto_select"},{"type":"literal","value":"hdr_enhanced_select"},{"type":"literal","value":"hdr_off"},{"type":"literal","value":"hdr_off_select"},{"type":"literal","value":"hdr_on"},{"type":"literal","value":"hdr_on_select"},{"type":"literal","value":"hdr_plus"},{"type":"literal","value":"hdr_plus_off"},{"type":"literal","value":"hdr_strong"},{"type":"literal","value":"hdr_weak"},{"type":"literal","value":"head_mounted_device"},{"type":"literal","value":"headphones_battery"},{"type":"literal","value":"headset_mic"},{"type":"literal","value":"headset_off"},{"type":"literal","value":"healing"},{"type":"literal","value":"health_and_beauty"},{"type":"literal","value":"health_and_safety"},{"type":"literal","value":"health_cross"},{"type":"literal","value":"health_metrics"},{"type":"literal","value":"heap_snapshot_large"},{"type":"literal","value":"heap_snapshot_multiple"},{"type":"literal","value":"heap_snapshot_thumbnail"},{"type":"literal","value":"hearing"},{"type":"literal","value":"hearing_aid"},{"type":"literal","value":"hearing_aid_disabled"},{"type":"literal","value":"hearing_aid_disabled_left"},{"type":"literal","value":"hearing_aid_left"},{"type":"literal","value":"hearing_disabled"},{"type":"literal","value":"heart_broken"},{"type":"literal","value":"heart_check"},{"type":"literal","value":"heart_minus"},{"type":"literal","value":"heart_plus"},{"type":"literal","value":"heart_smile"},{"type":"literal","value":"heat"},{"type":"literal","value":"heat_pump"},{"type":"literal","value":"heat_pump_balance"},{"type":"literal","value":"helicopter"},{"type":"literal","value":"help"},{"type":"literal","value":"help_center"},{"type":"literal","value":"help_clinic"},{"type":"literal","value":"help_outline"},{"type":"literal","value":"hematology"},{"type":"literal","value":"hevc"},{"type":"literal","value":"hide_image"},{"type":"literal","value":"hide_source"},{"type":"literal","value":"high_chair"},{"type":"literal","value":"high_density"},{"type":"literal","value":"high_quality"},{"type":"literal","value":"high_res"},{"type":"literal","value":"highlight"},{"type":"literal","value":"highlight_alt"},{"type":"literal","value":"highlight_keyboard_focus"},{"type":"literal","value":"highlight_mouse_cursor"},{"type":"literal","value":"highlight_off"},{"type":"literal","value":"highlight_text_cursor"},{"type":"literal","value":"highlighter_size_1"},{"type":"literal","value":"highlighter_size_2"},{"type":"literal","value":"highlighter_size_3"},{"type":"literal","value":"highlighter_size_4"},{"type":"literal","value":"highlighter_size_5"},{"type":"literal","value":"hiking"},{"type":"literal","value":"history_2"},{"type":"literal","value":"history_edu"},{"type":"literal","value":"history_off"},{"type":"literal","value":"history_toggle_off"},{"type":"literal","value":"hive"},{"type":"literal","value":"hls"},{"type":"literal","value":"hls_off"},{"type":"literal","value":"holiday_village"},{"type":"literal","value":"home"},{"type":"literal","value":"home_and_garden"},{"type":"literal","value":"home_app_logo"},{"type":"literal","value":"home_filled"},{"type":"literal","value":"home_health"},{"type":"literal","value":"home_improvement_and_tools"},{"type":"literal","value":"home_iot_device"},{"type":"literal","value":"home_max"},{"type":"literal","value":"home_max_dots"},{"type":"literal","value":"home_mini"},{"type":"literal","value":"home_pin"},{"type":"literal","value":"home_repair_service"},{"type":"literal","value":"home_speaker"},{"type":"literal","value":"home_storage"},{"type":"literal","value":"home_work"},{"type":"literal","value":"horizontal_distribute"},{"type":"literal","value":"horizontal_rule"},{"type":"literal","value":"horizontal_split"},{"type":"literal","value":"hot_tub"},{"type":"literal","value":"hotel"},{"type":"literal","value":"hotel_class"},{"type":"literal","value":"hourglass_arrow_down"},{"type":"literal","value":"hourglass_arrow_up"},{"type":"literal","value":"hourglass_bottom"},{"type":"literal","value":"hourglass_disabled"},{"type":"literal","value":"hourglass_empty"},{"type":"literal","value":"hourglass_full"},{"type":"literal","value":"hourglass_pause"},{"type":"literal","value":"hourglass_top"},{"type":"literal","value":"house_siding"},{"type":"literal","value":"house_with_shield"},{"type":"literal","value":"houseboat"},{"type":"literal","value":"household_supplies"},{"type":"literal","value":"hov"},{"type":"literal","value":"how_to_reg"},{"type":"literal","value":"how_to_vote"},{"type":"literal","value":"hr_resting"},{"type":"literal","value":"http"},{"type":"literal","value":"https"},{"type":"literal","value":"hub"},{"type":"literal","value":"humerus"},{"type":"literal","value":"humerus_alt"},{"type":"literal","value":"humidity_high"},{"type":"literal","value":"humidity_indoor"},{"type":"literal","value":"humidity_low"},{"type":"literal","value":"humidity_mid"},{"type":"literal","value":"humidity_percentage"},{"type":"literal","value":"hvac"},{"type":"literal","value":"hvac_max_defrost"},{"type":"literal","value":"ice_skating"},{"type":"literal","value":"icecream"},{"type":"literal","value":"id_card"},{"type":"literal","value":"identity_aware_proxy"},{"type":"literal","value":"identity_platform"},{"type":"literal","value":"ifl"},{"type":"literal","value":"iframe_off"},{"type":"literal","value":"image_arrow_up"},{"type":"literal","value":"image_aspect_ratio"},{"type":"literal","value":"image_inset"},{"type":"literal","value":"image_not_supported"},{"type":"literal","value":"image_search"},{"type":"literal","value":"imagesearch_roller"},{"type":"literal","value":"imagesmode"},{"type":"literal","value":"immunology"},{"type":"literal","value":"import_contacts"},{"type":"literal","value":"import_export"},{"type":"literal","value":"important_devices"},{"type":"literal","value":"in_home_mode"},{"type":"literal","value":"inactive_order"},{"type":"literal","value":"inbox"},{"type":"literal","value":"inbox_customize"},{"type":"literal","value":"inbox_text"},{"type":"literal","value":"inbox_text_asterisk"},{"type":"literal","value":"inbox_text_person"},{"type":"literal","value":"inbox_text_share"},{"type":"literal","value":"incomplete_circle"},{"type":"literal","value":"indeterminate_check_box"},{"type":"literal","value":"indeterminate_question_box"},{"type":"literal","value":"info_i"},{"type":"literal","value":"info_outline"},{"type":"literal","value":"infrared"},{"type":"literal","value":"ink_eraser"},{"type":"literal","value":"ink_eraser_off"},{"type":"literal","value":"ink_highlighter"},{"type":"literal","value":"ink_highlighter_move"},{"type":"literal","value":"ink_marker"},{"type":"literal","value":"ink_pen"},{"type":"literal","value":"ink_selection"},{"type":"literal","value":"inpatient"},{"type":"literal","value":"input_circle"},{"type":"literal","value":"insert_chart"},{"type":"literal","value":"insert_chart_outlined"},{"type":"literal","value":"insert_comment"},{"type":"literal","value":"insert_drive_file"},{"type":"literal","value":"insert_emoticon"},{"type":"literal","value":"insert_invitation"},{"type":"literal","value":"insert_link"},{"type":"literal","value":"insert_page_break"},{"type":"literal","value":"insert_photo"},{"type":"literal","value":"insert_text"},{"type":"literal","value":"insights"},{"type":"literal","value":"install_desktop"},{"type":"literal","value":"install_mobile"},{"type":"literal","value":"instant_mix"},{"type":"literal","value":"integration_instructions"},{"type":"literal","value":"interactive_space"},{"type":"literal","value":"interests"},{"type":"literal","value":"interpreter_mode"},{"type":"literal","value":"inventory"},{"type":"literal","value":"inventory_2"},{"type":"literal","value":"invert_colors"},{"type":"literal","value":"invert_colors_off"},{"type":"literal","value":"ios_share"},{"type":"literal","value":"iron"},{"type":"literal","value":"iso"},{"type":"literal","value":"jamboard_kiosk"},{"type":"literal","value":"japanese_curry"},{"type":"literal","value":"japanese_flag"},{"type":"literal","value":"javascript"},{"type":"literal","value":"join_full"},{"type":"literal","value":"join_inner"},{"type":"literal","value":"join_left"},{"type":"literal","value":"join_right"},{"type":"literal","value":"joystick"},{"type":"literal","value":"jump_to_element"},{"type":"literal","value":"kanji_alcohol"},{"type":"literal","value":"kayaking"},{"type":"literal","value":"kebab_dining"},{"type":"literal","value":"keep"},{"type":"literal","value":"keep_off"},{"type":"literal","value":"keep_public"},{"type":"literal","value":"kettle"},{"type":"literal","value":"key_off"},{"type":"literal","value":"key_vertical"},{"type":"literal","value":"key_visualizer"},{"type":"literal","value":"keyboard_alt"},{"type":"literal","value":"keyboard_arrow_down"},{"type":"literal","value":"keyboard_arrow_left"},{"type":"literal","value":"keyboard_arrow_right"},{"type":"literal","value":"keyboard_arrow_up"},{"type":"literal","value":"keyboard_backspace"},{"type":"literal","value":"keyboard_capslock"},{"type":"literal","value":"keyboard_capslock_badge"},{"type":"literal","value":"keyboard_command_key"},{"type":"literal","value":"keyboard_control_key"},{"type":"literal","value":"keyboard_double_arrow_down"},{"type":"literal","value":"keyboard_double_arrow_left"},{"type":"literal","value":"keyboard_double_arrow_right"},{"type":"literal","value":"keyboard_double_arrow_up"},{"type":"literal","value":"keyboard_external_input"},{"type":"literal","value":"keyboard_full"},{"type":"literal","value":"keyboard_hide"},{"type":"literal","value":"keyboard_keys"},{"type":"literal","value":"keyboard_lock"},{"type":"literal","value":"keyboard_lock_off"},{"type":"literal","value":"keyboard_off"},{"type":"literal","value":"keyboard_onscreen"},{"type":"literal","value":"keyboard_option_key"},{"type":"literal","value":"keyboard_previous_language"},{"type":"literal","value":"keyboard_return"},{"type":"literal","value":"keyboard_tab"},{"type":"literal","value":"keyboard_tab_rtl"},{"type":"literal","value":"keyboard_voice"},{"type":"literal","value":"kid_star"},{"type":"literal","value":"king_bed"},{"type":"literal","value":"kitchen"},{"type":"literal","value":"kitesurfing"},{"type":"literal","value":"lab_panel"},{"type":"literal","value":"lab_profile"},{"type":"literal","value":"lab_research"},{"type":"literal","value":"label_important"},{"type":"literal","value":"label_important_outline"},{"type":"literal","value":"label_off"},{"type":"literal","value":"labs"},{"type":"literal","value":"lan"},{"type":"literal","value":"landscape_2"},{"type":"literal","value":"landscape_2_edit"},{"type":"literal","value":"landscape_2_off"},{"type":"literal","value":"landslide"},{"type":"literal","value":"language"},{"type":"literal","value":"language_chinese_array"},{"type":"literal","value":"language_chinese_cangjie"},{"type":"literal","value":"language_chinese_dayi"},{"type":"literal","value":"language_chinese_pinyin"},{"type":"literal","value":"language_chinese_quick"},{"type":"literal","value":"language_chinese_wubi"},{"type":"literal","value":"language_french"},{"type":"literal","value":"language_gb_english"},{"type":"literal","value":"language_international"},{"type":"literal","value":"language_japanese_kana"},{"type":"literal","value":"language_korean_latin"},{"type":"literal","value":"language_pinyin"},{"type":"literal","value":"language_spanish"},{"type":"literal","value":"language_us"},{"type":"literal","value":"language_us_colemak"},{"type":"literal","value":"language_us_dvorak"},{"type":"literal","value":"laps"},{"type":"literal","value":"laptop"},{"type":"literal","value":"laptop_car"},{"type":"literal","value":"laptop_chromebook"},{"type":"literal","value":"laptop_mac"},{"type":"literal","value":"laptop_windows"},{"type":"literal","value":"lasso_select"},{"type":"literal","value":"last_page"},{"type":"literal","value":"launch"},{"type":"literal","value":"laundry"},{"type":"literal","value":"layers"},{"type":"literal","value":"layers_clear"},{"type":"literal","value":"lda"},{"type":"literal","value":"leaderboard"},{"type":"literal","value":"leak_add"},{"type":"literal","value":"leak_remove"},{"type":"literal","value":"left_click"},{"type":"literal","value":"left_panel_close"},{"type":"literal","value":"left_panel_open"},{"type":"literal","value":"legend_toggle"},{"type":"literal","value":"lens"},{"type":"literal","value":"lens_blur"},{"type":"literal","value":"letter_switch"},{"type":"literal","value":"library_add"},{"type":"literal","value":"library_add_check"},{"type":"literal","value":"library_books"},{"type":"literal","value":"library_music"},{"type":"literal","value":"license"},{"type":"literal","value":"lift_to_talk"},{"type":"literal","value":"light_group"},{"type":"literal","value":"light_mode"},{"type":"literal","value":"light_off"},{"type":"literal","value":"lightbulb_2"},{"type":"literal","value":"lightbulb_circle"},{"type":"literal","value":"lightbulb_outline"},{"type":"literal","value":"lightning_stand"},{"type":"literal","value":"line_axis"},{"type":"literal","value":"line_curve"},{"type":"literal","value":"line_end"},{"type":"literal","value":"line_end_arrow"},{"type":"literal","value":"line_end_arrow_notch"},{"type":"literal","value":"line_end_circle"},{"type":"literal","value":"line_end_diamond"},{"type":"literal","value":"line_end_square"},{"type":"literal","value":"line_start"},{"type":"literal","value":"line_start_arrow"},{"type":"literal","value":"line_start_arrow_notch"},{"type":"literal","value":"line_start_circle"},{"type":"literal","value":"line_start_diamond"},{"type":"literal","value":"line_start_square"},{"type":"literal","value":"line_style"},{"type":"literal","value":"line_weight"},{"type":"literal","value":"linear_scale"},{"type":"literal","value":"link_off"},{"type":"literal","value":"linked_camera"},{"type":"literal","value":"linked_services"},{"type":"literal","value":"liquor"},{"type":"literal","value":"list_alt"},{"type":"literal","value":"list_alt_add"},{"type":"literal","value":"list_alt_check"},{"type":"literal","value":"lists"},{"type":"literal","value":"live_help"},{"type":"literal","value":"live_tv"},{"type":"literal","value":"living"},{"type":"literal","value":"local_activity"},{"type":"literal","value":"local_airport"},{"type":"literal","value":"local_atm"},{"type":"literal","value":"local_bar"},{"type":"literal","value":"local_cafe"},{"type":"literal","value":"local_car_wash"},{"type":"literal","value":"local_convenience_store"},{"type":"literal","value":"local_dining"},{"type":"literal","value":"local_drink"},{"type":"literal","value":"local_fire_department"},{"type":"literal","value":"local_florist"},{"type":"literal","value":"local_gas_station"},{"type":"literal","value":"local_grocery_store"},{"type":"literal","value":"local_hospital"},{"type":"literal","value":"local_hotel"},{"type":"literal","value":"local_laundry_service"},{"type":"literal","value":"local_library"},{"type":"literal","value":"local_mall"},{"type":"literal","value":"local_movies"},{"type":"literal","value":"local_offer"},{"type":"literal","value":"local_parking"},{"type":"literal","value":"local_pharmacy"},{"type":"literal","value":"local_phone"},{"type":"literal","value":"local_pizza"},{"type":"literal","value":"local_play"},{"type":"literal","value":"local_police"},{"type":"literal","value":"local_post_office"},{"type":"literal","value":"local_printshop"},{"type":"literal","value":"local_see"},{"type":"literal","value":"local_shipping"},{"type":"literal","value":"local_taxi"},{"type":"literal","value":"location_away"},{"type":"literal","value":"location_chip"},{"type":"literal","value":"location_city"},{"type":"literal","value":"location_disabled"},{"type":"literal","value":"location_home"},{"type":"literal","value":"location_off"},{"type":"literal","value":"location_on"},{"type":"literal","value":"location_pin"},{"type":"literal","value":"location_searching"},{"type":"literal","value":"lock_clock"},{"type":"literal","value":"lock_open"},{"type":"literal","value":"lock_open_circle"},{"type":"literal","value":"lock_open_right"},{"type":"literal","value":"lock_outline"},{"type":"literal","value":"lock_person"},{"type":"literal","value":"lock_reset"},{"type":"literal","value":"login"},{"type":"literal","value":"logo_dev"},{"type":"literal","value":"logout"},{"type":"literal","value":"looks"},{"type":"literal","value":"looks_3"},{"type":"literal","value":"looks_4"},{"type":"literal","value":"looks_5"},{"type":"literal","value":"looks_6"},{"type":"literal","value":"looks_one"},{"type":"literal","value":"looks_two"},{"type":"literal","value":"loop"},{"type":"literal","value":"low_density"},{"type":"literal","value":"low_priority"},{"type":"literal","value":"loyalty"},{"type":"literal","value":"lte_mobiledata"},{"type":"literal","value":"lte_mobiledata_badge"},{"type":"literal","value":"lte_plus_mobiledata"},{"type":"literal","value":"lte_plus_mobiledata_badge"},{"type":"literal","value":"luggage"},{"type":"literal","value":"lunch_dining"},{"type":"literal","value":"lyrics"},{"type":"literal","value":"macro_auto"},{"type":"literal","value":"macro_off"},{"type":"literal","value":"magnification_large"},{"type":"literal","value":"magnification_small"},{"type":"literal","value":"magnify_docked"},{"type":"literal","value":"magnify_fullscreen"},{"type":"literal","value":"mail_asterisk"},{"type":"literal","value":"mail_lock"},{"type":"literal","value":"mail_off"},{"type":"literal","value":"mail_outline"},{"type":"literal","value":"mail_shield"},{"type":"literal","value":"male"},{"type":"literal","value":"man"},{"type":"literal","value":"man_2"},{"type":"literal","value":"man_3"},{"type":"literal","value":"man_4"},{"type":"literal","value":"manage_accounts"},{"type":"literal","value":"manage_history"},{"type":"literal","value":"manage_search"},{"type":"literal","value":"manga"},{"type":"literal","value":"manufacturing"},{"type":"literal","value":"map_pin_heart"},{"type":"literal","value":"map_pin_review"},{"type":"literal","value":"map_search"},{"type":"literal","value":"maps_home_work"},{"type":"literal","value":"maps_ugc"},{"type":"literal","value":"mark_as_unread"},{"type":"literal","value":"mark_chat_read"},{"type":"literal","value":"mark_chat_unread"},{"type":"literal","value":"mark_email_read"},{"type":"literal","value":"mark_email_unread"},{"type":"literal","value":"mark_unread_chat_alt"},{"type":"literal","value":"markdown"},{"type":"literal","value":"markdown_copy"},{"type":"literal","value":"markdown_paste"},{"type":"literal","value":"markunread"},{"type":"literal","value":"markunread_mailbox"},{"type":"literal","value":"masked_transitions"},{"type":"literal","value":"masked_transitions_add"},{"type":"literal","value":"masks"},{"type":"literal","value":"massage"},{"type":"literal","value":"match_case"},{"type":"literal","value":"match_case_off"},{"type":"literal","value":"match_word"},{"type":"literal","value":"matter"},{"type":"literal","value":"maximize"},{"type":"literal","value":"meal_dinner"},{"type":"literal","value":"meal_lunch"},{"type":"literal","value":"measuring_tape"},{"type":"literal","value":"media_bluetooth_off"},{"type":"literal","value":"media_bluetooth_on"},{"type":"literal","value":"media_link"},{"type":"literal","value":"media_output"},{"type":"literal","value":"media_output_off"},{"type":"literal","value":"mediation"},{"type":"literal","value":"medical_information"},{"type":"literal","value":"medical_mask"},{"type":"literal","value":"medical_services"},{"type":"literal","value":"medication"},{"type":"literal","value":"medication_liquid"},{"type":"literal","value":"meeting_room"},{"type":"literal","value":"memory"},{"type":"literal","value":"memory_alt"},{"type":"literal","value":"menstrual_health"},{"type":"literal","value":"menu_book"},{"type":"literal","value":"menu_book_2"},{"type":"literal","value":"menu_open"},{"type":"literal","value":"merge_type"},{"type":"literal","value":"metabolism"},{"type":"literal","value":"metro"},{"type":"literal","value":"mfg_nest_yale_lock"},{"type":"literal","value":"mic_alert"},{"type":"literal","value":"mic_double"},{"type":"literal","value":"mic_external_off"},{"type":"literal","value":"mic_external_on"},{"type":"literal","value":"mic_none"},{"type":"literal","value":"mic_off"},{"type":"literal","value":"microbiology"},{"type":"literal","value":"microwave_gen"},{"type":"literal","value":"military_tech"},{"type":"literal","value":"mimo"},{"type":"literal","value":"mimo_disconnect"},{"type":"literal","value":"mindfulness"},{"type":"literal","value":"minimize"},{"type":"literal","value":"minor_crash"},{"type":"literal","value":"mintmark"},{"type":"literal","value":"miscellaneous_services"},{"type":"literal","value":"missed_video_call"},{"type":"literal","value":"missing_controller"},{"type":"literal","value":"mist"},{"type":"literal","value":"mitre"},{"type":"literal","value":"mixture_med"},{"type":"literal","value":"mms"},{"type":"literal","value":"mobile"},{"type":"literal","value":"mobile_2"},{"type":"literal","value":"mobile_3"},{"type":"literal","value":"mobile_alert"},{"type":"literal","value":"mobile_arrow_down"},{"type":"literal","value":"mobile_arrow_right"},{"type":"literal","value":"mobile_arrow_up_right"},{"type":"literal","value":"mobile_block"},{"type":"literal","value":"mobile_camera"},{"type":"literal","value":"mobile_camera_front"},{"type":"literal","value":"mobile_camera_rear"},{"type":"literal","value":"mobile_cancel"},{"type":"literal","value":"mobile_cast"},{"type":"literal","value":"mobile_charge"},{"type":"literal","value":"mobile_chat"},{"type":"literal","value":"mobile_check"},{"type":"literal","value":"mobile_code"},{"type":"literal","value":"mobile_dots"},{"type":"literal","value":"mobile_friendly"},{"type":"literal","value":"mobile_gear"},{"type":"literal","value":"mobile_hand"},{"type":"literal","value":"mobile_hand_left"},{"type":"literal","value":"mobile_hand_left_off"},{"type":"literal","value":"mobile_hand_off"},{"type":"literal","value":"mobile_info"},{"type":"literal","value":"mobile_landscape"},{"type":"literal","value":"mobile_layout"},{"type":"literal","value":"mobile_lock_landscape"},{"type":"literal","value":"mobile_lock_portrait"},{"type":"literal","value":"mobile_loupe"},{"type":"literal","value":"mobile_menu"},{"type":"literal","value":"mobile_off"},{"type":"literal","value":"mobile_question"},{"type":"literal","value":"mobile_rotate"},{"type":"literal","value":"mobile_rotate_lock"},{"type":"literal","value":"mobile_screen_share"},{"type":"literal","value":"mobile_screensaver"},{"type":"literal","value":"mobile_sensor_hi"},{"type":"literal","value":"mobile_sensor_lo"},{"type":"literal","value":"mobile_share"},{"type":"literal","value":"mobile_share_stack"},{"type":"literal","value":"mobile_sound"},{"type":"literal","value":"mobile_sound_2"},{"type":"literal","value":"mobile_sound_off"},{"type":"literal","value":"mobile_speaker"},{"type":"literal","value":"mobile_text"},{"type":"literal","value":"mobile_text_2"},{"type":"literal","value":"mobile_theft"},{"type":"literal","value":"mobile_ticket"},{"type":"literal","value":"mobile_vibrate"},{"type":"literal","value":"mobile_wrench"},{"type":"literal","value":"mobiledata_off"},{"type":"literal","value":"mode"},{"type":"literal","value":"mode_comment"},{"type":"literal","value":"mode_cool"},{"type":"literal","value":"mode_cool_off"},{"type":"literal","value":"mode_dual"},{"type":"literal","value":"mode_edit"},{"type":"literal","value":"mode_edit_outline"},{"type":"literal","value":"mode_fan"},{"type":"literal","value":"mode_fan_off"},{"type":"literal","value":"mode_heat"},{"type":"literal","value":"mode_heat_cool"},{"type":"literal","value":"mode_heat_off"},{"type":"literal","value":"mode_night"},{"type":"literal","value":"mode_of_travel"},{"type":"literal","value":"mode_off_on"},{"type":"literal","value":"mode_standby"},{"type":"literal","value":"model_training"},{"type":"literal","value":"modeling"},{"type":"literal","value":"monetization_on"},{"type":"literal","value":"money"},{"type":"literal","value":"money_bag"},{"type":"literal","value":"money_off"},{"type":"literal","value":"money_off_csred"},{"type":"literal","value":"money_range"},{"type":"literal","value":"monitor"},{"type":"literal","value":"monitor_heart"},{"type":"literal","value":"monitor_weight"},{"type":"literal","value":"monitor_weight_gain"},{"type":"literal","value":"monitor_weight_loss"},{"type":"literal","value":"monitoring"},{"type":"literal","value":"monochrome_photos"},{"type":"literal","value":"monorail"},{"type":"literal","value":"mood"},{"type":"literal","value":"mood_bad"},{"type":"literal","value":"moon_stars"},{"type":"literal","value":"mop"},{"type":"literal","value":"moped_package"},{"type":"literal","value":"more_down"},{"type":"literal","value":"more_horiz"},{"type":"literal","value":"more_time"},{"type":"literal","value":"more_up"},{"type":"literal","value":"more_vert"},{"type":"literal","value":"mosque"},{"type":"literal","value":"motion_blur"},{"type":"literal","value":"motion_mode"},{"type":"literal","value":"motion_photos_auto"},{"type":"literal","value":"motion_photos_off"},{"type":"literal","value":"motion_photos_on"},{"type":"literal","value":"motion_photos_pause"},{"type":"literal","value":"motion_photos_paused"},{"type":"literal","value":"motion_play"},{"type":"literal","value":"motion_sensor_active"},{"type":"literal","value":"motion_sensor_alert"},{"type":"literal","value":"motion_sensor_idle"},{"type":"literal","value":"motion_sensor_urgent"},{"type":"literal","value":"mountain_flag"},{"type":"literal","value":"mountain_steam"},{"type":"literal","value":"mouse"},{"type":"literal","value":"mouse_lock"},{"type":"literal","value":"mouse_lock_off"},{"type":"literal","value":"move_down"},{"type":"literal","value":"move_group"},{"type":"literal","value":"move_item"},{"type":"literal","value":"move_location"},{"type":"literal","value":"move_selection_down"},{"type":"literal","value":"move_selection_left"},{"type":"literal","value":"move_selection_right"},{"type":"literal","value":"move_selection_up"},{"type":"literal","value":"move_to_inbox"},{"type":"literal","value":"move_up"},{"type":"literal","value":"moved_location"},{"type":"literal","value":"movie"},{"type":"literal","value":"movie_creation"},{"type":"literal","value":"movie_edit"},{"type":"literal","value":"movie_filter"},{"type":"literal","value":"movie_info"},{"type":"literal","value":"movie_off"},{"type":"literal","value":"movie_speaker"},{"type":"literal","value":"moving"},{"type":"literal","value":"moving_beds"},{"type":"literal","value":"moving_ministry"},{"type":"literal","value":"mp"},{"type":"literal","value":"multicooker"},{"type":"literal","value":"multiline_chart"},{"type":"literal","value":"multimodal_hand_eye"},{"type":"literal","value":"multiple_airports"},{"type":"literal","value":"multiple_stop"},{"type":"literal","value":"museum"},{"type":"literal","value":"music_cast"},{"type":"literal","value":"music_history"},{"type":"literal","value":"music_note"},{"type":"literal","value":"music_note_add"},{"type":"literal","value":"music_off"},{"type":"literal","value":"music_video"},{"type":"literal","value":"my_location"},{"type":"literal","value":"mystery"},{"type":"literal","value":"nat"},{"type":"literal","value":"nature"},{"type":"literal","value":"nature_people"},{"type":"literal","value":"navigate_before"},{"type":"literal","value":"navigate_next"},{"type":"literal","value":"near_me"},{"type":"literal","value":"near_me_disabled"},{"type":"literal","value":"nearby"},{"type":"literal","value":"nearby_error"},{"type":"literal","value":"nearby_off"},{"type":"literal","value":"nephrology"},{"type":"literal","value":"nest_audio"},{"type":"literal","value":"nest_cam_floodlight"},{"type":"literal","value":"nest_cam_indoor"},{"type":"literal","value":"nest_cam_iq"},{"type":"literal","value":"nest_cam_iq_outdoor"},{"type":"literal","value":"nest_cam_magnet_mount"},{"type":"literal","value":"nest_cam_outdoor"},{"type":"literal","value":"nest_cam_stand"},{"type":"literal","value":"nest_cam_wall_mount"},{"type":"literal","value":"nest_cam_wired_stand"},{"type":"literal","value":"nest_clock_farsight_analog"},{"type":"literal","value":"nest_clock_farsight_digital"},{"type":"literal","value":"nest_connect"},{"type":"literal","value":"nest_detect"},{"type":"literal","value":"nest_display"},{"type":"literal","value":"nest_display_max"},{"type":"literal","value":"nest_doorbell_visitor"},{"type":"literal","value":"nest_eco_leaf"},{"type":"literal","value":"nest_farsight_cool"},{"type":"literal","value":"nest_farsight_dual"},{"type":"literal","value":"nest_farsight_eco"},{"type":"literal","value":"nest_farsight_heat"},{"type":"literal","value":"nest_farsight_seasonal"},{"type":"literal","value":"nest_farsight_weather"},{"type":"literal","value":"nest_found_savings"},{"type":"literal","value":"nest_heat_link_e"},{"type":"literal","value":"nest_heat_link_gen_3"},{"type":"literal","value":"nest_hello_doorbell"},{"type":"literal","value":"nest_mini"},{"type":"literal","value":"nest_multi_room"},{"type":"literal","value":"nest_protect"},{"type":"literal","value":"nest_remote_comfort_sensor"},{"type":"literal","value":"nest_secure_alarm"},{"type":"literal","value":"nest_sunblock"},{"type":"literal","value":"nest_tag"},{"type":"literal","value":"nest_thermostat"},{"type":"literal","value":"nest_thermostat_e_eu"},{"type":"literal","value":"nest_thermostat_gen_3"},{"type":"literal","value":"nest_thermostat_sensor"},{"type":"literal","value":"nest_thermostat_sensor_eu"},{"type":"literal","value":"nest_thermostat_zirconium_eu"},{"type":"literal","value":"nest_true_radiant"},{"type":"literal","value":"nest_wake_on_approach"},{"type":"literal","value":"nest_wake_on_press"},{"type":"literal","value":"nest_wifi_point"},{"type":"literal","value":"nest_wifi_pro"},{"type":"literal","value":"nest_wifi_pro_2"},{"type":"literal","value":"nest_wifi_router"},{"type":"literal","value":"network_cell"},{"type":"literal","value":"network_check"},{"type":"literal","value":"network_intel_node"},{"type":"literal","value":"network_intelligence"},{"type":"literal","value":"network_intelligence_history"},{"type":"literal","value":"network_intelligence_update"},{"type":"literal","value":"network_locked"},{"type":"literal","value":"network_manage"},{"type":"literal","value":"network_node"},{"type":"literal","value":"network_ping"},{"type":"literal","value":"network_wifi"},{"type":"literal","value":"network_wifi_1_bar"},{"type":"literal","value":"network_wifi_1_bar_locked"},{"type":"literal","value":"network_wifi_2_bar"},{"type":"literal","value":"network_wifi_2_bar_locked"},{"type":"literal","value":"network_wifi_3_bar"},{"type":"literal","value":"network_wifi_3_bar_locked"},{"type":"literal","value":"network_wifi_locked"},{"type":"literal","value":"neurology"},{"type":"literal","value":"new_label"},{"type":"literal","value":"new_releases"},{"type":"literal","value":"new_window"},{"type":"literal","value":"news"},{"type":"literal","value":"newsmode"},{"type":"literal","value":"newsstand"},{"type":"literal","value":"next_plan"},{"type":"literal","value":"next_week"},{"type":"literal","value":"nfc"},{"type":"literal","value":"nfc_off"},{"type":"literal","value":"night_shelter"},{"type":"literal","value":"night_sight_auto"},{"type":"literal","value":"night_sight_auto_off"},{"type":"literal","value":"night_sight_max"},{"type":"literal","value":"nightlife"},{"type":"literal","value":"nightlight"},{"type":"literal","value":"nightlight_round"},{"type":"literal","value":"nights_stay"},{"type":"literal","value":"no_accounts"},{"type":"literal","value":"no_adult_content"},{"type":"literal","value":"no_backpack"},{"type":"literal","value":"no_cell"},{"type":"literal","value":"no_crash"},{"type":"literal","value":"no_drinks"},{"type":"literal","value":"no_encryption"},{"type":"literal","value":"no_encryption_gmailerrorred"},{"type":"literal","value":"no_flash"},{"type":"literal","value":"no_food"},{"type":"literal","value":"no_luggage"},{"type":"literal","value":"no_meals"},{"type":"literal","value":"no_meals_ouline"},{"type":"literal","value":"no_meeting_room"},{"type":"literal","value":"no_photography"},{"type":"literal","value":"no_sim"},{"type":"literal","value":"no_sound"},{"type":"literal","value":"no_stroller"},{"type":"literal","value":"no_transfer"},{"type":"literal","value":"noise_aware"},{"type":"literal","value":"noise_control_off"},{"type":"literal","value":"noise_control_on"},{"type":"literal","value":"nordic_walking"},{"type":"literal","value":"north"},{"type":"literal","value":"north_east"},{"type":"literal","value":"north_west"},{"type":"literal","value":"not_accessible"},{"type":"literal","value":"not_accessible_forward"},{"type":"literal","value":"not_interested"},{"type":"literal","value":"not_listed_location"},{"type":"literal","value":"not_started"},{"type":"literal","value":"note_add"},{"type":"literal","value":"note_alt"},{"type":"literal","value":"note_stack"},{"type":"literal","value":"note_stack_add"},{"type":"literal","value":"notes"},{"type":"literal","value":"notification_add"},{"type":"literal","value":"notification_important"},{"type":"literal","value":"notification_multiple"},{"type":"literal","value":"notification_settings"},{"type":"literal","value":"notification_sound"},{"type":"literal","value":"notifications"},{"type":"literal","value":"notifications_active"},{"type":"literal","value":"notifications_none"},{"type":"literal","value":"notifications_off"},{"type":"literal","value":"notifications_paused"},{"type":"literal","value":"notifications_unread"},{"type":"literal","value":"nutrition"},{"type":"literal","value":"ods"},{"type":"literal","value":"odt"},{"type":"literal","value":"offline_bolt"},{"type":"literal","value":"offline_pin"},{"type":"literal","value":"offline_pin_off"},{"type":"literal","value":"offline_share"},{"type":"literal","value":"oil_barrel"},{"type":"literal","value":"okonomiyaki"},{"type":"literal","value":"on_device_training"},{"type":"literal","value":"on_hub_device"},{"type":"literal","value":"oncology"},{"type":"literal","value":"ondemand_video"},{"type":"literal","value":"online_prediction"},{"type":"literal","value":"onsen"},{"type":"literal","value":"open_in_browser"},{"type":"literal","value":"open_in_full"},{"type":"literal","value":"open_in_new"},{"type":"literal","value":"open_in_new_down"},{"type":"literal","value":"open_in_new_off"},{"type":"literal","value":"open_jam"},{"type":"literal","value":"open_run"},{"type":"literal","value":"open_with"},{"type":"literal","value":"ophthalmology"},{"type":"literal","value":"oral_disease"},{"type":"literal","value":"orbit"},{"type":"literal","value":"order_approve"},{"type":"literal","value":"order_play"},{"type":"literal","value":"orders"},{"type":"literal","value":"orthopedics"},{"type":"literal","value":"other_admission"},{"type":"literal","value":"other_houses"},{"type":"literal","value":"outbound"},{"type":"literal","value":"outbox"},{"type":"literal","value":"outbox_alt"},{"type":"literal","value":"outdoor_garden"},{"type":"literal","value":"outdoor_grill"},{"type":"literal","value":"outgoing_mail"},{"type":"literal","value":"outlet"},{"type":"literal","value":"outlined_flag"},{"type":"literal","value":"outpatient"},{"type":"literal","value":"outpatient_med"},{"type":"literal","value":"output_circle"},{"type":"literal","value":"oven_gen"},{"type":"literal","value":"overview"},{"type":"literal","value":"overview_key"},{"type":"literal","value":"owl"},{"type":"literal","value":"oxygen_saturation"},{"type":"literal","value":"p2p"},{"type":"literal","value":"pace"},{"type":"literal","value":"pacemaker"},{"type":"literal","value":"package"},{"type":"literal","value":"package_2"},{"type":"literal","value":"padel"},{"type":"literal","value":"page_control"},{"type":"literal","value":"page_footer"},{"type":"literal","value":"page_header"},{"type":"literal","value":"page_info"},{"type":"literal","value":"page_menu_ios"},{"type":"literal","value":"pageless"},{"type":"literal","value":"pages"},{"type":"literal","value":"pageview"},{"type":"literal","value":"paid"},{"type":"literal","value":"pallet"},{"type":"literal","value":"pan_tool"},{"type":"literal","value":"pan_tool_alt"},{"type":"literal","value":"pan_zoom"},{"type":"literal","value":"panorama"},{"type":"literal","value":"panorama_fish_eye"},{"type":"literal","value":"panorama_horizontal"},{"type":"literal","value":"panorama_horizontal_select"},{"type":"literal","value":"panorama_photosphere"},{"type":"literal","value":"panorama_photosphere_select"},{"type":"literal","value":"panorama_vertical"},{"type":"literal","value":"panorama_vertical_select"},{"type":"literal","value":"panorama_wide_angle"},{"type":"literal","value":"panorama_wide_angle_select"},{"type":"literal","value":"paragliding"},{"type":"literal","value":"parent_child_dining"},{"type":"literal","value":"park"},{"type":"literal","value":"parking_meter"},{"type":"literal","value":"parking_sign"},{"type":"literal","value":"parking_valet"},{"type":"literal","value":"partly_cloudy_day"},{"type":"literal","value":"partly_cloudy_night"},{"type":"literal","value":"partner_exchange"},{"type":"literal","value":"partner_heart"},{"type":"literal","value":"partner_reports"},{"type":"literal","value":"party_mode"},{"type":"literal","value":"passkey"},{"type":"literal","value":"password"},{"type":"literal","value":"password_2"},{"type":"literal","value":"password_2_off"},{"type":"literal","value":"patient_list"},{"type":"literal","value":"pause_circle"},{"type":"literal","value":"pause_circle_filled"},{"type":"literal","value":"pause_circle_outline"},{"type":"literal","value":"pause_presentation"},{"type":"literal","value":"payment"},{"type":"literal","value":"payment_arrow_down"},{"type":"literal","value":"payment_card"},{"type":"literal","value":"payments"},{"type":"literal","value":"pedal_bike"},{"type":"literal","value":"pediatrics"},{"type":"literal","value":"pen_size_1"},{"type":"literal","value":"pen_size_2"},{"type":"literal","value":"pen_size_3"},{"type":"literal","value":"pen_size_4"},{"type":"literal","value":"pen_size_5"},{"type":"literal","value":"pending"},{"type":"literal","value":"pending_actions"},{"type":"literal","value":"people"},{"type":"literal","value":"people_alt"},{"type":"literal","value":"people_outline"},{"type":"literal","value":"percent_discount"},{"type":"literal","value":"pergola"},{"type":"literal","value":"perm_camera_mic"},{"type":"literal","value":"perm_contact_calendar"},{"type":"literal","value":"perm_data_setting"},{"type":"literal","value":"perm_device_information"},{"type":"literal","value":"perm_identity"},{"type":"literal","value":"perm_media"},{"type":"literal","value":"perm_phone_msg"},{"type":"literal","value":"perm_scan_wifi"},{"type":"literal","value":"person_2"},{"type":"literal","value":"person_3"},{"type":"literal","value":"person_4"},{"type":"literal","value":"person_add"},{"type":"literal","value":"person_add_alt"},{"type":"literal","value":"person_add_alt_1"},{"type":"literal","value":"person_add_disabled"},{"type":"literal","value":"person_alert"},{"type":"literal","value":"person_apron"},{"type":"literal","value":"person_book"},{"type":"literal","value":"person_cancel"},{"type":"literal","value":"person_celebrate"},{"type":"literal","value":"person_check"},{"type":"literal","value":"person_edit"},{"type":"literal","value":"person_heart"},{"type":"literal","value":"person_off"},{"type":"literal","value":"person_outline"},{"type":"literal","value":"person_pin"},{"type":"literal","value":"person_pin_circle"},{"type":"literal","value":"person_play"},{"type":"literal","value":"person_raised_hand"},{"type":"literal","value":"person_remove"},{"type":"literal","value":"person_remove_alt_1"},{"type":"literal","value":"person_search"},{"type":"literal","value":"person_shield"},{"type":"literal","value":"personal_bag"},{"type":"literal","value":"personal_bag_off"},{"type":"literal","value":"personal_bag_question"},{"type":"literal","value":"personal_injury"},{"type":"literal","value":"personal_places"},{"type":"literal","value":"personal_video"},{"type":"literal","value":"pest_control"},{"type":"literal","value":"pest_control_rodent"},{"type":"literal","value":"pet_supplies"},{"type":"literal","value":"pets"},{"type":"literal","value":"phishing"},{"type":"literal","value":"phone_android"},{"type":"literal","value":"phone_bluetooth_speaker"},{"type":"literal","value":"phone_callback"},{"type":"literal","value":"phone_disabled"},{"type":"literal","value":"phone_enabled"},{"type":"literal","value":"phone_forwarded"},{"type":"literal","value":"phone_in_talk"},{"type":"literal","value":"phone_iphone"},{"type":"literal","value":"phone_locked"},{"type":"literal","value":"phone_missed"},{"type":"literal","value":"phone_paused"},{"type":"literal","value":"phonelink"},{"type":"literal","value":"phonelink_erase"},{"type":"literal","value":"phonelink_lock"},{"type":"literal","value":"phonelink_off"},{"type":"literal","value":"phonelink_ring"},{"type":"literal","value":"phonelink_setup"},{"type":"literal","value":"photo_album"},{"type":"literal","value":"photo_auto_merge"},{"type":"literal","value":"photo_camera"},{"type":"literal","value":"photo_camera_back"},{"type":"literal","value":"photo_camera_front"},{"type":"literal","value":"photo_filter"},{"type":"literal","value":"photo_frame"},{"type":"literal","value":"photo_library"},{"type":"literal","value":"photo_prints"},{"type":"literal","value":"photo_size_select_actual"},{"type":"literal","value":"photo_size_select_large"},{"type":"literal","value":"photo_size_select_small"},{"type":"literal","value":"php"},{"type":"literal","value":"physical_therapy"},{"type":"literal","value":"piano"},{"type":"literal","value":"piano_off"},{"type":"literal","value":"pickleball"},{"type":"literal","value":"picture_as_pdf"},{"type":"literal","value":"picture_in_picture"},{"type":"literal","value":"picture_in_picture_alt"},{"type":"literal","value":"picture_in_picture_center"},{"type":"literal","value":"picture_in_picture_large"},{"type":"literal","value":"picture_in_picture_medium"},{"type":"literal","value":"picture_in_picture_mobile"},{"type":"literal","value":"picture_in_picture_off"},{"type":"literal","value":"picture_in_picture_small"},{"type":"literal","value":"pie_chart"},{"type":"literal","value":"pie_chart_outline"},{"type":"literal","value":"pie_chart_outlined"},{"type":"literal","value":"pill_off"},{"type":"literal","value":"pin_drop"},{"type":"literal","value":"pin_end"},{"type":"literal","value":"pin_invoke"},{"type":"literal","value":"pinboard"},{"type":"literal","value":"pinboard_unread"},{"type":"literal","value":"pinch"},{"type":"literal","value":"pinch_zoom_in"},{"type":"literal","value":"pinch_zoom_out"},{"type":"literal","value":"pip_exit"},{"type":"literal","value":"pivot_table_chart"},{"type":"literal","value":"pix"},{"type":"literal","value":"place"},{"type":"literal","value":"place_item"},{"type":"literal","value":"plagiarism"},{"type":"literal","value":"plane_contrails"},{"type":"literal","value":"planet"},{"type":"literal","value":"planner_banner_ad_pt"},{"type":"literal","value":"planner_review"},{"type":"literal","value":"play_arrow"},{"type":"literal","value":"play_circle"},{"type":"literal","value":"play_circle_filled"},{"type":"literal","value":"play_circle_outline"},{"type":"literal","value":"play_disabled"},{"type":"literal","value":"play_for_work"},{"type":"literal","value":"play_lesson"},{"type":"literal","value":"play_pause"},{"type":"literal","value":"playground"},{"type":"literal","value":"playground_2"},{"type":"literal","value":"playing_cards"},{"type":"literal","value":"playlist_add"},{"type":"literal","value":"playlist_add_check"},{"type":"literal","value":"playlist_add_check_circle"},{"type":"literal","value":"playlist_add_circle"},{"type":"literal","value":"playlist_play"},{"type":"literal","value":"playlist_remove"},{"type":"literal","value":"plug_connect"},{"type":"literal","value":"plumbing"},{"type":"literal","value":"plus_one"},{"type":"literal","value":"podcasts"},{"type":"literal","value":"podiatry"},{"type":"literal","value":"podium"},{"type":"literal","value":"point_of_sale"},{"type":"literal","value":"point_scan"},{"type":"literal","value":"poker_chip"},{"type":"literal","value":"policy"},{"type":"literal","value":"policy_alert"},{"type":"literal","value":"poll"},{"type":"literal","value":"polymer"},{"type":"literal","value":"pool"},{"type":"literal","value":"portable_wifi_off"},{"type":"literal","value":"position_bottom_left"},{"type":"literal","value":"position_bottom_right"},{"type":"literal","value":"position_top_right"},{"type":"literal","value":"post"},{"type":"literal","value":"post_add"},{"type":"literal","value":"potted_plant"},{"type":"literal","value":"power_input"},{"type":"literal","value":"power_off"},{"type":"literal","value":"power_settings_circle"},{"type":"literal","value":"power_settings_new"},{"type":"literal","value":"prayer_times"},{"type":"literal","value":"precision_manufacturing"},{"type":"literal","value":"pregnancy"},{"type":"literal","value":"pregnant_woman"},{"type":"literal","value":"preliminary"},{"type":"literal","value":"prescriptions"},{"type":"literal","value":"present_to_all"},{"type":"literal","value":"preview"},{"type":"literal","value":"preview_off"},{"type":"literal","value":"price_change"},{"type":"literal","value":"price_check"},{"type":"literal","value":"print"},{"type":"literal","value":"print_add"},{"type":"literal","value":"print_connect"},{"type":"literal","value":"print_disabled"},{"type":"literal","value":"print_error"},{"type":"literal","value":"print_lock"},{"type":"literal","value":"priority"},{"type":"literal","value":"priority_high"},{"type":"literal","value":"privacy"},{"type":"literal","value":"privacy_tip"},{"type":"literal","value":"private_connectivity"},{"type":"literal","value":"problem"},{"type":"literal","value":"procedure"},{"type":"literal","value":"process_chart"},{"type":"literal","value":"production_quantity_limits"},{"type":"literal","value":"productivity"},{"type":"literal","value":"progress_activity"},{"type":"literal","value":"prompt_suggestion"},{"type":"literal","value":"propane"},{"type":"literal","value":"propane_tank"},{"type":"literal","value":"psychiatry"},{"type":"literal","value":"psychology"},{"type":"literal","value":"psychology_alt"},{"type":"literal","value":"public"},{"type":"literal","value":"public_off"},{"type":"literal","value":"publish"},{"type":"literal","value":"published_with_changes"},{"type":"literal","value":"pulmonology"},{"type":"literal","value":"pulse_alert"},{"type":"literal","value":"punch_clock"},{"type":"literal","value":"push_pin"},{"type":"literal","value":"qr_code"},{"type":"literal","value":"qr_code_2"},{"type":"literal","value":"qr_code_2_add"},{"type":"literal","value":"qr_code_scanner"},{"type":"literal","value":"query_builder"},{"type":"literal","value":"query_stats"},{"type":"literal","value":"question_answer"},{"type":"literal","value":"question_exchange"},{"type":"literal","value":"question_mark"},{"type":"literal","value":"queue"},{"type":"literal","value":"queue_music"},{"type":"literal","value":"queue_play_next"},{"type":"literal","value":"quick_phrases"},{"type":"literal","value":"quick_reference"},{"type":"literal","value":"quick_reference_all"},{"type":"literal","value":"quick_reorder"},{"type":"literal","value":"quickreply"},{"type":"literal","value":"quiz"},{"type":"literal","value":"r_mobiledata"},{"type":"literal","value":"radar"},{"type":"literal","value":"radio_button_checked"},{"type":"literal","value":"radio_button_partial"},{"type":"literal","value":"radio_button_unchecked"},{"type":"literal","value":"radiology"},{"type":"literal","value":"railway_alert"},{"type":"literal","value":"railway_alert_2"},{"type":"literal","value":"rainy"},{"type":"literal","value":"rainy_heavy"},{"type":"literal","value":"rainy_light"},{"type":"literal","value":"rainy_snow"},{"type":"literal","value":"ramen_dining"},{"type":"literal","value":"ramp_left"},{"type":"literal","value":"ramp_right"},{"type":"literal","value":"range_hood"},{"type":"literal","value":"rate_review"},{"type":"literal","value":"raven"},{"type":"literal","value":"raw_off"},{"type":"literal","value":"raw_on"},{"type":"literal","value":"read_more"},{"type":"literal","value":"readiness_score"},{"type":"literal","value":"real_estate_agent"},{"type":"literal","value":"rear_camera"},{"type":"literal","value":"rebase"},{"type":"literal","value":"rebase_edit"},{"type":"literal","value":"receipt_long"},{"type":"literal","value":"receipt_long_off"},{"type":"literal","value":"recent_actors"},{"type":"literal","value":"recent_patient"},{"type":"literal","value":"recenter"},{"type":"literal","value":"recommend"},{"type":"literal","value":"record_voice_over"},{"type":"literal","value":"recycling"},{"type":"literal","value":"redeem"},{"type":"literal","value":"redo"},{"type":"literal","value":"reduce_capacity"},{"type":"literal","value":"refresh"},{"type":"literal","value":"regular_expression"},{"type":"literal","value":"relax"},{"type":"literal","value":"release_alert"},{"type":"literal","value":"remember_me"},{"type":"literal","value":"reminder"},{"type":"literal","value":"remote_gen"},{"type":"literal","value":"remove"},{"type":"literal","value":"remove_circle"},{"type":"literal","value":"remove_circle_outline"},{"type":"literal","value":"remove_done"},{"type":"literal","value":"remove_from_queue"},{"type":"literal","value":"remove_moderator"},{"type":"literal","value":"remove_red_eye"},{"type":"literal","value":"remove_road"},{"type":"literal","value":"remove_selection"},{"type":"literal","value":"remove_shopping_cart"},{"type":"literal","value":"reopen_window"},{"type":"literal","value":"reorder"},{"type":"literal","value":"repartition"},{"type":"literal","value":"repeat_on"},{"type":"literal","value":"repeat_one"},{"type":"literal","value":"repeat_one_on"},{"type":"literal","value":"replace_audio"},{"type":"literal","value":"replace_image"},{"type":"literal","value":"replace_video"},{"type":"literal","value":"replay"},{"type":"literal","value":"replay_10"},{"type":"literal","value":"replay_30"},{"type":"literal","value":"replay_5"},{"type":"literal","value":"replay_circle_filled"},{"type":"literal","value":"reply"},{"type":"literal","value":"reply_all"},{"type":"literal","value":"report"},{"type":"literal","value":"report_gmailerrorred"},{"type":"literal","value":"report_off"},{"type":"literal","value":"report_problem"},{"type":"literal","value":"request_page"},{"type":"literal","value":"request_quote"},{"type":"literal","value":"reset_brightness"},{"type":"literal","value":"reset_exposure"},{"type":"literal","value":"reset_focus"},{"type":"literal","value":"reset_image"},{"type":"literal","value":"reset_iso"},{"type":"literal","value":"reset_settings"},{"type":"literal","value":"reset_shadow"},{"type":"literal","value":"reset_shutter_speed"},{"type":"literal","value":"reset_tv"},{"type":"literal","value":"reset_white_balance"},{"type":"literal","value":"reset_wrench"},{"type":"literal","value":"respiratory_rate"},{"type":"literal","value":"responsive_layout"},{"type":"literal","value":"rest_area"},{"type":"literal","value":"restart_alt"},{"type":"literal","value":"restaurant"},{"type":"literal","value":"restaurant_menu"},{"type":"literal","value":"restore"},{"type":"literal","value":"restore_from_trash"},{"type":"literal","value":"restore_page"},{"type":"literal","value":"resume"},{"type":"literal","value":"reviews"},{"type":"literal","value":"rewarded_ads"},{"type":"literal","value":"rheumatology"},{"type":"literal","value":"rib_cage"},{"type":"literal","value":"rice_bowl"},{"type":"literal","value":"right_click"},{"type":"literal","value":"right_panel_close"},{"type":"literal","value":"right_panel_open"},{"type":"literal","value":"ring_volume"},{"type":"literal","value":"ripples"},{"type":"literal","value":"road"},{"type":"literal","value":"robot"},{"type":"literal","value":"robot_2"},{"type":"literal","value":"rocket"},{"type":"literal","value":"rocket_launch"},{"type":"literal","value":"roller_shades"},{"type":"literal","value":"roller_shades_closed"},{"type":"literal","value":"roller_skating"},{"type":"literal","value":"roofing"},{"type":"literal","value":"room"},{"type":"literal","value":"room_preferences"},{"type":"literal","value":"room_service"},{"type":"literal","value":"rotate_90_degrees_ccw"},{"type":"literal","value":"rotate_90_degrees_cw"},{"type":"literal","value":"rotate_auto"},{"type":"literal","value":"rotate_left"},{"type":"literal","value":"rotate_right"},{"type":"literal","value":"roundabout_left"},{"type":"literal","value":"roundabout_right"},{"type":"literal","value":"rounded_corner"},{"type":"literal","value":"router_off"},{"type":"literal","value":"routine"},{"type":"literal","value":"rowing"},{"type":"literal","value":"rss_feed"},{"type":"literal","value":"rsvp"},{"type":"literal","value":"rtt"},{"type":"literal","value":"rubric"},{"type":"literal","value":"rule"},{"type":"literal","value":"rule_folder"},{"type":"literal","value":"rule_settings"},{"type":"literal","value":"run_circle"},{"type":"literal","value":"running_with_errors"},{"type":"literal","value":"rv_hookup"},{"type":"literal","value":"safety_check"},{"type":"literal","value":"safety_check_off"},{"type":"literal","value":"safety_divider"},{"type":"literal","value":"sailing"},{"type":"literal","value":"salinity"},{"type":"literal","value":"sanitizer"},{"type":"literal","value":"satellite"},{"type":"literal","value":"satellite_alt"},{"type":"literal","value":"sauna"},{"type":"literal","value":"save"},{"type":"literal","value":"save_alt"},{"type":"literal","value":"save_as"},{"type":"literal","value":"save_clock"},{"type":"literal","value":"saved_search"},{"type":"literal","value":"savings"},{"type":"literal","value":"scan"},{"type":"literal","value":"scan_delete"},{"type":"literal","value":"scatter_plot"},{"type":"literal","value":"schedule"},{"type":"literal","value":"schedule_send"},{"type":"literal","value":"schema"},{"type":"literal","value":"school"},{"type":"literal","value":"science"},{"type":"literal","value":"science_off"},{"type":"literal","value":"score"},{"type":"literal","value":"scoreboard"},{"type":"literal","value":"screen_lock_landscape"},{"type":"literal","value":"screen_lock_portrait"},{"type":"literal","value":"screen_lock_rotation"},{"type":"literal","value":"screen_record"},{"type":"literal","value":"screen_rotation"},{"type":"literal","value":"screen_rotation_alt"},{"type":"literal","value":"screen_rotation_up"},{"type":"literal","value":"screen_search_desktop"},{"type":"literal","value":"screen_share"},{"type":"literal","value":"screenshot"},{"type":"literal","value":"screenshot_frame"},{"type":"literal","value":"screenshot_frame_2"},{"type":"literal","value":"screenshot_keyboard"},{"type":"literal","value":"screenshot_monitor"},{"type":"literal","value":"screenshot_region"},{"type":"literal","value":"screenshot_tablet"},{"type":"literal","value":"scrollable_header"},{"type":"literal","value":"scuba_diving"},{"type":"literal","value":"sd"},{"type":"literal","value":"sd_card"},{"type":"literal","value":"sd_card_alert"},{"type":"literal","value":"sd_storage"},{"type":"literal","value":"sdk"},{"type":"literal","value":"search_activity"},{"type":"literal","value":"search_check"},{"type":"literal","value":"search_check_2"},{"type":"literal","value":"search_gear"},{"type":"literal","value":"search_hands_free"},{"type":"literal","value":"search_insights"},{"type":"literal","value":"search_off"},{"type":"literal","value":"seat_cool_left"},{"type":"literal","value":"seat_cool_right"},{"type":"literal","value":"seat_heat_left"},{"type":"literal","value":"seat_heat_right"},{"type":"literal","value":"seat_vent_left"},{"type":"literal","value":"seat_vent_right"},{"type":"literal","value":"security_key"},{"type":"literal","value":"security_update"},{"type":"literal","value":"security_update_good"},{"type":"literal","value":"security_update_warning"},{"type":"literal","value":"select_all"},{"type":"literal","value":"select_check_box"},{"type":"literal","value":"select_to_speak"},{"type":"literal","value":"select_window"},{"type":"literal","value":"select_window_2"},{"type":"literal","value":"select_window_off"},{"type":"literal","value":"self_care"},{"type":"literal","value":"self_improvement"},{"type":"literal","value":"sell"},{"type":"literal","value":"send_and_archive"},{"type":"literal","value":"send_money"},{"type":"literal","value":"send_time_extension"},{"type":"literal","value":"send_to_mobile"},{"type":"literal","value":"sensor_door"},{"type":"literal","value":"sensor_occupied"},{"type":"literal","value":"sensor_window"},{"type":"literal","value":"sensors"},{"type":"literal","value":"sensors_krx"},{"type":"literal","value":"sensors_krx_off"},{"type":"literal","value":"sensors_off"},{"type":"literal","value":"sentiment_calm"},{"type":"literal","value":"sentiment_content"},{"type":"literal","value":"sentiment_dissatisfied"},{"type":"literal","value":"sentiment_excited"},{"type":"literal","value":"sentiment_extremely_dissatisfied"},{"type":"literal","value":"sentiment_frustrated"},{"type":"literal","value":"sentiment_neutral"},{"type":"literal","value":"sentiment_sad"},{"type":"literal","value":"sentiment_satisfied"},{"type":"literal","value":"sentiment_satisfied_alt"},{"type":"literal","value":"sentiment_stressed"},{"type":"literal","value":"sentiment_very_dissatisfied"},{"type":"literal","value":"sentiment_very_satisfied"},{"type":"literal","value":"sentiment_worried"},{"type":"literal","value":"serif"},{"type":"literal","value":"server_person"},{"type":"literal","value":"service_toolbox"},{"type":"literal","value":"set_meal"},{"type":"literal","value":"settings"},{"type":"literal","value":"settings_accessibility"},{"type":"literal","value":"settings_account_box"},{"type":"literal","value":"settings_alert"},{"type":"literal","value":"settings_applications"},{"type":"literal","value":"settings_b_roll"},{"type":"literal","value":"settings_backup_restore"},{"type":"literal","value":"settings_bluetooth"},{"type":"literal","value":"settings_brightness"},{"type":"literal","value":"settings_cell"},{"type":"literal","value":"settings_cinematic_blur"},{"type":"literal","value":"settings_ethernet"},{"type":"literal","value":"settings_heart"},{"type":"literal","value":"settings_input_antenna"},{"type":"literal","value":"settings_input_component"},{"type":"literal","value":"settings_input_composite"},{"type":"literal","value":"settings_input_hdmi"},{"type":"literal","value":"settings_input_svideo"},{"type":"literal","value":"settings_motion_mode"},{"type":"literal","value":"settings_night_sight"},{"type":"literal","value":"settings_overscan"},{"type":"literal","value":"settings_panorama"},{"type":"literal","value":"settings_phone"},{"type":"literal","value":"settings_photo_camera"},{"type":"literal","value":"settings_power"},{"type":"literal","value":"settings_remote"},{"type":"literal","value":"settings_seating"},{"type":"literal","value":"settings_slow_motion"},{"type":"literal","value":"settings_suggest"},{"type":"literal","value":"settings_system_daydream"},{"type":"literal","value":"settings_timelapse"},{"type":"literal","value":"settings_video_camera"},{"type":"literal","value":"settings_voice"},{"type":"literal","value":"settop_component"},{"type":"literal","value":"severe_cold"},{"type":"literal","value":"shadow_add"},{"type":"literal","value":"shadow_minus"},{"type":"literal","value":"shape_line"},{"type":"literal","value":"shapes"},{"type":"literal","value":"share"},{"type":"literal","value":"share_eta"},{"type":"literal","value":"share_location"},{"type":"literal","value":"share_off"},{"type":"literal","value":"share_reviews"},{"type":"literal","value":"share_windows"},{"type":"literal","value":"shaved_ice"},{"type":"literal","value":"sheets_rtl"},{"type":"literal","value":"shelf_auto_hide"},{"type":"literal","value":"shelf_position"},{"type":"literal","value":"shelves"},{"type":"literal","value":"shield_lock"},{"type":"literal","value":"shield_locked"},{"type":"literal","value":"shield_moon"},{"type":"literal","value":"shield_person"},{"type":"literal","value":"shield_question"},{"type":"literal","value":"shield_toggle"},{"type":"literal","value":"shield_watch"},{"type":"literal","value":"shield_with_heart"},{"type":"literal","value":"shield_with_house"},{"type":"literal","value":"shift_lock"},{"type":"literal","value":"shift_lock_off"},{"type":"literal","value":"shop"},{"type":"literal","value":"shop_2"},{"type":"literal","value":"shop_two"},{"type":"literal","value":"shopping_bag"},{"type":"literal","value":"shopping_bag_speed"},{"type":"literal","value":"shopping_basket"},{"type":"literal","value":"shopping_cart"},{"type":"literal","value":"shopping_cart_checkout"},{"type":"literal","value":"shopping_cart_off"},{"type":"literal","value":"shoppingmode"},{"type":"literal","value":"short_stay"},{"type":"literal","value":"short_text"},{"type":"literal","value":"shortcut"},{"type":"literal","value":"show_chart"},{"type":"literal","value":"shuffle_on"},{"type":"literal","value":"shutter_speed"},{"type":"literal","value":"shutter_speed_add"},{"type":"literal","value":"shutter_speed_minus"},{"type":"literal","value":"sick"},{"type":"literal","value":"side_navigation"},{"type":"literal","value":"sign_language"},{"type":"literal","value":"signal_cellular_0_bar"},{"type":"literal","value":"signal_cellular_1_bar"},{"type":"literal","value":"signal_cellular_2_bar"},{"type":"literal","value":"signal_cellular_3_bar"},{"type":"literal","value":"signal_cellular_4_bar"},{"type":"literal","value":"signal_cellular_add"},{"type":"literal","value":"signal_cellular_alt"},{"type":"literal","value":"signal_cellular_alt_1_bar"},{"type":"literal","value":"signal_cellular_alt_2_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_0_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_1_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_2_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_3_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_4_bar"},{"type":"literal","value":"signal_cellular_no_sim"},{"type":"literal","value":"signal_cellular_nodata"},{"type":"literal","value":"signal_cellular_null"},{"type":"literal","value":"signal_cellular_off"},{"type":"literal","value":"signal_cellular_pause"},{"type":"literal","value":"signal_disconnected"},{"type":"literal","value":"signal_wifi_0_bar"},{"type":"literal","value":"signal_wifi_1_bar"},{"type":"literal","value":"signal_wifi_1_bar_lock"},{"type":"literal","value":"signal_wifi_2_bar"},{"type":"literal","value":"signal_wifi_2_bar_lock"},{"type":"literal","value":"signal_wifi_3_bar"},{"type":"literal","value":"signal_wifi_3_bar_lock"},{"type":"literal","value":"signal_wifi_4_bar"},{"type":"literal","value":"signal_wifi_4_bar_lock"},{"type":"literal","value":"signal_wifi_bad"},{"type":"literal","value":"signal_wifi_connected_no_internet_0"},{"type":"literal","value":"signal_wifi_connected_no_internet_1"},{"type":"literal","value":"signal_wifi_connected_no_internet_2"},{"type":"literal","value":"signal_wifi_connected_no_internet_3"},{"type":"literal","value":"signal_wifi_connected_no_internet_4"},{"type":"literal","value":"signal_wifi_off"},{"type":"literal","value":"signal_wifi_statusbar_1_bar"},{"type":"literal","value":"signal_wifi_statusbar_2_bar"},{"type":"literal","value":"signal_wifi_statusbar_3_bar"},{"type":"literal","value":"signal_wifi_statusbar_4_bar"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_1"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_2"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_3"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_4"},{"type":"literal","value":"signal_wifi_statusbar_not_connected"},{"type":"literal","value":"signal_wifi_statusbar_null"},{"type":"literal","value":"signpost"},{"type":"literal","value":"sim_card"},{"type":"literal","value":"sim_card_alert"},{"type":"literal","value":"sim_card_download"},{"type":"literal","value":"simulation"},{"type":"literal","value":"single_bed"},{"type":"literal","value":"sip"},{"type":"literal","value":"siren"},{"type":"literal","value":"siren_check"},{"type":"literal","value":"siren_open"},{"type":"literal","value":"siren_question"},{"type":"literal","value":"skateboarding"},{"type":"literal","value":"skeleton"},{"type":"literal","value":"skillet"},{"type":"literal","value":"skillet_cooktop"},{"type":"literal","value":"skip_next"},{"type":"literal","value":"skip_previous"},{"type":"literal","value":"skull"},{"type":"literal","value":"skull_list"},{"type":"literal","value":"slab_serif"},{"type":"literal","value":"sledding"},{"type":"literal","value":"sleep_score"},{"type":"literal","value":"slide_library"},{"type":"literal","value":"sliders"},{"type":"literal","value":"slideshow"},{"type":"literal","value":"slow_motion_video"},{"type":"literal","value":"smart_button"},{"type":"literal","value":"smart_card_reader"},{"type":"literal","value":"smart_card_reader_off"},{"type":"literal","value":"smart_display"},{"type":"literal","value":"smart_outlet"},{"type":"literal","value":"smart_screen"},{"type":"literal","value":"smart_toy"},{"type":"literal","value":"smb_share"},{"type":"literal","value":"smoke_free"},{"type":"literal","value":"smoking_rooms"},{"type":"literal","value":"sms"},{"type":"literal","value":"sms_failed"},{"type":"literal","value":"snippet_folder"},{"type":"literal","value":"snooze"},{"type":"literal","value":"snowboarding"},{"type":"literal","value":"snowing"},{"type":"literal","value":"snowing_heavy"},{"type":"literal","value":"snowmobile"},{"type":"literal","value":"snowshoeing"},{"type":"literal","value":"soap"},{"type":"literal","value":"soba"},{"type":"literal","value":"social_distance"},{"type":"literal","value":"social_leaderboard"},{"type":"literal","value":"solar_power"},{"type":"literal","value":"solo_dining"},{"type":"literal","value":"sort_by_alpha"},{"type":"literal","value":"sound_detection_dog_barking"},{"type":"literal","value":"sound_detection_glass_break"},{"type":"literal","value":"sound_detection_loud_sound"},{"type":"literal","value":"sound_sampler"},{"type":"literal","value":"soup_kitchen"},{"type":"literal","value":"source_environment"},{"type":"literal","value":"source_notes"},{"type":"literal","value":"south"},{"type":"literal","value":"south_america"},{"type":"literal","value":"south_east"},{"type":"literal","value":"south_west"},{"type":"literal","value":"spa"},{"type":"literal","value":"space_bar"},{"type":"literal","value":"space_dashboard"},{"type":"literal","value":"spatial_audio"},{"type":"literal","value":"spatial_audio_off"},{"type":"literal","value":"spatial_speaker"},{"type":"literal","value":"spatial_tracking"},{"type":"literal","value":"speaker_group"},{"type":"literal","value":"speaker_notes"},{"type":"literal","value":"speaker_notes_off"},{"type":"literal","value":"speaker_phone"},{"type":"literal","value":"special_character"},{"type":"literal","value":"specific_gravity"},{"type":"literal","value":"speech_to_text"},{"type":"literal","value":"speed_0_25"},{"type":"literal","value":"speed_0_2x"},{"type":"literal","value":"speed_0_5"},{"type":"literal","value":"speed_0_5x"},{"type":"literal","value":"speed_0_75"},{"type":"literal","value":"speed_0_7x"},{"type":"literal","value":"speed_1_2"},{"type":"literal","value":"speed_1_25"},{"type":"literal","value":"speed_1_2x"},{"type":"literal","value":"speed_1_5"},{"type":"literal","value":"speed_1_5x"},{"type":"literal","value":"speed_1_75"},{"type":"literal","value":"speed_1_7x"},{"type":"literal","value":"speed_2x"},{"type":"literal","value":"speed_camera"},{"type":"literal","value":"spellcheck"},{"type":"literal","value":"split_scene"},{"type":"literal","value":"split_scene_down"},{"type":"literal","value":"split_scene_left"},{"type":"literal","value":"split_scene_right"},{"type":"literal","value":"split_scene_up"},{"type":"literal","value":"splitscreen"},{"type":"literal","value":"splitscreen_add"},{"type":"literal","value":"splitscreen_bottom"},{"type":"literal","value":"splitscreen_landscape"},{"type":"literal","value":"splitscreen_left"},{"type":"literal","value":"splitscreen_portrait"},{"type":"literal","value":"splitscreen_right"},{"type":"literal","value":"splitscreen_top"},{"type":"literal","value":"splitscreen_vertical_add"},{"type":"literal","value":"spo2"},{"type":"literal","value":"spoke"},{"type":"literal","value":"sports"},{"type":"literal","value":"sports_and_outdoors"},{"type":"literal","value":"sports_bar"},{"type":"literal","value":"sports_baseball"},{"type":"literal","value":"sports_basketball"},{"type":"literal","value":"sports_cricket"},{"type":"literal","value":"sports_esports"},{"type":"literal","value":"sports_football"},{"type":"literal","value":"sports_golf"},{"type":"literal","value":"sports_gymnastics"},{"type":"literal","value":"sports_handball"},{"type":"literal","value":"sports_hockey"},{"type":"literal","value":"sports_kabaddi"},{"type":"literal","value":"sports_martial_arts"},{"type":"literal","value":"sports_mma"},{"type":"literal","value":"sports_motorsports"},{"type":"literal","value":"sports_rugby"},{"type":"literal","value":"sports_score"},{"type":"literal","value":"sports_soccer"},{"type":"literal","value":"sports_tennis"},{"type":"literal","value":"sports_volleyball"},{"type":"literal","value":"sprint"},{"type":"literal","value":"square_dot"},{"type":"literal","value":"square_foot"},{"type":"literal","value":"ssid_chart"},{"type":"literal","value":"stack_group"},{"type":"literal","value":"stack_hexagon"},{"type":"literal","value":"stack_off"},{"type":"literal","value":"stack_star"},{"type":"literal","value":"stacked_bar_chart"},{"type":"literal","value":"stacked_email"},{"type":"literal","value":"stacked_inbox"},{"type":"literal","value":"stacked_line_chart"},{"type":"literal","value":"stacks"},{"type":"literal","value":"stadia_controller"},{"type":"literal","value":"stadium"},{"type":"literal","value":"stairs_2"},{"type":"literal","value":"star_border"},{"type":"literal","value":"star_border_purple500"},{"type":"literal","value":"star_half"},{"type":"literal","value":"star_outline"},{"type":"literal","value":"star_purple500"},{"type":"literal","value":"star_rate"},{"type":"literal","value":"star_rate_half"},{"type":"literal","value":"star_shine"},{"type":"literal","value":"stars"},{"type":"literal","value":"stars_2"},{"type":"literal","value":"stat_0"},{"type":"literal","value":"stat_1"},{"type":"literal","value":"stat_2"},{"type":"literal","value":"stat_3"},{"type":"literal","value":"stat_minus_1"},{"type":"literal","value":"stat_minus_2"},{"type":"literal","value":"stat_minus_3"},{"type":"literal","value":"stay_current_landscape"},{"type":"literal","value":"stay_current_portrait"},{"type":"literal","value":"stay_primary_landscape"},{"type":"literal","value":"stay_primary_portrait"},{"type":"literal","value":"steering_wheel_heat"},{"type":"literal","value":"step_into"},{"type":"literal","value":"step_out"},{"type":"literal","value":"step_over"},{"type":"literal","value":"steppers"},{"type":"literal","value":"steps"},{"type":"literal","value":"stethoscope_arrow"},{"type":"literal","value":"stethoscope_check"},{"type":"literal","value":"sticky_note"},{"type":"literal","value":"sticky_note_2"},{"type":"literal","value":"stock_media"},{"type":"literal","value":"stockpot"},{"type":"literal","value":"stop_circle"},{"type":"literal","value":"stop_screen_share"},{"type":"literal","value":"store"},{"type":"literal","value":"store_mall_directory"},{"type":"literal","value":"storm"},{"type":"literal","value":"straight"},{"type":"literal","value":"straighten"},{"type":"literal","value":"strategy"},{"type":"literal","value":"stream"},{"type":"literal","value":"streetview"},{"type":"literal","value":"stress_management"},{"type":"literal","value":"strikethrough_s"},{"type":"literal","value":"stroke_full"},{"type":"literal","value":"stroke_partial"},{"type":"literal","value":"styler"},{"type":"literal","value":"stylus"},{"type":"literal","value":"stylus_brush"},{"type":"literal","value":"stylus_fountain_pen"},{"type":"literal","value":"stylus_highlighter"},{"type":"literal","value":"stylus_laser_pointer"},{"type":"literal","value":"stylus_note"},{"type":"literal","value":"stylus_pen"},{"type":"literal","value":"stylus_pencil"},{"type":"literal","value":"subdirectory_arrow_left"},{"type":"literal","value":"subdirectory_arrow_right"},{"type":"literal","value":"subheader"},{"type":"literal","value":"subject"},{"type":"literal","value":"subscript"},{"type":"literal","value":"subscriptions"},{"type":"literal","value":"subtitles"},{"type":"literal","value":"subtitles_gear"},{"type":"literal","value":"subtitles_off"},{"type":"literal","value":"subway"},{"type":"literal","value":"subway_walk"},{"type":"literal","value":"summarize"},{"type":"literal","value":"sunny"},{"type":"literal","value":"sunny_snowing"},{"type":"literal","value":"superscript"},{"type":"literal","value":"supervised_user_circle"},{"type":"literal","value":"supervised_user_circle_off"},{"type":"literal","value":"supervisor_account"},{"type":"literal","value":"support"},{"type":"literal","value":"support_agent"},{"type":"literal","value":"surfing"},{"type":"literal","value":"surgical"},{"type":"literal","value":"surround_sound"},{"type":"literal","value":"swap_calls"},{"type":"literal","value":"swap_driving_apps"},{"type":"literal","value":"swap_driving_apps_wheel"},{"type":"literal","value":"swap_horiz"},{"type":"literal","value":"swap_horizontal_circle"},{"type":"literal","value":"swap_vert"},{"type":"literal","value":"swap_vertical_circle"},{"type":"literal","value":"sweep"},{"type":"literal","value":"swipe"},{"type":"literal","value":"swipe_down"},{"type":"literal","value":"swipe_down_alt"},{"type":"literal","value":"swipe_left"},{"type":"literal","value":"swipe_left_alt"},{"type":"literal","value":"swipe_right"},{"type":"literal","value":"swipe_right_alt"},{"type":"literal","value":"swipe_up"},{"type":"literal","value":"swipe_up_alt"},{"type":"literal","value":"swipe_vertical"},{"type":"literal","value":"switch_access"},{"type":"literal","value":"switch_access_2"},{"type":"literal","value":"switch_access_3"},{"type":"literal","value":"switch_access_shortcut"},{"type":"literal","value":"switch_access_shortcut_add"},{"type":"literal","value":"switch_account"},{"type":"literal","value":"switch_camera"},{"type":"literal","value":"switch_left"},{"type":"literal","value":"switch_right"},{"type":"literal","value":"switch_video"},{"type":"literal","value":"switches"},{"type":"literal","value":"sword_rose"},{"type":"literal","value":"swords"},{"type":"literal","value":"symptoms"},{"type":"literal","value":"synagogue"},{"type":"literal","value":"sync_alt"},{"type":"literal","value":"sync_arrow_down"},{"type":"literal","value":"sync_arrow_up"},{"type":"literal","value":"sync_desktop"},{"type":"literal","value":"sync_disabled"},{"type":"literal","value":"sync_lock"},{"type":"literal","value":"sync_problem"},{"type":"literal","value":"sync_saved_locally"},{"type":"literal","value":"sync_saved_locally_off"},{"type":"literal","value":"system_security_update"},{"type":"literal","value":"system_security_update_good"},{"type":"literal","value":"system_security_update_warning"},{"type":"literal","value":"system_update"},{"type":"literal","value":"system_update_alt"},{"type":"literal","value":"tab_close"},{"type":"literal","value":"tab_close_inactive"},{"type":"literal","value":"tab_close_right"},{"type":"literal","value":"tab_duplicate"},{"type":"literal","value":"tab_group"},{"type":"literal","value":"tab_inactive"},{"type":"literal","value":"tab_move"},{"type":"literal","value":"tab_new_right"},{"type":"literal","value":"tab_recent"},{"type":"literal","value":"tab_search"},{"type":"literal","value":"tab_unselected"},{"type":"literal","value":"table_bar"},{"type":"literal","value":"table_chart"},{"type":"literal","value":"table_chart_view"},{"type":"literal","value":"table_convert"},{"type":"literal","value":"table_edit"},{"type":"literal","value":"table_eye"},{"type":"literal","value":"table_lamp"},{"type":"literal","value":"table_large"},{"type":"literal","value":"table_restaurant"},{"type":"literal","value":"table_rows"},{"type":"literal","value":"table_rows_narrow"},{"type":"literal","value":"table_sign"},{"type":"literal","value":"table_view"},{"type":"literal","value":"tablet"},{"type":"literal","value":"tablet_android"},{"type":"literal","value":"tablet_camera"},{"type":"literal","value":"tablet_mac"},{"type":"literal","value":"tactic"},{"type":"literal","value":"tag_faces"},{"type":"literal","value":"takeout_dining"},{"type":"literal","value":"takeout_dining_2"},{"type":"literal","value":"tamper_detection_off"},{"type":"literal","value":"tamper_detection_on"},{"type":"literal","value":"tap_and_play"},{"type":"literal","value":"tapas"},{"type":"literal","value":"task"},{"type":"literal","value":"task_alt"},{"type":"literal","value":"tatami_seat"},{"type":"literal","value":"taunt"},{"type":"literal","value":"taxi_alert"},{"type":"literal","value":"team_dashboard"},{"type":"literal","value":"temp_preferences_eco"},{"type":"literal","value":"temple_buddhist"},{"type":"literal","value":"temple_hindu"},{"type":"literal","value":"tenancy"},{"type":"literal","value":"terrain"},{"type":"literal","value":"text_ad"},{"type":"literal","value":"text_compare"},{"type":"literal","value":"text_decrease"},{"type":"literal","value":"text_fields"},{"type":"literal","value":"text_fields_alt"},{"type":"literal","value":"text_format"},{"type":"literal","value":"text_increase"},{"type":"literal","value":"text_rotate_up"},{"type":"literal","value":"text_rotate_vertical"},{"type":"literal","value":"text_rotation_angledown"},{"type":"literal","value":"text_rotation_angleup"},{"type":"literal","value":"text_rotation_down"},{"type":"literal","value":"text_rotation_none"},{"type":"literal","value":"text_select_end"},{"type":"literal","value":"text_select_jump_to_beginning"},{"type":"literal","value":"text_select_jump_to_end"},{"type":"literal","value":"text_select_move_back_character"},{"type":"literal","value":"text_select_move_back_word"},{"type":"literal","value":"text_select_move_down"},{"type":"literal","value":"text_select_move_forward_character"},{"type":"literal","value":"text_select_move_forward_word"},{"type":"literal","value":"text_select_move_up"},{"type":"literal","value":"text_select_start"},{"type":"literal","value":"text_snippet"},{"type":"literal","value":"text_to_speech"},{"type":"literal","value":"text_up"},{"type":"literal","value":"textsms"},{"type":"literal","value":"texture"},{"type":"literal","value":"texture_add"},{"type":"literal","value":"texture_minus"},{"type":"literal","value":"theater_comedy"},{"type":"literal","value":"theaters"},{"type":"literal","value":"thermometer_add"},{"type":"literal","value":"thermometer_gain"},{"type":"literal","value":"thermometer_loss"},{"type":"literal","value":"thermometer_minus"},{"type":"literal","value":"thermostat"},{"type":"literal","value":"thermostat_arrow_down"},{"type":"literal","value":"thermostat_arrow_up"},{"type":"literal","value":"thermostat_auto"},{"type":"literal","value":"thermostat_carbon"},{"type":"literal","value":"things_to_do"},{"type":"literal","value":"thread_unread"},{"type":"literal","value":"threat_intelligence"},{"type":"literal","value":"thumb_down"},{"type":"literal","value":"thumb_down_alt"},{"type":"literal","value":"thumb_down_off_alt"},{"type":"literal","value":"thumb_up"},{"type":"literal","value":"thumb_up_alt"},{"type":"literal","value":"thumb_up_off_alt"},{"type":"literal","value":"thumbnail_bar"},{"type":"literal","value":"thumbs_up_double"},{"type":"literal","value":"thumbs_up_down"},{"type":"literal","value":"thunderstorm"},{"type":"literal","value":"tibia"},{"type":"literal","value":"tibia_alt"},{"type":"literal","value":"tile_large"},{"type":"literal","value":"tile_medium"},{"type":"literal","value":"tile_small"},{"type":"literal","value":"time_auto"},{"type":"literal","value":"time_to_leave"},{"type":"literal","value":"timeline"},{"type":"literal","value":"timer_1"},{"type":"literal","value":"timer_10"},{"type":"literal","value":"timer_10_alt_1"},{"type":"literal","value":"timer_10_select"},{"type":"literal","value":"timer_2"},{"type":"literal","value":"timer_3"},{"type":"literal","value":"timer_3_alt_1"},{"type":"literal","value":"timer_3_select"},{"type":"literal","value":"timer_5"},{"type":"literal","value":"timer_5_shutter"},{"type":"literal","value":"timer_arrow_down"},{"type":"literal","value":"timer_arrow_up"},{"type":"literal","value":"timer_off"},{"type":"literal","value":"timer_pause"},{"type":"literal","value":"timer_play"},{"type":"literal","value":"tips_and_updates"},{"type":"literal","value":"tire_repair"},{"type":"literal","value":"titlecase"},{"type":"literal","value":"toc"},{"type":"literal","value":"today"},{"type":"literal","value":"toggle_off"},{"type":"literal","value":"toggle_on"},{"type":"literal","value":"token"},{"type":"literal","value":"toll"},{"type":"literal","value":"tonality"},{"type":"literal","value":"tonality_2"},{"type":"literal","value":"tools_flat_head"},{"type":"literal","value":"tools_installation_kit"},{"type":"literal","value":"tools_ladder"},{"type":"literal","value":"tools_level"},{"type":"literal","value":"tools_phillips"},{"type":"literal","value":"tools_pliers_wire_stripper"},{"type":"literal","value":"tools_power_drill"},{"type":"literal","value":"tooltip_2"},{"type":"literal","value":"top_panel_close"},{"type":"literal","value":"top_panel_open"},{"type":"literal","value":"topic"},{"type":"literal","value":"total_dissolved_solids"},{"type":"literal","value":"touch_app"},{"type":"literal","value":"touch_double"},{"type":"literal","value":"touch_long"},{"type":"literal","value":"touch_triple"},{"type":"literal","value":"touchpad_mouse"},{"type":"literal","value":"touchpad_mouse_off"},{"type":"literal","value":"tour"},{"type":"literal","value":"toys"},{"type":"literal","value":"toys_and_games"},{"type":"literal","value":"toys_fan"},{"type":"literal","value":"track_changes"},{"type":"literal","value":"trackpad_input"},{"type":"literal","value":"trackpad_input_2"},{"type":"literal","value":"trackpad_input_3"},{"type":"literal","value":"traffic"},{"type":"literal","value":"traffic_jam"},{"type":"literal","value":"trail_length"},{"type":"literal","value":"trail_length_medium"},{"type":"literal","value":"trail_length_short"},{"type":"literal","value":"train"},{"type":"literal","value":"transcribe"},{"type":"literal","value":"transfer_within_a_station"},{"type":"literal","value":"transgender"},{"type":"literal","value":"transit_enterexit"},{"type":"literal","value":"transit_ticket"},{"type":"literal","value":"transition_chop"},{"type":"literal","value":"transition_dissolve"},{"type":"literal","value":"transition_fade"},{"type":"literal","value":"transition_push"},{"type":"literal","value":"transition_slide"},{"type":"literal","value":"translate_indic"},{"type":"literal","value":"transportation"},{"type":"literal","value":"travel"},{"type":"literal","value":"travel_explore"},{"type":"literal","value":"travel_luggage_and_bags"},{"type":"literal","value":"trending_down"},{"type":"literal","value":"trending_flat"},{"type":"literal","value":"trending_up"},{"type":"literal","value":"trip"},{"type":"literal","value":"trip_origin"},{"type":"literal","value":"trolley"},{"type":"literal","value":"trolley_cable_car"},{"type":"literal","value":"troubleshoot"},{"type":"literal","value":"try"},{"type":"literal","value":"tsunami"},{"type":"literal","value":"tsv"},{"type":"literal","value":"tty"},{"type":"literal","value":"tune"},{"type":"literal","value":"tungsten"},{"type":"literal","value":"turn_left"},{"type":"literal","value":"turn_right"},{"type":"literal","value":"turn_sharp_left"},{"type":"literal","value":"turn_sharp_right"},{"type":"literal","value":"turn_slight_left"},{"type":"literal","value":"turn_slight_right"},{"type":"literal","value":"turned_in"},{"type":"literal","value":"turned_in_not"},{"type":"literal","value":"tv_displays"},{"type":"literal","value":"tv_gen"},{"type":"literal","value":"tv_guide"},{"type":"literal","value":"tv_next"},{"type":"literal","value":"tv_off"},{"type":"literal","value":"tv_options_edit_channels"},{"type":"literal","value":"tv_options_input_settings"},{"type":"literal","value":"tv_remote"},{"type":"literal","value":"tv_signin"},{"type":"literal","value":"tv_with_assistant"},{"type":"literal","value":"two_pager"},{"type":"literal","value":"two_pager_store"},{"type":"literal","value":"two_wheeler"},{"type":"literal","value":"type_specimen"},{"type":"literal","value":"u_turn_left"},{"type":"literal","value":"u_turn_right"},{"type":"literal","value":"udon"},{"type":"literal","value":"ulna_radius"},{"type":"literal","value":"ulna_radius_alt"},{"type":"literal","value":"unarchive"},{"type":"literal","value":"undo"},{"type":"literal","value":"unfold_less"},{"type":"literal","value":"unfold_less_double"},{"type":"literal","value":"unfold_more"},{"type":"literal","value":"unfold_more_double"},{"type":"literal","value":"ungroup"},{"type":"literal","value":"universal_currency"},{"type":"literal","value":"universal_currency_alt"},{"type":"literal","value":"universal_local"},{"type":"literal","value":"unknown_2"},{"type":"literal","value":"unknown_5"},{"type":"literal","value":"unknown_7"},{"type":"literal","value":"unknown_document"},{"type":"literal","value":"unknown_med"},{"type":"literal","value":"unlicense"},{"type":"literal","value":"unpaved_road"},{"type":"literal","value":"unpublished"},{"type":"literal","value":"unsubscribe"},{"type":"literal","value":"upcoming"},{"type":"literal","value":"update"},{"type":"literal","value":"update_disabled"},{"type":"literal","value":"upgrade"},{"type":"literal","value":"upi_pay"},{"type":"literal","value":"upload"},{"type":"literal","value":"upload_2"},{"type":"literal","value":"upload_file"},{"type":"literal","value":"urology"},{"type":"literal","value":"usb"},{"type":"literal","value":"usb_off"},{"type":"literal","value":"user_attributes"},{"type":"literal","value":"vaccines"},{"type":"literal","value":"vacuum"},{"type":"literal","value":"valve"},{"type":"literal","value":"vape_free"},{"type":"literal","value":"vaping_rooms"},{"type":"literal","value":"variable_add"},{"type":"literal","value":"variable_insert"},{"type":"literal","value":"variable_remove"},{"type":"literal","value":"variables"},{"type":"literal","value":"ventilator"},{"type":"literal","value":"verified"},{"type":"literal","value":"verified_off"},{"type":"literal","value":"verified_user"},{"type":"literal","value":"vertical_align_bottom"},{"type":"literal","value":"vertical_align_center"},{"type":"literal","value":"vertical_align_top"},{"type":"literal","value":"vertical_distribute"},{"type":"literal","value":"vertical_shades"},{"type":"literal","value":"vertical_shades_closed"},{"type":"literal","value":"vertical_split"},{"type":"literal","value":"vibration"},{"type":"literal","value":"video_call"},{"type":"literal","value":"video_camera_back"},{"type":"literal","value":"video_camera_back_add"},{"type":"literal","value":"video_camera_front"},{"type":"literal","value":"video_camera_front_off"},{"type":"literal","value":"video_chat"},{"type":"literal","value":"video_file"},{"type":"literal","value":"video_label"},{"type":"literal","value":"video_library"},{"type":"literal","value":"video_search"},{"type":"literal","value":"video_settings"},{"type":"literal","value":"video_stable"},{"type":"literal","value":"videocam"},{"type":"literal","value":"videocam_alert"},{"type":"literal","value":"videocam_off"},{"type":"literal","value":"videogame_asset"},{"type":"literal","value":"videogame_asset_off"},{"type":"literal","value":"view_agenda"},{"type":"literal","value":"view_apps"},{"type":"literal","value":"view_array"},{"type":"literal","value":"view_carousel"},{"type":"literal","value":"view_column"},{"type":"literal","value":"view_column_2"},{"type":"literal","value":"view_comfy"},{"type":"literal","value":"view_comfy_alt"},{"type":"literal","value":"view_compact"},{"type":"literal","value":"view_compact_alt"},{"type":"literal","value":"view_cozy"},{"type":"literal","value":"view_day"},{"type":"literal","value":"view_headline"},{"type":"literal","value":"view_in_ar"},{"type":"literal","value":"view_in_ar_off"},{"type":"literal","value":"view_kanban"},{"type":"literal","value":"view_list"},{"type":"literal","value":"view_module"},{"type":"literal","value":"view_object_track"},{"type":"literal","value":"view_quilt"},{"type":"literal","value":"view_real_size"},{"type":"literal","value":"view_sidebar"},{"type":"literal","value":"view_stream"},{"type":"literal","value":"view_timeline"},{"type":"literal","value":"view_week"},{"type":"literal","value":"vignette"},{"type":"literal","value":"vignette_2"},{"type":"literal","value":"villa"},{"type":"literal","value":"visibility_lock"},{"type":"literal","value":"visibility_off"},{"type":"literal","value":"vital_signs"},{"type":"literal","value":"vo2_max"},{"type":"literal","value":"voice_chat"},{"type":"literal","value":"voice_over_off"},{"type":"literal","value":"voice_selection"},{"type":"literal","value":"voice_selection_off"},{"type":"literal","value":"voicemail"},{"type":"literal","value":"voicemail_2"},{"type":"literal","value":"volcano"},{"type":"literal","value":"volume_down"},{"type":"literal","value":"volume_down_alt"},{"type":"literal","value":"volume_mute"},{"type":"literal","value":"volume_off"},{"type":"literal","value":"volume_up"},{"type":"literal","value":"volunteer_activism"},{"type":"literal","value":"voting_chip"},{"type":"literal","value":"vpn_key"},{"type":"literal","value":"vpn_key_alert"},{"type":"literal","value":"vpn_key_off"},{"type":"literal","value":"vpn_lock"},{"type":"literal","value":"vpn_lock_2"},{"type":"literal","value":"vr180_create2d"},{"type":"literal","value":"vr180_create2d_off"},{"type":"literal","value":"vrpano"},{"type":"literal","value":"wall_art"},{"type":"literal","value":"wall_lamp"},{"type":"literal","value":"wallet"},{"type":"literal","value":"wallpaper"},{"type":"literal","value":"wallpaper_slideshow"},{"type":"literal","value":"wand_shine"},{"type":"literal","value":"wand_stars"},{"type":"literal","value":"ward"},{"type":"literal","value":"warehouse"},{"type":"literal","value":"warning_amber"},{"type":"literal","value":"warning_off"},{"type":"literal","value":"wash"},{"type":"literal","value":"washoku"},{"type":"literal","value":"watch"},{"type":"literal","value":"watch_arrow"},{"type":"literal","value":"watch_button_press"},{"type":"literal","value":"watch_check"},{"type":"literal","value":"watch_later"},{"type":"literal","value":"watch_off"},{"type":"literal","value":"watch_screentime"},{"type":"literal","value":"watch_vibration"},{"type":"literal","value":"watch_wake"},{"type":"literal","value":"water"},{"type":"literal","value":"water_bottle"},{"type":"literal","value":"water_bottle_large"},{"type":"literal","value":"water_damage"},{"type":"literal","value":"water_do"},{"type":"literal","value":"water_drop"},{"type":"literal","value":"water_ec"},{"type":"literal","value":"water_full"},{"type":"literal","value":"water_heater"},{"type":"literal","value":"water_lock"},{"type":"literal","value":"water_loss"},{"type":"literal","value":"water_lux"},{"type":"literal","value":"water_medium"},{"type":"literal","value":"water_orp"},{"type":"literal","value":"water_ph"},{"type":"literal","value":"water_pump"},{"type":"literal","value":"water_voc"},{"type":"literal","value":"waterfall_chart"},{"type":"literal","value":"waves"},{"type":"literal","value":"waving_hand"},{"type":"literal","value":"wb_auto"},{"type":"literal","value":"wb_cloudy"},{"type":"literal","value":"wb_incandescent"},{"type":"literal","value":"wb_iridescent"},{"type":"literal","value":"wb_shade"},{"type":"literal","value":"wb_sunny"},{"type":"literal","value":"wb_twighlight"},{"type":"literal","value":"wb_twilight"},{"type":"literal","value":"wc"},{"type":"literal","value":"weather_hail"},{"type":"literal","value":"weather_mix"},{"type":"literal","value":"weather_snowy"},{"type":"literal","value":"web_asset"},{"type":"literal","value":"web_asset_off"},{"type":"literal","value":"web_stories"},{"type":"literal","value":"web_traffic"},{"type":"literal","value":"webhook"},{"type":"literal","value":"weekend"},{"type":"literal","value":"weight"},{"type":"literal","value":"west"},{"type":"literal","value":"whatshot"},{"type":"literal","value":"wheelchair_pickup"},{"type":"literal","value":"where_to_vote"},{"type":"literal","value":"widget_medium"},{"type":"literal","value":"widget_small"},{"type":"literal","value":"widget_width"},{"type":"literal","value":"widgets"},{"type":"literal","value":"width_full"},{"type":"literal","value":"width_normal"},{"type":"literal","value":"width_wide"},{"type":"literal","value":"wifi_1_bar"},{"type":"literal","value":"wifi_2_bar"},{"type":"literal","value":"wifi_add"},{"type":"literal","value":"wifi_calling"},{"type":"literal","value":"wifi_calling_1"},{"type":"literal","value":"wifi_calling_2"},{"type":"literal","value":"wifi_calling_3"},{"type":"literal","value":"wifi_calling_bar_1"},{"type":"literal","value":"wifi_calling_bar_2"},{"type":"literal","value":"wifi_calling_bar_3"},{"type":"literal","value":"wifi_channel"},{"type":"literal","value":"wifi_find"},{"type":"literal","value":"wifi_home"},{"type":"literal","value":"wifi_lock"},{"type":"literal","value":"wifi_notification"},{"type":"literal","value":"wifi_off"},{"type":"literal","value":"wifi_password"},{"type":"literal","value":"wifi_protected_setup"},{"type":"literal","value":"wifi_proxy"},{"type":"literal","value":"wifi_tethering"},{"type":"literal","value":"wifi_tethering_error"},{"type":"literal","value":"wifi_tethering_off"},{"type":"literal","value":"wind_power"},{"type":"literal","value":"window_closed"},{"type":"literal","value":"window_open"},{"type":"literal","value":"window_sensor"},{"type":"literal","value":"windshield_defrost_auto"},{"type":"literal","value":"windshield_defrost_front"},{"type":"literal","value":"windshield_defrost_rear"},{"type":"literal","value":"windshield_heat_front"},{"type":"literal","value":"wine_bar"},{"type":"literal","value":"woman"},{"type":"literal","value":"woman_2"},{"type":"literal","value":"work"},{"type":"literal","value":"work_alert"},{"type":"literal","value":"work_history"},{"type":"literal","value":"work_off"},{"type":"literal","value":"work_outline"},{"type":"literal","value":"work_update"},{"type":"literal","value":"workspace_premium"},{"type":"literal","value":"workspaces"},{"type":"literal","value":"workspaces_filled"},{"type":"literal","value":"workspaces_outline"},{"type":"literal","value":"wounds_injuries"},{"type":"literal","value":"wrap_text"},{"type":"literal","value":"wrist"},{"type":"literal","value":"wrong_location"},{"type":"literal","value":"wysiwyg"},{"type":"literal","value":"yakitori"},{"type":"literal","value":"yard"},{"type":"literal","value":"yoshoku"},{"type":"literal","value":"your_trips"},{"type":"literal","value":"youtube_activity"},{"type":"literal","value":"youtube_searched_for"},{"type":"literal","value":"zone_person_alert"},{"type":"literal","value":"zone_person_idle"},{"type":"literal","value":"zone_person_urgent"},{"type":"literal","value":"zoom_in"},{"type":"literal","value":"zoom_in_map"},{"type":"literal","value":"zoom_out"},{"type":"literal","value":"zoom_out_map"}]}}]},{"name":"NativeTabsBottomAccessoryProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]},{"name":"NativeTabsProps","variant":"declaration","kind":256,"children":[{"name":"backBehavior","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The behavior when navigating back with the back button."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"history"},{"type":"literal","value":"initialRoute"},{"type":"literal","value":"none"}]}},{"name":"backgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The background color of the tab bar."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"badgeBackgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The background color of every badge in the tab bar."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"badgeTextColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the badge text."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"blurEffect","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The blur effect applied to the tab bar."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"none"},{"type":"literal","value":"regular"},{"type":"literal","value":"light"},{"type":"literal","value":"dark"},{"type":"literal","value":"systemDefault"},{"type":"literal","value":"extraLight"},{"type":"literal","value":"prominent"},{"type":"literal","value":"systemUltraThinMaterial"},{"type":"literal","value":"systemThinMaterial"},{"type":"literal","value":"systemMaterial"},{"type":"literal","value":"systemThickMaterial"},{"type":"literal","value":"systemChromeMaterial"},{"type":"literal","value":"systemUltraThinMaterialLight"},{"type":"literal","value":"systemThinMaterialLight"},{"type":"literal","value":"systemMaterialLight"},{"type":"literal","value":"systemThickMaterialLight"},{"type":"literal","value":"systemChromeMaterialLight"},{"type":"literal","value":"systemUltraThinMaterialDark"},{"type":"literal","value":"systemThinMaterialDark"},{"type":"literal","value":"systemMaterialDark"},{"type":"literal","value":"systemThickMaterialDark"},{"type":"literal","value":"systemChromeMaterialDark"}]}},{"name":"disableIndicator","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Disables the active indicator for the tab bar."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableTransparentOnScrollEdge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab bar will not become transparent when scrolled to the edge."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", hides the tab bar."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"iconColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of every tab icon in the tab bar."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ColorValue | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ColorValue | undefined"}}]}}]}},{"name":"indicatorColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the tab indicator."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"labelStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The style of the every tab label in the tab bar."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}},{"name":"selected","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}}]}}]}},{"name":"labelVisibilityMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The visibility mode of the tab item label."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"auto"},{"type":"literal","value":"selected"},{"type":"literal","value":"labeled"},{"type":"literal","value":"unlabeled"}]}},{"name":"minimizeBehavior","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Specifies the minimize behavior for the tab bar.\n\nAvailable starting from iOS 26.\n\nThe following values are currently supported:\n\n- "},{"kind":"code","text":"`automatic`"},{"kind":"text","text":" - resolves to the system default minimize behavior\n- "},{"kind":"code","text":"`never`"},{"kind":"text","text":" - the tab bar does not minimize\n- "},{"kind":"code","text":"`onScrollDown`"},{"kind":"text","text":" - the tab bar minimizes when scrolling down and\n expands when scrolling back up\n- "},{"kind":"code","text":"`onScrollUp`"},{"kind":"text","text":" - the tab bar minimizes when scrolling up and expands\n when scrolling back down"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)."}]},{"tag":"@default","content":[{"kind":"text","text":"automatic"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"never"},{"type":"literal","value":"onScrollDown"},{"type":"literal","value":"onScrollUp"}]}},{"name":"rippleColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the ripple effect when the tab is pressed."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"screenListeners","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Listeners for navigation events on all tabs.\n\nSupported events:\n- "},{"kind":"code","text":"`tabPress`"},{"kind":"text","text":" - called when a tab is pressed\n- "},{"kind":"code","text":"`focus`"},{"kind":"text","text":" - called when the screen comes into focus\n- "},{"kind":"code","text":"`blur`"},{"kind":"text","text":" - called when the screen loses focus"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n {\n console.log('Any tab pressed');\n },\n }}\n>\n ...\n\n```"}]}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"prop","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenListeners"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"}],"name":"ScreenListeners","package":"expo-router"}}]}},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"beforeRemove","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"beforeRemove"},{"type":"literal","value":true}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"blur","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"blur"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"focus","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"focus"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"state"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"tabPress","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"tabPress"},{"type":"literal","value":false}],"name":"EventListenerCallback","package":"expo-router"}}]}}],"name":"Partial","package":"typescript"}]}},{"name":"shadowColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the shadow."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uibarappearance/shadowcolor)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"sidebarAdaptable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", enables the sidebarAdaptable tab bar style on iPadOS and macOS. This prop has no effect on iPhone."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS 18+"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"tabBarRespectsIMEInsets","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab bar lifts above the keyboard (input method editor, or IME) instead of being overlaid by it. By default, the keyboard overlays the tab bar.\n\nRequires "},{"kind":"code","text":"`windowSoftInputMode=\"adjustResize\"`"},{"kind":"text","text":". Has no effect on Android API levels earlier than 30 (Android 11)."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"tintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The tint color of the tab icon.\n\nCan be overridden by icon color and label color for each tab individually."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"titlePositionAdjustment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/titlepositionadjustment)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"vertical","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"unstable_nativeProps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying native tab host implementation in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":".\nUse this to configure props that are not directly exposed by Expo Router.\n\n> **Note**: This is an unstable API and may change or be removed in minor versions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/host/TabsHost.types.ts","qualifiedName":"TabsHostProps"},"name":"TabsHostProps","package":"react-native-screens"},{"type":"union","types":[{"type":"literal","value":"children"},{"type":"literal","value":"navStateRequest"},{"type":"literal","value":"onTabSelected"}]}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}}],"extendedTypes":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.PropsWithChildren"},"name":"PropsWithChildren","package":"@types/react","qualifiedName":"React.PropsWithChildren"}]},{"name":"NativeTabsTriggerBadgeProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text to display as the badge for the tab.\nIf not provided, the badge will not be displayed."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the badge will be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"selectedBackgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]},{"name":"NativeTabsTriggerLabelProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text to display as the label for the tab."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the label will be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"selectedStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}}]},{"name":"NativeTabTriggerProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The children of the trigger.\n\nUse "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":", "},{"kind":"code","text":"`Label`"},{"kind":"text","text":", and "},{"kind":"code","text":"`Badge`"},{"kind":"text","text":" components to customize the tab."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"contentStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The style applied to the content of the tab\n\nNote: Only certain style properties are supported."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Pick"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"ViewStyle"},"name":"ViewStyle","package":"react-native"},{"type":"union","types":[{"type":"literal","value":"backgroundColor"},{"type":"literal","value":"experimental_backgroundImage"},{"type":"literal","value":"alignContent"},{"type":"literal","value":"alignItems"},{"type":"literal","value":"flexDirection"},{"type":"literal","value":"gap"},{"type":"literal","value":"justifyContent"},{"type":"literal","value":"padding"},{"type":"literal","value":"paddingBottom"},{"type":"literal","value":"paddingEnd"},{"type":"literal","value":"paddingHorizontal"},{"type":"literal","value":"paddingLeft"},{"type":"literal","value":"paddingRight"},{"type":"literal","value":"paddingStart"},{"type":"literal","value":"paddingTop"},{"type":"literal","value":"paddingVertical"},{"type":"literal","value":"paddingBlock"},{"type":"literal","value":"paddingBlockEnd"},{"type":"literal","value":"paddingBlockStart"},{"type":"literal","value":"paddingInline"},{"type":"literal","value":"paddingInlineEnd"},{"type":"literal","value":"paddingInlineStart"}]}],"name":"Pick","package":"typescript"}},{"name":"disableAutomaticContentInsets","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The default behavior differs between iOS and Android.\n\nOn **Android**, the content of a native tabs screen is automatically wrapped in a "},{"kind":"code","text":"`SafeAreaView`"},{"kind":"text","text":",\nand the **bottom** inset is applied. Other insets must be handled manually.\n\nOn **iOS**, the first scroll view nested inside a native tabs screen has\n[automatic content inset adjustment](https://reactnative.dev/docs/scrollview#contentinsetadjustmentbehavior-ios) enabled\n\nWhen this property is set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", automatic content inset adjustment is disabled for the screen\nand must be managed manually. You can use "},{"kind":"code","text":"`SafeAreaView`"},{"kind":"text","text":" from "},{"kind":"code","text":"`react-native-screens/experimental`"},{"kind":"text","text":"\nto handle safe area insets."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab is shown but cannot be selected by tapping it in the\ntab bar.\n\n> **Note:** This only suppresses the native tap interaction. JavaScript\n> navigation such as "},{"kind":"code","text":"`router.push()`"},{"kind":"text","text":" or "},{"kind":"code","text":"``"},{"kind":"text","text":" still navigates to\n> the tab. Use this for tabs that should appear visible but be temporarily inert,\n> and gate navigation in your own code if you need to fully prevent access.\n\nUnlike "},{"kind":"code","text":"`hidden`"},{"kind":"text","text":", the tab remains visible in the tab bar."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disablePopToTop","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will not pop stack to the root when selected again."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableScrollToTop","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will not scroll to the top when selected again."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableTransparentOnScrollEdge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab bar will not become transparent when scrolled to the edge.\n\nWhen set on a trigger, it takes precedence over the value set on "},{"kind":"code","text":"`NativeTabs`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will be hidden from the tab bar.\n\n> **Note**: Marking a tab as "},{"kind":"code","text":"`hidden`"},{"kind":"text","text":" means it cannot be navigated to in any way.\n\n> **Note**: Dynamically hiding tabs will remount the navigator and the state will be reset."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"listeners","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Listeners for navigation events on this tab.\n\nSupported events:\n- "},{"kind":"code","text":"`tabPress`"},{"kind":"text","text":" - called when this tab is pressed\n- "},{"kind":"code","text":"`focus`"},{"kind":"text","text":" - called when this screen comes into focus\n- "},{"kind":"code","text":"`blur`"},{"kind":"text","text":" - called when this screen loses focus"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n {\n console.log('Home tab pressed');\n },\n }}\n/>\n```"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"beforeRemove","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"beforeRemove"},{"type":"literal","value":true}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"blur","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"blur"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"focus","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"focus"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"state"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"intrinsic","name":"string"},{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"intrinsic","name":"undefined"}]}],"name":"EventListenerCallback","package":"expo-router"}}]}}],"name":"Partial","package":"typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"prop","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenListeners"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationState"},"name":"NavigationState","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"}],"name":"ScreenListeners","package":"expo-router"}}]}}]}},{"name":"name","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the route.\n\nThis is required when used inside a Layout component.\n\nWhen used in a route it has no effect."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"role","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"System-provided tab bar item with predefined icon and title\n\nUses Apple's built-in tab bar items (e.g., bookmarks, contacts, downloads) with\nstandard iOS styling and localized titles. Custom "},{"kind":"code","text":"`icon`"},{"kind":"text","text":" or "},{"kind":"code","text":"`selectedIcon`"},{"kind":"text","text":"\nproperties will override the system icon, but the system-defined title cannot\nbe customized."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem)."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"search"},{"type":"literal","value":"history"},{"type":"literal","value":"bookmarks"},{"type":"literal","value":"contacts"},{"type":"literal","value":"downloads"},{"type":"literal","value":"favorites"},{"type":"literal","value":"featured"},{"type":"literal","value":"more"},{"type":"literal","value":"mostRecent"},{"type":"literal","value":"mostViewed"},{"type":"literal","value":"recents"},{"type":"literal","value":"topRated"}]}},{"name":"unstable_nativeProps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying native tab screen implementation.\nUse this to configure props not directly exposed by Expo Router, but available in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":".\n\n> **Note**: This will override any other props set by Expo Router and may lead to unexpected behavior.\n\n> **Note**: This is an unstable API and may change or be removed in minor versions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/screen/TabsScreen.types.ts","qualifiedName":"TabsScreenProps"},"name":"TabsScreenProps","package":"react-native-screens"},{"type":"literal","value":"screenKey"}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}}]},{"name":"SFSymbolIcon","variant":"declaration","kind":256,"children":[{"name":"sf","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the SF Symbol to use as an icon.\n\nThe value can be provided in two ways:\n- As a string with the SF Symbol name\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"SFSymbols7_0 | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"}}]}}]}}]},{"name":"SrcIcon","variant":"declaration","kind":256,"children":[{"name":"renderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how the image icon is rendered on iOS.\n\n- "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":": iOS applies tint color to the icon (selected/unselected states)\n- "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":": Preserves original icon colors\n\n**Default behavior:**\n- If tab bar icon color is configured, defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":"\n- If no icon color is set, defaults to "},{"kind":"code","text":"`'original'`"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"src","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The image source to use as an icon.\n\nWhen "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" prop is used it will override this prop on iOS.\n\nWhen "},{"kind":"code","text":"`drawable`"},{"kind":"text","text":" or "},{"kind":"code","text":"`material`"},{"kind":"text","text":" prop is used it will override this prop on Android.\n\nThe value can be provided in two ways:\n- As an image source\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"Android"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactElement"},"typeArguments":[{"type":"intrinsic","name":"unknown"},{"type":"unknown","name":"string | JSXElementConstructor"}],"name":"ReactElement","package":"@types/react","qualifiedName":"React.ReactElement"},{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ReactElement> | ImageSourcePropType | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"unknown","name":"ReactElement> | ImageSourcePropType"}}]}}]}}]},{"name":"XcassetIcon","variant":"declaration","kind":256,"children":[{"name":"xcasset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the iOS asset catalog image to use as an icon.\n\nXcassets provide automatic multi-resolution (@1x/@2x/@3x), dark mode variants,\nand device-specific images via "},{"kind":"code","text":"`[UIImage imageNamed:]`"},{"kind":"text","text":".\n\nThe rendering mode (template vs original) can be controlled via the "},{"kind":"code","text":"`renderingMode`"},{"kind":"text","text":" prop\non the "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" component. By default, icons are tinted when "},{"kind":"code","text":"`iconColor`"},{"kind":"text","text":" is set, and\nrendered as original otherwise.\n\nThe value can be provided in two ways:\n- As a string with the asset catalog image name\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}}]}}]},{"name":"NativeTabsBlurEffect","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiblureffect/style)"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_BLUR_EFFECTS"},"name":"SUPPORTED_BLUR_EFFECTS","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsHostNativeProps","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying tab host implementation in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":"."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/host/TabsHost.types.ts","qualifiedName":"TabsHostProps"},"name":"TabsHostProps","package":"react-native-screens"},{"type":"union","types":[{"type":"literal","value":"navStateRequest"},{"type":"literal","value":"onTabSelected"},{"type":"literal","value":"children"}]}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}},{"name":"NativeTabsLabelStyle","variant":"declaration","kind":2097152,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Pick"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"},{"type":"union","types":[{"type":"literal","value":"fontFamily"},{"type":"literal","value":"fontSize"},{"type":"literal","value":"fontStyle"},{"type":"literal","value":"fontWeight"},{"type":"literal","value":"color"}]}],"name":"Pick","package":"typescript"}},{"name":"NativeTabsTabBarItemLabelVisibilityMode","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES"},"name":"SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTabBarItemRole","variant":"declaration","kind":2097152,"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_ITEM_ROLES"},"name":"SUPPORTED_TAB_BAR_ITEM_ROLES","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTabBarMinimizeBehavior","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS"},"name":"SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTriggerIconProps","variant":"declaration","kind":2097152,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"selectedColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]}},{"type":"union","types":[{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"DrawableIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"MaterialIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"DrawableIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"MaterialIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"MaterialIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"DrawableIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"reference","name":"SrcIcon","package":"expo-router"}]}]}},{"name":"SymbolOrImageSource","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"drawable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the drawable resource to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"sf","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the SF Symbol to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbol"},"name":"SFSymbol","package":"sf-symbols-typescript"}},{"name":"xcasset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the iOS asset catalog image to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"string"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"renderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how the icon is rendered on iOS."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]},{"tag":"@default","content":[{"kind":"text","text":"'template'"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"src","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The image source to use as an icon."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}]}}]}}]}},{"name":"NativeTabs","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"The component used to create native tabs layout."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]}]},"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabsProps","package":"expo-router"}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"BottomAccessory","variant":"declaration","kind":1024,"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsBottomAccessoryProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"usePlacement","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A hook which returns the bottom accessory environment for given component.\n\nNote, that there can be two copies of the same component rendered for different environments.\nThe hook will ensure that component with correct environment is displayed.\n\nBecause two instances of the component will exist simultaneously, **any state kept\ninside the component will not be shared between the regular and inline versions**.\nIf your accessory needs synchronized or persistent state you must store that state\noutside of bottom accessory component (e.g. passing via props or using context).\n\nDon't pass the environment obtained using this hook up the tree."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\n// This component will have two copies rendered, one for `inline` and one for `regular` environment\nfunction AccessoryContent(props) {\n const placement = NativeTabs.BottomAccessory.usePlacement();\n if (placement === 'inline') {\n return ;\n }\n return ;\n}\n\nexport default function Layout(){\n const [isPlaying, setIsPlaying] = useState(false);\n return (\n \n \n \n \n \n \n );\n}\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"union","types":[{"type":"literal","value":"regular"},{"type":"literal","value":"inline"}]}}]}}}]}}]}},{"name":"Trigger","variant":"declaration","kind":1024,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The component used to customize the native tab options both in the _layout file and from the tab screen.\n\nWhen used in the _layout file, you need to provide a "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop.\nWhen used in the tab screen, the "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop takes no effect."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx app/home.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function HomeScreen() {\n return (\n \n \n Home\n \n This is home screen!\n \n );\n}\n```"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabTriggerProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"Badge","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerBadgeProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerBadge"},{"name":"Icon","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerIconProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerIcon"},{"name":"Label","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerLabelProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerLabel"},{"name":"VectorIcon","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Helper component for loading vector icons.\n\nPrefer using the "},{"kind":"code","text":"`md`"},{"kind":"text","text":" and "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" props on "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" rather than using this component directly.\nOnly use this component when you need to load a specific icon from a vector icon family."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Icon, VectorIcon } from 'expo-router';\nimport MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';\n\n} />\n```"}]}]},"typeParameters":[{"name":"NameT","variant":"typeParam","kind":131072,"flags":{"isConst":true},"type":{"type":"intrinsic","name":"string"}}],"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/primitives/types.ts","qualifiedName":"VectorIconProps"},"typeArguments":[{"type":"reference","name":"NameT","package":"expo-router","refersToTypeParameter":true}],"name":"VectorIconProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},"defaultValue":"NativeTabsTriggerVectorIcon"}]}}]},"defaultValue":"NativeTabTrigger"}]}}]},"defaultValue":"..."},{"name":"NativeTabTrigger","variant":"declaration","kind":32,"flags":{"isConst":true},"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The component used to customize the native tab options both in the _layout file and from the tab screen.\n\nWhen used in the _layout file, you need to provide a "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop.\nWhen used in the tab screen, the "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop takes no effect."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx app/home.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function HomeScreen() {\n return (\n \n \n Home\n \n This is home screen!\n \n );\n}\n```"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabTriggerProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"Badge","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerBadgeProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerBadge"},{"name":"Icon","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerIconProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerIcon"},{"name":"Label","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerLabelProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerLabel"},{"name":"VectorIcon","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Helper component for loading vector icons.\n\nPrefer using the "},{"kind":"code","text":"`md`"},{"kind":"text","text":" and "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" props on "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" rather than using this component directly.\nOnly use this component when you need to load a specific icon from a vector icon family."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Icon, VectorIcon } from 'expo-router';\nimport MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';\n\n} />\n```"}]}]},"typeParameters":[{"name":"NameT","variant":"typeParam","kind":131072,"flags":{"isConst":true},"type":{"type":"intrinsic","name":"string"}}],"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/primitives/types.ts","qualifiedName":"VectorIconProps"},"typeArguments":[{"type":"reference","name":"NameT","package":"expo-router","refersToTypeParameter":true}],"name":"VectorIconProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},"defaultValue":"NativeTabsTriggerVectorIcon"}]}}]},"defaultValue":"..."}],"packageName":"expo-router"} \ No newline at end of file diff --git a/docs/public/static/data/v56.0.0/expo-router/native-tabs.json b/docs/public/static/data/v56.0.0/expo-router/native-tabs.json index 06a48ca745dafd..2063d4fde95765 100644 --- a/docs/public/static/data/v56.0.0/expo-router/native-tabs.json +++ b/docs/public/static/data/v56.0.0/expo-router/native-tabs.json @@ -1 +1 @@ -{"schemaVersion":"2.0","name":"expo-router/native-tabs","variant":"project","kind":1,"children":[{"name":"DrawableIcon","variant":"declaration","kind":256,"children":[{"name":"drawable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the drawable resource to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}}]},{"name":"MaterialIcon","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Material icon name for Android native tabs."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"md","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Material icon glyph name. See the [Material icons for the complete catalog](https://fonts.google.com/icons)."}]},"type":{"type":"union","types":[{"type":"literal","value":"function"},{"type":"literal","value":"search"},{"type":"literal","value":"repeat"},{"type":"literal","value":"anchor"},{"type":"literal","value":"link"},{"type":"literal","value":"key"},{"type":"literal","value":"history"},{"type":"literal","value":"join"},{"type":"literal","value":"shift"},{"type":"literal","value":"sort"},{"type":"literal","value":"map"},{"type":"literal","value":"filter"},{"type":"literal","value":"source"},{"type":"literal","value":"target"},{"type":"literal","value":"navigation"},{"type":"literal","value":"route"},{"type":"literal","value":"article"},{"type":"literal","value":"code"},{"type":"literal","value":"details"},{"type":"literal","value":"html"},{"type":"literal","value":"iframe"},{"type":"literal","value":"input"},{"type":"literal","value":"label"},{"type":"literal","value":"menu"},{"type":"literal","value":"output"},{"type":"literal","value":"script"},{"type":"literal","value":"select"},{"type":"literal","value":"style"},{"type":"literal","value":"table"},{"type":"literal","value":"title"},{"type":"literal","value":"circle"},{"type":"literal","value":"image"},{"type":"literal","value":"pattern"},{"type":"literal","value":"polyline"},{"type":"literal","value":"stop"},{"type":"literal","value":"switch"},{"type":"literal","value":"event"},{"type":"literal","value":"create"},{"type":"literal","value":"stack"},{"type":"literal","value":"segment"},{"type":"literal","value":"groups"},{"type":"literal","value":"group"},{"type":"literal","value":"router"},{"type":"literal","value":"merge"},{"type":"literal","value":"call"},{"type":"literal","value":"tab"},{"type":"literal","value":"ios"},{"type":"literal","value":"android"},{"type":"literal","value":"web"},{"type":"literal","value":"cancel"},{"type":"literal","value":"close"},{"type":"literal","value":"error"},{"type":"literal","value":"pause"},{"type":"literal","value":"resize"},{"type":"literal","value":"message"},{"type":"literal","value":"storage"},{"type":"literal","value":"accessible"},{"type":"literal","value":"colors"},{"type":"literal","value":"email"},{"type":"literal","value":"radio"},{"type":"literal","value":"timer"},{"type":"literal","value":"list"},{"type":"literal","value":"toolbar"},{"type":"literal","value":"feed"},{"type":"literal","value":"note"},{"type":"literal","value":"tooltip"},{"type":"literal","value":"light"},{"type":"literal","value":"uppercase"},{"type":"literal","value":"lowercase"},{"type":"literal","value":"difference"},{"type":"literal","value":"scale"},{"type":"literal","value":"done"},{"type":"literal","value":"opacity"},{"type":"literal","value":"elevation"},{"type":"literal","value":"visibility"},{"type":"literal","value":"height"},{"type":"literal","value":"margin"},{"type":"literal","value":"padding"},{"type":"literal","value":"start"},{"type":"literal","value":"transform"},{"type":"literal","value":"description"},{"type":"literal","value":"contrast"},{"type":"literal","value":"clear"},{"type":"literal","value":"translate"},{"type":"literal","value":"animation"},{"type":"literal","value":"phone"},{"type":"literal","value":"send"},{"type":"literal","value":"flip"},{"type":"literal","value":"expand"},{"type":"literal","value":"window"},{"type":"literal","value":"speed"},{"type":"literal","value":"badge"},{"type":"literal","value":"warning"},{"type":"literal","value":"toast"},{"type":"literal","value":"api"},{"type":"literal","value":"sync"},{"type":"literal","value":"host"},{"type":"literal","value":"portrait"},{"type":"literal","value":"landscape"},{"type":"literal","value":"alarm"},{"type":"literal","value":"barcode"},{"type":"literal","value":"bolt"},{"type":"literal","value":"book"},{"type":"literal","value":"bookmark"},{"type":"literal","value":"camera"},{"type":"literal","value":"cloud"},{"type":"literal","value":"crop"},{"type":"literal","value":"eject"},{"type":"literal","value":"equal"},{"type":"literal","value":"eyeglasses"},{"type":"literal","value":"flag"},{"type":"literal","value":"flowchart"},{"type":"literal","value":"folder"},{"type":"literal","value":"forward"},{"type":"literal","value":"globe"},{"type":"literal","value":"headphones"},{"type":"literal","value":"hexagon"},{"type":"literal","value":"hourglass"},{"type":"literal","value":"house"},{"type":"literal","value":"info"},{"type":"literal","value":"keyboard"},{"type":"literal","value":"lightbulb"},{"type":"literal","value":"lock"},{"type":"literal","value":"mic"},{"type":"literal","value":"percent"},{"type":"literal","value":"person"},{"type":"literal","value":"photo"},{"type":"literal","value":"pin"},{"type":"literal","value":"power"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"shield"},{"type":"literal","value":"shuffle"},{"type":"literal","value":"signature"},{"type":"literal","value":"speaker"},{"type":"literal","value":"square"},{"type":"literal","value":"star"},{"type":"literal","value":"tag"},{"type":"literal","value":"thermometer"},{"type":"literal","value":"timelapse"},{"type":"literal","value":"tornado"},{"type":"literal","value":"tv"},{"type":"literal","value":"umbrella"},{"type":"literal","value":"wifi"},{"type":"literal","value":"abc"},{"type":"literal","value":"crown"},{"type":"literal","value":"diamond"},{"type":"literal","value":"loupe"},{"type":"literal","value":"mail"},{"type":"literal","value":"newspaper"},{"type":"literal","value":"pip"},{"type":"literal","value":"scanner"},{"type":"literal","value":"shadow"},{"type":"literal","value":"stethoscope"},{"type":"literal","value":"terminal"},{"type":"literal","value":"tram"},{"type":"literal","value":"asterisk"},{"type":"literal","value":"checklist"},{"type":"literal","value":"earbuds"},{"type":"literal","value":"pentagon"},{"type":"literal","value":"scooter"},{"type":"literal","value":"backpack"},{"type":"literal","value":"bathtub"},{"type":"literal","value":"chair"},{"type":"literal","value":"dishwasher"},{"type":"literal","value":"fireplace"},{"type":"literal","value":"microwave"},{"type":"literal","value":"oven"},{"type":"literal","value":"pill"},{"type":"literal","value":"shower"},{"type":"literal","value":"sprinkler"},{"type":"literal","value":"stairs"},{"type":"literal","value":"syringe"},{"type":"literal","value":"trophy"},{"type":"literal","value":"sos"},{"type":"literal","value":"stroller"},{"type":"literal","value":"accessibility"},{"type":"literal","value":"bubble"},{"type":"literal","value":"smartphone"},{"type":"literal","value":"storefront"},{"type":"literal","value":"drone"},{"type":"literal","value":"headset"},{"type":"literal","value":"moped"},{"type":"literal","value":"motorcycle"},{"type":"literal","value":"numbers"},{"type":"literal","value":"receipt"},{"type":"literal","value":"palette"},{"type":"literal","value":"download"},{"type":"literal","value":"security"},{"type":"literal","value":"hide"},{"type":"literal","value":"step"},{"type":"literal","value":"move"},{"type":"literal","value":"scene"},{"type":"literal","value":"bookmarks"},{"type":"literal","value":"contacts"},{"type":"literal","value":"more"},{"type":"literal","value":"tabs"},{"type":"literal","value":"123"},{"type":"literal","value":"360"},{"type":"literal","value":"10k"},{"type":"literal","value":"10mp"},{"type":"literal","value":"11mp"},{"type":"literal","value":"12mp"},{"type":"literal","value":"13mp"},{"type":"literal","value":"14mp"},{"type":"literal","value":"15mp"},{"type":"literal","value":"16mp"},{"type":"literal","value":"17mp"},{"type":"literal","value":"18_up_rating"},{"type":"literal","value":"18mp"},{"type":"literal","value":"19mp"},{"type":"literal","value":"1k"},{"type":"literal","value":"1k_plus"},{"type":"literal","value":"1x_mobiledata"},{"type":"literal","value":"1x_mobiledata_badge"},{"type":"literal","value":"20mp"},{"type":"literal","value":"21mp"},{"type":"literal","value":"22mp"},{"type":"literal","value":"23mp"},{"type":"literal","value":"24fps_select"},{"type":"literal","value":"24mp"},{"type":"literal","value":"2d"},{"type":"literal","value":"2k"},{"type":"literal","value":"2k_plus"},{"type":"literal","value":"2mp"},{"type":"literal","value":"30fps"},{"type":"literal","value":"30fps_select"},{"type":"literal","value":"3d"},{"type":"literal","value":"3d_rotation"},{"type":"literal","value":"3g_mobiledata"},{"type":"literal","value":"3g_mobiledata_badge"},{"type":"literal","value":"3k"},{"type":"literal","value":"3k_plus"},{"type":"literal","value":"3mp"},{"type":"literal","value":"3p"},{"type":"literal","value":"4g_mobiledata"},{"type":"literal","value":"4g_mobiledata_badge"},{"type":"literal","value":"4g_plus_mobiledata"},{"type":"literal","value":"4k"},{"type":"literal","value":"4k_plus"},{"type":"literal","value":"4mp"},{"type":"literal","value":"50mp"},{"type":"literal","value":"5g"},{"type":"literal","value":"5g_mobiledata_badge"},{"type":"literal","value":"5k"},{"type":"literal","value":"5k_plus"},{"type":"literal","value":"5mp"},{"type":"literal","value":"60fps"},{"type":"literal","value":"60fps_select"},{"type":"literal","value":"6_ft_apart"},{"type":"literal","value":"6k"},{"type":"literal","value":"6k_plus"},{"type":"literal","value":"6mp"},{"type":"literal","value":"7k"},{"type":"literal","value":"7k_plus"},{"type":"literal","value":"7mp"},{"type":"literal","value":"8k"},{"type":"literal","value":"8k_plus"},{"type":"literal","value":"8mp"},{"type":"literal","value":"9k"},{"type":"literal","value":"9k_plus"},{"type":"literal","value":"9mp"},{"type":"literal","value":"ac_unit"},{"type":"literal","value":"access_alarm"},{"type":"literal","value":"access_alarms"},{"type":"literal","value":"access_time"},{"type":"literal","value":"access_time_filled"},{"type":"literal","value":"accessibility_new"},{"type":"literal","value":"accessible_forward"},{"type":"literal","value":"accessible_menu"},{"type":"literal","value":"account_balance"},{"type":"literal","value":"account_balance_wallet"},{"type":"literal","value":"account_box"},{"type":"literal","value":"account_child"},{"type":"literal","value":"account_child_invert"},{"type":"literal","value":"account_circle"},{"type":"literal","value":"account_circle_off"},{"type":"literal","value":"account_tree"},{"type":"literal","value":"action_key"},{"type":"literal","value":"activity_zone"},{"type":"literal","value":"acupuncture"},{"type":"literal","value":"acute"},{"type":"literal","value":"ad"},{"type":"literal","value":"ad_group"},{"type":"literal","value":"ad_group_off"},{"type":"literal","value":"ad_off"},{"type":"literal","value":"ad_units"},{"type":"literal","value":"adaptive_audio_mic"},{"type":"literal","value":"adaptive_audio_mic_off"},{"type":"literal","value":"adb"},{"type":"literal","value":"add"},{"type":"literal","value":"add_2"},{"type":"literal","value":"add_a_photo"},{"type":"literal","value":"add_ad"},{"type":"literal","value":"add_alarm"},{"type":"literal","value":"add_alert"},{"type":"literal","value":"add_box"},{"type":"literal","value":"add_business"},{"type":"literal","value":"add_call"},{"type":"literal","value":"add_card"},{"type":"literal","value":"add_chart"},{"type":"literal","value":"add_circle"},{"type":"literal","value":"add_circle_outline"},{"type":"literal","value":"add_column_left"},{"type":"literal","value":"add_column_right"},{"type":"literal","value":"add_comment"},{"type":"literal","value":"add_diamond"},{"type":"literal","value":"add_home"},{"type":"literal","value":"add_home_work"},{"type":"literal","value":"add_ic_call"},{"type":"literal","value":"add_link"},{"type":"literal","value":"add_location"},{"type":"literal","value":"add_location_alt"},{"type":"literal","value":"add_moderator"},{"type":"literal","value":"add_notes"},{"type":"literal","value":"add_photo_alternate"},{"type":"literal","value":"add_reaction"},{"type":"literal","value":"add_road"},{"type":"literal","value":"add_row_above"},{"type":"literal","value":"add_row_below"},{"type":"literal","value":"add_shopping_cart"},{"type":"literal","value":"add_task"},{"type":"literal","value":"add_to_drive"},{"type":"literal","value":"add_to_home_screen"},{"type":"literal","value":"add_to_photos"},{"type":"literal","value":"add_to_queue"},{"type":"literal","value":"add_triangle"},{"type":"literal","value":"addchart"},{"type":"literal","value":"adf_scanner"},{"type":"literal","value":"adjust"},{"type":"literal","value":"admin_meds"},{"type":"literal","value":"admin_panel_settings"},{"type":"literal","value":"ads_click"},{"type":"literal","value":"agender"},{"type":"literal","value":"agriculture"},{"type":"literal","value":"air"},{"type":"literal","value":"air_freshener"},{"type":"literal","value":"air_purifier"},{"type":"literal","value":"air_purifier_gen"},{"type":"literal","value":"airline_seat_flat"},{"type":"literal","value":"airline_seat_flat_angled"},{"type":"literal","value":"airline_seat_individual_suite"},{"type":"literal","value":"airline_seat_legroom_extra"},{"type":"literal","value":"airline_seat_legroom_normal"},{"type":"literal","value":"airline_seat_legroom_reduced"},{"type":"literal","value":"airline_seat_recline_extra"},{"type":"literal","value":"airline_seat_recline_normal"},{"type":"literal","value":"airline_stops"},{"type":"literal","value":"airlines"},{"type":"literal","value":"airplane_ticket"},{"type":"literal","value":"airplanemode_active"},{"type":"literal","value":"airplanemode_inactive"},{"type":"literal","value":"airplay"},{"type":"literal","value":"airport_shuttle"},{"type":"literal","value":"airwave"},{"type":"literal","value":"alarm_add"},{"type":"literal","value":"alarm_off"},{"type":"literal","value":"alarm_on"},{"type":"literal","value":"alarm_pause"},{"type":"literal","value":"alarm_smart_wake"},{"type":"literal","value":"album"},{"type":"literal","value":"align_center"},{"type":"literal","value":"align_end"},{"type":"literal","value":"align_flex_center"},{"type":"literal","value":"align_flex_end"},{"type":"literal","value":"align_flex_start"},{"type":"literal","value":"align_horizontal_center"},{"type":"literal","value":"align_horizontal_left"},{"type":"literal","value":"align_horizontal_right"},{"type":"literal","value":"align_items_stretch"},{"type":"literal","value":"align_justify_center"},{"type":"literal","value":"align_justify_flex_end"},{"type":"literal","value":"align_justify_flex_start"},{"type":"literal","value":"align_justify_space_around"},{"type":"literal","value":"align_justify_space_between"},{"type":"literal","value":"align_justify_space_even"},{"type":"literal","value":"align_justify_stretch"},{"type":"literal","value":"align_self_stretch"},{"type":"literal","value":"align_space_around"},{"type":"literal","value":"align_space_between"},{"type":"literal","value":"align_space_even"},{"type":"literal","value":"align_start"},{"type":"literal","value":"align_stretch"},{"type":"literal","value":"align_vertical_bottom"},{"type":"literal","value":"align_vertical_center"},{"type":"literal","value":"align_vertical_top"},{"type":"literal","value":"all_inbox"},{"type":"literal","value":"all_inclusive"},{"type":"literal","value":"all_match"},{"type":"literal","value":"all_out"},{"type":"literal","value":"allergies"},{"type":"literal","value":"allergy"},{"type":"literal","value":"alt_route"},{"type":"literal","value":"alternate_email"},{"type":"literal","value":"altitude"},{"type":"literal","value":"ambulance"},{"type":"literal","value":"amend"},{"type":"literal","value":"amp_stories"},{"type":"literal","value":"analytics"},{"type":"literal","value":"android_cell_4_bar"},{"type":"literal","value":"android_cell_4_bar_alert"},{"type":"literal","value":"android_cell_4_bar_off"},{"type":"literal","value":"android_cell_4_bar_plus"},{"type":"literal","value":"android_cell_5_bar"},{"type":"literal","value":"android_cell_5_bar_alert"},{"type":"literal","value":"android_cell_5_bar_off"},{"type":"literal","value":"android_cell_5_bar_plus"},{"type":"literal","value":"android_cell_dual_4_bar"},{"type":"literal","value":"android_cell_dual_4_bar_alert"},{"type":"literal","value":"android_cell_dual_4_bar_plus"},{"type":"literal","value":"android_cell_dual_5_bar"},{"type":"literal","value":"android_cell_dual_5_bar_alert"},{"type":"literal","value":"android_cell_dual_5_bar_plus"},{"type":"literal","value":"android_wifi_3_bar"},{"type":"literal","value":"android_wifi_3_bar_alert"},{"type":"literal","value":"android_wifi_3_bar_lock"},{"type":"literal","value":"android_wifi_3_bar_off"},{"type":"literal","value":"android_wifi_3_bar_plus"},{"type":"literal","value":"android_wifi_3_bar_question"},{"type":"literal","value":"android_wifi_4_bar"},{"type":"literal","value":"android_wifi_4_bar_alert"},{"type":"literal","value":"android_wifi_4_bar_lock"},{"type":"literal","value":"android_wifi_4_bar_off"},{"type":"literal","value":"android_wifi_4_bar_plus"},{"type":"literal","value":"android_wifi_4_bar_question"},{"type":"literal","value":"animated_images"},{"type":"literal","value":"announcement"},{"type":"literal","value":"aod"},{"type":"literal","value":"aod_tablet"},{"type":"literal","value":"aod_watch"},{"type":"literal","value":"apartment"},{"type":"literal","value":"apk_document"},{"type":"literal","value":"apk_install"},{"type":"literal","value":"app_badging"},{"type":"literal","value":"app_blocking"},{"type":"literal","value":"app_registration"},{"type":"literal","value":"app_settings_alt"},{"type":"literal","value":"app_shortcut"},{"type":"literal","value":"apparel"},{"type":"literal","value":"approval"},{"type":"literal","value":"approval_delegation"},{"type":"literal","value":"approval_delegation_off"},{"type":"literal","value":"apps"},{"type":"literal","value":"apps_outage"},{"type":"literal","value":"aq"},{"type":"literal","value":"aq_indoor"},{"type":"literal","value":"ar_on_you"},{"type":"literal","value":"ar_stickers"},{"type":"literal","value":"architecture"},{"type":"literal","value":"archive"},{"type":"literal","value":"area_chart"},{"type":"literal","value":"arming_countdown"},{"type":"literal","value":"arrow_and_edge"},{"type":"literal","value":"arrow_back"},{"type":"literal","value":"arrow_back_2"},{"type":"literal","value":"arrow_back_ios"},{"type":"literal","value":"arrow_back_ios_new"},{"type":"literal","value":"arrow_circle_down"},{"type":"literal","value":"arrow_circle_left"},{"type":"literal","value":"arrow_circle_right"},{"type":"literal","value":"arrow_circle_up"},{"type":"literal","value":"arrow_cool_down"},{"type":"literal","value":"arrow_downward"},{"type":"literal","value":"arrow_downward_alt"},{"type":"literal","value":"arrow_drop_down"},{"type":"literal","value":"arrow_drop_down_circle"},{"type":"literal","value":"arrow_drop_up"},{"type":"literal","value":"arrow_forward"},{"type":"literal","value":"arrow_forward_ios"},{"type":"literal","value":"arrow_insert"},{"type":"literal","value":"arrow_left"},{"type":"literal","value":"arrow_left_alt"},{"type":"literal","value":"arrow_menu_close"},{"type":"literal","value":"arrow_menu_open"},{"type":"literal","value":"arrow_or_edge"},{"type":"literal","value":"arrow_outward"},{"type":"literal","value":"arrow_range"},{"type":"literal","value":"arrow_right"},{"type":"literal","value":"arrow_right_alt"},{"type":"literal","value":"arrow_selector_tool"},{"type":"literal","value":"arrow_shape_up"},{"type":"literal","value":"arrow_shape_up_stack"},{"type":"literal","value":"arrow_shape_up_stack_2"},{"type":"literal","value":"arrow_split"},{"type":"literal","value":"arrow_top_left"},{"type":"literal","value":"arrow_top_right"},{"type":"literal","value":"arrow_upload_progress"},{"type":"literal","value":"arrow_upload_ready"},{"type":"literal","value":"arrow_upward"},{"type":"literal","value":"arrow_upward_alt"},{"type":"literal","value":"arrow_warm_up"},{"type":"literal","value":"arrows_input"},{"type":"literal","value":"arrows_more_down"},{"type":"literal","value":"arrows_more_up"},{"type":"literal","value":"arrows_output"},{"type":"literal","value":"arrows_outward"},{"type":"literal","value":"art_track"},{"type":"literal","value":"article_person"},{"type":"literal","value":"article_shortcut"},{"type":"literal","value":"artist"},{"type":"literal","value":"aspect_ratio"},{"type":"literal","value":"assessment"},{"type":"literal","value":"assignment"},{"type":"literal","value":"assignment_add"},{"type":"literal","value":"assignment_ind"},{"type":"literal","value":"assignment_late"},{"type":"literal","value":"assignment_return"},{"type":"literal","value":"assignment_returned"},{"type":"literal","value":"assignment_turned_in"},{"type":"literal","value":"assist_walker"},{"type":"literal","value":"assistant"},{"type":"literal","value":"assistant_device"},{"type":"literal","value":"assistant_direction"},{"type":"literal","value":"assistant_navigation"},{"type":"literal","value":"assistant_on_hub"},{"type":"literal","value":"assistant_photo"},{"type":"literal","value":"assured_workload"},{"type":"literal","value":"atm"},{"type":"literal","value":"atr"},{"type":"literal","value":"attach_email"},{"type":"literal","value":"attach_file"},{"type":"literal","value":"attach_file_add"},{"type":"literal","value":"attach_file_off"},{"type":"literal","value":"attach_money"},{"type":"literal","value":"attachment"},{"type":"literal","value":"attractions"},{"type":"literal","value":"attribution"},{"type":"literal","value":"audio_description"},{"type":"literal","value":"audio_file"},{"type":"literal","value":"audio_video_receiver"},{"type":"literal","value":"audiotrack"},{"type":"literal","value":"auto_awesome"},{"type":"literal","value":"auto_awesome_mosaic"},{"type":"literal","value":"auto_awesome_motion"},{"type":"literal","value":"auto_delete"},{"type":"literal","value":"auto_fix_high"},{"type":"literal","value":"auto_fix_normal"},{"type":"literal","value":"auto_fix_off"},{"type":"literal","value":"auto_graph"},{"type":"literal","value":"auto_mode"},{"type":"literal","value":"auto_read_pause"},{"type":"literal","value":"auto_read_play"},{"type":"literal","value":"auto_stories"},{"type":"literal","value":"auto_stories_off"},{"type":"literal","value":"auto_towing"},{"type":"literal","value":"auto_transmission"},{"type":"literal","value":"autofps_select"},{"type":"literal","value":"automation"},{"type":"literal","value":"autopause"},{"type":"literal","value":"autoplay"},{"type":"literal","value":"autorenew"},{"type":"literal","value":"autostop"},{"type":"literal","value":"av1"},{"type":"literal","value":"av_timer"},{"type":"literal","value":"avc"},{"type":"literal","value":"avg_pace"},{"type":"literal","value":"avg_time"},{"type":"literal","value":"award_meal"},{"type":"literal","value":"award_star"},{"type":"literal","value":"azm"},{"type":"literal","value":"baby_changing_station"},{"type":"literal","value":"back_hand"},{"type":"literal","value":"back_to_tab"},{"type":"literal","value":"background_dot_large"},{"type":"literal","value":"background_dot_small"},{"type":"literal","value":"background_grid_small"},{"type":"literal","value":"background_replace"},{"type":"literal","value":"backlight_high"},{"type":"literal","value":"backlight_high_off"},{"type":"literal","value":"backlight_low"},{"type":"literal","value":"backspace"},{"type":"literal","value":"backup"},{"type":"literal","value":"backup_table"},{"type":"literal","value":"badge_critical_battery"},{"type":"literal","value":"badminton"},{"type":"literal","value":"bakery_dining"},{"type":"literal","value":"balance"},{"type":"literal","value":"balcony"},{"type":"literal","value":"ballot"},{"type":"literal","value":"bar_chart"},{"type":"literal","value":"bar_chart_4_bars"},{"type":"literal","value":"bar_chart_off"},{"type":"literal","value":"barcode_reader"},{"type":"literal","value":"barcode_scanner"},{"type":"literal","value":"barefoot"},{"type":"literal","value":"batch_prediction"},{"type":"literal","value":"bath_bedrock"},{"type":"literal","value":"bath_outdoor"},{"type":"literal","value":"bath_private"},{"type":"literal","value":"bath_public_large"},{"type":"literal","value":"bath_soak"},{"type":"literal","value":"bathroom"},{"type":"literal","value":"battery_0_bar"},{"type":"literal","value":"battery_1_bar"},{"type":"literal","value":"battery_20"},{"type":"literal","value":"battery_2_bar"},{"type":"literal","value":"battery_30"},{"type":"literal","value":"battery_3_bar"},{"type":"literal","value":"battery_4_bar"},{"type":"literal","value":"battery_50"},{"type":"literal","value":"battery_5_bar"},{"type":"literal","value":"battery_60"},{"type":"literal","value":"battery_6_bar"},{"type":"literal","value":"battery_80"},{"type":"literal","value":"battery_90"},{"type":"literal","value":"battery_alert"},{"type":"literal","value":"battery_android_0"},{"type":"literal","value":"battery_android_1"},{"type":"literal","value":"battery_android_2"},{"type":"literal","value":"battery_android_3"},{"type":"literal","value":"battery_android_4"},{"type":"literal","value":"battery_android_5"},{"type":"literal","value":"battery_android_6"},{"type":"literal","value":"battery_android_alert"},{"type":"literal","value":"battery_android_bolt"},{"type":"literal","value":"battery_android_frame_1"},{"type":"literal","value":"battery_android_frame_2"},{"type":"literal","value":"battery_android_frame_3"},{"type":"literal","value":"battery_android_frame_4"},{"type":"literal","value":"battery_android_frame_5"},{"type":"literal","value":"battery_android_frame_6"},{"type":"literal","value":"battery_android_frame_alert"},{"type":"literal","value":"battery_android_frame_bolt"},{"type":"literal","value":"battery_android_frame_full"},{"type":"literal","value":"battery_android_frame_plus"},{"type":"literal","value":"battery_android_frame_question"},{"type":"literal","value":"battery_android_frame_share"},{"type":"literal","value":"battery_android_frame_shield"},{"type":"literal","value":"battery_android_full"},{"type":"literal","value":"battery_android_plus"},{"type":"literal","value":"battery_android_question"},{"type":"literal","value":"battery_android_share"},{"type":"literal","value":"battery_android_shield"},{"type":"literal","value":"battery_change"},{"type":"literal","value":"battery_charging_20"},{"type":"literal","value":"battery_charging_30"},{"type":"literal","value":"battery_charging_50"},{"type":"literal","value":"battery_charging_60"},{"type":"literal","value":"battery_charging_80"},{"type":"literal","value":"battery_charging_90"},{"type":"literal","value":"battery_charging_full"},{"type":"literal","value":"battery_error"},{"type":"literal","value":"battery_full"},{"type":"literal","value":"battery_full_alt"},{"type":"literal","value":"battery_horiz_000"},{"type":"literal","value":"battery_horiz_050"},{"type":"literal","value":"battery_horiz_075"},{"type":"literal","value":"battery_low"},{"type":"literal","value":"battery_plus"},{"type":"literal","value":"battery_profile"},{"type":"literal","value":"battery_saver"},{"type":"literal","value":"battery_share"},{"type":"literal","value":"battery_status_good"},{"type":"literal","value":"battery_std"},{"type":"literal","value":"battery_unknown"},{"type":"literal","value":"battery_very_low"},{"type":"literal","value":"beach_access"},{"type":"literal","value":"bed"},{"type":"literal","value":"bedroom_baby"},{"type":"literal","value":"bedroom_child"},{"type":"literal","value":"bedroom_parent"},{"type":"literal","value":"bedtime"},{"type":"literal","value":"bedtime_off"},{"type":"literal","value":"beenhere"},{"type":"literal","value":"beer_meal"},{"type":"literal","value":"bento"},{"type":"literal","value":"bia"},{"type":"literal","value":"bid_landscape"},{"type":"literal","value":"bid_landscape_disabled"},{"type":"literal","value":"bigtop_updates"},{"type":"literal","value":"bike_dock"},{"type":"literal","value":"bike_lane"},{"type":"literal","value":"bike_scooter"},{"type":"literal","value":"biotech"},{"type":"literal","value":"blanket"},{"type":"literal","value":"blender"},{"type":"literal","value":"blind"},{"type":"literal","value":"blinds"},{"type":"literal","value":"blinds_closed"},{"type":"literal","value":"block"},{"type":"literal","value":"block_flipped"},{"type":"literal","value":"blood_pressure"},{"type":"literal","value":"bloodtype"},{"type":"literal","value":"bluetooth"},{"type":"literal","value":"bluetooth_audio"},{"type":"literal","value":"bluetooth_connected"},{"type":"literal","value":"bluetooth_disabled"},{"type":"literal","value":"bluetooth_drive"},{"type":"literal","value":"bluetooth_searching"},{"type":"literal","value":"blur_circular"},{"type":"literal","value":"blur_linear"},{"type":"literal","value":"blur_medium"},{"type":"literal","value":"blur_off"},{"type":"literal","value":"blur_on"},{"type":"literal","value":"blur_short"},{"type":"literal","value":"boat_bus"},{"type":"literal","value":"boat_railway"},{"type":"literal","value":"body_fat"},{"type":"literal","value":"body_system"},{"type":"literal","value":"bomb"},{"type":"literal","value":"book_2"},{"type":"literal","value":"book_3"},{"type":"literal","value":"book_4"},{"type":"literal","value":"book_5"},{"type":"literal","value":"book_6"},{"type":"literal","value":"book_online"},{"type":"literal","value":"book_ribbon"},{"type":"literal","value":"bookmark_add"},{"type":"literal","value":"bookmark_added"},{"type":"literal","value":"bookmark_bag"},{"type":"literal","value":"bookmark_border"},{"type":"literal","value":"bookmark_check"},{"type":"literal","value":"bookmark_flag"},{"type":"literal","value":"bookmark_heart"},{"type":"literal","value":"bookmark_manager"},{"type":"literal","value":"bookmark_remove"},{"type":"literal","value":"bookmark_star"},{"type":"literal","value":"books_movies_and_music"},{"type":"literal","value":"border_all"},{"type":"literal","value":"border_bottom"},{"type":"literal","value":"border_clear"},{"type":"literal","value":"border_color"},{"type":"literal","value":"border_horizontal"},{"type":"literal","value":"border_inner"},{"type":"literal","value":"border_left"},{"type":"literal","value":"border_outer"},{"type":"literal","value":"border_right"},{"type":"literal","value":"border_style"},{"type":"literal","value":"border_top"},{"type":"literal","value":"border_vertical"},{"type":"literal","value":"borg"},{"type":"literal","value":"bottom_app_bar"},{"type":"literal","value":"bottom_drawer"},{"type":"literal","value":"bottom_navigation"},{"type":"literal","value":"bottom_panel_close"},{"type":"literal","value":"bottom_panel_open"},{"type":"literal","value":"bottom_right_click"},{"type":"literal","value":"bottom_sheets"},{"type":"literal","value":"box"},{"type":"literal","value":"box_add"},{"type":"literal","value":"box_edit"},{"type":"literal","value":"boy"},{"type":"literal","value":"brand_awareness"},{"type":"literal","value":"brand_family"},{"type":"literal","value":"branding_watermark"},{"type":"literal","value":"breakfast_dining"},{"type":"literal","value":"breaking_news"},{"type":"literal","value":"breaking_news_alt_1"},{"type":"literal","value":"breastfeeding"},{"type":"literal","value":"brick"},{"type":"literal","value":"briefcase_meal"},{"type":"literal","value":"brightness_1"},{"type":"literal","value":"brightness_2"},{"type":"literal","value":"brightness_3"},{"type":"literal","value":"brightness_4"},{"type":"literal","value":"brightness_5"},{"type":"literal","value":"brightness_6"},{"type":"literal","value":"brightness_7"},{"type":"literal","value":"brightness_alert"},{"type":"literal","value":"brightness_auto"},{"type":"literal","value":"brightness_empty"},{"type":"literal","value":"brightness_high"},{"type":"literal","value":"brightness_low"},{"type":"literal","value":"brightness_medium"},{"type":"literal","value":"bring_your_own_ip"},{"type":"literal","value":"broadcast_on_home"},{"type":"literal","value":"broadcast_on_personal"},{"type":"literal","value":"broken_image"},{"type":"literal","value":"browse"},{"type":"literal","value":"browse_activity"},{"type":"literal","value":"browse_gallery"},{"type":"literal","value":"browser_not_supported"},{"type":"literal","value":"browser_updated"},{"type":"literal","value":"brunch_dining"},{"type":"literal","value":"brush"},{"type":"literal","value":"bubble_chart"},{"type":"literal","value":"bubbles"},{"type":"literal","value":"bucket_check"},{"type":"literal","value":"bug_report"},{"type":"literal","value":"build"},{"type":"literal","value":"build_circle"},{"type":"literal","value":"bungalow"},{"type":"literal","value":"burst_mode"},{"type":"literal","value":"bus_alert"},{"type":"literal","value":"bus_railway"},{"type":"literal","value":"business"},{"type":"literal","value":"business_center"},{"type":"literal","value":"business_chip"},{"type":"literal","value":"business_messages"},{"type":"literal","value":"buttons_alt"},{"type":"literal","value":"cabin"},{"type":"literal","value":"cable"},{"type":"literal","value":"cable_car"},{"type":"literal","value":"cached"},{"type":"literal","value":"cadence"},{"type":"literal","value":"cake"},{"type":"literal","value":"cake_add"},{"type":"literal","value":"calculate"},{"type":"literal","value":"calendar_add_on"},{"type":"literal","value":"calendar_apps_script"},{"type":"literal","value":"calendar_check"},{"type":"literal","value":"calendar_clock"},{"type":"literal","value":"calendar_lock"},{"type":"literal","value":"calendar_meal"},{"type":"literal","value":"calendar_meal_2"},{"type":"literal","value":"calendar_month"},{"type":"literal","value":"calendar_today"},{"type":"literal","value":"calendar_view_day"},{"type":"literal","value":"calendar_view_month"},{"type":"literal","value":"calendar_view_week"},{"type":"literal","value":"call_end"},{"type":"literal","value":"call_log"},{"type":"literal","value":"call_made"},{"type":"literal","value":"call_merge"},{"type":"literal","value":"call_missed"},{"type":"literal","value":"call_missed_outgoing"},{"type":"literal","value":"call_quality"},{"type":"literal","value":"call_received"},{"type":"literal","value":"call_split"},{"type":"literal","value":"call_to_action"},{"type":"literal","value":"camera_alt"},{"type":"literal","value":"camera_enhance"},{"type":"literal","value":"camera_front"},{"type":"literal","value":"camera_indoor"},{"type":"literal","value":"camera_outdoor"},{"type":"literal","value":"camera_rear"},{"type":"literal","value":"camera_roll"},{"type":"literal","value":"camera_video"},{"type":"literal","value":"cameraswitch"},{"type":"literal","value":"campaign"},{"type":"literal","value":"camping"},{"type":"literal","value":"cancel_presentation"},{"type":"literal","value":"cancel_schedule_send"},{"type":"literal","value":"candle"},{"type":"literal","value":"candlestick_chart"},{"type":"literal","value":"cannabis"},{"type":"literal","value":"captive_portal"},{"type":"literal","value":"capture"},{"type":"literal","value":"car_crash"},{"type":"literal","value":"car_defrost_left"},{"type":"literal","value":"car_defrost_low_left"},{"type":"literal","value":"car_defrost_low_right"},{"type":"literal","value":"car_defrost_mid_left"},{"type":"literal","value":"car_defrost_mid_low_left"},{"type":"literal","value":"car_defrost_mid_low_right"},{"type":"literal","value":"car_defrost_mid_right"},{"type":"literal","value":"car_defrost_right"},{"type":"literal","value":"car_fan_low_left"},{"type":"literal","value":"car_fan_low_mid_left"},{"type":"literal","value":"car_fan_low_right"},{"type":"literal","value":"car_fan_mid_left"},{"type":"literal","value":"car_fan_mid_low_right"},{"type":"literal","value":"car_fan_mid_right"},{"type":"literal","value":"car_fan_recirculate"},{"type":"literal","value":"car_gear"},{"type":"literal","value":"car_lock"},{"type":"literal","value":"car_mirror_heat"},{"type":"literal","value":"car_rental"},{"type":"literal","value":"car_repair"},{"type":"literal","value":"car_tag"},{"type":"literal","value":"card_giftcard"},{"type":"literal","value":"card_membership"},{"type":"literal","value":"card_travel"},{"type":"literal","value":"cardio_load"},{"type":"literal","value":"cardiology"},{"type":"literal","value":"cards"},{"type":"literal","value":"cards_star"},{"type":"literal","value":"carpenter"},{"type":"literal","value":"carry_on_bag"},{"type":"literal","value":"carry_on_bag_checked"},{"type":"literal","value":"carry_on_bag_inactive"},{"type":"literal","value":"carry_on_bag_question"},{"type":"literal","value":"cases"},{"type":"literal","value":"casino"},{"type":"literal","value":"cast"},{"type":"literal","value":"cast_connected"},{"type":"literal","value":"cast_for_education"},{"type":"literal","value":"cast_pause"},{"type":"literal","value":"cast_warning"},{"type":"literal","value":"castle"},{"type":"literal","value":"catching_pokemon"},{"type":"literal","value":"category"},{"type":"literal","value":"category_search"},{"type":"literal","value":"celebration"},{"type":"literal","value":"cell_merge"},{"type":"literal","value":"cell_tower"},{"type":"literal","value":"cell_wifi"},{"type":"literal","value":"center_focus_strong"},{"type":"literal","value":"center_focus_weak"},{"type":"literal","value":"chair_alt"},{"type":"literal","value":"chair_counter"},{"type":"literal","value":"chair_fireplace"},{"type":"literal","value":"chair_umbrella"},{"type":"literal","value":"chalet"},{"type":"literal","value":"change_circle"},{"type":"literal","value":"change_history"},{"type":"literal","value":"charger"},{"type":"literal","value":"charging_station"},{"type":"literal","value":"chart_data"},{"type":"literal","value":"chat"},{"type":"literal","value":"chat_add_on"},{"type":"literal","value":"chat_apps_script"},{"type":"literal","value":"chat_bubble"},{"type":"literal","value":"chat_bubble_outline"},{"type":"literal","value":"chat_error"},{"type":"literal","value":"chat_info"},{"type":"literal","value":"chat_paste_go"},{"type":"literal","value":"chat_paste_go_2"},{"type":"literal","value":"check"},{"type":"literal","value":"check_box"},{"type":"literal","value":"check_box_outline_blank"},{"type":"literal","value":"check_circle"},{"type":"literal","value":"check_circle_outline"},{"type":"literal","value":"check_circle_unread"},{"type":"literal","value":"check_in_out"},{"type":"literal","value":"check_indeterminate_small"},{"type":"literal","value":"check_small"},{"type":"literal","value":"checkbook"},{"type":"literal","value":"checked_bag"},{"type":"literal","value":"checked_bag_question"},{"type":"literal","value":"checklist_rtl"},{"type":"literal","value":"checkroom"},{"type":"literal","value":"cheer"},{"type":"literal","value":"chef_hat"},{"type":"literal","value":"chess"},{"type":"literal","value":"chess_bishop"},{"type":"literal","value":"chess_bishop_2"},{"type":"literal","value":"chess_king"},{"type":"literal","value":"chess_king_2"},{"type":"literal","value":"chess_knight"},{"type":"literal","value":"chess_pawn"},{"type":"literal","value":"chess_pawn_2"},{"type":"literal","value":"chess_queen"},{"type":"literal","value":"chess_rook"},{"type":"literal","value":"chevron_backward"},{"type":"literal","value":"chevron_forward"},{"type":"literal","value":"chevron_left"},{"type":"literal","value":"chevron_right"},{"type":"literal","value":"child_care"},{"type":"literal","value":"child_friendly"},{"type":"literal","value":"child_hat"},{"type":"literal","value":"chip_extraction"},{"type":"literal","value":"chips"},{"type":"literal","value":"chrome_reader_mode"},{"type":"literal","value":"chromecast_2"},{"type":"literal","value":"chromecast_device"},{"type":"literal","value":"chronic"},{"type":"literal","value":"church"},{"type":"literal","value":"cinematic_blur"},{"type":"literal","value":"circle_notifications"},{"type":"literal","value":"circles"},{"type":"literal","value":"circles_ext"},{"type":"literal","value":"clarify"},{"type":"literal","value":"class"},{"type":"literal","value":"clean_hands"},{"type":"literal","value":"cleaning"},{"type":"literal","value":"cleaning_bucket"},{"type":"literal","value":"cleaning_services"},{"type":"literal","value":"clear_all"},{"type":"literal","value":"clear_day"},{"type":"literal","value":"climate_mini_split"},{"type":"literal","value":"clinical_notes"},{"type":"literal","value":"clock_arrow_down"},{"type":"literal","value":"clock_arrow_up"},{"type":"literal","value":"clock_loader_10"},{"type":"literal","value":"clock_loader_20"},{"type":"literal","value":"clock_loader_40"},{"type":"literal","value":"clock_loader_60"},{"type":"literal","value":"clock_loader_80"},{"type":"literal","value":"clock_loader_90"},{"type":"literal","value":"close_fullscreen"},{"type":"literal","value":"close_small"},{"type":"literal","value":"closed_caption"},{"type":"literal","value":"closed_caption_add"},{"type":"literal","value":"closed_caption_disabled"},{"type":"literal","value":"closed_caption_off"},{"type":"literal","value":"cloud_alert"},{"type":"literal","value":"cloud_circle"},{"type":"literal","value":"cloud_done"},{"type":"literal","value":"cloud_download"},{"type":"literal","value":"cloud_lock"},{"type":"literal","value":"cloud_off"},{"type":"literal","value":"cloud_queue"},{"type":"literal","value":"cloud_sync"},{"type":"literal","value":"cloud_upload"},{"type":"literal","value":"cloudy_snowing"},{"type":"literal","value":"co2"},{"type":"literal","value":"co_present"},{"type":"literal","value":"code_blocks"},{"type":"literal","value":"code_off"},{"type":"literal","value":"coffee"},{"type":"literal","value":"coffee_maker"},{"type":"literal","value":"cognition"},{"type":"literal","value":"cognition_2"},{"type":"literal","value":"collapse_all"},{"type":"literal","value":"collapse_content"},{"type":"literal","value":"collections"},{"type":"literal","value":"collections_bookmark"},{"type":"literal","value":"color_lens"},{"type":"literal","value":"colorize"},{"type":"literal","value":"combine_columns"},{"type":"literal","value":"comedy_mask"},{"type":"literal","value":"comic_bubble"},{"type":"literal","value":"comment"},{"type":"literal","value":"comment_bank"},{"type":"literal","value":"comments_disabled"},{"type":"literal","value":"commit"},{"type":"literal","value":"communication"},{"type":"literal","value":"communities"},{"type":"literal","value":"commute"},{"type":"literal","value":"compare"},{"type":"literal","value":"compare_arrows"},{"type":"literal","value":"compass_calibration"},{"type":"literal","value":"component_exchange"},{"type":"literal","value":"compost"},{"type":"literal","value":"compress"},{"type":"literal","value":"computer"},{"type":"literal","value":"computer_arrow_up"},{"type":"literal","value":"computer_cancel"},{"type":"literal","value":"concierge"},{"type":"literal","value":"conditions"},{"type":"literal","value":"confirmation_number"},{"type":"literal","value":"congenital"},{"type":"literal","value":"connect_without_contact"},{"type":"literal","value":"connected_tv"},{"type":"literal","value":"connecting_airports"},{"type":"literal","value":"construction"},{"type":"literal","value":"contact_emergency"},{"type":"literal","value":"contact_mail"},{"type":"literal","value":"contact_page"},{"type":"literal","value":"contact_phone"},{"type":"literal","value":"contact_support"},{"type":"literal","value":"contactless"},{"type":"literal","value":"contactless_off"},{"type":"literal","value":"contacts_product"},{"type":"literal","value":"content_copy"},{"type":"literal","value":"content_cut"},{"type":"literal","value":"content_paste"},{"type":"literal","value":"content_paste_go"},{"type":"literal","value":"content_paste_off"},{"type":"literal","value":"content_paste_search"},{"type":"literal","value":"contextual_token"},{"type":"literal","value":"contextual_token_add"},{"type":"literal","value":"contract"},{"type":"literal","value":"contract_delete"},{"type":"literal","value":"contract_edit"},{"type":"literal","value":"contrast_circle"},{"type":"literal","value":"contrast_rtl_off"},{"type":"literal","value":"contrast_square"},{"type":"literal","value":"control_camera"},{"type":"literal","value":"control_point"},{"type":"literal","value":"control_point_duplicate"},{"type":"literal","value":"controller_gen"},{"type":"literal","value":"conversation"},{"type":"literal","value":"conversion_path"},{"type":"literal","value":"conversion_path_off"},{"type":"literal","value":"convert_to_text"},{"type":"literal","value":"conveyor_belt"},{"type":"literal","value":"cookie"},{"type":"literal","value":"cookie_off"},{"type":"literal","value":"cooking"},{"type":"literal","value":"cool_to_dry"},{"type":"literal","value":"copy_all"},{"type":"literal","value":"copyright"},{"type":"literal","value":"coronavirus"},{"type":"literal","value":"corporate_fare"},{"type":"literal","value":"cottage"},{"type":"literal","value":"counter_0"},{"type":"literal","value":"counter_1"},{"type":"literal","value":"counter_2"},{"type":"literal","value":"counter_3"},{"type":"literal","value":"counter_4"},{"type":"literal","value":"counter_5"},{"type":"literal","value":"counter_6"},{"type":"literal","value":"counter_7"},{"type":"literal","value":"counter_8"},{"type":"literal","value":"counter_9"},{"type":"literal","value":"countertops"},{"type":"literal","value":"create_new_folder"},{"type":"literal","value":"credit_card"},{"type":"literal","value":"credit_card_clock"},{"type":"literal","value":"credit_card_gear"},{"type":"literal","value":"credit_card_heart"},{"type":"literal","value":"credit_card_off"},{"type":"literal","value":"credit_score"},{"type":"literal","value":"crib"},{"type":"literal","value":"crisis_alert"},{"type":"literal","value":"crop_16_9"},{"type":"literal","value":"crop_3_2"},{"type":"literal","value":"crop_5_4"},{"type":"literal","value":"crop_7_5"},{"type":"literal","value":"crop_9_16"},{"type":"literal","value":"crop_din"},{"type":"literal","value":"crop_free"},{"type":"literal","value":"crop_landscape"},{"type":"literal","value":"crop_original"},{"type":"literal","value":"crop_portrait"},{"type":"literal","value":"crop_rotate"},{"type":"literal","value":"crop_square"},{"type":"literal","value":"crossword"},{"type":"literal","value":"crowdsource"},{"type":"literal","value":"cruelty_free"},{"type":"literal","value":"css"},{"type":"literal","value":"csv"},{"type":"literal","value":"currency_bitcoin"},{"type":"literal","value":"currency_exchange"},{"type":"literal","value":"currency_franc"},{"type":"literal","value":"currency_lira"},{"type":"literal","value":"currency_pound"},{"type":"literal","value":"currency_ruble"},{"type":"literal","value":"currency_rupee"},{"type":"literal","value":"currency_rupee_circle"},{"type":"literal","value":"currency_yen"},{"type":"literal","value":"currency_yuan"},{"type":"literal","value":"curtains"},{"type":"literal","value":"curtains_closed"},{"type":"literal","value":"custom_typography"},{"type":"literal","value":"cycle"},{"type":"literal","value":"cyclone"},{"type":"literal","value":"dangerous"},{"type":"literal","value":"dark_mode"},{"type":"literal","value":"dashboard"},{"type":"literal","value":"dashboard_2"},{"type":"literal","value":"dashboard_customize"},{"type":"literal","value":"data_alert"},{"type":"literal","value":"data_array"},{"type":"literal","value":"data_check"},{"type":"literal","value":"data_exploration"},{"type":"literal","value":"data_info_alert"},{"type":"literal","value":"data_loss_prevention"},{"type":"literal","value":"data_object"},{"type":"literal","value":"data_saver_off"},{"type":"literal","value":"data_saver_on"},{"type":"literal","value":"data_table"},{"type":"literal","value":"data_thresholding"},{"type":"literal","value":"data_usage"},{"type":"literal","value":"database"},{"type":"literal","value":"database_off"},{"type":"literal","value":"database_search"},{"type":"literal","value":"database_upload"},{"type":"literal","value":"dataset"},{"type":"literal","value":"dataset_linked"},{"type":"literal","value":"date_range"},{"type":"literal","value":"deblur"},{"type":"literal","value":"deceased"},{"type":"literal","value":"decimal_decrease"},{"type":"literal","value":"decimal_increase"},{"type":"literal","value":"deck"},{"type":"literal","value":"dehaze"},{"type":"literal","value":"delete"},{"type":"literal","value":"delete_forever"},{"type":"literal","value":"delete_history"},{"type":"literal","value":"delete_outline"},{"type":"literal","value":"delete_sweep"},{"type":"literal","value":"delivery_dining"},{"type":"literal","value":"delivery_truck_bolt"},{"type":"literal","value":"delivery_truck_speed"},{"type":"literal","value":"demography"},{"type":"literal","value":"density_large"},{"type":"literal","value":"density_medium"},{"type":"literal","value":"density_small"},{"type":"literal","value":"dentistry"},{"type":"literal","value":"departure_board"},{"type":"literal","value":"deployed_code"},{"type":"literal","value":"deployed_code_account"},{"type":"literal","value":"deployed_code_alert"},{"type":"literal","value":"deployed_code_history"},{"type":"literal","value":"deployed_code_update"},{"type":"literal","value":"dermatology"},{"type":"literal","value":"deselect"},{"type":"literal","value":"design_services"},{"type":"literal","value":"desk"},{"type":"literal","value":"deskphone"},{"type":"literal","value":"desktop_access_disabled"},{"type":"literal","value":"desktop_cloud"},{"type":"literal","value":"desktop_cloud_stack"},{"type":"literal","value":"desktop_landscape"},{"type":"literal","value":"desktop_landscape_add"},{"type":"literal","value":"desktop_mac"},{"type":"literal","value":"desktop_portrait"},{"type":"literal","value":"desktop_windows"},{"type":"literal","value":"destruction"},{"type":"literal","value":"detection_and_zone"},{"type":"literal","value":"detector"},{"type":"literal","value":"detector_alarm"},{"type":"literal","value":"detector_battery"},{"type":"literal","value":"detector_co"},{"type":"literal","value":"detector_offline"},{"type":"literal","value":"detector_smoke"},{"type":"literal","value":"detector_status"},{"type":"literal","value":"developer_board"},{"type":"literal","value":"developer_board_off"},{"type":"literal","value":"developer_guide"},{"type":"literal","value":"developer_mode"},{"type":"literal","value":"developer_mode_tv"},{"type":"literal","value":"device_band"},{"type":"literal","value":"device_hub"},{"type":"literal","value":"device_thermostat"},{"type":"literal","value":"device_unknown"},{"type":"literal","value":"devices"},{"type":"literal","value":"devices_fold"},{"type":"literal","value":"devices_fold_2"},{"type":"literal","value":"devices_off"},{"type":"literal","value":"devices_other"},{"type":"literal","value":"devices_wearables"},{"type":"literal","value":"dew_point"},{"type":"literal","value":"diagnosis"},{"type":"literal","value":"diagonal_line"},{"type":"literal","value":"dialer_sip"},{"type":"literal","value":"dialogs"},{"type":"literal","value":"dialpad"},{"type":"literal","value":"diamond_shine"},{"type":"literal","value":"dictionary"},{"type":"literal","value":"digital_out_of_home"},{"type":"literal","value":"digital_wellbeing"},{"type":"literal","value":"dine_heart"},{"type":"literal","value":"dine_in"},{"type":"literal","value":"dine_lamp"},{"type":"literal","value":"dining"},{"type":"literal","value":"dinner_dining"},{"type":"literal","value":"directions"},{"type":"literal","value":"directions_alt"},{"type":"literal","value":"directions_alt_off"},{"type":"literal","value":"directions_bike"},{"type":"literal","value":"directions_boat"},{"type":"literal","value":"directions_boat_filled"},{"type":"literal","value":"directions_bus"},{"type":"literal","value":"directions_bus_filled"},{"type":"literal","value":"directions_car"},{"type":"literal","value":"directions_car_filled"},{"type":"literal","value":"directions_off"},{"type":"literal","value":"directions_railway"},{"type":"literal","value":"directions_railway_2"},{"type":"literal","value":"directions_railway_filled"},{"type":"literal","value":"directions_run"},{"type":"literal","value":"directions_subway"},{"type":"literal","value":"directions_subway_filled"},{"type":"literal","value":"directions_transit"},{"type":"literal","value":"directions_transit_filled"},{"type":"literal","value":"directions_walk"},{"type":"literal","value":"directory_sync"},{"type":"literal","value":"dirty_lens"},{"type":"literal","value":"disabled_by_default"},{"type":"literal","value":"disabled_visible"},{"type":"literal","value":"disc_full"},{"type":"literal","value":"discount"},{"type":"literal","value":"discover_tune"},{"type":"literal","value":"dishwasher_gen"},{"type":"literal","value":"display_external_input"},{"type":"literal","value":"display_settings"},{"type":"literal","value":"distance"},{"type":"literal","value":"diversity_1"},{"type":"literal","value":"diversity_2"},{"type":"literal","value":"diversity_3"},{"type":"literal","value":"diversity_4"},{"type":"literal","value":"dns"},{"type":"literal","value":"do_disturb"},{"type":"literal","value":"do_disturb_alt"},{"type":"literal","value":"do_disturb_off"},{"type":"literal","value":"do_disturb_on"},{"type":"literal","value":"do_not_disturb"},{"type":"literal","value":"do_not_disturb_alt"},{"type":"literal","value":"do_not_disturb_off"},{"type":"literal","value":"do_not_disturb_on"},{"type":"literal","value":"do_not_disturb_on_total_silence"},{"type":"literal","value":"do_not_step"},{"type":"literal","value":"do_not_touch"},{"type":"literal","value":"dock"},{"type":"literal","value":"dock_to_bottom"},{"type":"literal","value":"dock_to_left"},{"type":"literal","value":"dock_to_right"},{"type":"literal","value":"docs"},{"type":"literal","value":"docs_add_on"},{"type":"literal","value":"docs_apps_script"},{"type":"literal","value":"document_scanner"},{"type":"literal","value":"document_search"},{"type":"literal","value":"domain"},{"type":"literal","value":"domain_add"},{"type":"literal","value":"domain_disabled"},{"type":"literal","value":"domain_verification"},{"type":"literal","value":"domain_verification_off"},{"type":"literal","value":"domino_mask"},{"type":"literal","value":"done_all"},{"type":"literal","value":"done_outline"},{"type":"literal","value":"donut_large"},{"type":"literal","value":"donut_small"},{"type":"literal","value":"door_back"},{"type":"literal","value":"door_front"},{"type":"literal","value":"door_open"},{"type":"literal","value":"door_sensor"},{"type":"literal","value":"door_sliding"},{"type":"literal","value":"doorbell"},{"type":"literal","value":"doorbell_3p"},{"type":"literal","value":"doorbell_chime"},{"type":"literal","value":"double_arrow"},{"type":"literal","value":"downhill_skiing"},{"type":"literal","value":"download_2"},{"type":"literal","value":"download_done"},{"type":"literal","value":"download_for_offline"},{"type":"literal","value":"downloading"},{"type":"literal","value":"draft"},{"type":"literal","value":"draft_orders"},{"type":"literal","value":"drafts"},{"type":"literal","value":"drag_click"},{"type":"literal","value":"drag_handle"},{"type":"literal","value":"drag_indicator"},{"type":"literal","value":"drag_pan"},{"type":"literal","value":"draw"},{"type":"literal","value":"draw_abstract"},{"type":"literal","value":"draw_collage"},{"type":"literal","value":"dresser"},{"type":"literal","value":"drive_eta"},{"type":"literal","value":"drive_export"},{"type":"literal","value":"drive_file_move"},{"type":"literal","value":"drive_file_move_outline"},{"type":"literal","value":"drive_file_move_rtl"},{"type":"literal","value":"drive_file_rename_outline"},{"type":"literal","value":"drive_folder_upload"},{"type":"literal","value":"drone_2"},{"type":"literal","value":"dropdown"},{"type":"literal","value":"dropper_eye"},{"type":"literal","value":"dry"},{"type":"literal","value":"dry_cleaning"},{"type":"literal","value":"dual_screen"},{"type":"literal","value":"duo"},{"type":"literal","value":"dvr"},{"type":"literal","value":"dynamic_feed"},{"type":"literal","value":"dynamic_form"},{"type":"literal","value":"e911_avatar"},{"type":"literal","value":"e911_emergency"},{"type":"literal","value":"e_mobiledata"},{"type":"literal","value":"e_mobiledata_badge"},{"type":"literal","value":"ear_sound"},{"type":"literal","value":"earbud_case"},{"type":"literal","value":"earbud_left"},{"type":"literal","value":"earbud_right"},{"type":"literal","value":"earbuds_2"},{"type":"literal","value":"earbuds_battery"},{"type":"literal","value":"early_on"},{"type":"literal","value":"earthquake"},{"type":"literal","value":"east"},{"type":"literal","value":"ecg"},{"type":"literal","value":"ecg_heart"},{"type":"literal","value":"eco"},{"type":"literal","value":"eda"},{"type":"literal","value":"edgesensor_high"},{"type":"literal","value":"edgesensor_low"},{"type":"literal","value":"edit"},{"type":"literal","value":"edit_arrow_down"},{"type":"literal","value":"edit_arrow_up"},{"type":"literal","value":"edit_attributes"},{"type":"literal","value":"edit_audio"},{"type":"literal","value":"edit_calendar"},{"type":"literal","value":"edit_document"},{"type":"literal","value":"edit_location"},{"type":"literal","value":"edit_location_alt"},{"type":"literal","value":"edit_note"},{"type":"literal","value":"edit_notifications"},{"type":"literal","value":"edit_off"},{"type":"literal","value":"edit_road"},{"type":"literal","value":"edit_square"},{"type":"literal","value":"editor_choice"},{"type":"literal","value":"egg"},{"type":"literal","value":"egg_alt"},{"type":"literal","value":"elderly"},{"type":"literal","value":"elderly_woman"},{"type":"literal","value":"electric_bike"},{"type":"literal","value":"electric_bolt"},{"type":"literal","value":"electric_car"},{"type":"literal","value":"electric_meter"},{"type":"literal","value":"electric_moped"},{"type":"literal","value":"electric_rickshaw"},{"type":"literal","value":"electric_scooter"},{"type":"literal","value":"electrical_services"},{"type":"literal","value":"elevator"},{"type":"literal","value":"emergency"},{"type":"literal","value":"emergency_heat"},{"type":"literal","value":"emergency_heat_2"},{"type":"literal","value":"emergency_home"},{"type":"literal","value":"emergency_recording"},{"type":"literal","value":"emergency_share"},{"type":"literal","value":"emergency_share_off"},{"type":"literal","value":"emoji_emotions"},{"type":"literal","value":"emoji_events"},{"type":"literal","value":"emoji_food_beverage"},{"type":"literal","value":"emoji_language"},{"type":"literal","value":"emoji_nature"},{"type":"literal","value":"emoji_objects"},{"type":"literal","value":"emoji_people"},{"type":"literal","value":"emoji_symbols"},{"type":"literal","value":"emoji_transportation"},{"type":"literal","value":"emoticon"},{"type":"literal","value":"empty_dashboard"},{"type":"literal","value":"enable"},{"type":"literal","value":"encrypted"},{"type":"literal","value":"encrypted_add"},{"type":"literal","value":"encrypted_add_circle"},{"type":"literal","value":"encrypted_minus_circle"},{"type":"literal","value":"encrypted_off"},{"type":"literal","value":"endocrinology"},{"type":"literal","value":"energy"},{"type":"literal","value":"energy_program_saving"},{"type":"literal","value":"energy_program_time_used"},{"type":"literal","value":"energy_savings_leaf"},{"type":"literal","value":"engineering"},{"type":"literal","value":"enhanced_encryption"},{"type":"literal","value":"ent"},{"type":"literal","value":"enterprise"},{"type":"literal","value":"enterprise_off"},{"type":"literal","value":"equalizer"},{"type":"literal","value":"eraser_size_1"},{"type":"literal","value":"eraser_size_2"},{"type":"literal","value":"eraser_size_3"},{"type":"literal","value":"eraser_size_4"},{"type":"literal","value":"eraser_size_5"},{"type":"literal","value":"error_med"},{"type":"literal","value":"error_outline"},{"type":"literal","value":"escalator"},{"type":"literal","value":"escalator_warning"},{"type":"literal","value":"euro"},{"type":"literal","value":"euro_symbol"},{"type":"literal","value":"ev_mobiledata_badge"},{"type":"literal","value":"ev_shadow"},{"type":"literal","value":"ev_shadow_add"},{"type":"literal","value":"ev_shadow_minus"},{"type":"literal","value":"ev_station"},{"type":"literal","value":"event_available"},{"type":"literal","value":"event_busy"},{"type":"literal","value":"event_list"},{"type":"literal","value":"event_note"},{"type":"literal","value":"event_repeat"},{"type":"literal","value":"event_seat"},{"type":"literal","value":"event_upcoming"},{"type":"literal","value":"exclamation"},{"type":"literal","value":"exercise"},{"type":"literal","value":"exit_to_app"},{"type":"literal","value":"expand_all"},{"type":"literal","value":"expand_circle_down"},{"type":"literal","value":"expand_circle_right"},{"type":"literal","value":"expand_circle_up"},{"type":"literal","value":"expand_content"},{"type":"literal","value":"expand_less"},{"type":"literal","value":"expand_more"},{"type":"literal","value":"expansion_panels"},{"type":"literal","value":"experiment"},{"type":"literal","value":"explicit"},{"type":"literal","value":"explore"},{"type":"literal","value":"explore_nearby"},{"type":"literal","value":"explore_off"},{"type":"literal","value":"explosion"},{"type":"literal","value":"export_notes"},{"type":"literal","value":"exposure"},{"type":"literal","value":"exposure_neg_1"},{"type":"literal","value":"exposure_neg_2"},{"type":"literal","value":"exposure_plus_1"},{"type":"literal","value":"exposure_plus_2"},{"type":"literal","value":"exposure_zero"},{"type":"literal","value":"extension"},{"type":"literal","value":"extension_off"},{"type":"literal","value":"eye_tracking"},{"type":"literal","value":"eyeglasses_2"},{"type":"literal","value":"eyeglasses_2_sound"},{"type":"literal","value":"face"},{"type":"literal","value":"face_2"},{"type":"literal","value":"face_3"},{"type":"literal","value":"face_4"},{"type":"literal","value":"face_5"},{"type":"literal","value":"face_6"},{"type":"literal","value":"face_down"},{"type":"literal","value":"face_left"},{"type":"literal","value":"face_nod"},{"type":"literal","value":"face_retouching_natural"},{"type":"literal","value":"face_retouching_off"},{"type":"literal","value":"face_right"},{"type":"literal","value":"face_shake"},{"type":"literal","value":"face_unlock"},{"type":"literal","value":"face_up"},{"type":"literal","value":"fact_check"},{"type":"literal","value":"factory"},{"type":"literal","value":"falling"},{"type":"literal","value":"familiar_face_and_zone"},{"type":"literal","value":"family_group"},{"type":"literal","value":"family_history"},{"type":"literal","value":"family_home"},{"type":"literal","value":"family_link"},{"type":"literal","value":"family_restroom"},{"type":"literal","value":"family_star"},{"type":"literal","value":"fan_focus"},{"type":"literal","value":"fan_indirect"},{"type":"literal","value":"farsight_digital"},{"type":"literal","value":"fast_forward"},{"type":"literal","value":"fast_rewind"},{"type":"literal","value":"fastfood"},{"type":"literal","value":"faucet"},{"type":"literal","value":"favorite"},{"type":"literal","value":"favorite_border"},{"type":"literal","value":"fax"},{"type":"literal","value":"feature_search"},{"type":"literal","value":"featured_play_list"},{"type":"literal","value":"featured_seasonal_and_gifts"},{"type":"literal","value":"featured_video"},{"type":"literal","value":"feedback"},{"type":"literal","value":"female"},{"type":"literal","value":"femur"},{"type":"literal","value":"femur_alt"},{"type":"literal","value":"fence"},{"type":"literal","value":"fertile"},{"type":"literal","value":"festival"},{"type":"literal","value":"fiber_dvr"},{"type":"literal","value":"fiber_manual_record"},{"type":"literal","value":"fiber_new"},{"type":"literal","value":"fiber_pin"},{"type":"literal","value":"fiber_smart_record"},{"type":"literal","value":"file_copy"},{"type":"literal","value":"file_copy_off"},{"type":"literal","value":"file_download"},{"type":"literal","value":"file_download_done"},{"type":"literal","value":"file_download_off"},{"type":"literal","value":"file_export"},{"type":"literal","value":"file_json"},{"type":"literal","value":"file_map"},{"type":"literal","value":"file_map_stack"},{"type":"literal","value":"file_open"},{"type":"literal","value":"file_png"},{"type":"literal","value":"file_present"},{"type":"literal","value":"file_save"},{"type":"literal","value":"file_save_off"},{"type":"literal","value":"file_upload"},{"type":"literal","value":"file_upload_off"},{"type":"literal","value":"files"},{"type":"literal","value":"filter_1"},{"type":"literal","value":"filter_2"},{"type":"literal","value":"filter_3"},{"type":"literal","value":"filter_4"},{"type":"literal","value":"filter_5"},{"type":"literal","value":"filter_6"},{"type":"literal","value":"filter_7"},{"type":"literal","value":"filter_8"},{"type":"literal","value":"filter_9"},{"type":"literal","value":"filter_9_plus"},{"type":"literal","value":"filter_alt"},{"type":"literal","value":"filter_alt_off"},{"type":"literal","value":"filter_arrow_right"},{"type":"literal","value":"filter_b_and_w"},{"type":"literal","value":"filter_center_focus"},{"type":"literal","value":"filter_drama"},{"type":"literal","value":"filter_frames"},{"type":"literal","value":"filter_hdr"},{"type":"literal","value":"filter_list"},{"type":"literal","value":"filter_list_alt"},{"type":"literal","value":"filter_list_off"},{"type":"literal","value":"filter_none"},{"type":"literal","value":"filter_retrolux"},{"type":"literal","value":"filter_tilt_shift"},{"type":"literal","value":"filter_vintage"},{"type":"literal","value":"finance"},{"type":"literal","value":"finance_chip"},{"type":"literal","value":"finance_mode"},{"type":"literal","value":"find_in_page"},{"type":"literal","value":"find_replace"},{"type":"literal","value":"fingerprint"},{"type":"literal","value":"fingerprint_off"},{"type":"literal","value":"fire_extinguisher"},{"type":"literal","value":"fire_hydrant"},{"type":"literal","value":"fire_hydrant_alt"},{"type":"literal","value":"fire_truck"},{"type":"literal","value":"first_page"},{"type":"literal","value":"fit_page"},{"type":"literal","value":"fit_page_height"},{"type":"literal","value":"fit_page_width"},{"type":"literal","value":"fit_screen"},{"type":"literal","value":"fit_width"},{"type":"literal","value":"fitbit"},{"type":"literal","value":"fitness_center"},{"type":"literal","value":"fitness_tracker"},{"type":"literal","value":"fitness_trackers"},{"type":"literal","value":"flag_2"},{"type":"literal","value":"flag_check"},{"type":"literal","value":"flag_circle"},{"type":"literal","value":"flaky"},{"type":"literal","value":"flare"},{"type":"literal","value":"flash_auto"},{"type":"literal","value":"flash_off"},{"type":"literal","value":"flash_on"},{"type":"literal","value":"flashlight_off"},{"type":"literal","value":"flashlight_on"},{"type":"literal","value":"flatware"},{"type":"literal","value":"flex_direction"},{"type":"literal","value":"flex_no_wrap"},{"type":"literal","value":"flex_wrap"},{"type":"literal","value":"flight"},{"type":"literal","value":"flight_class"},{"type":"literal","value":"flight_land"},{"type":"literal","value":"flight_takeoff"},{"type":"literal","value":"flights_and_hotels"},{"type":"literal","value":"flip_camera_android"},{"type":"literal","value":"flip_camera_ios"},{"type":"literal","value":"flip_to_back"},{"type":"literal","value":"flip_to_front"},{"type":"literal","value":"float_landscape_2"},{"type":"literal","value":"float_portrait_2"},{"type":"literal","value":"flood"},{"type":"literal","value":"floor"},{"type":"literal","value":"floor_lamp"},{"type":"literal","value":"flowsheet"},{"type":"literal","value":"fluid"},{"type":"literal","value":"fluid_balance"},{"type":"literal","value":"fluid_med"},{"type":"literal","value":"fluorescent"},{"type":"literal","value":"flutter"},{"type":"literal","value":"flutter_dash"},{"type":"literal","value":"flyover"},{"type":"literal","value":"fmd_bad"},{"type":"literal","value":"fmd_good"},{"type":"literal","value":"foggy"},{"type":"literal","value":"folded_hands"},{"type":"literal","value":"folder_check"},{"type":"literal","value":"folder_check_2"},{"type":"literal","value":"folder_code"},{"type":"literal","value":"folder_copy"},{"type":"literal","value":"folder_data"},{"type":"literal","value":"folder_delete"},{"type":"literal","value":"folder_eye"},{"type":"literal","value":"folder_info"},{"type":"literal","value":"folder_limited"},{"type":"literal","value":"folder_managed"},{"type":"literal","value":"folder_match"},{"type":"literal","value":"folder_off"},{"type":"literal","value":"folder_open"},{"type":"literal","value":"folder_shared"},{"type":"literal","value":"folder_special"},{"type":"literal","value":"folder_supervised"},{"type":"literal","value":"folder_zip"},{"type":"literal","value":"follow_the_signs"},{"type":"literal","value":"font_download"},{"type":"literal","value":"font_download_off"},{"type":"literal","value":"food_bank"},{"type":"literal","value":"foot_bones"},{"type":"literal","value":"footprint"},{"type":"literal","value":"for_you"},{"type":"literal","value":"forest"},{"type":"literal","value":"fork_left"},{"type":"literal","value":"fork_right"},{"type":"literal","value":"fork_spoon"},{"type":"literal","value":"forklift"},{"type":"literal","value":"format_align_center"},{"type":"literal","value":"format_align_justify"},{"type":"literal","value":"format_align_left"},{"type":"literal","value":"format_align_right"},{"type":"literal","value":"format_bold"},{"type":"literal","value":"format_clear"},{"type":"literal","value":"format_color_fill"},{"type":"literal","value":"format_color_reset"},{"type":"literal","value":"format_color_text"},{"type":"literal","value":"format_h1"},{"type":"literal","value":"format_h2"},{"type":"literal","value":"format_h3"},{"type":"literal","value":"format_h4"},{"type":"literal","value":"format_h5"},{"type":"literal","value":"format_h6"},{"type":"literal","value":"format_image_left"},{"type":"literal","value":"format_image_right"},{"type":"literal","value":"format_indent_decrease"},{"type":"literal","value":"format_indent_increase"},{"type":"literal","value":"format_ink_highlighter"},{"type":"literal","value":"format_italic"},{"type":"literal","value":"format_letter_spacing"},{"type":"literal","value":"format_letter_spacing_2"},{"type":"literal","value":"format_letter_spacing_standard"},{"type":"literal","value":"format_letter_spacing_wide"},{"type":"literal","value":"format_letter_spacing_wider"},{"type":"literal","value":"format_line_spacing"},{"type":"literal","value":"format_list_bulleted"},{"type":"literal","value":"format_list_bulleted_add"},{"type":"literal","value":"format_list_numbered"},{"type":"literal","value":"format_list_numbered_rtl"},{"type":"literal","value":"format_overline"},{"type":"literal","value":"format_paint"},{"type":"literal","value":"format_paragraph"},{"type":"literal","value":"format_quote"},{"type":"literal","value":"format_quote_off"},{"type":"literal","value":"format_shapes"},{"type":"literal","value":"format_size"},{"type":"literal","value":"format_strikethrough"},{"type":"literal","value":"format_text_clip"},{"type":"literal","value":"format_text_overflow"},{"type":"literal","value":"format_text_wrap"},{"type":"literal","value":"format_textdirection_l_to_r"},{"type":"literal","value":"format_textdirection_r_to_l"},{"type":"literal","value":"format_textdirection_vertical"},{"type":"literal","value":"format_underlined"},{"type":"literal","value":"format_underlined_squiggle"},{"type":"literal","value":"forms_add_on"},{"type":"literal","value":"forms_apps_script"},{"type":"literal","value":"fort"},{"type":"literal","value":"forum"},{"type":"literal","value":"forward_10"},{"type":"literal","value":"forward_30"},{"type":"literal","value":"forward_5"},{"type":"literal","value":"forward_circle"},{"type":"literal","value":"forward_media"},{"type":"literal","value":"forward_to_inbox"},{"type":"literal","value":"foundation"},{"type":"literal","value":"fragrance"},{"type":"literal","value":"frame_inspect"},{"type":"literal","value":"frame_person"},{"type":"literal","value":"frame_person_mic"},{"type":"literal","value":"frame_person_off"},{"type":"literal","value":"frame_reload"},{"type":"literal","value":"frame_source"},{"type":"literal","value":"free_breakfast"},{"type":"literal","value":"free_cancellation"},{"type":"literal","value":"front_hand"},{"type":"literal","value":"front_loader"},{"type":"literal","value":"full_coverage"},{"type":"literal","value":"full_hd"},{"type":"literal","value":"full_stacked_bar_chart"},{"type":"literal","value":"fullscreen"},{"type":"literal","value":"fullscreen_exit"},{"type":"literal","value":"fullscreen_portrait"},{"type":"literal","value":"functions"},{"type":"literal","value":"funicular"},{"type":"literal","value":"g_mobiledata"},{"type":"literal","value":"g_mobiledata_badge"},{"type":"literal","value":"g_translate"},{"type":"literal","value":"gallery_thumbnail"},{"type":"literal","value":"gamepad"},{"type":"literal","value":"games"},{"type":"literal","value":"garage"},{"type":"literal","value":"garage_check"},{"type":"literal","value":"garage_door"},{"type":"literal","value":"garage_home"},{"type":"literal","value":"garage_money"},{"type":"literal","value":"garden_cart"},{"type":"literal","value":"gas_meter"},{"type":"literal","value":"gastroenterology"},{"type":"literal","value":"gate"},{"type":"literal","value":"gavel"},{"type":"literal","value":"general_device"},{"type":"literal","value":"generating_tokens"},{"type":"literal","value":"genetics"},{"type":"literal","value":"genres"},{"type":"literal","value":"gesture"},{"type":"literal","value":"gesture_select"},{"type":"literal","value":"get_app"},{"type":"literal","value":"gif"},{"type":"literal","value":"gif_2"},{"type":"literal","value":"gif_box"},{"type":"literal","value":"girl"},{"type":"literal","value":"gite"},{"type":"literal","value":"glass_cup"},{"type":"literal","value":"globe_asia"},{"type":"literal","value":"globe_book"},{"type":"literal","value":"globe_location_pin"},{"type":"literal","value":"globe_uk"},{"type":"literal","value":"glucose"},{"type":"literal","value":"glyphs"},{"type":"literal","value":"go_to_line"},{"type":"literal","value":"golf_course"},{"type":"literal","value":"gondola_lift"},{"type":"literal","value":"google_home_devices"},{"type":"literal","value":"google_tv_remote"},{"type":"literal","value":"google_wifi"},{"type":"literal","value":"gpp_bad"},{"type":"literal","value":"gpp_good"},{"type":"literal","value":"gpp_maybe"},{"type":"literal","value":"gps_fixed"},{"type":"literal","value":"gps_not_fixed"},{"type":"literal","value":"gps_off"},{"type":"literal","value":"grade"},{"type":"literal","value":"gradient"},{"type":"literal","value":"grading"},{"type":"literal","value":"grain"},{"type":"literal","value":"graph_1"},{"type":"literal","value":"graph_2"},{"type":"literal","value":"graph_3"},{"type":"literal","value":"graph_4"},{"type":"literal","value":"graph_5"},{"type":"literal","value":"graph_6"},{"type":"literal","value":"graph_7"},{"type":"literal","value":"graphic_eq"},{"type":"literal","value":"grass"},{"type":"literal","value":"grid_3x3"},{"type":"literal","value":"grid_3x3_off"},{"type":"literal","value":"grid_4x4"},{"type":"literal","value":"grid_goldenratio"},{"type":"literal","value":"grid_guides"},{"type":"literal","value":"grid_off"},{"type":"literal","value":"grid_on"},{"type":"literal","value":"grid_view"},{"type":"literal","value":"grocery"},{"type":"literal","value":"group_add"},{"type":"literal","value":"group_off"},{"type":"literal","value":"group_remove"},{"type":"literal","value":"group_search"},{"type":"literal","value":"group_work"},{"type":"literal","value":"grouped_bar_chart"},{"type":"literal","value":"groups_2"},{"type":"literal","value":"groups_3"},{"type":"literal","value":"guardian"},{"type":"literal","value":"gynecology"},{"type":"literal","value":"h_mobiledata"},{"type":"literal","value":"h_mobiledata_badge"},{"type":"literal","value":"h_plus_mobiledata"},{"type":"literal","value":"h_plus_mobiledata_badge"},{"type":"literal","value":"hail"},{"type":"literal","value":"hallway"},{"type":"literal","value":"hanami_dango"},{"type":"literal","value":"hand_bones"},{"type":"literal","value":"hand_gesture"},{"type":"literal","value":"hand_gesture_off"},{"type":"literal","value":"hand_meal"},{"type":"literal","value":"hand_package"},{"type":"literal","value":"handheld_controller"},{"type":"literal","value":"handshake"},{"type":"literal","value":"handyman"},{"type":"literal","value":"hangout_video"},{"type":"literal","value":"hangout_video_off"},{"type":"literal","value":"hard_disk"},{"type":"literal","value":"hard_drive"},{"type":"literal","value":"hard_drive_2"},{"type":"literal","value":"hardware"},{"type":"literal","value":"hd"},{"type":"literal","value":"hdr_auto"},{"type":"literal","value":"hdr_auto_select"},{"type":"literal","value":"hdr_enhanced_select"},{"type":"literal","value":"hdr_off"},{"type":"literal","value":"hdr_off_select"},{"type":"literal","value":"hdr_on"},{"type":"literal","value":"hdr_on_select"},{"type":"literal","value":"hdr_plus"},{"type":"literal","value":"hdr_plus_off"},{"type":"literal","value":"hdr_strong"},{"type":"literal","value":"hdr_weak"},{"type":"literal","value":"head_mounted_device"},{"type":"literal","value":"headphones_battery"},{"type":"literal","value":"headset_mic"},{"type":"literal","value":"headset_off"},{"type":"literal","value":"healing"},{"type":"literal","value":"health_and_beauty"},{"type":"literal","value":"health_and_safety"},{"type":"literal","value":"health_cross"},{"type":"literal","value":"health_metrics"},{"type":"literal","value":"heap_snapshot_large"},{"type":"literal","value":"heap_snapshot_multiple"},{"type":"literal","value":"heap_snapshot_thumbnail"},{"type":"literal","value":"hearing"},{"type":"literal","value":"hearing_aid"},{"type":"literal","value":"hearing_aid_disabled"},{"type":"literal","value":"hearing_aid_disabled_left"},{"type":"literal","value":"hearing_aid_left"},{"type":"literal","value":"hearing_disabled"},{"type":"literal","value":"heart_broken"},{"type":"literal","value":"heart_check"},{"type":"literal","value":"heart_minus"},{"type":"literal","value":"heart_plus"},{"type":"literal","value":"heart_smile"},{"type":"literal","value":"heat"},{"type":"literal","value":"heat_pump"},{"type":"literal","value":"heat_pump_balance"},{"type":"literal","value":"helicopter"},{"type":"literal","value":"help"},{"type":"literal","value":"help_center"},{"type":"literal","value":"help_clinic"},{"type":"literal","value":"help_outline"},{"type":"literal","value":"hematology"},{"type":"literal","value":"hevc"},{"type":"literal","value":"hide_image"},{"type":"literal","value":"hide_source"},{"type":"literal","value":"high_chair"},{"type":"literal","value":"high_density"},{"type":"literal","value":"high_quality"},{"type":"literal","value":"high_res"},{"type":"literal","value":"highlight"},{"type":"literal","value":"highlight_alt"},{"type":"literal","value":"highlight_keyboard_focus"},{"type":"literal","value":"highlight_mouse_cursor"},{"type":"literal","value":"highlight_off"},{"type":"literal","value":"highlight_text_cursor"},{"type":"literal","value":"highlighter_size_1"},{"type":"literal","value":"highlighter_size_2"},{"type":"literal","value":"highlighter_size_3"},{"type":"literal","value":"highlighter_size_4"},{"type":"literal","value":"highlighter_size_5"},{"type":"literal","value":"hiking"},{"type":"literal","value":"history_2"},{"type":"literal","value":"history_edu"},{"type":"literal","value":"history_off"},{"type":"literal","value":"history_toggle_off"},{"type":"literal","value":"hive"},{"type":"literal","value":"hls"},{"type":"literal","value":"hls_off"},{"type":"literal","value":"holiday_village"},{"type":"literal","value":"home"},{"type":"literal","value":"home_and_garden"},{"type":"literal","value":"home_app_logo"},{"type":"literal","value":"home_filled"},{"type":"literal","value":"home_health"},{"type":"literal","value":"home_improvement_and_tools"},{"type":"literal","value":"home_iot_device"},{"type":"literal","value":"home_max"},{"type":"literal","value":"home_max_dots"},{"type":"literal","value":"home_mini"},{"type":"literal","value":"home_pin"},{"type":"literal","value":"home_repair_service"},{"type":"literal","value":"home_speaker"},{"type":"literal","value":"home_storage"},{"type":"literal","value":"home_work"},{"type":"literal","value":"horizontal_distribute"},{"type":"literal","value":"horizontal_rule"},{"type":"literal","value":"horizontal_split"},{"type":"literal","value":"hot_tub"},{"type":"literal","value":"hotel"},{"type":"literal","value":"hotel_class"},{"type":"literal","value":"hourglass_arrow_down"},{"type":"literal","value":"hourglass_arrow_up"},{"type":"literal","value":"hourglass_bottom"},{"type":"literal","value":"hourglass_disabled"},{"type":"literal","value":"hourglass_empty"},{"type":"literal","value":"hourglass_full"},{"type":"literal","value":"hourglass_pause"},{"type":"literal","value":"hourglass_top"},{"type":"literal","value":"house_siding"},{"type":"literal","value":"house_with_shield"},{"type":"literal","value":"houseboat"},{"type":"literal","value":"household_supplies"},{"type":"literal","value":"hov"},{"type":"literal","value":"how_to_reg"},{"type":"literal","value":"how_to_vote"},{"type":"literal","value":"hr_resting"},{"type":"literal","value":"http"},{"type":"literal","value":"https"},{"type":"literal","value":"hub"},{"type":"literal","value":"humerus"},{"type":"literal","value":"humerus_alt"},{"type":"literal","value":"humidity_high"},{"type":"literal","value":"humidity_indoor"},{"type":"literal","value":"humidity_low"},{"type":"literal","value":"humidity_mid"},{"type":"literal","value":"humidity_percentage"},{"type":"literal","value":"hvac"},{"type":"literal","value":"hvac_max_defrost"},{"type":"literal","value":"ice_skating"},{"type":"literal","value":"icecream"},{"type":"literal","value":"id_card"},{"type":"literal","value":"identity_aware_proxy"},{"type":"literal","value":"identity_platform"},{"type":"literal","value":"ifl"},{"type":"literal","value":"iframe_off"},{"type":"literal","value":"image_arrow_up"},{"type":"literal","value":"image_aspect_ratio"},{"type":"literal","value":"image_inset"},{"type":"literal","value":"image_not_supported"},{"type":"literal","value":"image_search"},{"type":"literal","value":"imagesearch_roller"},{"type":"literal","value":"imagesmode"},{"type":"literal","value":"immunology"},{"type":"literal","value":"import_contacts"},{"type":"literal","value":"import_export"},{"type":"literal","value":"important_devices"},{"type":"literal","value":"in_home_mode"},{"type":"literal","value":"inactive_order"},{"type":"literal","value":"inbox"},{"type":"literal","value":"inbox_customize"},{"type":"literal","value":"inbox_text"},{"type":"literal","value":"inbox_text_asterisk"},{"type":"literal","value":"inbox_text_person"},{"type":"literal","value":"inbox_text_share"},{"type":"literal","value":"incomplete_circle"},{"type":"literal","value":"indeterminate_check_box"},{"type":"literal","value":"indeterminate_question_box"},{"type":"literal","value":"info_i"},{"type":"literal","value":"info_outline"},{"type":"literal","value":"infrared"},{"type":"literal","value":"ink_eraser"},{"type":"literal","value":"ink_eraser_off"},{"type":"literal","value":"ink_highlighter"},{"type":"literal","value":"ink_highlighter_move"},{"type":"literal","value":"ink_marker"},{"type":"literal","value":"ink_pen"},{"type":"literal","value":"ink_selection"},{"type":"literal","value":"inpatient"},{"type":"literal","value":"input_circle"},{"type":"literal","value":"insert_chart"},{"type":"literal","value":"insert_chart_outlined"},{"type":"literal","value":"insert_comment"},{"type":"literal","value":"insert_drive_file"},{"type":"literal","value":"insert_emoticon"},{"type":"literal","value":"insert_invitation"},{"type":"literal","value":"insert_link"},{"type":"literal","value":"insert_page_break"},{"type":"literal","value":"insert_photo"},{"type":"literal","value":"insert_text"},{"type":"literal","value":"insights"},{"type":"literal","value":"install_desktop"},{"type":"literal","value":"install_mobile"},{"type":"literal","value":"instant_mix"},{"type":"literal","value":"integration_instructions"},{"type":"literal","value":"interactive_space"},{"type":"literal","value":"interests"},{"type":"literal","value":"interpreter_mode"},{"type":"literal","value":"inventory"},{"type":"literal","value":"inventory_2"},{"type":"literal","value":"invert_colors"},{"type":"literal","value":"invert_colors_off"},{"type":"literal","value":"ios_share"},{"type":"literal","value":"iron"},{"type":"literal","value":"iso"},{"type":"literal","value":"jamboard_kiosk"},{"type":"literal","value":"japanese_curry"},{"type":"literal","value":"japanese_flag"},{"type":"literal","value":"javascript"},{"type":"literal","value":"join_full"},{"type":"literal","value":"join_inner"},{"type":"literal","value":"join_left"},{"type":"literal","value":"join_right"},{"type":"literal","value":"joystick"},{"type":"literal","value":"jump_to_element"},{"type":"literal","value":"kanji_alcohol"},{"type":"literal","value":"kayaking"},{"type":"literal","value":"kebab_dining"},{"type":"literal","value":"keep"},{"type":"literal","value":"keep_off"},{"type":"literal","value":"keep_public"},{"type":"literal","value":"kettle"},{"type":"literal","value":"key_off"},{"type":"literal","value":"key_vertical"},{"type":"literal","value":"key_visualizer"},{"type":"literal","value":"keyboard_alt"},{"type":"literal","value":"keyboard_arrow_down"},{"type":"literal","value":"keyboard_arrow_left"},{"type":"literal","value":"keyboard_arrow_right"},{"type":"literal","value":"keyboard_arrow_up"},{"type":"literal","value":"keyboard_backspace"},{"type":"literal","value":"keyboard_capslock"},{"type":"literal","value":"keyboard_capslock_badge"},{"type":"literal","value":"keyboard_command_key"},{"type":"literal","value":"keyboard_control_key"},{"type":"literal","value":"keyboard_double_arrow_down"},{"type":"literal","value":"keyboard_double_arrow_left"},{"type":"literal","value":"keyboard_double_arrow_right"},{"type":"literal","value":"keyboard_double_arrow_up"},{"type":"literal","value":"keyboard_external_input"},{"type":"literal","value":"keyboard_full"},{"type":"literal","value":"keyboard_hide"},{"type":"literal","value":"keyboard_keys"},{"type":"literal","value":"keyboard_lock"},{"type":"literal","value":"keyboard_lock_off"},{"type":"literal","value":"keyboard_off"},{"type":"literal","value":"keyboard_onscreen"},{"type":"literal","value":"keyboard_option_key"},{"type":"literal","value":"keyboard_previous_language"},{"type":"literal","value":"keyboard_return"},{"type":"literal","value":"keyboard_tab"},{"type":"literal","value":"keyboard_tab_rtl"},{"type":"literal","value":"keyboard_voice"},{"type":"literal","value":"kid_star"},{"type":"literal","value":"king_bed"},{"type":"literal","value":"kitchen"},{"type":"literal","value":"kitesurfing"},{"type":"literal","value":"lab_panel"},{"type":"literal","value":"lab_profile"},{"type":"literal","value":"lab_research"},{"type":"literal","value":"label_important"},{"type":"literal","value":"label_important_outline"},{"type":"literal","value":"label_off"},{"type":"literal","value":"labs"},{"type":"literal","value":"lan"},{"type":"literal","value":"landscape_2"},{"type":"literal","value":"landscape_2_edit"},{"type":"literal","value":"landscape_2_off"},{"type":"literal","value":"landslide"},{"type":"literal","value":"language"},{"type":"literal","value":"language_chinese_array"},{"type":"literal","value":"language_chinese_cangjie"},{"type":"literal","value":"language_chinese_dayi"},{"type":"literal","value":"language_chinese_pinyin"},{"type":"literal","value":"language_chinese_quick"},{"type":"literal","value":"language_chinese_wubi"},{"type":"literal","value":"language_french"},{"type":"literal","value":"language_gb_english"},{"type":"literal","value":"language_international"},{"type":"literal","value":"language_japanese_kana"},{"type":"literal","value":"language_korean_latin"},{"type":"literal","value":"language_pinyin"},{"type":"literal","value":"language_spanish"},{"type":"literal","value":"language_us"},{"type":"literal","value":"language_us_colemak"},{"type":"literal","value":"language_us_dvorak"},{"type":"literal","value":"laps"},{"type":"literal","value":"laptop"},{"type":"literal","value":"laptop_car"},{"type":"literal","value":"laptop_chromebook"},{"type":"literal","value":"laptop_mac"},{"type":"literal","value":"laptop_windows"},{"type":"literal","value":"lasso_select"},{"type":"literal","value":"last_page"},{"type":"literal","value":"launch"},{"type":"literal","value":"laundry"},{"type":"literal","value":"layers"},{"type":"literal","value":"layers_clear"},{"type":"literal","value":"lda"},{"type":"literal","value":"leaderboard"},{"type":"literal","value":"leak_add"},{"type":"literal","value":"leak_remove"},{"type":"literal","value":"left_click"},{"type":"literal","value":"left_panel_close"},{"type":"literal","value":"left_panel_open"},{"type":"literal","value":"legend_toggle"},{"type":"literal","value":"lens"},{"type":"literal","value":"lens_blur"},{"type":"literal","value":"letter_switch"},{"type":"literal","value":"library_add"},{"type":"literal","value":"library_add_check"},{"type":"literal","value":"library_books"},{"type":"literal","value":"library_music"},{"type":"literal","value":"license"},{"type":"literal","value":"lift_to_talk"},{"type":"literal","value":"light_group"},{"type":"literal","value":"light_mode"},{"type":"literal","value":"light_off"},{"type":"literal","value":"lightbulb_2"},{"type":"literal","value":"lightbulb_circle"},{"type":"literal","value":"lightbulb_outline"},{"type":"literal","value":"lightning_stand"},{"type":"literal","value":"line_axis"},{"type":"literal","value":"line_curve"},{"type":"literal","value":"line_end"},{"type":"literal","value":"line_end_arrow"},{"type":"literal","value":"line_end_arrow_notch"},{"type":"literal","value":"line_end_circle"},{"type":"literal","value":"line_end_diamond"},{"type":"literal","value":"line_end_square"},{"type":"literal","value":"line_start"},{"type":"literal","value":"line_start_arrow"},{"type":"literal","value":"line_start_arrow_notch"},{"type":"literal","value":"line_start_circle"},{"type":"literal","value":"line_start_diamond"},{"type":"literal","value":"line_start_square"},{"type":"literal","value":"line_style"},{"type":"literal","value":"line_weight"},{"type":"literal","value":"linear_scale"},{"type":"literal","value":"link_off"},{"type":"literal","value":"linked_camera"},{"type":"literal","value":"linked_services"},{"type":"literal","value":"liquor"},{"type":"literal","value":"list_alt"},{"type":"literal","value":"list_alt_add"},{"type":"literal","value":"list_alt_check"},{"type":"literal","value":"lists"},{"type":"literal","value":"live_help"},{"type":"literal","value":"live_tv"},{"type":"literal","value":"living"},{"type":"literal","value":"local_activity"},{"type":"literal","value":"local_airport"},{"type":"literal","value":"local_atm"},{"type":"literal","value":"local_bar"},{"type":"literal","value":"local_cafe"},{"type":"literal","value":"local_car_wash"},{"type":"literal","value":"local_convenience_store"},{"type":"literal","value":"local_dining"},{"type":"literal","value":"local_drink"},{"type":"literal","value":"local_fire_department"},{"type":"literal","value":"local_florist"},{"type":"literal","value":"local_gas_station"},{"type":"literal","value":"local_grocery_store"},{"type":"literal","value":"local_hospital"},{"type":"literal","value":"local_hotel"},{"type":"literal","value":"local_laundry_service"},{"type":"literal","value":"local_library"},{"type":"literal","value":"local_mall"},{"type":"literal","value":"local_movies"},{"type":"literal","value":"local_offer"},{"type":"literal","value":"local_parking"},{"type":"literal","value":"local_pharmacy"},{"type":"literal","value":"local_phone"},{"type":"literal","value":"local_pizza"},{"type":"literal","value":"local_play"},{"type":"literal","value":"local_police"},{"type":"literal","value":"local_post_office"},{"type":"literal","value":"local_printshop"},{"type":"literal","value":"local_see"},{"type":"literal","value":"local_shipping"},{"type":"literal","value":"local_taxi"},{"type":"literal","value":"location_away"},{"type":"literal","value":"location_chip"},{"type":"literal","value":"location_city"},{"type":"literal","value":"location_disabled"},{"type":"literal","value":"location_home"},{"type":"literal","value":"location_off"},{"type":"literal","value":"location_on"},{"type":"literal","value":"location_pin"},{"type":"literal","value":"location_searching"},{"type":"literal","value":"lock_clock"},{"type":"literal","value":"lock_open"},{"type":"literal","value":"lock_open_circle"},{"type":"literal","value":"lock_open_right"},{"type":"literal","value":"lock_outline"},{"type":"literal","value":"lock_person"},{"type":"literal","value":"lock_reset"},{"type":"literal","value":"login"},{"type":"literal","value":"logo_dev"},{"type":"literal","value":"logout"},{"type":"literal","value":"looks"},{"type":"literal","value":"looks_3"},{"type":"literal","value":"looks_4"},{"type":"literal","value":"looks_5"},{"type":"literal","value":"looks_6"},{"type":"literal","value":"looks_one"},{"type":"literal","value":"looks_two"},{"type":"literal","value":"loop"},{"type":"literal","value":"low_density"},{"type":"literal","value":"low_priority"},{"type":"literal","value":"loyalty"},{"type":"literal","value":"lte_mobiledata"},{"type":"literal","value":"lte_mobiledata_badge"},{"type":"literal","value":"lte_plus_mobiledata"},{"type":"literal","value":"lte_plus_mobiledata_badge"},{"type":"literal","value":"luggage"},{"type":"literal","value":"lunch_dining"},{"type":"literal","value":"lyrics"},{"type":"literal","value":"macro_auto"},{"type":"literal","value":"macro_off"},{"type":"literal","value":"magnification_large"},{"type":"literal","value":"magnification_small"},{"type":"literal","value":"magnify_docked"},{"type":"literal","value":"magnify_fullscreen"},{"type":"literal","value":"mail_asterisk"},{"type":"literal","value":"mail_lock"},{"type":"literal","value":"mail_off"},{"type":"literal","value":"mail_outline"},{"type":"literal","value":"mail_shield"},{"type":"literal","value":"male"},{"type":"literal","value":"man"},{"type":"literal","value":"man_2"},{"type":"literal","value":"man_3"},{"type":"literal","value":"man_4"},{"type":"literal","value":"manage_accounts"},{"type":"literal","value":"manage_history"},{"type":"literal","value":"manage_search"},{"type":"literal","value":"manga"},{"type":"literal","value":"manufacturing"},{"type":"literal","value":"map_pin_heart"},{"type":"literal","value":"map_pin_review"},{"type":"literal","value":"map_search"},{"type":"literal","value":"maps_home_work"},{"type":"literal","value":"maps_ugc"},{"type":"literal","value":"mark_as_unread"},{"type":"literal","value":"mark_chat_read"},{"type":"literal","value":"mark_chat_unread"},{"type":"literal","value":"mark_email_read"},{"type":"literal","value":"mark_email_unread"},{"type":"literal","value":"mark_unread_chat_alt"},{"type":"literal","value":"markdown"},{"type":"literal","value":"markdown_copy"},{"type":"literal","value":"markdown_paste"},{"type":"literal","value":"markunread"},{"type":"literal","value":"markunread_mailbox"},{"type":"literal","value":"masked_transitions"},{"type":"literal","value":"masked_transitions_add"},{"type":"literal","value":"masks"},{"type":"literal","value":"massage"},{"type":"literal","value":"match_case"},{"type":"literal","value":"match_case_off"},{"type":"literal","value":"match_word"},{"type":"literal","value":"matter"},{"type":"literal","value":"maximize"},{"type":"literal","value":"meal_dinner"},{"type":"literal","value":"meal_lunch"},{"type":"literal","value":"measuring_tape"},{"type":"literal","value":"media_bluetooth_off"},{"type":"literal","value":"media_bluetooth_on"},{"type":"literal","value":"media_link"},{"type":"literal","value":"media_output"},{"type":"literal","value":"media_output_off"},{"type":"literal","value":"mediation"},{"type":"literal","value":"medical_information"},{"type":"literal","value":"medical_mask"},{"type":"literal","value":"medical_services"},{"type":"literal","value":"medication"},{"type":"literal","value":"medication_liquid"},{"type":"literal","value":"meeting_room"},{"type":"literal","value":"memory"},{"type":"literal","value":"memory_alt"},{"type":"literal","value":"menstrual_health"},{"type":"literal","value":"menu_book"},{"type":"literal","value":"menu_book_2"},{"type":"literal","value":"menu_open"},{"type":"literal","value":"merge_type"},{"type":"literal","value":"metabolism"},{"type":"literal","value":"metro"},{"type":"literal","value":"mfg_nest_yale_lock"},{"type":"literal","value":"mic_alert"},{"type":"literal","value":"mic_double"},{"type":"literal","value":"mic_external_off"},{"type":"literal","value":"mic_external_on"},{"type":"literal","value":"mic_none"},{"type":"literal","value":"mic_off"},{"type":"literal","value":"microbiology"},{"type":"literal","value":"microwave_gen"},{"type":"literal","value":"military_tech"},{"type":"literal","value":"mimo"},{"type":"literal","value":"mimo_disconnect"},{"type":"literal","value":"mindfulness"},{"type":"literal","value":"minimize"},{"type":"literal","value":"minor_crash"},{"type":"literal","value":"mintmark"},{"type":"literal","value":"miscellaneous_services"},{"type":"literal","value":"missed_video_call"},{"type":"literal","value":"missing_controller"},{"type":"literal","value":"mist"},{"type":"literal","value":"mitre"},{"type":"literal","value":"mixture_med"},{"type":"literal","value":"mms"},{"type":"literal","value":"mobile"},{"type":"literal","value":"mobile_2"},{"type":"literal","value":"mobile_3"},{"type":"literal","value":"mobile_alert"},{"type":"literal","value":"mobile_arrow_down"},{"type":"literal","value":"mobile_arrow_right"},{"type":"literal","value":"mobile_arrow_up_right"},{"type":"literal","value":"mobile_block"},{"type":"literal","value":"mobile_camera"},{"type":"literal","value":"mobile_camera_front"},{"type":"literal","value":"mobile_camera_rear"},{"type":"literal","value":"mobile_cancel"},{"type":"literal","value":"mobile_cast"},{"type":"literal","value":"mobile_charge"},{"type":"literal","value":"mobile_chat"},{"type":"literal","value":"mobile_check"},{"type":"literal","value":"mobile_code"},{"type":"literal","value":"mobile_dots"},{"type":"literal","value":"mobile_friendly"},{"type":"literal","value":"mobile_gear"},{"type":"literal","value":"mobile_hand"},{"type":"literal","value":"mobile_hand_left"},{"type":"literal","value":"mobile_hand_left_off"},{"type":"literal","value":"mobile_hand_off"},{"type":"literal","value":"mobile_info"},{"type":"literal","value":"mobile_landscape"},{"type":"literal","value":"mobile_layout"},{"type":"literal","value":"mobile_lock_landscape"},{"type":"literal","value":"mobile_lock_portrait"},{"type":"literal","value":"mobile_loupe"},{"type":"literal","value":"mobile_menu"},{"type":"literal","value":"mobile_off"},{"type":"literal","value":"mobile_question"},{"type":"literal","value":"mobile_rotate"},{"type":"literal","value":"mobile_rotate_lock"},{"type":"literal","value":"mobile_screen_share"},{"type":"literal","value":"mobile_screensaver"},{"type":"literal","value":"mobile_sensor_hi"},{"type":"literal","value":"mobile_sensor_lo"},{"type":"literal","value":"mobile_share"},{"type":"literal","value":"mobile_share_stack"},{"type":"literal","value":"mobile_sound"},{"type":"literal","value":"mobile_sound_2"},{"type":"literal","value":"mobile_sound_off"},{"type":"literal","value":"mobile_speaker"},{"type":"literal","value":"mobile_text"},{"type":"literal","value":"mobile_text_2"},{"type":"literal","value":"mobile_theft"},{"type":"literal","value":"mobile_ticket"},{"type":"literal","value":"mobile_vibrate"},{"type":"literal","value":"mobile_wrench"},{"type":"literal","value":"mobiledata_off"},{"type":"literal","value":"mode"},{"type":"literal","value":"mode_comment"},{"type":"literal","value":"mode_cool"},{"type":"literal","value":"mode_cool_off"},{"type":"literal","value":"mode_dual"},{"type":"literal","value":"mode_edit"},{"type":"literal","value":"mode_edit_outline"},{"type":"literal","value":"mode_fan"},{"type":"literal","value":"mode_fan_off"},{"type":"literal","value":"mode_heat"},{"type":"literal","value":"mode_heat_cool"},{"type":"literal","value":"mode_heat_off"},{"type":"literal","value":"mode_night"},{"type":"literal","value":"mode_of_travel"},{"type":"literal","value":"mode_off_on"},{"type":"literal","value":"mode_standby"},{"type":"literal","value":"model_training"},{"type":"literal","value":"modeling"},{"type":"literal","value":"monetization_on"},{"type":"literal","value":"money"},{"type":"literal","value":"money_bag"},{"type":"literal","value":"money_off"},{"type":"literal","value":"money_off_csred"},{"type":"literal","value":"money_range"},{"type":"literal","value":"monitor"},{"type":"literal","value":"monitor_heart"},{"type":"literal","value":"monitor_weight"},{"type":"literal","value":"monitor_weight_gain"},{"type":"literal","value":"monitor_weight_loss"},{"type":"literal","value":"monitoring"},{"type":"literal","value":"monochrome_photos"},{"type":"literal","value":"monorail"},{"type":"literal","value":"mood"},{"type":"literal","value":"mood_bad"},{"type":"literal","value":"moon_stars"},{"type":"literal","value":"mop"},{"type":"literal","value":"moped_package"},{"type":"literal","value":"more_down"},{"type":"literal","value":"more_horiz"},{"type":"literal","value":"more_time"},{"type":"literal","value":"more_up"},{"type":"literal","value":"more_vert"},{"type":"literal","value":"mosque"},{"type":"literal","value":"motion_blur"},{"type":"literal","value":"motion_mode"},{"type":"literal","value":"motion_photos_auto"},{"type":"literal","value":"motion_photos_off"},{"type":"literal","value":"motion_photos_on"},{"type":"literal","value":"motion_photos_pause"},{"type":"literal","value":"motion_photos_paused"},{"type":"literal","value":"motion_play"},{"type":"literal","value":"motion_sensor_active"},{"type":"literal","value":"motion_sensor_alert"},{"type":"literal","value":"motion_sensor_idle"},{"type":"literal","value":"motion_sensor_urgent"},{"type":"literal","value":"mountain_flag"},{"type":"literal","value":"mountain_steam"},{"type":"literal","value":"mouse"},{"type":"literal","value":"mouse_lock"},{"type":"literal","value":"mouse_lock_off"},{"type":"literal","value":"move_down"},{"type":"literal","value":"move_group"},{"type":"literal","value":"move_item"},{"type":"literal","value":"move_location"},{"type":"literal","value":"move_selection_down"},{"type":"literal","value":"move_selection_left"},{"type":"literal","value":"move_selection_right"},{"type":"literal","value":"move_selection_up"},{"type":"literal","value":"move_to_inbox"},{"type":"literal","value":"move_up"},{"type":"literal","value":"moved_location"},{"type":"literal","value":"movie"},{"type":"literal","value":"movie_creation"},{"type":"literal","value":"movie_edit"},{"type":"literal","value":"movie_filter"},{"type":"literal","value":"movie_info"},{"type":"literal","value":"movie_off"},{"type":"literal","value":"movie_speaker"},{"type":"literal","value":"moving"},{"type":"literal","value":"moving_beds"},{"type":"literal","value":"moving_ministry"},{"type":"literal","value":"mp"},{"type":"literal","value":"multicooker"},{"type":"literal","value":"multiline_chart"},{"type":"literal","value":"multimodal_hand_eye"},{"type":"literal","value":"multiple_airports"},{"type":"literal","value":"multiple_stop"},{"type":"literal","value":"museum"},{"type":"literal","value":"music_cast"},{"type":"literal","value":"music_history"},{"type":"literal","value":"music_note"},{"type":"literal","value":"music_note_add"},{"type":"literal","value":"music_off"},{"type":"literal","value":"music_video"},{"type":"literal","value":"my_location"},{"type":"literal","value":"mystery"},{"type":"literal","value":"nat"},{"type":"literal","value":"nature"},{"type":"literal","value":"nature_people"},{"type":"literal","value":"navigate_before"},{"type":"literal","value":"navigate_next"},{"type":"literal","value":"near_me"},{"type":"literal","value":"near_me_disabled"},{"type":"literal","value":"nearby"},{"type":"literal","value":"nearby_error"},{"type":"literal","value":"nearby_off"},{"type":"literal","value":"nephrology"},{"type":"literal","value":"nest_audio"},{"type":"literal","value":"nest_cam_floodlight"},{"type":"literal","value":"nest_cam_indoor"},{"type":"literal","value":"nest_cam_iq"},{"type":"literal","value":"nest_cam_iq_outdoor"},{"type":"literal","value":"nest_cam_magnet_mount"},{"type":"literal","value":"nest_cam_outdoor"},{"type":"literal","value":"nest_cam_stand"},{"type":"literal","value":"nest_cam_wall_mount"},{"type":"literal","value":"nest_cam_wired_stand"},{"type":"literal","value":"nest_clock_farsight_analog"},{"type":"literal","value":"nest_clock_farsight_digital"},{"type":"literal","value":"nest_connect"},{"type":"literal","value":"nest_detect"},{"type":"literal","value":"nest_display"},{"type":"literal","value":"nest_display_max"},{"type":"literal","value":"nest_doorbell_visitor"},{"type":"literal","value":"nest_eco_leaf"},{"type":"literal","value":"nest_farsight_cool"},{"type":"literal","value":"nest_farsight_dual"},{"type":"literal","value":"nest_farsight_eco"},{"type":"literal","value":"nest_farsight_heat"},{"type":"literal","value":"nest_farsight_seasonal"},{"type":"literal","value":"nest_farsight_weather"},{"type":"literal","value":"nest_found_savings"},{"type":"literal","value":"nest_heat_link_e"},{"type":"literal","value":"nest_heat_link_gen_3"},{"type":"literal","value":"nest_hello_doorbell"},{"type":"literal","value":"nest_mini"},{"type":"literal","value":"nest_multi_room"},{"type":"literal","value":"nest_protect"},{"type":"literal","value":"nest_remote_comfort_sensor"},{"type":"literal","value":"nest_secure_alarm"},{"type":"literal","value":"nest_sunblock"},{"type":"literal","value":"nest_tag"},{"type":"literal","value":"nest_thermostat"},{"type":"literal","value":"nest_thermostat_e_eu"},{"type":"literal","value":"nest_thermostat_gen_3"},{"type":"literal","value":"nest_thermostat_sensor"},{"type":"literal","value":"nest_thermostat_sensor_eu"},{"type":"literal","value":"nest_thermostat_zirconium_eu"},{"type":"literal","value":"nest_true_radiant"},{"type":"literal","value":"nest_wake_on_approach"},{"type":"literal","value":"nest_wake_on_press"},{"type":"literal","value":"nest_wifi_point"},{"type":"literal","value":"nest_wifi_pro"},{"type":"literal","value":"nest_wifi_pro_2"},{"type":"literal","value":"nest_wifi_router"},{"type":"literal","value":"network_cell"},{"type":"literal","value":"network_check"},{"type":"literal","value":"network_intel_node"},{"type":"literal","value":"network_intelligence"},{"type":"literal","value":"network_intelligence_history"},{"type":"literal","value":"network_intelligence_update"},{"type":"literal","value":"network_locked"},{"type":"literal","value":"network_manage"},{"type":"literal","value":"network_node"},{"type":"literal","value":"network_ping"},{"type":"literal","value":"network_wifi"},{"type":"literal","value":"network_wifi_1_bar"},{"type":"literal","value":"network_wifi_1_bar_locked"},{"type":"literal","value":"network_wifi_2_bar"},{"type":"literal","value":"network_wifi_2_bar_locked"},{"type":"literal","value":"network_wifi_3_bar"},{"type":"literal","value":"network_wifi_3_bar_locked"},{"type":"literal","value":"network_wifi_locked"},{"type":"literal","value":"neurology"},{"type":"literal","value":"new_label"},{"type":"literal","value":"new_releases"},{"type":"literal","value":"new_window"},{"type":"literal","value":"news"},{"type":"literal","value":"newsmode"},{"type":"literal","value":"newsstand"},{"type":"literal","value":"next_plan"},{"type":"literal","value":"next_week"},{"type":"literal","value":"nfc"},{"type":"literal","value":"nfc_off"},{"type":"literal","value":"night_shelter"},{"type":"literal","value":"night_sight_auto"},{"type":"literal","value":"night_sight_auto_off"},{"type":"literal","value":"night_sight_max"},{"type":"literal","value":"nightlife"},{"type":"literal","value":"nightlight"},{"type":"literal","value":"nightlight_round"},{"type":"literal","value":"nights_stay"},{"type":"literal","value":"no_accounts"},{"type":"literal","value":"no_adult_content"},{"type":"literal","value":"no_backpack"},{"type":"literal","value":"no_cell"},{"type":"literal","value":"no_crash"},{"type":"literal","value":"no_drinks"},{"type":"literal","value":"no_encryption"},{"type":"literal","value":"no_encryption_gmailerrorred"},{"type":"literal","value":"no_flash"},{"type":"literal","value":"no_food"},{"type":"literal","value":"no_luggage"},{"type":"literal","value":"no_meals"},{"type":"literal","value":"no_meals_ouline"},{"type":"literal","value":"no_meeting_room"},{"type":"literal","value":"no_photography"},{"type":"literal","value":"no_sim"},{"type":"literal","value":"no_sound"},{"type":"literal","value":"no_stroller"},{"type":"literal","value":"no_transfer"},{"type":"literal","value":"noise_aware"},{"type":"literal","value":"noise_control_off"},{"type":"literal","value":"noise_control_on"},{"type":"literal","value":"nordic_walking"},{"type":"literal","value":"north"},{"type":"literal","value":"north_east"},{"type":"literal","value":"north_west"},{"type":"literal","value":"not_accessible"},{"type":"literal","value":"not_accessible_forward"},{"type":"literal","value":"not_interested"},{"type":"literal","value":"not_listed_location"},{"type":"literal","value":"not_started"},{"type":"literal","value":"note_add"},{"type":"literal","value":"note_alt"},{"type":"literal","value":"note_stack"},{"type":"literal","value":"note_stack_add"},{"type":"literal","value":"notes"},{"type":"literal","value":"notification_add"},{"type":"literal","value":"notification_important"},{"type":"literal","value":"notification_multiple"},{"type":"literal","value":"notification_settings"},{"type":"literal","value":"notification_sound"},{"type":"literal","value":"notifications"},{"type":"literal","value":"notifications_active"},{"type":"literal","value":"notifications_none"},{"type":"literal","value":"notifications_off"},{"type":"literal","value":"notifications_paused"},{"type":"literal","value":"notifications_unread"},{"type":"literal","value":"nutrition"},{"type":"literal","value":"ods"},{"type":"literal","value":"odt"},{"type":"literal","value":"offline_bolt"},{"type":"literal","value":"offline_pin"},{"type":"literal","value":"offline_pin_off"},{"type":"literal","value":"offline_share"},{"type":"literal","value":"oil_barrel"},{"type":"literal","value":"okonomiyaki"},{"type":"literal","value":"on_device_training"},{"type":"literal","value":"on_hub_device"},{"type":"literal","value":"oncology"},{"type":"literal","value":"ondemand_video"},{"type":"literal","value":"online_prediction"},{"type":"literal","value":"onsen"},{"type":"literal","value":"open_in_browser"},{"type":"literal","value":"open_in_full"},{"type":"literal","value":"open_in_new"},{"type":"literal","value":"open_in_new_down"},{"type":"literal","value":"open_in_new_off"},{"type":"literal","value":"open_jam"},{"type":"literal","value":"open_run"},{"type":"literal","value":"open_with"},{"type":"literal","value":"ophthalmology"},{"type":"literal","value":"oral_disease"},{"type":"literal","value":"orbit"},{"type":"literal","value":"order_approve"},{"type":"literal","value":"order_play"},{"type":"literal","value":"orders"},{"type":"literal","value":"orthopedics"},{"type":"literal","value":"other_admission"},{"type":"literal","value":"other_houses"},{"type":"literal","value":"outbound"},{"type":"literal","value":"outbox"},{"type":"literal","value":"outbox_alt"},{"type":"literal","value":"outdoor_garden"},{"type":"literal","value":"outdoor_grill"},{"type":"literal","value":"outgoing_mail"},{"type":"literal","value":"outlet"},{"type":"literal","value":"outlined_flag"},{"type":"literal","value":"outpatient"},{"type":"literal","value":"outpatient_med"},{"type":"literal","value":"output_circle"},{"type":"literal","value":"oven_gen"},{"type":"literal","value":"overview"},{"type":"literal","value":"overview_key"},{"type":"literal","value":"owl"},{"type":"literal","value":"oxygen_saturation"},{"type":"literal","value":"p2p"},{"type":"literal","value":"pace"},{"type":"literal","value":"pacemaker"},{"type":"literal","value":"package"},{"type":"literal","value":"package_2"},{"type":"literal","value":"padel"},{"type":"literal","value":"page_control"},{"type":"literal","value":"page_footer"},{"type":"literal","value":"page_header"},{"type":"literal","value":"page_info"},{"type":"literal","value":"page_menu_ios"},{"type":"literal","value":"pageless"},{"type":"literal","value":"pages"},{"type":"literal","value":"pageview"},{"type":"literal","value":"paid"},{"type":"literal","value":"pallet"},{"type":"literal","value":"pan_tool"},{"type":"literal","value":"pan_tool_alt"},{"type":"literal","value":"pan_zoom"},{"type":"literal","value":"panorama"},{"type":"literal","value":"panorama_fish_eye"},{"type":"literal","value":"panorama_horizontal"},{"type":"literal","value":"panorama_horizontal_select"},{"type":"literal","value":"panorama_photosphere"},{"type":"literal","value":"panorama_photosphere_select"},{"type":"literal","value":"panorama_vertical"},{"type":"literal","value":"panorama_vertical_select"},{"type":"literal","value":"panorama_wide_angle"},{"type":"literal","value":"panorama_wide_angle_select"},{"type":"literal","value":"paragliding"},{"type":"literal","value":"parent_child_dining"},{"type":"literal","value":"park"},{"type":"literal","value":"parking_meter"},{"type":"literal","value":"parking_sign"},{"type":"literal","value":"parking_valet"},{"type":"literal","value":"partly_cloudy_day"},{"type":"literal","value":"partly_cloudy_night"},{"type":"literal","value":"partner_exchange"},{"type":"literal","value":"partner_heart"},{"type":"literal","value":"partner_reports"},{"type":"literal","value":"party_mode"},{"type":"literal","value":"passkey"},{"type":"literal","value":"password"},{"type":"literal","value":"password_2"},{"type":"literal","value":"password_2_off"},{"type":"literal","value":"patient_list"},{"type":"literal","value":"pause_circle"},{"type":"literal","value":"pause_circle_filled"},{"type":"literal","value":"pause_circle_outline"},{"type":"literal","value":"pause_presentation"},{"type":"literal","value":"payment"},{"type":"literal","value":"payment_arrow_down"},{"type":"literal","value":"payment_card"},{"type":"literal","value":"payments"},{"type":"literal","value":"pedal_bike"},{"type":"literal","value":"pediatrics"},{"type":"literal","value":"pen_size_1"},{"type":"literal","value":"pen_size_2"},{"type":"literal","value":"pen_size_3"},{"type":"literal","value":"pen_size_4"},{"type":"literal","value":"pen_size_5"},{"type":"literal","value":"pending"},{"type":"literal","value":"pending_actions"},{"type":"literal","value":"people"},{"type":"literal","value":"people_alt"},{"type":"literal","value":"people_outline"},{"type":"literal","value":"percent_discount"},{"type":"literal","value":"pergola"},{"type":"literal","value":"perm_camera_mic"},{"type":"literal","value":"perm_contact_calendar"},{"type":"literal","value":"perm_data_setting"},{"type":"literal","value":"perm_device_information"},{"type":"literal","value":"perm_identity"},{"type":"literal","value":"perm_media"},{"type":"literal","value":"perm_phone_msg"},{"type":"literal","value":"perm_scan_wifi"},{"type":"literal","value":"person_2"},{"type":"literal","value":"person_3"},{"type":"literal","value":"person_4"},{"type":"literal","value":"person_add"},{"type":"literal","value":"person_add_alt"},{"type":"literal","value":"person_add_alt_1"},{"type":"literal","value":"person_add_disabled"},{"type":"literal","value":"person_alert"},{"type":"literal","value":"person_apron"},{"type":"literal","value":"person_book"},{"type":"literal","value":"person_cancel"},{"type":"literal","value":"person_celebrate"},{"type":"literal","value":"person_check"},{"type":"literal","value":"person_edit"},{"type":"literal","value":"person_heart"},{"type":"literal","value":"person_off"},{"type":"literal","value":"person_outline"},{"type":"literal","value":"person_pin"},{"type":"literal","value":"person_pin_circle"},{"type":"literal","value":"person_play"},{"type":"literal","value":"person_raised_hand"},{"type":"literal","value":"person_remove"},{"type":"literal","value":"person_remove_alt_1"},{"type":"literal","value":"person_search"},{"type":"literal","value":"person_shield"},{"type":"literal","value":"personal_bag"},{"type":"literal","value":"personal_bag_off"},{"type":"literal","value":"personal_bag_question"},{"type":"literal","value":"personal_injury"},{"type":"literal","value":"personal_places"},{"type":"literal","value":"personal_video"},{"type":"literal","value":"pest_control"},{"type":"literal","value":"pest_control_rodent"},{"type":"literal","value":"pet_supplies"},{"type":"literal","value":"pets"},{"type":"literal","value":"phishing"},{"type":"literal","value":"phone_android"},{"type":"literal","value":"phone_bluetooth_speaker"},{"type":"literal","value":"phone_callback"},{"type":"literal","value":"phone_disabled"},{"type":"literal","value":"phone_enabled"},{"type":"literal","value":"phone_forwarded"},{"type":"literal","value":"phone_in_talk"},{"type":"literal","value":"phone_iphone"},{"type":"literal","value":"phone_locked"},{"type":"literal","value":"phone_missed"},{"type":"literal","value":"phone_paused"},{"type":"literal","value":"phonelink"},{"type":"literal","value":"phonelink_erase"},{"type":"literal","value":"phonelink_lock"},{"type":"literal","value":"phonelink_off"},{"type":"literal","value":"phonelink_ring"},{"type":"literal","value":"phonelink_setup"},{"type":"literal","value":"photo_album"},{"type":"literal","value":"photo_auto_merge"},{"type":"literal","value":"photo_camera"},{"type":"literal","value":"photo_camera_back"},{"type":"literal","value":"photo_camera_front"},{"type":"literal","value":"photo_filter"},{"type":"literal","value":"photo_frame"},{"type":"literal","value":"photo_library"},{"type":"literal","value":"photo_prints"},{"type":"literal","value":"photo_size_select_actual"},{"type":"literal","value":"photo_size_select_large"},{"type":"literal","value":"photo_size_select_small"},{"type":"literal","value":"php"},{"type":"literal","value":"physical_therapy"},{"type":"literal","value":"piano"},{"type":"literal","value":"piano_off"},{"type":"literal","value":"pickleball"},{"type":"literal","value":"picture_as_pdf"},{"type":"literal","value":"picture_in_picture"},{"type":"literal","value":"picture_in_picture_alt"},{"type":"literal","value":"picture_in_picture_center"},{"type":"literal","value":"picture_in_picture_large"},{"type":"literal","value":"picture_in_picture_medium"},{"type":"literal","value":"picture_in_picture_mobile"},{"type":"literal","value":"picture_in_picture_off"},{"type":"literal","value":"picture_in_picture_small"},{"type":"literal","value":"pie_chart"},{"type":"literal","value":"pie_chart_outline"},{"type":"literal","value":"pie_chart_outlined"},{"type":"literal","value":"pill_off"},{"type":"literal","value":"pin_drop"},{"type":"literal","value":"pin_end"},{"type":"literal","value":"pin_invoke"},{"type":"literal","value":"pinboard"},{"type":"literal","value":"pinboard_unread"},{"type":"literal","value":"pinch"},{"type":"literal","value":"pinch_zoom_in"},{"type":"literal","value":"pinch_zoom_out"},{"type":"literal","value":"pip_exit"},{"type":"literal","value":"pivot_table_chart"},{"type":"literal","value":"pix"},{"type":"literal","value":"place"},{"type":"literal","value":"place_item"},{"type":"literal","value":"plagiarism"},{"type":"literal","value":"plane_contrails"},{"type":"literal","value":"planet"},{"type":"literal","value":"planner_banner_ad_pt"},{"type":"literal","value":"planner_review"},{"type":"literal","value":"play_arrow"},{"type":"literal","value":"play_circle"},{"type":"literal","value":"play_circle_filled"},{"type":"literal","value":"play_circle_outline"},{"type":"literal","value":"play_disabled"},{"type":"literal","value":"play_for_work"},{"type":"literal","value":"play_lesson"},{"type":"literal","value":"play_pause"},{"type":"literal","value":"playground"},{"type":"literal","value":"playground_2"},{"type":"literal","value":"playing_cards"},{"type":"literal","value":"playlist_add"},{"type":"literal","value":"playlist_add_check"},{"type":"literal","value":"playlist_add_check_circle"},{"type":"literal","value":"playlist_add_circle"},{"type":"literal","value":"playlist_play"},{"type":"literal","value":"playlist_remove"},{"type":"literal","value":"plug_connect"},{"type":"literal","value":"plumbing"},{"type":"literal","value":"plus_one"},{"type":"literal","value":"podcasts"},{"type":"literal","value":"podiatry"},{"type":"literal","value":"podium"},{"type":"literal","value":"point_of_sale"},{"type":"literal","value":"point_scan"},{"type":"literal","value":"poker_chip"},{"type":"literal","value":"policy"},{"type":"literal","value":"policy_alert"},{"type":"literal","value":"poll"},{"type":"literal","value":"polymer"},{"type":"literal","value":"pool"},{"type":"literal","value":"portable_wifi_off"},{"type":"literal","value":"position_bottom_left"},{"type":"literal","value":"position_bottom_right"},{"type":"literal","value":"position_top_right"},{"type":"literal","value":"post"},{"type":"literal","value":"post_add"},{"type":"literal","value":"potted_plant"},{"type":"literal","value":"power_input"},{"type":"literal","value":"power_off"},{"type":"literal","value":"power_settings_circle"},{"type":"literal","value":"power_settings_new"},{"type":"literal","value":"prayer_times"},{"type":"literal","value":"precision_manufacturing"},{"type":"literal","value":"pregnancy"},{"type":"literal","value":"pregnant_woman"},{"type":"literal","value":"preliminary"},{"type":"literal","value":"prescriptions"},{"type":"literal","value":"present_to_all"},{"type":"literal","value":"preview"},{"type":"literal","value":"preview_off"},{"type":"literal","value":"price_change"},{"type":"literal","value":"price_check"},{"type":"literal","value":"print"},{"type":"literal","value":"print_add"},{"type":"literal","value":"print_connect"},{"type":"literal","value":"print_disabled"},{"type":"literal","value":"print_error"},{"type":"literal","value":"print_lock"},{"type":"literal","value":"priority"},{"type":"literal","value":"priority_high"},{"type":"literal","value":"privacy"},{"type":"literal","value":"privacy_tip"},{"type":"literal","value":"private_connectivity"},{"type":"literal","value":"problem"},{"type":"literal","value":"procedure"},{"type":"literal","value":"process_chart"},{"type":"literal","value":"production_quantity_limits"},{"type":"literal","value":"productivity"},{"type":"literal","value":"progress_activity"},{"type":"literal","value":"prompt_suggestion"},{"type":"literal","value":"propane"},{"type":"literal","value":"propane_tank"},{"type":"literal","value":"psychiatry"},{"type":"literal","value":"psychology"},{"type":"literal","value":"psychology_alt"},{"type":"literal","value":"public"},{"type":"literal","value":"public_off"},{"type":"literal","value":"publish"},{"type":"literal","value":"published_with_changes"},{"type":"literal","value":"pulmonology"},{"type":"literal","value":"pulse_alert"},{"type":"literal","value":"punch_clock"},{"type":"literal","value":"push_pin"},{"type":"literal","value":"qr_code"},{"type":"literal","value":"qr_code_2"},{"type":"literal","value":"qr_code_2_add"},{"type":"literal","value":"qr_code_scanner"},{"type":"literal","value":"query_builder"},{"type":"literal","value":"query_stats"},{"type":"literal","value":"question_answer"},{"type":"literal","value":"question_exchange"},{"type":"literal","value":"question_mark"},{"type":"literal","value":"queue"},{"type":"literal","value":"queue_music"},{"type":"literal","value":"queue_play_next"},{"type":"literal","value":"quick_phrases"},{"type":"literal","value":"quick_reference"},{"type":"literal","value":"quick_reference_all"},{"type":"literal","value":"quick_reorder"},{"type":"literal","value":"quickreply"},{"type":"literal","value":"quiz"},{"type":"literal","value":"r_mobiledata"},{"type":"literal","value":"radar"},{"type":"literal","value":"radio_button_checked"},{"type":"literal","value":"radio_button_partial"},{"type":"literal","value":"radio_button_unchecked"},{"type":"literal","value":"radiology"},{"type":"literal","value":"railway_alert"},{"type":"literal","value":"railway_alert_2"},{"type":"literal","value":"rainy"},{"type":"literal","value":"rainy_heavy"},{"type":"literal","value":"rainy_light"},{"type":"literal","value":"rainy_snow"},{"type":"literal","value":"ramen_dining"},{"type":"literal","value":"ramp_left"},{"type":"literal","value":"ramp_right"},{"type":"literal","value":"range_hood"},{"type":"literal","value":"rate_review"},{"type":"literal","value":"raven"},{"type":"literal","value":"raw_off"},{"type":"literal","value":"raw_on"},{"type":"literal","value":"read_more"},{"type":"literal","value":"readiness_score"},{"type":"literal","value":"real_estate_agent"},{"type":"literal","value":"rear_camera"},{"type":"literal","value":"rebase"},{"type":"literal","value":"rebase_edit"},{"type":"literal","value":"receipt_long"},{"type":"literal","value":"receipt_long_off"},{"type":"literal","value":"recent_actors"},{"type":"literal","value":"recent_patient"},{"type":"literal","value":"recenter"},{"type":"literal","value":"recommend"},{"type":"literal","value":"record_voice_over"},{"type":"literal","value":"recycling"},{"type":"literal","value":"redeem"},{"type":"literal","value":"redo"},{"type":"literal","value":"reduce_capacity"},{"type":"literal","value":"refresh"},{"type":"literal","value":"regular_expression"},{"type":"literal","value":"relax"},{"type":"literal","value":"release_alert"},{"type":"literal","value":"remember_me"},{"type":"literal","value":"reminder"},{"type":"literal","value":"remote_gen"},{"type":"literal","value":"remove"},{"type":"literal","value":"remove_circle"},{"type":"literal","value":"remove_circle_outline"},{"type":"literal","value":"remove_done"},{"type":"literal","value":"remove_from_queue"},{"type":"literal","value":"remove_moderator"},{"type":"literal","value":"remove_red_eye"},{"type":"literal","value":"remove_road"},{"type":"literal","value":"remove_selection"},{"type":"literal","value":"remove_shopping_cart"},{"type":"literal","value":"reopen_window"},{"type":"literal","value":"reorder"},{"type":"literal","value":"repartition"},{"type":"literal","value":"repeat_on"},{"type":"literal","value":"repeat_one"},{"type":"literal","value":"repeat_one_on"},{"type":"literal","value":"replace_audio"},{"type":"literal","value":"replace_image"},{"type":"literal","value":"replace_video"},{"type":"literal","value":"replay"},{"type":"literal","value":"replay_10"},{"type":"literal","value":"replay_30"},{"type":"literal","value":"replay_5"},{"type":"literal","value":"replay_circle_filled"},{"type":"literal","value":"reply"},{"type":"literal","value":"reply_all"},{"type":"literal","value":"report"},{"type":"literal","value":"report_gmailerrorred"},{"type":"literal","value":"report_off"},{"type":"literal","value":"report_problem"},{"type":"literal","value":"request_page"},{"type":"literal","value":"request_quote"},{"type":"literal","value":"reset_brightness"},{"type":"literal","value":"reset_exposure"},{"type":"literal","value":"reset_focus"},{"type":"literal","value":"reset_image"},{"type":"literal","value":"reset_iso"},{"type":"literal","value":"reset_settings"},{"type":"literal","value":"reset_shadow"},{"type":"literal","value":"reset_shutter_speed"},{"type":"literal","value":"reset_tv"},{"type":"literal","value":"reset_white_balance"},{"type":"literal","value":"reset_wrench"},{"type":"literal","value":"respiratory_rate"},{"type":"literal","value":"responsive_layout"},{"type":"literal","value":"rest_area"},{"type":"literal","value":"restart_alt"},{"type":"literal","value":"restaurant"},{"type":"literal","value":"restaurant_menu"},{"type":"literal","value":"restore"},{"type":"literal","value":"restore_from_trash"},{"type":"literal","value":"restore_page"},{"type":"literal","value":"resume"},{"type":"literal","value":"reviews"},{"type":"literal","value":"rewarded_ads"},{"type":"literal","value":"rheumatology"},{"type":"literal","value":"rib_cage"},{"type":"literal","value":"rice_bowl"},{"type":"literal","value":"right_click"},{"type":"literal","value":"right_panel_close"},{"type":"literal","value":"right_panel_open"},{"type":"literal","value":"ring_volume"},{"type":"literal","value":"ripples"},{"type":"literal","value":"road"},{"type":"literal","value":"robot"},{"type":"literal","value":"robot_2"},{"type":"literal","value":"rocket"},{"type":"literal","value":"rocket_launch"},{"type":"literal","value":"roller_shades"},{"type":"literal","value":"roller_shades_closed"},{"type":"literal","value":"roller_skating"},{"type":"literal","value":"roofing"},{"type":"literal","value":"room"},{"type":"literal","value":"room_preferences"},{"type":"literal","value":"room_service"},{"type":"literal","value":"rotate_90_degrees_ccw"},{"type":"literal","value":"rotate_90_degrees_cw"},{"type":"literal","value":"rotate_auto"},{"type":"literal","value":"rotate_left"},{"type":"literal","value":"rotate_right"},{"type":"literal","value":"roundabout_left"},{"type":"literal","value":"roundabout_right"},{"type":"literal","value":"rounded_corner"},{"type":"literal","value":"router_off"},{"type":"literal","value":"routine"},{"type":"literal","value":"rowing"},{"type":"literal","value":"rss_feed"},{"type":"literal","value":"rsvp"},{"type":"literal","value":"rtt"},{"type":"literal","value":"rubric"},{"type":"literal","value":"rule"},{"type":"literal","value":"rule_folder"},{"type":"literal","value":"rule_settings"},{"type":"literal","value":"run_circle"},{"type":"literal","value":"running_with_errors"},{"type":"literal","value":"rv_hookup"},{"type":"literal","value":"safety_check"},{"type":"literal","value":"safety_check_off"},{"type":"literal","value":"safety_divider"},{"type":"literal","value":"sailing"},{"type":"literal","value":"salinity"},{"type":"literal","value":"sanitizer"},{"type":"literal","value":"satellite"},{"type":"literal","value":"satellite_alt"},{"type":"literal","value":"sauna"},{"type":"literal","value":"save"},{"type":"literal","value":"save_alt"},{"type":"literal","value":"save_as"},{"type":"literal","value":"save_clock"},{"type":"literal","value":"saved_search"},{"type":"literal","value":"savings"},{"type":"literal","value":"scan"},{"type":"literal","value":"scan_delete"},{"type":"literal","value":"scatter_plot"},{"type":"literal","value":"schedule"},{"type":"literal","value":"schedule_send"},{"type":"literal","value":"schema"},{"type":"literal","value":"school"},{"type":"literal","value":"science"},{"type":"literal","value":"science_off"},{"type":"literal","value":"score"},{"type":"literal","value":"scoreboard"},{"type":"literal","value":"screen_lock_landscape"},{"type":"literal","value":"screen_lock_portrait"},{"type":"literal","value":"screen_lock_rotation"},{"type":"literal","value":"screen_record"},{"type":"literal","value":"screen_rotation"},{"type":"literal","value":"screen_rotation_alt"},{"type":"literal","value":"screen_rotation_up"},{"type":"literal","value":"screen_search_desktop"},{"type":"literal","value":"screen_share"},{"type":"literal","value":"screenshot"},{"type":"literal","value":"screenshot_frame"},{"type":"literal","value":"screenshot_frame_2"},{"type":"literal","value":"screenshot_keyboard"},{"type":"literal","value":"screenshot_monitor"},{"type":"literal","value":"screenshot_region"},{"type":"literal","value":"screenshot_tablet"},{"type":"literal","value":"scrollable_header"},{"type":"literal","value":"scuba_diving"},{"type":"literal","value":"sd"},{"type":"literal","value":"sd_card"},{"type":"literal","value":"sd_card_alert"},{"type":"literal","value":"sd_storage"},{"type":"literal","value":"sdk"},{"type":"literal","value":"search_activity"},{"type":"literal","value":"search_check"},{"type":"literal","value":"search_check_2"},{"type":"literal","value":"search_gear"},{"type":"literal","value":"search_hands_free"},{"type":"literal","value":"search_insights"},{"type":"literal","value":"search_off"},{"type":"literal","value":"seat_cool_left"},{"type":"literal","value":"seat_cool_right"},{"type":"literal","value":"seat_heat_left"},{"type":"literal","value":"seat_heat_right"},{"type":"literal","value":"seat_vent_left"},{"type":"literal","value":"seat_vent_right"},{"type":"literal","value":"security_key"},{"type":"literal","value":"security_update"},{"type":"literal","value":"security_update_good"},{"type":"literal","value":"security_update_warning"},{"type":"literal","value":"select_all"},{"type":"literal","value":"select_check_box"},{"type":"literal","value":"select_to_speak"},{"type":"literal","value":"select_window"},{"type":"literal","value":"select_window_2"},{"type":"literal","value":"select_window_off"},{"type":"literal","value":"self_care"},{"type":"literal","value":"self_improvement"},{"type":"literal","value":"sell"},{"type":"literal","value":"send_and_archive"},{"type":"literal","value":"send_money"},{"type":"literal","value":"send_time_extension"},{"type":"literal","value":"send_to_mobile"},{"type":"literal","value":"sensor_door"},{"type":"literal","value":"sensor_occupied"},{"type":"literal","value":"sensor_window"},{"type":"literal","value":"sensors"},{"type":"literal","value":"sensors_krx"},{"type":"literal","value":"sensors_krx_off"},{"type":"literal","value":"sensors_off"},{"type":"literal","value":"sentiment_calm"},{"type":"literal","value":"sentiment_content"},{"type":"literal","value":"sentiment_dissatisfied"},{"type":"literal","value":"sentiment_excited"},{"type":"literal","value":"sentiment_extremely_dissatisfied"},{"type":"literal","value":"sentiment_frustrated"},{"type":"literal","value":"sentiment_neutral"},{"type":"literal","value":"sentiment_sad"},{"type":"literal","value":"sentiment_satisfied"},{"type":"literal","value":"sentiment_satisfied_alt"},{"type":"literal","value":"sentiment_stressed"},{"type":"literal","value":"sentiment_very_dissatisfied"},{"type":"literal","value":"sentiment_very_satisfied"},{"type":"literal","value":"sentiment_worried"},{"type":"literal","value":"serif"},{"type":"literal","value":"server_person"},{"type":"literal","value":"service_toolbox"},{"type":"literal","value":"set_meal"},{"type":"literal","value":"settings"},{"type":"literal","value":"settings_accessibility"},{"type":"literal","value":"settings_account_box"},{"type":"literal","value":"settings_alert"},{"type":"literal","value":"settings_applications"},{"type":"literal","value":"settings_b_roll"},{"type":"literal","value":"settings_backup_restore"},{"type":"literal","value":"settings_bluetooth"},{"type":"literal","value":"settings_brightness"},{"type":"literal","value":"settings_cell"},{"type":"literal","value":"settings_cinematic_blur"},{"type":"literal","value":"settings_ethernet"},{"type":"literal","value":"settings_heart"},{"type":"literal","value":"settings_input_antenna"},{"type":"literal","value":"settings_input_component"},{"type":"literal","value":"settings_input_composite"},{"type":"literal","value":"settings_input_hdmi"},{"type":"literal","value":"settings_input_svideo"},{"type":"literal","value":"settings_motion_mode"},{"type":"literal","value":"settings_night_sight"},{"type":"literal","value":"settings_overscan"},{"type":"literal","value":"settings_panorama"},{"type":"literal","value":"settings_phone"},{"type":"literal","value":"settings_photo_camera"},{"type":"literal","value":"settings_power"},{"type":"literal","value":"settings_remote"},{"type":"literal","value":"settings_seating"},{"type":"literal","value":"settings_slow_motion"},{"type":"literal","value":"settings_suggest"},{"type":"literal","value":"settings_system_daydream"},{"type":"literal","value":"settings_timelapse"},{"type":"literal","value":"settings_video_camera"},{"type":"literal","value":"settings_voice"},{"type":"literal","value":"settop_component"},{"type":"literal","value":"severe_cold"},{"type":"literal","value":"shadow_add"},{"type":"literal","value":"shadow_minus"},{"type":"literal","value":"shape_line"},{"type":"literal","value":"shapes"},{"type":"literal","value":"share"},{"type":"literal","value":"share_eta"},{"type":"literal","value":"share_location"},{"type":"literal","value":"share_off"},{"type":"literal","value":"share_reviews"},{"type":"literal","value":"share_windows"},{"type":"literal","value":"shaved_ice"},{"type":"literal","value":"sheets_rtl"},{"type":"literal","value":"shelf_auto_hide"},{"type":"literal","value":"shelf_position"},{"type":"literal","value":"shelves"},{"type":"literal","value":"shield_lock"},{"type":"literal","value":"shield_locked"},{"type":"literal","value":"shield_moon"},{"type":"literal","value":"shield_person"},{"type":"literal","value":"shield_question"},{"type":"literal","value":"shield_toggle"},{"type":"literal","value":"shield_watch"},{"type":"literal","value":"shield_with_heart"},{"type":"literal","value":"shield_with_house"},{"type":"literal","value":"shift_lock"},{"type":"literal","value":"shift_lock_off"},{"type":"literal","value":"shop"},{"type":"literal","value":"shop_2"},{"type":"literal","value":"shop_two"},{"type":"literal","value":"shopping_bag"},{"type":"literal","value":"shopping_bag_speed"},{"type":"literal","value":"shopping_basket"},{"type":"literal","value":"shopping_cart"},{"type":"literal","value":"shopping_cart_checkout"},{"type":"literal","value":"shopping_cart_off"},{"type":"literal","value":"shoppingmode"},{"type":"literal","value":"short_stay"},{"type":"literal","value":"short_text"},{"type":"literal","value":"shortcut"},{"type":"literal","value":"show_chart"},{"type":"literal","value":"shuffle_on"},{"type":"literal","value":"shutter_speed"},{"type":"literal","value":"shutter_speed_add"},{"type":"literal","value":"shutter_speed_minus"},{"type":"literal","value":"sick"},{"type":"literal","value":"side_navigation"},{"type":"literal","value":"sign_language"},{"type":"literal","value":"signal_cellular_0_bar"},{"type":"literal","value":"signal_cellular_1_bar"},{"type":"literal","value":"signal_cellular_2_bar"},{"type":"literal","value":"signal_cellular_3_bar"},{"type":"literal","value":"signal_cellular_4_bar"},{"type":"literal","value":"signal_cellular_add"},{"type":"literal","value":"signal_cellular_alt"},{"type":"literal","value":"signal_cellular_alt_1_bar"},{"type":"literal","value":"signal_cellular_alt_2_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_0_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_1_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_2_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_3_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_4_bar"},{"type":"literal","value":"signal_cellular_no_sim"},{"type":"literal","value":"signal_cellular_nodata"},{"type":"literal","value":"signal_cellular_null"},{"type":"literal","value":"signal_cellular_off"},{"type":"literal","value":"signal_cellular_pause"},{"type":"literal","value":"signal_disconnected"},{"type":"literal","value":"signal_wifi_0_bar"},{"type":"literal","value":"signal_wifi_1_bar"},{"type":"literal","value":"signal_wifi_1_bar_lock"},{"type":"literal","value":"signal_wifi_2_bar"},{"type":"literal","value":"signal_wifi_2_bar_lock"},{"type":"literal","value":"signal_wifi_3_bar"},{"type":"literal","value":"signal_wifi_3_bar_lock"},{"type":"literal","value":"signal_wifi_4_bar"},{"type":"literal","value":"signal_wifi_4_bar_lock"},{"type":"literal","value":"signal_wifi_bad"},{"type":"literal","value":"signal_wifi_connected_no_internet_0"},{"type":"literal","value":"signal_wifi_connected_no_internet_1"},{"type":"literal","value":"signal_wifi_connected_no_internet_2"},{"type":"literal","value":"signal_wifi_connected_no_internet_3"},{"type":"literal","value":"signal_wifi_connected_no_internet_4"},{"type":"literal","value":"signal_wifi_off"},{"type":"literal","value":"signal_wifi_statusbar_1_bar"},{"type":"literal","value":"signal_wifi_statusbar_2_bar"},{"type":"literal","value":"signal_wifi_statusbar_3_bar"},{"type":"literal","value":"signal_wifi_statusbar_4_bar"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_1"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_2"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_3"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_4"},{"type":"literal","value":"signal_wifi_statusbar_not_connected"},{"type":"literal","value":"signal_wifi_statusbar_null"},{"type":"literal","value":"signpost"},{"type":"literal","value":"sim_card"},{"type":"literal","value":"sim_card_alert"},{"type":"literal","value":"sim_card_download"},{"type":"literal","value":"simulation"},{"type":"literal","value":"single_bed"},{"type":"literal","value":"sip"},{"type":"literal","value":"siren"},{"type":"literal","value":"siren_check"},{"type":"literal","value":"siren_open"},{"type":"literal","value":"siren_question"},{"type":"literal","value":"skateboarding"},{"type":"literal","value":"skeleton"},{"type":"literal","value":"skillet"},{"type":"literal","value":"skillet_cooktop"},{"type":"literal","value":"skip_next"},{"type":"literal","value":"skip_previous"},{"type":"literal","value":"skull"},{"type":"literal","value":"skull_list"},{"type":"literal","value":"slab_serif"},{"type":"literal","value":"sledding"},{"type":"literal","value":"sleep_score"},{"type":"literal","value":"slide_library"},{"type":"literal","value":"sliders"},{"type":"literal","value":"slideshow"},{"type":"literal","value":"slow_motion_video"},{"type":"literal","value":"smart_button"},{"type":"literal","value":"smart_card_reader"},{"type":"literal","value":"smart_card_reader_off"},{"type":"literal","value":"smart_display"},{"type":"literal","value":"smart_outlet"},{"type":"literal","value":"smart_screen"},{"type":"literal","value":"smart_toy"},{"type":"literal","value":"smb_share"},{"type":"literal","value":"smoke_free"},{"type":"literal","value":"smoking_rooms"},{"type":"literal","value":"sms"},{"type":"literal","value":"sms_failed"},{"type":"literal","value":"snippet_folder"},{"type":"literal","value":"snooze"},{"type":"literal","value":"snowboarding"},{"type":"literal","value":"snowing"},{"type":"literal","value":"snowing_heavy"},{"type":"literal","value":"snowmobile"},{"type":"literal","value":"snowshoeing"},{"type":"literal","value":"soap"},{"type":"literal","value":"soba"},{"type":"literal","value":"social_distance"},{"type":"literal","value":"social_leaderboard"},{"type":"literal","value":"solar_power"},{"type":"literal","value":"solo_dining"},{"type":"literal","value":"sort_by_alpha"},{"type":"literal","value":"sound_detection_dog_barking"},{"type":"literal","value":"sound_detection_glass_break"},{"type":"literal","value":"sound_detection_loud_sound"},{"type":"literal","value":"sound_sampler"},{"type":"literal","value":"soup_kitchen"},{"type":"literal","value":"source_environment"},{"type":"literal","value":"source_notes"},{"type":"literal","value":"south"},{"type":"literal","value":"south_america"},{"type":"literal","value":"south_east"},{"type":"literal","value":"south_west"},{"type":"literal","value":"spa"},{"type":"literal","value":"space_bar"},{"type":"literal","value":"space_dashboard"},{"type":"literal","value":"spatial_audio"},{"type":"literal","value":"spatial_audio_off"},{"type":"literal","value":"spatial_speaker"},{"type":"literal","value":"spatial_tracking"},{"type":"literal","value":"speaker_group"},{"type":"literal","value":"speaker_notes"},{"type":"literal","value":"speaker_notes_off"},{"type":"literal","value":"speaker_phone"},{"type":"literal","value":"special_character"},{"type":"literal","value":"specific_gravity"},{"type":"literal","value":"speech_to_text"},{"type":"literal","value":"speed_0_25"},{"type":"literal","value":"speed_0_2x"},{"type":"literal","value":"speed_0_5"},{"type":"literal","value":"speed_0_5x"},{"type":"literal","value":"speed_0_75"},{"type":"literal","value":"speed_0_7x"},{"type":"literal","value":"speed_1_2"},{"type":"literal","value":"speed_1_25"},{"type":"literal","value":"speed_1_2x"},{"type":"literal","value":"speed_1_5"},{"type":"literal","value":"speed_1_5x"},{"type":"literal","value":"speed_1_75"},{"type":"literal","value":"speed_1_7x"},{"type":"literal","value":"speed_2x"},{"type":"literal","value":"speed_camera"},{"type":"literal","value":"spellcheck"},{"type":"literal","value":"split_scene"},{"type":"literal","value":"split_scene_down"},{"type":"literal","value":"split_scene_left"},{"type":"literal","value":"split_scene_right"},{"type":"literal","value":"split_scene_up"},{"type":"literal","value":"splitscreen"},{"type":"literal","value":"splitscreen_add"},{"type":"literal","value":"splitscreen_bottom"},{"type":"literal","value":"splitscreen_landscape"},{"type":"literal","value":"splitscreen_left"},{"type":"literal","value":"splitscreen_portrait"},{"type":"literal","value":"splitscreen_right"},{"type":"literal","value":"splitscreen_top"},{"type":"literal","value":"splitscreen_vertical_add"},{"type":"literal","value":"spo2"},{"type":"literal","value":"spoke"},{"type":"literal","value":"sports"},{"type":"literal","value":"sports_and_outdoors"},{"type":"literal","value":"sports_bar"},{"type":"literal","value":"sports_baseball"},{"type":"literal","value":"sports_basketball"},{"type":"literal","value":"sports_cricket"},{"type":"literal","value":"sports_esports"},{"type":"literal","value":"sports_football"},{"type":"literal","value":"sports_golf"},{"type":"literal","value":"sports_gymnastics"},{"type":"literal","value":"sports_handball"},{"type":"literal","value":"sports_hockey"},{"type":"literal","value":"sports_kabaddi"},{"type":"literal","value":"sports_martial_arts"},{"type":"literal","value":"sports_mma"},{"type":"literal","value":"sports_motorsports"},{"type":"literal","value":"sports_rugby"},{"type":"literal","value":"sports_score"},{"type":"literal","value":"sports_soccer"},{"type":"literal","value":"sports_tennis"},{"type":"literal","value":"sports_volleyball"},{"type":"literal","value":"sprint"},{"type":"literal","value":"square_dot"},{"type":"literal","value":"square_foot"},{"type":"literal","value":"ssid_chart"},{"type":"literal","value":"stack_group"},{"type":"literal","value":"stack_hexagon"},{"type":"literal","value":"stack_off"},{"type":"literal","value":"stack_star"},{"type":"literal","value":"stacked_bar_chart"},{"type":"literal","value":"stacked_email"},{"type":"literal","value":"stacked_inbox"},{"type":"literal","value":"stacked_line_chart"},{"type":"literal","value":"stacks"},{"type":"literal","value":"stadia_controller"},{"type":"literal","value":"stadium"},{"type":"literal","value":"stairs_2"},{"type":"literal","value":"star_border"},{"type":"literal","value":"star_border_purple500"},{"type":"literal","value":"star_half"},{"type":"literal","value":"star_outline"},{"type":"literal","value":"star_purple500"},{"type":"literal","value":"star_rate"},{"type":"literal","value":"star_rate_half"},{"type":"literal","value":"star_shine"},{"type":"literal","value":"stars"},{"type":"literal","value":"stars_2"},{"type":"literal","value":"stat_0"},{"type":"literal","value":"stat_1"},{"type":"literal","value":"stat_2"},{"type":"literal","value":"stat_3"},{"type":"literal","value":"stat_minus_1"},{"type":"literal","value":"stat_minus_2"},{"type":"literal","value":"stat_minus_3"},{"type":"literal","value":"stay_current_landscape"},{"type":"literal","value":"stay_current_portrait"},{"type":"literal","value":"stay_primary_landscape"},{"type":"literal","value":"stay_primary_portrait"},{"type":"literal","value":"steering_wheel_heat"},{"type":"literal","value":"step_into"},{"type":"literal","value":"step_out"},{"type":"literal","value":"step_over"},{"type":"literal","value":"steppers"},{"type":"literal","value":"steps"},{"type":"literal","value":"stethoscope_arrow"},{"type":"literal","value":"stethoscope_check"},{"type":"literal","value":"sticky_note"},{"type":"literal","value":"sticky_note_2"},{"type":"literal","value":"stock_media"},{"type":"literal","value":"stockpot"},{"type":"literal","value":"stop_circle"},{"type":"literal","value":"stop_screen_share"},{"type":"literal","value":"store"},{"type":"literal","value":"store_mall_directory"},{"type":"literal","value":"storm"},{"type":"literal","value":"straight"},{"type":"literal","value":"straighten"},{"type":"literal","value":"strategy"},{"type":"literal","value":"stream"},{"type":"literal","value":"streetview"},{"type":"literal","value":"stress_management"},{"type":"literal","value":"strikethrough_s"},{"type":"literal","value":"stroke_full"},{"type":"literal","value":"stroke_partial"},{"type":"literal","value":"styler"},{"type":"literal","value":"stylus"},{"type":"literal","value":"stylus_brush"},{"type":"literal","value":"stylus_fountain_pen"},{"type":"literal","value":"stylus_highlighter"},{"type":"literal","value":"stylus_laser_pointer"},{"type":"literal","value":"stylus_note"},{"type":"literal","value":"stylus_pen"},{"type":"literal","value":"stylus_pencil"},{"type":"literal","value":"subdirectory_arrow_left"},{"type":"literal","value":"subdirectory_arrow_right"},{"type":"literal","value":"subheader"},{"type":"literal","value":"subject"},{"type":"literal","value":"subscript"},{"type":"literal","value":"subscriptions"},{"type":"literal","value":"subtitles"},{"type":"literal","value":"subtitles_gear"},{"type":"literal","value":"subtitles_off"},{"type":"literal","value":"subway"},{"type":"literal","value":"subway_walk"},{"type":"literal","value":"summarize"},{"type":"literal","value":"sunny"},{"type":"literal","value":"sunny_snowing"},{"type":"literal","value":"superscript"},{"type":"literal","value":"supervised_user_circle"},{"type":"literal","value":"supervised_user_circle_off"},{"type":"literal","value":"supervisor_account"},{"type":"literal","value":"support"},{"type":"literal","value":"support_agent"},{"type":"literal","value":"surfing"},{"type":"literal","value":"surgical"},{"type":"literal","value":"surround_sound"},{"type":"literal","value":"swap_calls"},{"type":"literal","value":"swap_driving_apps"},{"type":"literal","value":"swap_driving_apps_wheel"},{"type":"literal","value":"swap_horiz"},{"type":"literal","value":"swap_horizontal_circle"},{"type":"literal","value":"swap_vert"},{"type":"literal","value":"swap_vertical_circle"},{"type":"literal","value":"sweep"},{"type":"literal","value":"swipe"},{"type":"literal","value":"swipe_down"},{"type":"literal","value":"swipe_down_alt"},{"type":"literal","value":"swipe_left"},{"type":"literal","value":"swipe_left_alt"},{"type":"literal","value":"swipe_right"},{"type":"literal","value":"swipe_right_alt"},{"type":"literal","value":"swipe_up"},{"type":"literal","value":"swipe_up_alt"},{"type":"literal","value":"swipe_vertical"},{"type":"literal","value":"switch_access"},{"type":"literal","value":"switch_access_2"},{"type":"literal","value":"switch_access_3"},{"type":"literal","value":"switch_access_shortcut"},{"type":"literal","value":"switch_access_shortcut_add"},{"type":"literal","value":"switch_account"},{"type":"literal","value":"switch_camera"},{"type":"literal","value":"switch_left"},{"type":"literal","value":"switch_right"},{"type":"literal","value":"switch_video"},{"type":"literal","value":"switches"},{"type":"literal","value":"sword_rose"},{"type":"literal","value":"swords"},{"type":"literal","value":"symptoms"},{"type":"literal","value":"synagogue"},{"type":"literal","value":"sync_alt"},{"type":"literal","value":"sync_arrow_down"},{"type":"literal","value":"sync_arrow_up"},{"type":"literal","value":"sync_desktop"},{"type":"literal","value":"sync_disabled"},{"type":"literal","value":"sync_lock"},{"type":"literal","value":"sync_problem"},{"type":"literal","value":"sync_saved_locally"},{"type":"literal","value":"sync_saved_locally_off"},{"type":"literal","value":"system_security_update"},{"type":"literal","value":"system_security_update_good"},{"type":"literal","value":"system_security_update_warning"},{"type":"literal","value":"system_update"},{"type":"literal","value":"system_update_alt"},{"type":"literal","value":"tab_close"},{"type":"literal","value":"tab_close_inactive"},{"type":"literal","value":"tab_close_right"},{"type":"literal","value":"tab_duplicate"},{"type":"literal","value":"tab_group"},{"type":"literal","value":"tab_inactive"},{"type":"literal","value":"tab_move"},{"type":"literal","value":"tab_new_right"},{"type":"literal","value":"tab_recent"},{"type":"literal","value":"tab_search"},{"type":"literal","value":"tab_unselected"},{"type":"literal","value":"table_bar"},{"type":"literal","value":"table_chart"},{"type":"literal","value":"table_chart_view"},{"type":"literal","value":"table_convert"},{"type":"literal","value":"table_edit"},{"type":"literal","value":"table_eye"},{"type":"literal","value":"table_lamp"},{"type":"literal","value":"table_large"},{"type":"literal","value":"table_restaurant"},{"type":"literal","value":"table_rows"},{"type":"literal","value":"table_rows_narrow"},{"type":"literal","value":"table_sign"},{"type":"literal","value":"table_view"},{"type":"literal","value":"tablet"},{"type":"literal","value":"tablet_android"},{"type":"literal","value":"tablet_camera"},{"type":"literal","value":"tablet_mac"},{"type":"literal","value":"tactic"},{"type":"literal","value":"tag_faces"},{"type":"literal","value":"takeout_dining"},{"type":"literal","value":"takeout_dining_2"},{"type":"literal","value":"tamper_detection_off"},{"type":"literal","value":"tamper_detection_on"},{"type":"literal","value":"tap_and_play"},{"type":"literal","value":"tapas"},{"type":"literal","value":"task"},{"type":"literal","value":"task_alt"},{"type":"literal","value":"tatami_seat"},{"type":"literal","value":"taunt"},{"type":"literal","value":"taxi_alert"},{"type":"literal","value":"team_dashboard"},{"type":"literal","value":"temp_preferences_eco"},{"type":"literal","value":"temple_buddhist"},{"type":"literal","value":"temple_hindu"},{"type":"literal","value":"tenancy"},{"type":"literal","value":"terrain"},{"type":"literal","value":"text_ad"},{"type":"literal","value":"text_compare"},{"type":"literal","value":"text_decrease"},{"type":"literal","value":"text_fields"},{"type":"literal","value":"text_fields_alt"},{"type":"literal","value":"text_format"},{"type":"literal","value":"text_increase"},{"type":"literal","value":"text_rotate_up"},{"type":"literal","value":"text_rotate_vertical"},{"type":"literal","value":"text_rotation_angledown"},{"type":"literal","value":"text_rotation_angleup"},{"type":"literal","value":"text_rotation_down"},{"type":"literal","value":"text_rotation_none"},{"type":"literal","value":"text_select_end"},{"type":"literal","value":"text_select_jump_to_beginning"},{"type":"literal","value":"text_select_jump_to_end"},{"type":"literal","value":"text_select_move_back_character"},{"type":"literal","value":"text_select_move_back_word"},{"type":"literal","value":"text_select_move_down"},{"type":"literal","value":"text_select_move_forward_character"},{"type":"literal","value":"text_select_move_forward_word"},{"type":"literal","value":"text_select_move_up"},{"type":"literal","value":"text_select_start"},{"type":"literal","value":"text_snippet"},{"type":"literal","value":"text_to_speech"},{"type":"literal","value":"text_up"},{"type":"literal","value":"textsms"},{"type":"literal","value":"texture"},{"type":"literal","value":"texture_add"},{"type":"literal","value":"texture_minus"},{"type":"literal","value":"theater_comedy"},{"type":"literal","value":"theaters"},{"type":"literal","value":"thermometer_add"},{"type":"literal","value":"thermometer_gain"},{"type":"literal","value":"thermometer_loss"},{"type":"literal","value":"thermometer_minus"},{"type":"literal","value":"thermostat"},{"type":"literal","value":"thermostat_arrow_down"},{"type":"literal","value":"thermostat_arrow_up"},{"type":"literal","value":"thermostat_auto"},{"type":"literal","value":"thermostat_carbon"},{"type":"literal","value":"things_to_do"},{"type":"literal","value":"thread_unread"},{"type":"literal","value":"threat_intelligence"},{"type":"literal","value":"thumb_down"},{"type":"literal","value":"thumb_down_alt"},{"type":"literal","value":"thumb_down_off_alt"},{"type":"literal","value":"thumb_up"},{"type":"literal","value":"thumb_up_alt"},{"type":"literal","value":"thumb_up_off_alt"},{"type":"literal","value":"thumbnail_bar"},{"type":"literal","value":"thumbs_up_double"},{"type":"literal","value":"thumbs_up_down"},{"type":"literal","value":"thunderstorm"},{"type":"literal","value":"tibia"},{"type":"literal","value":"tibia_alt"},{"type":"literal","value":"tile_large"},{"type":"literal","value":"tile_medium"},{"type":"literal","value":"tile_small"},{"type":"literal","value":"time_auto"},{"type":"literal","value":"time_to_leave"},{"type":"literal","value":"timeline"},{"type":"literal","value":"timer_1"},{"type":"literal","value":"timer_10"},{"type":"literal","value":"timer_10_alt_1"},{"type":"literal","value":"timer_10_select"},{"type":"literal","value":"timer_2"},{"type":"literal","value":"timer_3"},{"type":"literal","value":"timer_3_alt_1"},{"type":"literal","value":"timer_3_select"},{"type":"literal","value":"timer_5"},{"type":"literal","value":"timer_5_shutter"},{"type":"literal","value":"timer_arrow_down"},{"type":"literal","value":"timer_arrow_up"},{"type":"literal","value":"timer_off"},{"type":"literal","value":"timer_pause"},{"type":"literal","value":"timer_play"},{"type":"literal","value":"tips_and_updates"},{"type":"literal","value":"tire_repair"},{"type":"literal","value":"titlecase"},{"type":"literal","value":"toc"},{"type":"literal","value":"today"},{"type":"literal","value":"toggle_off"},{"type":"literal","value":"toggle_on"},{"type":"literal","value":"token"},{"type":"literal","value":"toll"},{"type":"literal","value":"tonality"},{"type":"literal","value":"tonality_2"},{"type":"literal","value":"tools_flat_head"},{"type":"literal","value":"tools_installation_kit"},{"type":"literal","value":"tools_ladder"},{"type":"literal","value":"tools_level"},{"type":"literal","value":"tools_phillips"},{"type":"literal","value":"tools_pliers_wire_stripper"},{"type":"literal","value":"tools_power_drill"},{"type":"literal","value":"tooltip_2"},{"type":"literal","value":"top_panel_close"},{"type":"literal","value":"top_panel_open"},{"type":"literal","value":"topic"},{"type":"literal","value":"total_dissolved_solids"},{"type":"literal","value":"touch_app"},{"type":"literal","value":"touch_double"},{"type":"literal","value":"touch_long"},{"type":"literal","value":"touch_triple"},{"type":"literal","value":"touchpad_mouse"},{"type":"literal","value":"touchpad_mouse_off"},{"type":"literal","value":"tour"},{"type":"literal","value":"toys"},{"type":"literal","value":"toys_and_games"},{"type":"literal","value":"toys_fan"},{"type":"literal","value":"track_changes"},{"type":"literal","value":"trackpad_input"},{"type":"literal","value":"trackpad_input_2"},{"type":"literal","value":"trackpad_input_3"},{"type":"literal","value":"traffic"},{"type":"literal","value":"traffic_jam"},{"type":"literal","value":"trail_length"},{"type":"literal","value":"trail_length_medium"},{"type":"literal","value":"trail_length_short"},{"type":"literal","value":"train"},{"type":"literal","value":"transcribe"},{"type":"literal","value":"transfer_within_a_station"},{"type":"literal","value":"transgender"},{"type":"literal","value":"transit_enterexit"},{"type":"literal","value":"transit_ticket"},{"type":"literal","value":"transition_chop"},{"type":"literal","value":"transition_dissolve"},{"type":"literal","value":"transition_fade"},{"type":"literal","value":"transition_push"},{"type":"literal","value":"transition_slide"},{"type":"literal","value":"translate_indic"},{"type":"literal","value":"transportation"},{"type":"literal","value":"travel"},{"type":"literal","value":"travel_explore"},{"type":"literal","value":"travel_luggage_and_bags"},{"type":"literal","value":"trending_down"},{"type":"literal","value":"trending_flat"},{"type":"literal","value":"trending_up"},{"type":"literal","value":"trip"},{"type":"literal","value":"trip_origin"},{"type":"literal","value":"trolley"},{"type":"literal","value":"trolley_cable_car"},{"type":"literal","value":"troubleshoot"},{"type":"literal","value":"try"},{"type":"literal","value":"tsunami"},{"type":"literal","value":"tsv"},{"type":"literal","value":"tty"},{"type":"literal","value":"tune"},{"type":"literal","value":"tungsten"},{"type":"literal","value":"turn_left"},{"type":"literal","value":"turn_right"},{"type":"literal","value":"turn_sharp_left"},{"type":"literal","value":"turn_sharp_right"},{"type":"literal","value":"turn_slight_left"},{"type":"literal","value":"turn_slight_right"},{"type":"literal","value":"turned_in"},{"type":"literal","value":"turned_in_not"},{"type":"literal","value":"tv_displays"},{"type":"literal","value":"tv_gen"},{"type":"literal","value":"tv_guide"},{"type":"literal","value":"tv_next"},{"type":"literal","value":"tv_off"},{"type":"literal","value":"tv_options_edit_channels"},{"type":"literal","value":"tv_options_input_settings"},{"type":"literal","value":"tv_remote"},{"type":"literal","value":"tv_signin"},{"type":"literal","value":"tv_with_assistant"},{"type":"literal","value":"two_pager"},{"type":"literal","value":"two_pager_store"},{"type":"literal","value":"two_wheeler"},{"type":"literal","value":"type_specimen"},{"type":"literal","value":"u_turn_left"},{"type":"literal","value":"u_turn_right"},{"type":"literal","value":"udon"},{"type":"literal","value":"ulna_radius"},{"type":"literal","value":"ulna_radius_alt"},{"type":"literal","value":"unarchive"},{"type":"literal","value":"undo"},{"type":"literal","value":"unfold_less"},{"type":"literal","value":"unfold_less_double"},{"type":"literal","value":"unfold_more"},{"type":"literal","value":"unfold_more_double"},{"type":"literal","value":"ungroup"},{"type":"literal","value":"universal_currency"},{"type":"literal","value":"universal_currency_alt"},{"type":"literal","value":"universal_local"},{"type":"literal","value":"unknown_2"},{"type":"literal","value":"unknown_5"},{"type":"literal","value":"unknown_7"},{"type":"literal","value":"unknown_document"},{"type":"literal","value":"unknown_med"},{"type":"literal","value":"unlicense"},{"type":"literal","value":"unpaved_road"},{"type":"literal","value":"unpublished"},{"type":"literal","value":"unsubscribe"},{"type":"literal","value":"upcoming"},{"type":"literal","value":"update"},{"type":"literal","value":"update_disabled"},{"type":"literal","value":"upgrade"},{"type":"literal","value":"upi_pay"},{"type":"literal","value":"upload"},{"type":"literal","value":"upload_2"},{"type":"literal","value":"upload_file"},{"type":"literal","value":"urology"},{"type":"literal","value":"usb"},{"type":"literal","value":"usb_off"},{"type":"literal","value":"user_attributes"},{"type":"literal","value":"vaccines"},{"type":"literal","value":"vacuum"},{"type":"literal","value":"valve"},{"type":"literal","value":"vape_free"},{"type":"literal","value":"vaping_rooms"},{"type":"literal","value":"variable_add"},{"type":"literal","value":"variable_insert"},{"type":"literal","value":"variable_remove"},{"type":"literal","value":"variables"},{"type":"literal","value":"ventilator"},{"type":"literal","value":"verified"},{"type":"literal","value":"verified_off"},{"type":"literal","value":"verified_user"},{"type":"literal","value":"vertical_align_bottom"},{"type":"literal","value":"vertical_align_center"},{"type":"literal","value":"vertical_align_top"},{"type":"literal","value":"vertical_distribute"},{"type":"literal","value":"vertical_shades"},{"type":"literal","value":"vertical_shades_closed"},{"type":"literal","value":"vertical_split"},{"type":"literal","value":"vibration"},{"type":"literal","value":"video_call"},{"type":"literal","value":"video_camera_back"},{"type":"literal","value":"video_camera_back_add"},{"type":"literal","value":"video_camera_front"},{"type":"literal","value":"video_camera_front_off"},{"type":"literal","value":"video_chat"},{"type":"literal","value":"video_file"},{"type":"literal","value":"video_label"},{"type":"literal","value":"video_library"},{"type":"literal","value":"video_search"},{"type":"literal","value":"video_settings"},{"type":"literal","value":"video_stable"},{"type":"literal","value":"videocam"},{"type":"literal","value":"videocam_alert"},{"type":"literal","value":"videocam_off"},{"type":"literal","value":"videogame_asset"},{"type":"literal","value":"videogame_asset_off"},{"type":"literal","value":"view_agenda"},{"type":"literal","value":"view_apps"},{"type":"literal","value":"view_array"},{"type":"literal","value":"view_carousel"},{"type":"literal","value":"view_column"},{"type":"literal","value":"view_column_2"},{"type":"literal","value":"view_comfy"},{"type":"literal","value":"view_comfy_alt"},{"type":"literal","value":"view_compact"},{"type":"literal","value":"view_compact_alt"},{"type":"literal","value":"view_cozy"},{"type":"literal","value":"view_day"},{"type":"literal","value":"view_headline"},{"type":"literal","value":"view_in_ar"},{"type":"literal","value":"view_in_ar_off"},{"type":"literal","value":"view_kanban"},{"type":"literal","value":"view_list"},{"type":"literal","value":"view_module"},{"type":"literal","value":"view_object_track"},{"type":"literal","value":"view_quilt"},{"type":"literal","value":"view_real_size"},{"type":"literal","value":"view_sidebar"},{"type":"literal","value":"view_stream"},{"type":"literal","value":"view_timeline"},{"type":"literal","value":"view_week"},{"type":"literal","value":"vignette"},{"type":"literal","value":"vignette_2"},{"type":"literal","value":"villa"},{"type":"literal","value":"visibility_lock"},{"type":"literal","value":"visibility_off"},{"type":"literal","value":"vital_signs"},{"type":"literal","value":"vo2_max"},{"type":"literal","value":"voice_chat"},{"type":"literal","value":"voice_over_off"},{"type":"literal","value":"voice_selection"},{"type":"literal","value":"voice_selection_off"},{"type":"literal","value":"voicemail"},{"type":"literal","value":"voicemail_2"},{"type":"literal","value":"volcano"},{"type":"literal","value":"volume_down"},{"type":"literal","value":"volume_down_alt"},{"type":"literal","value":"volume_mute"},{"type":"literal","value":"volume_off"},{"type":"literal","value":"volume_up"},{"type":"literal","value":"volunteer_activism"},{"type":"literal","value":"voting_chip"},{"type":"literal","value":"vpn_key"},{"type":"literal","value":"vpn_key_alert"},{"type":"literal","value":"vpn_key_off"},{"type":"literal","value":"vpn_lock"},{"type":"literal","value":"vpn_lock_2"},{"type":"literal","value":"vr180_create2d"},{"type":"literal","value":"vr180_create2d_off"},{"type":"literal","value":"vrpano"},{"type":"literal","value":"wall_art"},{"type":"literal","value":"wall_lamp"},{"type":"literal","value":"wallet"},{"type":"literal","value":"wallpaper"},{"type":"literal","value":"wallpaper_slideshow"},{"type":"literal","value":"wand_shine"},{"type":"literal","value":"wand_stars"},{"type":"literal","value":"ward"},{"type":"literal","value":"warehouse"},{"type":"literal","value":"warning_amber"},{"type":"literal","value":"warning_off"},{"type":"literal","value":"wash"},{"type":"literal","value":"washoku"},{"type":"literal","value":"watch"},{"type":"literal","value":"watch_arrow"},{"type":"literal","value":"watch_button_press"},{"type":"literal","value":"watch_check"},{"type":"literal","value":"watch_later"},{"type":"literal","value":"watch_off"},{"type":"literal","value":"watch_screentime"},{"type":"literal","value":"watch_vibration"},{"type":"literal","value":"watch_wake"},{"type":"literal","value":"water"},{"type":"literal","value":"water_bottle"},{"type":"literal","value":"water_bottle_large"},{"type":"literal","value":"water_damage"},{"type":"literal","value":"water_do"},{"type":"literal","value":"water_drop"},{"type":"literal","value":"water_ec"},{"type":"literal","value":"water_full"},{"type":"literal","value":"water_heater"},{"type":"literal","value":"water_lock"},{"type":"literal","value":"water_loss"},{"type":"literal","value":"water_lux"},{"type":"literal","value":"water_medium"},{"type":"literal","value":"water_orp"},{"type":"literal","value":"water_ph"},{"type":"literal","value":"water_pump"},{"type":"literal","value":"water_voc"},{"type":"literal","value":"waterfall_chart"},{"type":"literal","value":"waves"},{"type":"literal","value":"waving_hand"},{"type":"literal","value":"wb_auto"},{"type":"literal","value":"wb_cloudy"},{"type":"literal","value":"wb_incandescent"},{"type":"literal","value":"wb_iridescent"},{"type":"literal","value":"wb_shade"},{"type":"literal","value":"wb_sunny"},{"type":"literal","value":"wb_twighlight"},{"type":"literal","value":"wb_twilight"},{"type":"literal","value":"wc"},{"type":"literal","value":"weather_hail"},{"type":"literal","value":"weather_mix"},{"type":"literal","value":"weather_snowy"},{"type":"literal","value":"web_asset"},{"type":"literal","value":"web_asset_off"},{"type":"literal","value":"web_stories"},{"type":"literal","value":"web_traffic"},{"type":"literal","value":"webhook"},{"type":"literal","value":"weekend"},{"type":"literal","value":"weight"},{"type":"literal","value":"west"},{"type":"literal","value":"whatshot"},{"type":"literal","value":"wheelchair_pickup"},{"type":"literal","value":"where_to_vote"},{"type":"literal","value":"widget_medium"},{"type":"literal","value":"widget_small"},{"type":"literal","value":"widget_width"},{"type":"literal","value":"widgets"},{"type":"literal","value":"width_full"},{"type":"literal","value":"width_normal"},{"type":"literal","value":"width_wide"},{"type":"literal","value":"wifi_1_bar"},{"type":"literal","value":"wifi_2_bar"},{"type":"literal","value":"wifi_add"},{"type":"literal","value":"wifi_calling"},{"type":"literal","value":"wifi_calling_1"},{"type":"literal","value":"wifi_calling_2"},{"type":"literal","value":"wifi_calling_3"},{"type":"literal","value":"wifi_calling_bar_1"},{"type":"literal","value":"wifi_calling_bar_2"},{"type":"literal","value":"wifi_calling_bar_3"},{"type":"literal","value":"wifi_channel"},{"type":"literal","value":"wifi_find"},{"type":"literal","value":"wifi_home"},{"type":"literal","value":"wifi_lock"},{"type":"literal","value":"wifi_notification"},{"type":"literal","value":"wifi_off"},{"type":"literal","value":"wifi_password"},{"type":"literal","value":"wifi_protected_setup"},{"type":"literal","value":"wifi_proxy"},{"type":"literal","value":"wifi_tethering"},{"type":"literal","value":"wifi_tethering_error"},{"type":"literal","value":"wifi_tethering_off"},{"type":"literal","value":"wind_power"},{"type":"literal","value":"window_closed"},{"type":"literal","value":"window_open"},{"type":"literal","value":"window_sensor"},{"type":"literal","value":"windshield_defrost_auto"},{"type":"literal","value":"windshield_defrost_front"},{"type":"literal","value":"windshield_defrost_rear"},{"type":"literal","value":"windshield_heat_front"},{"type":"literal","value":"wine_bar"},{"type":"literal","value":"woman"},{"type":"literal","value":"woman_2"},{"type":"literal","value":"work"},{"type":"literal","value":"work_alert"},{"type":"literal","value":"work_history"},{"type":"literal","value":"work_off"},{"type":"literal","value":"work_outline"},{"type":"literal","value":"work_update"},{"type":"literal","value":"workspace_premium"},{"type":"literal","value":"workspaces"},{"type":"literal","value":"workspaces_filled"},{"type":"literal","value":"workspaces_outline"},{"type":"literal","value":"wounds_injuries"},{"type":"literal","value":"wrap_text"},{"type":"literal","value":"wrist"},{"type":"literal","value":"wrong_location"},{"type":"literal","value":"wysiwyg"},{"type":"literal","value":"yakitori"},{"type":"literal","value":"yard"},{"type":"literal","value":"yoshoku"},{"type":"literal","value":"your_trips"},{"type":"literal","value":"youtube_activity"},{"type":"literal","value":"youtube_searched_for"},{"type":"literal","value":"zone_person_alert"},{"type":"literal","value":"zone_person_idle"},{"type":"literal","value":"zone_person_urgent"},{"type":"literal","value":"zoom_in"},{"type":"literal","value":"zoom_in_map"},{"type":"literal","value":"zoom_out"},{"type":"literal","value":"zoom_out_map"}]}}]},{"name":"NativeTabsBottomAccessoryProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]},{"name":"NativeTabsProps","variant":"declaration","kind":256,"children":[{"name":"backBehavior","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The behavior when navigating back with the back button."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"history"},{"type":"literal","value":"initialRoute"},{"type":"literal","value":"none"}]}},{"name":"backgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The background color of the tab bar."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"badgeBackgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The background color of every badge in the tab bar."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"badgeTextColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the badge text."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"blurEffect","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The blur effect applied to the tab bar."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"none"},{"type":"literal","value":"regular"},{"type":"literal","value":"light"},{"type":"literal","value":"dark"},{"type":"literal","value":"systemDefault"},{"type":"literal","value":"extraLight"},{"type":"literal","value":"prominent"},{"type":"literal","value":"systemUltraThinMaterial"},{"type":"literal","value":"systemThinMaterial"},{"type":"literal","value":"systemMaterial"},{"type":"literal","value":"systemThickMaterial"},{"type":"literal","value":"systemChromeMaterial"},{"type":"literal","value":"systemUltraThinMaterialLight"},{"type":"literal","value":"systemThinMaterialLight"},{"type":"literal","value":"systemMaterialLight"},{"type":"literal","value":"systemThickMaterialLight"},{"type":"literal","value":"systemChromeMaterialLight"},{"type":"literal","value":"systemUltraThinMaterialDark"},{"type":"literal","value":"systemThinMaterialDark"},{"type":"literal","value":"systemMaterialDark"},{"type":"literal","value":"systemThickMaterialDark"},{"type":"literal","value":"systemChromeMaterialDark"}]}},{"name":"disableIndicator","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Disables the active indicator for the tab bar."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableTransparentOnScrollEdge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab bar will not become transparent when scrolled to the edge."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", hides the tab bar."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"iconColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of every tab icon in the tab bar."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ColorValue | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ColorValue | undefined"}}]}}]}},{"name":"indicatorColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the tab indicator."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"labelStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The style of the every tab label in the tab bar."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}},{"name":"selected","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}}]}}]}},{"name":"labelVisibilityMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The visibility mode of the tab item label."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"auto"},{"type":"literal","value":"selected"},{"type":"literal","value":"labeled"},{"type":"literal","value":"unlabeled"}]}},{"name":"minimizeBehavior","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Specifies the minimize behavior for the tab bar.\n\nAvailable starting from iOS 26.\n\nThe following values are currently supported:\n\n- "},{"kind":"code","text":"`automatic`"},{"kind":"text","text":" - resolves to the system default minimize behavior\n- "},{"kind":"code","text":"`never`"},{"kind":"text","text":" - the tab bar does not minimize\n- "},{"kind":"code","text":"`onScrollDown`"},{"kind":"text","text":" - the tab bar minimizes when scrolling down and\n expands when scrolling back up\n- "},{"kind":"code","text":"`onScrollUp`"},{"kind":"text","text":" - the tab bar minimizes when scrolling up and expands\n when scrolling back down"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)."}]},{"tag":"@default","content":[{"kind":"text","text":"automatic"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"never"},{"type":"literal","value":"onScrollDown"},{"type":"literal","value":"onScrollUp"}]}},{"name":"rippleColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the ripple effect when the tab is pressed."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"screenListeners","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Listeners for navigation events on all tabs.\n\nSupported events:\n- "},{"kind":"code","text":"`tabPress`"},{"kind":"text","text":" - called when a tab is pressed\n- "},{"kind":"code","text":"`focus`"},{"kind":"text","text":" - called when the screen comes into focus\n- "},{"kind":"code","text":"`blur`"},{"kind":"text","text":" - called when the screen loses focus"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n {\n console.log('Any tab pressed');\n },\n }}\n>\n ...\n\n```"}]}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"prop","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenListeners"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"}],"name":"ScreenListeners","package":"expo-router"}}]}},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"beforeRemove","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"beforeRemove"},{"type":"literal","value":true}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"blur","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"blur"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"focus","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"focus"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"state"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"tabPress","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"tabPress"},{"type":"literal","value":false}],"name":"EventListenerCallback","package":"expo-router"}}]}}],"name":"Partial","package":"typescript"}]}},{"name":"shadowColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the shadow."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uibarappearance/shadowcolor)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"sidebarAdaptable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", enables the sidebarAdaptable tab bar style on iPadOS and macOS. This prop has no effect on iPhone."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS 18+"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"tintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The tint color of the tab icon.\n\nCan be overridden by icon color and label color for each tab individually."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"titlePositionAdjustment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/titlepositionadjustment)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"vertical","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"unstable_nativeProps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying native tab host implementation in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":".\nUse this to configure props that are not directly exposed by Expo Router.\n\n> **Note**: This is an unstable API and may change or be removed in minor versions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/host/TabsHost.types.ts","qualifiedName":"TabsHostProps"},"name":"TabsHostProps","package":"react-native-screens"},{"type":"union","types":[{"type":"literal","value":"children"},{"type":"literal","value":"navStateRequest"},{"type":"literal","value":"onTabSelected"}]}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}}],"extendedTypes":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.PropsWithChildren"},"name":"PropsWithChildren","package":"@types/react","qualifiedName":"React.PropsWithChildren"}]},{"name":"NativeTabsTriggerBadgeProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text to display as the badge for the tab.\nIf not provided, the badge will not be displayed."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the badge will be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"selectedBackgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]},{"name":"NativeTabsTriggerLabelProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text to display as the label for the tab."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the label will be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"selectedStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}}]},{"name":"NativeTabTriggerProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The children of the trigger.\n\nUse "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":", "},{"kind":"code","text":"`Label`"},{"kind":"text","text":", and "},{"kind":"code","text":"`Badge`"},{"kind":"text","text":" components to customize the tab."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"contentStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The style applied to the content of the tab\n\nNote: Only certain style properties are supported."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Pick"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"ViewStyle"},"name":"ViewStyle","package":"react-native"},{"type":"union","types":[{"type":"literal","value":"backgroundColor"},{"type":"literal","value":"experimental_backgroundImage"},{"type":"literal","value":"alignContent"},{"type":"literal","value":"alignItems"},{"type":"literal","value":"flexDirection"},{"type":"literal","value":"gap"},{"type":"literal","value":"justifyContent"},{"type":"literal","value":"padding"},{"type":"literal","value":"paddingBottom"},{"type":"literal","value":"paddingEnd"},{"type":"literal","value":"paddingHorizontal"},{"type":"literal","value":"paddingLeft"},{"type":"literal","value":"paddingRight"},{"type":"literal","value":"paddingStart"},{"type":"literal","value":"paddingTop"},{"type":"literal","value":"paddingVertical"},{"type":"literal","value":"paddingBlock"},{"type":"literal","value":"paddingBlockEnd"},{"type":"literal","value":"paddingBlockStart"},{"type":"literal","value":"paddingInline"},{"type":"literal","value":"paddingInlineEnd"},{"type":"literal","value":"paddingInlineStart"}]}],"name":"Pick","package":"typescript"}},{"name":"disableAutomaticContentInsets","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The default behavior differs between iOS and Android.\n\nOn **Android**, the content of a native tabs screen is automatically wrapped in a "},{"kind":"code","text":"`SafeAreaView`"},{"kind":"text","text":",\nand the **bottom** inset is applied. Other insets must be handled manually.\n\nOn **iOS**, the first scroll view nested inside a native tabs screen has\n[automatic content inset adjustment](https://reactnative.dev/docs/scrollview#contentinsetadjustmentbehavior-ios) enabled\n\nWhen this property is set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", automatic content inset adjustment is disabled for the screen\nand must be managed manually. You can use "},{"kind":"code","text":"`SafeAreaView`"},{"kind":"text","text":" from "},{"kind":"code","text":"`react-native-screens/experimental`"},{"kind":"text","text":"\nto handle safe area insets."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab is shown but cannot be selected by tapping it in the\ntab bar.\n\n> **Note:** This only suppresses the native tap interaction. It is not a\n> \"protected\" or authorization gate - JavaScript navigation such as\n> "},{"kind":"code","text":"`router.push()`"},{"kind":"text","text":" or "},{"kind":"code","text":"``"},{"kind":"text","text":" still navigates to the tab. Use this for\n> tabs that should appear visible but be temporarily inert (for example,\n> while a flow is in progress), and gate navigation in your own code if\n> you need to fully prevent access.\n\nUnlike "},{"kind":"code","text":"`hidden`"},{"kind":"text","text":", the tab remains visible in the tab bar."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disablePopToTop","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will not pop stack to the root when selected again."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableScrollToTop","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will not scroll to the top when selected again."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableTransparentOnScrollEdge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab bar will not become transparent when scrolled to the edge.\n\nWhen set on a trigger, it takes precedence over the value set on "},{"kind":"code","text":"`NativeTabs`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will be hidden from the tab bar.\n\n> **Note**: Marking a tab as "},{"kind":"code","text":"`hidden`"},{"kind":"text","text":" means it cannot be navigated to in any way.\n\n> **Note**: Dynamically hiding tabs will remount the navigator and the state will be reset."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"listeners","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Listeners for navigation events on this tab.\n\nSupported events:\n- "},{"kind":"code","text":"`tabPress`"},{"kind":"text","text":" - called when this tab is pressed\n- "},{"kind":"code","text":"`focus`"},{"kind":"text","text":" - called when this screen comes into focus\n- "},{"kind":"code","text":"`blur`"},{"kind":"text","text":" - called when this screen loses focus"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n {\n console.log('Home tab pressed');\n },\n }}\n/>\n```"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"beforeRemove","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"beforeRemove"},{"type":"literal","value":true}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"blur","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"blur"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"focus","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"focus"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"state"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"intrinsic","name":"string"},{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"intrinsic","name":"undefined"}]}],"name":"EventListenerCallback","package":"expo-router"}}]}}],"name":"Partial","package":"typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"prop","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenListeners"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationState"},"name":"NavigationState","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"}],"name":"ScreenListeners","package":"expo-router"}}]}}]}},{"name":"name","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the route.\n\nThis is required when used inside a Layout component.\n\nWhen used in a route it has no effect."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"role","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"System-provided tab bar item with predefined icon and title\n\nUses Apple's built-in tab bar items (e.g., bookmarks, contacts, downloads) with\nstandard iOS styling and localized titles. Custom "},{"kind":"code","text":"`icon`"},{"kind":"text","text":" or "},{"kind":"code","text":"`selectedIcon`"},{"kind":"text","text":"\nproperties will override the system icon, but the system-defined title cannot\nbe customized."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem)."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"search"},{"type":"literal","value":"history"},{"type":"literal","value":"bookmarks"},{"type":"literal","value":"contacts"},{"type":"literal","value":"downloads"},{"type":"literal","value":"favorites"},{"type":"literal","value":"featured"},{"type":"literal","value":"more"},{"type":"literal","value":"mostRecent"},{"type":"literal","value":"mostViewed"},{"type":"literal","value":"recents"},{"type":"literal","value":"topRated"}]}},{"name":"unstable_nativeProps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying native tab screen implementation.\nUse this to configure props not directly exposed by Expo Router, but available in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":".\n\n> **Note**: This will override any other props set by Expo Router and may lead to unexpected behavior.\n\n> **Note**: This is an unstable API and may change or be removed in minor versions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/screen/TabsScreen.types.ts","qualifiedName":"TabsScreenProps"},"name":"TabsScreenProps","package":"react-native-screens"},{"type":"literal","value":"screenKey"}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}}]},{"name":"SFSymbolIcon","variant":"declaration","kind":256,"children":[{"name":"sf","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the SF Symbol to use as an icon.\n\nThe value can be provided in two ways:\n- As a string with the SF Symbol name\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"SFSymbols7_0 | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"}}]}}]}}]},{"name":"SrcIcon","variant":"declaration","kind":256,"children":[{"name":"renderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how the image icon is rendered on iOS.\n\n- "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":": iOS applies tint color to the icon (selected/unselected states)\n- "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":": Preserves original icon colors\n\n**Default behavior:**\n- If tab bar icon color is configured, defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":"\n- If no icon color is set, defaults to "},{"kind":"code","text":"`'original'`"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"src","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The image source to use as an icon.\n\nWhen "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" prop is used it will override this prop on iOS.\n\nWhen "},{"kind":"code","text":"`drawable`"},{"kind":"text","text":" or "},{"kind":"code","text":"`material`"},{"kind":"text","text":" prop is used it will override this prop on Android.\n\nThe value can be provided in two ways:\n- As an image source\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"Android"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactElement"},"typeArguments":[{"type":"intrinsic","name":"unknown"},{"type":"unknown","name":"string | JSXElementConstructor"}],"name":"ReactElement","package":"@types/react","qualifiedName":"React.ReactElement"},{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ReactElement> | ImageSourcePropType | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"unknown","name":"ReactElement> | ImageSourcePropType"}}]}}]}}]},{"name":"XcassetIcon","variant":"declaration","kind":256,"children":[{"name":"xcasset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the iOS asset catalog image to use as an icon.\n\nXcassets provide automatic multi-resolution (@1x/@2x/@3x), dark mode variants,\nand device-specific images via "},{"kind":"code","text":"`[UIImage imageNamed:]`"},{"kind":"text","text":".\n\nThe rendering mode (template vs original) can be controlled via the "},{"kind":"code","text":"`renderingMode`"},{"kind":"text","text":" prop\non the "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" component. By default, icons are tinted when "},{"kind":"code","text":"`iconColor`"},{"kind":"text","text":" is set, and\nrendered as original otherwise.\n\nThe value can be provided in two ways:\n- As a string with the asset catalog image name\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}}]}}]},{"name":"NativeTabsBlurEffect","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiblureffect/style)"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_BLUR_EFFECTS"},"name":"SUPPORTED_BLUR_EFFECTS","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsHostNativeProps","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying tab host implementation in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":"."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/host/TabsHost.types.ts","qualifiedName":"TabsHostProps"},"name":"TabsHostProps","package":"react-native-screens"},{"type":"union","types":[{"type":"literal","value":"navStateRequest"},{"type":"literal","value":"onTabSelected"},{"type":"literal","value":"children"}]}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}},{"name":"NativeTabsLabelStyle","variant":"declaration","kind":2097152,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Pick"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"},{"type":"union","types":[{"type":"literal","value":"fontFamily"},{"type":"literal","value":"fontSize"},{"type":"literal","value":"fontStyle"},{"type":"literal","value":"fontWeight"},{"type":"literal","value":"color"}]}],"name":"Pick","package":"typescript"}},{"name":"NativeTabsTabBarItemLabelVisibilityMode","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES"},"name":"SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTabBarItemRole","variant":"declaration","kind":2097152,"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_ITEM_ROLES"},"name":"SUPPORTED_TAB_BAR_ITEM_ROLES","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTabBarMinimizeBehavior","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS"},"name":"SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTriggerIconProps","variant":"declaration","kind":2097152,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"selectedColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]}},{"type":"union","types":[{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"DrawableIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"MaterialIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"DrawableIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"MaterialIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"MaterialIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"DrawableIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"reference","name":"SrcIcon","package":"expo-router"}]}]}},{"name":"SymbolOrImageSource","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"drawable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the drawable resource to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"sf","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the SF Symbol to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbol"},"name":"SFSymbol","package":"sf-symbols-typescript"}},{"name":"xcasset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the iOS asset catalog image to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"string"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"renderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how the icon is rendered on iOS."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]},{"tag":"@default","content":[{"kind":"text","text":"'template'"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"src","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The image source to use as an icon."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}]}}]}}]}},{"name":"NativeTabs","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"The component used to create native tabs layout."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]}]},"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabsProps","package":"expo-router"}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"BottomAccessory","variant":"declaration","kind":1024,"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsBottomAccessoryProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"usePlacement","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A hook which returns the bottom accessory environment for given component.\n\nNote, that there can be two copies of the same component rendered for different environments.\nThe hook will ensure that component with correct environment is displayed.\n\nBecause two instances of the component will exist simultaneously, **any state kept\ninside the component will not be shared between the regular and inline versions**.\nIf your accessory needs synchronized or persistent state you must store that state\noutside of bottom accessory component (e.g. passing via props or using context).\n\nDon't pass the environment obtained using this hook up the tree."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\n// This component will have two copies rendered, one for `inline` and one for `regular` environment\nfunction AccessoryContent(props) {\n const placement = NativeTabs.BottomAccessory.usePlacement();\n if (placement === 'inline') {\n return ;\n }\n return ;\n}\n\nexport default function Layout(){\n const [isPlaying, setIsPlaying] = useState(false);\n return (\n \n \n \n \n \n \n );\n}\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"union","types":[{"type":"literal","value":"regular"},{"type":"literal","value":"inline"}]}}]}}}]}}]}},{"name":"Trigger","variant":"declaration","kind":1024,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The component used to customize the native tab options both in the _layout file and from the tab screen.\n\nWhen used in the _layout file, you need to provide a "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop.\nWhen used in the tab screen, the "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop takes no effect."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx app/home.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function HomeScreen() {\n return (\n \n \n Home\n \n This is home screen!\n \n );\n}\n```"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabTriggerProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"Badge","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerBadgeProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerBadge"},{"name":"Icon","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerIconProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerIcon"},{"name":"Label","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerLabelProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerLabel"},{"name":"VectorIcon","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Helper component for loading vector icons.\n\nPrefer using the "},{"kind":"code","text":"`md`"},{"kind":"text","text":" and "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" props on "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" rather than using this component directly.\nOnly use this component when you need to load a specific icon from a vector icon family."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Icon, VectorIcon } from 'expo-router';\nimport MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';\n\n} />\n```"}]}]},"typeParameters":[{"name":"NameT","variant":"typeParam","kind":131072,"flags":{"isConst":true},"type":{"type":"intrinsic","name":"string"}}],"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/primitives/types.ts","qualifiedName":"VectorIconProps"},"typeArguments":[{"type":"reference","name":"NameT","package":"expo-router","refersToTypeParameter":true}],"name":"VectorIconProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},"defaultValue":"NativeTabsTriggerVectorIcon"}]}}]},"defaultValue":"NativeTabTrigger"}]}}]},"defaultValue":"..."},{"name":"NativeTabTrigger","variant":"declaration","kind":32,"flags":{"isConst":true},"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The component used to customize the native tab options both in the _layout file and from the tab screen.\n\nWhen used in the _layout file, you need to provide a "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop.\nWhen used in the tab screen, the "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop takes no effect."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx app/home.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function HomeScreen() {\n return (\n \n \n Home\n \n This is home screen!\n \n );\n}\n```"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabTriggerProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"Badge","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerBadgeProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerBadge"},{"name":"Icon","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerIconProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerIcon"},{"name":"Label","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerLabelProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerLabel"},{"name":"VectorIcon","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Helper component for loading vector icons.\n\nPrefer using the "},{"kind":"code","text":"`md`"},{"kind":"text","text":" and "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" props on "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" rather than using this component directly.\nOnly use this component when you need to load a specific icon from a vector icon family."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Icon, VectorIcon } from 'expo-router';\nimport MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';\n\n} />\n```"}]}]},"typeParameters":[{"name":"NameT","variant":"typeParam","kind":131072,"flags":{"isConst":true},"type":{"type":"intrinsic","name":"string"}}],"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/primitives/types.ts","qualifiedName":"VectorIconProps"},"typeArguments":[{"type":"reference","name":"NameT","package":"expo-router","refersToTypeParameter":true}],"name":"VectorIconProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},"defaultValue":"NativeTabsTriggerVectorIcon"}]}}]},"defaultValue":"..."}],"packageName":"expo-router"} \ No newline at end of file +{"schemaVersion":"2.0","name":"expo-router/native-tabs","variant":"project","kind":1,"children":[{"name":"DrawableIcon","variant":"declaration","kind":256,"children":[{"name":"drawable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the drawable resource to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}}]},{"name":"MaterialIcon","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Material icon name for Android native tabs."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"md","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Material icon glyph name. See the [Material icons for the complete catalog](https://fonts.google.com/icons)."}]},"type":{"type":"union","types":[{"type":"literal","value":"function"},{"type":"literal","value":"search"},{"type":"literal","value":"repeat"},{"type":"literal","value":"anchor"},{"type":"literal","value":"link"},{"type":"literal","value":"key"},{"type":"literal","value":"history"},{"type":"literal","value":"join"},{"type":"literal","value":"shift"},{"type":"literal","value":"sort"},{"type":"literal","value":"map"},{"type":"literal","value":"filter"},{"type":"literal","value":"source"},{"type":"literal","value":"target"},{"type":"literal","value":"navigation"},{"type":"literal","value":"route"},{"type":"literal","value":"article"},{"type":"literal","value":"code"},{"type":"literal","value":"details"},{"type":"literal","value":"html"},{"type":"literal","value":"iframe"},{"type":"literal","value":"input"},{"type":"literal","value":"label"},{"type":"literal","value":"menu"},{"type":"literal","value":"output"},{"type":"literal","value":"script"},{"type":"literal","value":"select"},{"type":"literal","value":"style"},{"type":"literal","value":"table"},{"type":"literal","value":"title"},{"type":"literal","value":"circle"},{"type":"literal","value":"image"},{"type":"literal","value":"pattern"},{"type":"literal","value":"polyline"},{"type":"literal","value":"stop"},{"type":"literal","value":"switch"},{"type":"literal","value":"event"},{"type":"literal","value":"create"},{"type":"literal","value":"stack"},{"type":"literal","value":"segment"},{"type":"literal","value":"groups"},{"type":"literal","value":"group"},{"type":"literal","value":"router"},{"type":"literal","value":"merge"},{"type":"literal","value":"call"},{"type":"literal","value":"tab"},{"type":"literal","value":"ios"},{"type":"literal","value":"android"},{"type":"literal","value":"web"},{"type":"literal","value":"cancel"},{"type":"literal","value":"close"},{"type":"literal","value":"error"},{"type":"literal","value":"pause"},{"type":"literal","value":"resize"},{"type":"literal","value":"message"},{"type":"literal","value":"storage"},{"type":"literal","value":"accessible"},{"type":"literal","value":"colors"},{"type":"literal","value":"email"},{"type":"literal","value":"radio"},{"type":"literal","value":"timer"},{"type":"literal","value":"list"},{"type":"literal","value":"toolbar"},{"type":"literal","value":"feed"},{"type":"literal","value":"note"},{"type":"literal","value":"tooltip"},{"type":"literal","value":"light"},{"type":"literal","value":"uppercase"},{"type":"literal","value":"lowercase"},{"type":"literal","value":"difference"},{"type":"literal","value":"scale"},{"type":"literal","value":"done"},{"type":"literal","value":"opacity"},{"type":"literal","value":"elevation"},{"type":"literal","value":"visibility"},{"type":"literal","value":"height"},{"type":"literal","value":"margin"},{"type":"literal","value":"padding"},{"type":"literal","value":"start"},{"type":"literal","value":"transform"},{"type":"literal","value":"description"},{"type":"literal","value":"contrast"},{"type":"literal","value":"clear"},{"type":"literal","value":"translate"},{"type":"literal","value":"animation"},{"type":"literal","value":"phone"},{"type":"literal","value":"send"},{"type":"literal","value":"flip"},{"type":"literal","value":"expand"},{"type":"literal","value":"window"},{"type":"literal","value":"speed"},{"type":"literal","value":"badge"},{"type":"literal","value":"warning"},{"type":"literal","value":"toast"},{"type":"literal","value":"api"},{"type":"literal","value":"sync"},{"type":"literal","value":"host"},{"type":"literal","value":"portrait"},{"type":"literal","value":"landscape"},{"type":"literal","value":"alarm"},{"type":"literal","value":"barcode"},{"type":"literal","value":"bolt"},{"type":"literal","value":"book"},{"type":"literal","value":"bookmark"},{"type":"literal","value":"camera"},{"type":"literal","value":"cloud"},{"type":"literal","value":"crop"},{"type":"literal","value":"eject"},{"type":"literal","value":"equal"},{"type":"literal","value":"eyeglasses"},{"type":"literal","value":"flag"},{"type":"literal","value":"flowchart"},{"type":"literal","value":"folder"},{"type":"literal","value":"forward"},{"type":"literal","value":"globe"},{"type":"literal","value":"headphones"},{"type":"literal","value":"hexagon"},{"type":"literal","value":"hourglass"},{"type":"literal","value":"house"},{"type":"literal","value":"info"},{"type":"literal","value":"keyboard"},{"type":"literal","value":"lightbulb"},{"type":"literal","value":"lock"},{"type":"literal","value":"mic"},{"type":"literal","value":"percent"},{"type":"literal","value":"person"},{"type":"literal","value":"photo"},{"type":"literal","value":"pin"},{"type":"literal","value":"power"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"shield"},{"type":"literal","value":"shuffle"},{"type":"literal","value":"signature"},{"type":"literal","value":"speaker"},{"type":"literal","value":"square"},{"type":"literal","value":"star"},{"type":"literal","value":"tag"},{"type":"literal","value":"thermometer"},{"type":"literal","value":"timelapse"},{"type":"literal","value":"tornado"},{"type":"literal","value":"tv"},{"type":"literal","value":"umbrella"},{"type":"literal","value":"wifi"},{"type":"literal","value":"abc"},{"type":"literal","value":"crown"},{"type":"literal","value":"diamond"},{"type":"literal","value":"loupe"},{"type":"literal","value":"mail"},{"type":"literal","value":"newspaper"},{"type":"literal","value":"pip"},{"type":"literal","value":"scanner"},{"type":"literal","value":"shadow"},{"type":"literal","value":"stethoscope"},{"type":"literal","value":"terminal"},{"type":"literal","value":"tram"},{"type":"literal","value":"asterisk"},{"type":"literal","value":"checklist"},{"type":"literal","value":"earbuds"},{"type":"literal","value":"pentagon"},{"type":"literal","value":"scooter"},{"type":"literal","value":"backpack"},{"type":"literal","value":"bathtub"},{"type":"literal","value":"chair"},{"type":"literal","value":"dishwasher"},{"type":"literal","value":"fireplace"},{"type":"literal","value":"microwave"},{"type":"literal","value":"oven"},{"type":"literal","value":"pill"},{"type":"literal","value":"shower"},{"type":"literal","value":"sprinkler"},{"type":"literal","value":"stairs"},{"type":"literal","value":"syringe"},{"type":"literal","value":"trophy"},{"type":"literal","value":"sos"},{"type":"literal","value":"stroller"},{"type":"literal","value":"accessibility"},{"type":"literal","value":"bubble"},{"type":"literal","value":"smartphone"},{"type":"literal","value":"storefront"},{"type":"literal","value":"drone"},{"type":"literal","value":"headset"},{"type":"literal","value":"moped"},{"type":"literal","value":"motorcycle"},{"type":"literal","value":"numbers"},{"type":"literal","value":"receipt"},{"type":"literal","value":"palette"},{"type":"literal","value":"download"},{"type":"literal","value":"security"},{"type":"literal","value":"hide"},{"type":"literal","value":"step"},{"type":"literal","value":"move"},{"type":"literal","value":"scene"},{"type":"literal","value":"bookmarks"},{"type":"literal","value":"contacts"},{"type":"literal","value":"more"},{"type":"literal","value":"tabs"},{"type":"literal","value":"123"},{"type":"literal","value":"360"},{"type":"literal","value":"10k"},{"type":"literal","value":"10mp"},{"type":"literal","value":"11mp"},{"type":"literal","value":"12mp"},{"type":"literal","value":"13mp"},{"type":"literal","value":"14mp"},{"type":"literal","value":"15mp"},{"type":"literal","value":"16mp"},{"type":"literal","value":"17mp"},{"type":"literal","value":"18_up_rating"},{"type":"literal","value":"18mp"},{"type":"literal","value":"19mp"},{"type":"literal","value":"1k"},{"type":"literal","value":"1k_plus"},{"type":"literal","value":"1x_mobiledata"},{"type":"literal","value":"1x_mobiledata_badge"},{"type":"literal","value":"20mp"},{"type":"literal","value":"21mp"},{"type":"literal","value":"22mp"},{"type":"literal","value":"23mp"},{"type":"literal","value":"24fps_select"},{"type":"literal","value":"24mp"},{"type":"literal","value":"2d"},{"type":"literal","value":"2k"},{"type":"literal","value":"2k_plus"},{"type":"literal","value":"2mp"},{"type":"literal","value":"30fps"},{"type":"literal","value":"30fps_select"},{"type":"literal","value":"3d"},{"type":"literal","value":"3d_rotation"},{"type":"literal","value":"3g_mobiledata"},{"type":"literal","value":"3g_mobiledata_badge"},{"type":"literal","value":"3k"},{"type":"literal","value":"3k_plus"},{"type":"literal","value":"3mp"},{"type":"literal","value":"3p"},{"type":"literal","value":"4g_mobiledata"},{"type":"literal","value":"4g_mobiledata_badge"},{"type":"literal","value":"4g_plus_mobiledata"},{"type":"literal","value":"4k"},{"type":"literal","value":"4k_plus"},{"type":"literal","value":"4mp"},{"type":"literal","value":"50mp"},{"type":"literal","value":"5g"},{"type":"literal","value":"5g_mobiledata_badge"},{"type":"literal","value":"5k"},{"type":"literal","value":"5k_plus"},{"type":"literal","value":"5mp"},{"type":"literal","value":"60fps"},{"type":"literal","value":"60fps_select"},{"type":"literal","value":"6_ft_apart"},{"type":"literal","value":"6k"},{"type":"literal","value":"6k_plus"},{"type":"literal","value":"6mp"},{"type":"literal","value":"7k"},{"type":"literal","value":"7k_plus"},{"type":"literal","value":"7mp"},{"type":"literal","value":"8k"},{"type":"literal","value":"8k_plus"},{"type":"literal","value":"8mp"},{"type":"literal","value":"9k"},{"type":"literal","value":"9k_plus"},{"type":"literal","value":"9mp"},{"type":"literal","value":"ac_unit"},{"type":"literal","value":"access_alarm"},{"type":"literal","value":"access_alarms"},{"type":"literal","value":"access_time"},{"type":"literal","value":"access_time_filled"},{"type":"literal","value":"accessibility_new"},{"type":"literal","value":"accessible_forward"},{"type":"literal","value":"accessible_menu"},{"type":"literal","value":"account_balance"},{"type":"literal","value":"account_balance_wallet"},{"type":"literal","value":"account_box"},{"type":"literal","value":"account_child"},{"type":"literal","value":"account_child_invert"},{"type":"literal","value":"account_circle"},{"type":"literal","value":"account_circle_off"},{"type":"literal","value":"account_tree"},{"type":"literal","value":"action_key"},{"type":"literal","value":"activity_zone"},{"type":"literal","value":"acupuncture"},{"type":"literal","value":"acute"},{"type":"literal","value":"ad"},{"type":"literal","value":"ad_group"},{"type":"literal","value":"ad_group_off"},{"type":"literal","value":"ad_off"},{"type":"literal","value":"ad_units"},{"type":"literal","value":"adaptive_audio_mic"},{"type":"literal","value":"adaptive_audio_mic_off"},{"type":"literal","value":"adb"},{"type":"literal","value":"add"},{"type":"literal","value":"add_2"},{"type":"literal","value":"add_a_photo"},{"type":"literal","value":"add_ad"},{"type":"literal","value":"add_alarm"},{"type":"literal","value":"add_alert"},{"type":"literal","value":"add_box"},{"type":"literal","value":"add_business"},{"type":"literal","value":"add_call"},{"type":"literal","value":"add_card"},{"type":"literal","value":"add_chart"},{"type":"literal","value":"add_circle"},{"type":"literal","value":"add_circle_outline"},{"type":"literal","value":"add_column_left"},{"type":"literal","value":"add_column_right"},{"type":"literal","value":"add_comment"},{"type":"literal","value":"add_diamond"},{"type":"literal","value":"add_home"},{"type":"literal","value":"add_home_work"},{"type":"literal","value":"add_ic_call"},{"type":"literal","value":"add_link"},{"type":"literal","value":"add_location"},{"type":"literal","value":"add_location_alt"},{"type":"literal","value":"add_moderator"},{"type":"literal","value":"add_notes"},{"type":"literal","value":"add_photo_alternate"},{"type":"literal","value":"add_reaction"},{"type":"literal","value":"add_road"},{"type":"literal","value":"add_row_above"},{"type":"literal","value":"add_row_below"},{"type":"literal","value":"add_shopping_cart"},{"type":"literal","value":"add_task"},{"type":"literal","value":"add_to_drive"},{"type":"literal","value":"add_to_home_screen"},{"type":"literal","value":"add_to_photos"},{"type":"literal","value":"add_to_queue"},{"type":"literal","value":"add_triangle"},{"type":"literal","value":"addchart"},{"type":"literal","value":"adf_scanner"},{"type":"literal","value":"adjust"},{"type":"literal","value":"admin_meds"},{"type":"literal","value":"admin_panel_settings"},{"type":"literal","value":"ads_click"},{"type":"literal","value":"agender"},{"type":"literal","value":"agriculture"},{"type":"literal","value":"air"},{"type":"literal","value":"air_freshener"},{"type":"literal","value":"air_purifier"},{"type":"literal","value":"air_purifier_gen"},{"type":"literal","value":"airline_seat_flat"},{"type":"literal","value":"airline_seat_flat_angled"},{"type":"literal","value":"airline_seat_individual_suite"},{"type":"literal","value":"airline_seat_legroom_extra"},{"type":"literal","value":"airline_seat_legroom_normal"},{"type":"literal","value":"airline_seat_legroom_reduced"},{"type":"literal","value":"airline_seat_recline_extra"},{"type":"literal","value":"airline_seat_recline_normal"},{"type":"literal","value":"airline_stops"},{"type":"literal","value":"airlines"},{"type":"literal","value":"airplane_ticket"},{"type":"literal","value":"airplanemode_active"},{"type":"literal","value":"airplanemode_inactive"},{"type":"literal","value":"airplay"},{"type":"literal","value":"airport_shuttle"},{"type":"literal","value":"airwave"},{"type":"literal","value":"alarm_add"},{"type":"literal","value":"alarm_off"},{"type":"literal","value":"alarm_on"},{"type":"literal","value":"alarm_pause"},{"type":"literal","value":"alarm_smart_wake"},{"type":"literal","value":"album"},{"type":"literal","value":"align_center"},{"type":"literal","value":"align_end"},{"type":"literal","value":"align_flex_center"},{"type":"literal","value":"align_flex_end"},{"type":"literal","value":"align_flex_start"},{"type":"literal","value":"align_horizontal_center"},{"type":"literal","value":"align_horizontal_left"},{"type":"literal","value":"align_horizontal_right"},{"type":"literal","value":"align_items_stretch"},{"type":"literal","value":"align_justify_center"},{"type":"literal","value":"align_justify_flex_end"},{"type":"literal","value":"align_justify_flex_start"},{"type":"literal","value":"align_justify_space_around"},{"type":"literal","value":"align_justify_space_between"},{"type":"literal","value":"align_justify_space_even"},{"type":"literal","value":"align_justify_stretch"},{"type":"literal","value":"align_self_stretch"},{"type":"literal","value":"align_space_around"},{"type":"literal","value":"align_space_between"},{"type":"literal","value":"align_space_even"},{"type":"literal","value":"align_start"},{"type":"literal","value":"align_stretch"},{"type":"literal","value":"align_vertical_bottom"},{"type":"literal","value":"align_vertical_center"},{"type":"literal","value":"align_vertical_top"},{"type":"literal","value":"all_inbox"},{"type":"literal","value":"all_inclusive"},{"type":"literal","value":"all_match"},{"type":"literal","value":"all_out"},{"type":"literal","value":"allergies"},{"type":"literal","value":"allergy"},{"type":"literal","value":"alt_route"},{"type":"literal","value":"alternate_email"},{"type":"literal","value":"altitude"},{"type":"literal","value":"ambulance"},{"type":"literal","value":"amend"},{"type":"literal","value":"amp_stories"},{"type":"literal","value":"analytics"},{"type":"literal","value":"android_cell_4_bar"},{"type":"literal","value":"android_cell_4_bar_alert"},{"type":"literal","value":"android_cell_4_bar_off"},{"type":"literal","value":"android_cell_4_bar_plus"},{"type":"literal","value":"android_cell_5_bar"},{"type":"literal","value":"android_cell_5_bar_alert"},{"type":"literal","value":"android_cell_5_bar_off"},{"type":"literal","value":"android_cell_5_bar_plus"},{"type":"literal","value":"android_cell_dual_4_bar"},{"type":"literal","value":"android_cell_dual_4_bar_alert"},{"type":"literal","value":"android_cell_dual_4_bar_plus"},{"type":"literal","value":"android_cell_dual_5_bar"},{"type":"literal","value":"android_cell_dual_5_bar_alert"},{"type":"literal","value":"android_cell_dual_5_bar_plus"},{"type":"literal","value":"android_wifi_3_bar"},{"type":"literal","value":"android_wifi_3_bar_alert"},{"type":"literal","value":"android_wifi_3_bar_lock"},{"type":"literal","value":"android_wifi_3_bar_off"},{"type":"literal","value":"android_wifi_3_bar_plus"},{"type":"literal","value":"android_wifi_3_bar_question"},{"type":"literal","value":"android_wifi_4_bar"},{"type":"literal","value":"android_wifi_4_bar_alert"},{"type":"literal","value":"android_wifi_4_bar_lock"},{"type":"literal","value":"android_wifi_4_bar_off"},{"type":"literal","value":"android_wifi_4_bar_plus"},{"type":"literal","value":"android_wifi_4_bar_question"},{"type":"literal","value":"animated_images"},{"type":"literal","value":"announcement"},{"type":"literal","value":"aod"},{"type":"literal","value":"aod_tablet"},{"type":"literal","value":"aod_watch"},{"type":"literal","value":"apartment"},{"type":"literal","value":"apk_document"},{"type":"literal","value":"apk_install"},{"type":"literal","value":"app_badging"},{"type":"literal","value":"app_blocking"},{"type":"literal","value":"app_registration"},{"type":"literal","value":"app_settings_alt"},{"type":"literal","value":"app_shortcut"},{"type":"literal","value":"apparel"},{"type":"literal","value":"approval"},{"type":"literal","value":"approval_delegation"},{"type":"literal","value":"approval_delegation_off"},{"type":"literal","value":"apps"},{"type":"literal","value":"apps_outage"},{"type":"literal","value":"aq"},{"type":"literal","value":"aq_indoor"},{"type":"literal","value":"ar_on_you"},{"type":"literal","value":"ar_stickers"},{"type":"literal","value":"architecture"},{"type":"literal","value":"archive"},{"type":"literal","value":"area_chart"},{"type":"literal","value":"arming_countdown"},{"type":"literal","value":"arrow_and_edge"},{"type":"literal","value":"arrow_back"},{"type":"literal","value":"arrow_back_2"},{"type":"literal","value":"arrow_back_ios"},{"type":"literal","value":"arrow_back_ios_new"},{"type":"literal","value":"arrow_circle_down"},{"type":"literal","value":"arrow_circle_left"},{"type":"literal","value":"arrow_circle_right"},{"type":"literal","value":"arrow_circle_up"},{"type":"literal","value":"arrow_cool_down"},{"type":"literal","value":"arrow_downward"},{"type":"literal","value":"arrow_downward_alt"},{"type":"literal","value":"arrow_drop_down"},{"type":"literal","value":"arrow_drop_down_circle"},{"type":"literal","value":"arrow_drop_up"},{"type":"literal","value":"arrow_forward"},{"type":"literal","value":"arrow_forward_ios"},{"type":"literal","value":"arrow_insert"},{"type":"literal","value":"arrow_left"},{"type":"literal","value":"arrow_left_alt"},{"type":"literal","value":"arrow_menu_close"},{"type":"literal","value":"arrow_menu_open"},{"type":"literal","value":"arrow_or_edge"},{"type":"literal","value":"arrow_outward"},{"type":"literal","value":"arrow_range"},{"type":"literal","value":"arrow_right"},{"type":"literal","value":"arrow_right_alt"},{"type":"literal","value":"arrow_selector_tool"},{"type":"literal","value":"arrow_shape_up"},{"type":"literal","value":"arrow_shape_up_stack"},{"type":"literal","value":"arrow_shape_up_stack_2"},{"type":"literal","value":"arrow_split"},{"type":"literal","value":"arrow_top_left"},{"type":"literal","value":"arrow_top_right"},{"type":"literal","value":"arrow_upload_progress"},{"type":"literal","value":"arrow_upload_ready"},{"type":"literal","value":"arrow_upward"},{"type":"literal","value":"arrow_upward_alt"},{"type":"literal","value":"arrow_warm_up"},{"type":"literal","value":"arrows_input"},{"type":"literal","value":"arrows_more_down"},{"type":"literal","value":"arrows_more_up"},{"type":"literal","value":"arrows_output"},{"type":"literal","value":"arrows_outward"},{"type":"literal","value":"art_track"},{"type":"literal","value":"article_person"},{"type":"literal","value":"article_shortcut"},{"type":"literal","value":"artist"},{"type":"literal","value":"aspect_ratio"},{"type":"literal","value":"assessment"},{"type":"literal","value":"assignment"},{"type":"literal","value":"assignment_add"},{"type":"literal","value":"assignment_ind"},{"type":"literal","value":"assignment_late"},{"type":"literal","value":"assignment_return"},{"type":"literal","value":"assignment_returned"},{"type":"literal","value":"assignment_turned_in"},{"type":"literal","value":"assist_walker"},{"type":"literal","value":"assistant"},{"type":"literal","value":"assistant_device"},{"type":"literal","value":"assistant_direction"},{"type":"literal","value":"assistant_navigation"},{"type":"literal","value":"assistant_on_hub"},{"type":"literal","value":"assistant_photo"},{"type":"literal","value":"assured_workload"},{"type":"literal","value":"atm"},{"type":"literal","value":"atr"},{"type":"literal","value":"attach_email"},{"type":"literal","value":"attach_file"},{"type":"literal","value":"attach_file_add"},{"type":"literal","value":"attach_file_off"},{"type":"literal","value":"attach_money"},{"type":"literal","value":"attachment"},{"type":"literal","value":"attractions"},{"type":"literal","value":"attribution"},{"type":"literal","value":"audio_description"},{"type":"literal","value":"audio_file"},{"type":"literal","value":"audio_video_receiver"},{"type":"literal","value":"audiotrack"},{"type":"literal","value":"auto_awesome"},{"type":"literal","value":"auto_awesome_mosaic"},{"type":"literal","value":"auto_awesome_motion"},{"type":"literal","value":"auto_delete"},{"type":"literal","value":"auto_fix_high"},{"type":"literal","value":"auto_fix_normal"},{"type":"literal","value":"auto_fix_off"},{"type":"literal","value":"auto_graph"},{"type":"literal","value":"auto_mode"},{"type":"literal","value":"auto_read_pause"},{"type":"literal","value":"auto_read_play"},{"type":"literal","value":"auto_stories"},{"type":"literal","value":"auto_stories_off"},{"type":"literal","value":"auto_towing"},{"type":"literal","value":"auto_transmission"},{"type":"literal","value":"autofps_select"},{"type":"literal","value":"automation"},{"type":"literal","value":"autopause"},{"type":"literal","value":"autoplay"},{"type":"literal","value":"autorenew"},{"type":"literal","value":"autostop"},{"type":"literal","value":"av1"},{"type":"literal","value":"av_timer"},{"type":"literal","value":"avc"},{"type":"literal","value":"avg_pace"},{"type":"literal","value":"avg_time"},{"type":"literal","value":"award_meal"},{"type":"literal","value":"award_star"},{"type":"literal","value":"azm"},{"type":"literal","value":"baby_changing_station"},{"type":"literal","value":"back_hand"},{"type":"literal","value":"back_to_tab"},{"type":"literal","value":"background_dot_large"},{"type":"literal","value":"background_dot_small"},{"type":"literal","value":"background_grid_small"},{"type":"literal","value":"background_replace"},{"type":"literal","value":"backlight_high"},{"type":"literal","value":"backlight_high_off"},{"type":"literal","value":"backlight_low"},{"type":"literal","value":"backspace"},{"type":"literal","value":"backup"},{"type":"literal","value":"backup_table"},{"type":"literal","value":"badge_critical_battery"},{"type":"literal","value":"badminton"},{"type":"literal","value":"bakery_dining"},{"type":"literal","value":"balance"},{"type":"literal","value":"balcony"},{"type":"literal","value":"ballot"},{"type":"literal","value":"bar_chart"},{"type":"literal","value":"bar_chart_4_bars"},{"type":"literal","value":"bar_chart_off"},{"type":"literal","value":"barcode_reader"},{"type":"literal","value":"barcode_scanner"},{"type":"literal","value":"barefoot"},{"type":"literal","value":"batch_prediction"},{"type":"literal","value":"bath_bedrock"},{"type":"literal","value":"bath_outdoor"},{"type":"literal","value":"bath_private"},{"type":"literal","value":"bath_public_large"},{"type":"literal","value":"bath_soak"},{"type":"literal","value":"bathroom"},{"type":"literal","value":"battery_0_bar"},{"type":"literal","value":"battery_1_bar"},{"type":"literal","value":"battery_20"},{"type":"literal","value":"battery_2_bar"},{"type":"literal","value":"battery_30"},{"type":"literal","value":"battery_3_bar"},{"type":"literal","value":"battery_4_bar"},{"type":"literal","value":"battery_50"},{"type":"literal","value":"battery_5_bar"},{"type":"literal","value":"battery_60"},{"type":"literal","value":"battery_6_bar"},{"type":"literal","value":"battery_80"},{"type":"literal","value":"battery_90"},{"type":"literal","value":"battery_alert"},{"type":"literal","value":"battery_android_0"},{"type":"literal","value":"battery_android_1"},{"type":"literal","value":"battery_android_2"},{"type":"literal","value":"battery_android_3"},{"type":"literal","value":"battery_android_4"},{"type":"literal","value":"battery_android_5"},{"type":"literal","value":"battery_android_6"},{"type":"literal","value":"battery_android_alert"},{"type":"literal","value":"battery_android_bolt"},{"type":"literal","value":"battery_android_frame_1"},{"type":"literal","value":"battery_android_frame_2"},{"type":"literal","value":"battery_android_frame_3"},{"type":"literal","value":"battery_android_frame_4"},{"type":"literal","value":"battery_android_frame_5"},{"type":"literal","value":"battery_android_frame_6"},{"type":"literal","value":"battery_android_frame_alert"},{"type":"literal","value":"battery_android_frame_bolt"},{"type":"literal","value":"battery_android_frame_full"},{"type":"literal","value":"battery_android_frame_plus"},{"type":"literal","value":"battery_android_frame_question"},{"type":"literal","value":"battery_android_frame_share"},{"type":"literal","value":"battery_android_frame_shield"},{"type":"literal","value":"battery_android_full"},{"type":"literal","value":"battery_android_plus"},{"type":"literal","value":"battery_android_question"},{"type":"literal","value":"battery_android_share"},{"type":"literal","value":"battery_android_shield"},{"type":"literal","value":"battery_change"},{"type":"literal","value":"battery_charging_20"},{"type":"literal","value":"battery_charging_30"},{"type":"literal","value":"battery_charging_50"},{"type":"literal","value":"battery_charging_60"},{"type":"literal","value":"battery_charging_80"},{"type":"literal","value":"battery_charging_90"},{"type":"literal","value":"battery_charging_full"},{"type":"literal","value":"battery_error"},{"type":"literal","value":"battery_full"},{"type":"literal","value":"battery_full_alt"},{"type":"literal","value":"battery_horiz_000"},{"type":"literal","value":"battery_horiz_050"},{"type":"literal","value":"battery_horiz_075"},{"type":"literal","value":"battery_low"},{"type":"literal","value":"battery_plus"},{"type":"literal","value":"battery_profile"},{"type":"literal","value":"battery_saver"},{"type":"literal","value":"battery_share"},{"type":"literal","value":"battery_status_good"},{"type":"literal","value":"battery_std"},{"type":"literal","value":"battery_unknown"},{"type":"literal","value":"battery_very_low"},{"type":"literal","value":"beach_access"},{"type":"literal","value":"bed"},{"type":"literal","value":"bedroom_baby"},{"type":"literal","value":"bedroom_child"},{"type":"literal","value":"bedroom_parent"},{"type":"literal","value":"bedtime"},{"type":"literal","value":"bedtime_off"},{"type":"literal","value":"beenhere"},{"type":"literal","value":"beer_meal"},{"type":"literal","value":"bento"},{"type":"literal","value":"bia"},{"type":"literal","value":"bid_landscape"},{"type":"literal","value":"bid_landscape_disabled"},{"type":"literal","value":"bigtop_updates"},{"type":"literal","value":"bike_dock"},{"type":"literal","value":"bike_lane"},{"type":"literal","value":"bike_scooter"},{"type":"literal","value":"biotech"},{"type":"literal","value":"blanket"},{"type":"literal","value":"blender"},{"type":"literal","value":"blind"},{"type":"literal","value":"blinds"},{"type":"literal","value":"blinds_closed"},{"type":"literal","value":"block"},{"type":"literal","value":"block_flipped"},{"type":"literal","value":"blood_pressure"},{"type":"literal","value":"bloodtype"},{"type":"literal","value":"bluetooth"},{"type":"literal","value":"bluetooth_audio"},{"type":"literal","value":"bluetooth_connected"},{"type":"literal","value":"bluetooth_disabled"},{"type":"literal","value":"bluetooth_drive"},{"type":"literal","value":"bluetooth_searching"},{"type":"literal","value":"blur_circular"},{"type":"literal","value":"blur_linear"},{"type":"literal","value":"blur_medium"},{"type":"literal","value":"blur_off"},{"type":"literal","value":"blur_on"},{"type":"literal","value":"blur_short"},{"type":"literal","value":"boat_bus"},{"type":"literal","value":"boat_railway"},{"type":"literal","value":"body_fat"},{"type":"literal","value":"body_system"},{"type":"literal","value":"bomb"},{"type":"literal","value":"book_2"},{"type":"literal","value":"book_3"},{"type":"literal","value":"book_4"},{"type":"literal","value":"book_5"},{"type":"literal","value":"book_6"},{"type":"literal","value":"book_online"},{"type":"literal","value":"book_ribbon"},{"type":"literal","value":"bookmark_add"},{"type":"literal","value":"bookmark_added"},{"type":"literal","value":"bookmark_bag"},{"type":"literal","value":"bookmark_border"},{"type":"literal","value":"bookmark_check"},{"type":"literal","value":"bookmark_flag"},{"type":"literal","value":"bookmark_heart"},{"type":"literal","value":"bookmark_manager"},{"type":"literal","value":"bookmark_remove"},{"type":"literal","value":"bookmark_star"},{"type":"literal","value":"books_movies_and_music"},{"type":"literal","value":"border_all"},{"type":"literal","value":"border_bottom"},{"type":"literal","value":"border_clear"},{"type":"literal","value":"border_color"},{"type":"literal","value":"border_horizontal"},{"type":"literal","value":"border_inner"},{"type":"literal","value":"border_left"},{"type":"literal","value":"border_outer"},{"type":"literal","value":"border_right"},{"type":"literal","value":"border_style"},{"type":"literal","value":"border_top"},{"type":"literal","value":"border_vertical"},{"type":"literal","value":"borg"},{"type":"literal","value":"bottom_app_bar"},{"type":"literal","value":"bottom_drawer"},{"type":"literal","value":"bottom_navigation"},{"type":"literal","value":"bottom_panel_close"},{"type":"literal","value":"bottom_panel_open"},{"type":"literal","value":"bottom_right_click"},{"type":"literal","value":"bottom_sheets"},{"type":"literal","value":"box"},{"type":"literal","value":"box_add"},{"type":"literal","value":"box_edit"},{"type":"literal","value":"boy"},{"type":"literal","value":"brand_awareness"},{"type":"literal","value":"brand_family"},{"type":"literal","value":"branding_watermark"},{"type":"literal","value":"breakfast_dining"},{"type":"literal","value":"breaking_news"},{"type":"literal","value":"breaking_news_alt_1"},{"type":"literal","value":"breastfeeding"},{"type":"literal","value":"brick"},{"type":"literal","value":"briefcase_meal"},{"type":"literal","value":"brightness_1"},{"type":"literal","value":"brightness_2"},{"type":"literal","value":"brightness_3"},{"type":"literal","value":"brightness_4"},{"type":"literal","value":"brightness_5"},{"type":"literal","value":"brightness_6"},{"type":"literal","value":"brightness_7"},{"type":"literal","value":"brightness_alert"},{"type":"literal","value":"brightness_auto"},{"type":"literal","value":"brightness_empty"},{"type":"literal","value":"brightness_high"},{"type":"literal","value":"brightness_low"},{"type":"literal","value":"brightness_medium"},{"type":"literal","value":"bring_your_own_ip"},{"type":"literal","value":"broadcast_on_home"},{"type":"literal","value":"broadcast_on_personal"},{"type":"literal","value":"broken_image"},{"type":"literal","value":"browse"},{"type":"literal","value":"browse_activity"},{"type":"literal","value":"browse_gallery"},{"type":"literal","value":"browser_not_supported"},{"type":"literal","value":"browser_updated"},{"type":"literal","value":"brunch_dining"},{"type":"literal","value":"brush"},{"type":"literal","value":"bubble_chart"},{"type":"literal","value":"bubbles"},{"type":"literal","value":"bucket_check"},{"type":"literal","value":"bug_report"},{"type":"literal","value":"build"},{"type":"literal","value":"build_circle"},{"type":"literal","value":"bungalow"},{"type":"literal","value":"burst_mode"},{"type":"literal","value":"bus_alert"},{"type":"literal","value":"bus_railway"},{"type":"literal","value":"business"},{"type":"literal","value":"business_center"},{"type":"literal","value":"business_chip"},{"type":"literal","value":"business_messages"},{"type":"literal","value":"buttons_alt"},{"type":"literal","value":"cabin"},{"type":"literal","value":"cable"},{"type":"literal","value":"cable_car"},{"type":"literal","value":"cached"},{"type":"literal","value":"cadence"},{"type":"literal","value":"cake"},{"type":"literal","value":"cake_add"},{"type":"literal","value":"calculate"},{"type":"literal","value":"calendar_add_on"},{"type":"literal","value":"calendar_apps_script"},{"type":"literal","value":"calendar_check"},{"type":"literal","value":"calendar_clock"},{"type":"literal","value":"calendar_lock"},{"type":"literal","value":"calendar_meal"},{"type":"literal","value":"calendar_meal_2"},{"type":"literal","value":"calendar_month"},{"type":"literal","value":"calendar_today"},{"type":"literal","value":"calendar_view_day"},{"type":"literal","value":"calendar_view_month"},{"type":"literal","value":"calendar_view_week"},{"type":"literal","value":"call_end"},{"type":"literal","value":"call_log"},{"type":"literal","value":"call_made"},{"type":"literal","value":"call_merge"},{"type":"literal","value":"call_missed"},{"type":"literal","value":"call_missed_outgoing"},{"type":"literal","value":"call_quality"},{"type":"literal","value":"call_received"},{"type":"literal","value":"call_split"},{"type":"literal","value":"call_to_action"},{"type":"literal","value":"camera_alt"},{"type":"literal","value":"camera_enhance"},{"type":"literal","value":"camera_front"},{"type":"literal","value":"camera_indoor"},{"type":"literal","value":"camera_outdoor"},{"type":"literal","value":"camera_rear"},{"type":"literal","value":"camera_roll"},{"type":"literal","value":"camera_video"},{"type":"literal","value":"cameraswitch"},{"type":"literal","value":"campaign"},{"type":"literal","value":"camping"},{"type":"literal","value":"cancel_presentation"},{"type":"literal","value":"cancel_schedule_send"},{"type":"literal","value":"candle"},{"type":"literal","value":"candlestick_chart"},{"type":"literal","value":"cannabis"},{"type":"literal","value":"captive_portal"},{"type":"literal","value":"capture"},{"type":"literal","value":"car_crash"},{"type":"literal","value":"car_defrost_left"},{"type":"literal","value":"car_defrost_low_left"},{"type":"literal","value":"car_defrost_low_right"},{"type":"literal","value":"car_defrost_mid_left"},{"type":"literal","value":"car_defrost_mid_low_left"},{"type":"literal","value":"car_defrost_mid_low_right"},{"type":"literal","value":"car_defrost_mid_right"},{"type":"literal","value":"car_defrost_right"},{"type":"literal","value":"car_fan_low_left"},{"type":"literal","value":"car_fan_low_mid_left"},{"type":"literal","value":"car_fan_low_right"},{"type":"literal","value":"car_fan_mid_left"},{"type":"literal","value":"car_fan_mid_low_right"},{"type":"literal","value":"car_fan_mid_right"},{"type":"literal","value":"car_fan_recirculate"},{"type":"literal","value":"car_gear"},{"type":"literal","value":"car_lock"},{"type":"literal","value":"car_mirror_heat"},{"type":"literal","value":"car_rental"},{"type":"literal","value":"car_repair"},{"type":"literal","value":"car_tag"},{"type":"literal","value":"card_giftcard"},{"type":"literal","value":"card_membership"},{"type":"literal","value":"card_travel"},{"type":"literal","value":"cardio_load"},{"type":"literal","value":"cardiology"},{"type":"literal","value":"cards"},{"type":"literal","value":"cards_star"},{"type":"literal","value":"carpenter"},{"type":"literal","value":"carry_on_bag"},{"type":"literal","value":"carry_on_bag_checked"},{"type":"literal","value":"carry_on_bag_inactive"},{"type":"literal","value":"carry_on_bag_question"},{"type":"literal","value":"cases"},{"type":"literal","value":"casino"},{"type":"literal","value":"cast"},{"type":"literal","value":"cast_connected"},{"type":"literal","value":"cast_for_education"},{"type":"literal","value":"cast_pause"},{"type":"literal","value":"cast_warning"},{"type":"literal","value":"castle"},{"type":"literal","value":"catching_pokemon"},{"type":"literal","value":"category"},{"type":"literal","value":"category_search"},{"type":"literal","value":"celebration"},{"type":"literal","value":"cell_merge"},{"type":"literal","value":"cell_tower"},{"type":"literal","value":"cell_wifi"},{"type":"literal","value":"center_focus_strong"},{"type":"literal","value":"center_focus_weak"},{"type":"literal","value":"chair_alt"},{"type":"literal","value":"chair_counter"},{"type":"literal","value":"chair_fireplace"},{"type":"literal","value":"chair_umbrella"},{"type":"literal","value":"chalet"},{"type":"literal","value":"change_circle"},{"type":"literal","value":"change_history"},{"type":"literal","value":"charger"},{"type":"literal","value":"charging_station"},{"type":"literal","value":"chart_data"},{"type":"literal","value":"chat"},{"type":"literal","value":"chat_add_on"},{"type":"literal","value":"chat_apps_script"},{"type":"literal","value":"chat_bubble"},{"type":"literal","value":"chat_bubble_outline"},{"type":"literal","value":"chat_error"},{"type":"literal","value":"chat_info"},{"type":"literal","value":"chat_paste_go"},{"type":"literal","value":"chat_paste_go_2"},{"type":"literal","value":"check"},{"type":"literal","value":"check_box"},{"type":"literal","value":"check_box_outline_blank"},{"type":"literal","value":"check_circle"},{"type":"literal","value":"check_circle_outline"},{"type":"literal","value":"check_circle_unread"},{"type":"literal","value":"check_in_out"},{"type":"literal","value":"check_indeterminate_small"},{"type":"literal","value":"check_small"},{"type":"literal","value":"checkbook"},{"type":"literal","value":"checked_bag"},{"type":"literal","value":"checked_bag_question"},{"type":"literal","value":"checklist_rtl"},{"type":"literal","value":"checkroom"},{"type":"literal","value":"cheer"},{"type":"literal","value":"chef_hat"},{"type":"literal","value":"chess"},{"type":"literal","value":"chess_bishop"},{"type":"literal","value":"chess_bishop_2"},{"type":"literal","value":"chess_king"},{"type":"literal","value":"chess_king_2"},{"type":"literal","value":"chess_knight"},{"type":"literal","value":"chess_pawn"},{"type":"literal","value":"chess_pawn_2"},{"type":"literal","value":"chess_queen"},{"type":"literal","value":"chess_rook"},{"type":"literal","value":"chevron_backward"},{"type":"literal","value":"chevron_forward"},{"type":"literal","value":"chevron_left"},{"type":"literal","value":"chevron_right"},{"type":"literal","value":"child_care"},{"type":"literal","value":"child_friendly"},{"type":"literal","value":"child_hat"},{"type":"literal","value":"chip_extraction"},{"type":"literal","value":"chips"},{"type":"literal","value":"chrome_reader_mode"},{"type":"literal","value":"chromecast_2"},{"type":"literal","value":"chromecast_device"},{"type":"literal","value":"chronic"},{"type":"literal","value":"church"},{"type":"literal","value":"cinematic_blur"},{"type":"literal","value":"circle_notifications"},{"type":"literal","value":"circles"},{"type":"literal","value":"circles_ext"},{"type":"literal","value":"clarify"},{"type":"literal","value":"class"},{"type":"literal","value":"clean_hands"},{"type":"literal","value":"cleaning"},{"type":"literal","value":"cleaning_bucket"},{"type":"literal","value":"cleaning_services"},{"type":"literal","value":"clear_all"},{"type":"literal","value":"clear_day"},{"type":"literal","value":"climate_mini_split"},{"type":"literal","value":"clinical_notes"},{"type":"literal","value":"clock_arrow_down"},{"type":"literal","value":"clock_arrow_up"},{"type":"literal","value":"clock_loader_10"},{"type":"literal","value":"clock_loader_20"},{"type":"literal","value":"clock_loader_40"},{"type":"literal","value":"clock_loader_60"},{"type":"literal","value":"clock_loader_80"},{"type":"literal","value":"clock_loader_90"},{"type":"literal","value":"close_fullscreen"},{"type":"literal","value":"close_small"},{"type":"literal","value":"closed_caption"},{"type":"literal","value":"closed_caption_add"},{"type":"literal","value":"closed_caption_disabled"},{"type":"literal","value":"closed_caption_off"},{"type":"literal","value":"cloud_alert"},{"type":"literal","value":"cloud_circle"},{"type":"literal","value":"cloud_done"},{"type":"literal","value":"cloud_download"},{"type":"literal","value":"cloud_lock"},{"type":"literal","value":"cloud_off"},{"type":"literal","value":"cloud_queue"},{"type":"literal","value":"cloud_sync"},{"type":"literal","value":"cloud_upload"},{"type":"literal","value":"cloudy_snowing"},{"type":"literal","value":"co2"},{"type":"literal","value":"co_present"},{"type":"literal","value":"code_blocks"},{"type":"literal","value":"code_off"},{"type":"literal","value":"coffee"},{"type":"literal","value":"coffee_maker"},{"type":"literal","value":"cognition"},{"type":"literal","value":"cognition_2"},{"type":"literal","value":"collapse_all"},{"type":"literal","value":"collapse_content"},{"type":"literal","value":"collections"},{"type":"literal","value":"collections_bookmark"},{"type":"literal","value":"color_lens"},{"type":"literal","value":"colorize"},{"type":"literal","value":"combine_columns"},{"type":"literal","value":"comedy_mask"},{"type":"literal","value":"comic_bubble"},{"type":"literal","value":"comment"},{"type":"literal","value":"comment_bank"},{"type":"literal","value":"comments_disabled"},{"type":"literal","value":"commit"},{"type":"literal","value":"communication"},{"type":"literal","value":"communities"},{"type":"literal","value":"commute"},{"type":"literal","value":"compare"},{"type":"literal","value":"compare_arrows"},{"type":"literal","value":"compass_calibration"},{"type":"literal","value":"component_exchange"},{"type":"literal","value":"compost"},{"type":"literal","value":"compress"},{"type":"literal","value":"computer"},{"type":"literal","value":"computer_arrow_up"},{"type":"literal","value":"computer_cancel"},{"type":"literal","value":"concierge"},{"type":"literal","value":"conditions"},{"type":"literal","value":"confirmation_number"},{"type":"literal","value":"congenital"},{"type":"literal","value":"connect_without_contact"},{"type":"literal","value":"connected_tv"},{"type":"literal","value":"connecting_airports"},{"type":"literal","value":"construction"},{"type":"literal","value":"contact_emergency"},{"type":"literal","value":"contact_mail"},{"type":"literal","value":"contact_page"},{"type":"literal","value":"contact_phone"},{"type":"literal","value":"contact_support"},{"type":"literal","value":"contactless"},{"type":"literal","value":"contactless_off"},{"type":"literal","value":"contacts_product"},{"type":"literal","value":"content_copy"},{"type":"literal","value":"content_cut"},{"type":"literal","value":"content_paste"},{"type":"literal","value":"content_paste_go"},{"type":"literal","value":"content_paste_off"},{"type":"literal","value":"content_paste_search"},{"type":"literal","value":"contextual_token"},{"type":"literal","value":"contextual_token_add"},{"type":"literal","value":"contract"},{"type":"literal","value":"contract_delete"},{"type":"literal","value":"contract_edit"},{"type":"literal","value":"contrast_circle"},{"type":"literal","value":"contrast_rtl_off"},{"type":"literal","value":"contrast_square"},{"type":"literal","value":"control_camera"},{"type":"literal","value":"control_point"},{"type":"literal","value":"control_point_duplicate"},{"type":"literal","value":"controller_gen"},{"type":"literal","value":"conversation"},{"type":"literal","value":"conversion_path"},{"type":"literal","value":"conversion_path_off"},{"type":"literal","value":"convert_to_text"},{"type":"literal","value":"conveyor_belt"},{"type":"literal","value":"cookie"},{"type":"literal","value":"cookie_off"},{"type":"literal","value":"cooking"},{"type":"literal","value":"cool_to_dry"},{"type":"literal","value":"copy_all"},{"type":"literal","value":"copyright"},{"type":"literal","value":"coronavirus"},{"type":"literal","value":"corporate_fare"},{"type":"literal","value":"cottage"},{"type":"literal","value":"counter_0"},{"type":"literal","value":"counter_1"},{"type":"literal","value":"counter_2"},{"type":"literal","value":"counter_3"},{"type":"literal","value":"counter_4"},{"type":"literal","value":"counter_5"},{"type":"literal","value":"counter_6"},{"type":"literal","value":"counter_7"},{"type":"literal","value":"counter_8"},{"type":"literal","value":"counter_9"},{"type":"literal","value":"countertops"},{"type":"literal","value":"create_new_folder"},{"type":"literal","value":"credit_card"},{"type":"literal","value":"credit_card_clock"},{"type":"literal","value":"credit_card_gear"},{"type":"literal","value":"credit_card_heart"},{"type":"literal","value":"credit_card_off"},{"type":"literal","value":"credit_score"},{"type":"literal","value":"crib"},{"type":"literal","value":"crisis_alert"},{"type":"literal","value":"crop_16_9"},{"type":"literal","value":"crop_3_2"},{"type":"literal","value":"crop_5_4"},{"type":"literal","value":"crop_7_5"},{"type":"literal","value":"crop_9_16"},{"type":"literal","value":"crop_din"},{"type":"literal","value":"crop_free"},{"type":"literal","value":"crop_landscape"},{"type":"literal","value":"crop_original"},{"type":"literal","value":"crop_portrait"},{"type":"literal","value":"crop_rotate"},{"type":"literal","value":"crop_square"},{"type":"literal","value":"crossword"},{"type":"literal","value":"crowdsource"},{"type":"literal","value":"cruelty_free"},{"type":"literal","value":"css"},{"type":"literal","value":"csv"},{"type":"literal","value":"currency_bitcoin"},{"type":"literal","value":"currency_exchange"},{"type":"literal","value":"currency_franc"},{"type":"literal","value":"currency_lira"},{"type":"literal","value":"currency_pound"},{"type":"literal","value":"currency_ruble"},{"type":"literal","value":"currency_rupee"},{"type":"literal","value":"currency_rupee_circle"},{"type":"literal","value":"currency_yen"},{"type":"literal","value":"currency_yuan"},{"type":"literal","value":"curtains"},{"type":"literal","value":"curtains_closed"},{"type":"literal","value":"custom_typography"},{"type":"literal","value":"cycle"},{"type":"literal","value":"cyclone"},{"type":"literal","value":"dangerous"},{"type":"literal","value":"dark_mode"},{"type":"literal","value":"dashboard"},{"type":"literal","value":"dashboard_2"},{"type":"literal","value":"dashboard_customize"},{"type":"literal","value":"data_alert"},{"type":"literal","value":"data_array"},{"type":"literal","value":"data_check"},{"type":"literal","value":"data_exploration"},{"type":"literal","value":"data_info_alert"},{"type":"literal","value":"data_loss_prevention"},{"type":"literal","value":"data_object"},{"type":"literal","value":"data_saver_off"},{"type":"literal","value":"data_saver_on"},{"type":"literal","value":"data_table"},{"type":"literal","value":"data_thresholding"},{"type":"literal","value":"data_usage"},{"type":"literal","value":"database"},{"type":"literal","value":"database_off"},{"type":"literal","value":"database_search"},{"type":"literal","value":"database_upload"},{"type":"literal","value":"dataset"},{"type":"literal","value":"dataset_linked"},{"type":"literal","value":"date_range"},{"type":"literal","value":"deblur"},{"type":"literal","value":"deceased"},{"type":"literal","value":"decimal_decrease"},{"type":"literal","value":"decimal_increase"},{"type":"literal","value":"deck"},{"type":"literal","value":"dehaze"},{"type":"literal","value":"delete"},{"type":"literal","value":"delete_forever"},{"type":"literal","value":"delete_history"},{"type":"literal","value":"delete_outline"},{"type":"literal","value":"delete_sweep"},{"type":"literal","value":"delivery_dining"},{"type":"literal","value":"delivery_truck_bolt"},{"type":"literal","value":"delivery_truck_speed"},{"type":"literal","value":"demography"},{"type":"literal","value":"density_large"},{"type":"literal","value":"density_medium"},{"type":"literal","value":"density_small"},{"type":"literal","value":"dentistry"},{"type":"literal","value":"departure_board"},{"type":"literal","value":"deployed_code"},{"type":"literal","value":"deployed_code_account"},{"type":"literal","value":"deployed_code_alert"},{"type":"literal","value":"deployed_code_history"},{"type":"literal","value":"deployed_code_update"},{"type":"literal","value":"dermatology"},{"type":"literal","value":"deselect"},{"type":"literal","value":"design_services"},{"type":"literal","value":"desk"},{"type":"literal","value":"deskphone"},{"type":"literal","value":"desktop_access_disabled"},{"type":"literal","value":"desktop_cloud"},{"type":"literal","value":"desktop_cloud_stack"},{"type":"literal","value":"desktop_landscape"},{"type":"literal","value":"desktop_landscape_add"},{"type":"literal","value":"desktop_mac"},{"type":"literal","value":"desktop_portrait"},{"type":"literal","value":"desktop_windows"},{"type":"literal","value":"destruction"},{"type":"literal","value":"detection_and_zone"},{"type":"literal","value":"detector"},{"type":"literal","value":"detector_alarm"},{"type":"literal","value":"detector_battery"},{"type":"literal","value":"detector_co"},{"type":"literal","value":"detector_offline"},{"type":"literal","value":"detector_smoke"},{"type":"literal","value":"detector_status"},{"type":"literal","value":"developer_board"},{"type":"literal","value":"developer_board_off"},{"type":"literal","value":"developer_guide"},{"type":"literal","value":"developer_mode"},{"type":"literal","value":"developer_mode_tv"},{"type":"literal","value":"device_band"},{"type":"literal","value":"device_hub"},{"type":"literal","value":"device_thermostat"},{"type":"literal","value":"device_unknown"},{"type":"literal","value":"devices"},{"type":"literal","value":"devices_fold"},{"type":"literal","value":"devices_fold_2"},{"type":"literal","value":"devices_off"},{"type":"literal","value":"devices_other"},{"type":"literal","value":"devices_wearables"},{"type":"literal","value":"dew_point"},{"type":"literal","value":"diagnosis"},{"type":"literal","value":"diagonal_line"},{"type":"literal","value":"dialer_sip"},{"type":"literal","value":"dialogs"},{"type":"literal","value":"dialpad"},{"type":"literal","value":"diamond_shine"},{"type":"literal","value":"dictionary"},{"type":"literal","value":"digital_out_of_home"},{"type":"literal","value":"digital_wellbeing"},{"type":"literal","value":"dine_heart"},{"type":"literal","value":"dine_in"},{"type":"literal","value":"dine_lamp"},{"type":"literal","value":"dining"},{"type":"literal","value":"dinner_dining"},{"type":"literal","value":"directions"},{"type":"literal","value":"directions_alt"},{"type":"literal","value":"directions_alt_off"},{"type":"literal","value":"directions_bike"},{"type":"literal","value":"directions_boat"},{"type":"literal","value":"directions_boat_filled"},{"type":"literal","value":"directions_bus"},{"type":"literal","value":"directions_bus_filled"},{"type":"literal","value":"directions_car"},{"type":"literal","value":"directions_car_filled"},{"type":"literal","value":"directions_off"},{"type":"literal","value":"directions_railway"},{"type":"literal","value":"directions_railway_2"},{"type":"literal","value":"directions_railway_filled"},{"type":"literal","value":"directions_run"},{"type":"literal","value":"directions_subway"},{"type":"literal","value":"directions_subway_filled"},{"type":"literal","value":"directions_transit"},{"type":"literal","value":"directions_transit_filled"},{"type":"literal","value":"directions_walk"},{"type":"literal","value":"directory_sync"},{"type":"literal","value":"dirty_lens"},{"type":"literal","value":"disabled_by_default"},{"type":"literal","value":"disabled_visible"},{"type":"literal","value":"disc_full"},{"type":"literal","value":"discount"},{"type":"literal","value":"discover_tune"},{"type":"literal","value":"dishwasher_gen"},{"type":"literal","value":"display_external_input"},{"type":"literal","value":"display_settings"},{"type":"literal","value":"distance"},{"type":"literal","value":"diversity_1"},{"type":"literal","value":"diversity_2"},{"type":"literal","value":"diversity_3"},{"type":"literal","value":"diversity_4"},{"type":"literal","value":"dns"},{"type":"literal","value":"do_disturb"},{"type":"literal","value":"do_disturb_alt"},{"type":"literal","value":"do_disturb_off"},{"type":"literal","value":"do_disturb_on"},{"type":"literal","value":"do_not_disturb"},{"type":"literal","value":"do_not_disturb_alt"},{"type":"literal","value":"do_not_disturb_off"},{"type":"literal","value":"do_not_disturb_on"},{"type":"literal","value":"do_not_disturb_on_total_silence"},{"type":"literal","value":"do_not_step"},{"type":"literal","value":"do_not_touch"},{"type":"literal","value":"dock"},{"type":"literal","value":"dock_to_bottom"},{"type":"literal","value":"dock_to_left"},{"type":"literal","value":"dock_to_right"},{"type":"literal","value":"docs"},{"type":"literal","value":"docs_add_on"},{"type":"literal","value":"docs_apps_script"},{"type":"literal","value":"document_scanner"},{"type":"literal","value":"document_search"},{"type":"literal","value":"domain"},{"type":"literal","value":"domain_add"},{"type":"literal","value":"domain_disabled"},{"type":"literal","value":"domain_verification"},{"type":"literal","value":"domain_verification_off"},{"type":"literal","value":"domino_mask"},{"type":"literal","value":"done_all"},{"type":"literal","value":"done_outline"},{"type":"literal","value":"donut_large"},{"type":"literal","value":"donut_small"},{"type":"literal","value":"door_back"},{"type":"literal","value":"door_front"},{"type":"literal","value":"door_open"},{"type":"literal","value":"door_sensor"},{"type":"literal","value":"door_sliding"},{"type":"literal","value":"doorbell"},{"type":"literal","value":"doorbell_3p"},{"type":"literal","value":"doorbell_chime"},{"type":"literal","value":"double_arrow"},{"type":"literal","value":"downhill_skiing"},{"type":"literal","value":"download_2"},{"type":"literal","value":"download_done"},{"type":"literal","value":"download_for_offline"},{"type":"literal","value":"downloading"},{"type":"literal","value":"draft"},{"type":"literal","value":"draft_orders"},{"type":"literal","value":"drafts"},{"type":"literal","value":"drag_click"},{"type":"literal","value":"drag_handle"},{"type":"literal","value":"drag_indicator"},{"type":"literal","value":"drag_pan"},{"type":"literal","value":"draw"},{"type":"literal","value":"draw_abstract"},{"type":"literal","value":"draw_collage"},{"type":"literal","value":"dresser"},{"type":"literal","value":"drive_eta"},{"type":"literal","value":"drive_export"},{"type":"literal","value":"drive_file_move"},{"type":"literal","value":"drive_file_move_outline"},{"type":"literal","value":"drive_file_move_rtl"},{"type":"literal","value":"drive_file_rename_outline"},{"type":"literal","value":"drive_folder_upload"},{"type":"literal","value":"drone_2"},{"type":"literal","value":"dropdown"},{"type":"literal","value":"dropper_eye"},{"type":"literal","value":"dry"},{"type":"literal","value":"dry_cleaning"},{"type":"literal","value":"dual_screen"},{"type":"literal","value":"duo"},{"type":"literal","value":"dvr"},{"type":"literal","value":"dynamic_feed"},{"type":"literal","value":"dynamic_form"},{"type":"literal","value":"e911_avatar"},{"type":"literal","value":"e911_emergency"},{"type":"literal","value":"e_mobiledata"},{"type":"literal","value":"e_mobiledata_badge"},{"type":"literal","value":"ear_sound"},{"type":"literal","value":"earbud_case"},{"type":"literal","value":"earbud_left"},{"type":"literal","value":"earbud_right"},{"type":"literal","value":"earbuds_2"},{"type":"literal","value":"earbuds_battery"},{"type":"literal","value":"early_on"},{"type":"literal","value":"earthquake"},{"type":"literal","value":"east"},{"type":"literal","value":"ecg"},{"type":"literal","value":"ecg_heart"},{"type":"literal","value":"eco"},{"type":"literal","value":"eda"},{"type":"literal","value":"edgesensor_high"},{"type":"literal","value":"edgesensor_low"},{"type":"literal","value":"edit"},{"type":"literal","value":"edit_arrow_down"},{"type":"literal","value":"edit_arrow_up"},{"type":"literal","value":"edit_attributes"},{"type":"literal","value":"edit_audio"},{"type":"literal","value":"edit_calendar"},{"type":"literal","value":"edit_document"},{"type":"literal","value":"edit_location"},{"type":"literal","value":"edit_location_alt"},{"type":"literal","value":"edit_note"},{"type":"literal","value":"edit_notifications"},{"type":"literal","value":"edit_off"},{"type":"literal","value":"edit_road"},{"type":"literal","value":"edit_square"},{"type":"literal","value":"editor_choice"},{"type":"literal","value":"egg"},{"type":"literal","value":"egg_alt"},{"type":"literal","value":"elderly"},{"type":"literal","value":"elderly_woman"},{"type":"literal","value":"electric_bike"},{"type":"literal","value":"electric_bolt"},{"type":"literal","value":"electric_car"},{"type":"literal","value":"electric_meter"},{"type":"literal","value":"electric_moped"},{"type":"literal","value":"electric_rickshaw"},{"type":"literal","value":"electric_scooter"},{"type":"literal","value":"electrical_services"},{"type":"literal","value":"elevator"},{"type":"literal","value":"emergency"},{"type":"literal","value":"emergency_heat"},{"type":"literal","value":"emergency_heat_2"},{"type":"literal","value":"emergency_home"},{"type":"literal","value":"emergency_recording"},{"type":"literal","value":"emergency_share"},{"type":"literal","value":"emergency_share_off"},{"type":"literal","value":"emoji_emotions"},{"type":"literal","value":"emoji_events"},{"type":"literal","value":"emoji_food_beverage"},{"type":"literal","value":"emoji_language"},{"type":"literal","value":"emoji_nature"},{"type":"literal","value":"emoji_objects"},{"type":"literal","value":"emoji_people"},{"type":"literal","value":"emoji_symbols"},{"type":"literal","value":"emoji_transportation"},{"type":"literal","value":"emoticon"},{"type":"literal","value":"empty_dashboard"},{"type":"literal","value":"enable"},{"type":"literal","value":"encrypted"},{"type":"literal","value":"encrypted_add"},{"type":"literal","value":"encrypted_add_circle"},{"type":"literal","value":"encrypted_minus_circle"},{"type":"literal","value":"encrypted_off"},{"type":"literal","value":"endocrinology"},{"type":"literal","value":"energy"},{"type":"literal","value":"energy_program_saving"},{"type":"literal","value":"energy_program_time_used"},{"type":"literal","value":"energy_savings_leaf"},{"type":"literal","value":"engineering"},{"type":"literal","value":"enhanced_encryption"},{"type":"literal","value":"ent"},{"type":"literal","value":"enterprise"},{"type":"literal","value":"enterprise_off"},{"type":"literal","value":"equalizer"},{"type":"literal","value":"eraser_size_1"},{"type":"literal","value":"eraser_size_2"},{"type":"literal","value":"eraser_size_3"},{"type":"literal","value":"eraser_size_4"},{"type":"literal","value":"eraser_size_5"},{"type":"literal","value":"error_med"},{"type":"literal","value":"error_outline"},{"type":"literal","value":"escalator"},{"type":"literal","value":"escalator_warning"},{"type":"literal","value":"euro"},{"type":"literal","value":"euro_symbol"},{"type":"literal","value":"ev_mobiledata_badge"},{"type":"literal","value":"ev_shadow"},{"type":"literal","value":"ev_shadow_add"},{"type":"literal","value":"ev_shadow_minus"},{"type":"literal","value":"ev_station"},{"type":"literal","value":"event_available"},{"type":"literal","value":"event_busy"},{"type":"literal","value":"event_list"},{"type":"literal","value":"event_note"},{"type":"literal","value":"event_repeat"},{"type":"literal","value":"event_seat"},{"type":"literal","value":"event_upcoming"},{"type":"literal","value":"exclamation"},{"type":"literal","value":"exercise"},{"type":"literal","value":"exit_to_app"},{"type":"literal","value":"expand_all"},{"type":"literal","value":"expand_circle_down"},{"type":"literal","value":"expand_circle_right"},{"type":"literal","value":"expand_circle_up"},{"type":"literal","value":"expand_content"},{"type":"literal","value":"expand_less"},{"type":"literal","value":"expand_more"},{"type":"literal","value":"expansion_panels"},{"type":"literal","value":"experiment"},{"type":"literal","value":"explicit"},{"type":"literal","value":"explore"},{"type":"literal","value":"explore_nearby"},{"type":"literal","value":"explore_off"},{"type":"literal","value":"explosion"},{"type":"literal","value":"export_notes"},{"type":"literal","value":"exposure"},{"type":"literal","value":"exposure_neg_1"},{"type":"literal","value":"exposure_neg_2"},{"type":"literal","value":"exposure_plus_1"},{"type":"literal","value":"exposure_plus_2"},{"type":"literal","value":"exposure_zero"},{"type":"literal","value":"extension"},{"type":"literal","value":"extension_off"},{"type":"literal","value":"eye_tracking"},{"type":"literal","value":"eyeglasses_2"},{"type":"literal","value":"eyeglasses_2_sound"},{"type":"literal","value":"face"},{"type":"literal","value":"face_2"},{"type":"literal","value":"face_3"},{"type":"literal","value":"face_4"},{"type":"literal","value":"face_5"},{"type":"literal","value":"face_6"},{"type":"literal","value":"face_down"},{"type":"literal","value":"face_left"},{"type":"literal","value":"face_nod"},{"type":"literal","value":"face_retouching_natural"},{"type":"literal","value":"face_retouching_off"},{"type":"literal","value":"face_right"},{"type":"literal","value":"face_shake"},{"type":"literal","value":"face_unlock"},{"type":"literal","value":"face_up"},{"type":"literal","value":"fact_check"},{"type":"literal","value":"factory"},{"type":"literal","value":"falling"},{"type":"literal","value":"familiar_face_and_zone"},{"type":"literal","value":"family_group"},{"type":"literal","value":"family_history"},{"type":"literal","value":"family_home"},{"type":"literal","value":"family_link"},{"type":"literal","value":"family_restroom"},{"type":"literal","value":"family_star"},{"type":"literal","value":"fan_focus"},{"type":"literal","value":"fan_indirect"},{"type":"literal","value":"farsight_digital"},{"type":"literal","value":"fast_forward"},{"type":"literal","value":"fast_rewind"},{"type":"literal","value":"fastfood"},{"type":"literal","value":"faucet"},{"type":"literal","value":"favorite"},{"type":"literal","value":"favorite_border"},{"type":"literal","value":"fax"},{"type":"literal","value":"feature_search"},{"type":"literal","value":"featured_play_list"},{"type":"literal","value":"featured_seasonal_and_gifts"},{"type":"literal","value":"featured_video"},{"type":"literal","value":"feedback"},{"type":"literal","value":"female"},{"type":"literal","value":"femur"},{"type":"literal","value":"femur_alt"},{"type":"literal","value":"fence"},{"type":"literal","value":"fertile"},{"type":"literal","value":"festival"},{"type":"literal","value":"fiber_dvr"},{"type":"literal","value":"fiber_manual_record"},{"type":"literal","value":"fiber_new"},{"type":"literal","value":"fiber_pin"},{"type":"literal","value":"fiber_smart_record"},{"type":"literal","value":"file_copy"},{"type":"literal","value":"file_copy_off"},{"type":"literal","value":"file_download"},{"type":"literal","value":"file_download_done"},{"type":"literal","value":"file_download_off"},{"type":"literal","value":"file_export"},{"type":"literal","value":"file_json"},{"type":"literal","value":"file_map"},{"type":"literal","value":"file_map_stack"},{"type":"literal","value":"file_open"},{"type":"literal","value":"file_png"},{"type":"literal","value":"file_present"},{"type":"literal","value":"file_save"},{"type":"literal","value":"file_save_off"},{"type":"literal","value":"file_upload"},{"type":"literal","value":"file_upload_off"},{"type":"literal","value":"files"},{"type":"literal","value":"filter_1"},{"type":"literal","value":"filter_2"},{"type":"literal","value":"filter_3"},{"type":"literal","value":"filter_4"},{"type":"literal","value":"filter_5"},{"type":"literal","value":"filter_6"},{"type":"literal","value":"filter_7"},{"type":"literal","value":"filter_8"},{"type":"literal","value":"filter_9"},{"type":"literal","value":"filter_9_plus"},{"type":"literal","value":"filter_alt"},{"type":"literal","value":"filter_alt_off"},{"type":"literal","value":"filter_arrow_right"},{"type":"literal","value":"filter_b_and_w"},{"type":"literal","value":"filter_center_focus"},{"type":"literal","value":"filter_drama"},{"type":"literal","value":"filter_frames"},{"type":"literal","value":"filter_hdr"},{"type":"literal","value":"filter_list"},{"type":"literal","value":"filter_list_alt"},{"type":"literal","value":"filter_list_off"},{"type":"literal","value":"filter_none"},{"type":"literal","value":"filter_retrolux"},{"type":"literal","value":"filter_tilt_shift"},{"type":"literal","value":"filter_vintage"},{"type":"literal","value":"finance"},{"type":"literal","value":"finance_chip"},{"type":"literal","value":"finance_mode"},{"type":"literal","value":"find_in_page"},{"type":"literal","value":"find_replace"},{"type":"literal","value":"fingerprint"},{"type":"literal","value":"fingerprint_off"},{"type":"literal","value":"fire_extinguisher"},{"type":"literal","value":"fire_hydrant"},{"type":"literal","value":"fire_hydrant_alt"},{"type":"literal","value":"fire_truck"},{"type":"literal","value":"first_page"},{"type":"literal","value":"fit_page"},{"type":"literal","value":"fit_page_height"},{"type":"literal","value":"fit_page_width"},{"type":"literal","value":"fit_screen"},{"type":"literal","value":"fit_width"},{"type":"literal","value":"fitbit"},{"type":"literal","value":"fitness_center"},{"type":"literal","value":"fitness_tracker"},{"type":"literal","value":"fitness_trackers"},{"type":"literal","value":"flag_2"},{"type":"literal","value":"flag_check"},{"type":"literal","value":"flag_circle"},{"type":"literal","value":"flaky"},{"type":"literal","value":"flare"},{"type":"literal","value":"flash_auto"},{"type":"literal","value":"flash_off"},{"type":"literal","value":"flash_on"},{"type":"literal","value":"flashlight_off"},{"type":"literal","value":"flashlight_on"},{"type":"literal","value":"flatware"},{"type":"literal","value":"flex_direction"},{"type":"literal","value":"flex_no_wrap"},{"type":"literal","value":"flex_wrap"},{"type":"literal","value":"flight"},{"type":"literal","value":"flight_class"},{"type":"literal","value":"flight_land"},{"type":"literal","value":"flight_takeoff"},{"type":"literal","value":"flights_and_hotels"},{"type":"literal","value":"flip_camera_android"},{"type":"literal","value":"flip_camera_ios"},{"type":"literal","value":"flip_to_back"},{"type":"literal","value":"flip_to_front"},{"type":"literal","value":"float_landscape_2"},{"type":"literal","value":"float_portrait_2"},{"type":"literal","value":"flood"},{"type":"literal","value":"floor"},{"type":"literal","value":"floor_lamp"},{"type":"literal","value":"flowsheet"},{"type":"literal","value":"fluid"},{"type":"literal","value":"fluid_balance"},{"type":"literal","value":"fluid_med"},{"type":"literal","value":"fluorescent"},{"type":"literal","value":"flutter"},{"type":"literal","value":"flutter_dash"},{"type":"literal","value":"flyover"},{"type":"literal","value":"fmd_bad"},{"type":"literal","value":"fmd_good"},{"type":"literal","value":"foggy"},{"type":"literal","value":"folded_hands"},{"type":"literal","value":"folder_check"},{"type":"literal","value":"folder_check_2"},{"type":"literal","value":"folder_code"},{"type":"literal","value":"folder_copy"},{"type":"literal","value":"folder_data"},{"type":"literal","value":"folder_delete"},{"type":"literal","value":"folder_eye"},{"type":"literal","value":"folder_info"},{"type":"literal","value":"folder_limited"},{"type":"literal","value":"folder_managed"},{"type":"literal","value":"folder_match"},{"type":"literal","value":"folder_off"},{"type":"literal","value":"folder_open"},{"type":"literal","value":"folder_shared"},{"type":"literal","value":"folder_special"},{"type":"literal","value":"folder_supervised"},{"type":"literal","value":"folder_zip"},{"type":"literal","value":"follow_the_signs"},{"type":"literal","value":"font_download"},{"type":"literal","value":"font_download_off"},{"type":"literal","value":"food_bank"},{"type":"literal","value":"foot_bones"},{"type":"literal","value":"footprint"},{"type":"literal","value":"for_you"},{"type":"literal","value":"forest"},{"type":"literal","value":"fork_left"},{"type":"literal","value":"fork_right"},{"type":"literal","value":"fork_spoon"},{"type":"literal","value":"forklift"},{"type":"literal","value":"format_align_center"},{"type":"literal","value":"format_align_justify"},{"type":"literal","value":"format_align_left"},{"type":"literal","value":"format_align_right"},{"type":"literal","value":"format_bold"},{"type":"literal","value":"format_clear"},{"type":"literal","value":"format_color_fill"},{"type":"literal","value":"format_color_reset"},{"type":"literal","value":"format_color_text"},{"type":"literal","value":"format_h1"},{"type":"literal","value":"format_h2"},{"type":"literal","value":"format_h3"},{"type":"literal","value":"format_h4"},{"type":"literal","value":"format_h5"},{"type":"literal","value":"format_h6"},{"type":"literal","value":"format_image_left"},{"type":"literal","value":"format_image_right"},{"type":"literal","value":"format_indent_decrease"},{"type":"literal","value":"format_indent_increase"},{"type":"literal","value":"format_ink_highlighter"},{"type":"literal","value":"format_italic"},{"type":"literal","value":"format_letter_spacing"},{"type":"literal","value":"format_letter_spacing_2"},{"type":"literal","value":"format_letter_spacing_standard"},{"type":"literal","value":"format_letter_spacing_wide"},{"type":"literal","value":"format_letter_spacing_wider"},{"type":"literal","value":"format_line_spacing"},{"type":"literal","value":"format_list_bulleted"},{"type":"literal","value":"format_list_bulleted_add"},{"type":"literal","value":"format_list_numbered"},{"type":"literal","value":"format_list_numbered_rtl"},{"type":"literal","value":"format_overline"},{"type":"literal","value":"format_paint"},{"type":"literal","value":"format_paragraph"},{"type":"literal","value":"format_quote"},{"type":"literal","value":"format_quote_off"},{"type":"literal","value":"format_shapes"},{"type":"literal","value":"format_size"},{"type":"literal","value":"format_strikethrough"},{"type":"literal","value":"format_text_clip"},{"type":"literal","value":"format_text_overflow"},{"type":"literal","value":"format_text_wrap"},{"type":"literal","value":"format_textdirection_l_to_r"},{"type":"literal","value":"format_textdirection_r_to_l"},{"type":"literal","value":"format_textdirection_vertical"},{"type":"literal","value":"format_underlined"},{"type":"literal","value":"format_underlined_squiggle"},{"type":"literal","value":"forms_add_on"},{"type":"literal","value":"forms_apps_script"},{"type":"literal","value":"fort"},{"type":"literal","value":"forum"},{"type":"literal","value":"forward_10"},{"type":"literal","value":"forward_30"},{"type":"literal","value":"forward_5"},{"type":"literal","value":"forward_circle"},{"type":"literal","value":"forward_media"},{"type":"literal","value":"forward_to_inbox"},{"type":"literal","value":"foundation"},{"type":"literal","value":"fragrance"},{"type":"literal","value":"frame_inspect"},{"type":"literal","value":"frame_person"},{"type":"literal","value":"frame_person_mic"},{"type":"literal","value":"frame_person_off"},{"type":"literal","value":"frame_reload"},{"type":"literal","value":"frame_source"},{"type":"literal","value":"free_breakfast"},{"type":"literal","value":"free_cancellation"},{"type":"literal","value":"front_hand"},{"type":"literal","value":"front_loader"},{"type":"literal","value":"full_coverage"},{"type":"literal","value":"full_hd"},{"type":"literal","value":"full_stacked_bar_chart"},{"type":"literal","value":"fullscreen"},{"type":"literal","value":"fullscreen_exit"},{"type":"literal","value":"fullscreen_portrait"},{"type":"literal","value":"functions"},{"type":"literal","value":"funicular"},{"type":"literal","value":"g_mobiledata"},{"type":"literal","value":"g_mobiledata_badge"},{"type":"literal","value":"g_translate"},{"type":"literal","value":"gallery_thumbnail"},{"type":"literal","value":"gamepad"},{"type":"literal","value":"games"},{"type":"literal","value":"garage"},{"type":"literal","value":"garage_check"},{"type":"literal","value":"garage_door"},{"type":"literal","value":"garage_home"},{"type":"literal","value":"garage_money"},{"type":"literal","value":"garden_cart"},{"type":"literal","value":"gas_meter"},{"type":"literal","value":"gastroenterology"},{"type":"literal","value":"gate"},{"type":"literal","value":"gavel"},{"type":"literal","value":"general_device"},{"type":"literal","value":"generating_tokens"},{"type":"literal","value":"genetics"},{"type":"literal","value":"genres"},{"type":"literal","value":"gesture"},{"type":"literal","value":"gesture_select"},{"type":"literal","value":"get_app"},{"type":"literal","value":"gif"},{"type":"literal","value":"gif_2"},{"type":"literal","value":"gif_box"},{"type":"literal","value":"girl"},{"type":"literal","value":"gite"},{"type":"literal","value":"glass_cup"},{"type":"literal","value":"globe_asia"},{"type":"literal","value":"globe_book"},{"type":"literal","value":"globe_location_pin"},{"type":"literal","value":"globe_uk"},{"type":"literal","value":"glucose"},{"type":"literal","value":"glyphs"},{"type":"literal","value":"go_to_line"},{"type":"literal","value":"golf_course"},{"type":"literal","value":"gondola_lift"},{"type":"literal","value":"google_home_devices"},{"type":"literal","value":"google_tv_remote"},{"type":"literal","value":"google_wifi"},{"type":"literal","value":"gpp_bad"},{"type":"literal","value":"gpp_good"},{"type":"literal","value":"gpp_maybe"},{"type":"literal","value":"gps_fixed"},{"type":"literal","value":"gps_not_fixed"},{"type":"literal","value":"gps_off"},{"type":"literal","value":"grade"},{"type":"literal","value":"gradient"},{"type":"literal","value":"grading"},{"type":"literal","value":"grain"},{"type":"literal","value":"graph_1"},{"type":"literal","value":"graph_2"},{"type":"literal","value":"graph_3"},{"type":"literal","value":"graph_4"},{"type":"literal","value":"graph_5"},{"type":"literal","value":"graph_6"},{"type":"literal","value":"graph_7"},{"type":"literal","value":"graphic_eq"},{"type":"literal","value":"grass"},{"type":"literal","value":"grid_3x3"},{"type":"literal","value":"grid_3x3_off"},{"type":"literal","value":"grid_4x4"},{"type":"literal","value":"grid_goldenratio"},{"type":"literal","value":"grid_guides"},{"type":"literal","value":"grid_off"},{"type":"literal","value":"grid_on"},{"type":"literal","value":"grid_view"},{"type":"literal","value":"grocery"},{"type":"literal","value":"group_add"},{"type":"literal","value":"group_off"},{"type":"literal","value":"group_remove"},{"type":"literal","value":"group_search"},{"type":"literal","value":"group_work"},{"type":"literal","value":"grouped_bar_chart"},{"type":"literal","value":"groups_2"},{"type":"literal","value":"groups_3"},{"type":"literal","value":"guardian"},{"type":"literal","value":"gynecology"},{"type":"literal","value":"h_mobiledata"},{"type":"literal","value":"h_mobiledata_badge"},{"type":"literal","value":"h_plus_mobiledata"},{"type":"literal","value":"h_plus_mobiledata_badge"},{"type":"literal","value":"hail"},{"type":"literal","value":"hallway"},{"type":"literal","value":"hanami_dango"},{"type":"literal","value":"hand_bones"},{"type":"literal","value":"hand_gesture"},{"type":"literal","value":"hand_gesture_off"},{"type":"literal","value":"hand_meal"},{"type":"literal","value":"hand_package"},{"type":"literal","value":"handheld_controller"},{"type":"literal","value":"handshake"},{"type":"literal","value":"handyman"},{"type":"literal","value":"hangout_video"},{"type":"literal","value":"hangout_video_off"},{"type":"literal","value":"hard_disk"},{"type":"literal","value":"hard_drive"},{"type":"literal","value":"hard_drive_2"},{"type":"literal","value":"hardware"},{"type":"literal","value":"hd"},{"type":"literal","value":"hdr_auto"},{"type":"literal","value":"hdr_auto_select"},{"type":"literal","value":"hdr_enhanced_select"},{"type":"literal","value":"hdr_off"},{"type":"literal","value":"hdr_off_select"},{"type":"literal","value":"hdr_on"},{"type":"literal","value":"hdr_on_select"},{"type":"literal","value":"hdr_plus"},{"type":"literal","value":"hdr_plus_off"},{"type":"literal","value":"hdr_strong"},{"type":"literal","value":"hdr_weak"},{"type":"literal","value":"head_mounted_device"},{"type":"literal","value":"headphones_battery"},{"type":"literal","value":"headset_mic"},{"type":"literal","value":"headset_off"},{"type":"literal","value":"healing"},{"type":"literal","value":"health_and_beauty"},{"type":"literal","value":"health_and_safety"},{"type":"literal","value":"health_cross"},{"type":"literal","value":"health_metrics"},{"type":"literal","value":"heap_snapshot_large"},{"type":"literal","value":"heap_snapshot_multiple"},{"type":"literal","value":"heap_snapshot_thumbnail"},{"type":"literal","value":"hearing"},{"type":"literal","value":"hearing_aid"},{"type":"literal","value":"hearing_aid_disabled"},{"type":"literal","value":"hearing_aid_disabled_left"},{"type":"literal","value":"hearing_aid_left"},{"type":"literal","value":"hearing_disabled"},{"type":"literal","value":"heart_broken"},{"type":"literal","value":"heart_check"},{"type":"literal","value":"heart_minus"},{"type":"literal","value":"heart_plus"},{"type":"literal","value":"heart_smile"},{"type":"literal","value":"heat"},{"type":"literal","value":"heat_pump"},{"type":"literal","value":"heat_pump_balance"},{"type":"literal","value":"helicopter"},{"type":"literal","value":"help"},{"type":"literal","value":"help_center"},{"type":"literal","value":"help_clinic"},{"type":"literal","value":"help_outline"},{"type":"literal","value":"hematology"},{"type":"literal","value":"hevc"},{"type":"literal","value":"hide_image"},{"type":"literal","value":"hide_source"},{"type":"literal","value":"high_chair"},{"type":"literal","value":"high_density"},{"type":"literal","value":"high_quality"},{"type":"literal","value":"high_res"},{"type":"literal","value":"highlight"},{"type":"literal","value":"highlight_alt"},{"type":"literal","value":"highlight_keyboard_focus"},{"type":"literal","value":"highlight_mouse_cursor"},{"type":"literal","value":"highlight_off"},{"type":"literal","value":"highlight_text_cursor"},{"type":"literal","value":"highlighter_size_1"},{"type":"literal","value":"highlighter_size_2"},{"type":"literal","value":"highlighter_size_3"},{"type":"literal","value":"highlighter_size_4"},{"type":"literal","value":"highlighter_size_5"},{"type":"literal","value":"hiking"},{"type":"literal","value":"history_2"},{"type":"literal","value":"history_edu"},{"type":"literal","value":"history_off"},{"type":"literal","value":"history_toggle_off"},{"type":"literal","value":"hive"},{"type":"literal","value":"hls"},{"type":"literal","value":"hls_off"},{"type":"literal","value":"holiday_village"},{"type":"literal","value":"home"},{"type":"literal","value":"home_and_garden"},{"type":"literal","value":"home_app_logo"},{"type":"literal","value":"home_filled"},{"type":"literal","value":"home_health"},{"type":"literal","value":"home_improvement_and_tools"},{"type":"literal","value":"home_iot_device"},{"type":"literal","value":"home_max"},{"type":"literal","value":"home_max_dots"},{"type":"literal","value":"home_mini"},{"type":"literal","value":"home_pin"},{"type":"literal","value":"home_repair_service"},{"type":"literal","value":"home_speaker"},{"type":"literal","value":"home_storage"},{"type":"literal","value":"home_work"},{"type":"literal","value":"horizontal_distribute"},{"type":"literal","value":"horizontal_rule"},{"type":"literal","value":"horizontal_split"},{"type":"literal","value":"hot_tub"},{"type":"literal","value":"hotel"},{"type":"literal","value":"hotel_class"},{"type":"literal","value":"hourglass_arrow_down"},{"type":"literal","value":"hourglass_arrow_up"},{"type":"literal","value":"hourglass_bottom"},{"type":"literal","value":"hourglass_disabled"},{"type":"literal","value":"hourglass_empty"},{"type":"literal","value":"hourglass_full"},{"type":"literal","value":"hourglass_pause"},{"type":"literal","value":"hourglass_top"},{"type":"literal","value":"house_siding"},{"type":"literal","value":"house_with_shield"},{"type":"literal","value":"houseboat"},{"type":"literal","value":"household_supplies"},{"type":"literal","value":"hov"},{"type":"literal","value":"how_to_reg"},{"type":"literal","value":"how_to_vote"},{"type":"literal","value":"hr_resting"},{"type":"literal","value":"http"},{"type":"literal","value":"https"},{"type":"literal","value":"hub"},{"type":"literal","value":"humerus"},{"type":"literal","value":"humerus_alt"},{"type":"literal","value":"humidity_high"},{"type":"literal","value":"humidity_indoor"},{"type":"literal","value":"humidity_low"},{"type":"literal","value":"humidity_mid"},{"type":"literal","value":"humidity_percentage"},{"type":"literal","value":"hvac"},{"type":"literal","value":"hvac_max_defrost"},{"type":"literal","value":"ice_skating"},{"type":"literal","value":"icecream"},{"type":"literal","value":"id_card"},{"type":"literal","value":"identity_aware_proxy"},{"type":"literal","value":"identity_platform"},{"type":"literal","value":"ifl"},{"type":"literal","value":"iframe_off"},{"type":"literal","value":"image_arrow_up"},{"type":"literal","value":"image_aspect_ratio"},{"type":"literal","value":"image_inset"},{"type":"literal","value":"image_not_supported"},{"type":"literal","value":"image_search"},{"type":"literal","value":"imagesearch_roller"},{"type":"literal","value":"imagesmode"},{"type":"literal","value":"immunology"},{"type":"literal","value":"import_contacts"},{"type":"literal","value":"import_export"},{"type":"literal","value":"important_devices"},{"type":"literal","value":"in_home_mode"},{"type":"literal","value":"inactive_order"},{"type":"literal","value":"inbox"},{"type":"literal","value":"inbox_customize"},{"type":"literal","value":"inbox_text"},{"type":"literal","value":"inbox_text_asterisk"},{"type":"literal","value":"inbox_text_person"},{"type":"literal","value":"inbox_text_share"},{"type":"literal","value":"incomplete_circle"},{"type":"literal","value":"indeterminate_check_box"},{"type":"literal","value":"indeterminate_question_box"},{"type":"literal","value":"info_i"},{"type":"literal","value":"info_outline"},{"type":"literal","value":"infrared"},{"type":"literal","value":"ink_eraser"},{"type":"literal","value":"ink_eraser_off"},{"type":"literal","value":"ink_highlighter"},{"type":"literal","value":"ink_highlighter_move"},{"type":"literal","value":"ink_marker"},{"type":"literal","value":"ink_pen"},{"type":"literal","value":"ink_selection"},{"type":"literal","value":"inpatient"},{"type":"literal","value":"input_circle"},{"type":"literal","value":"insert_chart"},{"type":"literal","value":"insert_chart_outlined"},{"type":"literal","value":"insert_comment"},{"type":"literal","value":"insert_drive_file"},{"type":"literal","value":"insert_emoticon"},{"type":"literal","value":"insert_invitation"},{"type":"literal","value":"insert_link"},{"type":"literal","value":"insert_page_break"},{"type":"literal","value":"insert_photo"},{"type":"literal","value":"insert_text"},{"type":"literal","value":"insights"},{"type":"literal","value":"install_desktop"},{"type":"literal","value":"install_mobile"},{"type":"literal","value":"instant_mix"},{"type":"literal","value":"integration_instructions"},{"type":"literal","value":"interactive_space"},{"type":"literal","value":"interests"},{"type":"literal","value":"interpreter_mode"},{"type":"literal","value":"inventory"},{"type":"literal","value":"inventory_2"},{"type":"literal","value":"invert_colors"},{"type":"literal","value":"invert_colors_off"},{"type":"literal","value":"ios_share"},{"type":"literal","value":"iron"},{"type":"literal","value":"iso"},{"type":"literal","value":"jamboard_kiosk"},{"type":"literal","value":"japanese_curry"},{"type":"literal","value":"japanese_flag"},{"type":"literal","value":"javascript"},{"type":"literal","value":"join_full"},{"type":"literal","value":"join_inner"},{"type":"literal","value":"join_left"},{"type":"literal","value":"join_right"},{"type":"literal","value":"joystick"},{"type":"literal","value":"jump_to_element"},{"type":"literal","value":"kanji_alcohol"},{"type":"literal","value":"kayaking"},{"type":"literal","value":"kebab_dining"},{"type":"literal","value":"keep"},{"type":"literal","value":"keep_off"},{"type":"literal","value":"keep_public"},{"type":"literal","value":"kettle"},{"type":"literal","value":"key_off"},{"type":"literal","value":"key_vertical"},{"type":"literal","value":"key_visualizer"},{"type":"literal","value":"keyboard_alt"},{"type":"literal","value":"keyboard_arrow_down"},{"type":"literal","value":"keyboard_arrow_left"},{"type":"literal","value":"keyboard_arrow_right"},{"type":"literal","value":"keyboard_arrow_up"},{"type":"literal","value":"keyboard_backspace"},{"type":"literal","value":"keyboard_capslock"},{"type":"literal","value":"keyboard_capslock_badge"},{"type":"literal","value":"keyboard_command_key"},{"type":"literal","value":"keyboard_control_key"},{"type":"literal","value":"keyboard_double_arrow_down"},{"type":"literal","value":"keyboard_double_arrow_left"},{"type":"literal","value":"keyboard_double_arrow_right"},{"type":"literal","value":"keyboard_double_arrow_up"},{"type":"literal","value":"keyboard_external_input"},{"type":"literal","value":"keyboard_full"},{"type":"literal","value":"keyboard_hide"},{"type":"literal","value":"keyboard_keys"},{"type":"literal","value":"keyboard_lock"},{"type":"literal","value":"keyboard_lock_off"},{"type":"literal","value":"keyboard_off"},{"type":"literal","value":"keyboard_onscreen"},{"type":"literal","value":"keyboard_option_key"},{"type":"literal","value":"keyboard_previous_language"},{"type":"literal","value":"keyboard_return"},{"type":"literal","value":"keyboard_tab"},{"type":"literal","value":"keyboard_tab_rtl"},{"type":"literal","value":"keyboard_voice"},{"type":"literal","value":"kid_star"},{"type":"literal","value":"king_bed"},{"type":"literal","value":"kitchen"},{"type":"literal","value":"kitesurfing"},{"type":"literal","value":"lab_panel"},{"type":"literal","value":"lab_profile"},{"type":"literal","value":"lab_research"},{"type":"literal","value":"label_important"},{"type":"literal","value":"label_important_outline"},{"type":"literal","value":"label_off"},{"type":"literal","value":"labs"},{"type":"literal","value":"lan"},{"type":"literal","value":"landscape_2"},{"type":"literal","value":"landscape_2_edit"},{"type":"literal","value":"landscape_2_off"},{"type":"literal","value":"landslide"},{"type":"literal","value":"language"},{"type":"literal","value":"language_chinese_array"},{"type":"literal","value":"language_chinese_cangjie"},{"type":"literal","value":"language_chinese_dayi"},{"type":"literal","value":"language_chinese_pinyin"},{"type":"literal","value":"language_chinese_quick"},{"type":"literal","value":"language_chinese_wubi"},{"type":"literal","value":"language_french"},{"type":"literal","value":"language_gb_english"},{"type":"literal","value":"language_international"},{"type":"literal","value":"language_japanese_kana"},{"type":"literal","value":"language_korean_latin"},{"type":"literal","value":"language_pinyin"},{"type":"literal","value":"language_spanish"},{"type":"literal","value":"language_us"},{"type":"literal","value":"language_us_colemak"},{"type":"literal","value":"language_us_dvorak"},{"type":"literal","value":"laps"},{"type":"literal","value":"laptop"},{"type":"literal","value":"laptop_car"},{"type":"literal","value":"laptop_chromebook"},{"type":"literal","value":"laptop_mac"},{"type":"literal","value":"laptop_windows"},{"type":"literal","value":"lasso_select"},{"type":"literal","value":"last_page"},{"type":"literal","value":"launch"},{"type":"literal","value":"laundry"},{"type":"literal","value":"layers"},{"type":"literal","value":"layers_clear"},{"type":"literal","value":"lda"},{"type":"literal","value":"leaderboard"},{"type":"literal","value":"leak_add"},{"type":"literal","value":"leak_remove"},{"type":"literal","value":"left_click"},{"type":"literal","value":"left_panel_close"},{"type":"literal","value":"left_panel_open"},{"type":"literal","value":"legend_toggle"},{"type":"literal","value":"lens"},{"type":"literal","value":"lens_blur"},{"type":"literal","value":"letter_switch"},{"type":"literal","value":"library_add"},{"type":"literal","value":"library_add_check"},{"type":"literal","value":"library_books"},{"type":"literal","value":"library_music"},{"type":"literal","value":"license"},{"type":"literal","value":"lift_to_talk"},{"type":"literal","value":"light_group"},{"type":"literal","value":"light_mode"},{"type":"literal","value":"light_off"},{"type":"literal","value":"lightbulb_2"},{"type":"literal","value":"lightbulb_circle"},{"type":"literal","value":"lightbulb_outline"},{"type":"literal","value":"lightning_stand"},{"type":"literal","value":"line_axis"},{"type":"literal","value":"line_curve"},{"type":"literal","value":"line_end"},{"type":"literal","value":"line_end_arrow"},{"type":"literal","value":"line_end_arrow_notch"},{"type":"literal","value":"line_end_circle"},{"type":"literal","value":"line_end_diamond"},{"type":"literal","value":"line_end_square"},{"type":"literal","value":"line_start"},{"type":"literal","value":"line_start_arrow"},{"type":"literal","value":"line_start_arrow_notch"},{"type":"literal","value":"line_start_circle"},{"type":"literal","value":"line_start_diamond"},{"type":"literal","value":"line_start_square"},{"type":"literal","value":"line_style"},{"type":"literal","value":"line_weight"},{"type":"literal","value":"linear_scale"},{"type":"literal","value":"link_off"},{"type":"literal","value":"linked_camera"},{"type":"literal","value":"linked_services"},{"type":"literal","value":"liquor"},{"type":"literal","value":"list_alt"},{"type":"literal","value":"list_alt_add"},{"type":"literal","value":"list_alt_check"},{"type":"literal","value":"lists"},{"type":"literal","value":"live_help"},{"type":"literal","value":"live_tv"},{"type":"literal","value":"living"},{"type":"literal","value":"local_activity"},{"type":"literal","value":"local_airport"},{"type":"literal","value":"local_atm"},{"type":"literal","value":"local_bar"},{"type":"literal","value":"local_cafe"},{"type":"literal","value":"local_car_wash"},{"type":"literal","value":"local_convenience_store"},{"type":"literal","value":"local_dining"},{"type":"literal","value":"local_drink"},{"type":"literal","value":"local_fire_department"},{"type":"literal","value":"local_florist"},{"type":"literal","value":"local_gas_station"},{"type":"literal","value":"local_grocery_store"},{"type":"literal","value":"local_hospital"},{"type":"literal","value":"local_hotel"},{"type":"literal","value":"local_laundry_service"},{"type":"literal","value":"local_library"},{"type":"literal","value":"local_mall"},{"type":"literal","value":"local_movies"},{"type":"literal","value":"local_offer"},{"type":"literal","value":"local_parking"},{"type":"literal","value":"local_pharmacy"},{"type":"literal","value":"local_phone"},{"type":"literal","value":"local_pizza"},{"type":"literal","value":"local_play"},{"type":"literal","value":"local_police"},{"type":"literal","value":"local_post_office"},{"type":"literal","value":"local_printshop"},{"type":"literal","value":"local_see"},{"type":"literal","value":"local_shipping"},{"type":"literal","value":"local_taxi"},{"type":"literal","value":"location_away"},{"type":"literal","value":"location_chip"},{"type":"literal","value":"location_city"},{"type":"literal","value":"location_disabled"},{"type":"literal","value":"location_home"},{"type":"literal","value":"location_off"},{"type":"literal","value":"location_on"},{"type":"literal","value":"location_pin"},{"type":"literal","value":"location_searching"},{"type":"literal","value":"lock_clock"},{"type":"literal","value":"lock_open"},{"type":"literal","value":"lock_open_circle"},{"type":"literal","value":"lock_open_right"},{"type":"literal","value":"lock_outline"},{"type":"literal","value":"lock_person"},{"type":"literal","value":"lock_reset"},{"type":"literal","value":"login"},{"type":"literal","value":"logo_dev"},{"type":"literal","value":"logout"},{"type":"literal","value":"looks"},{"type":"literal","value":"looks_3"},{"type":"literal","value":"looks_4"},{"type":"literal","value":"looks_5"},{"type":"literal","value":"looks_6"},{"type":"literal","value":"looks_one"},{"type":"literal","value":"looks_two"},{"type":"literal","value":"loop"},{"type":"literal","value":"low_density"},{"type":"literal","value":"low_priority"},{"type":"literal","value":"loyalty"},{"type":"literal","value":"lte_mobiledata"},{"type":"literal","value":"lte_mobiledata_badge"},{"type":"literal","value":"lte_plus_mobiledata"},{"type":"literal","value":"lte_plus_mobiledata_badge"},{"type":"literal","value":"luggage"},{"type":"literal","value":"lunch_dining"},{"type":"literal","value":"lyrics"},{"type":"literal","value":"macro_auto"},{"type":"literal","value":"macro_off"},{"type":"literal","value":"magnification_large"},{"type":"literal","value":"magnification_small"},{"type":"literal","value":"magnify_docked"},{"type":"literal","value":"magnify_fullscreen"},{"type":"literal","value":"mail_asterisk"},{"type":"literal","value":"mail_lock"},{"type":"literal","value":"mail_off"},{"type":"literal","value":"mail_outline"},{"type":"literal","value":"mail_shield"},{"type":"literal","value":"male"},{"type":"literal","value":"man"},{"type":"literal","value":"man_2"},{"type":"literal","value":"man_3"},{"type":"literal","value":"man_4"},{"type":"literal","value":"manage_accounts"},{"type":"literal","value":"manage_history"},{"type":"literal","value":"manage_search"},{"type":"literal","value":"manga"},{"type":"literal","value":"manufacturing"},{"type":"literal","value":"map_pin_heart"},{"type":"literal","value":"map_pin_review"},{"type":"literal","value":"map_search"},{"type":"literal","value":"maps_home_work"},{"type":"literal","value":"maps_ugc"},{"type":"literal","value":"mark_as_unread"},{"type":"literal","value":"mark_chat_read"},{"type":"literal","value":"mark_chat_unread"},{"type":"literal","value":"mark_email_read"},{"type":"literal","value":"mark_email_unread"},{"type":"literal","value":"mark_unread_chat_alt"},{"type":"literal","value":"markdown"},{"type":"literal","value":"markdown_copy"},{"type":"literal","value":"markdown_paste"},{"type":"literal","value":"markunread"},{"type":"literal","value":"markunread_mailbox"},{"type":"literal","value":"masked_transitions"},{"type":"literal","value":"masked_transitions_add"},{"type":"literal","value":"masks"},{"type":"literal","value":"massage"},{"type":"literal","value":"match_case"},{"type":"literal","value":"match_case_off"},{"type":"literal","value":"match_word"},{"type":"literal","value":"matter"},{"type":"literal","value":"maximize"},{"type":"literal","value":"meal_dinner"},{"type":"literal","value":"meal_lunch"},{"type":"literal","value":"measuring_tape"},{"type":"literal","value":"media_bluetooth_off"},{"type":"literal","value":"media_bluetooth_on"},{"type":"literal","value":"media_link"},{"type":"literal","value":"media_output"},{"type":"literal","value":"media_output_off"},{"type":"literal","value":"mediation"},{"type":"literal","value":"medical_information"},{"type":"literal","value":"medical_mask"},{"type":"literal","value":"medical_services"},{"type":"literal","value":"medication"},{"type":"literal","value":"medication_liquid"},{"type":"literal","value":"meeting_room"},{"type":"literal","value":"memory"},{"type":"literal","value":"memory_alt"},{"type":"literal","value":"menstrual_health"},{"type":"literal","value":"menu_book"},{"type":"literal","value":"menu_book_2"},{"type":"literal","value":"menu_open"},{"type":"literal","value":"merge_type"},{"type":"literal","value":"metabolism"},{"type":"literal","value":"metro"},{"type":"literal","value":"mfg_nest_yale_lock"},{"type":"literal","value":"mic_alert"},{"type":"literal","value":"mic_double"},{"type":"literal","value":"mic_external_off"},{"type":"literal","value":"mic_external_on"},{"type":"literal","value":"mic_none"},{"type":"literal","value":"mic_off"},{"type":"literal","value":"microbiology"},{"type":"literal","value":"microwave_gen"},{"type":"literal","value":"military_tech"},{"type":"literal","value":"mimo"},{"type":"literal","value":"mimo_disconnect"},{"type":"literal","value":"mindfulness"},{"type":"literal","value":"minimize"},{"type":"literal","value":"minor_crash"},{"type":"literal","value":"mintmark"},{"type":"literal","value":"miscellaneous_services"},{"type":"literal","value":"missed_video_call"},{"type":"literal","value":"missing_controller"},{"type":"literal","value":"mist"},{"type":"literal","value":"mitre"},{"type":"literal","value":"mixture_med"},{"type":"literal","value":"mms"},{"type":"literal","value":"mobile"},{"type":"literal","value":"mobile_2"},{"type":"literal","value":"mobile_3"},{"type":"literal","value":"mobile_alert"},{"type":"literal","value":"mobile_arrow_down"},{"type":"literal","value":"mobile_arrow_right"},{"type":"literal","value":"mobile_arrow_up_right"},{"type":"literal","value":"mobile_block"},{"type":"literal","value":"mobile_camera"},{"type":"literal","value":"mobile_camera_front"},{"type":"literal","value":"mobile_camera_rear"},{"type":"literal","value":"mobile_cancel"},{"type":"literal","value":"mobile_cast"},{"type":"literal","value":"mobile_charge"},{"type":"literal","value":"mobile_chat"},{"type":"literal","value":"mobile_check"},{"type":"literal","value":"mobile_code"},{"type":"literal","value":"mobile_dots"},{"type":"literal","value":"mobile_friendly"},{"type":"literal","value":"mobile_gear"},{"type":"literal","value":"mobile_hand"},{"type":"literal","value":"mobile_hand_left"},{"type":"literal","value":"mobile_hand_left_off"},{"type":"literal","value":"mobile_hand_off"},{"type":"literal","value":"mobile_info"},{"type":"literal","value":"mobile_landscape"},{"type":"literal","value":"mobile_layout"},{"type":"literal","value":"mobile_lock_landscape"},{"type":"literal","value":"mobile_lock_portrait"},{"type":"literal","value":"mobile_loupe"},{"type":"literal","value":"mobile_menu"},{"type":"literal","value":"mobile_off"},{"type":"literal","value":"mobile_question"},{"type":"literal","value":"mobile_rotate"},{"type":"literal","value":"mobile_rotate_lock"},{"type":"literal","value":"mobile_screen_share"},{"type":"literal","value":"mobile_screensaver"},{"type":"literal","value":"mobile_sensor_hi"},{"type":"literal","value":"mobile_sensor_lo"},{"type":"literal","value":"mobile_share"},{"type":"literal","value":"mobile_share_stack"},{"type":"literal","value":"mobile_sound"},{"type":"literal","value":"mobile_sound_2"},{"type":"literal","value":"mobile_sound_off"},{"type":"literal","value":"mobile_speaker"},{"type":"literal","value":"mobile_text"},{"type":"literal","value":"mobile_text_2"},{"type":"literal","value":"mobile_theft"},{"type":"literal","value":"mobile_ticket"},{"type":"literal","value":"mobile_vibrate"},{"type":"literal","value":"mobile_wrench"},{"type":"literal","value":"mobiledata_off"},{"type":"literal","value":"mode"},{"type":"literal","value":"mode_comment"},{"type":"literal","value":"mode_cool"},{"type":"literal","value":"mode_cool_off"},{"type":"literal","value":"mode_dual"},{"type":"literal","value":"mode_edit"},{"type":"literal","value":"mode_edit_outline"},{"type":"literal","value":"mode_fan"},{"type":"literal","value":"mode_fan_off"},{"type":"literal","value":"mode_heat"},{"type":"literal","value":"mode_heat_cool"},{"type":"literal","value":"mode_heat_off"},{"type":"literal","value":"mode_night"},{"type":"literal","value":"mode_of_travel"},{"type":"literal","value":"mode_off_on"},{"type":"literal","value":"mode_standby"},{"type":"literal","value":"model_training"},{"type":"literal","value":"modeling"},{"type":"literal","value":"monetization_on"},{"type":"literal","value":"money"},{"type":"literal","value":"money_bag"},{"type":"literal","value":"money_off"},{"type":"literal","value":"money_off_csred"},{"type":"literal","value":"money_range"},{"type":"literal","value":"monitor"},{"type":"literal","value":"monitor_heart"},{"type":"literal","value":"monitor_weight"},{"type":"literal","value":"monitor_weight_gain"},{"type":"literal","value":"monitor_weight_loss"},{"type":"literal","value":"monitoring"},{"type":"literal","value":"monochrome_photos"},{"type":"literal","value":"monorail"},{"type":"literal","value":"mood"},{"type":"literal","value":"mood_bad"},{"type":"literal","value":"moon_stars"},{"type":"literal","value":"mop"},{"type":"literal","value":"moped_package"},{"type":"literal","value":"more_down"},{"type":"literal","value":"more_horiz"},{"type":"literal","value":"more_time"},{"type":"literal","value":"more_up"},{"type":"literal","value":"more_vert"},{"type":"literal","value":"mosque"},{"type":"literal","value":"motion_blur"},{"type":"literal","value":"motion_mode"},{"type":"literal","value":"motion_photos_auto"},{"type":"literal","value":"motion_photos_off"},{"type":"literal","value":"motion_photos_on"},{"type":"literal","value":"motion_photos_pause"},{"type":"literal","value":"motion_photos_paused"},{"type":"literal","value":"motion_play"},{"type":"literal","value":"motion_sensor_active"},{"type":"literal","value":"motion_sensor_alert"},{"type":"literal","value":"motion_sensor_idle"},{"type":"literal","value":"motion_sensor_urgent"},{"type":"literal","value":"mountain_flag"},{"type":"literal","value":"mountain_steam"},{"type":"literal","value":"mouse"},{"type":"literal","value":"mouse_lock"},{"type":"literal","value":"mouse_lock_off"},{"type":"literal","value":"move_down"},{"type":"literal","value":"move_group"},{"type":"literal","value":"move_item"},{"type":"literal","value":"move_location"},{"type":"literal","value":"move_selection_down"},{"type":"literal","value":"move_selection_left"},{"type":"literal","value":"move_selection_right"},{"type":"literal","value":"move_selection_up"},{"type":"literal","value":"move_to_inbox"},{"type":"literal","value":"move_up"},{"type":"literal","value":"moved_location"},{"type":"literal","value":"movie"},{"type":"literal","value":"movie_creation"},{"type":"literal","value":"movie_edit"},{"type":"literal","value":"movie_filter"},{"type":"literal","value":"movie_info"},{"type":"literal","value":"movie_off"},{"type":"literal","value":"movie_speaker"},{"type":"literal","value":"moving"},{"type":"literal","value":"moving_beds"},{"type":"literal","value":"moving_ministry"},{"type":"literal","value":"mp"},{"type":"literal","value":"multicooker"},{"type":"literal","value":"multiline_chart"},{"type":"literal","value":"multimodal_hand_eye"},{"type":"literal","value":"multiple_airports"},{"type":"literal","value":"multiple_stop"},{"type":"literal","value":"museum"},{"type":"literal","value":"music_cast"},{"type":"literal","value":"music_history"},{"type":"literal","value":"music_note"},{"type":"literal","value":"music_note_add"},{"type":"literal","value":"music_off"},{"type":"literal","value":"music_video"},{"type":"literal","value":"my_location"},{"type":"literal","value":"mystery"},{"type":"literal","value":"nat"},{"type":"literal","value":"nature"},{"type":"literal","value":"nature_people"},{"type":"literal","value":"navigate_before"},{"type":"literal","value":"navigate_next"},{"type":"literal","value":"near_me"},{"type":"literal","value":"near_me_disabled"},{"type":"literal","value":"nearby"},{"type":"literal","value":"nearby_error"},{"type":"literal","value":"nearby_off"},{"type":"literal","value":"nephrology"},{"type":"literal","value":"nest_audio"},{"type":"literal","value":"nest_cam_floodlight"},{"type":"literal","value":"nest_cam_indoor"},{"type":"literal","value":"nest_cam_iq"},{"type":"literal","value":"nest_cam_iq_outdoor"},{"type":"literal","value":"nest_cam_magnet_mount"},{"type":"literal","value":"nest_cam_outdoor"},{"type":"literal","value":"nest_cam_stand"},{"type":"literal","value":"nest_cam_wall_mount"},{"type":"literal","value":"nest_cam_wired_stand"},{"type":"literal","value":"nest_clock_farsight_analog"},{"type":"literal","value":"nest_clock_farsight_digital"},{"type":"literal","value":"nest_connect"},{"type":"literal","value":"nest_detect"},{"type":"literal","value":"nest_display"},{"type":"literal","value":"nest_display_max"},{"type":"literal","value":"nest_doorbell_visitor"},{"type":"literal","value":"nest_eco_leaf"},{"type":"literal","value":"nest_farsight_cool"},{"type":"literal","value":"nest_farsight_dual"},{"type":"literal","value":"nest_farsight_eco"},{"type":"literal","value":"nest_farsight_heat"},{"type":"literal","value":"nest_farsight_seasonal"},{"type":"literal","value":"nest_farsight_weather"},{"type":"literal","value":"nest_found_savings"},{"type":"literal","value":"nest_heat_link_e"},{"type":"literal","value":"nest_heat_link_gen_3"},{"type":"literal","value":"nest_hello_doorbell"},{"type":"literal","value":"nest_mini"},{"type":"literal","value":"nest_multi_room"},{"type":"literal","value":"nest_protect"},{"type":"literal","value":"nest_remote_comfort_sensor"},{"type":"literal","value":"nest_secure_alarm"},{"type":"literal","value":"nest_sunblock"},{"type":"literal","value":"nest_tag"},{"type":"literal","value":"nest_thermostat"},{"type":"literal","value":"nest_thermostat_e_eu"},{"type":"literal","value":"nest_thermostat_gen_3"},{"type":"literal","value":"nest_thermostat_sensor"},{"type":"literal","value":"nest_thermostat_sensor_eu"},{"type":"literal","value":"nest_thermostat_zirconium_eu"},{"type":"literal","value":"nest_true_radiant"},{"type":"literal","value":"nest_wake_on_approach"},{"type":"literal","value":"nest_wake_on_press"},{"type":"literal","value":"nest_wifi_point"},{"type":"literal","value":"nest_wifi_pro"},{"type":"literal","value":"nest_wifi_pro_2"},{"type":"literal","value":"nest_wifi_router"},{"type":"literal","value":"network_cell"},{"type":"literal","value":"network_check"},{"type":"literal","value":"network_intel_node"},{"type":"literal","value":"network_intelligence"},{"type":"literal","value":"network_intelligence_history"},{"type":"literal","value":"network_intelligence_update"},{"type":"literal","value":"network_locked"},{"type":"literal","value":"network_manage"},{"type":"literal","value":"network_node"},{"type":"literal","value":"network_ping"},{"type":"literal","value":"network_wifi"},{"type":"literal","value":"network_wifi_1_bar"},{"type":"literal","value":"network_wifi_1_bar_locked"},{"type":"literal","value":"network_wifi_2_bar"},{"type":"literal","value":"network_wifi_2_bar_locked"},{"type":"literal","value":"network_wifi_3_bar"},{"type":"literal","value":"network_wifi_3_bar_locked"},{"type":"literal","value":"network_wifi_locked"},{"type":"literal","value":"neurology"},{"type":"literal","value":"new_label"},{"type":"literal","value":"new_releases"},{"type":"literal","value":"new_window"},{"type":"literal","value":"news"},{"type":"literal","value":"newsmode"},{"type":"literal","value":"newsstand"},{"type":"literal","value":"next_plan"},{"type":"literal","value":"next_week"},{"type":"literal","value":"nfc"},{"type":"literal","value":"nfc_off"},{"type":"literal","value":"night_shelter"},{"type":"literal","value":"night_sight_auto"},{"type":"literal","value":"night_sight_auto_off"},{"type":"literal","value":"night_sight_max"},{"type":"literal","value":"nightlife"},{"type":"literal","value":"nightlight"},{"type":"literal","value":"nightlight_round"},{"type":"literal","value":"nights_stay"},{"type":"literal","value":"no_accounts"},{"type":"literal","value":"no_adult_content"},{"type":"literal","value":"no_backpack"},{"type":"literal","value":"no_cell"},{"type":"literal","value":"no_crash"},{"type":"literal","value":"no_drinks"},{"type":"literal","value":"no_encryption"},{"type":"literal","value":"no_encryption_gmailerrorred"},{"type":"literal","value":"no_flash"},{"type":"literal","value":"no_food"},{"type":"literal","value":"no_luggage"},{"type":"literal","value":"no_meals"},{"type":"literal","value":"no_meals_ouline"},{"type":"literal","value":"no_meeting_room"},{"type":"literal","value":"no_photography"},{"type":"literal","value":"no_sim"},{"type":"literal","value":"no_sound"},{"type":"literal","value":"no_stroller"},{"type":"literal","value":"no_transfer"},{"type":"literal","value":"noise_aware"},{"type":"literal","value":"noise_control_off"},{"type":"literal","value":"noise_control_on"},{"type":"literal","value":"nordic_walking"},{"type":"literal","value":"north"},{"type":"literal","value":"north_east"},{"type":"literal","value":"north_west"},{"type":"literal","value":"not_accessible"},{"type":"literal","value":"not_accessible_forward"},{"type":"literal","value":"not_interested"},{"type":"literal","value":"not_listed_location"},{"type":"literal","value":"not_started"},{"type":"literal","value":"note_add"},{"type":"literal","value":"note_alt"},{"type":"literal","value":"note_stack"},{"type":"literal","value":"note_stack_add"},{"type":"literal","value":"notes"},{"type":"literal","value":"notification_add"},{"type":"literal","value":"notification_important"},{"type":"literal","value":"notification_multiple"},{"type":"literal","value":"notification_settings"},{"type":"literal","value":"notification_sound"},{"type":"literal","value":"notifications"},{"type":"literal","value":"notifications_active"},{"type":"literal","value":"notifications_none"},{"type":"literal","value":"notifications_off"},{"type":"literal","value":"notifications_paused"},{"type":"literal","value":"notifications_unread"},{"type":"literal","value":"nutrition"},{"type":"literal","value":"ods"},{"type":"literal","value":"odt"},{"type":"literal","value":"offline_bolt"},{"type":"literal","value":"offline_pin"},{"type":"literal","value":"offline_pin_off"},{"type":"literal","value":"offline_share"},{"type":"literal","value":"oil_barrel"},{"type":"literal","value":"okonomiyaki"},{"type":"literal","value":"on_device_training"},{"type":"literal","value":"on_hub_device"},{"type":"literal","value":"oncology"},{"type":"literal","value":"ondemand_video"},{"type":"literal","value":"online_prediction"},{"type":"literal","value":"onsen"},{"type":"literal","value":"open_in_browser"},{"type":"literal","value":"open_in_full"},{"type":"literal","value":"open_in_new"},{"type":"literal","value":"open_in_new_down"},{"type":"literal","value":"open_in_new_off"},{"type":"literal","value":"open_jam"},{"type":"literal","value":"open_run"},{"type":"literal","value":"open_with"},{"type":"literal","value":"ophthalmology"},{"type":"literal","value":"oral_disease"},{"type":"literal","value":"orbit"},{"type":"literal","value":"order_approve"},{"type":"literal","value":"order_play"},{"type":"literal","value":"orders"},{"type":"literal","value":"orthopedics"},{"type":"literal","value":"other_admission"},{"type":"literal","value":"other_houses"},{"type":"literal","value":"outbound"},{"type":"literal","value":"outbox"},{"type":"literal","value":"outbox_alt"},{"type":"literal","value":"outdoor_garden"},{"type":"literal","value":"outdoor_grill"},{"type":"literal","value":"outgoing_mail"},{"type":"literal","value":"outlet"},{"type":"literal","value":"outlined_flag"},{"type":"literal","value":"outpatient"},{"type":"literal","value":"outpatient_med"},{"type":"literal","value":"output_circle"},{"type":"literal","value":"oven_gen"},{"type":"literal","value":"overview"},{"type":"literal","value":"overview_key"},{"type":"literal","value":"owl"},{"type":"literal","value":"oxygen_saturation"},{"type":"literal","value":"p2p"},{"type":"literal","value":"pace"},{"type":"literal","value":"pacemaker"},{"type":"literal","value":"package"},{"type":"literal","value":"package_2"},{"type":"literal","value":"padel"},{"type":"literal","value":"page_control"},{"type":"literal","value":"page_footer"},{"type":"literal","value":"page_header"},{"type":"literal","value":"page_info"},{"type":"literal","value":"page_menu_ios"},{"type":"literal","value":"pageless"},{"type":"literal","value":"pages"},{"type":"literal","value":"pageview"},{"type":"literal","value":"paid"},{"type":"literal","value":"pallet"},{"type":"literal","value":"pan_tool"},{"type":"literal","value":"pan_tool_alt"},{"type":"literal","value":"pan_zoom"},{"type":"literal","value":"panorama"},{"type":"literal","value":"panorama_fish_eye"},{"type":"literal","value":"panorama_horizontal"},{"type":"literal","value":"panorama_horizontal_select"},{"type":"literal","value":"panorama_photosphere"},{"type":"literal","value":"panorama_photosphere_select"},{"type":"literal","value":"panorama_vertical"},{"type":"literal","value":"panorama_vertical_select"},{"type":"literal","value":"panorama_wide_angle"},{"type":"literal","value":"panorama_wide_angle_select"},{"type":"literal","value":"paragliding"},{"type":"literal","value":"parent_child_dining"},{"type":"literal","value":"park"},{"type":"literal","value":"parking_meter"},{"type":"literal","value":"parking_sign"},{"type":"literal","value":"parking_valet"},{"type":"literal","value":"partly_cloudy_day"},{"type":"literal","value":"partly_cloudy_night"},{"type":"literal","value":"partner_exchange"},{"type":"literal","value":"partner_heart"},{"type":"literal","value":"partner_reports"},{"type":"literal","value":"party_mode"},{"type":"literal","value":"passkey"},{"type":"literal","value":"password"},{"type":"literal","value":"password_2"},{"type":"literal","value":"password_2_off"},{"type":"literal","value":"patient_list"},{"type":"literal","value":"pause_circle"},{"type":"literal","value":"pause_circle_filled"},{"type":"literal","value":"pause_circle_outline"},{"type":"literal","value":"pause_presentation"},{"type":"literal","value":"payment"},{"type":"literal","value":"payment_arrow_down"},{"type":"literal","value":"payment_card"},{"type":"literal","value":"payments"},{"type":"literal","value":"pedal_bike"},{"type":"literal","value":"pediatrics"},{"type":"literal","value":"pen_size_1"},{"type":"literal","value":"pen_size_2"},{"type":"literal","value":"pen_size_3"},{"type":"literal","value":"pen_size_4"},{"type":"literal","value":"pen_size_5"},{"type":"literal","value":"pending"},{"type":"literal","value":"pending_actions"},{"type":"literal","value":"people"},{"type":"literal","value":"people_alt"},{"type":"literal","value":"people_outline"},{"type":"literal","value":"percent_discount"},{"type":"literal","value":"pergola"},{"type":"literal","value":"perm_camera_mic"},{"type":"literal","value":"perm_contact_calendar"},{"type":"literal","value":"perm_data_setting"},{"type":"literal","value":"perm_device_information"},{"type":"literal","value":"perm_identity"},{"type":"literal","value":"perm_media"},{"type":"literal","value":"perm_phone_msg"},{"type":"literal","value":"perm_scan_wifi"},{"type":"literal","value":"person_2"},{"type":"literal","value":"person_3"},{"type":"literal","value":"person_4"},{"type":"literal","value":"person_add"},{"type":"literal","value":"person_add_alt"},{"type":"literal","value":"person_add_alt_1"},{"type":"literal","value":"person_add_disabled"},{"type":"literal","value":"person_alert"},{"type":"literal","value":"person_apron"},{"type":"literal","value":"person_book"},{"type":"literal","value":"person_cancel"},{"type":"literal","value":"person_celebrate"},{"type":"literal","value":"person_check"},{"type":"literal","value":"person_edit"},{"type":"literal","value":"person_heart"},{"type":"literal","value":"person_off"},{"type":"literal","value":"person_outline"},{"type":"literal","value":"person_pin"},{"type":"literal","value":"person_pin_circle"},{"type":"literal","value":"person_play"},{"type":"literal","value":"person_raised_hand"},{"type":"literal","value":"person_remove"},{"type":"literal","value":"person_remove_alt_1"},{"type":"literal","value":"person_search"},{"type":"literal","value":"person_shield"},{"type":"literal","value":"personal_bag"},{"type":"literal","value":"personal_bag_off"},{"type":"literal","value":"personal_bag_question"},{"type":"literal","value":"personal_injury"},{"type":"literal","value":"personal_places"},{"type":"literal","value":"personal_video"},{"type":"literal","value":"pest_control"},{"type":"literal","value":"pest_control_rodent"},{"type":"literal","value":"pet_supplies"},{"type":"literal","value":"pets"},{"type":"literal","value":"phishing"},{"type":"literal","value":"phone_android"},{"type":"literal","value":"phone_bluetooth_speaker"},{"type":"literal","value":"phone_callback"},{"type":"literal","value":"phone_disabled"},{"type":"literal","value":"phone_enabled"},{"type":"literal","value":"phone_forwarded"},{"type":"literal","value":"phone_in_talk"},{"type":"literal","value":"phone_iphone"},{"type":"literal","value":"phone_locked"},{"type":"literal","value":"phone_missed"},{"type":"literal","value":"phone_paused"},{"type":"literal","value":"phonelink"},{"type":"literal","value":"phonelink_erase"},{"type":"literal","value":"phonelink_lock"},{"type":"literal","value":"phonelink_off"},{"type":"literal","value":"phonelink_ring"},{"type":"literal","value":"phonelink_setup"},{"type":"literal","value":"photo_album"},{"type":"literal","value":"photo_auto_merge"},{"type":"literal","value":"photo_camera"},{"type":"literal","value":"photo_camera_back"},{"type":"literal","value":"photo_camera_front"},{"type":"literal","value":"photo_filter"},{"type":"literal","value":"photo_frame"},{"type":"literal","value":"photo_library"},{"type":"literal","value":"photo_prints"},{"type":"literal","value":"photo_size_select_actual"},{"type":"literal","value":"photo_size_select_large"},{"type":"literal","value":"photo_size_select_small"},{"type":"literal","value":"php"},{"type":"literal","value":"physical_therapy"},{"type":"literal","value":"piano"},{"type":"literal","value":"piano_off"},{"type":"literal","value":"pickleball"},{"type":"literal","value":"picture_as_pdf"},{"type":"literal","value":"picture_in_picture"},{"type":"literal","value":"picture_in_picture_alt"},{"type":"literal","value":"picture_in_picture_center"},{"type":"literal","value":"picture_in_picture_large"},{"type":"literal","value":"picture_in_picture_medium"},{"type":"literal","value":"picture_in_picture_mobile"},{"type":"literal","value":"picture_in_picture_off"},{"type":"literal","value":"picture_in_picture_small"},{"type":"literal","value":"pie_chart"},{"type":"literal","value":"pie_chart_outline"},{"type":"literal","value":"pie_chart_outlined"},{"type":"literal","value":"pill_off"},{"type":"literal","value":"pin_drop"},{"type":"literal","value":"pin_end"},{"type":"literal","value":"pin_invoke"},{"type":"literal","value":"pinboard"},{"type":"literal","value":"pinboard_unread"},{"type":"literal","value":"pinch"},{"type":"literal","value":"pinch_zoom_in"},{"type":"literal","value":"pinch_zoom_out"},{"type":"literal","value":"pip_exit"},{"type":"literal","value":"pivot_table_chart"},{"type":"literal","value":"pix"},{"type":"literal","value":"place"},{"type":"literal","value":"place_item"},{"type":"literal","value":"plagiarism"},{"type":"literal","value":"plane_contrails"},{"type":"literal","value":"planet"},{"type":"literal","value":"planner_banner_ad_pt"},{"type":"literal","value":"planner_review"},{"type":"literal","value":"play_arrow"},{"type":"literal","value":"play_circle"},{"type":"literal","value":"play_circle_filled"},{"type":"literal","value":"play_circle_outline"},{"type":"literal","value":"play_disabled"},{"type":"literal","value":"play_for_work"},{"type":"literal","value":"play_lesson"},{"type":"literal","value":"play_pause"},{"type":"literal","value":"playground"},{"type":"literal","value":"playground_2"},{"type":"literal","value":"playing_cards"},{"type":"literal","value":"playlist_add"},{"type":"literal","value":"playlist_add_check"},{"type":"literal","value":"playlist_add_check_circle"},{"type":"literal","value":"playlist_add_circle"},{"type":"literal","value":"playlist_play"},{"type":"literal","value":"playlist_remove"},{"type":"literal","value":"plug_connect"},{"type":"literal","value":"plumbing"},{"type":"literal","value":"plus_one"},{"type":"literal","value":"podcasts"},{"type":"literal","value":"podiatry"},{"type":"literal","value":"podium"},{"type":"literal","value":"point_of_sale"},{"type":"literal","value":"point_scan"},{"type":"literal","value":"poker_chip"},{"type":"literal","value":"policy"},{"type":"literal","value":"policy_alert"},{"type":"literal","value":"poll"},{"type":"literal","value":"polymer"},{"type":"literal","value":"pool"},{"type":"literal","value":"portable_wifi_off"},{"type":"literal","value":"position_bottom_left"},{"type":"literal","value":"position_bottom_right"},{"type":"literal","value":"position_top_right"},{"type":"literal","value":"post"},{"type":"literal","value":"post_add"},{"type":"literal","value":"potted_plant"},{"type":"literal","value":"power_input"},{"type":"literal","value":"power_off"},{"type":"literal","value":"power_settings_circle"},{"type":"literal","value":"power_settings_new"},{"type":"literal","value":"prayer_times"},{"type":"literal","value":"precision_manufacturing"},{"type":"literal","value":"pregnancy"},{"type":"literal","value":"pregnant_woman"},{"type":"literal","value":"preliminary"},{"type":"literal","value":"prescriptions"},{"type":"literal","value":"present_to_all"},{"type":"literal","value":"preview"},{"type":"literal","value":"preview_off"},{"type":"literal","value":"price_change"},{"type":"literal","value":"price_check"},{"type":"literal","value":"print"},{"type":"literal","value":"print_add"},{"type":"literal","value":"print_connect"},{"type":"literal","value":"print_disabled"},{"type":"literal","value":"print_error"},{"type":"literal","value":"print_lock"},{"type":"literal","value":"priority"},{"type":"literal","value":"priority_high"},{"type":"literal","value":"privacy"},{"type":"literal","value":"privacy_tip"},{"type":"literal","value":"private_connectivity"},{"type":"literal","value":"problem"},{"type":"literal","value":"procedure"},{"type":"literal","value":"process_chart"},{"type":"literal","value":"production_quantity_limits"},{"type":"literal","value":"productivity"},{"type":"literal","value":"progress_activity"},{"type":"literal","value":"prompt_suggestion"},{"type":"literal","value":"propane"},{"type":"literal","value":"propane_tank"},{"type":"literal","value":"psychiatry"},{"type":"literal","value":"psychology"},{"type":"literal","value":"psychology_alt"},{"type":"literal","value":"public"},{"type":"literal","value":"public_off"},{"type":"literal","value":"publish"},{"type":"literal","value":"published_with_changes"},{"type":"literal","value":"pulmonology"},{"type":"literal","value":"pulse_alert"},{"type":"literal","value":"punch_clock"},{"type":"literal","value":"push_pin"},{"type":"literal","value":"qr_code"},{"type":"literal","value":"qr_code_2"},{"type":"literal","value":"qr_code_2_add"},{"type":"literal","value":"qr_code_scanner"},{"type":"literal","value":"query_builder"},{"type":"literal","value":"query_stats"},{"type":"literal","value":"question_answer"},{"type":"literal","value":"question_exchange"},{"type":"literal","value":"question_mark"},{"type":"literal","value":"queue"},{"type":"literal","value":"queue_music"},{"type":"literal","value":"queue_play_next"},{"type":"literal","value":"quick_phrases"},{"type":"literal","value":"quick_reference"},{"type":"literal","value":"quick_reference_all"},{"type":"literal","value":"quick_reorder"},{"type":"literal","value":"quickreply"},{"type":"literal","value":"quiz"},{"type":"literal","value":"r_mobiledata"},{"type":"literal","value":"radar"},{"type":"literal","value":"radio_button_checked"},{"type":"literal","value":"radio_button_partial"},{"type":"literal","value":"radio_button_unchecked"},{"type":"literal","value":"radiology"},{"type":"literal","value":"railway_alert"},{"type":"literal","value":"railway_alert_2"},{"type":"literal","value":"rainy"},{"type":"literal","value":"rainy_heavy"},{"type":"literal","value":"rainy_light"},{"type":"literal","value":"rainy_snow"},{"type":"literal","value":"ramen_dining"},{"type":"literal","value":"ramp_left"},{"type":"literal","value":"ramp_right"},{"type":"literal","value":"range_hood"},{"type":"literal","value":"rate_review"},{"type":"literal","value":"raven"},{"type":"literal","value":"raw_off"},{"type":"literal","value":"raw_on"},{"type":"literal","value":"read_more"},{"type":"literal","value":"readiness_score"},{"type":"literal","value":"real_estate_agent"},{"type":"literal","value":"rear_camera"},{"type":"literal","value":"rebase"},{"type":"literal","value":"rebase_edit"},{"type":"literal","value":"receipt_long"},{"type":"literal","value":"receipt_long_off"},{"type":"literal","value":"recent_actors"},{"type":"literal","value":"recent_patient"},{"type":"literal","value":"recenter"},{"type":"literal","value":"recommend"},{"type":"literal","value":"record_voice_over"},{"type":"literal","value":"recycling"},{"type":"literal","value":"redeem"},{"type":"literal","value":"redo"},{"type":"literal","value":"reduce_capacity"},{"type":"literal","value":"refresh"},{"type":"literal","value":"regular_expression"},{"type":"literal","value":"relax"},{"type":"literal","value":"release_alert"},{"type":"literal","value":"remember_me"},{"type":"literal","value":"reminder"},{"type":"literal","value":"remote_gen"},{"type":"literal","value":"remove"},{"type":"literal","value":"remove_circle"},{"type":"literal","value":"remove_circle_outline"},{"type":"literal","value":"remove_done"},{"type":"literal","value":"remove_from_queue"},{"type":"literal","value":"remove_moderator"},{"type":"literal","value":"remove_red_eye"},{"type":"literal","value":"remove_road"},{"type":"literal","value":"remove_selection"},{"type":"literal","value":"remove_shopping_cart"},{"type":"literal","value":"reopen_window"},{"type":"literal","value":"reorder"},{"type":"literal","value":"repartition"},{"type":"literal","value":"repeat_on"},{"type":"literal","value":"repeat_one"},{"type":"literal","value":"repeat_one_on"},{"type":"literal","value":"replace_audio"},{"type":"literal","value":"replace_image"},{"type":"literal","value":"replace_video"},{"type":"literal","value":"replay"},{"type":"literal","value":"replay_10"},{"type":"literal","value":"replay_30"},{"type":"literal","value":"replay_5"},{"type":"literal","value":"replay_circle_filled"},{"type":"literal","value":"reply"},{"type":"literal","value":"reply_all"},{"type":"literal","value":"report"},{"type":"literal","value":"report_gmailerrorred"},{"type":"literal","value":"report_off"},{"type":"literal","value":"report_problem"},{"type":"literal","value":"request_page"},{"type":"literal","value":"request_quote"},{"type":"literal","value":"reset_brightness"},{"type":"literal","value":"reset_exposure"},{"type":"literal","value":"reset_focus"},{"type":"literal","value":"reset_image"},{"type":"literal","value":"reset_iso"},{"type":"literal","value":"reset_settings"},{"type":"literal","value":"reset_shadow"},{"type":"literal","value":"reset_shutter_speed"},{"type":"literal","value":"reset_tv"},{"type":"literal","value":"reset_white_balance"},{"type":"literal","value":"reset_wrench"},{"type":"literal","value":"respiratory_rate"},{"type":"literal","value":"responsive_layout"},{"type":"literal","value":"rest_area"},{"type":"literal","value":"restart_alt"},{"type":"literal","value":"restaurant"},{"type":"literal","value":"restaurant_menu"},{"type":"literal","value":"restore"},{"type":"literal","value":"restore_from_trash"},{"type":"literal","value":"restore_page"},{"type":"literal","value":"resume"},{"type":"literal","value":"reviews"},{"type":"literal","value":"rewarded_ads"},{"type":"literal","value":"rheumatology"},{"type":"literal","value":"rib_cage"},{"type":"literal","value":"rice_bowl"},{"type":"literal","value":"right_click"},{"type":"literal","value":"right_panel_close"},{"type":"literal","value":"right_panel_open"},{"type":"literal","value":"ring_volume"},{"type":"literal","value":"ripples"},{"type":"literal","value":"road"},{"type":"literal","value":"robot"},{"type":"literal","value":"robot_2"},{"type":"literal","value":"rocket"},{"type":"literal","value":"rocket_launch"},{"type":"literal","value":"roller_shades"},{"type":"literal","value":"roller_shades_closed"},{"type":"literal","value":"roller_skating"},{"type":"literal","value":"roofing"},{"type":"literal","value":"room"},{"type":"literal","value":"room_preferences"},{"type":"literal","value":"room_service"},{"type":"literal","value":"rotate_90_degrees_ccw"},{"type":"literal","value":"rotate_90_degrees_cw"},{"type":"literal","value":"rotate_auto"},{"type":"literal","value":"rotate_left"},{"type":"literal","value":"rotate_right"},{"type":"literal","value":"roundabout_left"},{"type":"literal","value":"roundabout_right"},{"type":"literal","value":"rounded_corner"},{"type":"literal","value":"router_off"},{"type":"literal","value":"routine"},{"type":"literal","value":"rowing"},{"type":"literal","value":"rss_feed"},{"type":"literal","value":"rsvp"},{"type":"literal","value":"rtt"},{"type":"literal","value":"rubric"},{"type":"literal","value":"rule"},{"type":"literal","value":"rule_folder"},{"type":"literal","value":"rule_settings"},{"type":"literal","value":"run_circle"},{"type":"literal","value":"running_with_errors"},{"type":"literal","value":"rv_hookup"},{"type":"literal","value":"safety_check"},{"type":"literal","value":"safety_check_off"},{"type":"literal","value":"safety_divider"},{"type":"literal","value":"sailing"},{"type":"literal","value":"salinity"},{"type":"literal","value":"sanitizer"},{"type":"literal","value":"satellite"},{"type":"literal","value":"satellite_alt"},{"type":"literal","value":"sauna"},{"type":"literal","value":"save"},{"type":"literal","value":"save_alt"},{"type":"literal","value":"save_as"},{"type":"literal","value":"save_clock"},{"type":"literal","value":"saved_search"},{"type":"literal","value":"savings"},{"type":"literal","value":"scan"},{"type":"literal","value":"scan_delete"},{"type":"literal","value":"scatter_plot"},{"type":"literal","value":"schedule"},{"type":"literal","value":"schedule_send"},{"type":"literal","value":"schema"},{"type":"literal","value":"school"},{"type":"literal","value":"science"},{"type":"literal","value":"science_off"},{"type":"literal","value":"score"},{"type":"literal","value":"scoreboard"},{"type":"literal","value":"screen_lock_landscape"},{"type":"literal","value":"screen_lock_portrait"},{"type":"literal","value":"screen_lock_rotation"},{"type":"literal","value":"screen_record"},{"type":"literal","value":"screen_rotation"},{"type":"literal","value":"screen_rotation_alt"},{"type":"literal","value":"screen_rotation_up"},{"type":"literal","value":"screen_search_desktop"},{"type":"literal","value":"screen_share"},{"type":"literal","value":"screenshot"},{"type":"literal","value":"screenshot_frame"},{"type":"literal","value":"screenshot_frame_2"},{"type":"literal","value":"screenshot_keyboard"},{"type":"literal","value":"screenshot_monitor"},{"type":"literal","value":"screenshot_region"},{"type":"literal","value":"screenshot_tablet"},{"type":"literal","value":"scrollable_header"},{"type":"literal","value":"scuba_diving"},{"type":"literal","value":"sd"},{"type":"literal","value":"sd_card"},{"type":"literal","value":"sd_card_alert"},{"type":"literal","value":"sd_storage"},{"type":"literal","value":"sdk"},{"type":"literal","value":"search_activity"},{"type":"literal","value":"search_check"},{"type":"literal","value":"search_check_2"},{"type":"literal","value":"search_gear"},{"type":"literal","value":"search_hands_free"},{"type":"literal","value":"search_insights"},{"type":"literal","value":"search_off"},{"type":"literal","value":"seat_cool_left"},{"type":"literal","value":"seat_cool_right"},{"type":"literal","value":"seat_heat_left"},{"type":"literal","value":"seat_heat_right"},{"type":"literal","value":"seat_vent_left"},{"type":"literal","value":"seat_vent_right"},{"type":"literal","value":"security_key"},{"type":"literal","value":"security_update"},{"type":"literal","value":"security_update_good"},{"type":"literal","value":"security_update_warning"},{"type":"literal","value":"select_all"},{"type":"literal","value":"select_check_box"},{"type":"literal","value":"select_to_speak"},{"type":"literal","value":"select_window"},{"type":"literal","value":"select_window_2"},{"type":"literal","value":"select_window_off"},{"type":"literal","value":"self_care"},{"type":"literal","value":"self_improvement"},{"type":"literal","value":"sell"},{"type":"literal","value":"send_and_archive"},{"type":"literal","value":"send_money"},{"type":"literal","value":"send_time_extension"},{"type":"literal","value":"send_to_mobile"},{"type":"literal","value":"sensor_door"},{"type":"literal","value":"sensor_occupied"},{"type":"literal","value":"sensor_window"},{"type":"literal","value":"sensors"},{"type":"literal","value":"sensors_krx"},{"type":"literal","value":"sensors_krx_off"},{"type":"literal","value":"sensors_off"},{"type":"literal","value":"sentiment_calm"},{"type":"literal","value":"sentiment_content"},{"type":"literal","value":"sentiment_dissatisfied"},{"type":"literal","value":"sentiment_excited"},{"type":"literal","value":"sentiment_extremely_dissatisfied"},{"type":"literal","value":"sentiment_frustrated"},{"type":"literal","value":"sentiment_neutral"},{"type":"literal","value":"sentiment_sad"},{"type":"literal","value":"sentiment_satisfied"},{"type":"literal","value":"sentiment_satisfied_alt"},{"type":"literal","value":"sentiment_stressed"},{"type":"literal","value":"sentiment_very_dissatisfied"},{"type":"literal","value":"sentiment_very_satisfied"},{"type":"literal","value":"sentiment_worried"},{"type":"literal","value":"serif"},{"type":"literal","value":"server_person"},{"type":"literal","value":"service_toolbox"},{"type":"literal","value":"set_meal"},{"type":"literal","value":"settings"},{"type":"literal","value":"settings_accessibility"},{"type":"literal","value":"settings_account_box"},{"type":"literal","value":"settings_alert"},{"type":"literal","value":"settings_applications"},{"type":"literal","value":"settings_b_roll"},{"type":"literal","value":"settings_backup_restore"},{"type":"literal","value":"settings_bluetooth"},{"type":"literal","value":"settings_brightness"},{"type":"literal","value":"settings_cell"},{"type":"literal","value":"settings_cinematic_blur"},{"type":"literal","value":"settings_ethernet"},{"type":"literal","value":"settings_heart"},{"type":"literal","value":"settings_input_antenna"},{"type":"literal","value":"settings_input_component"},{"type":"literal","value":"settings_input_composite"},{"type":"literal","value":"settings_input_hdmi"},{"type":"literal","value":"settings_input_svideo"},{"type":"literal","value":"settings_motion_mode"},{"type":"literal","value":"settings_night_sight"},{"type":"literal","value":"settings_overscan"},{"type":"literal","value":"settings_panorama"},{"type":"literal","value":"settings_phone"},{"type":"literal","value":"settings_photo_camera"},{"type":"literal","value":"settings_power"},{"type":"literal","value":"settings_remote"},{"type":"literal","value":"settings_seating"},{"type":"literal","value":"settings_slow_motion"},{"type":"literal","value":"settings_suggest"},{"type":"literal","value":"settings_system_daydream"},{"type":"literal","value":"settings_timelapse"},{"type":"literal","value":"settings_video_camera"},{"type":"literal","value":"settings_voice"},{"type":"literal","value":"settop_component"},{"type":"literal","value":"severe_cold"},{"type":"literal","value":"shadow_add"},{"type":"literal","value":"shadow_minus"},{"type":"literal","value":"shape_line"},{"type":"literal","value":"shapes"},{"type":"literal","value":"share"},{"type":"literal","value":"share_eta"},{"type":"literal","value":"share_location"},{"type":"literal","value":"share_off"},{"type":"literal","value":"share_reviews"},{"type":"literal","value":"share_windows"},{"type":"literal","value":"shaved_ice"},{"type":"literal","value":"sheets_rtl"},{"type":"literal","value":"shelf_auto_hide"},{"type":"literal","value":"shelf_position"},{"type":"literal","value":"shelves"},{"type":"literal","value":"shield_lock"},{"type":"literal","value":"shield_locked"},{"type":"literal","value":"shield_moon"},{"type":"literal","value":"shield_person"},{"type":"literal","value":"shield_question"},{"type":"literal","value":"shield_toggle"},{"type":"literal","value":"shield_watch"},{"type":"literal","value":"shield_with_heart"},{"type":"literal","value":"shield_with_house"},{"type":"literal","value":"shift_lock"},{"type":"literal","value":"shift_lock_off"},{"type":"literal","value":"shop"},{"type":"literal","value":"shop_2"},{"type":"literal","value":"shop_two"},{"type":"literal","value":"shopping_bag"},{"type":"literal","value":"shopping_bag_speed"},{"type":"literal","value":"shopping_basket"},{"type":"literal","value":"shopping_cart"},{"type":"literal","value":"shopping_cart_checkout"},{"type":"literal","value":"shopping_cart_off"},{"type":"literal","value":"shoppingmode"},{"type":"literal","value":"short_stay"},{"type":"literal","value":"short_text"},{"type":"literal","value":"shortcut"},{"type":"literal","value":"show_chart"},{"type":"literal","value":"shuffle_on"},{"type":"literal","value":"shutter_speed"},{"type":"literal","value":"shutter_speed_add"},{"type":"literal","value":"shutter_speed_minus"},{"type":"literal","value":"sick"},{"type":"literal","value":"side_navigation"},{"type":"literal","value":"sign_language"},{"type":"literal","value":"signal_cellular_0_bar"},{"type":"literal","value":"signal_cellular_1_bar"},{"type":"literal","value":"signal_cellular_2_bar"},{"type":"literal","value":"signal_cellular_3_bar"},{"type":"literal","value":"signal_cellular_4_bar"},{"type":"literal","value":"signal_cellular_add"},{"type":"literal","value":"signal_cellular_alt"},{"type":"literal","value":"signal_cellular_alt_1_bar"},{"type":"literal","value":"signal_cellular_alt_2_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_0_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_1_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_2_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_3_bar"},{"type":"literal","value":"signal_cellular_connected_no_internet_4_bar"},{"type":"literal","value":"signal_cellular_no_sim"},{"type":"literal","value":"signal_cellular_nodata"},{"type":"literal","value":"signal_cellular_null"},{"type":"literal","value":"signal_cellular_off"},{"type":"literal","value":"signal_cellular_pause"},{"type":"literal","value":"signal_disconnected"},{"type":"literal","value":"signal_wifi_0_bar"},{"type":"literal","value":"signal_wifi_1_bar"},{"type":"literal","value":"signal_wifi_1_bar_lock"},{"type":"literal","value":"signal_wifi_2_bar"},{"type":"literal","value":"signal_wifi_2_bar_lock"},{"type":"literal","value":"signal_wifi_3_bar"},{"type":"literal","value":"signal_wifi_3_bar_lock"},{"type":"literal","value":"signal_wifi_4_bar"},{"type":"literal","value":"signal_wifi_4_bar_lock"},{"type":"literal","value":"signal_wifi_bad"},{"type":"literal","value":"signal_wifi_connected_no_internet_0"},{"type":"literal","value":"signal_wifi_connected_no_internet_1"},{"type":"literal","value":"signal_wifi_connected_no_internet_2"},{"type":"literal","value":"signal_wifi_connected_no_internet_3"},{"type":"literal","value":"signal_wifi_connected_no_internet_4"},{"type":"literal","value":"signal_wifi_off"},{"type":"literal","value":"signal_wifi_statusbar_1_bar"},{"type":"literal","value":"signal_wifi_statusbar_2_bar"},{"type":"literal","value":"signal_wifi_statusbar_3_bar"},{"type":"literal","value":"signal_wifi_statusbar_4_bar"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_1"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_2"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_3"},{"type":"literal","value":"signal_wifi_statusbar_connected_no_internet_4"},{"type":"literal","value":"signal_wifi_statusbar_not_connected"},{"type":"literal","value":"signal_wifi_statusbar_null"},{"type":"literal","value":"signpost"},{"type":"literal","value":"sim_card"},{"type":"literal","value":"sim_card_alert"},{"type":"literal","value":"sim_card_download"},{"type":"literal","value":"simulation"},{"type":"literal","value":"single_bed"},{"type":"literal","value":"sip"},{"type":"literal","value":"siren"},{"type":"literal","value":"siren_check"},{"type":"literal","value":"siren_open"},{"type":"literal","value":"siren_question"},{"type":"literal","value":"skateboarding"},{"type":"literal","value":"skeleton"},{"type":"literal","value":"skillet"},{"type":"literal","value":"skillet_cooktop"},{"type":"literal","value":"skip_next"},{"type":"literal","value":"skip_previous"},{"type":"literal","value":"skull"},{"type":"literal","value":"skull_list"},{"type":"literal","value":"slab_serif"},{"type":"literal","value":"sledding"},{"type":"literal","value":"sleep_score"},{"type":"literal","value":"slide_library"},{"type":"literal","value":"sliders"},{"type":"literal","value":"slideshow"},{"type":"literal","value":"slow_motion_video"},{"type":"literal","value":"smart_button"},{"type":"literal","value":"smart_card_reader"},{"type":"literal","value":"smart_card_reader_off"},{"type":"literal","value":"smart_display"},{"type":"literal","value":"smart_outlet"},{"type":"literal","value":"smart_screen"},{"type":"literal","value":"smart_toy"},{"type":"literal","value":"smb_share"},{"type":"literal","value":"smoke_free"},{"type":"literal","value":"smoking_rooms"},{"type":"literal","value":"sms"},{"type":"literal","value":"sms_failed"},{"type":"literal","value":"snippet_folder"},{"type":"literal","value":"snooze"},{"type":"literal","value":"snowboarding"},{"type":"literal","value":"snowing"},{"type":"literal","value":"snowing_heavy"},{"type":"literal","value":"snowmobile"},{"type":"literal","value":"snowshoeing"},{"type":"literal","value":"soap"},{"type":"literal","value":"soba"},{"type":"literal","value":"social_distance"},{"type":"literal","value":"social_leaderboard"},{"type":"literal","value":"solar_power"},{"type":"literal","value":"solo_dining"},{"type":"literal","value":"sort_by_alpha"},{"type":"literal","value":"sound_detection_dog_barking"},{"type":"literal","value":"sound_detection_glass_break"},{"type":"literal","value":"sound_detection_loud_sound"},{"type":"literal","value":"sound_sampler"},{"type":"literal","value":"soup_kitchen"},{"type":"literal","value":"source_environment"},{"type":"literal","value":"source_notes"},{"type":"literal","value":"south"},{"type":"literal","value":"south_america"},{"type":"literal","value":"south_east"},{"type":"literal","value":"south_west"},{"type":"literal","value":"spa"},{"type":"literal","value":"space_bar"},{"type":"literal","value":"space_dashboard"},{"type":"literal","value":"spatial_audio"},{"type":"literal","value":"spatial_audio_off"},{"type":"literal","value":"spatial_speaker"},{"type":"literal","value":"spatial_tracking"},{"type":"literal","value":"speaker_group"},{"type":"literal","value":"speaker_notes"},{"type":"literal","value":"speaker_notes_off"},{"type":"literal","value":"speaker_phone"},{"type":"literal","value":"special_character"},{"type":"literal","value":"specific_gravity"},{"type":"literal","value":"speech_to_text"},{"type":"literal","value":"speed_0_25"},{"type":"literal","value":"speed_0_2x"},{"type":"literal","value":"speed_0_5"},{"type":"literal","value":"speed_0_5x"},{"type":"literal","value":"speed_0_75"},{"type":"literal","value":"speed_0_7x"},{"type":"literal","value":"speed_1_2"},{"type":"literal","value":"speed_1_25"},{"type":"literal","value":"speed_1_2x"},{"type":"literal","value":"speed_1_5"},{"type":"literal","value":"speed_1_5x"},{"type":"literal","value":"speed_1_75"},{"type":"literal","value":"speed_1_7x"},{"type":"literal","value":"speed_2x"},{"type":"literal","value":"speed_camera"},{"type":"literal","value":"spellcheck"},{"type":"literal","value":"split_scene"},{"type":"literal","value":"split_scene_down"},{"type":"literal","value":"split_scene_left"},{"type":"literal","value":"split_scene_right"},{"type":"literal","value":"split_scene_up"},{"type":"literal","value":"splitscreen"},{"type":"literal","value":"splitscreen_add"},{"type":"literal","value":"splitscreen_bottom"},{"type":"literal","value":"splitscreen_landscape"},{"type":"literal","value":"splitscreen_left"},{"type":"literal","value":"splitscreen_portrait"},{"type":"literal","value":"splitscreen_right"},{"type":"literal","value":"splitscreen_top"},{"type":"literal","value":"splitscreen_vertical_add"},{"type":"literal","value":"spo2"},{"type":"literal","value":"spoke"},{"type":"literal","value":"sports"},{"type":"literal","value":"sports_and_outdoors"},{"type":"literal","value":"sports_bar"},{"type":"literal","value":"sports_baseball"},{"type":"literal","value":"sports_basketball"},{"type":"literal","value":"sports_cricket"},{"type":"literal","value":"sports_esports"},{"type":"literal","value":"sports_football"},{"type":"literal","value":"sports_golf"},{"type":"literal","value":"sports_gymnastics"},{"type":"literal","value":"sports_handball"},{"type":"literal","value":"sports_hockey"},{"type":"literal","value":"sports_kabaddi"},{"type":"literal","value":"sports_martial_arts"},{"type":"literal","value":"sports_mma"},{"type":"literal","value":"sports_motorsports"},{"type":"literal","value":"sports_rugby"},{"type":"literal","value":"sports_score"},{"type":"literal","value":"sports_soccer"},{"type":"literal","value":"sports_tennis"},{"type":"literal","value":"sports_volleyball"},{"type":"literal","value":"sprint"},{"type":"literal","value":"square_dot"},{"type":"literal","value":"square_foot"},{"type":"literal","value":"ssid_chart"},{"type":"literal","value":"stack_group"},{"type":"literal","value":"stack_hexagon"},{"type":"literal","value":"stack_off"},{"type":"literal","value":"stack_star"},{"type":"literal","value":"stacked_bar_chart"},{"type":"literal","value":"stacked_email"},{"type":"literal","value":"stacked_inbox"},{"type":"literal","value":"stacked_line_chart"},{"type":"literal","value":"stacks"},{"type":"literal","value":"stadia_controller"},{"type":"literal","value":"stadium"},{"type":"literal","value":"stairs_2"},{"type":"literal","value":"star_border"},{"type":"literal","value":"star_border_purple500"},{"type":"literal","value":"star_half"},{"type":"literal","value":"star_outline"},{"type":"literal","value":"star_purple500"},{"type":"literal","value":"star_rate"},{"type":"literal","value":"star_rate_half"},{"type":"literal","value":"star_shine"},{"type":"literal","value":"stars"},{"type":"literal","value":"stars_2"},{"type":"literal","value":"stat_0"},{"type":"literal","value":"stat_1"},{"type":"literal","value":"stat_2"},{"type":"literal","value":"stat_3"},{"type":"literal","value":"stat_minus_1"},{"type":"literal","value":"stat_minus_2"},{"type":"literal","value":"stat_minus_3"},{"type":"literal","value":"stay_current_landscape"},{"type":"literal","value":"stay_current_portrait"},{"type":"literal","value":"stay_primary_landscape"},{"type":"literal","value":"stay_primary_portrait"},{"type":"literal","value":"steering_wheel_heat"},{"type":"literal","value":"step_into"},{"type":"literal","value":"step_out"},{"type":"literal","value":"step_over"},{"type":"literal","value":"steppers"},{"type":"literal","value":"steps"},{"type":"literal","value":"stethoscope_arrow"},{"type":"literal","value":"stethoscope_check"},{"type":"literal","value":"sticky_note"},{"type":"literal","value":"sticky_note_2"},{"type":"literal","value":"stock_media"},{"type":"literal","value":"stockpot"},{"type":"literal","value":"stop_circle"},{"type":"literal","value":"stop_screen_share"},{"type":"literal","value":"store"},{"type":"literal","value":"store_mall_directory"},{"type":"literal","value":"storm"},{"type":"literal","value":"straight"},{"type":"literal","value":"straighten"},{"type":"literal","value":"strategy"},{"type":"literal","value":"stream"},{"type":"literal","value":"streetview"},{"type":"literal","value":"stress_management"},{"type":"literal","value":"strikethrough_s"},{"type":"literal","value":"stroke_full"},{"type":"literal","value":"stroke_partial"},{"type":"literal","value":"styler"},{"type":"literal","value":"stylus"},{"type":"literal","value":"stylus_brush"},{"type":"literal","value":"stylus_fountain_pen"},{"type":"literal","value":"stylus_highlighter"},{"type":"literal","value":"stylus_laser_pointer"},{"type":"literal","value":"stylus_note"},{"type":"literal","value":"stylus_pen"},{"type":"literal","value":"stylus_pencil"},{"type":"literal","value":"subdirectory_arrow_left"},{"type":"literal","value":"subdirectory_arrow_right"},{"type":"literal","value":"subheader"},{"type":"literal","value":"subject"},{"type":"literal","value":"subscript"},{"type":"literal","value":"subscriptions"},{"type":"literal","value":"subtitles"},{"type":"literal","value":"subtitles_gear"},{"type":"literal","value":"subtitles_off"},{"type":"literal","value":"subway"},{"type":"literal","value":"subway_walk"},{"type":"literal","value":"summarize"},{"type":"literal","value":"sunny"},{"type":"literal","value":"sunny_snowing"},{"type":"literal","value":"superscript"},{"type":"literal","value":"supervised_user_circle"},{"type":"literal","value":"supervised_user_circle_off"},{"type":"literal","value":"supervisor_account"},{"type":"literal","value":"support"},{"type":"literal","value":"support_agent"},{"type":"literal","value":"surfing"},{"type":"literal","value":"surgical"},{"type":"literal","value":"surround_sound"},{"type":"literal","value":"swap_calls"},{"type":"literal","value":"swap_driving_apps"},{"type":"literal","value":"swap_driving_apps_wheel"},{"type":"literal","value":"swap_horiz"},{"type":"literal","value":"swap_horizontal_circle"},{"type":"literal","value":"swap_vert"},{"type":"literal","value":"swap_vertical_circle"},{"type":"literal","value":"sweep"},{"type":"literal","value":"swipe"},{"type":"literal","value":"swipe_down"},{"type":"literal","value":"swipe_down_alt"},{"type":"literal","value":"swipe_left"},{"type":"literal","value":"swipe_left_alt"},{"type":"literal","value":"swipe_right"},{"type":"literal","value":"swipe_right_alt"},{"type":"literal","value":"swipe_up"},{"type":"literal","value":"swipe_up_alt"},{"type":"literal","value":"swipe_vertical"},{"type":"literal","value":"switch_access"},{"type":"literal","value":"switch_access_2"},{"type":"literal","value":"switch_access_3"},{"type":"literal","value":"switch_access_shortcut"},{"type":"literal","value":"switch_access_shortcut_add"},{"type":"literal","value":"switch_account"},{"type":"literal","value":"switch_camera"},{"type":"literal","value":"switch_left"},{"type":"literal","value":"switch_right"},{"type":"literal","value":"switch_video"},{"type":"literal","value":"switches"},{"type":"literal","value":"sword_rose"},{"type":"literal","value":"swords"},{"type":"literal","value":"symptoms"},{"type":"literal","value":"synagogue"},{"type":"literal","value":"sync_alt"},{"type":"literal","value":"sync_arrow_down"},{"type":"literal","value":"sync_arrow_up"},{"type":"literal","value":"sync_desktop"},{"type":"literal","value":"sync_disabled"},{"type":"literal","value":"sync_lock"},{"type":"literal","value":"sync_problem"},{"type":"literal","value":"sync_saved_locally"},{"type":"literal","value":"sync_saved_locally_off"},{"type":"literal","value":"system_security_update"},{"type":"literal","value":"system_security_update_good"},{"type":"literal","value":"system_security_update_warning"},{"type":"literal","value":"system_update"},{"type":"literal","value":"system_update_alt"},{"type":"literal","value":"tab_close"},{"type":"literal","value":"tab_close_inactive"},{"type":"literal","value":"tab_close_right"},{"type":"literal","value":"tab_duplicate"},{"type":"literal","value":"tab_group"},{"type":"literal","value":"tab_inactive"},{"type":"literal","value":"tab_move"},{"type":"literal","value":"tab_new_right"},{"type":"literal","value":"tab_recent"},{"type":"literal","value":"tab_search"},{"type":"literal","value":"tab_unselected"},{"type":"literal","value":"table_bar"},{"type":"literal","value":"table_chart"},{"type":"literal","value":"table_chart_view"},{"type":"literal","value":"table_convert"},{"type":"literal","value":"table_edit"},{"type":"literal","value":"table_eye"},{"type":"literal","value":"table_lamp"},{"type":"literal","value":"table_large"},{"type":"literal","value":"table_restaurant"},{"type":"literal","value":"table_rows"},{"type":"literal","value":"table_rows_narrow"},{"type":"literal","value":"table_sign"},{"type":"literal","value":"table_view"},{"type":"literal","value":"tablet"},{"type":"literal","value":"tablet_android"},{"type":"literal","value":"tablet_camera"},{"type":"literal","value":"tablet_mac"},{"type":"literal","value":"tactic"},{"type":"literal","value":"tag_faces"},{"type":"literal","value":"takeout_dining"},{"type":"literal","value":"takeout_dining_2"},{"type":"literal","value":"tamper_detection_off"},{"type":"literal","value":"tamper_detection_on"},{"type":"literal","value":"tap_and_play"},{"type":"literal","value":"tapas"},{"type":"literal","value":"task"},{"type":"literal","value":"task_alt"},{"type":"literal","value":"tatami_seat"},{"type":"literal","value":"taunt"},{"type":"literal","value":"taxi_alert"},{"type":"literal","value":"team_dashboard"},{"type":"literal","value":"temp_preferences_eco"},{"type":"literal","value":"temple_buddhist"},{"type":"literal","value":"temple_hindu"},{"type":"literal","value":"tenancy"},{"type":"literal","value":"terrain"},{"type":"literal","value":"text_ad"},{"type":"literal","value":"text_compare"},{"type":"literal","value":"text_decrease"},{"type":"literal","value":"text_fields"},{"type":"literal","value":"text_fields_alt"},{"type":"literal","value":"text_format"},{"type":"literal","value":"text_increase"},{"type":"literal","value":"text_rotate_up"},{"type":"literal","value":"text_rotate_vertical"},{"type":"literal","value":"text_rotation_angledown"},{"type":"literal","value":"text_rotation_angleup"},{"type":"literal","value":"text_rotation_down"},{"type":"literal","value":"text_rotation_none"},{"type":"literal","value":"text_select_end"},{"type":"literal","value":"text_select_jump_to_beginning"},{"type":"literal","value":"text_select_jump_to_end"},{"type":"literal","value":"text_select_move_back_character"},{"type":"literal","value":"text_select_move_back_word"},{"type":"literal","value":"text_select_move_down"},{"type":"literal","value":"text_select_move_forward_character"},{"type":"literal","value":"text_select_move_forward_word"},{"type":"literal","value":"text_select_move_up"},{"type":"literal","value":"text_select_start"},{"type":"literal","value":"text_snippet"},{"type":"literal","value":"text_to_speech"},{"type":"literal","value":"text_up"},{"type":"literal","value":"textsms"},{"type":"literal","value":"texture"},{"type":"literal","value":"texture_add"},{"type":"literal","value":"texture_minus"},{"type":"literal","value":"theater_comedy"},{"type":"literal","value":"theaters"},{"type":"literal","value":"thermometer_add"},{"type":"literal","value":"thermometer_gain"},{"type":"literal","value":"thermometer_loss"},{"type":"literal","value":"thermometer_minus"},{"type":"literal","value":"thermostat"},{"type":"literal","value":"thermostat_arrow_down"},{"type":"literal","value":"thermostat_arrow_up"},{"type":"literal","value":"thermostat_auto"},{"type":"literal","value":"thermostat_carbon"},{"type":"literal","value":"things_to_do"},{"type":"literal","value":"thread_unread"},{"type":"literal","value":"threat_intelligence"},{"type":"literal","value":"thumb_down"},{"type":"literal","value":"thumb_down_alt"},{"type":"literal","value":"thumb_down_off_alt"},{"type":"literal","value":"thumb_up"},{"type":"literal","value":"thumb_up_alt"},{"type":"literal","value":"thumb_up_off_alt"},{"type":"literal","value":"thumbnail_bar"},{"type":"literal","value":"thumbs_up_double"},{"type":"literal","value":"thumbs_up_down"},{"type":"literal","value":"thunderstorm"},{"type":"literal","value":"tibia"},{"type":"literal","value":"tibia_alt"},{"type":"literal","value":"tile_large"},{"type":"literal","value":"tile_medium"},{"type":"literal","value":"tile_small"},{"type":"literal","value":"time_auto"},{"type":"literal","value":"time_to_leave"},{"type":"literal","value":"timeline"},{"type":"literal","value":"timer_1"},{"type":"literal","value":"timer_10"},{"type":"literal","value":"timer_10_alt_1"},{"type":"literal","value":"timer_10_select"},{"type":"literal","value":"timer_2"},{"type":"literal","value":"timer_3"},{"type":"literal","value":"timer_3_alt_1"},{"type":"literal","value":"timer_3_select"},{"type":"literal","value":"timer_5"},{"type":"literal","value":"timer_5_shutter"},{"type":"literal","value":"timer_arrow_down"},{"type":"literal","value":"timer_arrow_up"},{"type":"literal","value":"timer_off"},{"type":"literal","value":"timer_pause"},{"type":"literal","value":"timer_play"},{"type":"literal","value":"tips_and_updates"},{"type":"literal","value":"tire_repair"},{"type":"literal","value":"titlecase"},{"type":"literal","value":"toc"},{"type":"literal","value":"today"},{"type":"literal","value":"toggle_off"},{"type":"literal","value":"toggle_on"},{"type":"literal","value":"token"},{"type":"literal","value":"toll"},{"type":"literal","value":"tonality"},{"type":"literal","value":"tonality_2"},{"type":"literal","value":"tools_flat_head"},{"type":"literal","value":"tools_installation_kit"},{"type":"literal","value":"tools_ladder"},{"type":"literal","value":"tools_level"},{"type":"literal","value":"tools_phillips"},{"type":"literal","value":"tools_pliers_wire_stripper"},{"type":"literal","value":"tools_power_drill"},{"type":"literal","value":"tooltip_2"},{"type":"literal","value":"top_panel_close"},{"type":"literal","value":"top_panel_open"},{"type":"literal","value":"topic"},{"type":"literal","value":"total_dissolved_solids"},{"type":"literal","value":"touch_app"},{"type":"literal","value":"touch_double"},{"type":"literal","value":"touch_long"},{"type":"literal","value":"touch_triple"},{"type":"literal","value":"touchpad_mouse"},{"type":"literal","value":"touchpad_mouse_off"},{"type":"literal","value":"tour"},{"type":"literal","value":"toys"},{"type":"literal","value":"toys_and_games"},{"type":"literal","value":"toys_fan"},{"type":"literal","value":"track_changes"},{"type":"literal","value":"trackpad_input"},{"type":"literal","value":"trackpad_input_2"},{"type":"literal","value":"trackpad_input_3"},{"type":"literal","value":"traffic"},{"type":"literal","value":"traffic_jam"},{"type":"literal","value":"trail_length"},{"type":"literal","value":"trail_length_medium"},{"type":"literal","value":"trail_length_short"},{"type":"literal","value":"train"},{"type":"literal","value":"transcribe"},{"type":"literal","value":"transfer_within_a_station"},{"type":"literal","value":"transgender"},{"type":"literal","value":"transit_enterexit"},{"type":"literal","value":"transit_ticket"},{"type":"literal","value":"transition_chop"},{"type":"literal","value":"transition_dissolve"},{"type":"literal","value":"transition_fade"},{"type":"literal","value":"transition_push"},{"type":"literal","value":"transition_slide"},{"type":"literal","value":"translate_indic"},{"type":"literal","value":"transportation"},{"type":"literal","value":"travel"},{"type":"literal","value":"travel_explore"},{"type":"literal","value":"travel_luggage_and_bags"},{"type":"literal","value":"trending_down"},{"type":"literal","value":"trending_flat"},{"type":"literal","value":"trending_up"},{"type":"literal","value":"trip"},{"type":"literal","value":"trip_origin"},{"type":"literal","value":"trolley"},{"type":"literal","value":"trolley_cable_car"},{"type":"literal","value":"troubleshoot"},{"type":"literal","value":"try"},{"type":"literal","value":"tsunami"},{"type":"literal","value":"tsv"},{"type":"literal","value":"tty"},{"type":"literal","value":"tune"},{"type":"literal","value":"tungsten"},{"type":"literal","value":"turn_left"},{"type":"literal","value":"turn_right"},{"type":"literal","value":"turn_sharp_left"},{"type":"literal","value":"turn_sharp_right"},{"type":"literal","value":"turn_slight_left"},{"type":"literal","value":"turn_slight_right"},{"type":"literal","value":"turned_in"},{"type":"literal","value":"turned_in_not"},{"type":"literal","value":"tv_displays"},{"type":"literal","value":"tv_gen"},{"type":"literal","value":"tv_guide"},{"type":"literal","value":"tv_next"},{"type":"literal","value":"tv_off"},{"type":"literal","value":"tv_options_edit_channels"},{"type":"literal","value":"tv_options_input_settings"},{"type":"literal","value":"tv_remote"},{"type":"literal","value":"tv_signin"},{"type":"literal","value":"tv_with_assistant"},{"type":"literal","value":"two_pager"},{"type":"literal","value":"two_pager_store"},{"type":"literal","value":"two_wheeler"},{"type":"literal","value":"type_specimen"},{"type":"literal","value":"u_turn_left"},{"type":"literal","value":"u_turn_right"},{"type":"literal","value":"udon"},{"type":"literal","value":"ulna_radius"},{"type":"literal","value":"ulna_radius_alt"},{"type":"literal","value":"unarchive"},{"type":"literal","value":"undo"},{"type":"literal","value":"unfold_less"},{"type":"literal","value":"unfold_less_double"},{"type":"literal","value":"unfold_more"},{"type":"literal","value":"unfold_more_double"},{"type":"literal","value":"ungroup"},{"type":"literal","value":"universal_currency"},{"type":"literal","value":"universal_currency_alt"},{"type":"literal","value":"universal_local"},{"type":"literal","value":"unknown_2"},{"type":"literal","value":"unknown_5"},{"type":"literal","value":"unknown_7"},{"type":"literal","value":"unknown_document"},{"type":"literal","value":"unknown_med"},{"type":"literal","value":"unlicense"},{"type":"literal","value":"unpaved_road"},{"type":"literal","value":"unpublished"},{"type":"literal","value":"unsubscribe"},{"type":"literal","value":"upcoming"},{"type":"literal","value":"update"},{"type":"literal","value":"update_disabled"},{"type":"literal","value":"upgrade"},{"type":"literal","value":"upi_pay"},{"type":"literal","value":"upload"},{"type":"literal","value":"upload_2"},{"type":"literal","value":"upload_file"},{"type":"literal","value":"urology"},{"type":"literal","value":"usb"},{"type":"literal","value":"usb_off"},{"type":"literal","value":"user_attributes"},{"type":"literal","value":"vaccines"},{"type":"literal","value":"vacuum"},{"type":"literal","value":"valve"},{"type":"literal","value":"vape_free"},{"type":"literal","value":"vaping_rooms"},{"type":"literal","value":"variable_add"},{"type":"literal","value":"variable_insert"},{"type":"literal","value":"variable_remove"},{"type":"literal","value":"variables"},{"type":"literal","value":"ventilator"},{"type":"literal","value":"verified"},{"type":"literal","value":"verified_off"},{"type":"literal","value":"verified_user"},{"type":"literal","value":"vertical_align_bottom"},{"type":"literal","value":"vertical_align_center"},{"type":"literal","value":"vertical_align_top"},{"type":"literal","value":"vertical_distribute"},{"type":"literal","value":"vertical_shades"},{"type":"literal","value":"vertical_shades_closed"},{"type":"literal","value":"vertical_split"},{"type":"literal","value":"vibration"},{"type":"literal","value":"video_call"},{"type":"literal","value":"video_camera_back"},{"type":"literal","value":"video_camera_back_add"},{"type":"literal","value":"video_camera_front"},{"type":"literal","value":"video_camera_front_off"},{"type":"literal","value":"video_chat"},{"type":"literal","value":"video_file"},{"type":"literal","value":"video_label"},{"type":"literal","value":"video_library"},{"type":"literal","value":"video_search"},{"type":"literal","value":"video_settings"},{"type":"literal","value":"video_stable"},{"type":"literal","value":"videocam"},{"type":"literal","value":"videocam_alert"},{"type":"literal","value":"videocam_off"},{"type":"literal","value":"videogame_asset"},{"type":"literal","value":"videogame_asset_off"},{"type":"literal","value":"view_agenda"},{"type":"literal","value":"view_apps"},{"type":"literal","value":"view_array"},{"type":"literal","value":"view_carousel"},{"type":"literal","value":"view_column"},{"type":"literal","value":"view_column_2"},{"type":"literal","value":"view_comfy"},{"type":"literal","value":"view_comfy_alt"},{"type":"literal","value":"view_compact"},{"type":"literal","value":"view_compact_alt"},{"type":"literal","value":"view_cozy"},{"type":"literal","value":"view_day"},{"type":"literal","value":"view_headline"},{"type":"literal","value":"view_in_ar"},{"type":"literal","value":"view_in_ar_off"},{"type":"literal","value":"view_kanban"},{"type":"literal","value":"view_list"},{"type":"literal","value":"view_module"},{"type":"literal","value":"view_object_track"},{"type":"literal","value":"view_quilt"},{"type":"literal","value":"view_real_size"},{"type":"literal","value":"view_sidebar"},{"type":"literal","value":"view_stream"},{"type":"literal","value":"view_timeline"},{"type":"literal","value":"view_week"},{"type":"literal","value":"vignette"},{"type":"literal","value":"vignette_2"},{"type":"literal","value":"villa"},{"type":"literal","value":"visibility_lock"},{"type":"literal","value":"visibility_off"},{"type":"literal","value":"vital_signs"},{"type":"literal","value":"vo2_max"},{"type":"literal","value":"voice_chat"},{"type":"literal","value":"voice_over_off"},{"type":"literal","value":"voice_selection"},{"type":"literal","value":"voice_selection_off"},{"type":"literal","value":"voicemail"},{"type":"literal","value":"voicemail_2"},{"type":"literal","value":"volcano"},{"type":"literal","value":"volume_down"},{"type":"literal","value":"volume_down_alt"},{"type":"literal","value":"volume_mute"},{"type":"literal","value":"volume_off"},{"type":"literal","value":"volume_up"},{"type":"literal","value":"volunteer_activism"},{"type":"literal","value":"voting_chip"},{"type":"literal","value":"vpn_key"},{"type":"literal","value":"vpn_key_alert"},{"type":"literal","value":"vpn_key_off"},{"type":"literal","value":"vpn_lock"},{"type":"literal","value":"vpn_lock_2"},{"type":"literal","value":"vr180_create2d"},{"type":"literal","value":"vr180_create2d_off"},{"type":"literal","value":"vrpano"},{"type":"literal","value":"wall_art"},{"type":"literal","value":"wall_lamp"},{"type":"literal","value":"wallet"},{"type":"literal","value":"wallpaper"},{"type":"literal","value":"wallpaper_slideshow"},{"type":"literal","value":"wand_shine"},{"type":"literal","value":"wand_stars"},{"type":"literal","value":"ward"},{"type":"literal","value":"warehouse"},{"type":"literal","value":"warning_amber"},{"type":"literal","value":"warning_off"},{"type":"literal","value":"wash"},{"type":"literal","value":"washoku"},{"type":"literal","value":"watch"},{"type":"literal","value":"watch_arrow"},{"type":"literal","value":"watch_button_press"},{"type":"literal","value":"watch_check"},{"type":"literal","value":"watch_later"},{"type":"literal","value":"watch_off"},{"type":"literal","value":"watch_screentime"},{"type":"literal","value":"watch_vibration"},{"type":"literal","value":"watch_wake"},{"type":"literal","value":"water"},{"type":"literal","value":"water_bottle"},{"type":"literal","value":"water_bottle_large"},{"type":"literal","value":"water_damage"},{"type":"literal","value":"water_do"},{"type":"literal","value":"water_drop"},{"type":"literal","value":"water_ec"},{"type":"literal","value":"water_full"},{"type":"literal","value":"water_heater"},{"type":"literal","value":"water_lock"},{"type":"literal","value":"water_loss"},{"type":"literal","value":"water_lux"},{"type":"literal","value":"water_medium"},{"type":"literal","value":"water_orp"},{"type":"literal","value":"water_ph"},{"type":"literal","value":"water_pump"},{"type":"literal","value":"water_voc"},{"type":"literal","value":"waterfall_chart"},{"type":"literal","value":"waves"},{"type":"literal","value":"waving_hand"},{"type":"literal","value":"wb_auto"},{"type":"literal","value":"wb_cloudy"},{"type":"literal","value":"wb_incandescent"},{"type":"literal","value":"wb_iridescent"},{"type":"literal","value":"wb_shade"},{"type":"literal","value":"wb_sunny"},{"type":"literal","value":"wb_twighlight"},{"type":"literal","value":"wb_twilight"},{"type":"literal","value":"wc"},{"type":"literal","value":"weather_hail"},{"type":"literal","value":"weather_mix"},{"type":"literal","value":"weather_snowy"},{"type":"literal","value":"web_asset"},{"type":"literal","value":"web_asset_off"},{"type":"literal","value":"web_stories"},{"type":"literal","value":"web_traffic"},{"type":"literal","value":"webhook"},{"type":"literal","value":"weekend"},{"type":"literal","value":"weight"},{"type":"literal","value":"west"},{"type":"literal","value":"whatshot"},{"type":"literal","value":"wheelchair_pickup"},{"type":"literal","value":"where_to_vote"},{"type":"literal","value":"widget_medium"},{"type":"literal","value":"widget_small"},{"type":"literal","value":"widget_width"},{"type":"literal","value":"widgets"},{"type":"literal","value":"width_full"},{"type":"literal","value":"width_normal"},{"type":"literal","value":"width_wide"},{"type":"literal","value":"wifi_1_bar"},{"type":"literal","value":"wifi_2_bar"},{"type":"literal","value":"wifi_add"},{"type":"literal","value":"wifi_calling"},{"type":"literal","value":"wifi_calling_1"},{"type":"literal","value":"wifi_calling_2"},{"type":"literal","value":"wifi_calling_3"},{"type":"literal","value":"wifi_calling_bar_1"},{"type":"literal","value":"wifi_calling_bar_2"},{"type":"literal","value":"wifi_calling_bar_3"},{"type":"literal","value":"wifi_channel"},{"type":"literal","value":"wifi_find"},{"type":"literal","value":"wifi_home"},{"type":"literal","value":"wifi_lock"},{"type":"literal","value":"wifi_notification"},{"type":"literal","value":"wifi_off"},{"type":"literal","value":"wifi_password"},{"type":"literal","value":"wifi_protected_setup"},{"type":"literal","value":"wifi_proxy"},{"type":"literal","value":"wifi_tethering"},{"type":"literal","value":"wifi_tethering_error"},{"type":"literal","value":"wifi_tethering_off"},{"type":"literal","value":"wind_power"},{"type":"literal","value":"window_closed"},{"type":"literal","value":"window_open"},{"type":"literal","value":"window_sensor"},{"type":"literal","value":"windshield_defrost_auto"},{"type":"literal","value":"windshield_defrost_front"},{"type":"literal","value":"windshield_defrost_rear"},{"type":"literal","value":"windshield_heat_front"},{"type":"literal","value":"wine_bar"},{"type":"literal","value":"woman"},{"type":"literal","value":"woman_2"},{"type":"literal","value":"work"},{"type":"literal","value":"work_alert"},{"type":"literal","value":"work_history"},{"type":"literal","value":"work_off"},{"type":"literal","value":"work_outline"},{"type":"literal","value":"work_update"},{"type":"literal","value":"workspace_premium"},{"type":"literal","value":"workspaces"},{"type":"literal","value":"workspaces_filled"},{"type":"literal","value":"workspaces_outline"},{"type":"literal","value":"wounds_injuries"},{"type":"literal","value":"wrap_text"},{"type":"literal","value":"wrist"},{"type":"literal","value":"wrong_location"},{"type":"literal","value":"wysiwyg"},{"type":"literal","value":"yakitori"},{"type":"literal","value":"yard"},{"type":"literal","value":"yoshoku"},{"type":"literal","value":"your_trips"},{"type":"literal","value":"youtube_activity"},{"type":"literal","value":"youtube_searched_for"},{"type":"literal","value":"zone_person_alert"},{"type":"literal","value":"zone_person_idle"},{"type":"literal","value":"zone_person_urgent"},{"type":"literal","value":"zoom_in"},{"type":"literal","value":"zoom_in_map"},{"type":"literal","value":"zoom_out"},{"type":"literal","value":"zoom_out_map"}]}}]},{"name":"NativeTabsBottomAccessoryProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]},{"name":"NativeTabsProps","variant":"declaration","kind":256,"children":[{"name":"backBehavior","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The behavior when navigating back with the back button."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"history"},{"type":"literal","value":"initialRoute"},{"type":"literal","value":"none"}]}},{"name":"backgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The background color of the tab bar."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"badgeBackgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The background color of every badge in the tab bar."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"badgeTextColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the badge text."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"blurEffect","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The blur effect applied to the tab bar."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"none"},{"type":"literal","value":"regular"},{"type":"literal","value":"light"},{"type":"literal","value":"dark"},{"type":"literal","value":"systemDefault"},{"type":"literal","value":"extraLight"},{"type":"literal","value":"prominent"},{"type":"literal","value":"systemUltraThinMaterial"},{"type":"literal","value":"systemThinMaterial"},{"type":"literal","value":"systemMaterial"},{"type":"literal","value":"systemThickMaterial"},{"type":"literal","value":"systemChromeMaterial"},{"type":"literal","value":"systemUltraThinMaterialLight"},{"type":"literal","value":"systemThinMaterialLight"},{"type":"literal","value":"systemMaterialLight"},{"type":"literal","value":"systemThickMaterialLight"},{"type":"literal","value":"systemChromeMaterialLight"},{"type":"literal","value":"systemUltraThinMaterialDark"},{"type":"literal","value":"systemThinMaterialDark"},{"type":"literal","value":"systemMaterialDark"},{"type":"literal","value":"systemThickMaterialDark"},{"type":"literal","value":"systemChromeMaterialDark"}]}},{"name":"disableIndicator","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Disables the active indicator for the tab bar."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableTransparentOnScrollEdge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab bar will not become transparent when scrolled to the edge."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", hides the tab bar."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"iconColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of every tab icon in the tab bar."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ColorValue | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ColorValue | undefined"}}]}}]}},{"name":"indicatorColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the tab indicator."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"labelStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The style of the every tab label in the tab bar."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}},{"name":"selected","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}}]}}]}},{"name":"labelVisibilityMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The visibility mode of the tab item label."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"auto"},{"type":"literal","value":"selected"},{"type":"literal","value":"labeled"},{"type":"literal","value":"unlabeled"}]}},{"name":"minimizeBehavior","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Specifies the minimize behavior for the tab bar.\n\nAvailable starting from iOS 26.\n\nThe following values are currently supported:\n\n- "},{"kind":"code","text":"`automatic`"},{"kind":"text","text":" - resolves to the system default minimize behavior\n- "},{"kind":"code","text":"`never`"},{"kind":"text","text":" - the tab bar does not minimize\n- "},{"kind":"code","text":"`onScrollDown`"},{"kind":"text","text":" - the tab bar minimizes when scrolling down and\n expands when scrolling back up\n- "},{"kind":"code","text":"`onScrollUp`"},{"kind":"text","text":" - the tab bar minimizes when scrolling up and expands\n when scrolling back down"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)."}]},{"tag":"@default","content":[{"kind":"text","text":"automatic"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"never"},{"type":"literal","value":"onScrollDown"},{"type":"literal","value":"onScrollUp"}]}},{"name":"rippleColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the ripple effect when the tab is pressed."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"screenListeners","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Listeners for navigation events on all tabs.\n\nSupported events:\n- "},{"kind":"code","text":"`tabPress`"},{"kind":"text","text":" - called when a tab is pressed\n- "},{"kind":"code","text":"`focus`"},{"kind":"text","text":" - called when the screen comes into focus\n- "},{"kind":"code","text":"`blur`"},{"kind":"text","text":" - called when the screen loses focus"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n {\n console.log('Any tab pressed');\n },\n }}\n>\n ...\n\n```"}]}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"prop","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenListeners"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"}],"name":"ScreenListeners","package":"expo-router"}}]}},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"beforeRemove","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"beforeRemove"},{"type":"literal","value":true}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"blur","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"blur"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"focus","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"focus"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"state"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"tabPress","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"NativeTabNavigationEventMap"},"name":"NativeTabNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/TabRouter.tsx","qualifiedName":"TabNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"TabNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"tabPress"},{"type":"literal","value":false}],"name":"EventListenerCallback","package":"expo-router"}}]}}],"name":"Partial","package":"typescript"}]}},{"name":"shadowColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The color of the shadow."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uibarappearance/shadowcolor)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"sidebarAdaptable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", enables the sidebarAdaptable tab bar style on iPadOS and macOS. This prop has no effect on iPhone."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS 18+"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"tabBarRespectsIMEInsets","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab bar lifts above the keyboard (input method editor, or IME) instead of being overlaid by it. By default, the keyboard overlays the tab bar.\n\nRequires "},{"kind":"code","text":"`windowSoftInputMode=\"adjustResize\"`"},{"kind":"text","text":". Has no effect on Android API levels earlier than 30 (Android 11)."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"tintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The tint color of the tab icon.\n\nCan be overridden by icon color and label color for each tab individually."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"titlePositionAdjustment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/titlepositionadjustment)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"vertical","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"unstable_nativeProps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying native tab host implementation in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":".\nUse this to configure props that are not directly exposed by Expo Router.\n\n> **Note**: This is an unstable API and may change or be removed in minor versions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/host/TabsHost.types.ts","qualifiedName":"TabsHostProps"},"name":"TabsHostProps","package":"react-native-screens"},{"type":"union","types":[{"type":"literal","value":"children"},{"type":"literal","value":"navStateRequest"},{"type":"literal","value":"onTabSelected"}]}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}}],"extendedTypes":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.PropsWithChildren"},"name":"PropsWithChildren","package":"@types/react","qualifiedName":"React.PropsWithChildren"}]},{"name":"NativeTabsTriggerBadgeProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text to display as the badge for the tab.\nIf not provided, the badge will not be displayed."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the badge will be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"selectedBackgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]},{"name":"NativeTabsTriggerLabelProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text to display as the label for the tab."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the label will be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"selectedStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","name":"NativeTabsLabelStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}}]},{"name":"NativeTabTriggerProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The children of the trigger.\n\nUse "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":", "},{"kind":"code","text":"`Label`"},{"kind":"text","text":", and "},{"kind":"code","text":"`Badge`"},{"kind":"text","text":" components to customize the tab."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"contentStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The style applied to the content of the tab\n\nNote: Only certain style properties are supported."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Pick"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"ViewStyle"},"name":"ViewStyle","package":"react-native"},{"type":"union","types":[{"type":"literal","value":"backgroundColor"},{"type":"literal","value":"experimental_backgroundImage"},{"type":"literal","value":"alignContent"},{"type":"literal","value":"alignItems"},{"type":"literal","value":"flexDirection"},{"type":"literal","value":"gap"},{"type":"literal","value":"justifyContent"},{"type":"literal","value":"padding"},{"type":"literal","value":"paddingBottom"},{"type":"literal","value":"paddingEnd"},{"type":"literal","value":"paddingHorizontal"},{"type":"literal","value":"paddingLeft"},{"type":"literal","value":"paddingRight"},{"type":"literal","value":"paddingStart"},{"type":"literal","value":"paddingTop"},{"type":"literal","value":"paddingVertical"},{"type":"literal","value":"paddingBlock"},{"type":"literal","value":"paddingBlockEnd"},{"type":"literal","value":"paddingBlockStart"},{"type":"literal","value":"paddingInline"},{"type":"literal","value":"paddingInlineEnd"},{"type":"literal","value":"paddingInlineStart"}]}],"name":"Pick","package":"typescript"}},{"name":"disableAutomaticContentInsets","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The default behavior differs between iOS and Android.\n\nOn **Android**, the content of a native tabs screen is automatically wrapped in a "},{"kind":"code","text":"`SafeAreaView`"},{"kind":"text","text":",\nand the **bottom** inset is applied. Other insets must be handled manually.\n\nOn **iOS**, the first scroll view nested inside a native tabs screen has\n[automatic content inset adjustment](https://reactnative.dev/docs/scrollview#contentinsetadjustmentbehavior-ios) enabled\n\nWhen this property is set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", automatic content inset adjustment is disabled for the screen\nand must be managed manually. You can use "},{"kind":"code","text":"`SafeAreaView`"},{"kind":"text","text":" from "},{"kind":"code","text":"`react-native-screens/experimental`"},{"kind":"text","text":"\nto handle safe area insets."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab is shown but cannot be selected by tapping it in the\ntab bar.\n\n> **Note:** This only suppresses the native tap interaction. JavaScript\n> navigation such as "},{"kind":"code","text":"`router.push()`"},{"kind":"text","text":" or "},{"kind":"code","text":"``"},{"kind":"text","text":" still navigates to\n> the tab. Use this for tabs that should appear visible but be temporarily inert,\n> and gate navigation in your own code if you need to fully prevent access.\n\nUnlike "},{"kind":"code","text":"`hidden`"},{"kind":"text","text":", the tab remains visible in the tab bar."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disablePopToTop","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will not pop stack to the root when selected again."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableScrollToTop","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will not scroll to the top when selected again."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disableTransparentOnScrollEdge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the tab bar will not become transparent when scrolled to the edge.\n\nWhen set on a trigger, it takes precedence over the value set on "},{"kind":"code","text":"`NativeTabs`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true, the tab will be hidden from the tab bar.\n\n> **Note**: Marking a tab as "},{"kind":"code","text":"`hidden`"},{"kind":"text","text":" means it cannot be navigated to in any way.\n\n> **Note**: Dynamically hiding tabs will remount the navigator and the state will be reset."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"listeners","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Listeners for navigation events on this tab.\n\nSupported events:\n- "},{"kind":"code","text":"`tabPress`"},{"kind":"text","text":" - called when this tab is pressed\n- "},{"kind":"code","text":"`focus`"},{"kind":"text","text":" - called when this screen comes into focus\n- "},{"kind":"code","text":"`blur`"},{"kind":"text","text":" - called when this screen loses focus"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n {\n console.log('Home tab pressed');\n },\n }}\n/>\n```"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"beforeRemove","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"beforeRemove"},{"type":"literal","value":true}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"blur","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"blur"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"focus","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"focus"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"state"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"history","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Alternative entries for history."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"unknown"}}},{"name":"index","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Index of the currently focused route."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"key","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Unique key for the navigation state."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"routeNames","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of valid route names as defined in the screen components."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"routes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"List of rendered routes."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationRoute"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"NavigationRoute","package":"expo-router"}}},{"name":"stale","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether the navigation state has been rehydrated."}]},"type":{"type":"literal","value":false}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Custom type for the state, whether it's for tab, stack, drawer etc.\nDuring rehydration, the state will be discarded if type doesn't match with router type.\nIt can also be used to detect the type of the navigator we're dealing with."}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"intrinsic","name":"string"},{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"intrinsic","name":"undefined"}]}],"name":"EventListenerCallback","package":"expo-router"}}]}}],"name":"Partial","package":"typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"prop","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenListeners"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"NavigationState"},"name":"NavigationState","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapBase"},"name":"EventMapBase","package":"expo-router"}],"name":"ScreenListeners","package":"expo-router"}}]}}]}},{"name":"name","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the route.\n\nThis is required when used inside a Layout component.\n\nWhen used in a route it has no effect."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"role","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"System-provided tab bar item with predefined icon and title\n\nUses Apple's built-in tab bar items (e.g., bookmarks, contacts, downloads) with\nstandard iOS styling and localized titles. Custom "},{"kind":"code","text":"`icon`"},{"kind":"text","text":" or "},{"kind":"code","text":"`selectedIcon`"},{"kind":"text","text":"\nproperties will override the system icon, but the system-defined title cannot\nbe customized."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem)."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"search"},{"type":"literal","value":"history"},{"type":"literal","value":"bookmarks"},{"type":"literal","value":"contacts"},{"type":"literal","value":"downloads"},{"type":"literal","value":"favorites"},{"type":"literal","value":"featured"},{"type":"literal","value":"more"},{"type":"literal","value":"mostRecent"},{"type":"literal","value":"mostViewed"},{"type":"literal","value":"recents"},{"type":"literal","value":"topRated"}]}},{"name":"unstable_nativeProps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying native tab screen implementation.\nUse this to configure props not directly exposed by Expo Router, but available in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":".\n\n> **Note**: This will override any other props set by Expo Router and may lead to unexpected behavior.\n\n> **Note**: This is an unstable API and may change or be removed in minor versions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/screen/TabsScreen.types.ts","qualifiedName":"TabsScreenProps"},"name":"TabsScreenProps","package":"react-native-screens"},{"type":"literal","value":"screenKey"}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}}]},{"name":"SFSymbolIcon","variant":"declaration","kind":256,"children":[{"name":"sf","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the SF Symbol to use as an icon.\n\nThe value can be provided in two ways:\n- As a string with the SF Symbol name\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"SFSymbols7_0 | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"}}]}}]}}]},{"name":"SrcIcon","variant":"declaration","kind":256,"children":[{"name":"renderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how the image icon is rendered on iOS.\n\n- "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":": iOS applies tint color to the icon (selected/unselected states)\n- "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":": Preserves original icon colors\n\n**Default behavior:**\n- If tab bar icon color is configured, defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":"\n- If no icon color is set, defaults to "},{"kind":"code","text":"`'original'`"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"src","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The image source to use as an icon.\n\nWhen "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" prop is used it will override this prop on iOS.\n\nWhen "},{"kind":"code","text":"`drawable`"},{"kind":"text","text":" or "},{"kind":"code","text":"`material`"},{"kind":"text","text":" prop is used it will override this prop on Android.\n\nThe value can be provided in two ways:\n- As an image source\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"Android"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactElement"},"typeArguments":[{"type":"intrinsic","name":"unknown"},{"type":"unknown","name":"string | JSXElementConstructor"}],"name":"ReactElement","package":"@types/react","qualifiedName":"React.ReactElement"},{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"unknown","name":"ReactElement> | ImageSourcePropType | undefined"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"unknown","name":"ReactElement> | ImageSourcePropType"}}]}}]}}]},{"name":"XcassetIcon","variant":"declaration","kind":256,"children":[{"name":"xcasset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the iOS asset catalog image to use as an icon.\n\nXcassets provide automatic multi-resolution (@1x/@2x/@3x), dark mode variants,\nand device-specific images via "},{"kind":"code","text":"`[UIImage imageNamed:]`"},{"kind":"text","text":".\n\nThe rendering mode (template vs original) can be controlled via the "},{"kind":"code","text":"`renderingMode`"},{"kind":"text","text":" prop\non the "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" component. By default, icons are tinted when "},{"kind":"code","text":"`iconColor`"},{"kind":"text","text":" is set, and\nrendered as original otherwise.\n\nThe value can be provided in two ways:\n- As a string with the asset catalog image name\n- As an object specifying the default and selected states"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"selected","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}}]}}]},{"name":"NativeTabsBlurEffect","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiblureffect/style)"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_BLUR_EFFECTS"},"name":"SUPPORTED_BLUR_EFFECTS","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsHostNativeProps","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Props passed to the underlying tab host implementation in "},{"kind":"code","text":"`react-native-screens`"},{"kind":"text","text":"."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/tabs/host/TabsHost.types.ts","qualifiedName":"TabsHostProps"},"name":"TabsHostProps","package":"react-native-screens"},{"type":"union","types":[{"type":"literal","value":"navStateRequest"},{"type":"literal","value":"onTabSelected"},{"type":"literal","value":"children"}]}],"name":"Omit","package":"typescript"}],"name":"Partial","package":"typescript"}},{"name":"NativeTabsLabelStyle","variant":"declaration","kind":2097152,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Pick"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"},{"type":"union","types":[{"type":"literal","value":"fontFamily"},{"type":"literal","value":"fontSize"},{"type":"literal","value":"fontStyle"},{"type":"literal","value":"fontWeight"},{"type":"literal","value":"color"}]}],"name":"Pick","package":"typescript"}},{"name":"NativeTabsTabBarItemLabelVisibilityMode","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES"},"name":"SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTabBarItemRole","variant":"declaration","kind":2097152,"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_ITEM_ROLES"},"name":"SUPPORTED_TAB_BAR_ITEM_ROLES","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTabBarMinimizeBehavior","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26"}]}]},"type":{"type":"indexedAccess","indexType":{"type":"intrinsic","name":"number"},"objectType":{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/native-tabs/types.ts","qualifiedName":"SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS"},"name":"SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS","package":"expo-router","preferValues":true}}}},{"name":"NativeTabsTriggerIconProps","variant":"declaration","kind":2097152,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"selectedColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]}},{"type":"union","types":[{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"DrawableIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"MaterialIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"SFSymbolIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"DrawableIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"MaterialIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"XcassetIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"MaterialIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"intersection","types":[{"type":"reference","name":"DrawableIcon","package":"expo-router"},{"type":"reference","name":"SrcIcon","package":"expo-router"}]},{"type":"reference","name":"SrcIcon","package":"expo-router"}]}]}},{"name":"SymbolOrImageSource","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"drawable","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the drawable resource to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"sf","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the SF Symbol to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbol"},"name":"SFSymbol","package":"sf-symbols-typescript"}},{"name":"xcasset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the iOS asset catalog image to use as an icon."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS"}]}]},"type":{"type":"intrinsic","name":"string"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"renderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how the icon is rendered on iOS."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]},{"tag":"@default","content":[{"kind":"text","text":"'template'"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"src","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The image source to use as an icon."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}]}}]}}]}},{"name":"NativeTabs","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"The component used to create native tabs layout."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]}]},"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabsProps","package":"expo-router"}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"BottomAccessory","variant":"declaration","kind":1024,"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsBottomAccessoryProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"usePlacement","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A hook which returns the bottom accessory environment for given component.\n\nNote, that there can be two copies of the same component rendered for different environments.\nThe hook will ensure that component with correct environment is displayed.\n\nBecause two instances of the component will exist simultaneously, **any state kept\ninside the component will not be shared between the regular and inline versions**.\nIf your accessory needs synchronized or persistent state you must store that state\noutside of bottom accessory component (e.g. passing via props or using context).\n\nDon't pass the environment obtained using this hook up the tree."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\n// This component will have two copies rendered, one for `inline` and one for `regular` environment\nfunction AccessoryContent(props) {\n const placement = NativeTabs.BottomAccessory.usePlacement();\n if (placement === 'inline') {\n return ;\n }\n return ;\n}\n\nexport default function Layout(){\n const [isPlaying, setIsPlaying] = useState(false);\n return (\n \n \n \n \n \n \n );\n}\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"union","types":[{"type":"literal","value":"regular"},{"type":"literal","value":"inline"}]}}]}}}]}}]}},{"name":"Trigger","variant":"declaration","kind":1024,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The component used to customize the native tab options both in the _layout file and from the tab screen.\n\nWhen used in the _layout file, you need to provide a "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop.\nWhen used in the tab screen, the "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop takes no effect."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx app/home.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function HomeScreen() {\n return (\n \n \n Home\n \n This is home screen!\n \n );\n}\n```"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabTriggerProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"Badge","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerBadgeProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerBadge"},{"name":"Icon","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerIconProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerIcon"},{"name":"Label","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerLabelProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerLabel"},{"name":"VectorIcon","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Helper component for loading vector icons.\n\nPrefer using the "},{"kind":"code","text":"`md`"},{"kind":"text","text":" and "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" props on "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" rather than using this component directly.\nOnly use this component when you need to load a specific icon from a vector icon family."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Icon, VectorIcon } from 'expo-router';\nimport MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';\n\n} />\n```"}]}]},"typeParameters":[{"name":"NameT","variant":"typeParam","kind":131072,"flags":{"isConst":true},"type":{"type":"intrinsic","name":"string"}}],"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/primitives/types.ts","qualifiedName":"VectorIconProps"},"typeArguments":[{"type":"reference","name":"NameT","package":"expo-router","refersToTypeParameter":true}],"name":"VectorIconProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},"defaultValue":"NativeTabsTriggerVectorIcon"}]}}]},"defaultValue":"NativeTabTrigger"}]}}]},"defaultValue":"..."},{"name":"NativeTabTrigger","variant":"declaration","kind":32,"flags":{"isConst":true},"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The component used to customize the native tab options both in the _layout file and from the tab screen.\n\nWhen used in the _layout file, you need to provide a "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop.\nWhen used in the tab screen, the "},{"kind":"code","text":"`name`"},{"kind":"text","text":" prop takes no effect."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx app/_layout.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function Layout() {\n return (\n \n \n \n \n );\n}\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx app/home.tsx\nimport { NativeTabs } from 'expo-router/unstable-native-tabs';\n\nexport default function HomeScreen() {\n return (\n \n \n Home\n \n This is home screen!\n \n );\n}\n```"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"NativeTabTriggerProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"Badge","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerBadgeProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerBadge"},{"name":"Icon","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerIconProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerIcon"},{"name":"Label","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FC"},"typeArguments":[{"type":"reference","name":"NativeTabsTriggerLabelProps","package":"expo-router"}],"name":"FC","package":"@types/react","qualifiedName":"React.FC"},"defaultValue":"NativeTabsTriggerLabel"},{"name":"VectorIcon","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Helper component for loading vector icons.\n\nPrefer using the "},{"kind":"code","text":"`md`"},{"kind":"text","text":" and "},{"kind":"code","text":"`sf`"},{"kind":"text","text":" props on "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" rather than using this component directly.\nOnly use this component when you need to load a specific icon from a vector icon family."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Icon, VectorIcon } from 'expo-router';\nimport MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';\n\n} />\n```"}]}]},"typeParameters":[{"name":"NameT","variant":"typeParam","kind":131072,"flags":{"isConst":true},"type":{"type":"intrinsic","name":"string"}}],"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/primitives/types.ts","qualifiedName":"VectorIconProps"},"typeArguments":[{"type":"reference","name":"NameT","package":"expo-router","refersToTypeParameter":true}],"name":"VectorIconProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},"defaultValue":"NativeTabsTriggerVectorIcon"}]}}]},"defaultValue":"..."}],"packageName":"expo-router"} \ No newline at end of file diff --git a/packages/expo-router/CHANGELOG.md b/packages/expo-router/CHANGELOG.md index 75ca9e3591ad4e..4395bd43de0344 100644 --- a/packages/expo-router/CHANGELOG.md +++ b/packages/expo-router/CHANGELOG.md @@ -7,6 +7,7 @@ ### 🎉 New features - add `disabled` prop to native tab triggers ([#45671](https://github.com/expo/expo/pull/45671) by [@Ubax](https://github.com/Ubax)) +- Add `tabBarRespectsIMEInsets` Android property to `NativeTabs` ([#45679](https://github.com/expo/expo/pull/45679) by [@Ubax](https://github.com/Ubax)) ### 🐛 Bug fixes diff --git a/packages/expo-router/build/native-tabs/NativeTabsView.android.d.ts.map b/packages/expo-router/build/native-tabs/NativeTabsView.android.d.ts.map index 9cea86dcdf5189..c9d9b3753c205b 100644 --- a/packages/expo-router/build/native-tabs/NativeTabsView.android.d.ts.map +++ b/packages/expo-router/build/native-tabs/NativeTabsView.android.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"NativeTabsView.android.d.ts","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.android.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAiD,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGlG,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,kDAyDxD"} \ No newline at end of file +{"version":3,"file":"NativeTabsView.android.d.ts","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.android.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAiD,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGlG,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,kDA2DxD"} \ No newline at end of file diff --git a/packages/expo-router/build/native-tabs/NativeTabsView.android.js b/packages/expo-router/build/native-tabs/NativeTabsView.android.js index dcac6543e9168a..20d76b267aa55a 100644 --- a/packages/expo-router/build/native-tabs/NativeTabsView.android.js +++ b/packages/expo-router/build/native-tabs/NativeTabsView.android.js @@ -10,7 +10,7 @@ const appearance_1 = require("./appearance"); const types_1 = require("./types"); const optionsIconConverter_1 = require("./utils/optionsIconConverter"); function NativeTabsView(props) { - const { disableIndicator, tabs, unstable_nativeProps } = props; + const { disableIndicator, tabBarRespectsIMEInsets, tabs, unstable_nativeProps } = props; const { android: rawAndroidProps, ios: _ignoredRawIosProps, ...rawHostRestProps } = unstable_nativeProps ?? {}; const { selectedScreenKey, provenance } = (0, NativeTabsView_shared_1.useSelectedScreenKey)(props); const onTabSelected = (0, NativeTabsView_shared_1.useOnTabSelectedHandler)(props.onTabChange); @@ -31,11 +31,10 @@ function NativeTabsView(props) { if (children.length === 0) { return null; } - return ((0, jsx_runtime_1.jsx)(react_native_screens_1.Tabs.Host - // TODO(@ubax): Adjust docs and add support for tabBarRespectsIMEInsets - , { - // TODO(@ubax): Adjust docs and add support for tabBarRespectsIMEInsets - android: { ...rawAndroidProps }, tabBarHidden: props.hidden, ...rawHostRestProps, navStateRequest: { selectedScreenKey, baseProvenance: provenance }, onTabSelected: onTabSelected, children: children })); + return ((0, jsx_runtime_1.jsx)(react_native_screens_1.Tabs.Host, { android: { + tabBarRespectsIMEInsets: !!tabBarRespectsIMEInsets, + ...rawAndroidProps, + }, tabBarHidden: props.hidden, ...rawHostRestProps, navStateRequest: { selectedScreenKey, baseProvenance: provenance }, onTabSelected: onTabSelected, children: children })); } function Screen(props) { const { options, androidAppearance, contentRenderer } = props; diff --git a/packages/expo-router/build/native-tabs/NativeTabsView.android.js.map b/packages/expo-router/build/native-tabs/NativeTabsView.android.js.map index 814040d0639b4c..e7535deaebf75b 100644 --- a/packages/expo-router/build/native-tabs/NativeTabsView.android.js.map +++ b/packages/expo-router/build/native-tabs/NativeTabsView.android.js.map @@ -1 +1 @@ -{"version":3,"file":"NativeTabsView.android.js","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.android.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\nimport { Tabs, type TabsScreenAppearanceAndroid } from 'react-native-screens';\nimport { SafeAreaView } from 'react-native-screens/experimental';\n\nimport {\n type InternalTabScreenProps as SharedInternalTabScreenProps,\n ScreenContent,\n useOnTabSelectedHandler,\n useSelectedScreenKey,\n useSharedScreenProps,\n} from './NativeTabsView.shared';\nimport { createAndroidScreenAppearance } from './appearance';\nimport { SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES, type NativeTabsViewProps } from './types';\nimport { convertOptionsIconToScreensPropsIcon } from './utils/optionsIconConverter';\n\nexport function NativeTabsView(props: NativeTabsViewProps) {\n const { disableIndicator, tabs, unstable_nativeProps } = props;\n const {\n android: rawAndroidProps,\n ios: _ignoredRawIosProps,\n ...rawHostRestProps\n } = unstable_nativeProps ?? {};\n\n const { selectedScreenKey, provenance } = useSelectedScreenKey(props);\n const onTabSelected = useOnTabSelectedHandler(props.onTabChange);\n\n // TODO(@ubax): add per screen labelVisibilityMode + validation function\n let labelVisibilityMode = props.labelVisibilityMode;\n if (labelVisibilityMode && !supportedTabBarItemLabelVisibilityModesSet.has(labelVisibilityMode)) {\n console.warn(\n `Unsupported labelVisibilityMode: ${labelVisibilityMode}. Supported values are: ${SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES.map((mode) => `\"${mode}\"`).join(', ')}`\n );\n labelVisibilityMode = undefined;\n }\n\n const androidAppearances = tabs.map((tab) =>\n createAndroidScreenAppearance({\n options: tab.options,\n tintColor: props.tintColor,\n rippleColor: props.rippleColor,\n disableIndicator,\n labelVisibilityMode,\n })\n );\n\n const children = tabs.map((tab, index) => (\n \n ));\n\n if (children.length === 0) {\n return null;\n }\n\n return (\n \n {children}\n \n );\n}\n\ninterface InternalTabScreenProps extends SharedInternalTabScreenProps {\n androidAppearance: TabsScreenAppearanceAndroid;\n}\n\nfunction Screen(props: InternalTabScreenProps) {\n const { options, androidAppearance, contentRenderer } = props;\n\n const shared = useSharedScreenProps(props);\n\n const androidIcon = convertOptionsIconToScreensPropsIcon(shared.icon);\n const androidSelectedIcon = convertOptionsIconToScreensPropsIcon(shared.selectedIcon);\n\n const content = ;\n const wrappedContent = useMemo(() => {\n if (!options.disableAutomaticContentInsets) {\n return (\n \n {content}\n \n );\n }\n return content;\n }, [content, options.disableAutomaticContentInsets]);\n\n return (\n \n {wrappedContent}\n \n );\n}\n\nconst supportedTabBarItemLabelVisibilityModesSet = new Set(\n SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES\n);\n"]} \ No newline at end of file +{"version":3,"file":"NativeTabsView.android.js","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.android.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\nimport { Tabs, type TabsScreenAppearanceAndroid } from 'react-native-screens';\nimport { SafeAreaView } from 'react-native-screens/experimental';\n\nimport {\n type InternalTabScreenProps as SharedInternalTabScreenProps,\n ScreenContent,\n useOnTabSelectedHandler,\n useSelectedScreenKey,\n useSharedScreenProps,\n} from './NativeTabsView.shared';\nimport { createAndroidScreenAppearance } from './appearance';\nimport { SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES, type NativeTabsViewProps } from './types';\nimport { convertOptionsIconToScreensPropsIcon } from './utils/optionsIconConverter';\n\nexport function NativeTabsView(props: NativeTabsViewProps) {\n const { disableIndicator, tabBarRespectsIMEInsets, tabs, unstable_nativeProps } = props;\n const {\n android: rawAndroidProps,\n ios: _ignoredRawIosProps,\n ...rawHostRestProps\n } = unstable_nativeProps ?? {};\n\n const { selectedScreenKey, provenance } = useSelectedScreenKey(props);\n const onTabSelected = useOnTabSelectedHandler(props.onTabChange);\n\n // TODO(@ubax): add per screen labelVisibilityMode + validation function\n let labelVisibilityMode = props.labelVisibilityMode;\n if (labelVisibilityMode && !supportedTabBarItemLabelVisibilityModesSet.has(labelVisibilityMode)) {\n console.warn(\n `Unsupported labelVisibilityMode: ${labelVisibilityMode}. Supported values are: ${SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES.map((mode) => `\"${mode}\"`).join(', ')}`\n );\n labelVisibilityMode = undefined;\n }\n\n const androidAppearances = tabs.map((tab) =>\n createAndroidScreenAppearance({\n options: tab.options,\n tintColor: props.tintColor,\n rippleColor: props.rippleColor,\n disableIndicator,\n labelVisibilityMode,\n })\n );\n\n const children = tabs.map((tab, index) => (\n \n ));\n\n if (children.length === 0) {\n return null;\n }\n\n return (\n \n {children}\n \n );\n}\n\ninterface InternalTabScreenProps extends SharedInternalTabScreenProps {\n androidAppearance: TabsScreenAppearanceAndroid;\n}\n\nfunction Screen(props: InternalTabScreenProps) {\n const { options, androidAppearance, contentRenderer } = props;\n\n const shared = useSharedScreenProps(props);\n\n const androidIcon = convertOptionsIconToScreensPropsIcon(shared.icon);\n const androidSelectedIcon = convertOptionsIconToScreensPropsIcon(shared.selectedIcon);\n\n const content = ;\n const wrappedContent = useMemo(() => {\n if (!options.disableAutomaticContentInsets) {\n return (\n \n {content}\n \n );\n }\n return content;\n }, [content, options.disableAutomaticContentInsets]);\n\n return (\n \n {wrappedContent}\n \n );\n}\n\nconst supportedTabBarItemLabelVisibilityModesSet = new Set(\n SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES\n);\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/native-tabs/types.d.ts b/packages/expo-router/build/native-tabs/types.d.ts index 0d1045f5a04979..2d63ac6d054839 100644 --- a/packages/expo-router/build/native-tabs/types.d.ts +++ b/packages/expo-router/build/native-tabs/types.d.ts @@ -218,6 +218,15 @@ export interface NativeTabsProps extends PropsWithChildren { * @platform web */ badgeTextColor?: ColorValue; + /** + * When `true`, the tab bar lifts above the keyboard (input method editor, or IME) instead of being overlaid by it. By default, the keyboard overlays the tab bar. + * + * Requires `windowSoftInputMode="adjustResize"`. Has no effect on Android API levels earlier than 30 (Android 11). + * + * @default false + * @platform android + */ + tabBarRespectsIMEInsets?: boolean; /** * Listeners for navigation events on all tabs. * diff --git a/packages/expo-router/build/native-tabs/types.d.ts.map b/packages/expo-router/build/native-tabs/types.d.ts.map index 4b35d86848fbcf..85012d06dd44fb 100644 --- a/packages/expo-router/build/native-tabs/types.d.ts.map +++ b/packages/expo-router/build/native-tabs/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/expo-router/build/native-tabs/types.js.map b/packages/expo-router/build/native-tabs/types.js.map index f9467cc60c8537..54b3feca7071ee 100644 --- a/packages/expo-router/build/native-tabs/types.js.map +++ b/packages/expo-router/build/native-tabs/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":";;;AAoIa,QAAA,sBAAsB,GAAG;IACpC,MAAM;IACN,eAAe;IACf,YAAY;IACZ,OAAO;IACP,MAAM;IACN,SAAS;IACT,WAAW;IACX,yBAAyB;IACzB,oBAAoB;IACpB,gBAAgB;IAChB,qBAAqB;IACrB,sBAAsB;IACtB,8BAA8B;IAC9B,yBAAyB;IACzB,qBAAqB;IACrB,0BAA0B;IAC1B,2BAA2B;IAC3B,6BAA6B;IAC7B,wBAAwB;IACxB,oBAAoB;IACpB,yBAAyB;IACzB,0BAA0B;CAClB,CAAC;AAqOE,QAAA,6CAA6C,GAAG;IAC3D,MAAM;IACN,UAAU;IACV,SAAS;IACT,WAAW;CACH,CAAC;AAUE,QAAA,oCAAoC,GAAG;IAClD,WAAW;IACX,OAAO;IACP,cAAc;IACd,YAAY;CACJ,CAAC;AAkJX,MAAM,4BAA4B,GAAG;IACnC,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,SAAS;IACT,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,UAAU;CACF,CAAC","sourcesContent":["import type { PropsWithChildren } from 'react';\nimport type {\n ColorValue,\n ImageSourcePropType,\n StyleProp,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport type { TabsHostProps, TabsScreenProps } from 'react-native-screens';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type {\n DefaultRouterOptions,\n EventMapBase,\n NavigationState,\n ParamListBase,\n RouteProp,\n ScreenListeners,\n TabNavigationState,\n} from '../react-navigation/native';\n\n/**\n * Event map for `NativeTabs` navigation events.\n * Only `tabPress` is currently supported.\n */\nexport type NativeTabNavigationEventMap = {\n tabPress: { data: { __internalTabsType: 'native' }; canPreventDefault: false };\n};\n\nexport type NativeScreenProps = Partial>;\n\n/**\n * Props passed to the underlying tab host implementation in `react-native-screens`.\n */\nexport type NativeTabsHostNativeProps = Partial<\n Omit\n>;\n\nexport interface NativeTabOptions extends DefaultRouterOptions {\n icon?: SymbolOrImageSource;\n selectedIcon?: SymbolOrImageSource;\n title?: string;\n badgeValue?: string;\n selectedLabelStyle?: NativeTabsLabelStyle;\n labelStyle?: NativeTabsLabelStyle;\n role?: NativeTabsTabBarItemRole;\n selectedIconColor?: ColorValue;\n selectedBadgeBackgroundColor?: ColorValue;\n badgeBackgroundColor?: ColorValue;\n badgeTextColor?: ColorValue;\n backgroundColor?: ColorValue;\n blurEffect?: NativeTabsBlurEffect;\n shadowColor?: ColorValue;\n iconColor?: ColorValue;\n disableTransparentOnScrollEdge?: boolean;\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n selectedTitlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n indicatorColor?: ColorValue;\n hidden?: boolean;\n disabled?: boolean;\n specialEffects?: TabsScreenProps['specialEffects'];\n nativeProps?: NativeScreenProps;\n disableAutomaticContentInsets?: boolean;\n contentStyle?: Pick<\n ViewStyle,\n | 'backgroundColor'\n | 'experimental_backgroundImage'\n | 'padding'\n | 'paddingTop'\n | 'paddingBottom'\n | 'paddingLeft'\n | 'paddingRight'\n | 'paddingBlock'\n | 'paddingBlockEnd'\n | 'paddingBlockStart'\n | 'paddingInline'\n | 'paddingInlineEnd'\n | 'paddingInlineStart'\n | 'paddingEnd'\n | 'paddingHorizontal'\n | 'paddingVertical'\n | 'paddingStart'\n | 'alignContent'\n | 'alignItems'\n | 'justifyContent'\n | 'flexDirection'\n | 'gap'\n >;\n}\n\nexport type SymbolOrImageSource =\n | {\n /**\n * The name of the SF Symbol to use as an icon.\n * @platform iOS\n */\n sf?: SFSymbol;\n /**\n * The name of the iOS asset catalog image to use as an icon.\n * @platform iOS\n */\n xcasset?: string;\n /**\n * The name of the drawable resource to use as an icon.\n * @platform android\n */\n drawable?: string;\n }\n | {\n /**\n * The image source to use as an icon.\n */\n src?: ImageSourcePropType | Promise;\n /**\n * Controls how the icon is rendered on iOS.\n * @platform ios\n * @default 'template'\n */\n renderingMode?: 'template' | 'original';\n };\n\nexport type NativeTabsLabelStyle = Pick<\n TextStyle,\n 'fontFamily' | 'fontSize' | 'fontStyle' | 'fontWeight' | 'color'\n>;\n\nexport const SUPPORTED_BLUR_EFFECTS = [\n 'none',\n 'systemDefault',\n 'extraLight',\n 'light',\n 'dark',\n 'regular',\n 'prominent',\n 'systemUltraThinMaterial',\n 'systemThinMaterial',\n 'systemMaterial',\n 'systemThickMaterial',\n 'systemChromeMaterial',\n 'systemUltraThinMaterialLight',\n 'systemThinMaterialLight',\n 'systemMaterialLight',\n 'systemThickMaterialLight',\n 'systemChromeMaterialLight',\n 'systemUltraThinMaterialDark',\n 'systemThinMaterialDark',\n 'systemMaterialDark',\n 'systemThickMaterialDark',\n 'systemChromeMaterialDark',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiblureffect/style)\n */\nexport type NativeTabsBlurEffect = (typeof SUPPORTED_BLUR_EFFECTS)[number];\n\nexport interface NativeTabsProps extends PropsWithChildren {\n // #region common props\n /**\n * The style of the every tab label in the tab bar.\n */\n labelStyle?:\n | StyleProp\n | {\n default?: StyleProp;\n selected?: StyleProp;\n };\n /**\n * The color of every tab icon in the tab bar.\n */\n iconColor?: ColorValue | { default?: ColorValue; selected?: ColorValue };\n /**\n * The tint color of the tab icon.\n *\n * Can be overridden by icon color and label color for each tab individually.\n */\n tintColor?: ColorValue;\n /**\n * The background color of the tab bar.\n */\n backgroundColor?: ColorValue;\n /**\n * The background color of every badge in the tab bar.\n */\n badgeBackgroundColor?: ColorValue;\n /**\n * When set to `true`, hides the tab bar.\n *\n * @default false\n */\n hidden?: boolean;\n // #endregion common props\n // #region iOS props\n /**\n * Specifies the minimize behavior for the tab bar.\n *\n * Available starting from iOS 26.\n *\n * The following values are currently supported:\n *\n * - `automatic` - resolves to the system default minimize behavior\n * - `never` - the tab bar does not minimize\n * - `onScrollDown` - the tab bar minimizes when scrolling down and\n * expands when scrolling back up\n * - `onScrollUp` - the tab bar minimizes when scrolling up and expands\n * when scrolling back down\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior).\n *\n * @default automatic\n *\n * @platform iOS 26+\n */\n minimizeBehavior?: NativeTabsTabBarMinimizeBehavior;\n /**\n * The blur effect applied to the tab bar.\n *\n * @platform iOS\n */\n blurEffect?: NativeTabsBlurEffect;\n /**\n * The color of the shadow.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarappearance/shadowcolor)\n *\n * @platform iOS\n */\n shadowColor?: ColorValue;\n /**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/titlepositionadjustment)\n *\n * @platform iOS\n */\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * When set to `true`, enables the sidebarAdaptable tab bar style on iPadOS and macOS. This prop has no effect on iPhone.\n *\n * @platform iOS 18+\n */\n sidebarAdaptable?: boolean;\n // #endregion iOS props\n // #region android props\n /**\n * Disables the active indicator for the tab bar.\n *\n * @platform android\n */\n disableIndicator?: boolean;\n /**\n * The behavior when navigating back with the back button.\n *\n * @platform android\n */\n backBehavior?: 'none' | 'initialRoute' | 'history';\n /**\n * The visibility mode of the tab item label.\n *\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\n labelVisibilityMode?: NativeTabsTabBarItemLabelVisibilityMode;\n /**\n * The color of the ripple effect when the tab is pressed.\n *\n * @platform android\n */\n rippleColor?: ColorValue;\n /**\n * The color of the tab indicator.\n *\n * @platform android\n * @platform web\n */\n indicatorColor?: ColorValue;\n /**\n * The color of the badge text.\n *\n * @platform android\n * @platform web\n */\n badgeTextColor?: ColorValue;\n // #endregion android props\n /**\n * Listeners for navigation events on all tabs.\n *\n * Supported events:\n * - `tabPress` - called when a tab is pressed\n * - `focus` - called when the screen comes into focus\n * - `blur` - called when the screen loses focus\n *\n * @example\n * ```tsx\n * {\n * console.log('Any tab pressed');\n * },\n * }}\n * >\n * ...\n * \n * ```\n */\n screenListeners?:\n | ScreenListeners, NativeTabNavigationEventMap>\n | ((prop: {\n route: RouteProp;\n }) => ScreenListeners, NativeTabNavigationEventMap>);\n /**\n * Props passed to the underlying native tab host implementation in `react-native-screens`.\n * Use this to configure props that are not directly exposed by Expo Router.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform ios\n */\n unstable_nativeProps?: NativeTabsHostNativeProps;\n}\n\nexport interface InternalNativeTabsProps extends NativeTabsProps {\n nonTriggerChildren?: React.ReactNode;\n}\nexport interface OnTabChangeEventPayload {\n /**\n * The route key of the tab the native side has just selected.\n */\n selectedKey: string;\n /**\n * The provenance value reported by the native side for this selection.\n *\n * The navigator echoes this back via `navStateRequest.baseProvenance` on\n * subsequent JS-driven updates so the native side can distinguish stale\n * updates from fresh ones. See `TabsHostNavStateRequest` in\n * `react-native-screens` for the full contract.\n */\n provenance: number;\n // TODO(@ubax): consider renaming this field\n isNativeAction: boolean;\n}\n\nexport interface NativeTabsViewProps\n extends Omit<\n InternalNativeTabsProps,\n | 'labelStyle'\n | 'iconColor'\n | 'backgroundColor'\n | 'badgeBackgroundColor'\n | 'blurEffect'\n | 'indicatorColor'\n | 'badgeTextColor'\n > {\n focusedIndex: number;\n /**\n * Provenance counter associated with the currently rendered `focusedIndex`.\n */\n provenance: number;\n tabs: NativeTabsViewTabItem[];\n onTabChange: (event: OnTabChangeEventPayload) => void;\n}\n\nexport interface NativeTabsViewTabItem {\n options: NativeTabOptions;\n routeKey: string;\n name: string;\n contentRenderer: () => React.ReactNode;\n}\n\nexport const SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES = [\n 'auto',\n 'selected',\n 'labeled',\n 'unlabeled',\n] as const;\n\n/**\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\nexport type NativeTabsTabBarItemLabelVisibilityMode =\n (typeof SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES)[number];\n\nexport const SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS = [\n 'automatic',\n 'never',\n 'onScrollDown',\n 'onScrollUp',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)\n *\n * @platform iOS 26\n */\nexport type NativeTabsTabBarMinimizeBehavior =\n (typeof SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS)[number];\n\nexport interface NativeTabTriggerProps {\n /**\n * The name of the route.\n *\n * This is required when used inside a Layout component.\n *\n * When used in a route it has no effect.\n */\n name?: string;\n /**\n * If true, the tab will be hidden from the tab bar.\n *\n * > **Note**: Marking a tab as `hidden` means it cannot be navigated to in any way.\n *\n * > **Note**: Dynamically hiding tabs will remount the navigator and the state will be reset.\n */\n hidden?: boolean;\n /**\n * Props passed to the underlying native tab screen implementation.\n * Use this to configure props not directly exposed by Expo Router, but available in `react-native-screens`.\n *\n * > **Note**: This will override any other props set by Expo Router and may lead to unexpected behavior.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform iOS\n */\n unstable_nativeProps?: NativeScreenProps;\n /**\n * If true, the tab will not pop stack to the root when selected again.\n *\n * @default false\n * @platform iOS\n */\n disablePopToTop?: boolean;\n /**\n * If true, the tab will not scroll to the top when selected again.\n * @default false\n *\n * @platform iOS\n */\n disableScrollToTop?: boolean;\n /**\n * If `true`, the tab is shown but cannot be selected by tapping it in the\n * tab bar.\n *\n * > **Note:** This only suppresses the native tap interaction. JavaScript\n * > navigation such as `router.push()` or `` still navigates to\n * > the tab. Use this for tabs that should appear visible but be temporarily inert,\n * > and gate navigation in your own code if you need to fully prevent access.\n *\n * Unlike `hidden`, the tab remains visible in the tab bar.\n *\n * @default false\n *\n * @platform android\n * @platform ios\n */\n disabled?: boolean;\n /**\n * The children of the trigger.\n *\n * Use `Icon`, `Label`, and `Badge` components to customize the tab.\n */\n children?: React.ReactNode;\n /**\n * System-provided tab bar item with predefined icon and title\n *\n * Uses Apple's built-in tab bar items (e.g., bookmarks, contacts, downloads) with\n * standard iOS styling and localized titles. Custom `icon` or `selectedIcon`\n * properties will override the system icon, but the system-defined title cannot\n * be customized.\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem).\n * @platform ios\n */\n role?: NativeTabsTabBarItemRole;\n /**\n * The default behavior differs between iOS and Android.\n *\n * On **Android**, the content of a native tabs screen is automatically wrapped in a `SafeAreaView`,\n * and the **bottom** inset is applied. Other insets must be handled manually.\n *\n * On **iOS**, the first scroll view nested inside a native tabs screen has\n * [automatic content inset adjustment](https://reactnative.dev/docs/scrollview#contentinsetadjustmentbehavior-ios) enabled\n *\n * When this property is set to `true`, automatic content inset adjustment is disabled for the screen\n * and must be managed manually. You can use `SafeAreaView` from `react-native-screens/experimental`\n * to handle safe area insets.\n *\n * @platform android\n * @platform ios\n */\n disableAutomaticContentInsets?: boolean;\n /**\n * The style applied to the content of the tab\n *\n * Note: Only certain style properties are supported.\n */\n contentStyle?: NativeTabOptions['contentStyle'];\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * When set on a trigger, it takes precedence over the value set on `NativeTabs`.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * Listeners for navigation events on this tab.\n *\n * Supported events:\n * - `tabPress` - called when this tab is pressed\n * - `focus` - called when this screen comes into focus\n * - `blur` - called when this screen loses focus\n *\n * @example\n * ```tsx\n * {\n * console.log('Home tab pressed');\n * },\n * }}\n * />\n * ```\n */\n listeners?:\n | ScreenListeners\n | ((prop: {\n route: RouteProp;\n }) => ScreenListeners);\n}\n\nconst SUPPORTED_TAB_BAR_ITEM_ROLES = [\n 'bookmarks',\n 'contacts',\n 'downloads',\n 'favorites',\n 'featured',\n 'history',\n 'more',\n 'mostRecent',\n 'mostViewed',\n 'recents',\n 'search',\n 'topRated',\n] as const;\n\nexport type NativeTabsTabBarItemRole = (typeof SUPPORTED_TAB_BAR_ITEM_ROLES)[number];\n"]} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":";;;AAoIa,QAAA,sBAAsB,GAAG;IACpC,MAAM;IACN,eAAe;IACf,YAAY;IACZ,OAAO;IACP,MAAM;IACN,SAAS;IACT,WAAW;IACX,yBAAyB;IACzB,oBAAoB;IACpB,gBAAgB;IAChB,qBAAqB;IACrB,sBAAsB;IACtB,8BAA8B;IAC9B,yBAAyB;IACzB,qBAAqB;IACrB,0BAA0B;IAC1B,2BAA2B;IAC3B,6BAA6B;IAC7B,wBAAwB;IACxB,oBAAoB;IACpB,yBAAyB;IACzB,0BAA0B;CAClB,CAAC;AA8OE,QAAA,6CAA6C,GAAG;IAC3D,MAAM;IACN,UAAU;IACV,SAAS;IACT,WAAW;CACH,CAAC;AAUE,QAAA,oCAAoC,GAAG;IAClD,WAAW;IACX,OAAO;IACP,cAAc;IACd,YAAY;CACJ,CAAC;AAkJX,MAAM,4BAA4B,GAAG;IACnC,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,SAAS;IACT,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,UAAU;CACF,CAAC","sourcesContent":["import type { PropsWithChildren } from 'react';\nimport type {\n ColorValue,\n ImageSourcePropType,\n StyleProp,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport type { TabsHostProps, TabsScreenProps } from 'react-native-screens';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type {\n DefaultRouterOptions,\n EventMapBase,\n NavigationState,\n ParamListBase,\n RouteProp,\n ScreenListeners,\n TabNavigationState,\n} from '../react-navigation/native';\n\n/**\n * Event map for `NativeTabs` navigation events.\n * Only `tabPress` is currently supported.\n */\nexport type NativeTabNavigationEventMap = {\n tabPress: { data: { __internalTabsType: 'native' }; canPreventDefault: false };\n};\n\nexport type NativeScreenProps = Partial>;\n\n/**\n * Props passed to the underlying tab host implementation in `react-native-screens`.\n */\nexport type NativeTabsHostNativeProps = Partial<\n Omit\n>;\n\nexport interface NativeTabOptions extends DefaultRouterOptions {\n icon?: SymbolOrImageSource;\n selectedIcon?: SymbolOrImageSource;\n title?: string;\n badgeValue?: string;\n selectedLabelStyle?: NativeTabsLabelStyle;\n labelStyle?: NativeTabsLabelStyle;\n role?: NativeTabsTabBarItemRole;\n selectedIconColor?: ColorValue;\n selectedBadgeBackgroundColor?: ColorValue;\n badgeBackgroundColor?: ColorValue;\n badgeTextColor?: ColorValue;\n backgroundColor?: ColorValue;\n blurEffect?: NativeTabsBlurEffect;\n shadowColor?: ColorValue;\n iconColor?: ColorValue;\n disableTransparentOnScrollEdge?: boolean;\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n selectedTitlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n indicatorColor?: ColorValue;\n hidden?: boolean;\n disabled?: boolean;\n specialEffects?: TabsScreenProps['specialEffects'];\n nativeProps?: NativeScreenProps;\n disableAutomaticContentInsets?: boolean;\n contentStyle?: Pick<\n ViewStyle,\n | 'backgroundColor'\n | 'experimental_backgroundImage'\n | 'padding'\n | 'paddingTop'\n | 'paddingBottom'\n | 'paddingLeft'\n | 'paddingRight'\n | 'paddingBlock'\n | 'paddingBlockEnd'\n | 'paddingBlockStart'\n | 'paddingInline'\n | 'paddingInlineEnd'\n | 'paddingInlineStart'\n | 'paddingEnd'\n | 'paddingHorizontal'\n | 'paddingVertical'\n | 'paddingStart'\n | 'alignContent'\n | 'alignItems'\n | 'justifyContent'\n | 'flexDirection'\n | 'gap'\n >;\n}\n\nexport type SymbolOrImageSource =\n | {\n /**\n * The name of the SF Symbol to use as an icon.\n * @platform iOS\n */\n sf?: SFSymbol;\n /**\n * The name of the iOS asset catalog image to use as an icon.\n * @platform iOS\n */\n xcasset?: string;\n /**\n * The name of the drawable resource to use as an icon.\n * @platform android\n */\n drawable?: string;\n }\n | {\n /**\n * The image source to use as an icon.\n */\n src?: ImageSourcePropType | Promise;\n /**\n * Controls how the icon is rendered on iOS.\n * @platform ios\n * @default 'template'\n */\n renderingMode?: 'template' | 'original';\n };\n\nexport type NativeTabsLabelStyle = Pick<\n TextStyle,\n 'fontFamily' | 'fontSize' | 'fontStyle' | 'fontWeight' | 'color'\n>;\n\nexport const SUPPORTED_BLUR_EFFECTS = [\n 'none',\n 'systemDefault',\n 'extraLight',\n 'light',\n 'dark',\n 'regular',\n 'prominent',\n 'systemUltraThinMaterial',\n 'systemThinMaterial',\n 'systemMaterial',\n 'systemThickMaterial',\n 'systemChromeMaterial',\n 'systemUltraThinMaterialLight',\n 'systemThinMaterialLight',\n 'systemMaterialLight',\n 'systemThickMaterialLight',\n 'systemChromeMaterialLight',\n 'systemUltraThinMaterialDark',\n 'systemThinMaterialDark',\n 'systemMaterialDark',\n 'systemThickMaterialDark',\n 'systemChromeMaterialDark',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiblureffect/style)\n */\nexport type NativeTabsBlurEffect = (typeof SUPPORTED_BLUR_EFFECTS)[number];\n\nexport interface NativeTabsProps extends PropsWithChildren {\n // #region common props\n /**\n * The style of the every tab label in the tab bar.\n */\n labelStyle?:\n | StyleProp\n | {\n default?: StyleProp;\n selected?: StyleProp;\n };\n /**\n * The color of every tab icon in the tab bar.\n */\n iconColor?: ColorValue | { default?: ColorValue; selected?: ColorValue };\n /**\n * The tint color of the tab icon.\n *\n * Can be overridden by icon color and label color for each tab individually.\n */\n tintColor?: ColorValue;\n /**\n * The background color of the tab bar.\n */\n backgroundColor?: ColorValue;\n /**\n * The background color of every badge in the tab bar.\n */\n badgeBackgroundColor?: ColorValue;\n /**\n * When set to `true`, hides the tab bar.\n *\n * @default false\n */\n hidden?: boolean;\n // #endregion common props\n // #region iOS props\n /**\n * Specifies the minimize behavior for the tab bar.\n *\n * Available starting from iOS 26.\n *\n * The following values are currently supported:\n *\n * - `automatic` - resolves to the system default minimize behavior\n * - `never` - the tab bar does not minimize\n * - `onScrollDown` - the tab bar minimizes when scrolling down and\n * expands when scrolling back up\n * - `onScrollUp` - the tab bar minimizes when scrolling up and expands\n * when scrolling back down\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior).\n *\n * @default automatic\n *\n * @platform iOS 26+\n */\n minimizeBehavior?: NativeTabsTabBarMinimizeBehavior;\n /**\n * The blur effect applied to the tab bar.\n *\n * @platform iOS\n */\n blurEffect?: NativeTabsBlurEffect;\n /**\n * The color of the shadow.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarappearance/shadowcolor)\n *\n * @platform iOS\n */\n shadowColor?: ColorValue;\n /**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/titlepositionadjustment)\n *\n * @platform iOS\n */\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * When set to `true`, enables the sidebarAdaptable tab bar style on iPadOS and macOS. This prop has no effect on iPhone.\n *\n * @platform iOS 18+\n */\n sidebarAdaptable?: boolean;\n // #endregion iOS props\n // #region android props\n /**\n * Disables the active indicator for the tab bar.\n *\n * @platform android\n */\n disableIndicator?: boolean;\n /**\n * The behavior when navigating back with the back button.\n *\n * @platform android\n */\n backBehavior?: 'none' | 'initialRoute' | 'history';\n /**\n * The visibility mode of the tab item label.\n *\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\n labelVisibilityMode?: NativeTabsTabBarItemLabelVisibilityMode;\n /**\n * The color of the ripple effect when the tab is pressed.\n *\n * @platform android\n */\n rippleColor?: ColorValue;\n /**\n * The color of the tab indicator.\n *\n * @platform android\n * @platform web\n */\n indicatorColor?: ColorValue;\n /**\n * The color of the badge text.\n *\n * @platform android\n * @platform web\n */\n badgeTextColor?: ColorValue;\n /**\n * When `true`, the tab bar lifts above the keyboard (input method editor, or IME) instead of being overlaid by it. By default, the keyboard overlays the tab bar.\n *\n * Requires `windowSoftInputMode=\"adjustResize\"`. Has no effect on Android API levels earlier than 30 (Android 11).\n *\n * @default false\n * @platform android\n */\n tabBarRespectsIMEInsets?: boolean;\n // #endregion android props\n /**\n * Listeners for navigation events on all tabs.\n *\n * Supported events:\n * - `tabPress` - called when a tab is pressed\n * - `focus` - called when the screen comes into focus\n * - `blur` - called when the screen loses focus\n *\n * @example\n * ```tsx\n * {\n * console.log('Any tab pressed');\n * },\n * }}\n * >\n * ...\n * \n * ```\n */\n screenListeners?:\n | ScreenListeners, NativeTabNavigationEventMap>\n | ((prop: {\n route: RouteProp;\n }) => ScreenListeners, NativeTabNavigationEventMap>);\n /**\n * Props passed to the underlying native tab host implementation in `react-native-screens`.\n * Use this to configure props that are not directly exposed by Expo Router.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform ios\n */\n unstable_nativeProps?: NativeTabsHostNativeProps;\n}\n\nexport interface InternalNativeTabsProps extends NativeTabsProps {\n nonTriggerChildren?: React.ReactNode;\n}\nexport interface OnTabChangeEventPayload {\n /**\n * The route key of the tab the native side has just selected.\n */\n selectedKey: string;\n /**\n * The provenance value reported by the native side for this selection.\n *\n * The navigator echoes this back via `navStateRequest.baseProvenance` on\n * subsequent JS-driven updates so the native side can distinguish stale\n * updates from fresh ones. See `TabsHostNavStateRequest` in\n * `react-native-screens` for the full contract.\n */\n provenance: number;\n // TODO(@ubax): consider renaming this field\n isNativeAction: boolean;\n}\n\nexport interface NativeTabsViewProps\n extends Omit<\n InternalNativeTabsProps,\n | 'labelStyle'\n | 'iconColor'\n | 'backgroundColor'\n | 'badgeBackgroundColor'\n | 'blurEffect'\n | 'indicatorColor'\n | 'badgeTextColor'\n > {\n focusedIndex: number;\n /**\n * Provenance counter associated with the currently rendered `focusedIndex`.\n */\n provenance: number;\n tabs: NativeTabsViewTabItem[];\n onTabChange: (event: OnTabChangeEventPayload) => void;\n}\n\nexport interface NativeTabsViewTabItem {\n options: NativeTabOptions;\n routeKey: string;\n name: string;\n contentRenderer: () => React.ReactNode;\n}\n\nexport const SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES = [\n 'auto',\n 'selected',\n 'labeled',\n 'unlabeled',\n] as const;\n\n/**\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\nexport type NativeTabsTabBarItemLabelVisibilityMode =\n (typeof SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES)[number];\n\nexport const SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS = [\n 'automatic',\n 'never',\n 'onScrollDown',\n 'onScrollUp',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)\n *\n * @platform iOS 26\n */\nexport type NativeTabsTabBarMinimizeBehavior =\n (typeof SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS)[number];\n\nexport interface NativeTabTriggerProps {\n /**\n * The name of the route.\n *\n * This is required when used inside a Layout component.\n *\n * When used in a route it has no effect.\n */\n name?: string;\n /**\n * If true, the tab will be hidden from the tab bar.\n *\n * > **Note**: Marking a tab as `hidden` means it cannot be navigated to in any way.\n *\n * > **Note**: Dynamically hiding tabs will remount the navigator and the state will be reset.\n */\n hidden?: boolean;\n /**\n * Props passed to the underlying native tab screen implementation.\n * Use this to configure props not directly exposed by Expo Router, but available in `react-native-screens`.\n *\n * > **Note**: This will override any other props set by Expo Router and may lead to unexpected behavior.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform iOS\n */\n unstable_nativeProps?: NativeScreenProps;\n /**\n * If true, the tab will not pop stack to the root when selected again.\n *\n * @default false\n * @platform iOS\n */\n disablePopToTop?: boolean;\n /**\n * If true, the tab will not scroll to the top when selected again.\n * @default false\n *\n * @platform iOS\n */\n disableScrollToTop?: boolean;\n /**\n * If `true`, the tab is shown but cannot be selected by tapping it in the\n * tab bar.\n *\n * > **Note:** This only suppresses the native tap interaction. JavaScript\n * > navigation such as `router.push()` or `` still navigates to\n * > the tab. Use this for tabs that should appear visible but be temporarily inert,\n * > and gate navigation in your own code if you need to fully prevent access.\n *\n * Unlike `hidden`, the tab remains visible in the tab bar.\n *\n * @default false\n *\n * @platform android\n * @platform ios\n */\n disabled?: boolean;\n /**\n * The children of the trigger.\n *\n * Use `Icon`, `Label`, and `Badge` components to customize the tab.\n */\n children?: React.ReactNode;\n /**\n * System-provided tab bar item with predefined icon and title\n *\n * Uses Apple's built-in tab bar items (e.g., bookmarks, contacts, downloads) with\n * standard iOS styling and localized titles. Custom `icon` or `selectedIcon`\n * properties will override the system icon, but the system-defined title cannot\n * be customized.\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem).\n * @platform ios\n */\n role?: NativeTabsTabBarItemRole;\n /**\n * The default behavior differs between iOS and Android.\n *\n * On **Android**, the content of a native tabs screen is automatically wrapped in a `SafeAreaView`,\n * and the **bottom** inset is applied. Other insets must be handled manually.\n *\n * On **iOS**, the first scroll view nested inside a native tabs screen has\n * [automatic content inset adjustment](https://reactnative.dev/docs/scrollview#contentinsetadjustmentbehavior-ios) enabled\n *\n * When this property is set to `true`, automatic content inset adjustment is disabled for the screen\n * and must be managed manually. You can use `SafeAreaView` from `react-native-screens/experimental`\n * to handle safe area insets.\n *\n * @platform android\n * @platform ios\n */\n disableAutomaticContentInsets?: boolean;\n /**\n * The style applied to the content of the tab\n *\n * Note: Only certain style properties are supported.\n */\n contentStyle?: NativeTabOptions['contentStyle'];\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * When set on a trigger, it takes precedence over the value set on `NativeTabs`.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * Listeners for navigation events on this tab.\n *\n * Supported events:\n * - `tabPress` - called when this tab is pressed\n * - `focus` - called when this screen comes into focus\n * - `blur` - called when this screen loses focus\n *\n * @example\n * ```tsx\n * {\n * console.log('Home tab pressed');\n * },\n * }}\n * />\n * ```\n */\n listeners?:\n | ScreenListeners\n | ((prop: {\n route: RouteProp;\n }) => ScreenListeners);\n}\n\nconst SUPPORTED_TAB_BAR_ITEM_ROLES = [\n 'bookmarks',\n 'contacts',\n 'downloads',\n 'favorites',\n 'featured',\n 'history',\n 'more',\n 'mostRecent',\n 'mostViewed',\n 'recents',\n 'search',\n 'topRated',\n] as const;\n\nexport type NativeTabsTabBarItemRole = (typeof SUPPORTED_TAB_BAR_ITEM_ROLES)[number];\n"]} \ No newline at end of file diff --git a/packages/expo-router/src/native-tabs/NativeTabsView.android.tsx b/packages/expo-router/src/native-tabs/NativeTabsView.android.tsx index 9389353dea4763..b5052f3cf3f88b 100644 --- a/packages/expo-router/src/native-tabs/NativeTabsView.android.tsx +++ b/packages/expo-router/src/native-tabs/NativeTabsView.android.tsx @@ -14,7 +14,7 @@ import { SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES, type NativeTabsViewProps import { convertOptionsIconToScreensPropsIcon } from './utils/optionsIconConverter'; export function NativeTabsView(props: NativeTabsViewProps) { - const { disableIndicator, tabs, unstable_nativeProps } = props; + const { disableIndicator, tabBarRespectsIMEInsets, tabs, unstable_nativeProps } = props; const { android: rawAndroidProps, ios: _ignoredRawIosProps, @@ -61,8 +61,10 @@ export function NativeTabsView(props: NativeTabsViewProps) { return ( { const TabsHost = Tabs.Host as jest.MockedFunction; +it.each([ + { value: undefined, expected: false }, + { value: true, expected: true }, + { value: false, expected: false }, +] as { + value: NativeTabsProps['tabBarRespectsIMEInsets']; + expected: NonNullable['tabBarRespectsIMEInsets']; +}[])('forwards tabBarRespectsIMEInsets=$value to Tabs.Host', ({ value, expected }) => { + renderRouter({ + _layout: () => ( + + + + ), + index: () => , + }); + + expect(screen.getByTestId('index')).toBeVisible(); + expect(TabsHost).toHaveBeenCalledTimes(1); + expect(TabsHost.mock.calls[0][0].android?.tabBarRespectsIMEInsets).toBe(expected); +}); + describe('unstable_nativeProps', () => { it('forwards top-level raw props to Tabs.Host', () => { renderRouter({ diff --git a/packages/expo-router/src/native-tabs/types.ts b/packages/expo-router/src/native-tabs/types.ts index c44606cbdb3df6..1bebe9c21f9a37 100644 --- a/packages/expo-router/src/native-tabs/types.ts +++ b/packages/expo-router/src/native-tabs/types.ts @@ -295,6 +295,15 @@ export interface NativeTabsProps extends PropsWithChildren { * @platform web */ badgeTextColor?: ColorValue; + /** + * When `true`, the tab bar lifts above the keyboard (input method editor, or IME) instead of being overlaid by it. By default, the keyboard overlays the tab bar. + * + * Requires `windowSoftInputMode="adjustResize"`. Has no effect on Android API levels earlier than 30 (Android 11). + * + * @default false + * @platform android + */ + tabBarRespectsIMEInsets?: boolean; // #endregion android props /** * Listeners for navigation events on all tabs. From be3274141f4e45729cdaf7034f7a33aee8f8dec8 Mon Sep 17 00:00:00 2001 From: Ray <41517811+rayabelcode@users.noreply.github.com> Date: Wed, 13 May 2026 12:56:51 -0400 Subject: [PATCH 06/21] [screen-orientation][iOS] fix infinite recursion in supportedInterfaceOrientations (#45733) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Why Fixes #45479. `ScreenOrientationViewController.supportedInterfaceOrientations` infinite-recurses and crashes release builds with `EXC_BAD_ACCESS` (stack overflow) whenever `react-native-screens` per-screen orientation is set on a screen below the root VC. The regression was introduced by #44181 and ships in 55.0.14, 55.0.15, and current `main`. In production (without `expo-dev-client`), `vcWithRNScreenOrientation()` returns `self` because `RNSScreenWindowTraits.shouldAskScreensForScreenOrientation(in: self)` is true for the root VC. The override then evaluates `vc.supportedInterfaceOrientations` on that same instance, which dynamic-dispatches back into this override and never terminates. The previous implementation called `super.supportedInterfaceOrientations` in this branch, which is why 55.0.13 did not crash. The crash fires once a `` mounts. The orientation value does not matter; the presence of the trait on the active screen is what makes `shouldAskScreensForScreenOrientation` return true. `expo-dev-client` builds do not reproduce because `DevLauncherViewController` sits between the window and `ScreenOrientationViewController`, so `shouldAskScreensForScreenOrientation(in: self)` returns false for the root VC and the child-search branch from #44181 takes over (returning a non-self VC, which does not recurse). This is why the regression was not caught when #44181 was tested. # How When `vcWithRNScreenOrientation()` returns `self`, fall through to `super.supportedInterfaceOrientations` (UIKit's default resolution, matching 55.0.13 behavior). When it returns a child VC (the `expo-dev-client` case that #44181 was written for), keep the existing call into the child's getter — that path was never recursive. ```swift override var supportedInterfaceOrientations: UIInterfaceOrientationMask { if let vc = vcWithRNScreenOrientation() { if vc === self { return super.supportedInterfaceOrientations } return vc.supportedInterfaceOrientations } let mask = screenOrientationRegistry.requiredOrientationMask() return !mask.isEmpty ? mask : defaultOrientationMask } ``` Three lines of behavioral change; the rest of the diff is a comment update describing the new branch. Helper `vcWithRNScreenOrientation()` is unchanged. # Test Plan Reproduction from #45479: https://github.com/CacaoRick/expo-screen-orientation-55014-repro 1. `git clone https://github.com/CacaoRick/expo-screen-orientation-55014-repro && cd expo-screen-orientation-55014-repro` 2. Point `expo-screen-orientation` at this branch (or `yarn link` a local build). 3. `yarn install && npx expo prebuild --clean && npx expo run:ios --configuration Release -d` Expected: app launches without crashing; the orientation-locked `` mounts and applies its orientation. Also verified that the `expo-dev-client` path from #44181 still works: when an intermediate VC blocks the single-level traversal, `vcWithRNScreenOrientation()` returns a child VC (not `self`), the new guard is skipped, and the existing call into `child.supportedInterfaceOrientations` runs as before. # Notes - Regression was introduced when #44181 replaced `return super.supportedInterfaceOrientations` with `return vc.supportedInterfaceOrientations`. Restoring `super` for the `vc === self` branch is the minimal fix. - Affects 55.0.14, 55.0.15, and `main` (any release that shipped #44181). Maintainers may want to backport to the 55.x line. - No CHANGELOG entry included; happy to add one in the requested format if maintainers prefer. # Checklist - [x] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - Skipped pending maintainer guidance on which version section the entry belongs in (55.x backport vs. unpublished 56.x). Will add on request. - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --------- Co-authored-by: Vojtech Novak --- packages/expo-screen-orientation/CHANGELOG.md | 3 +++ .../ios/ScreenOrientationViewController.swift | 10 +++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/expo-screen-orientation/CHANGELOG.md b/packages/expo-screen-orientation/CHANGELOG.md index 45393f65dfdbe7..96de4236347f0e 100644 --- a/packages/expo-screen-orientation/CHANGELOG.md +++ b/packages/expo-screen-orientation/CHANGELOG.md @@ -8,6 +8,9 @@ ### 🐛 Bug fixes +- [iOS] Fixed `EXC_BAD_ACCESS` crash from recursive `supportedInterfaceOrientations` when `react-native-screens` per-screen orientation is set. + ([#45733](https://github.com/expo/expo/pull/45733) by [@rayabelcode](https://github.com/rayabelcode)) + ### 💡 Others ## 56.0.3 — 2026-05-06 diff --git a/packages/expo-screen-orientation/ios/ScreenOrientationViewController.swift b/packages/expo-screen-orientation/ios/ScreenOrientationViewController.swift index 5342bfdebce59e..52b60e428d903c 100644 --- a/packages/expo-screen-orientation/ios/ScreenOrientationViewController.swift +++ b/packages/expo-screen-orientation/ios/ScreenOrientationViewController.swift @@ -65,9 +65,13 @@ class ScreenOrientationViewController: UIViewController { override var supportedInterfaceOrientations: UIInterfaceOrientationMask { if let vc = vcWithRNScreenOrientation() { - // react-native-screens has per-screen orientation set. Return that VC's - // supportedInterfaceOrientations — which RNScreens has swizzled to resolve - // the active screen's orientation mask. + // react-native-screens has per-screen orientation set. Defer to that VC's + // supportedInterfaceOrientations so RNScreens' swizzled implementation can + // resolve the active screen's orientation mask. When the matching VC is + // self, call super to avoid recursing into this override. + if vc === self { + return super.supportedInterfaceOrientations + } return vc.supportedInterfaceOrientations } From 71fc13996d5504bfb930f910e0b580e6abb34d92 Mon Sep 17 00:00:00 2001 From: HubertBer <115428831+HubertBer@users.noreply.github.com> Date: Wed, 13 May 2026 19:21:45 +0200 Subject: [PATCH 07/21] [docs] add a check for `Set` and `Map` to not create links to them (#45737) --- docs/components/plugins/api/APISectionUtils.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/components/plugins/api/APISectionUtils.tsx b/docs/components/plugins/api/APISectionUtils.tsx index 461d3fa467e8b7..016bfee5b1baa3 100644 --- a/docs/components/plugins/api/APISectionUtils.tsx +++ b/docs/components/plugins/api/APISectionUtils.tsx @@ -185,11 +185,12 @@ export const resolveTypeName = ( tail, } = typeDefinition; + const builtinTypes = new Set(['Record', 'React.ComponentProps', 'Set', 'Map']); try { if (name) { if (type === 'reference') { if (typeArguments) { - if (name === 'Record' || name === 'React.ComponentProps') { + if (builtinTypes.has(name)) { return ( <> {name} From 9b41822dadb4f2879a4ecf0ec39b871b89219b29 Mon Sep 17 00:00:00 2001 From: Tomasz Sapeta Date: Wed, 13 May 2026 19:25:18 +0200 Subject: [PATCH 08/21] [JSI] Hash JSI headers for cache invalidation (#45745) --- packages/expo-modules-jsi/CHANGELOG.md | 1 + packages/expo-modules-jsi/apple/scripts/build-xcframework.sh | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/packages/expo-modules-jsi/CHANGELOG.md b/packages/expo-modules-jsi/CHANGELOG.md index 8a05c4eeeeec49..86ad6271f9accf 100644 --- a/packages/expo-modules-jsi/CHANGELOG.md +++ b/packages/expo-modules-jsi/CHANGELOG.md @@ -8,6 +8,7 @@ ### 🐛 Bug fixes +- [iOS] Fixed xcframework build cache not invalidating when React-jsi headers change. ([#45735](https://github.com/expo/expo/pull/45735) by [@tsapeta](https://github.com/tsapeta)) - [iOS] Added support for `facebook::jsi::IRuntime` so the package builds against React Native 0.86+, while staying compatible with 0.85 and react-native-tvos. ([#45728](https://github.com/expo/expo/pull/45728) by [@zoontek](https://github.com/zoontek)) ### 💡 Others diff --git a/packages/expo-modules-jsi/apple/scripts/build-xcframework.sh b/packages/expo-modules-jsi/apple/scripts/build-xcframework.sh index 18adee24feb687..e6ed5ca91ae124 100755 --- a/packages/expo-modules-jsi/apple/scripts/build-xcframework.sh +++ b/packages/expo-modules-jsi/apple/scripts/build-xcframework.sh @@ -74,6 +74,10 @@ SOURCE_FILES=( "${PACKAGE_DIR}/scripts/build-xcframework.sh" "${PACKAGE_DIR}/scripts/create-stub-xcframework.sh" "${PACKAGE_DIR}/scripts/xcframework-helpers.sh" + # JSI headers we compile against. `cat` follows the symlinks CocoaPods + # installs into Pods/Headers/Public so the real header contents get hashed. + "${PODS_ROOT}/Headers/Public/React-jsi/jsi/jsi.h" + "${PODS_ROOT}/Headers/Public/React-jsi/jsi/jsi-inl.h" ) compute_hash() { From 669c3310870cbdf350206856e94054661e962d53 Mon Sep 17 00:00:00 2001 From: Gabriel Donadel Dall'Agnol Date: Wed, 13 May 2026 14:36:19 -0300 Subject: [PATCH 09/21] [updates][android] Fix app restart when not using ReactApplication (#45660) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Why `Updates.reloadAsync()` would not work on Android unless the `Application` class implemented the deprecated `ReactApplication` class, whici is the case for a lot of expo-brownfield users, where the host activity belongs to the existing native app and the `Application` class is whatever the consumer team already had (Compose, vanilla `Application`, etc.). # How By using the `ReactNativeHostHandler.onDidCreateReactHost(context, reactNativeHost)` callback from modules core, we can get a reference to `reactNativeHost` and restart the app directly, this way skipping the ReactApplication cast in apps that don't implement it. # Test Plan Manual test on Android using the existing brownfield fixtures in this monorepo: 1. **Republish the brownfield AAR** from `apps/minimal-tester`: ```bash cd apps/minimal-tester npx expo-brownfield build:android --repository MavenLocal --release ``` 2. **Build & launch the brownfield consumer** against the new AAR: ```bash cd apps/brownfield-tester/isolated/android ./gradlew installRelease adb shell am start -n dev.expo.brownfieldintegratedtester/.MainActivity adb logcat | grep -E "expo.modules.updates|RelaunchProcedure|RecreateReactContext" ``` In the running app, exercise the fetch+reload flow (publish a no-op update to the configured channel `u.expo.dev/ce96dd7b-…` first, then tap the *Fetch update* + *Reload* buttons). Confirm: - The string `"Could not reload application. Ensure you have passed the correct instance of ReactApplication"` does **not** appear in logcat. - Logs show `Restart from RelaunchProcedure` (or `RecreateReactContextProcedure`). - The brownfield activity reloads with the new JS bundle (visible UI / state reset). 4. **Non-brownfield regression**: build any standard Expo app, call `Updates.reloadAsync()`, and confirm reload still works. The helper takes the legacy `ReactApplication`-cast branch first, so behavior on existing apps is unchanged. Automated tests for the procedures were considered but not added. I'll follow up with a dedicated test PR later for iOS and Android. # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --------- Co-authored-by: Kudo Chien Co-authored-by: Kudo Chien --- packages/expo-updates/CHANGELOG.md | 2 ++ .../updates/DisabledUpdatesController.kt | 2 ++ .../updates/EnabledUpdatesController.kt | 2 ++ .../modules/updates/IUpdatesController.kt | 7 +++++ .../updates/UpdatesDevLauncherController.kt | 2 ++ .../expo/modules/updates/UpdatesPackage.kt | 5 ++++ .../RecreateReactContextProcedure.kt | 5 ++-- .../updates/procedures/RelaunchProcedure.kt | 5 ++-- .../procedures/RestartReactAppExtensions.kt | 27 ++++++++++++++----- 9 files changed, 44 insertions(+), 13 deletions(-) diff --git a/packages/expo-updates/CHANGELOG.md b/packages/expo-updates/CHANGELOG.md index dac8899da23000..91d7763f4cd975 100644 --- a/packages/expo-updates/CHANGELOG.md +++ b/packages/expo-updates/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- [Android] Fix app restart when not using `ReactApplication` ([#45660](https://github.com/expo/expo/pull/45660) by [@gabrieldonadel](https://github.com/gabrieldonadel)) + ### 💡 Others ## 56.0.10 — 2026-05-13 diff --git a/packages/expo-updates/android/src/main/java/expo/modules/updates/DisabledUpdatesController.kt b/packages/expo-updates/android/src/main/java/expo/modules/updates/DisabledUpdatesController.kt index 89aec5735a2ce8..18b334293e183b 100644 --- a/packages/expo-updates/android/src/main/java/expo/modules/updates/DisabledUpdatesController.kt +++ b/packages/expo-updates/android/src/main/java/expo/modules/updates/DisabledUpdatesController.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Context import android.net.Uri import android.os.Bundle +import com.facebook.react.ReactHost import com.facebook.react.bridge.ReactContext import com.facebook.react.devsupport.interfaces.DevSupportManager import expo.modules.kotlin.exception.CodedException @@ -88,6 +89,7 @@ class DisabledUpdatesController( get() = launcher?.bundleAssetName override val reloadScreenManager: ReloadScreenManager? get() = null + override var reactHost: WeakReference = WeakReference(null) override fun onEventListenerStartObserving() { stateMachine.sendContextToJS() diff --git a/packages/expo-updates/android/src/main/java/expo/modules/updates/EnabledUpdatesController.kt b/packages/expo-updates/android/src/main/java/expo/modules/updates/EnabledUpdatesController.kt index b628d013223fcc..edc57af3f622c2 100644 --- a/packages/expo-updates/android/src/main/java/expo/modules/updates/EnabledUpdatesController.kt +++ b/packages/expo-updates/android/src/main/java/expo/modules/updates/EnabledUpdatesController.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Context import android.net.Uri import android.os.Bundle +import com.facebook.react.ReactHost import com.facebook.react.bridge.ReactContext import com.facebook.react.devsupport.interfaces.DevSupportManager import expo.modules.easclient.EASClientID @@ -82,6 +83,7 @@ class EnabledUpdatesController( private val startupFinishedDeferred = CompletableDeferred() private val startupFinishedMutex = Mutex() override val reloadScreenManager = ReloadScreenManager() + override var reactHost: WeakReference = WeakReference(null) internal val stateChangeListenerMap: MutableMap = mutableMapOf() diff --git a/packages/expo-updates/android/src/main/java/expo/modules/updates/IUpdatesController.kt b/packages/expo-updates/android/src/main/java/expo/modules/updates/IUpdatesController.kt index 6f0caa4bdef21e..b3dd4b2ae387e1 100644 --- a/packages/expo-updates/android/src/main/java/expo/modules/updates/IUpdatesController.kt +++ b/packages/expo-updates/android/src/main/java/expo/modules/updates/IUpdatesController.kt @@ -1,6 +1,7 @@ package expo.modules.updates import android.os.Bundle +import com.facebook.react.ReactHost import com.facebook.react.bridge.ReactContext import com.facebook.react.devsupport.interfaces.DevSupportManager import expo.modules.updates.db.entity.AssetEntity @@ -11,6 +12,7 @@ import expo.modules.updates.manifest.Update import expo.modules.updates.reloadscreen.ReloadScreenManager import expo.modules.updates.statemachine.UpdatesStateContext import java.io.File +import java.lang.ref.WeakReference import java.util.Date import kotlin.time.Duration import kotlin.time.DurationUnit @@ -35,6 +37,11 @@ interface IUpdatesController { */ val bundleAssetName: String? + /** + * The current [ReactHost], populated automatically by `ReactNativeHostHandler.onDidCreateReactHost`. + */ + var reactHost: WeakReference + val reloadScreenManager: ReloadScreenManager? /** diff --git a/packages/expo-updates/android/src/main/java/expo/modules/updates/UpdatesDevLauncherController.kt b/packages/expo-updates/android/src/main/java/expo/modules/updates/UpdatesDevLauncherController.kt index 20d6ec578984e8..5d67609dccd332 100644 --- a/packages/expo-updates/android/src/main/java/expo/modules/updates/UpdatesDevLauncherController.kt +++ b/packages/expo-updates/android/src/main/java/expo/modules/updates/UpdatesDevLauncherController.kt @@ -3,6 +3,7 @@ package expo.modules.updates import android.content.Context import android.net.Uri import android.os.Bundle +import com.facebook.react.ReactHost import com.facebook.react.bridge.ReactContext import com.facebook.react.devsupport.interfaces.DevSupportManager import expo.modules.easclient.EASClientID @@ -106,6 +107,7 @@ class UpdatesDevLauncherController( get() = throw Exception("IUpdatesController.bundleAssetName should not be called in dev client") override val reloadScreenManager = ReloadScreenManager() + override var reactHost: WeakReference = WeakReference(null) override fun onEventListenerStartObserving() { // no-op for UpdatesDevLauncherController diff --git a/packages/expo-updates/android/src/main/java/expo/modules/updates/UpdatesPackage.kt b/packages/expo-updates/android/src/main/java/expo/modules/updates/UpdatesPackage.kt index df17124d19bc73..c1b0c44fe99008 100644 --- a/packages/expo-updates/android/src/main/java/expo/modules/updates/UpdatesPackage.kt +++ b/packages/expo-updates/android/src/main/java/expo/modules/updates/UpdatesPackage.kt @@ -16,6 +16,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import java.lang.ref.WeakReference /** * Defines the internal and exported modules for expo-updates, as well as the auto-setup behavior in @@ -38,6 +39,10 @@ class UpdatesPackage : Package { UpdatesController.initialize(context, useDeveloperSupport) } + override fun onDidCreateReactHost(context: Context, reactNativeHost: ReactHost) { + UpdatesController.instance.reactHost = WeakReference(reactNativeHost) + } + override fun onDidCreateDevSupportManager(devSupportManager: DevSupportManager) { UpdatesController.instance.onDidCreateDevSupportManager(devSupportManager) } diff --git a/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RecreateReactContextProcedure.kt b/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RecreateReactContextProcedure.kt index 3bf9f207ae7d3c..c177c1647b011c 100644 --- a/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RecreateReactContextProcedure.kt +++ b/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RecreateReactContextProcedure.kt @@ -2,7 +2,6 @@ package expo.modules.updates.procedures import android.app.Activity import android.content.Context -import com.facebook.react.ReactApplication import expo.modules.updates.launcher.Launcher import expo.modules.updates.statemachine.UpdatesStateEvent import kotlinx.coroutines.CoroutineScope @@ -20,7 +19,7 @@ class RecreateReactContextProcedure( override val loggerTimerLabel = "timer-recreate-react-context" override suspend fun run(procedureContext: ProcedureContext) { - val reactApplication = context.applicationContext as? ReactApplication ?: run inner@{ + val reactHost = resolveReactHostForRestart(context) ?: run inner@{ callback.onFailure(Exception("Could not reload application. Ensure you have passed the correct instance of ReactApplication into UpdatesController.initialize().")) return } @@ -29,7 +28,7 @@ class RecreateReactContextProcedure( callback.onSuccess() procedureScope.launch { withContext(Dispatchers.Main) { - reactApplication.restart(weakActivity?.get(), "Restart from RecreateReactContextProcedure") + reactHost.restart(weakActivity?.get(), "Restart from RecreateReactContextProcedure") } } procedureContext.resetStateAfterRestart() diff --git a/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RelaunchProcedure.kt b/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RelaunchProcedure.kt index 89fdaab6c52163..5011fc68822e48 100644 --- a/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RelaunchProcedure.kt +++ b/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RelaunchProcedure.kt @@ -2,7 +2,6 @@ package expo.modules.updates.procedures import android.app.Activity import android.content.Context -import com.facebook.react.ReactApplication import expo.modules.updates.UpdatesConfiguration import expo.modules.updates.db.DatabaseHolder import expo.modules.updates.db.Reaper @@ -41,7 +40,7 @@ class RelaunchProcedure( override val loggerTimerLabel = "timer-relaunch" override suspend fun run(procedureContext: ProcedureContext) { - val reactApplication = context as? ReactApplication ?: run inner@{ + val reactHost = resolveReactHostForRestart(context) ?: run inner@{ callback.onFailure(Exception("Could not reload application. Ensure you have passed the correct instance of ReactApplication into UpdatesController.initialize().")) return } @@ -74,7 +73,7 @@ class RelaunchProcedure( procedureScope.launch { withContext(Dispatchers.Main) { reloadScreenManager?.show(weakActivity?.get()) - reactApplication.restart(weakActivity?.get(), "Restart from RelaunchProcedure") + reactHost.restart(weakActivity?.get(), "Restart from RelaunchProcedure") } } diff --git a/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RestartReactAppExtensions.kt b/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RestartReactAppExtensions.kt index 7392ca808be584..65c73ac7d75704 100644 --- a/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RestartReactAppExtensions.kt +++ b/packages/expo-updates/android/src/main/java/expo/modules/updates/procedures/RestartReactAppExtensions.kt @@ -1,20 +1,33 @@ package expo.modules.updates.procedures import android.app.Activity +import android.content.Context import com.facebook.react.ReactApplication +import com.facebook.react.ReactHost import com.facebook.react.common.LifecycleState +import expo.modules.updates.UpdatesController /** - * An extension for [ReactApplication] to restart the app + * Resolve a [ReactHost] to reload, in order of preference: + * 1. `(context.applicationContext as? ReactApplication)?.reactHost`, works for every app + * whose host `Application` implements [ReactApplication]. + * 2. [UpdatesController.instance].reactHost, populated by the expo-modules-core + * `onDidCreateReactHost` lifecycle callback for brownfield consumers whose `Application` + * does not implement [ReactApplication]. + */ +internal fun resolveReactHostForRestart(context: Context): ReactHost? = + (context.applicationContext as? ReactApplication)?.reactHost + ?: UpdatesController.instance.reactHost.get() + +/** + * An extension for [ReactHost] to restart the app * * @param activity For bridgeless mode if the ReactHost is destroyed, we need an Activity to resume it. * @param reason The restart reason. Only used on bridgeless mode. */ -internal fun ReactApplication.restart(activity: Activity?, reason: String) { - val reactHost = this.reactHost - check(reactHost != null) - if (reactHost.lifecycleState != LifecycleState.RESUMED && activity != null) { - reactHost.onHostResume(activity) +internal fun ReactHost.restart(activity: Activity?, reason: String) { + if (lifecycleState != LifecycleState.RESUMED && activity != null) { + onHostResume(activity) } - reactHost.reload(reason) + reload(reason) } From 9155a0df38c4ebaf69a7221071e6c90288ac8918 Mon Sep 17 00:00:00 2001 From: Mathieu Acthernoene Date: Wed, 13 May 2026 19:37:15 +0200 Subject: [PATCH 10/21] Update prettier to v3.8.3 (#45729) # Why The workspace had three `prettier` versions drifting across packages (`3.5.3`, `3.6.2`, `3.8.3`). Running `pnpm dedupe` rehoisted the resolution to `3.8.3`, and since 3.6 changed a few defaults, ESLint started reporting formatting errors on every file. # How Aligned every workspace `prettier` devDependency on `^3.8.3` and refreshed the lockfile (and run `pnpm dedupe`). # Test Plan - `pnpm-lock.yaml` now resolves a single `prettier@3.8.3`. - `pnpm install` then `pnpm dedupe` produces no further changes. # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- .../ImagePicker/ImagePickerAssetsList.tsx | 4 +- apps/notification-tester/src/misc/colors.ts | 458 +++++++++--------- apps/test-suite/components/SuiteResult.tsx | 2 +- package.json | 2 +- .../@expo/cli/src/customize/typescript.ts | 5 +- .../server/metro/MetroBundlerDevServer.ts | 5 +- .../metro/debugging/createDebugMiddleware.ts | 2 +- .../src/start/server/serverLogLikeMetro.ts | 4 +- .../build/DomWebView.types.d.ts.map | 2 +- .../@expo/dom-webview/src/DomWebView.types.ts | 5 +- .../src/sourcer/__tests__/Expo-test.ts | 2 +- .../metro-config/build/ExpoMetroConfig.js.map | 2 +- .../build/serializer/withExpoSerializers.js | 2 +- .../serializer/withExpoSerializers.js.map | 2 +- .../@expo/metro-config/src/ExpoMetroConfig.ts | 5 +- .../serializer/treeShakeSerializerPlugin.ts | 2 +- .../src/serializer/withExpoSerializers.ts | 2 +- .../@expo/metro-file-map/build/lib/TreeFS.js | 2 +- .../metro-file-map/src/lib/RootPathUtils.ts | 1 - .../@expo/metro-file-map/src/lib/TreeFS.ts | 2 +- .../src/plugins/FileDataPlugin.ts | 3 +- packages/create-expo/src/cli.ts | 5 +- packages/eslint-config-expo/package.json | 2 +- packages/eslint-config-universe/package.json | 2 +- .../src/checks/DoctorMultiCheck.ts | 6 +- .../build/autolinking/index.js | 2 +- .../build/autolinking/index.js.map | 2 +- .../src/autolinking/index.ts | 4 +- .../build/polyfill/CoreModule.d.ts.map | 2 +- .../build/ts-declarations/SharedRef.d.ts.map | 2 +- .../src/polyfill/CoreModule.ts | 6 +- .../src/ts-declarations/SharedRef.ts | 6 +- packages/expo-modules-test-core/package.json | 2 +- .../build/link/zoom/useZoomHref.ios.d.ts.map | 2 +- .../build/link/zoom/useZoomHref.ios.js | 2 +- .../build/link/zoom/useZoomHref.ios.js.map | 2 +- .../build/native-tabs/types.d.ts.map | 2 +- .../build/native-tabs/types.js.map | 2 +- .../bottom-tabs/views/BottomTabBar.d.ts.map | 2 +- .../bottom-tabs/views/BottomTabBar.js | 2 +- .../bottom-tabs/views/BottomTabBar.js.map | 2 +- .../bottom-tabs/views/BottomTabItem.d.ts | 2 +- .../bottom-tabs/views/BottomTabItem.d.ts.map | 2 +- .../bottom-tabs/views/BottomTabItem.js | 2 +- .../bottom-tabs/views/BottomTabItem.js.map | 2 +- .../react-navigation/core/types.d.ts.map | 2 +- .../build/react-navigation/core/types.js.map | 2 +- .../elements/Header/HeaderBackButton.d.ts.map | 2 +- .../elements/Header/HeaderBackButton.js | 6 +- .../elements/Header/HeaderBackButton.js.map | 2 +- .../views/useHeaderConfigProps.d.ts | 2 +- .../views/useHeaderConfigProps.d.ts.map | 2 +- .../views/useHeaderConfigProps.js | 2 +- .../views/useHeaderConfigProps.js.map | 2 +- .../stack/views/Stack/CardStack.js.map | 2 +- packages/expo-router/build/ui/Slot.d.ts.map | 2 +- packages/expo-router/build/ui/Slot.js.map | 2 +- .../src/link/zoom/useZoomHref.ios.tsx | 2 +- packages/expo-router/src/native-tabs/types.ts | 21 +- .../bottom-tabs/views/BottomTabBar.tsx | 2 +- .../bottom-tabs/views/BottomTabItem.tsx | 4 +- .../src/react-navigation/core/types.tsx | 2 +- .../elements/Header/HeaderBackButton.tsx | 6 +- .../views/useHeaderConfigProps.tsx | 6 +- .../stack/views/Stack/CardStack.tsx | 2 +- packages/expo-router/src/ui/Slot.tsx | 6 +- .../expo-server/build/cjs/vendor/bun.js.map | 2 +- .../build/cjs/vendor/express.js.map | 2 +- .../expo-server/build/cjs/vendor/http.js.map | 2 +- .../expo-server/build/mjs/vendor/bun.js.map | 2 +- .../build/mjs/vendor/express.js.map | 2 +- .../expo-server/build/mjs/vendor/http.js.map | 2 +- packages/expo-server/src/vendor/bun.ts | 3 +- packages/expo-server/src/vendor/express.ts | 3 +- packages/expo-server/src/vendor/http.ts | 3 +- .../expo-sqlite/dev-plugin-webui/bun.lock | 72 +-- .../expo-sqlite/dev-plugin-webui/package.json | 2 +- .../src/components/ui/badge.tsx | 3 +- .../src/components/ui/button.tsx | 3 +- .../hooks/__tests__/useSQLiteDatabase.test.ts | 9 +- packages/expo-type-information/package.json | 2 +- .../expo-ui/build/swift-ui/TabView/index.d.ts | 2 +- .../build/swift-ui/TabView/index.d.ts.map | 2 +- .../universal/Column/index.android.d.ts.map | 2 +- .../universal/Row/index.android.d.ts.map | 2 +- .../build/universal/TextInput/types.d.ts | 2 +- .../build/universal/TextInput/types.d.ts.map | 2 +- .../expo-ui/src/swift-ui/TabView/index.tsx | 2 +- .../src/universal/Column/index.android.tsx | 2 +- .../src/universal/Row/index.android.tsx | 2 +- .../expo-ui/src/universal/TextInput/types.ts | 2 +- .../cli/src/resolveRuntimeVersion.ts | 5 +- packages/jest-expo/jest-preset.js | 5 +- pnpm-lock.yaml | 186 +++---- tools/package.json | 2 +- tools/src/GitHubActions.ts | 6 +- tools/src/TasksRunner.ts | 7 +- .../tasks/addTemplateTarball.ts | 2 +- .../tasks/updateProjectTemplates.ts | 2 +- 99 files changed, 461 insertions(+), 544 deletions(-) diff --git a/apps/native-component-list/src/screens/ImagePicker/ImagePickerAssetsList.tsx b/apps/native-component-list/src/screens/ImagePicker/ImagePickerAssetsList.tsx index ecf7847b132f14..d2619642ad5fb0 100644 --- a/apps/native-component-list/src/screens/ImagePicker/ImagePickerAssetsList.tsx +++ b/apps/native-component-list/src/screens/ImagePicker/ImagePickerAssetsList.tsx @@ -8,7 +8,9 @@ export default function ImagePickerAssetsList( ): React.ReactElement | void { return ( - {result.assets?.map((asset, index) => )} + {result.assets?.map((asset, index) => ( + + ))} ); } diff --git a/apps/notification-tester/src/misc/colors.ts b/apps/notification-tester/src/misc/colors.ts index 6d109187fafe60..b235a5825145e0 100644 --- a/apps/notification-tester/src/misc/colors.ts +++ b/apps/notification-tester/src/misc/colors.ts @@ -1,227 +1,227 @@ export const TailwindColor = { - transparent: "transparent", - black: "rgb(0,0,0)", - white: "rgb(255,255,255)", - "slate-50": "rgb(248,250,252)", - "slate-100": "rgb(241,245,249)", - "slate-200": "rgb(226,232,240)", - "slate-300": "rgb(203,213,225)", - "slate-400": "rgb(148,163,184)", - "slate-500": "rgb(100,116,139)", - "slate-600": "rgb(71,85,105)", - "slate-700": "rgb(51,65,85)", - "slate-800": "rgb(30,41,59)", - "slate-900": "rgb(15,23,42)", - "gray-50": "rgb(249,250,251)", - "gray-100": "rgb(243,244,246)", - "gray-200": "rgb(229,231,235)", - "gray-300": "rgb(209,213,219)", - "gray-400": "rgb(156,163,175)", - "gray-500": "rgb(107,114,128)", - "gray-600": "rgb(75,85,99)", - "gray-700": "rgb(55,65,81)", - "gray-800": "rgb(31,41,55)", - "gray-900": "rgb(17,24,39)", - "zinc-50": "rgb(250,250,250)", - "zinc-100": "rgb(244,244,245)", - "zinc-200": "rgb(228,228,231)", - "zinc-300": "rgb(212,212,216)", - "zinc-400": "rgb(161,161,170)", - "zinc-500": "rgb(113,113,122)", - "zinc-600": "rgb(82,82,91)", - "zinc-700": "rgb(63,63,70)", - "zinc-800": "rgb(39,39,42)", - "zinc-900": "rgb(24,24,27)", - "neutral-50": "rgb(250,250,250)", - "neutral-100": "rgb(245,245,245)", - "neutral-200": "rgb(229,229,229)", - "neutral-300": "rgb(212,212,212)", - "neutral-400": "rgb(163,163,163)", - "neutral-500": "rgb(115,115,115)", - "neutral-600": "rgb(82,82,82)", - "neutral-700": "rgb(64,64,64)", - "neutral-800": "rgb(38,38,38)", - "neutral-900": "rgb(23,23,23)", - "stone-50": "rgb(250,250,249)", - "stone-100": "rgb(245,245,244)", - "stone-200": "rgb(231,229,228)", - "stone-300": "rgb(214,211,209)", - "stone-400": "rgb(168,162,158)", - "stone-500": "rgb(120,113,108)", - "stone-600": "rgb(87,83,78)", - "stone-700": "rgb(68,64,60)", - "stone-800": "rgb(41,37,36)", - "stone-900": "rgb(28,25,23)", - "red-50": "rgb(254,242,242)", - "red-100": "rgb(254,226,226)", - "red-200": "rgb(254,202,202)", - "red-300": "rgb(252,165,165)", - "red-400": "rgb(248,113,113)", - "red-500": "rgb(239,68,68)", - "red-600": "rgb(220,38,38)", - "red-700": "rgb(185,28,28)", - "red-800": "rgb(153,27,27)", - "red-900": "rgb(127,29,29)", - "orange-50": "rgb(255,247,237)", - "orange-100": "rgb(255,237,213)", - "orange-200": "rgb(254,215,170)", - "orange-300": "rgb(253,186,116)", - "orange-400": "rgb(251,146,60)", - "orange-500": "rgb(249,115,22)", - "orange-600": "rgb(234,88,12)", - "orange-700": "rgb(194,65,12)", - "orange-800": "rgb(154,52,18)", - "orange-900": "rgb(124,45,18)", - "amber-50": "rgb(255,251,235)", - "amber-100": "rgb(254,243,199)", - "amber-200": "rgb(253,230,138)", - "amber-300": "rgb(252,211,77)", - "amber-400": "rgb(251,191,36)", - "amber-500": "rgb(245,158,11)", - "amber-600": "rgb(217,119,6)", - "amber-700": "rgb(180,83,9)", - "amber-800": "rgb(146,64,14)", - "amber-900": "rgb(120,53,15)", - "yellow-50": "rgb(254,252,232)", - "yellow-100": "rgb(254,249,195)", - "yellow-200": "rgb(254,240,138)", - "yellow-300": "rgb(253,224,71)", - "yellow-400": "rgb(250,204,21)", - "yellow-500": "rgb(234,179,8)", - "yellow-600": "rgb(202,138,4)", - "yellow-700": "rgb(161,98,7)", - "yellow-800": "rgb(133,77,14)", - "yellow-900": "rgb(113,63,18)", - "lime-50": "rgb(247,254,231)", - "lime-100": "rgb(236,252,203)", - "lime-200": "rgb(217,249,157)", - "lime-300": "rgb(190,242,100)", - "lime-400": "rgb(163,230,53)", - "lime-500": "rgb(132,204,22)", - "lime-600": "rgb(101,163,13)", - "lime-700": "rgb(77,124,15)", - "lime-800": "rgb(63,98,18)", - "lime-900": "rgb(54,83,20)", - "green-50": "rgb(240,253,244)", - "green-100": "rgb(220,252,231)", - "green-200": "rgb(187,247,208)", - "green-300": "rgb(134,239,172)", - "green-400": "rgb(74,222,128)", - "green-500": "rgb(34,197,94)", - "green-600": "rgb(22,163,74)", - "green-700": "rgb(21,128,61)", - "green-800": "rgb(22,101,52)", - "green-900": "rgb(20,83,45)", - "emerald-50": "rgb(236,253,245)", - "emerald-100": "rgb(209,250,229)", - "emerald-200": "rgb(167,243,208)", - "emerald-300": "rgb(110,231,183)", - "emerald-400": "rgb(52,211,153)", - "emerald-500": "rgb(16,185,129)", - "emerald-600": "rgb(5,150,105)", - "emerald-700": "rgb(4,120,87)", - "emerald-800": "rgb(6,95,70)", - "emerald-900": "rgb(6,78,59)", - "teal-50": "rgb(240,253,250)", - "teal-100": "rgb(204,251,241)", - "teal-200": "rgb(153,246,228)", - "teal-300": "rgb(94,234,212)", - "teal-400": "rgb(45,212,191)", - "teal-500": "rgb(20,184,166)", - "teal-600": "rgb(13,148,136)", - "teal-700": "rgb(15,118,110)", - "teal-800": "rgb(17,94,89)", - "teal-900": "rgb(19,78,74)", - "cyan-50": "rgb(236,254,255)", - "cyan-100": "rgb(207,250,254)", - "cyan-200": "rgb(165,243,252)", - "cyan-300": "rgb(103,232,249)", - "cyan-400": "rgb(34,211,238)", - "cyan-500": "rgb(6,182,212)", - "cyan-600": "rgb(8,145,178)", - "cyan-700": "rgb(14,116,144)", - "cyan-800": "rgb(21,94,117)", - "cyan-900": "rgb(22,78,99)", - "sky-50": "rgb(240,249,255)", - "sky-100": "rgb(224,242,254)", - "sky-200": "rgb(186,230,253)", - "sky-300": "rgb(125,211,252)", - "sky-400": "rgb(56,189,248)", - "sky-500": "rgb(14,165,233)", - "sky-600": "rgb(2,132,199)", - "sky-700": "rgb(3,105,161)", - "sky-800": "rgb(7,89,133)", - "sky-900": "rgb(12,74,110)", - "blue-50": "rgb(239,246,255)", - "blue-100": "rgb(219,234,254)", - "blue-200": "rgb(191,219,254)", - "blue-300": "rgb(147,197,253)", - "blue-400": "rgb(96,165,250)", - "blue-500": "rgb(59,130,246)", - "blue-600": "rgb(37,99,235)", - "blue-700": "rgb(29,78,216)", - "blue-800": "rgb(30,64,175)", - "blue-900": "rgb(30,58,138)", - "indigo-50": "rgb(238,242,255)", - "indigo-100": "rgb(224,231,255)", - "indigo-200": "rgb(199,210,254)", - "indigo-300": "rgb(165,180,252)", - "indigo-400": "rgb(129,140,248)", - "indigo-500": "rgb(99,102,241)", - "indigo-600": "rgb(79,70,229)", - "indigo-700": "rgb(67,56,202)", - "indigo-800": "rgb(55,48,163)", - "indigo-900": "rgb(49,46,129)", - "violet-50": "rgb(245,243,255)", - "violet-100": "rgb(237,233,254)", - "violet-200": "rgb(221,214,254)", - "violet-300": "rgb(196,181,253)", - "violet-400": "rgb(167,139,250)", - "violet-500": "rgb(139,92,246)", - "violet-600": "rgb(124,58,237)", - "violet-700": "rgb(109,40,217)", - "violet-800": "rgb(91,33,182)", - "violet-900": "rgb(76,29,149)", - "purple-50": "rgb(250,245,255)", - "purple-100": "rgb(243,232,255)", - "purple-200": "rgb(233,213,255)", - "purple-300": "rgb(216,180,254)", - "purple-400": "rgb(192,132,252)", - "purple-500": "rgb(168,85,247)", - "purple-600": "rgb(147,51,234)", - "purple-700": "rgb(126,34,206)", - "purple-800": "rgb(107,33,168)", - "purple-900": "rgb(88,28,135)", - "fuchsia-50": "rgb(253,244,255)", - "fuchsia-100": "rgb(250,232,255)", - "fuchsia-200": "rgb(245,208,254)", - "fuchsia-300": "rgb(240,171,252)", - "fuchsia-400": "rgb(232,121,249)", - "fuchsia-500": "rgb(217,70,239)", - "fuchsia-600": "rgb(192,38,211)", - "fuchsia-700": "rgb(162,28,175)", - "fuchsia-800": "rgb(134,25,143)", - "fuchsia-900": "rgb(112,26,117)", - "pink-50": "rgb(253,242,248)", - "pink-100": "rgb(252,231,243)", - "pink-200": "rgb(251,207,232)", - "pink-300": "rgb(249,168,212)", - "pink-400": "rgb(244,114,182)", - "pink-500": "rgb(236,72,153)", - "pink-600": "rgb(219,39,119)", - "pink-700": "rgb(190,24,93)", - "pink-800": "rgb(157,23,77)", - "pink-900": "rgb(131,24,67)", - "rose-50": "rgb(255,241,242)", - "rose-100": "rgb(255,228,230)", - "rose-200": "rgb(254,205,211)", - "rose-300": "rgb(253,164,175)", - "rose-400": "rgb(251,113,133)", - "rose-500": "rgb(244,63,94)", - "rose-600": "rgb(225,29,72)", - "rose-700": "rgb(190,18,60)", - "rose-800": "rgb(159,18,57)", - "rose-900": "rgb(136,19,55)", + transparent: 'transparent', + black: 'rgb(0,0,0)', + white: 'rgb(255,255,255)', + 'slate-50': 'rgb(248,250,252)', + 'slate-100': 'rgb(241,245,249)', + 'slate-200': 'rgb(226,232,240)', + 'slate-300': 'rgb(203,213,225)', + 'slate-400': 'rgb(148,163,184)', + 'slate-500': 'rgb(100,116,139)', + 'slate-600': 'rgb(71,85,105)', + 'slate-700': 'rgb(51,65,85)', + 'slate-800': 'rgb(30,41,59)', + 'slate-900': 'rgb(15,23,42)', + 'gray-50': 'rgb(249,250,251)', + 'gray-100': 'rgb(243,244,246)', + 'gray-200': 'rgb(229,231,235)', + 'gray-300': 'rgb(209,213,219)', + 'gray-400': 'rgb(156,163,175)', + 'gray-500': 'rgb(107,114,128)', + 'gray-600': 'rgb(75,85,99)', + 'gray-700': 'rgb(55,65,81)', + 'gray-800': 'rgb(31,41,55)', + 'gray-900': 'rgb(17,24,39)', + 'zinc-50': 'rgb(250,250,250)', + 'zinc-100': 'rgb(244,244,245)', + 'zinc-200': 'rgb(228,228,231)', + 'zinc-300': 'rgb(212,212,216)', + 'zinc-400': 'rgb(161,161,170)', + 'zinc-500': 'rgb(113,113,122)', + 'zinc-600': 'rgb(82,82,91)', + 'zinc-700': 'rgb(63,63,70)', + 'zinc-800': 'rgb(39,39,42)', + 'zinc-900': 'rgb(24,24,27)', + 'neutral-50': 'rgb(250,250,250)', + 'neutral-100': 'rgb(245,245,245)', + 'neutral-200': 'rgb(229,229,229)', + 'neutral-300': 'rgb(212,212,212)', + 'neutral-400': 'rgb(163,163,163)', + 'neutral-500': 'rgb(115,115,115)', + 'neutral-600': 'rgb(82,82,82)', + 'neutral-700': 'rgb(64,64,64)', + 'neutral-800': 'rgb(38,38,38)', + 'neutral-900': 'rgb(23,23,23)', + 'stone-50': 'rgb(250,250,249)', + 'stone-100': 'rgb(245,245,244)', + 'stone-200': 'rgb(231,229,228)', + 'stone-300': 'rgb(214,211,209)', + 'stone-400': 'rgb(168,162,158)', + 'stone-500': 'rgb(120,113,108)', + 'stone-600': 'rgb(87,83,78)', + 'stone-700': 'rgb(68,64,60)', + 'stone-800': 'rgb(41,37,36)', + 'stone-900': 'rgb(28,25,23)', + 'red-50': 'rgb(254,242,242)', + 'red-100': 'rgb(254,226,226)', + 'red-200': 'rgb(254,202,202)', + 'red-300': 'rgb(252,165,165)', + 'red-400': 'rgb(248,113,113)', + 'red-500': 'rgb(239,68,68)', + 'red-600': 'rgb(220,38,38)', + 'red-700': 'rgb(185,28,28)', + 'red-800': 'rgb(153,27,27)', + 'red-900': 'rgb(127,29,29)', + 'orange-50': 'rgb(255,247,237)', + 'orange-100': 'rgb(255,237,213)', + 'orange-200': 'rgb(254,215,170)', + 'orange-300': 'rgb(253,186,116)', + 'orange-400': 'rgb(251,146,60)', + 'orange-500': 'rgb(249,115,22)', + 'orange-600': 'rgb(234,88,12)', + 'orange-700': 'rgb(194,65,12)', + 'orange-800': 'rgb(154,52,18)', + 'orange-900': 'rgb(124,45,18)', + 'amber-50': 'rgb(255,251,235)', + 'amber-100': 'rgb(254,243,199)', + 'amber-200': 'rgb(253,230,138)', + 'amber-300': 'rgb(252,211,77)', + 'amber-400': 'rgb(251,191,36)', + 'amber-500': 'rgb(245,158,11)', + 'amber-600': 'rgb(217,119,6)', + 'amber-700': 'rgb(180,83,9)', + 'amber-800': 'rgb(146,64,14)', + 'amber-900': 'rgb(120,53,15)', + 'yellow-50': 'rgb(254,252,232)', + 'yellow-100': 'rgb(254,249,195)', + 'yellow-200': 'rgb(254,240,138)', + 'yellow-300': 'rgb(253,224,71)', + 'yellow-400': 'rgb(250,204,21)', + 'yellow-500': 'rgb(234,179,8)', + 'yellow-600': 'rgb(202,138,4)', + 'yellow-700': 'rgb(161,98,7)', + 'yellow-800': 'rgb(133,77,14)', + 'yellow-900': 'rgb(113,63,18)', + 'lime-50': 'rgb(247,254,231)', + 'lime-100': 'rgb(236,252,203)', + 'lime-200': 'rgb(217,249,157)', + 'lime-300': 'rgb(190,242,100)', + 'lime-400': 'rgb(163,230,53)', + 'lime-500': 'rgb(132,204,22)', + 'lime-600': 'rgb(101,163,13)', + 'lime-700': 'rgb(77,124,15)', + 'lime-800': 'rgb(63,98,18)', + 'lime-900': 'rgb(54,83,20)', + 'green-50': 'rgb(240,253,244)', + 'green-100': 'rgb(220,252,231)', + 'green-200': 'rgb(187,247,208)', + 'green-300': 'rgb(134,239,172)', + 'green-400': 'rgb(74,222,128)', + 'green-500': 'rgb(34,197,94)', + 'green-600': 'rgb(22,163,74)', + 'green-700': 'rgb(21,128,61)', + 'green-800': 'rgb(22,101,52)', + 'green-900': 'rgb(20,83,45)', + 'emerald-50': 'rgb(236,253,245)', + 'emerald-100': 'rgb(209,250,229)', + 'emerald-200': 'rgb(167,243,208)', + 'emerald-300': 'rgb(110,231,183)', + 'emerald-400': 'rgb(52,211,153)', + 'emerald-500': 'rgb(16,185,129)', + 'emerald-600': 'rgb(5,150,105)', + 'emerald-700': 'rgb(4,120,87)', + 'emerald-800': 'rgb(6,95,70)', + 'emerald-900': 'rgb(6,78,59)', + 'teal-50': 'rgb(240,253,250)', + 'teal-100': 'rgb(204,251,241)', + 'teal-200': 'rgb(153,246,228)', + 'teal-300': 'rgb(94,234,212)', + 'teal-400': 'rgb(45,212,191)', + 'teal-500': 'rgb(20,184,166)', + 'teal-600': 'rgb(13,148,136)', + 'teal-700': 'rgb(15,118,110)', + 'teal-800': 'rgb(17,94,89)', + 'teal-900': 'rgb(19,78,74)', + 'cyan-50': 'rgb(236,254,255)', + 'cyan-100': 'rgb(207,250,254)', + 'cyan-200': 'rgb(165,243,252)', + 'cyan-300': 'rgb(103,232,249)', + 'cyan-400': 'rgb(34,211,238)', + 'cyan-500': 'rgb(6,182,212)', + 'cyan-600': 'rgb(8,145,178)', + 'cyan-700': 'rgb(14,116,144)', + 'cyan-800': 'rgb(21,94,117)', + 'cyan-900': 'rgb(22,78,99)', + 'sky-50': 'rgb(240,249,255)', + 'sky-100': 'rgb(224,242,254)', + 'sky-200': 'rgb(186,230,253)', + 'sky-300': 'rgb(125,211,252)', + 'sky-400': 'rgb(56,189,248)', + 'sky-500': 'rgb(14,165,233)', + 'sky-600': 'rgb(2,132,199)', + 'sky-700': 'rgb(3,105,161)', + 'sky-800': 'rgb(7,89,133)', + 'sky-900': 'rgb(12,74,110)', + 'blue-50': 'rgb(239,246,255)', + 'blue-100': 'rgb(219,234,254)', + 'blue-200': 'rgb(191,219,254)', + 'blue-300': 'rgb(147,197,253)', + 'blue-400': 'rgb(96,165,250)', + 'blue-500': 'rgb(59,130,246)', + 'blue-600': 'rgb(37,99,235)', + 'blue-700': 'rgb(29,78,216)', + 'blue-800': 'rgb(30,64,175)', + 'blue-900': 'rgb(30,58,138)', + 'indigo-50': 'rgb(238,242,255)', + 'indigo-100': 'rgb(224,231,255)', + 'indigo-200': 'rgb(199,210,254)', + 'indigo-300': 'rgb(165,180,252)', + 'indigo-400': 'rgb(129,140,248)', + 'indigo-500': 'rgb(99,102,241)', + 'indigo-600': 'rgb(79,70,229)', + 'indigo-700': 'rgb(67,56,202)', + 'indigo-800': 'rgb(55,48,163)', + 'indigo-900': 'rgb(49,46,129)', + 'violet-50': 'rgb(245,243,255)', + 'violet-100': 'rgb(237,233,254)', + 'violet-200': 'rgb(221,214,254)', + 'violet-300': 'rgb(196,181,253)', + 'violet-400': 'rgb(167,139,250)', + 'violet-500': 'rgb(139,92,246)', + 'violet-600': 'rgb(124,58,237)', + 'violet-700': 'rgb(109,40,217)', + 'violet-800': 'rgb(91,33,182)', + 'violet-900': 'rgb(76,29,149)', + 'purple-50': 'rgb(250,245,255)', + 'purple-100': 'rgb(243,232,255)', + 'purple-200': 'rgb(233,213,255)', + 'purple-300': 'rgb(216,180,254)', + 'purple-400': 'rgb(192,132,252)', + 'purple-500': 'rgb(168,85,247)', + 'purple-600': 'rgb(147,51,234)', + 'purple-700': 'rgb(126,34,206)', + 'purple-800': 'rgb(107,33,168)', + 'purple-900': 'rgb(88,28,135)', + 'fuchsia-50': 'rgb(253,244,255)', + 'fuchsia-100': 'rgb(250,232,255)', + 'fuchsia-200': 'rgb(245,208,254)', + 'fuchsia-300': 'rgb(240,171,252)', + 'fuchsia-400': 'rgb(232,121,249)', + 'fuchsia-500': 'rgb(217,70,239)', + 'fuchsia-600': 'rgb(192,38,211)', + 'fuchsia-700': 'rgb(162,28,175)', + 'fuchsia-800': 'rgb(134,25,143)', + 'fuchsia-900': 'rgb(112,26,117)', + 'pink-50': 'rgb(253,242,248)', + 'pink-100': 'rgb(252,231,243)', + 'pink-200': 'rgb(251,207,232)', + 'pink-300': 'rgb(249,168,212)', + 'pink-400': 'rgb(244,114,182)', + 'pink-500': 'rgb(236,72,153)', + 'pink-600': 'rgb(219,39,119)', + 'pink-700': 'rgb(190,24,93)', + 'pink-800': 'rgb(157,23,77)', + 'pink-900': 'rgb(131,24,67)', + 'rose-50': 'rgb(255,241,242)', + 'rose-100': 'rgb(255,228,230)', + 'rose-200': 'rgb(254,205,211)', + 'rose-300': 'rgb(253,164,175)', + 'rose-400': 'rgb(251,113,133)', + 'rose-500': 'rgb(244,63,94)', + 'rose-600': 'rgb(225,29,72)', + 'rose-700': 'rgb(190,18,60)', + 'rose-800': 'rgb(159,18,57)', + 'rose-900': 'rgb(136,19,55)', }; export const ThemeColors = { @@ -229,17 +229,17 @@ export const ThemeColors = { text: TailwindColor.black, view: TailwindColor.white, viewAccent: TailwindColor.white, - tint: TailwindColor["zinc-800"], - textInputBackground: TailwindColor["gray-100"], + tint: TailwindColor['zinc-800'], + textInputBackground: TailwindColor['gray-100'], textInputText: TailwindColor.black, }, dark: { text: TailwindColor.white, - view: "rgb(30,30,30)", - viewAccent: "rgb(45,45,45)", + view: 'rgb(30,30,30)', + viewAccent: 'rgb(45,45,45)', tint: TailwindColor.white, - textInputBackground: TailwindColor["zinc-700"], + textInputBackground: TailwindColor['zinc-700'], textInputText: TailwindColor.white, - textInputPlaceholder: TailwindColor["zinc-500"], + textInputPlaceholder: TailwindColor['zinc-500'], }, }; diff --git a/apps/test-suite/components/SuiteResult.tsx b/apps/test-suite/components/SuiteResult.tsx index b5902224721757..071523352cfd79 100644 --- a/apps/test-suite/components/SuiteResult.tsx +++ b/apps/test-suite/components/SuiteResult.tsx @@ -1,9 +1,9 @@ import { StyleSheet, Text, View } from 'react-native'; +import SpecResult from './SpecResult'; import { useTheme } from '../../common/ThemeProvider'; import { type Status } from '../constants/Statuses'; import { type Suite } from '../types'; -import SpecResult from './SpecResult'; function childHasFailures(suite: Suite): boolean { if (suite.specs.some((s) => s.status === 'failed')) { diff --git a/package.json b/package.json index 26f3c404062461..7777a9e7455c57 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "expo-modules-core": "workspace:*", "jest-expo": "workspace:*", "jsc-android": "^250231.0.0", - "prettier": "~3.5.3" + "prettier": "~3.8.3" }, "volta": { "node": "22.14.0" diff --git a/packages/@expo/cli/src/customize/typescript.ts b/packages/@expo/cli/src/customize/typescript.ts index c800c19e31e405..ebf69818b32593 100644 --- a/packages/@expo/cli/src/customize/typescript.ts +++ b/packages/@expo/cli/src/customize/typescript.ts @@ -3,9 +3,8 @@ import { getConfig } from '@expo/config'; import { Log } from '../log'; export async function typescript(projectRoot: string) { - const { TypeScriptProjectPrerequisite } = await import( - '../start/doctor/typescript/TypeScriptProjectPrerequisite.js' - ); + const { TypeScriptProjectPrerequisite } = + await import('../start/doctor/typescript/TypeScriptProjectPrerequisite.js'); const { MetroBundlerDevServer } = await import('../start/server/metro/MetroBundlerDevServer.js'); const { getPlatformBundlers } = await import('../start/server/platformBundlers.js'); diff --git a/packages/@expo/cli/src/start/server/metro/MetroBundlerDevServer.ts b/packages/@expo/cli/src/start/server/metro/MetroBundlerDevServer.ts index 3062572dae1c36..a1ae85cbe17798 100644 --- a/packages/@expo/cli/src/start/server/metro/MetroBundlerDevServer.ts +++ b/packages/@expo/cli/src/start/server/metro/MetroBundlerDevServer.ts @@ -1697,9 +1697,8 @@ export class MetroBundlerDevServer extends BundlerDevServer { callback: async () => { // Run once, this prevents the TypeScript project prerequisite from running on every file change. off(); - const { TypeScriptProjectPrerequisite } = await import( - '../../doctor/typescript/TypeScriptProjectPrerequisite.js' - ); + const { TypeScriptProjectPrerequisite } = + await import('../../doctor/typescript/TypeScriptProjectPrerequisite.js'); try { const req = new TypeScriptProjectPrerequisite(this.projectRoot); diff --git a/packages/@expo/cli/src/start/server/metro/debugging/createDebugMiddleware.ts b/packages/@expo/cli/src/start/server/metro/debugging/createDebugMiddleware.ts index e6a2918c530f80..2114e803db3920 100644 --- a/packages/@expo/cli/src/start/server/metro/debugging/createDebugMiddleware.ts +++ b/packages/@expo/cli/src/start/server/metro/debugging/createDebugMiddleware.ts @@ -2,10 +2,10 @@ import type { NextHandleFunction } from 'connect'; import { WebSocketServer } from 'ws'; import { createHandlersFactory } from './createHandlersFactory'; +import { NETWORK_RESPONSE_STORAGE } from './messageHandlers/NetworkResponse'; import { env, envIsHeadless } from '../../../../utils/env'; import { isLocalSocket, isMatchingOrigin } from '../../../../utils/net'; import type { TerminalReporter } from '../TerminalReporter'; -import { NETWORK_RESPONSE_STORAGE } from './messageHandlers/NetworkResponse'; const debug = require('debug')('expo:metro:debugging:middleware') as typeof console.log; diff --git a/packages/@expo/cli/src/start/server/serverLogLikeMetro.ts b/packages/@expo/cli/src/start/server/serverLogLikeMetro.ts index 358a33514b3abb..98431568c25c50 100644 --- a/packages/@expo/cli/src/start/server/serverLogLikeMetro.ts +++ b/packages/@expo/cli/src/start/server/serverLogLikeMetro.ts @@ -9,12 +9,12 @@ import chalk from 'chalk'; import path from 'path'; import * as stackTraceParser from 'stacktrace-parser'; +import { LogBoxLog } from './metro/log-box/LogBoxLog'; import type { StackFrame } from './metro/log-box/LogBoxSymbolication'; import { parseErrorStack } from './metro/log-box/LogBoxSymbolication'; +import { getStackAsFormattedLog } from './metro/metroErrorInterface'; import { env } from '../../utils/env'; import { memoize } from '../../utils/fn'; -import { LogBoxLog } from './metro/log-box/LogBoxLog'; -import { getStackAsFormattedLog } from './metro/metroErrorInterface'; const debug = require('debug')('expo:metro:logger') as typeof console.log; diff --git a/packages/@expo/dom-webview/build/DomWebView.types.d.ts.map b/packages/@expo/dom-webview/build/DomWebView.types.d.ts.map index 10b27d2d810210..c6ec6d6c05c1b6 100644 --- a/packages/@expo/dom-webview/build/DomWebView.types.d.ts.map +++ b/packages/@expo/dom-webview/build/DomWebView.types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DomWebView.types.d.ts","sourceRoot":"","sources":["../src/DomWebView.types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DomWebView.types.d.ts","sourceRoot":"","sources":["../src/DomWebView.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,WAAW,eACf,SAAQ,SAAS,EAAE,YAAY,EAAE,kBAAkB,EAAE,uBAAuB;IAC5E;;OAEG;IACH,MAAM,EAAE,gBAAgB,CAAC;IAEzB;;OAEG;IACH,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAEtC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,qCAAqC,CAAC,EAAE,MAAM,CAAC;IAE/C;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;;;;;;;;;;;;OAeG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;;;;;OAOG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;;;;OAMG;IACH,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAE1C;;;;;;;OAOG;IACH,mCAAmC,CAAC,EAAE,OAAO,CAAC;IAE9C;;;;;;OAMG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;IAExC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,gBAAgB,CAAA;KAAE,KAAK,IAAI,CAAC;IAE/D;;;;;OAKG;IACH,4BAA4B,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IAEhG;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC5B,WAAW,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAA;SAAE,CAAC;KAChE,KAAK,IAAI,CAAC;IAEX;;;OAGG;IACH,8BAA8B,CAAC,EAAE,OAAO,CAAC;IAEzC;;;OAGG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,UAAU,kBAAkB;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAE9C;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;;;OAQG;IACH,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAE3C;;;;;;;;OAQG;IACH,yCAAyC,CAAC,EAAE,OAAO,CAAC;IAEpD;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAEhC;;;;;;;OAOG;IACH,8BAA8B,CAAC,EAAE,WAAW,GAAG,gBAAgB,GAAG,OAAO,GAAG,QAAQ,CAAC;IAErF;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,UAAU,YAAY;IACpB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,UAAU,uBAAuB;IAC/B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,EACP,CAAC,EACD,CAAC,EACD,QAAQ,GACT,EAAE;QACD,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACvB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACvB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAChC,GAAG,IAAI,CAAC;IAET;;OAEG;IACH,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3C;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAiB,SAAQ,aAAa;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd"} \ No newline at end of file diff --git a/packages/@expo/dom-webview/src/DomWebView.types.ts b/packages/@expo/dom-webview/src/DomWebView.types.ts index d389a59b064b04..4f3ed93894f8fa 100644 --- a/packages/@expo/dom-webview/src/DomWebView.types.ts +++ b/packages/@expo/dom-webview/src/DomWebView.types.ts @@ -1,10 +1,7 @@ import type { StyleProp, ViewProps, ViewStyle } from 'react-native'; export interface DomWebViewProps - extends ViewProps, - AndroidProps, - IosScrollViewProps, - UnsupportedWebViewProps { + extends ViewProps, AndroidProps, IosScrollViewProps, UnsupportedWebViewProps { /** * Loads static html or a uri (with optional headers) in the WebView. */ diff --git a/packages/@expo/fingerprint/src/sourcer/__tests__/Expo-test.ts b/packages/@expo/fingerprint/src/sourcer/__tests__/Expo-test.ts index 67adef0f3afe7f..7253ad7fb44695 100644 --- a/packages/@expo/fingerprint/src/sourcer/__tests__/Expo-test.ts +++ b/packages/@expo/fingerprint/src/sourcer/__tests__/Expo-test.ts @@ -5,6 +5,7 @@ import { vol, fs as volFS } from 'memfs'; import path from 'path'; import requireString from 'require-from-string'; +import { copyDirSync } from './vol-utils'; import { getExpoConfigAsync } from '../../ExpoConfig'; import type { HashSource, HashSourceContents } from '../../Fingerprint.types'; import { normalizeOptionsAsync } from '../../Options'; @@ -19,7 +20,6 @@ import { getExpoCNGPatchSourcesAsync, sortExpoAutolinkingAndroidConfig, } from '../Expo'; -import { copyDirSync } from './vol-utils'; jest.mock('@expo/spawn-async'); jest.mock('fs/promises'); diff --git a/packages/@expo/metro-config/build/ExpoMetroConfig.js.map b/packages/@expo/metro-config/build/ExpoMetroConfig.js.map index 3b116adc82754b..7a0bafc42218cc 100644 --- a/packages/@expo/metro-config/build/ExpoMetroConfig.js.map +++ b/packages/@expo/metro-config/build/ExpoMetroConfig.js.map @@ -1 +1 @@ -{"version":3,"file":"ExpoMetroConfig.js","sourceRoot":"","sources":["../src/ExpoMetroConfig.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ExpoMetroConfig.js","sourceRoot":"","sources":["../src/ExpoMetroConfig.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/@expo/metro-config/build/serializer/withExpoSerializers.js b/packages/@expo/metro-config/build/serializer/withExpoSerializers.js index bd0a34ede02d6c..d43c6d9bb39a01 100644 --- a/packages/@expo/metro-config/build/serializer/withExpoSerializers.js +++ b/packages/@expo/metro-config/build/serializer/withExpoSerializers.js @@ -11,9 +11,9 @@ const bundleToString_1 = __importDefault(require("@expo/metro/metro/lib/bundleTo const jsc_safe_url_1 = require("jsc-safe-url"); const debugId_1 = require("./debugId"); const environmentVariableSerializerPlugin_1 = require("./environmentVariableSerializerPlugin"); +const env_1 = require("../env"); const serializeChunks_1 = require("./serializeChunks"); const sourceMap_1 = require("./sourceMap"); -const env_1 = require("../env"); // Lazy-loaded to avoid pulling in @babel/generator, @babel/core at startup let _reconcileTransformSerializerPlugin; function getReconcileTransformSerializerPlugin() { diff --git a/packages/@expo/metro-config/build/serializer/withExpoSerializers.js.map b/packages/@expo/metro-config/build/serializer/withExpoSerializers.js.map index 33e2b45409a883..6669b5c4d66382 100644 --- a/packages/@expo/metro-config/build/serializer/withExpoSerializers.js.map +++ b/packages/@expo/metro-config/build/serializer/withExpoSerializers.js.map @@ -1 +1 @@ -{"version":3,"file":"withExpoSerializers.js","sourceRoot":"","sources":["../../src/serializer/withExpoSerializers.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"withExpoSerializers.js","sourceRoot":"","sources":["../../src/serializer/withExpoSerializers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/@expo/metro-config/src/ExpoMetroConfig.ts b/packages/@expo/metro-config/src/ExpoMetroConfig.ts index fe027e468f5d34..3ad011ab62164c 100644 --- a/packages/@expo/metro-config/src/ExpoMetroConfig.ts +++ b/packages/@expo/metro-config/src/ExpoMetroConfig.ts @@ -429,9 +429,8 @@ export function getDefaultConfig( /** Use to access the Expo Metro transformer path */ export const unstable_transformerPath = require.resolve('./transform-worker/transform-worker'); -export const internal_supervisingTransformerPath = require.resolve( - './transform-worker/supervising-transform-worker' -); +export const internal_supervisingTransformerPath = + require.resolve('./transform-worker/supervising-transform-worker'); // re-export for use in config files. export { MetroConfig, INTERNAL_CALLSITES_REGEX }; diff --git a/packages/@expo/metro-config/src/serializer/treeShakeSerializerPlugin.ts b/packages/@expo/metro-config/src/serializer/treeShakeSerializerPlugin.ts index d4a601d4f0dc8a..41de89871c3c0c 100644 --- a/packages/@expo/metro-config/src/serializer/treeShakeSerializerPlugin.ts +++ b/packages/@expo/metro-config/src/serializer/treeShakeSerializerPlugin.ts @@ -849,7 +849,7 @@ export async function treeShakeSerializer( const isUsed = ( specifier: // import { imported as local } from './foo' - | types.ImportSpecifier + | types.ImportSpecifier // import local from './foo' | types.ImportDefaultSpecifier // import * as local from './foo' diff --git a/packages/@expo/metro-config/src/serializer/withExpoSerializers.ts b/packages/@expo/metro-config/src/serializer/withExpoSerializers.ts index 83a24a6f6d64e2..9429d722469b75 100644 --- a/packages/@expo/metro-config/src/serializer/withExpoSerializers.ts +++ b/packages/@expo/metro-config/src/serializer/withExpoSerializers.ts @@ -16,10 +16,10 @@ import { environmentVariableSerializerPlugin, serverPreludeSerializerPlugin, } from './environmentVariableSerializerPlugin'; +import { env } from '../env'; import type { ExpoSerializerOptions } from './fork/baseJSBundle'; import { getSortedModules, graphToSerialAssetsAsync } from './serializeChunks'; import { sourceMapString } from './sourceMap'; -import { env } from '../env'; export type { SerialAsset } from './serializerAssets'; diff --git a/packages/@expo/metro-file-map/build/lib/TreeFS.js b/packages/@expo/metro-file-map/build/lib/TreeFS.js index 6a0e0c8fc82b32..d065f5eaa89c09 100644 --- a/packages/@expo/metro-file-map/build/lib/TreeFS.js +++ b/packages/@expo/metro-file-map/build/lib/TreeFS.js @@ -13,10 +13,10 @@ const fs_1 = __importDefault(require("fs")); const invariant_1 = __importDefault(require("invariant")); const path_1 = __importDefault(require("path")); const constants_1 = __importDefault(require("../constants")); +const RootPathUtils_1 = require("./RootPathUtils"); const normalizePathSeparatorsToPosix_1 = __importDefault(require("./normalizePathSeparatorsToPosix")); const normalizePathSeparatorsToSystem_1 = __importDefault(require("./normalizePathSeparatorsToSystem")); const fallback_1 = require("../crawlers/node/fallback"); -const RootPathUtils_1 = require("./RootPathUtils"); function isDirectory(node) { return node instanceof Map; } diff --git a/packages/@expo/metro-file-map/src/lib/RootPathUtils.ts b/packages/@expo/metro-file-map/src/lib/RootPathUtils.ts index eab647b62f6a1b..f01a807c550368 100644 --- a/packages/@expo/metro-file-map/src/lib/RootPathUtils.ts +++ b/packages/@expo/metro-file-map/src/lib/RootPathUtils.ts @@ -107,7 +107,6 @@ export class RootPathUtils { absolutePath.startsWith(nextPart, endOfMatchingPrefix) && (absolutePath.length === endOfMatchingPrefix + nextLength || absolutePath[endOfMatchingPrefix + nextLength] === path.sep); - ) { // Move our matching pointer forward and load the next part. endOfMatchingPrefix += nextLength + 1; diff --git a/packages/@expo/metro-file-map/src/lib/TreeFS.ts b/packages/@expo/metro-file-map/src/lib/TreeFS.ts index 1f59a2de6086f9..207fb93dbc704d 100644 --- a/packages/@expo/metro-file-map/src/lib/TreeFS.ts +++ b/packages/@expo/metro-file-map/src/lib/TreeFS.ts @@ -10,6 +10,7 @@ import invariant from 'invariant'; import path from 'path'; import H from '../constants'; +import { RootPathUtils, getAncestorOfRootIdx, pathsToPattern } from './RootPathUtils'; import normalizePathSeparatorsToPosix from './normalizePathSeparatorsToPosix'; import normalizePathSeparatorsToSystem from './normalizePathSeparatorsToSystem'; import { isFallbackDir, shouldFallbackCrawlDir } from '../crawlers/node/fallback'; @@ -25,7 +26,6 @@ import type { Path, ProcessFileFunction, } from '../types'; -import { RootPathUtils, getAncestorOfRootIdx, pathsToPattern } from './RootPathUtils'; type DirectoryNode = Map; type FileNode = FileMetadata; diff --git a/packages/@expo/metro-file-map/src/plugins/FileDataPlugin.ts b/packages/@expo/metro-file-map/src/plugins/FileDataPlugin.ts index c2b920ebc1ae53..467a3df9b572ff 100644 --- a/packages/@expo/metro-file-map/src/plugins/FileDataPlugin.ts +++ b/packages/@expo/metro-file-map/src/plugins/FileDataPlugin.ts @@ -25,8 +25,7 @@ export interface FileDataPluginOptions extends FileMapPluginWorker { */ export default class FileDataPlugin< PerFileData extends undefined | V8Serializable = undefined | V8Serializable, -> implements FileMapPlugin -{ +> implements FileMapPlugin { readonly name: string; #worker: FileMapPluginWorker; diff --git a/packages/create-expo/src/cli.ts b/packages/create-expo/src/cli.ts index adcf3072d394a5..e541cdd63ab8a9 100644 --- a/packages/create-expo/src/cli.ts +++ b/packages/create-expo/src/cli.ts @@ -68,9 +68,8 @@ async function run() { ); } - const { AnalyticsEventPhases, AnalyticsEventTypes, flushAsync, track } = await import( - './telemetry' - ); + const { AnalyticsEventPhases, AnalyticsEventTypes, flushAsync, track } = + await import('./telemetry'); try { const parsed = await resolveStringOrBooleanArgsAsync(argv, rawArgsMap, { '--template': Boolean, diff --git a/packages/eslint-config-expo/package.json b/packages/eslint-config-expo/package.json index c7b4994bec82e6..ba58a6d3645a6f 100644 --- a/packages/eslint-config-expo/package.json +++ b/packages/eslint-config-expo/package.json @@ -49,7 +49,7 @@ "eslint": "^9.18.0", "eslint8": "npm:eslint@^8.57.1", "eslint-plugin-prettier": "^5.2.1", - "prettier": "^3.4.2", + "prettier": "^3.8.3", "react": "19.2.3", "react-native": "0.85.3" }, diff --git a/packages/eslint-config-universe/package.json b/packages/eslint-config-universe/package.json index 70011c6ea4f197..2b45d50146a22d 100644 --- a/packages/eslint-config-universe/package.json +++ b/packages/eslint-config-universe/package.json @@ -64,7 +64,7 @@ "eslint": "^9.24.0", "eslint8": "npm:eslint@^8.57.1", "jest": "^29.7.0", - "prettier": "^3.5.3", + "prettier": "^3.8.3", "react": "19.2.3" } } diff --git a/packages/expo-doctor/src/checks/DoctorMultiCheck.ts b/packages/expo-doctor/src/checks/DoctorMultiCheck.ts index c24ad8830297d8..fa4e161bf1fe3e 100644 --- a/packages/expo-doctor/src/checks/DoctorMultiCheck.ts +++ b/packages/expo-doctor/src/checks/DoctorMultiCheck.ts @@ -8,9 +8,9 @@ export interface DoctorMultiCheckItemBase { } // -export abstract class DoctorMultiCheck - implements DoctorCheck -{ +export abstract class DoctorMultiCheck< + TCheckItem extends DoctorMultiCheckItemBase, +> implements DoctorCheck { abstract readonly checkItems: TCheckItem[]; abstract description: string; diff --git a/packages/expo-modules-autolinking/build/autolinking/index.js b/packages/expo-modules-autolinking/build/autolinking/index.js index 66430df4c35359..8022a9cd86e87a 100644 --- a/packages/expo-modules-autolinking/build/autolinking/index.js +++ b/packages/expo-modules-autolinking/build/autolinking/index.js @@ -4,9 +4,9 @@ exports.getConfiguration = void 0; exports.findModulesAsync = apiFindModulesAsync; exports.resolveExtraBuildDependenciesAsync = apiResolveExtraBuildDependenciesAsync; exports.resolveModulesAsync = apiResolveModulesAsync; -const autolinkingOptions_1 = require("../commands/autolinkingOptions"); const findModules_1 = require("./findModules"); const resolveModules_1 = require("./resolveModules"); +const autolinkingOptions_1 = require("../commands/autolinkingOptions"); var getConfiguration_1 = require("./getConfiguration"); Object.defineProperty(exports, "getConfiguration", { enumerable: true, get: function () { return getConfiguration_1.getConfiguration; } }); /** @deprecated */ diff --git a/packages/expo-modules-autolinking/build/autolinking/index.js.map b/packages/expo-modules-autolinking/build/autolinking/index.js.map index 1347808c6f2e28..3351a288405e22 100644 --- a/packages/expo-modules-autolinking/build/autolinking/index.js.map +++ b/packages/expo-modules-autolinking/build/autolinking/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/autolinking/index.ts"],"names":[],"mappings":";;;AA2DyB,+CAAgB;AACE,mFAAkC;AACjD,qDAAmB;AA5D/C,uEAAgF;AAOhF,+CAAiD;AACjD,qDAA2F;AAE3F,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AAgBzB,kBAAkB;AAClB,KAAK,UAAU,mBAAmB,CAAC,eAA8B;IAC/D,MAAM,wBAAwB,GAAG,IAAA,mDAA8B,EAAC,eAAe,CAAC,CAAC;IACjF,OAAO,IAAA,8BAAgB,EAAC;QACtB,OAAO,EAAE,MAAM,wBAAwB,CAAC,UAAU,EAAE;QACpD,kBAAkB,EAAE,MAAM,wBAAwB,CAAC,kBAAkB,CAAC,eAAe,CAAC,QAAQ,CAAC;KAChG,CAAC,CAAC;AACL,CAAC;AAED,kBAAkB;AAClB,KAAK,UAAU,qCAAqC,CAClD,eAA+B;IAE/B,OAAO,IAAA,mDAAkC,EAAC;QACxC,WAAW,EAAE,eAAe,CAAC,WAAW;QACxC,QAAQ,EAAE,eAAe,CAAC,QAAQ;KACnC,CAAC,CAAC;AACL,CAAC;AAED,kBAAkB;AAClB,KAAK,UAAU,sBAAsB,CACnC,aAA4B,EAC5B,eAA8B;IAE9B,MAAM,wBAAwB,GAAG,IAAA,mDAA8B,EAAC,eAAe,CAAC,CAAC;IACjF,OAAO,IAAA,oCAAmB,EACxB,aAAa,EACb,MAAM,wBAAwB,CAAC,kBAAkB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAC5E,CAAC;AACJ,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/autolinking/index.ts"],"names":[],"mappings":";;;AA2DyB,+CAAgB;AACE,mFAAkC;AACjD,qDAAmB;AA7D/C,+CAAiD;AACjD,qDAA2F;AAE3F,uEAAgF;AAQhF,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AAgBzB,kBAAkB;AAClB,KAAK,UAAU,mBAAmB,CAAC,eAA8B;IAC/D,MAAM,wBAAwB,GAAG,IAAA,mDAA8B,EAAC,eAAe,CAAC,CAAC;IACjF,OAAO,IAAA,8BAAgB,EAAC;QACtB,OAAO,EAAE,MAAM,wBAAwB,CAAC,UAAU,EAAE;QACpD,kBAAkB,EAAE,MAAM,wBAAwB,CAAC,kBAAkB,CAAC,eAAe,CAAC,QAAQ,CAAC;KAChG,CAAC,CAAC;AACL,CAAC;AAED,kBAAkB;AAClB,KAAK,UAAU,qCAAqC,CAClD,eAA+B;IAE/B,OAAO,IAAA,mDAAkC,EAAC;QACxC,WAAW,EAAE,eAAe,CAAC,WAAW;QACxC,QAAQ,EAAE,eAAe,CAAC,QAAQ;KACnC,CAAC,CAAC;AACL,CAAC;AAED,kBAAkB;AAClB,KAAK,UAAU,sBAAsB,CACnC,aAA4B,EAC5B,eAA8B;IAE9B,MAAM,wBAAwB,GAAG,IAAA,mDAA8B,EAAC,eAAe,CAAC,CAAC;IACjF,OAAO,IAAA,oCAAmB,EACxB,aAAa,EACb,MAAM,wBAAwB,CAAC,kBAAkB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAC5E,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/packages/expo-modules-autolinking/src/autolinking/index.ts b/packages/expo-modules-autolinking/src/autolinking/index.ts index 878eb9f07844a8..98e087bb69b66b 100644 --- a/packages/expo-modules-autolinking/src/autolinking/index.ts +++ b/packages/expo-modules-autolinking/src/autolinking/index.ts @@ -1,3 +1,5 @@ +import { findModulesAsync } from './findModules'; +import { resolveExtraBuildDependenciesAsync, resolveModulesAsync } from './resolveModules'; import type { AutolinkingOptions } from '../commands/autolinkingOptions'; import { createAutolinkingOptionsLoader } from '../commands/autolinkingOptions'; import type { @@ -6,8 +8,6 @@ import type { SearchResults, SupportedPlatform, } from '../types'; -import { findModulesAsync } from './findModules'; -import { resolveExtraBuildDependenciesAsync, resolveModulesAsync } from './resolveModules'; export { getConfiguration } from './getConfiguration'; diff --git a/packages/expo-modules-core/build/polyfill/CoreModule.d.ts.map b/packages/expo-modules-core/build/polyfill/CoreModule.d.ts.map index 3fd9c0e86f22de..e25f7aab80f1ca 100644 --- a/packages/expo-modules-core/build/polyfill/CoreModule.d.ts.map +++ b/packages/expo-modules-core/build/polyfill/CoreModule.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CoreModule.d.ts","sourceRoot":"","sources":["../../src/polyfill/CoreModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,IAAI,gBAAgB,EAChC,iBAAiB,EAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxF,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE/E,qBAAa,YAAY,CAAC,UAAU,SAAS,SAAS,CAAE,YAAW,gBAAgB;IACjF,OAAO,CAAC,SAAS,CAAC,CAAuC;IAEzD,WAAW,CAAC,SAAS,SAAS,MAAM,UAAU,EAC5C,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAC9B,iBAAiB;IAuBpB,cAAc,CAAC,SAAS,SAAS,MAAM,UAAU,EAC/C,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAC9B,IAAI;IAOP,kBAAkB,CAAC,SAAS,SAAS,MAAM,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAQlF,IAAI,CAAC,SAAS,SAAS,MAAM,UAAU,EACrC,SAAS,EAAE,SAAS,EACpB,GAAG,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GACzC,IAAI;IAeP,aAAa,CAAC,SAAS,SAAS,MAAM,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM;IAI/E,cAAc,CAAC,SAAS,SAAS,MAAM,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAE9E,aAAa,CAAC,SAAS,SAAS,MAAM,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;CAC9E;AAED,qBAAa,YAAY,CAAC,UAAU,SAAS,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAC/D,SAAQ,YAAY,CAAC,UAAU,CAC/B,YAAW,gBAAgB;IAE3B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,cAAc,CAAC,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAChD,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,YAAY,CAAC,UAAU,SAAS,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAC/D,SAAQ,YAAY,CAAC,UAAU,CAC/B,YAAW,gBAAgB;IAE3B,OAAO,IAAI,IAAI;CAGhB;AAED,qBAAa,SAAS,CAClB,cAAc,SAAS,MAAM,GAAG,SAAS,EACzC,UAAU,SAAS,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAErD,SAAQ,YAAY,CAAC,UAAU,CAC/B,YAAW,aAAa,CAAC,cAAc,CAAC;IAExC,aAAa,EAAE,MAAM,CAAa;CACnC"} \ No newline at end of file +{"version":3,"file":"CoreModule.d.ts","sourceRoot":"","sources":["../../src/polyfill/CoreModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,IAAI,gBAAgB,EAChC,iBAAiB,EAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxF,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE/E,qBAAa,YAAY,CAAC,UAAU,SAAS,SAAS,CAAE,YAAW,gBAAgB;IACjF,OAAO,CAAC,SAAS,CAAC,CAAuC;IAEzD,WAAW,CAAC,SAAS,SAAS,MAAM,UAAU,EAC5C,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAC9B,iBAAiB;IAuBpB,cAAc,CAAC,SAAS,SAAS,MAAM,UAAU,EAC/C,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAC9B,IAAI;IAOP,kBAAkB,CAAC,SAAS,SAAS,MAAM,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAQlF,IAAI,CAAC,SAAS,SAAS,MAAM,UAAU,EACrC,SAAS,EAAE,SAAS,EACpB,GAAG,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GACzC,IAAI;IAeP,aAAa,CAAC,SAAS,SAAS,MAAM,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM;IAI/E,cAAc,CAAC,SAAS,SAAS,MAAM,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAE9E,aAAa,CAAC,SAAS,SAAS,MAAM,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;CAC9E;AAED,qBAAa,YAAY,CAAC,UAAU,SAAS,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAC/D,SAAQ,YAAY,CAAC,UAAU,CAC/B,YAAW,gBAAgB;IAE3B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,cAAc,CAAC,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAChD,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,YAAY,CAAC,UAAU,SAAS,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAC/D,SAAQ,YAAY,CAAC,UAAU,CAC/B,YAAW,gBAAgB;IAE3B,OAAO,IAAI,IAAI;CAGhB;AAED,qBAAa,SAAS,CACpB,cAAc,SAAS,MAAM,GAAG,SAAS,EACzC,UAAU,SAAS,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAEnD,SAAQ,YAAY,CAAC,UAAU,CAC/B,YAAW,aAAa,CAAC,cAAc,CAAC;IAExC,aAAa,EAAE,MAAM,CAAa;CACnC"} \ No newline at end of file diff --git a/packages/expo-modules-core/build/ts-declarations/SharedRef.d.ts.map b/packages/expo-modules-core/build/ts-declarations/SharedRef.d.ts.map index 46343e5ae64120..2656f17f5894ae 100644 --- a/packages/expo-modules-core/build/ts-declarations/SharedRef.d.ts.map +++ b/packages/expo-modules-core/build/ts-declarations/SharedRef.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SharedRef.d.ts","sourceRoot":"","sources":["../../src/ts-declarations/SharedRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS,CAC1B,cAAc,SAAS,MAAM,GAAG,SAAS,EACzC,UAAU,SAAS,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAErD,SAAQ,YAAY,CAAC,UAAU,CAC/B,YAAW,YAAY,CAAC,UAAU,CAAC;IAEnC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,cAAc,CAAC;IAE7C;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB"} \ No newline at end of file +{"version":3,"file":"SharedRef.d.ts","sourceRoot":"","sources":["../../src/ts-declarations/SharedRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS,CAC5B,cAAc,SAAS,MAAM,GAAG,SAAS,EACzC,UAAU,SAAS,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAEnD,SAAQ,YAAY,CAAC,UAAU,CAC/B,YAAW,YAAY,CAAC,UAAU,CAAC;IAEnC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,cAAc,CAAC;IAE7C;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB"} \ No newline at end of file diff --git a/packages/expo-modules-core/src/polyfill/CoreModule.ts b/packages/expo-modules-core/src/polyfill/CoreModule.ts index 3839dcb7f12024..54d5978265d714 100644 --- a/packages/expo-modules-core/src/polyfill/CoreModule.ts +++ b/packages/expo-modules-core/src/polyfill/CoreModule.ts @@ -100,9 +100,9 @@ export class SharedObject> } export class SharedRef< - TNativeRefType extends string = 'unknown', - TEventsMap extends EventsMap = Record, - > + TNativeRefType extends string = 'unknown', + TEventsMap extends EventsMap = Record, +> extends SharedObject implements SharedRefType { diff --git a/packages/expo-modules-core/src/ts-declarations/SharedRef.ts b/packages/expo-modules-core/src/ts-declarations/SharedRef.ts index 064e1dc730e4de..319056adf56d59 100644 --- a/packages/expo-modules-core/src/ts-declarations/SharedRef.ts +++ b/packages/expo-modules-core/src/ts-declarations/SharedRef.ts @@ -11,9 +11,9 @@ import type { SharedObject } from './SharedObject'; * directly to the image view from `expo-image` without any additional writes and reads from the file system. */ export declare class SharedRef< - TNativeRefType extends string = 'unknown', - TEventsMap extends EventsMap = Record, - > + TNativeRefType extends string = 'unknown', + TEventsMap extends EventsMap = Record, +> extends SharedObject implements SharedObject { diff --git a/packages/expo-modules-test-core/package.json b/packages/expo-modules-test-core/package.json index f8d2b508314e28..dcd55e920709ef 100644 --- a/packages/expo-modules-test-core/package.json +++ b/packages/expo-modules-test-core/package.json @@ -33,7 +33,7 @@ "dependencies": { "@types/node": "^22.14.0", "glob": "^13.0.0", - "prettier": "^3.0.3", + "prettier": "^3.8.3", "xml-js": "^1.6.11", "yaml": "^2.8.3", "expo-type-information": "workspace:^0.0.1" diff --git a/packages/expo-router/build/link/zoom/useZoomHref.ios.d.ts.map b/packages/expo-router/build/link/zoom/useZoomHref.ios.d.ts.map index cefaaff76bc0ce..5ee6f868a1464e 100644 --- a/packages/expo-router/build/link/zoom/useZoomHref.ios.d.ts.map +++ b/packages/expo-router/build/link/zoom/useZoomHref.ios.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"useZoomHref.ios.d.ts","sourceRoot":"","sources":["../../../src/link/zoom/useZoomHref.ios.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,uCA8B9C"} \ No newline at end of file +{"version":3,"file":"useZoomHref.ios.d.ts","sourceRoot":"","sources":["../../../src/link/zoom/useZoomHref.ios.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,uCA8B9C"} \ No newline at end of file diff --git a/packages/expo-router/build/link/zoom/useZoomHref.ios.js b/packages/expo-router/build/link/zoom/useZoomHref.ios.js index a4e5378beb9174..df380e21fc2f9a 100644 --- a/packages/expo-router/build/link/zoom/useZoomHref.ios.js +++ b/packages/expo-router/build/link/zoom/useZoomHref.ios.js @@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.useZoomHref = useZoomHref; const react_1 = require("react"); +const zoom_transition_context_1 = require("./zoom-transition-context"); const navigationParams_1 = require("../../navigationParams"); const url_1 = require("../../utils/url"); -const zoom_transition_context_1 = require("./zoom-transition-context"); function useZoomHref({ href }) { const value = (0, react_1.use)(zoom_transition_context_1.ZoomTransitionSourceContext); if (!value) { diff --git a/packages/expo-router/build/link/zoom/useZoomHref.ios.js.map b/packages/expo-router/build/link/zoom/useZoomHref.ios.js.map index 39f2f7a5dda715..d18f5de13240c5 100644 --- a/packages/expo-router/build/link/zoom/useZoomHref.ios.js.map +++ b/packages/expo-router/build/link/zoom/useZoomHref.ios.js.map @@ -1 +1 @@ -{"version":3,"file":"useZoomHref.ios.js","sourceRoot":"","sources":["../../../src/link/zoom/useZoomHref.ios.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AASb,kCA8BC;AArCD,iCAAqC;AAErC,6DAAmG;AACnG,yCAA0D;AAE1D,uEAAwE;AAExE,SAAgB,WAAW,CAAC,EAAE,IAAI,EAAa;IAC7C,MAAM,KAAK,GAAG,IAAA,WAAG,EAAC,qDAA2B,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,gIAAgI,CACjI,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAC5C,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE;QAClB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAA,6BAAuB,EAAC,IAAI,CAAC,CAAC;YACjE,OAAO;gBACL,QAAQ;gBACR,MAAM,EAAE;oBACN,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;oBAC7C,CAAC,4EAAyD,CAAC,EAAE,UAAU;iBACxE;aACF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE;gBACN,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;gBACtB,CAAC,4EAAyD,CAAC,EAAE,UAAU;aACxE;SACF,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;AACxC,CAAC","sourcesContent":["'use client';\n\nimport { use, useMemo } from 'react';\n\nimport { INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME } from '../../navigationParams';\nimport { parseUrlUsingCustomBase } from '../../utils/url';\nimport type { LinkProps } from '../useLinkHooks';\nimport { ZoomTransitionSourceContext } from './zoom-transition-context';\n\nexport function useZoomHref({ href }: LinkProps) {\n const value = use(ZoomTransitionSourceContext);\n if (!value) {\n throw new Error(\n '[expo-router] useZoomHref must be used within a ZoomTransitionSourceContextProvider. This is most likely a bug in expo-router.'\n );\n }\n const { hasZoomSource, identifier } = value;\n return useMemo(() => {\n if (!hasZoomSource) {\n return href;\n }\n if (typeof href === 'string') {\n const { pathname, searchParams } = parseUrlUsingCustomBase(href);\n return {\n pathname,\n params: {\n ...Object.fromEntries(searchParams.entries()),\n [INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME]: identifier,\n },\n };\n }\n return {\n pathname: href.pathname,\n params: {\n ...(href.params ?? {}),\n [INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME]: identifier,\n },\n };\n }, [href, identifier, hasZoomSource]);\n}\n"]} \ No newline at end of file +{"version":3,"file":"useZoomHref.ios.js","sourceRoot":"","sources":["../../../src/link/zoom/useZoomHref.ios.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AASb,kCA8BC;AArCD,iCAAqC;AAErC,uEAAwE;AACxE,6DAAmG;AACnG,yCAA0D;AAG1D,SAAgB,WAAW,CAAC,EAAE,IAAI,EAAa;IAC7C,MAAM,KAAK,GAAG,IAAA,WAAG,EAAC,qDAA2B,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,gIAAgI,CACjI,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAC5C,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE;QAClB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAA,6BAAuB,EAAC,IAAI,CAAC,CAAC;YACjE,OAAO;gBACL,QAAQ;gBACR,MAAM,EAAE;oBACN,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;oBAC7C,CAAC,4EAAyD,CAAC,EAAE,UAAU;iBACxE;aACF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE;gBACN,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;gBACtB,CAAC,4EAAyD,CAAC,EAAE,UAAU;aACxE;SACF,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;AACxC,CAAC","sourcesContent":["'use client';\n\nimport { use, useMemo } from 'react';\n\nimport { ZoomTransitionSourceContext } from './zoom-transition-context';\nimport { INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME } from '../../navigationParams';\nimport { parseUrlUsingCustomBase } from '../../utils/url';\nimport type { LinkProps } from '../useLinkHooks';\n\nexport function useZoomHref({ href }: LinkProps) {\n const value = use(ZoomTransitionSourceContext);\n if (!value) {\n throw new Error(\n '[expo-router] useZoomHref must be used within a ZoomTransitionSourceContextProvider. This is most likely a bug in expo-router.'\n );\n }\n const { hasZoomSource, identifier } = value;\n return useMemo(() => {\n if (!hasZoomSource) {\n return href;\n }\n if (typeof href === 'string') {\n const { pathname, searchParams } = parseUrlUsingCustomBase(href);\n return {\n pathname,\n params: {\n ...Object.fromEntries(searchParams.entries()),\n [INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME]: identifier,\n },\n };\n }\n return {\n pathname: href.pathname,\n params: {\n ...(href.params ?? {}),\n [INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME]: identifier,\n },\n };\n }, [href, identifier, hasZoomSource]);\n}\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/native-tabs/types.d.ts.map b/packages/expo-router/build/native-tabs/types.d.ts.map index 85012d06dd44fb..f5858ddfa5cc3e 100644 --- a/packages/expo-router/build/native-tabs/types.d.ts.map +++ b/packages/expo-router/build/native-tabs/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/expo-router/build/native-tabs/types.js.map b/packages/expo-router/build/native-tabs/types.js.map index 54b3feca7071ee..07093f351ad28f 100644 --- a/packages/expo-router/build/native-tabs/types.js.map +++ b/packages/expo-router/build/native-tabs/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":";;;AAoIa,QAAA,sBAAsB,GAAG;IACpC,MAAM;IACN,eAAe;IACf,YAAY;IACZ,OAAO;IACP,MAAM;IACN,SAAS;IACT,WAAW;IACX,yBAAyB;IACzB,oBAAoB;IACpB,gBAAgB;IAChB,qBAAqB;IACrB,sBAAsB;IACtB,8BAA8B;IAC9B,yBAAyB;IACzB,qBAAqB;IACrB,0BAA0B;IAC1B,2BAA2B;IAC3B,6BAA6B;IAC7B,wBAAwB;IACxB,oBAAoB;IACpB,yBAAyB;IACzB,0BAA0B;CAClB,CAAC;AA8OE,QAAA,6CAA6C,GAAG;IAC3D,MAAM;IACN,UAAU;IACV,SAAS;IACT,WAAW;CACH,CAAC;AAUE,QAAA,oCAAoC,GAAG;IAClD,WAAW;IACX,OAAO;IACP,cAAc;IACd,YAAY;CACJ,CAAC;AAkJX,MAAM,4BAA4B,GAAG;IACnC,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,SAAS;IACT,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,UAAU;CACF,CAAC","sourcesContent":["import type { PropsWithChildren } from 'react';\nimport type {\n ColorValue,\n ImageSourcePropType,\n StyleProp,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport type { TabsHostProps, TabsScreenProps } from 'react-native-screens';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type {\n DefaultRouterOptions,\n EventMapBase,\n NavigationState,\n ParamListBase,\n RouteProp,\n ScreenListeners,\n TabNavigationState,\n} from '../react-navigation/native';\n\n/**\n * Event map for `NativeTabs` navigation events.\n * Only `tabPress` is currently supported.\n */\nexport type NativeTabNavigationEventMap = {\n tabPress: { data: { __internalTabsType: 'native' }; canPreventDefault: false };\n};\n\nexport type NativeScreenProps = Partial>;\n\n/**\n * Props passed to the underlying tab host implementation in `react-native-screens`.\n */\nexport type NativeTabsHostNativeProps = Partial<\n Omit\n>;\n\nexport interface NativeTabOptions extends DefaultRouterOptions {\n icon?: SymbolOrImageSource;\n selectedIcon?: SymbolOrImageSource;\n title?: string;\n badgeValue?: string;\n selectedLabelStyle?: NativeTabsLabelStyle;\n labelStyle?: NativeTabsLabelStyle;\n role?: NativeTabsTabBarItemRole;\n selectedIconColor?: ColorValue;\n selectedBadgeBackgroundColor?: ColorValue;\n badgeBackgroundColor?: ColorValue;\n badgeTextColor?: ColorValue;\n backgroundColor?: ColorValue;\n blurEffect?: NativeTabsBlurEffect;\n shadowColor?: ColorValue;\n iconColor?: ColorValue;\n disableTransparentOnScrollEdge?: boolean;\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n selectedTitlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n indicatorColor?: ColorValue;\n hidden?: boolean;\n disabled?: boolean;\n specialEffects?: TabsScreenProps['specialEffects'];\n nativeProps?: NativeScreenProps;\n disableAutomaticContentInsets?: boolean;\n contentStyle?: Pick<\n ViewStyle,\n | 'backgroundColor'\n | 'experimental_backgroundImage'\n | 'padding'\n | 'paddingTop'\n | 'paddingBottom'\n | 'paddingLeft'\n | 'paddingRight'\n | 'paddingBlock'\n | 'paddingBlockEnd'\n | 'paddingBlockStart'\n | 'paddingInline'\n | 'paddingInlineEnd'\n | 'paddingInlineStart'\n | 'paddingEnd'\n | 'paddingHorizontal'\n | 'paddingVertical'\n | 'paddingStart'\n | 'alignContent'\n | 'alignItems'\n | 'justifyContent'\n | 'flexDirection'\n | 'gap'\n >;\n}\n\nexport type SymbolOrImageSource =\n | {\n /**\n * The name of the SF Symbol to use as an icon.\n * @platform iOS\n */\n sf?: SFSymbol;\n /**\n * The name of the iOS asset catalog image to use as an icon.\n * @platform iOS\n */\n xcasset?: string;\n /**\n * The name of the drawable resource to use as an icon.\n * @platform android\n */\n drawable?: string;\n }\n | {\n /**\n * The image source to use as an icon.\n */\n src?: ImageSourcePropType | Promise;\n /**\n * Controls how the icon is rendered on iOS.\n * @platform ios\n * @default 'template'\n */\n renderingMode?: 'template' | 'original';\n };\n\nexport type NativeTabsLabelStyle = Pick<\n TextStyle,\n 'fontFamily' | 'fontSize' | 'fontStyle' | 'fontWeight' | 'color'\n>;\n\nexport const SUPPORTED_BLUR_EFFECTS = [\n 'none',\n 'systemDefault',\n 'extraLight',\n 'light',\n 'dark',\n 'regular',\n 'prominent',\n 'systemUltraThinMaterial',\n 'systemThinMaterial',\n 'systemMaterial',\n 'systemThickMaterial',\n 'systemChromeMaterial',\n 'systemUltraThinMaterialLight',\n 'systemThinMaterialLight',\n 'systemMaterialLight',\n 'systemThickMaterialLight',\n 'systemChromeMaterialLight',\n 'systemUltraThinMaterialDark',\n 'systemThinMaterialDark',\n 'systemMaterialDark',\n 'systemThickMaterialDark',\n 'systemChromeMaterialDark',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiblureffect/style)\n */\nexport type NativeTabsBlurEffect = (typeof SUPPORTED_BLUR_EFFECTS)[number];\n\nexport interface NativeTabsProps extends PropsWithChildren {\n // #region common props\n /**\n * The style of the every tab label in the tab bar.\n */\n labelStyle?:\n | StyleProp\n | {\n default?: StyleProp;\n selected?: StyleProp;\n };\n /**\n * The color of every tab icon in the tab bar.\n */\n iconColor?: ColorValue | { default?: ColorValue; selected?: ColorValue };\n /**\n * The tint color of the tab icon.\n *\n * Can be overridden by icon color and label color for each tab individually.\n */\n tintColor?: ColorValue;\n /**\n * The background color of the tab bar.\n */\n backgroundColor?: ColorValue;\n /**\n * The background color of every badge in the tab bar.\n */\n badgeBackgroundColor?: ColorValue;\n /**\n * When set to `true`, hides the tab bar.\n *\n * @default false\n */\n hidden?: boolean;\n // #endregion common props\n // #region iOS props\n /**\n * Specifies the minimize behavior for the tab bar.\n *\n * Available starting from iOS 26.\n *\n * The following values are currently supported:\n *\n * - `automatic` - resolves to the system default minimize behavior\n * - `never` - the tab bar does not minimize\n * - `onScrollDown` - the tab bar minimizes when scrolling down and\n * expands when scrolling back up\n * - `onScrollUp` - the tab bar minimizes when scrolling up and expands\n * when scrolling back down\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior).\n *\n * @default automatic\n *\n * @platform iOS 26+\n */\n minimizeBehavior?: NativeTabsTabBarMinimizeBehavior;\n /**\n * The blur effect applied to the tab bar.\n *\n * @platform iOS\n */\n blurEffect?: NativeTabsBlurEffect;\n /**\n * The color of the shadow.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarappearance/shadowcolor)\n *\n * @platform iOS\n */\n shadowColor?: ColorValue;\n /**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/titlepositionadjustment)\n *\n * @platform iOS\n */\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * When set to `true`, enables the sidebarAdaptable tab bar style on iPadOS and macOS. This prop has no effect on iPhone.\n *\n * @platform iOS 18+\n */\n sidebarAdaptable?: boolean;\n // #endregion iOS props\n // #region android props\n /**\n * Disables the active indicator for the tab bar.\n *\n * @platform android\n */\n disableIndicator?: boolean;\n /**\n * The behavior when navigating back with the back button.\n *\n * @platform android\n */\n backBehavior?: 'none' | 'initialRoute' | 'history';\n /**\n * The visibility mode of the tab item label.\n *\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\n labelVisibilityMode?: NativeTabsTabBarItemLabelVisibilityMode;\n /**\n * The color of the ripple effect when the tab is pressed.\n *\n * @platform android\n */\n rippleColor?: ColorValue;\n /**\n * The color of the tab indicator.\n *\n * @platform android\n * @platform web\n */\n indicatorColor?: ColorValue;\n /**\n * The color of the badge text.\n *\n * @platform android\n * @platform web\n */\n badgeTextColor?: ColorValue;\n /**\n * When `true`, the tab bar lifts above the keyboard (input method editor, or IME) instead of being overlaid by it. By default, the keyboard overlays the tab bar.\n *\n * Requires `windowSoftInputMode=\"adjustResize\"`. Has no effect on Android API levels earlier than 30 (Android 11).\n *\n * @default false\n * @platform android\n */\n tabBarRespectsIMEInsets?: boolean;\n // #endregion android props\n /**\n * Listeners for navigation events on all tabs.\n *\n * Supported events:\n * - `tabPress` - called when a tab is pressed\n * - `focus` - called when the screen comes into focus\n * - `blur` - called when the screen loses focus\n *\n * @example\n * ```tsx\n * {\n * console.log('Any tab pressed');\n * },\n * }}\n * >\n * ...\n * \n * ```\n */\n screenListeners?:\n | ScreenListeners, NativeTabNavigationEventMap>\n | ((prop: {\n route: RouteProp;\n }) => ScreenListeners, NativeTabNavigationEventMap>);\n /**\n * Props passed to the underlying native tab host implementation in `react-native-screens`.\n * Use this to configure props that are not directly exposed by Expo Router.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform ios\n */\n unstable_nativeProps?: NativeTabsHostNativeProps;\n}\n\nexport interface InternalNativeTabsProps extends NativeTabsProps {\n nonTriggerChildren?: React.ReactNode;\n}\nexport interface OnTabChangeEventPayload {\n /**\n * The route key of the tab the native side has just selected.\n */\n selectedKey: string;\n /**\n * The provenance value reported by the native side for this selection.\n *\n * The navigator echoes this back via `navStateRequest.baseProvenance` on\n * subsequent JS-driven updates so the native side can distinguish stale\n * updates from fresh ones. See `TabsHostNavStateRequest` in\n * `react-native-screens` for the full contract.\n */\n provenance: number;\n // TODO(@ubax): consider renaming this field\n isNativeAction: boolean;\n}\n\nexport interface NativeTabsViewProps\n extends Omit<\n InternalNativeTabsProps,\n | 'labelStyle'\n | 'iconColor'\n | 'backgroundColor'\n | 'badgeBackgroundColor'\n | 'blurEffect'\n | 'indicatorColor'\n | 'badgeTextColor'\n > {\n focusedIndex: number;\n /**\n * Provenance counter associated with the currently rendered `focusedIndex`.\n */\n provenance: number;\n tabs: NativeTabsViewTabItem[];\n onTabChange: (event: OnTabChangeEventPayload) => void;\n}\n\nexport interface NativeTabsViewTabItem {\n options: NativeTabOptions;\n routeKey: string;\n name: string;\n contentRenderer: () => React.ReactNode;\n}\n\nexport const SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES = [\n 'auto',\n 'selected',\n 'labeled',\n 'unlabeled',\n] as const;\n\n/**\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\nexport type NativeTabsTabBarItemLabelVisibilityMode =\n (typeof SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES)[number];\n\nexport const SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS = [\n 'automatic',\n 'never',\n 'onScrollDown',\n 'onScrollUp',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)\n *\n * @platform iOS 26\n */\nexport type NativeTabsTabBarMinimizeBehavior =\n (typeof SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS)[number];\n\nexport interface NativeTabTriggerProps {\n /**\n * The name of the route.\n *\n * This is required when used inside a Layout component.\n *\n * When used in a route it has no effect.\n */\n name?: string;\n /**\n * If true, the tab will be hidden from the tab bar.\n *\n * > **Note**: Marking a tab as `hidden` means it cannot be navigated to in any way.\n *\n * > **Note**: Dynamically hiding tabs will remount the navigator and the state will be reset.\n */\n hidden?: boolean;\n /**\n * Props passed to the underlying native tab screen implementation.\n * Use this to configure props not directly exposed by Expo Router, but available in `react-native-screens`.\n *\n * > **Note**: This will override any other props set by Expo Router and may lead to unexpected behavior.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform iOS\n */\n unstable_nativeProps?: NativeScreenProps;\n /**\n * If true, the tab will not pop stack to the root when selected again.\n *\n * @default false\n * @platform iOS\n */\n disablePopToTop?: boolean;\n /**\n * If true, the tab will not scroll to the top when selected again.\n * @default false\n *\n * @platform iOS\n */\n disableScrollToTop?: boolean;\n /**\n * If `true`, the tab is shown but cannot be selected by tapping it in the\n * tab bar.\n *\n * > **Note:** This only suppresses the native tap interaction. JavaScript\n * > navigation such as `router.push()` or `` still navigates to\n * > the tab. Use this for tabs that should appear visible but be temporarily inert,\n * > and gate navigation in your own code if you need to fully prevent access.\n *\n * Unlike `hidden`, the tab remains visible in the tab bar.\n *\n * @default false\n *\n * @platform android\n * @platform ios\n */\n disabled?: boolean;\n /**\n * The children of the trigger.\n *\n * Use `Icon`, `Label`, and `Badge` components to customize the tab.\n */\n children?: React.ReactNode;\n /**\n * System-provided tab bar item with predefined icon and title\n *\n * Uses Apple's built-in tab bar items (e.g., bookmarks, contacts, downloads) with\n * standard iOS styling and localized titles. Custom `icon` or `selectedIcon`\n * properties will override the system icon, but the system-defined title cannot\n * be customized.\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem).\n * @platform ios\n */\n role?: NativeTabsTabBarItemRole;\n /**\n * The default behavior differs between iOS and Android.\n *\n * On **Android**, the content of a native tabs screen is automatically wrapped in a `SafeAreaView`,\n * and the **bottom** inset is applied. Other insets must be handled manually.\n *\n * On **iOS**, the first scroll view nested inside a native tabs screen has\n * [automatic content inset adjustment](https://reactnative.dev/docs/scrollview#contentinsetadjustmentbehavior-ios) enabled\n *\n * When this property is set to `true`, automatic content inset adjustment is disabled for the screen\n * and must be managed manually. You can use `SafeAreaView` from `react-native-screens/experimental`\n * to handle safe area insets.\n *\n * @platform android\n * @platform ios\n */\n disableAutomaticContentInsets?: boolean;\n /**\n * The style applied to the content of the tab\n *\n * Note: Only certain style properties are supported.\n */\n contentStyle?: NativeTabOptions['contentStyle'];\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * When set on a trigger, it takes precedence over the value set on `NativeTabs`.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * Listeners for navigation events on this tab.\n *\n * Supported events:\n * - `tabPress` - called when this tab is pressed\n * - `focus` - called when this screen comes into focus\n * - `blur` - called when this screen loses focus\n *\n * @example\n * ```tsx\n * {\n * console.log('Home tab pressed');\n * },\n * }}\n * />\n * ```\n */\n listeners?:\n | ScreenListeners\n | ((prop: {\n route: RouteProp;\n }) => ScreenListeners);\n}\n\nconst SUPPORTED_TAB_BAR_ITEM_ROLES = [\n 'bookmarks',\n 'contacts',\n 'downloads',\n 'favorites',\n 'featured',\n 'history',\n 'more',\n 'mostRecent',\n 'mostViewed',\n 'recents',\n 'search',\n 'topRated',\n] as const;\n\nexport type NativeTabsTabBarItemRole = (typeof SUPPORTED_TAB_BAR_ITEM_ROLES)[number];\n"]} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":";;;AAoIa,QAAA,sBAAsB,GAAG;IACpC,MAAM;IACN,eAAe;IACf,YAAY;IACZ,OAAO;IACP,MAAM;IACN,SAAS;IACT,WAAW;IACX,yBAAyB;IACzB,oBAAoB;IACpB,gBAAgB;IAChB,qBAAqB;IACrB,sBAAsB;IACtB,8BAA8B;IAC9B,yBAAyB;IACzB,qBAAqB;IACrB,0BAA0B;IAC1B,2BAA2B;IAC3B,6BAA6B;IAC7B,wBAAwB;IACxB,oBAAoB;IACpB,yBAAyB;IACzB,0BAA0B;CAClB,CAAC;AA6OE,QAAA,6CAA6C,GAAG;IAC3D,MAAM;IACN,UAAU;IACV,SAAS;IACT,WAAW;CACH,CAAC;AAUE,QAAA,oCAAoC,GAAG;IAClD,WAAW;IACX,OAAO;IACP,cAAc;IACd,YAAY;CACJ,CAAC;AAkJX,MAAM,4BAA4B,GAAG;IACnC,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,SAAS;IACT,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,UAAU;CACF,CAAC","sourcesContent":["import type { PropsWithChildren } from 'react';\nimport type {\n ColorValue,\n ImageSourcePropType,\n StyleProp,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport type { TabsHostProps, TabsScreenProps } from 'react-native-screens';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type {\n DefaultRouterOptions,\n EventMapBase,\n NavigationState,\n ParamListBase,\n RouteProp,\n ScreenListeners,\n TabNavigationState,\n} from '../react-navigation/native';\n\n/**\n * Event map for `NativeTabs` navigation events.\n * Only `tabPress` is currently supported.\n */\nexport type NativeTabNavigationEventMap = {\n tabPress: { data: { __internalTabsType: 'native' }; canPreventDefault: false };\n};\n\nexport type NativeScreenProps = Partial>;\n\n/**\n * Props passed to the underlying tab host implementation in `react-native-screens`.\n */\nexport type NativeTabsHostNativeProps = Partial<\n Omit\n>;\n\nexport interface NativeTabOptions extends DefaultRouterOptions {\n icon?: SymbolOrImageSource;\n selectedIcon?: SymbolOrImageSource;\n title?: string;\n badgeValue?: string;\n selectedLabelStyle?: NativeTabsLabelStyle;\n labelStyle?: NativeTabsLabelStyle;\n role?: NativeTabsTabBarItemRole;\n selectedIconColor?: ColorValue;\n selectedBadgeBackgroundColor?: ColorValue;\n badgeBackgroundColor?: ColorValue;\n badgeTextColor?: ColorValue;\n backgroundColor?: ColorValue;\n blurEffect?: NativeTabsBlurEffect;\n shadowColor?: ColorValue;\n iconColor?: ColorValue;\n disableTransparentOnScrollEdge?: boolean;\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n selectedTitlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n indicatorColor?: ColorValue;\n hidden?: boolean;\n disabled?: boolean;\n specialEffects?: TabsScreenProps['specialEffects'];\n nativeProps?: NativeScreenProps;\n disableAutomaticContentInsets?: boolean;\n contentStyle?: Pick<\n ViewStyle,\n | 'backgroundColor'\n | 'experimental_backgroundImage'\n | 'padding'\n | 'paddingTop'\n | 'paddingBottom'\n | 'paddingLeft'\n | 'paddingRight'\n | 'paddingBlock'\n | 'paddingBlockEnd'\n | 'paddingBlockStart'\n | 'paddingInline'\n | 'paddingInlineEnd'\n | 'paddingInlineStart'\n | 'paddingEnd'\n | 'paddingHorizontal'\n | 'paddingVertical'\n | 'paddingStart'\n | 'alignContent'\n | 'alignItems'\n | 'justifyContent'\n | 'flexDirection'\n | 'gap'\n >;\n}\n\nexport type SymbolOrImageSource =\n | {\n /**\n * The name of the SF Symbol to use as an icon.\n * @platform iOS\n */\n sf?: SFSymbol;\n /**\n * The name of the iOS asset catalog image to use as an icon.\n * @platform iOS\n */\n xcasset?: string;\n /**\n * The name of the drawable resource to use as an icon.\n * @platform android\n */\n drawable?: string;\n }\n | {\n /**\n * The image source to use as an icon.\n */\n src?: ImageSourcePropType | Promise;\n /**\n * Controls how the icon is rendered on iOS.\n * @platform ios\n * @default 'template'\n */\n renderingMode?: 'template' | 'original';\n };\n\nexport type NativeTabsLabelStyle = Pick<\n TextStyle,\n 'fontFamily' | 'fontSize' | 'fontStyle' | 'fontWeight' | 'color'\n>;\n\nexport const SUPPORTED_BLUR_EFFECTS = [\n 'none',\n 'systemDefault',\n 'extraLight',\n 'light',\n 'dark',\n 'regular',\n 'prominent',\n 'systemUltraThinMaterial',\n 'systemThinMaterial',\n 'systemMaterial',\n 'systemThickMaterial',\n 'systemChromeMaterial',\n 'systemUltraThinMaterialLight',\n 'systemThinMaterialLight',\n 'systemMaterialLight',\n 'systemThickMaterialLight',\n 'systemChromeMaterialLight',\n 'systemUltraThinMaterialDark',\n 'systemThinMaterialDark',\n 'systemMaterialDark',\n 'systemThickMaterialDark',\n 'systemChromeMaterialDark',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiblureffect/style)\n */\nexport type NativeTabsBlurEffect = (typeof SUPPORTED_BLUR_EFFECTS)[number];\n\nexport interface NativeTabsProps extends PropsWithChildren {\n // #region common props\n /**\n * The style of the every tab label in the tab bar.\n */\n labelStyle?:\n | StyleProp\n | {\n default?: StyleProp;\n selected?: StyleProp;\n };\n /**\n * The color of every tab icon in the tab bar.\n */\n iconColor?: ColorValue | { default?: ColorValue; selected?: ColorValue };\n /**\n * The tint color of the tab icon.\n *\n * Can be overridden by icon color and label color for each tab individually.\n */\n tintColor?: ColorValue;\n /**\n * The background color of the tab bar.\n */\n backgroundColor?: ColorValue;\n /**\n * The background color of every badge in the tab bar.\n */\n badgeBackgroundColor?: ColorValue;\n /**\n * When set to `true`, hides the tab bar.\n *\n * @default false\n */\n hidden?: boolean;\n // #endregion common props\n // #region iOS props\n /**\n * Specifies the minimize behavior for the tab bar.\n *\n * Available starting from iOS 26.\n *\n * The following values are currently supported:\n *\n * - `automatic` - resolves to the system default minimize behavior\n * - `never` - the tab bar does not minimize\n * - `onScrollDown` - the tab bar minimizes when scrolling down and\n * expands when scrolling back up\n * - `onScrollUp` - the tab bar minimizes when scrolling up and expands\n * when scrolling back down\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior).\n *\n * @default automatic\n *\n * @platform iOS 26+\n */\n minimizeBehavior?: NativeTabsTabBarMinimizeBehavior;\n /**\n * The blur effect applied to the tab bar.\n *\n * @platform iOS\n */\n blurEffect?: NativeTabsBlurEffect;\n /**\n * The color of the shadow.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarappearance/shadowcolor)\n *\n * @platform iOS\n */\n shadowColor?: ColorValue;\n /**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/titlepositionadjustment)\n *\n * @platform iOS\n */\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * When set to `true`, enables the sidebarAdaptable tab bar style on iPadOS and macOS. This prop has no effect on iPhone.\n *\n * @platform iOS 18+\n */\n sidebarAdaptable?: boolean;\n // #endregion iOS props\n // #region android props\n /**\n * Disables the active indicator for the tab bar.\n *\n * @platform android\n */\n disableIndicator?: boolean;\n /**\n * The behavior when navigating back with the back button.\n *\n * @platform android\n */\n backBehavior?: 'none' | 'initialRoute' | 'history';\n /**\n * The visibility mode of the tab item label.\n *\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\n labelVisibilityMode?: NativeTabsTabBarItemLabelVisibilityMode;\n /**\n * The color of the ripple effect when the tab is pressed.\n *\n * @platform android\n */\n rippleColor?: ColorValue;\n /**\n * The color of the tab indicator.\n *\n * @platform android\n * @platform web\n */\n indicatorColor?: ColorValue;\n /**\n * The color of the badge text.\n *\n * @platform android\n * @platform web\n */\n badgeTextColor?: ColorValue;\n /**\n * When `true`, the tab bar lifts above the keyboard (input method editor, or IME) instead of being overlaid by it. By default, the keyboard overlays the tab bar.\n *\n * Requires `windowSoftInputMode=\"adjustResize\"`. Has no effect on Android API levels earlier than 30 (Android 11).\n *\n * @default false\n * @platform android\n */\n tabBarRespectsIMEInsets?: boolean;\n // #endregion android props\n /**\n * Listeners for navigation events on all tabs.\n *\n * Supported events:\n * - `tabPress` - called when a tab is pressed\n * - `focus` - called when the screen comes into focus\n * - `blur` - called when the screen loses focus\n *\n * @example\n * ```tsx\n * {\n * console.log('Any tab pressed');\n * },\n * }}\n * >\n * ...\n * \n * ```\n */\n screenListeners?:\n | ScreenListeners, NativeTabNavigationEventMap>\n | ((prop: {\n route: RouteProp;\n }) => ScreenListeners, NativeTabNavigationEventMap>);\n /**\n * Props passed to the underlying native tab host implementation in `react-native-screens`.\n * Use this to configure props that are not directly exposed by Expo Router.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform ios\n */\n unstable_nativeProps?: NativeTabsHostNativeProps;\n}\n\nexport interface InternalNativeTabsProps extends NativeTabsProps {\n nonTriggerChildren?: React.ReactNode;\n}\nexport interface OnTabChangeEventPayload {\n /**\n * The route key of the tab the native side has just selected.\n */\n selectedKey: string;\n /**\n * The provenance value reported by the native side for this selection.\n *\n * The navigator echoes this back via `navStateRequest.baseProvenance` on\n * subsequent JS-driven updates so the native side can distinguish stale\n * updates from fresh ones. See `TabsHostNavStateRequest` in\n * `react-native-screens` for the full contract.\n */\n provenance: number;\n // TODO(@ubax): consider renaming this field\n isNativeAction: boolean;\n}\n\nexport interface NativeTabsViewProps extends Omit<\n InternalNativeTabsProps,\n | 'labelStyle'\n | 'iconColor'\n | 'backgroundColor'\n | 'badgeBackgroundColor'\n | 'blurEffect'\n | 'indicatorColor'\n | 'badgeTextColor'\n> {\n focusedIndex: number;\n /**\n * Provenance counter associated with the currently rendered `focusedIndex`.\n */\n provenance: number;\n tabs: NativeTabsViewTabItem[];\n onTabChange: (event: OnTabChangeEventPayload) => void;\n}\n\nexport interface NativeTabsViewTabItem {\n options: NativeTabOptions;\n routeKey: string;\n name: string;\n contentRenderer: () => React.ReactNode;\n}\n\nexport const SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES = [\n 'auto',\n 'selected',\n 'labeled',\n 'unlabeled',\n] as const;\n\n/**\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\nexport type NativeTabsTabBarItemLabelVisibilityMode =\n (typeof SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES)[number];\n\nexport const SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS = [\n 'automatic',\n 'never',\n 'onScrollDown',\n 'onScrollUp',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)\n *\n * @platform iOS 26\n */\nexport type NativeTabsTabBarMinimizeBehavior =\n (typeof SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS)[number];\n\nexport interface NativeTabTriggerProps {\n /**\n * The name of the route.\n *\n * This is required when used inside a Layout component.\n *\n * When used in a route it has no effect.\n */\n name?: string;\n /**\n * If true, the tab will be hidden from the tab bar.\n *\n * > **Note**: Marking a tab as `hidden` means it cannot be navigated to in any way.\n *\n * > **Note**: Dynamically hiding tabs will remount the navigator and the state will be reset.\n */\n hidden?: boolean;\n /**\n * Props passed to the underlying native tab screen implementation.\n * Use this to configure props not directly exposed by Expo Router, but available in `react-native-screens`.\n *\n * > **Note**: This will override any other props set by Expo Router and may lead to unexpected behavior.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform iOS\n */\n unstable_nativeProps?: NativeScreenProps;\n /**\n * If true, the tab will not pop stack to the root when selected again.\n *\n * @default false\n * @platform iOS\n */\n disablePopToTop?: boolean;\n /**\n * If true, the tab will not scroll to the top when selected again.\n * @default false\n *\n * @platform iOS\n */\n disableScrollToTop?: boolean;\n /**\n * If `true`, the tab is shown but cannot be selected by tapping it in the\n * tab bar.\n *\n * > **Note:** This only suppresses the native tap interaction. JavaScript\n * > navigation such as `router.push()` or `` still navigates to\n * > the tab. Use this for tabs that should appear visible but be temporarily inert,\n * > and gate navigation in your own code if you need to fully prevent access.\n *\n * Unlike `hidden`, the tab remains visible in the tab bar.\n *\n * @default false\n *\n * @platform android\n * @platform ios\n */\n disabled?: boolean;\n /**\n * The children of the trigger.\n *\n * Use `Icon`, `Label`, and `Badge` components to customize the tab.\n */\n children?: React.ReactNode;\n /**\n * System-provided tab bar item with predefined icon and title\n *\n * Uses Apple's built-in tab bar items (e.g., bookmarks, contacts, downloads) with\n * standard iOS styling and localized titles. Custom `icon` or `selectedIcon`\n * properties will override the system icon, but the system-defined title cannot\n * be customized.\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem).\n * @platform ios\n */\n role?: NativeTabsTabBarItemRole;\n /**\n * The default behavior differs between iOS and Android.\n *\n * On **Android**, the content of a native tabs screen is automatically wrapped in a `SafeAreaView`,\n * and the **bottom** inset is applied. Other insets must be handled manually.\n *\n * On **iOS**, the first scroll view nested inside a native tabs screen has\n * [automatic content inset adjustment](https://reactnative.dev/docs/scrollview#contentinsetadjustmentbehavior-ios) enabled\n *\n * When this property is set to `true`, automatic content inset adjustment is disabled for the screen\n * and must be managed manually. You can use `SafeAreaView` from `react-native-screens/experimental`\n * to handle safe area insets.\n *\n * @platform android\n * @platform ios\n */\n disableAutomaticContentInsets?: boolean;\n /**\n * The style applied to the content of the tab\n *\n * Note: Only certain style properties are supported.\n */\n contentStyle?: NativeTabOptions['contentStyle'];\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * When set on a trigger, it takes precedence over the value set on `NativeTabs`.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * Listeners for navigation events on this tab.\n *\n * Supported events:\n * - `tabPress` - called when this tab is pressed\n * - `focus` - called when this screen comes into focus\n * - `blur` - called when this screen loses focus\n *\n * @example\n * ```tsx\n * {\n * console.log('Home tab pressed');\n * },\n * }}\n * />\n * ```\n */\n listeners?:\n | ScreenListeners\n | ((prop: {\n route: RouteProp;\n }) => ScreenListeners);\n}\n\nconst SUPPORTED_TAB_BAR_ITEM_ROLES = [\n 'bookmarks',\n 'contacts',\n 'downloads',\n 'favorites',\n 'featured',\n 'history',\n 'more',\n 'mostRecent',\n 'mostViewed',\n 'recents',\n 'search',\n 'topRated',\n] as const;\n\nexport type NativeTabsTabBarItemRole = (typeof SUPPORTED_TAB_BAR_ITEM_ROLES)[number];\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.d.ts.map b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.d.ts.map index eeb9a9a5f58293..379081e988c51e 100644 --- a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.d.ts.map +++ b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BottomTabBar.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/bottom-tabs/views/BottomTabBar.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAGR,KAAK,SAAS,EAGd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAIxB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAK1E,KAAK,KAAK,GAAG,iBAAiB,GAAG;IAC/B,KAAK,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;CAC1D,CAAC;AAUF,KAAK,OAAO,GAAG;IACb,KAAK,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACzC,WAAW,EAAE,sBAAsB,CAAC;IACpC,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C,CAAC;AA0DF,eAAO,MAAM,eAAe,GAAI,oDAM7B,OAAO,GAAG;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;CACrE,WAkBA,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,2CA6SpF"} \ No newline at end of file +{"version":3,"file":"BottomTabBar.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/bottom-tabs/views/BottomTabBar.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAGR,KAAK,SAAS,EAGd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAIjE,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAIxB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAI1E,KAAK,KAAK,GAAG,iBAAiB,GAAG;IAC/B,KAAK,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;CAC1D,CAAC;AAUF,KAAK,OAAO,GAAG;IACb,KAAK,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACzC,WAAW,EAAE,sBAAsB,CAAC;IACpC,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C,CAAC;AA0DF,eAAO,MAAM,eAAe,GAAI,oDAM7B,OAAO,GAAG;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;CACrE,WAkBA,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,2CA6SpF"} \ No newline at end of file diff --git a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.js b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.js index cf7b5412307b7e..ff966ca5b26735 100644 --- a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.js +++ b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.js @@ -39,9 +39,9 @@ exports.BottomTabBar = BottomTabBar; const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = __importStar(require("react")); const react_native_1 = require("react-native"); +const BottomTabItem_1 = require("./BottomTabItem"); const elements_1 = require("../../elements"); const native_1 = require("../../native"); -const BottomTabItem_1 = require("./BottomTabItem"); const BottomTabBarHeightCallbackContext_1 = require("../utils/BottomTabBarHeightCallbackContext"); const useIsKeyboardShown_1 = require("../utils/useIsKeyboardShown"); const TABBAR_HEIGHT_UIKIT = 49; diff --git a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.js.map b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.js.map index 0a6c4e0b40174f..9dacf66a4dffdc 100644 --- a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.js.map +++ b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabBar.js.map @@ -1 +1 @@ -{"version":3,"file":"BottomTabBar.js","sourceRoot":"","sources":["../../../../src/react-navigation/bottom-tabs/views/BottomTabBar.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport React, { use } from 'react';\nimport {\n Animated,\n type LayoutChangeEvent,\n Platform,\n type StyleProp,\n StyleSheet,\n View,\n type ViewStyle,\n} from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport { getDefaultSidebarWidth, getLabel, MissingIcon, useFrameSize } from '../../elements';\nimport {\n CommonActions,\n NavigationProvider,\n type ParamListBase,\n type TabNavigationState,\n useLinkBuilder,\n useLocale,\n useTheme,\n} from '../../native';\nimport type { BottomTabBarProps, BottomTabDescriptorMap } from '../types';\nimport { BottomTabItem } from './BottomTabItem';\nimport { BottomTabBarHeightCallbackContext } from '../utils/BottomTabBarHeightCallbackContext';\nimport { useIsKeyboardShown } from '../utils/useIsKeyboardShown';\n\ntype Props = BottomTabBarProps & {\n style?: Animated.WithAnimatedValue>;\n};\n\nconst TABBAR_HEIGHT_UIKIT = 49;\nconst TABBAR_HEIGHT_UIKIT_COMPACT = 32;\nconst SPACING_UIKIT = 15;\nconst SPACING_MATERIAL = 12;\nconst DEFAULT_MAX_TAB_ITEM_WIDTH = 125;\n\nconst useNativeDriver = Platform.OS !== 'web';\n\ntype Options = {\n state: TabNavigationState;\n descriptors: BottomTabDescriptorMap;\n dimensions: { height: number; width: number };\n};\n\nconst shouldUseHorizontalLabels = ({ state, descriptors, dimensions }: Options) => {\n const { tabBarLabelPosition } = descriptors[state.routes[state.index]!.key]!.options;\n\n if (tabBarLabelPosition) {\n switch (tabBarLabelPosition) {\n case 'beside-icon':\n return true;\n case 'below-icon':\n return false;\n }\n }\n\n if (dimensions.width >= 768) {\n // Screen size matches a tablet\n const maxTabWidth = state.routes.reduce((acc, route) => {\n const { tabBarItemStyle } = descriptors[route.key]!.options;\n const flattenedStyle = StyleSheet.flatten(tabBarItemStyle);\n\n if (flattenedStyle) {\n if (typeof flattenedStyle.width === 'number') {\n return acc + flattenedStyle.width;\n } else if (typeof flattenedStyle.maxWidth === 'number') {\n return acc + flattenedStyle.maxWidth;\n }\n }\n\n return acc + DEFAULT_MAX_TAB_ITEM_WIDTH;\n }, 0);\n\n return maxTabWidth <= dimensions.width;\n } else {\n return dimensions.width > dimensions.height;\n }\n};\n\nconst isCompact = ({ state, descriptors, dimensions }: Options): boolean => {\n const { tabBarPosition, tabBarVariant } = descriptors[state.routes[state.index]!.key]!.options;\n\n if (tabBarPosition === 'left' || tabBarPosition === 'right' || tabBarVariant === 'material') {\n return false;\n }\n\n const isLandscape = dimensions.width > dimensions.height;\n const horizontalLabels = shouldUseHorizontalLabels({\n state,\n descriptors,\n dimensions,\n });\n\n if (Platform.OS === 'ios' && !Platform.isPad && isLandscape && horizontalLabels) {\n return true;\n }\n\n return false;\n};\n\nexport const getTabBarHeight = ({\n state,\n descriptors,\n dimensions,\n insets,\n style,\n}: Options & {\n insets: EdgeInsets;\n style: Animated.WithAnimatedValue> | undefined;\n}) => {\n const { tabBarPosition } = descriptors[state.routes[state.index]!.key]!.options;\n\n const flattenedStyle = StyleSheet.flatten(style);\n const customHeight =\n flattenedStyle && 'height' in flattenedStyle ? flattenedStyle.height : undefined;\n\n if (typeof customHeight === 'number') {\n return customHeight;\n }\n\n const inset = insets[tabBarPosition === 'top' ? 'top' : 'bottom'];\n\n if (isCompact({ state, descriptors, dimensions })) {\n return TABBAR_HEIGHT_UIKIT_COMPACT + inset;\n }\n\n return TABBAR_HEIGHT_UIKIT + inset;\n};\n\nexport function BottomTabBar({ state, navigation, descriptors, insets, style }: Props) {\n const { colors } = useTheme();\n const { direction } = useLocale();\n const { buildHref } = useLinkBuilder();\n\n const focusedRoute = state.routes[state.index]!;\n const focusedDescriptor = descriptors[focusedRoute.key]!;\n const focusedOptions = focusedDescriptor.options;\n\n const {\n tabBarPosition = 'bottom',\n tabBarShowLabel,\n tabBarLabelPosition,\n tabBarHideOnKeyboard = false,\n tabBarVisibilityAnimationConfig,\n tabBarVariant = 'uikit',\n tabBarStyle,\n tabBarBackground,\n tabBarActiveTintColor,\n tabBarInactiveTintColor,\n tabBarActiveBackgroundColor,\n tabBarInactiveBackgroundColor,\n } = focusedOptions;\n\n if (tabBarVariant === 'material' && tabBarPosition !== 'left' && tabBarPosition !== 'right') {\n throw new Error(\n \"The 'material' variant for tab bar is only supported when 'tabBarPosition' is set to 'left' or 'right'.\"\n );\n }\n\n if (\n tabBarLabelPosition === 'below-icon' &&\n tabBarVariant === 'uikit' &&\n (tabBarPosition === 'left' || tabBarPosition === 'right')\n ) {\n throw new Error(\n \"The 'below-icon' label position for tab bar is only supported when 'tabBarPosition' is set to 'top' or 'bottom' when using the 'uikit' variant.\"\n );\n }\n\n const isKeyboardShown = useIsKeyboardShown();\n\n const onHeightChange = use(BottomTabBarHeightCallbackContext);\n\n const shouldShowTabBar = !(tabBarHideOnKeyboard && isKeyboardShown);\n\n const visibilityAnimationConfigRef = React.useRef(tabBarVisibilityAnimationConfig);\n\n React.useEffect(() => {\n visibilityAnimationConfigRef.current = tabBarVisibilityAnimationConfig;\n });\n\n const [isTabBarHidden, setIsTabBarHidden] = React.useState(!shouldShowTabBar);\n\n const [visible] = React.useState(() => new Animated.Value(shouldShowTabBar ? 1 : 0));\n\n React.useEffect(() => {\n const visibilityAnimationConfig = visibilityAnimationConfigRef.current;\n\n if (shouldShowTabBar) {\n const animation =\n visibilityAnimationConfig?.show?.animation === 'spring' ? Animated.spring : Animated.timing;\n\n animation(visible, {\n toValue: 1,\n useNativeDriver,\n duration: 250,\n ...visibilityAnimationConfig?.show?.config,\n }).start(({ finished }) => {\n if (finished) {\n setIsTabBarHidden(false);\n }\n });\n } else {\n setIsTabBarHidden(true);\n\n const animation =\n visibilityAnimationConfig?.hide?.animation === 'spring' ? Animated.spring : Animated.timing;\n\n animation(visible, {\n toValue: 0,\n useNativeDriver,\n duration: 200,\n ...visibilityAnimationConfig?.hide?.config,\n }).start();\n }\n\n return () => visible.stopAnimation();\n }, [visible, shouldShowTabBar]);\n\n const [layout, setLayout] = React.useState({\n height: 0,\n });\n\n const handleLayout = (e: LayoutChangeEvent) => {\n const { height } = e.nativeEvent.layout;\n\n onHeightChange?.(height);\n\n setLayout((layout) => {\n if (height === layout.height) {\n return layout;\n } else {\n return { height };\n }\n });\n };\n\n const { routes } = state;\n\n const tabBarHeight = useFrameSize((dimensions) =>\n getTabBarHeight({\n state,\n descriptors,\n insets,\n dimensions,\n style: [tabBarStyle, style],\n })\n );\n\n const hasHorizontalLabels = useFrameSize((dimensions) =>\n shouldUseHorizontalLabels({\n state,\n descriptors,\n dimensions,\n })\n );\n\n const compact = useFrameSize((dimensions) => isCompact({ state, descriptors, dimensions }));\n\n const sidebar = tabBarPosition === 'left' || tabBarPosition === 'right';\n const spacing = tabBarVariant === 'material' ? SPACING_MATERIAL : SPACING_UIKIT;\n\n const minSidebarWidth = useFrameSize((size) =>\n sidebar && hasHorizontalLabels ? getDefaultSidebarWidth(size) : 0\n );\n\n const tabBarBackgroundElement = tabBarBackground?.();\n\n return (\n \n \n {tabBarBackgroundElement}\n \n \n {routes.map((route, index) => {\n const focused = index === state.index;\n const { options } = descriptors[route.key]!;\n\n const onPress = () => {\n const event = navigation.emit({\n type: 'tabPress',\n target: route.key,\n canPreventDefault: true,\n });\n\n if (!focused && !event.defaultPrevented) {\n navigation.dispatch({\n ...CommonActions.navigate(route),\n target: state.key,\n });\n }\n };\n\n const onLongPress = () => {\n navigation.emit({\n type: 'tabLongPress',\n target: route.key,\n });\n };\n\n const label =\n typeof options.tabBarLabel === 'function'\n ? options.tabBarLabel\n : getLabel({ label: options.tabBarLabel, title: options.title }, route.name);\n\n const accessibilityLabel =\n options.tabBarAccessibilityLabel !== undefined\n ? options.tabBarAccessibilityLabel\n : typeof label === 'string' && Platform.OS === 'ios'\n ? `${label}, tab, ${index + 1} of ${routes.length}`\n : undefined;\n\n return (\n \n )\n }\n badge={options.tabBarBadge}\n badgeStyle={options.tabBarBadgeStyle}\n label={label}\n showLabel={tabBarShowLabel}\n labelStyle={options.tabBarLabelStyle}\n iconStyle={options.tabBarIconStyle}\n style={[\n sidebar\n ? {\n marginVertical: hasHorizontalLabels\n ? tabBarVariant === 'material'\n ? 0\n : 1\n : spacing / 2,\n }\n : styles.bottomItem,\n options.tabBarItemStyle,\n ]}\n />\n \n );\n })}\n \n \n );\n}\n\nconst styles = StyleSheet.create({\n start: {\n top: 0,\n bottom: 0,\n start: 0,\n },\n end: {\n top: 0,\n bottom: 0,\n end: 0,\n },\n bottom: {\n start: 0,\n end: 0,\n bottom: 0,\n elevation: 8,\n },\n bottomContent: {\n flex: 1,\n flexDirection: 'row',\n },\n sideContent: {\n flex: 1,\n flexDirection: 'column',\n },\n bottomItem: {\n flex: 1,\n },\n});\n"]} \ No newline at end of file +{"version":3,"file":"BottomTabBar.js","sourceRoot":"","sources":["../../../../src/react-navigation/bottom-tabs/views/BottomTabBar.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport React, { use } from 'react';\nimport {\n Animated,\n type LayoutChangeEvent,\n Platform,\n type StyleProp,\n StyleSheet,\n View,\n type ViewStyle,\n} from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport { BottomTabItem } from './BottomTabItem';\nimport { getDefaultSidebarWidth, getLabel, MissingIcon, useFrameSize } from '../../elements';\nimport {\n CommonActions,\n NavigationProvider,\n type ParamListBase,\n type TabNavigationState,\n useLinkBuilder,\n useLocale,\n useTheme,\n} from '../../native';\nimport type { BottomTabBarProps, BottomTabDescriptorMap } from '../types';\nimport { BottomTabBarHeightCallbackContext } from '../utils/BottomTabBarHeightCallbackContext';\nimport { useIsKeyboardShown } from '../utils/useIsKeyboardShown';\n\ntype Props = BottomTabBarProps & {\n style?: Animated.WithAnimatedValue>;\n};\n\nconst TABBAR_HEIGHT_UIKIT = 49;\nconst TABBAR_HEIGHT_UIKIT_COMPACT = 32;\nconst SPACING_UIKIT = 15;\nconst SPACING_MATERIAL = 12;\nconst DEFAULT_MAX_TAB_ITEM_WIDTH = 125;\n\nconst useNativeDriver = Platform.OS !== 'web';\n\ntype Options = {\n state: TabNavigationState;\n descriptors: BottomTabDescriptorMap;\n dimensions: { height: number; width: number };\n};\n\nconst shouldUseHorizontalLabels = ({ state, descriptors, dimensions }: Options) => {\n const { tabBarLabelPosition } = descriptors[state.routes[state.index]!.key]!.options;\n\n if (tabBarLabelPosition) {\n switch (tabBarLabelPosition) {\n case 'beside-icon':\n return true;\n case 'below-icon':\n return false;\n }\n }\n\n if (dimensions.width >= 768) {\n // Screen size matches a tablet\n const maxTabWidth = state.routes.reduce((acc, route) => {\n const { tabBarItemStyle } = descriptors[route.key]!.options;\n const flattenedStyle = StyleSheet.flatten(tabBarItemStyle);\n\n if (flattenedStyle) {\n if (typeof flattenedStyle.width === 'number') {\n return acc + flattenedStyle.width;\n } else if (typeof flattenedStyle.maxWidth === 'number') {\n return acc + flattenedStyle.maxWidth;\n }\n }\n\n return acc + DEFAULT_MAX_TAB_ITEM_WIDTH;\n }, 0);\n\n return maxTabWidth <= dimensions.width;\n } else {\n return dimensions.width > dimensions.height;\n }\n};\n\nconst isCompact = ({ state, descriptors, dimensions }: Options): boolean => {\n const { tabBarPosition, tabBarVariant } = descriptors[state.routes[state.index]!.key]!.options;\n\n if (tabBarPosition === 'left' || tabBarPosition === 'right' || tabBarVariant === 'material') {\n return false;\n }\n\n const isLandscape = dimensions.width > dimensions.height;\n const horizontalLabels = shouldUseHorizontalLabels({\n state,\n descriptors,\n dimensions,\n });\n\n if (Platform.OS === 'ios' && !Platform.isPad && isLandscape && horizontalLabels) {\n return true;\n }\n\n return false;\n};\n\nexport const getTabBarHeight = ({\n state,\n descriptors,\n dimensions,\n insets,\n style,\n}: Options & {\n insets: EdgeInsets;\n style: Animated.WithAnimatedValue> | undefined;\n}) => {\n const { tabBarPosition } = descriptors[state.routes[state.index]!.key]!.options;\n\n const flattenedStyle = StyleSheet.flatten(style);\n const customHeight =\n flattenedStyle && 'height' in flattenedStyle ? flattenedStyle.height : undefined;\n\n if (typeof customHeight === 'number') {\n return customHeight;\n }\n\n const inset = insets[tabBarPosition === 'top' ? 'top' : 'bottom'];\n\n if (isCompact({ state, descriptors, dimensions })) {\n return TABBAR_HEIGHT_UIKIT_COMPACT + inset;\n }\n\n return TABBAR_HEIGHT_UIKIT + inset;\n};\n\nexport function BottomTabBar({ state, navigation, descriptors, insets, style }: Props) {\n const { colors } = useTheme();\n const { direction } = useLocale();\n const { buildHref } = useLinkBuilder();\n\n const focusedRoute = state.routes[state.index]!;\n const focusedDescriptor = descriptors[focusedRoute.key]!;\n const focusedOptions = focusedDescriptor.options;\n\n const {\n tabBarPosition = 'bottom',\n tabBarShowLabel,\n tabBarLabelPosition,\n tabBarHideOnKeyboard = false,\n tabBarVisibilityAnimationConfig,\n tabBarVariant = 'uikit',\n tabBarStyle,\n tabBarBackground,\n tabBarActiveTintColor,\n tabBarInactiveTintColor,\n tabBarActiveBackgroundColor,\n tabBarInactiveBackgroundColor,\n } = focusedOptions;\n\n if (tabBarVariant === 'material' && tabBarPosition !== 'left' && tabBarPosition !== 'right') {\n throw new Error(\n \"The 'material' variant for tab bar is only supported when 'tabBarPosition' is set to 'left' or 'right'.\"\n );\n }\n\n if (\n tabBarLabelPosition === 'below-icon' &&\n tabBarVariant === 'uikit' &&\n (tabBarPosition === 'left' || tabBarPosition === 'right')\n ) {\n throw new Error(\n \"The 'below-icon' label position for tab bar is only supported when 'tabBarPosition' is set to 'top' or 'bottom' when using the 'uikit' variant.\"\n );\n }\n\n const isKeyboardShown = useIsKeyboardShown();\n\n const onHeightChange = use(BottomTabBarHeightCallbackContext);\n\n const shouldShowTabBar = !(tabBarHideOnKeyboard && isKeyboardShown);\n\n const visibilityAnimationConfigRef = React.useRef(tabBarVisibilityAnimationConfig);\n\n React.useEffect(() => {\n visibilityAnimationConfigRef.current = tabBarVisibilityAnimationConfig;\n });\n\n const [isTabBarHidden, setIsTabBarHidden] = React.useState(!shouldShowTabBar);\n\n const [visible] = React.useState(() => new Animated.Value(shouldShowTabBar ? 1 : 0));\n\n React.useEffect(() => {\n const visibilityAnimationConfig = visibilityAnimationConfigRef.current;\n\n if (shouldShowTabBar) {\n const animation =\n visibilityAnimationConfig?.show?.animation === 'spring' ? Animated.spring : Animated.timing;\n\n animation(visible, {\n toValue: 1,\n useNativeDriver,\n duration: 250,\n ...visibilityAnimationConfig?.show?.config,\n }).start(({ finished }) => {\n if (finished) {\n setIsTabBarHidden(false);\n }\n });\n } else {\n setIsTabBarHidden(true);\n\n const animation =\n visibilityAnimationConfig?.hide?.animation === 'spring' ? Animated.spring : Animated.timing;\n\n animation(visible, {\n toValue: 0,\n useNativeDriver,\n duration: 200,\n ...visibilityAnimationConfig?.hide?.config,\n }).start();\n }\n\n return () => visible.stopAnimation();\n }, [visible, shouldShowTabBar]);\n\n const [layout, setLayout] = React.useState({\n height: 0,\n });\n\n const handleLayout = (e: LayoutChangeEvent) => {\n const { height } = e.nativeEvent.layout;\n\n onHeightChange?.(height);\n\n setLayout((layout) => {\n if (height === layout.height) {\n return layout;\n } else {\n return { height };\n }\n });\n };\n\n const { routes } = state;\n\n const tabBarHeight = useFrameSize((dimensions) =>\n getTabBarHeight({\n state,\n descriptors,\n insets,\n dimensions,\n style: [tabBarStyle, style],\n })\n );\n\n const hasHorizontalLabels = useFrameSize((dimensions) =>\n shouldUseHorizontalLabels({\n state,\n descriptors,\n dimensions,\n })\n );\n\n const compact = useFrameSize((dimensions) => isCompact({ state, descriptors, dimensions }));\n\n const sidebar = tabBarPosition === 'left' || tabBarPosition === 'right';\n const spacing = tabBarVariant === 'material' ? SPACING_MATERIAL : SPACING_UIKIT;\n\n const minSidebarWidth = useFrameSize((size) =>\n sidebar && hasHorizontalLabels ? getDefaultSidebarWidth(size) : 0\n );\n\n const tabBarBackgroundElement = tabBarBackground?.();\n\n return (\n \n \n {tabBarBackgroundElement}\n \n \n {routes.map((route, index) => {\n const focused = index === state.index;\n const { options } = descriptors[route.key]!;\n\n const onPress = () => {\n const event = navigation.emit({\n type: 'tabPress',\n target: route.key,\n canPreventDefault: true,\n });\n\n if (!focused && !event.defaultPrevented) {\n navigation.dispatch({\n ...CommonActions.navigate(route),\n target: state.key,\n });\n }\n };\n\n const onLongPress = () => {\n navigation.emit({\n type: 'tabLongPress',\n target: route.key,\n });\n };\n\n const label =\n typeof options.tabBarLabel === 'function'\n ? options.tabBarLabel\n : getLabel({ label: options.tabBarLabel, title: options.title }, route.name);\n\n const accessibilityLabel =\n options.tabBarAccessibilityLabel !== undefined\n ? options.tabBarAccessibilityLabel\n : typeof label === 'string' && Platform.OS === 'ios'\n ? `${label}, tab, ${index + 1} of ${routes.length}`\n : undefined;\n\n return (\n \n )\n }\n badge={options.tabBarBadge}\n badgeStyle={options.tabBarBadgeStyle}\n label={label}\n showLabel={tabBarShowLabel}\n labelStyle={options.tabBarLabelStyle}\n iconStyle={options.tabBarIconStyle}\n style={[\n sidebar\n ? {\n marginVertical: hasHorizontalLabels\n ? tabBarVariant === 'material'\n ? 0\n : 1\n : spacing / 2,\n }\n : styles.bottomItem,\n options.tabBarItemStyle,\n ]}\n />\n \n );\n })}\n \n \n );\n}\n\nconst styles = StyleSheet.create({\n start: {\n top: 0,\n bottom: 0,\n start: 0,\n },\n end: {\n top: 0,\n bottom: 0,\n end: 0,\n },\n bottom: {\n start: 0,\n end: 0,\n bottom: 0,\n elevation: 8,\n },\n bottomContent: {\n flex: 1,\n flexDirection: 'row',\n },\n sideContent: {\n flex: 1,\n flexDirection: 'column',\n },\n bottomItem: {\n flex: 1,\n },\n});\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.d.ts b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.d.ts index 10286f81a0651b..59a7cac5ab9941 100644 --- a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.d.ts +++ b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.d.ts @@ -1,7 +1,7 @@ import React from 'react'; import { type ColorValue, type GestureResponderEvent, type StyleProp, type TextStyle, type ViewStyle } from 'react-native'; -import type { BottomTabBarButtonProps, BottomTabDescriptor, LabelPosition } from '../types'; import { type Route } from '../../native'; +import type { BottomTabBarButtonProps, BottomTabDescriptor, LabelPosition } from '../types'; type Props = { /** * The route object which should be specified by the tab. diff --git a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.d.ts.map b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.d.ts.map index f78f94f49e02fa..ed6b05af77bb57 100644 --- a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.d.ts.map +++ b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BottomTabItem.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/bottom-tabs/views/BottomTabItem.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BottomTabItem.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/bottom-tabs/views/BottomTabItem.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.js b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.js index c96a00c2f975ed..3f04e889e3db8c 100644 --- a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.js +++ b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.js @@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.BottomTabItem = BottomTabItem; const jsx_runtime_1 = require("react/jsx-runtime"); const react_native_1 = require("react-native"); -const elements_1 = require("../../elements"); const TabBarIcon_1 = require("./TabBarIcon"); const color_1 = require("../../../utils/color"); +const elements_1 = require("../../elements"); const native_1 = require("../../native"); const renderButtonDefault = (props) => (0, jsx_runtime_1.jsx)(elements_1.PlatformPressable, { ...props }); const SUPPORTS_LARGE_CONTENT_VIEWER = react_native_1.Platform.OS === 'ios' && parseInt(react_native_1.Platform.Version, 10) >= 13; diff --git a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.js.map b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.js.map index 0fcd7a14c69156..82adbf4d8ef881 100644 --- a/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.js.map +++ b/packages/expo-router/build/react-navigation/bottom-tabs/views/BottomTabItem.js.map @@ -1 +1 @@ -{"version":3,"file":"BottomTabItem.js","sourceRoot":"","sources":["../../../../src/react-navigation/bottom-tabs/views/BottomTabItem.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport React from 'react';\nimport {\n type ColorValue,\n type GestureResponderEvent,\n type StyleProp,\n type TextStyle,\n type ViewStyle,\n Platform,\n StyleSheet,\n View,\n} from 'react-native';\n\nimport { getLabel, Label, PlatformPressable } from '../../elements';\nimport type { BottomTabBarButtonProps, BottomTabDescriptor, LabelPosition } from '../types';\nimport { TabBarIcon } from './TabBarIcon';\nimport { Color } from '../../../utils/color';\nimport { type Route, useTheme } from '../../native';\n\ntype Props = {\n /**\n * The route object which should be specified by the tab.\n */\n route: Route;\n /**\n * The `href` to use for the anchor tag on web\n */\n href?: string;\n /**\n * Whether the tab is focused.\n */\n focused: boolean;\n /**\n * The descriptor object for the route.\n */\n descriptor: BottomTabDescriptor;\n /**\n * The label text of the tab.\n */\n label:\n | string\n | ((props: {\n focused: boolean;\n color: ColorValue;\n position: LabelPosition;\n children: string;\n }) => React.ReactNode);\n /**\n * Icon to display for the tab.\n */\n icon: (props: { focused: boolean; size: number; color: ColorValue }) => React.ReactNode;\n /**\n * Text to show in a badge on the tab icon.\n */\n badge?: number | string;\n /**\n * Custom style for the badge.\n */\n badgeStyle?: StyleProp;\n /**\n * The button for the tab. Uses a `Pressable` by default.\n */\n button?: (props: BottomTabBarButtonProps) => React.ReactNode;\n /**\n * The accessibility label for the tab.\n */\n accessibilityLabel?: string;\n /**\n * An unique ID for testing for the tab.\n */\n testID?: string;\n /**\n * Function to execute on press in React Native.\n * On the web, this will use onClick.\n */\n onPress: (e: React.MouseEvent | GestureResponderEvent) => void;\n /**\n * Function to execute on long press.\n */\n onLongPress: (e: GestureResponderEvent) => void;\n /**\n * Whether the label should be aligned with the icon horizontally.\n */\n horizontal: boolean;\n /**\n * Whether to render the icon and label in compact mode.\n */\n compact: boolean;\n /**\n * Whether the tab is an item in a side bar.\n */\n sidebar: boolean;\n /**\n * Variant of navigation bar styling\n * - `uikit`: iOS UIKit style\n * - `material`: Material Design style\n */\n variant: 'uikit' | 'material';\n /**\n * Color for the icon and label when the item is active.\n */\n activeTintColor?: ColorValue;\n /**\n * Color for the icon and label when the item is inactive.\n */\n inactiveTintColor?: ColorValue;\n /**\n * Background color for item when its active.\n */\n activeBackgroundColor?: ColorValue;\n /**\n * Background color for item when its inactive.\n */\n inactiveBackgroundColor?: ColorValue;\n /**\n * Whether to show the label text for the tab.\n */\n showLabel?: boolean;\n /**\n * Whether to allow scaling the font for the label for accessibility purposes.\n * Defaults to `false` on iOS 13+ where it uses `largeContentTitle`.\n */\n allowFontScaling?: boolean;\n /**\n * Style object for the label element.\n */\n labelStyle?: StyleProp;\n /**\n * Style object for the icon element.\n */\n iconStyle?: StyleProp;\n /**\n * Style object for the wrapper element.\n */\n style?: StyleProp;\n};\n\nconst renderButtonDefault = (props: BottomTabBarButtonProps) => ;\n\nconst SUPPORTS_LARGE_CONTENT_VIEWER = Platform.OS === 'ios' && parseInt(Platform.Version, 10) >= 13;\n\nexport function BottomTabItem({\n route,\n href,\n focused,\n descriptor,\n label,\n icon,\n badge,\n badgeStyle,\n button = renderButtonDefault,\n accessibilityLabel,\n testID,\n onPress,\n onLongPress,\n horizontal,\n compact,\n sidebar,\n variant,\n activeTintColor: customActiveTintColor,\n inactiveTintColor: customInactiveTintColor,\n activeBackgroundColor: customActiveBackgroundColor,\n inactiveBackgroundColor = 'transparent',\n showLabel = true,\n // On iOS 13+, we use `largeContentTitle` for accessibility\n // So we don't need the font to scale up\n // https://developer.apple.com/documentation/uikit/uiview/3183939-largecontenttitle\n allowFontScaling = SUPPORTS_LARGE_CONTENT_VIEWER ? false : undefined,\n labelStyle,\n iconStyle,\n style,\n}: Props) {\n const { colors, fonts } = useTheme();\n\n const activeTintColor: ColorValue =\n customActiveTintColor ??\n (variant === 'uikit' && sidebar && horizontal\n ? Color(colors.primary)?.isDark()\n ? 'white'\n : Color(colors.primary)?.darken(0.71).string()\n : undefined) ??\n colors.primary;\n\n const inactiveTintColor: ColorValue =\n customInactiveTintColor ??\n (variant === 'material'\n ? Color(colors.text)?.alpha(0.68).string()\n : Color(colors.text)?.alpha(0.5).string()) ??\n colors.text;\n\n const activeBackgroundColor: ColorValue =\n customActiveBackgroundColor ??\n (variant === 'material'\n ? Color(activeTintColor)?.alpha(0.12).string()\n : sidebar && horizontal\n ? colors.primary\n : 'transparent') ??\n 'transparent';\n\n const { options } = descriptor;\n const labelString = getLabel(\n {\n label: typeof options.tabBarLabel === 'string' ? options.tabBarLabel : undefined,\n title: options.title,\n },\n route.name\n );\n\n let labelInactiveTintColor = inactiveTintColor;\n let iconInactiveTintColor = inactiveTintColor;\n\n if (variant === 'uikit' && sidebar && horizontal && customInactiveTintColor === undefined) {\n iconInactiveTintColor = colors.primary;\n labelInactiveTintColor = colors.text;\n }\n\n const renderLabel = ({ focused }: { focused: boolean }) => {\n if (showLabel === false) {\n return null;\n }\n\n const color = focused ? activeTintColor : labelInactiveTintColor;\n\n if (typeof label !== 'string') {\n return label({\n focused,\n color,\n position: horizontal ? 'beside-icon' : 'below-icon',\n children: labelString,\n });\n }\n\n return (\n \n {label}\n \n );\n };\n\n const renderIcon = ({ focused }: { focused: boolean }) => {\n if (icon === undefined) {\n return null;\n }\n\n const activeOpacity = focused ? 1 : 0;\n const inactiveOpacity = focused ? 0 : 1;\n\n return (\n \n );\n };\n\n const scene = { route, focused };\n\n const backgroundColor = focused ? activeBackgroundColor : inactiveBackgroundColor;\n\n const { flex } = StyleSheet.flatten(style || {});\n const borderRadius =\n variant === 'material' ? (horizontal ? 56 : 16) : sidebar && horizontal ? 10 : 0;\n\n return (\n \n {button({\n href,\n onPress,\n onLongPress,\n testID,\n 'aria-label': accessibilityLabel,\n accessibilityLargeContentTitle: labelString,\n accessibilityShowsLargeContentViewer: true,\n // FIXME: role: 'tab' doesn't seem to work as expected on iOS\n role: Platform.select({ ios: 'button', default: 'tab' }),\n 'aria-selected': focused,\n android_ripple: { borderless: true },\n hoverEffect:\n variant === 'material' || (sidebar && horizontal) ? { color: colors.text } : undefined,\n pressOpacity: 1,\n style: [\n styles.tab,\n { flex, backgroundColor, borderRadius },\n sidebar\n ? variant === 'material'\n ? horizontal\n ? styles.tabBarSidebarMaterial\n : styles.tabVerticalMaterial\n : horizontal\n ? styles.tabBarSidebarUiKit\n : styles.tabVerticalUiKit\n : variant === 'material'\n ? styles.tabVerticalMaterial\n : horizontal\n ? styles.tabHorizontalUiKit\n : styles.tabVerticalUiKit,\n ],\n children: (\n <>\n {renderIcon(scene)}\n {renderLabel(scene)}\n \n ),\n })}\n \n );\n}\n\nconst styles = StyleSheet.create({\n tab: {\n alignItems: 'center',\n // Roundness for iPad hover effect\n borderRadius: 10,\n borderCurve: 'continuous',\n },\n tabVerticalUiKit: {\n justifyContent: 'flex-start',\n flexDirection: 'column',\n padding: 5,\n },\n tabVerticalMaterial: {\n padding: 10,\n },\n tabHorizontalUiKit: {\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'row',\n padding: 5,\n },\n tabBarSidebarUiKit: {\n justifyContent: 'flex-start',\n alignItems: 'center',\n flexDirection: 'row',\n paddingVertical: 7,\n paddingHorizontal: 5,\n },\n tabBarSidebarMaterial: {\n justifyContent: 'flex-start',\n alignItems: 'center',\n flexDirection: 'row',\n paddingVertical: 15,\n paddingStart: 16,\n paddingEnd: 24,\n },\n labelSidebarMaterial: {\n marginStart: 12,\n },\n labelSidebarUiKit: {\n fontSize: 17,\n marginStart: 10,\n },\n labelBeneath: {\n fontSize: 10,\n },\n labelBeside: {\n marginEnd: 12,\n lineHeight: 24,\n },\n labelBesideUikit: {\n fontSize: 13,\n marginStart: 5,\n },\n labelBesideUikitCompact: {\n fontSize: 12,\n marginStart: 5,\n },\n});\n"]} \ No newline at end of file +{"version":3,"file":"BottomTabItem.js","sourceRoot":"","sources":["../../../../src/react-navigation/bottom-tabs/views/BottomTabItem.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport React from 'react';\nimport {\n type ColorValue,\n type GestureResponderEvent,\n type StyleProp,\n type TextStyle,\n type ViewStyle,\n Platform,\n StyleSheet,\n View,\n} from 'react-native';\n\nimport { TabBarIcon } from './TabBarIcon';\nimport { Color } from '../../../utils/color';\nimport { getLabel, Label, PlatformPressable } from '../../elements';\nimport { type Route, useTheme } from '../../native';\nimport type { BottomTabBarButtonProps, BottomTabDescriptor, LabelPosition } from '../types';\n\ntype Props = {\n /**\n * The route object which should be specified by the tab.\n */\n route: Route;\n /**\n * The `href` to use for the anchor tag on web\n */\n href?: string;\n /**\n * Whether the tab is focused.\n */\n focused: boolean;\n /**\n * The descriptor object for the route.\n */\n descriptor: BottomTabDescriptor;\n /**\n * The label text of the tab.\n */\n label:\n | string\n | ((props: {\n focused: boolean;\n color: ColorValue;\n position: LabelPosition;\n children: string;\n }) => React.ReactNode);\n /**\n * Icon to display for the tab.\n */\n icon: (props: { focused: boolean; size: number; color: ColorValue }) => React.ReactNode;\n /**\n * Text to show in a badge on the tab icon.\n */\n badge?: number | string;\n /**\n * Custom style for the badge.\n */\n badgeStyle?: StyleProp;\n /**\n * The button for the tab. Uses a `Pressable` by default.\n */\n button?: (props: BottomTabBarButtonProps) => React.ReactNode;\n /**\n * The accessibility label for the tab.\n */\n accessibilityLabel?: string;\n /**\n * An unique ID for testing for the tab.\n */\n testID?: string;\n /**\n * Function to execute on press in React Native.\n * On the web, this will use onClick.\n */\n onPress: (e: React.MouseEvent | GestureResponderEvent) => void;\n /**\n * Function to execute on long press.\n */\n onLongPress: (e: GestureResponderEvent) => void;\n /**\n * Whether the label should be aligned with the icon horizontally.\n */\n horizontal: boolean;\n /**\n * Whether to render the icon and label in compact mode.\n */\n compact: boolean;\n /**\n * Whether the tab is an item in a side bar.\n */\n sidebar: boolean;\n /**\n * Variant of navigation bar styling\n * - `uikit`: iOS UIKit style\n * - `material`: Material Design style\n */\n variant: 'uikit' | 'material';\n /**\n * Color for the icon and label when the item is active.\n */\n activeTintColor?: ColorValue;\n /**\n * Color for the icon and label when the item is inactive.\n */\n inactiveTintColor?: ColorValue;\n /**\n * Background color for item when its active.\n */\n activeBackgroundColor?: ColorValue;\n /**\n * Background color for item when its inactive.\n */\n inactiveBackgroundColor?: ColorValue;\n /**\n * Whether to show the label text for the tab.\n */\n showLabel?: boolean;\n /**\n * Whether to allow scaling the font for the label for accessibility purposes.\n * Defaults to `false` on iOS 13+ where it uses `largeContentTitle`.\n */\n allowFontScaling?: boolean;\n /**\n * Style object for the label element.\n */\n labelStyle?: StyleProp;\n /**\n * Style object for the icon element.\n */\n iconStyle?: StyleProp;\n /**\n * Style object for the wrapper element.\n */\n style?: StyleProp;\n};\n\nconst renderButtonDefault = (props: BottomTabBarButtonProps) => ;\n\nconst SUPPORTS_LARGE_CONTENT_VIEWER = Platform.OS === 'ios' && parseInt(Platform.Version, 10) >= 13;\n\nexport function BottomTabItem({\n route,\n href,\n focused,\n descriptor,\n label,\n icon,\n badge,\n badgeStyle,\n button = renderButtonDefault,\n accessibilityLabel,\n testID,\n onPress,\n onLongPress,\n horizontal,\n compact,\n sidebar,\n variant,\n activeTintColor: customActiveTintColor,\n inactiveTintColor: customInactiveTintColor,\n activeBackgroundColor: customActiveBackgroundColor,\n inactiveBackgroundColor = 'transparent',\n showLabel = true,\n // On iOS 13+, we use `largeContentTitle` for accessibility\n // So we don't need the font to scale up\n // https://developer.apple.com/documentation/uikit/uiview/3183939-largecontenttitle\n allowFontScaling = SUPPORTS_LARGE_CONTENT_VIEWER ? false : undefined,\n labelStyle,\n iconStyle,\n style,\n}: Props) {\n const { colors, fonts } = useTheme();\n\n const activeTintColor: ColorValue =\n customActiveTintColor ??\n (variant === 'uikit' && sidebar && horizontal\n ? Color(colors.primary)?.isDark()\n ? 'white'\n : Color(colors.primary)?.darken(0.71).string()\n : undefined) ??\n colors.primary;\n\n const inactiveTintColor: ColorValue =\n customInactiveTintColor ??\n (variant === 'material'\n ? Color(colors.text)?.alpha(0.68).string()\n : Color(colors.text)?.alpha(0.5).string()) ??\n colors.text;\n\n const activeBackgroundColor: ColorValue =\n customActiveBackgroundColor ??\n (variant === 'material'\n ? Color(activeTintColor)?.alpha(0.12).string()\n : sidebar && horizontal\n ? colors.primary\n : 'transparent') ??\n 'transparent';\n\n const { options } = descriptor;\n const labelString = getLabel(\n {\n label: typeof options.tabBarLabel === 'string' ? options.tabBarLabel : undefined,\n title: options.title,\n },\n route.name\n );\n\n let labelInactiveTintColor = inactiveTintColor;\n let iconInactiveTintColor = inactiveTintColor;\n\n if (variant === 'uikit' && sidebar && horizontal && customInactiveTintColor === undefined) {\n iconInactiveTintColor = colors.primary;\n labelInactiveTintColor = colors.text;\n }\n\n const renderLabel = ({ focused }: { focused: boolean }) => {\n if (showLabel === false) {\n return null;\n }\n\n const color = focused ? activeTintColor : labelInactiveTintColor;\n\n if (typeof label !== 'string') {\n return label({\n focused,\n color,\n position: horizontal ? 'beside-icon' : 'below-icon',\n children: labelString,\n });\n }\n\n return (\n \n {label}\n \n );\n };\n\n const renderIcon = ({ focused }: { focused: boolean }) => {\n if (icon === undefined) {\n return null;\n }\n\n const activeOpacity = focused ? 1 : 0;\n const inactiveOpacity = focused ? 0 : 1;\n\n return (\n \n );\n };\n\n const scene = { route, focused };\n\n const backgroundColor = focused ? activeBackgroundColor : inactiveBackgroundColor;\n\n const { flex } = StyleSheet.flatten(style || {});\n const borderRadius =\n variant === 'material' ? (horizontal ? 56 : 16) : sidebar && horizontal ? 10 : 0;\n\n return (\n \n {button({\n href,\n onPress,\n onLongPress,\n testID,\n 'aria-label': accessibilityLabel,\n accessibilityLargeContentTitle: labelString,\n accessibilityShowsLargeContentViewer: true,\n // FIXME: role: 'tab' doesn't seem to work as expected on iOS\n role: Platform.select({ ios: 'button', default: 'tab' }),\n 'aria-selected': focused,\n android_ripple: { borderless: true },\n hoverEffect:\n variant === 'material' || (sidebar && horizontal) ? { color: colors.text } : undefined,\n pressOpacity: 1,\n style: [\n styles.tab,\n { flex, backgroundColor, borderRadius },\n sidebar\n ? variant === 'material'\n ? horizontal\n ? styles.tabBarSidebarMaterial\n : styles.tabVerticalMaterial\n : horizontal\n ? styles.tabBarSidebarUiKit\n : styles.tabVerticalUiKit\n : variant === 'material'\n ? styles.tabVerticalMaterial\n : horizontal\n ? styles.tabHorizontalUiKit\n : styles.tabVerticalUiKit,\n ],\n children: (\n <>\n {renderIcon(scene)}\n {renderLabel(scene)}\n \n ),\n })}\n \n );\n}\n\nconst styles = StyleSheet.create({\n tab: {\n alignItems: 'center',\n // Roundness for iPad hover effect\n borderRadius: 10,\n borderCurve: 'continuous',\n },\n tabVerticalUiKit: {\n justifyContent: 'flex-start',\n flexDirection: 'column',\n padding: 5,\n },\n tabVerticalMaterial: {\n padding: 10,\n },\n tabHorizontalUiKit: {\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'row',\n padding: 5,\n },\n tabBarSidebarUiKit: {\n justifyContent: 'flex-start',\n alignItems: 'center',\n flexDirection: 'row',\n paddingVertical: 7,\n paddingHorizontal: 5,\n },\n tabBarSidebarMaterial: {\n justifyContent: 'flex-start',\n alignItems: 'center',\n flexDirection: 'row',\n paddingVertical: 15,\n paddingStart: 16,\n paddingEnd: 24,\n },\n labelSidebarMaterial: {\n marginStart: 12,\n },\n labelSidebarUiKit: {\n fontSize: 17,\n marginStart: 10,\n },\n labelBeneath: {\n fontSize: 10,\n },\n labelBeside: {\n marginEnd: 12,\n lineHeight: 24,\n },\n labelBesideUikit: {\n fontSize: 13,\n marginStart: 5,\n },\n labelBesideUikitCompact: {\n fontSize: 12,\n marginStart: 5,\n },\n});\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/react-navigation/core/types.d.ts.map b/packages/expo-router/build/react-navigation/core/types.d.ts.map index f0bcf3ceb05160..3d5a71fdb9fd06 100644 --- a/packages/expo-router/build/react-navigation/core/types.d.ts.map +++ b/packages/expo-router/build/react-navigation/core/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/react-navigation/core/types.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/react-navigation/core/types.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EACV,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,KAAK,EACL,MAAM,EACP,MAAM,YAAY,CAAC;AAEpB,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,eAAe,CAAC;QAExB,KAAK,aAAa,GAAG,EAAE,CAAC;QAGxB,UAAU,KAAK;SAAG;KACnB;CACF;AAGD,KAAK,KAAK,CAAC,CAAC,SAAS,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AAEpD,MAAM,MAAM,uBAAuB,CACjC,SAAS,SAAS,aAAa,EAC/B,WAAW,SAAS,MAAM,GAAG,SAAS,EACtC,KAAK,SAAS,eAAe,EAE7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,YAAY,EAC7B,UAAU,IACR,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG;IAC3C;;;OAGG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QACf,KAAK,EAAE,KAAK,CAAC;QACb,UAAU,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACzC,WAAW,EAAE,MAAM,CACjB,MAAM,EACN,UAAU,CACR,aAAa,EACb,cAAc,CACZ,SAAS,EACT,MAAM,SAAS,EACf,MAAM,GAAG,SAAS,EAClB,KAAK,EACL,aAAa,EACb,QAAQ,CACT,EACD,SAAS,CAAC,SAAS,CAAC,CACrB,CACF,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;KAC3B,KAAK,KAAK,CAAC,YAAY,CAAC;IAEzB;;OAEG;IACH,eAAe,CAAC,EACZ,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,GAChC,CAAC,CAAC,KAAK,EAAE;QACP,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC5B,UAAU,EAAE,UAAU,CAAC;KACxB,KAAK,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5C;;OAEG;IACH,aAAa,CAAC,EACV,aAAa,GACb,CAAC,CAAC,KAAK,EAAE;QACP,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC5B,UAAU,EAAE,UAAU,CAAC;QACvB,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC;KAC9B,KAAK,aAAa,CAAC,CAAC;IAEzB;;OAEG;IACH,YAAY,CAAC,EAAE,CACb,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,MAAM,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,KAC3E,KAAK,CAAC,YAAY,CAAC;IAExB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,SAAS,gBAAgB,EAChD,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;;;;OAkBG;IACH,iCAAiC,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC;CACpE,GAAG,CAAC,WAAW,SAAS,MAAM,GACzB;IACE;;OAEG;IACH,EAAE,EAAE,WAAW,CAAC;CACjB,GACD;IACE,EAAE,CAAC,EAAE,SAAS,CAAC;CAChB,CAAC,CAAC;AAET,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAEvF,MAAM,MAAM,YAAY,CAAC,KAAK,SAAS,eAAe,IAAI;IACxD,KAAK,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IAC3B,IAAI,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IAC1B,KAAK,EAAE;QAAE,IAAI,EAAE;YAAE,KAAK,EAAE,KAAK,CAAA;SAAE,CAAA;KAAE,CAAC;IAClC,YAAY,EAAE;QAAE,IAAI,EAAE;YAAE,MAAM,EAAE,gBAAgB,CAAA;SAAE,CAAC;QAAC,iBAAiB,EAAE,IAAI,CAAA;KAAE,CAAC;CAC/E,CAAC;AAEF,MAAM,MAAM,QAAQ,CAClB,SAAS,EACT,iBAAiB,SAAS,OAAO,GAAG,SAAS,GAAG,KAAK,EACrD,IAAI,GAAG,SAAS,IACd;IACF;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,CAAC,iBAAiB,SAAS,IAAI,GAC/B;IACE;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC;;OAEG;IACH,cAAc,IAAI,IAAI,CAAC;CACxB,GAED,EAAE,CAAC,GACL,CAAC,SAAS,SAAS,IAAI,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAAC;AAEpG,MAAM,MAAM,qBAAqB,CAC/B,QAAQ,SAAS,YAAY,EAC7B,SAAS,SAAS,MAAM,QAAQ,EAChC,sBAAsB,SAAS,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,IAC3F,CACF,CAAC,EAAE,QAAQ,CACT,SAAS,EACT,SAAS,SAAS,sBAAsB,GAAG,KAAK,GAAG,sBAAsB,EACzE,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAC5B,KACE,IAAI,CAAC;AAEV,MAAM,MAAM,aAAa,CAAC,QAAQ,SAAS,YAAY,IAAI;IACzD;;;;;OAKG;IACH,WAAW,CAAC,SAAS,SAAS,KAAK,CAAC,QAAQ,CAAC,EAC3C,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,GACnD,MAAM,IAAI,CAAC;IACd,cAAc,CAAC,SAAS,SAAS,KAAK,CAAC,QAAQ,CAAC,EAC9C,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,GACnD,IAAI,CAAC;CACT,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,QAAQ,SAAS,YAAY,IAAI;IACxD;;;;;;;OAOG;IACH,IAAI,CAAC,SAAS,SAAS,KAAK,CAAC,QAAQ,CAAC,EACpC,OAAO,EAAE;QACP,IAAI,EAAE,SAAS,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KAEjB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,SAAS,IAAI,GAAG;QAAE,iBAAiB,EAAE,IAAI,CAAA;KAAE,GAAG,EAAE,CAAC,GAC5F,CAAC,SAAS,SAAS,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAC1C;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;KAAE,GACtC;QAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,GAC3C,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;CAC/F,CAAC;AAEF,qBAAa,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACtD;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAClB;AAED,KAAK,uBAAuB,CAC1B,SAAS,SAAS,aAAa,EAC/B,KAAK,SAAS,eAAe,GAAG,eAAe,IAC7C;IACF;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAE1F;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,SAAS,MAAM,SAAS,EACxC,GAAG,IAAI,EAGP,SAAS,SAAS,OAAO,GAGrB,SAAS,SAAS,SAAS,CAAC,SAAS,CAAC,GACpC;QACE,MAAM,EAAE,SAAS;QACjB,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC;QAC7B,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,OAAO,CAAC;YAAC,GAAG,CAAC,EAAE,OAAO,CAAA;SAAE;KAC7C,GACD;QACE,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;QAC5B,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,OAAO,CAAC;YAAC,GAAG,CAAC,EAAE,OAAO,CAAA;SAAE;KAC7C,GACH,KAAK,GACR,IAAI,CAAC;IAER;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,SAAS,MAAM,SAAS,EACxC,OAAO,EAAE,SAAS,SAAS,OAAO,GAC9B;QACE,IAAI,EAAE,SAAS,CAAC;QAChB,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,GAAG,CAAC,EAAE,OAAO,CAAC;KACf,GACD,KAAK,GACR,IAAI,CAAC;IAER;;;;;;;OAOG;IACH,kBAAkB,CAAC,SAAS,SAAS,MAAM,SAAS,EAClD,GAAG,IAAI,EAAE,SAAS,SAAS,OAAO,GAC9B,SAAS,SAAS,SAAS,CAAC,SAAS,CAAC,GACpC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,GAClD,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,GACnD,KAAK,GACR,IAAI,CAAC;IAER;;;;;;OAMG;IACH,kBAAkB,CAAC,SAAS,SAAS,MAAM,SAAS,EAClD,OAAO,EAAE,SAAS,SAAS,OAAO,GAC9B;QACE,IAAI,EAAE,SAAS,CAAC;QAChB,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GACD,KAAK,GACR,IAAI,CAAC;IAER;;;;;OAKG;IACH,OAAO,CAAC,SAAS,SAAS,MAAM,SAAS,EACvC,GAAG,IAAI,EAAE,SAAS,SAAS,OAAO,GAC9B,SAAS,SAAS,SAAS,CAAC,SAAS,CAAC,GACpC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,GAClD,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,GACnD,KAAK,GACR,IAAI,CAAC;IAER;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IAEhD;;OAEG;IACH,MAAM,IAAI,IAAI,CAAC;IAEf;;;;;OAKG;IACH,SAAS,IAAI,OAAO,CAAC;IAErB;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC;IAErB;;;OAGG;IACH,KAAK,IAAI,MAAM,GAAG,SAAS,CAAC;IAE5B;;;;;;OAMG;IACH,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,aAAa,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IAE5E;;;OAGG;IACH,QAAQ,IAAI,KAAK,CAAC;CACnB,GAAG,iBAAiB,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAErD,KAAK,sBAAsB,CAEzB,SAAS,SAAS,EAAE,EACpB,SAAS,SAAS,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,IAClD;IACF;;;;;OAKG;IACH,SAAS,CACP,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GACzF,IAAI,CAAC;IAER;;;;OAIG;IACH,aAAa,CACX,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,GAChF,IAAI,CAAC;CACT,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAC3B,SAAS,SAAS,aAAa,EAE/B,QAAQ,SAAS,YAAY,GAAG,EAAE,IAChC,uBAAuB,CAAC,SAAS,CAAC,GACpC,YAAY,CAAC,QAAQ,CAAC,GACtB,sBAAsB,CAAC,SAAS,EAAE,MAAM,SAAS,CAAC,CAAC;AAErD,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC;IACvE;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACjE;;;;;;;;OAQG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC;IAC9B;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,cAAc,CAExB,SAAS,SAAS,EAAE,EACpB,SAAS,SAAS,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,EACpD,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EAC3D,KAAK,SAAS,eAAe,GAAG,eAAe,CAAC,SAAS,CAAC,EAE1D,aAAa,SAAS,EAAE,GAAG,EAAE,EAE7B,QAAQ,SAAS,YAAY,GAAG,EAAE,IAChC,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,WAAW,CAAC,GAAG;IACjE;;;;;;OAMG;IACH,SAAS,CAAC,CAAC,GAAG,cAAc,CAAC,aAAa,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC;IAE9E;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;CACnD,GAAG,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,GAC9C,aAAa,CAAC,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,GAC7C,iBAAiB,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEtD,MAAM,MAAM,SAAS,CACnB,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,IAClD,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAE5D,MAAM,MAAM,uBAAuB,CACjC,CAAC,SAAS,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC9D,CAAC,SAAS,uBAAuB,CAAC,aAAa,EAAE,GAAG,CAAC,IACnD,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC,GACxC,cAAc;AACZ;;;GAGG;AACH,CAAC,CAAC,SAAS,uBAAuB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GACtD,CAAC,CAAC,SAAS,uBAAuB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1D;;;GAGG;AACH,CAAC,SAAS,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM;AACnD;;GAEG;AACD,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GACzD,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC3D;;GAEG;AACH,CAAC,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,eAAe;AACtE;;GAEG;AAEH,CAAC,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AAC9D;;;GAGG;AAEH,CAAC,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CACpE,CAAC;AAEJ,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS;IACR,UAAU,EAAE,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACrF,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;CACjC,EACD,CAAC,SAAS;IACR,UAAU,EAAE,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;CAC/C,IACC;IACF,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACtE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAC1B,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,EAEjC,aAAa,SAAS,EAAE,EACxB,UAAU,IACR;IACF,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvC,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC;IAC7B,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,UAAU,CAEpB,aAAa,SAAS,EAAE,EACxB,UAAU,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC/D,KAAK,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,IAC/B;IACF;;OAEG;IACH,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IAE5B;;OAEG;IACH,OAAO,EAAE,aAAa,CAAC;IAEvB;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,CACzB,KAAK,SAAS,eAAe,EAC7B,QAAQ,SAAS,YAAY,IAC3B,OAAO,CAAC;KACT,SAAS,IAAI,MAAM,CAAC,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,qBAAqB,CAC1E,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,EAC9B,SAAS,CACV;CACF,CAAC,CAAC;AAEH,KAAK,mBAAmB,CAAC,SAAS,SAAS,aAAa,EAAE,SAAS,SAAS,MAAM,SAAS,IACvF,KAAK,CAAC,aAAa,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvC,UAAU,EAAE,GAAG,CAAC;CACjB,CAAC,GAEF,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAE5B,MAAM,MAAM,oBAAoB,CAC9B,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,IAE/B;IACE;;OAEG;IACH,SAAS,EAAE,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB,GACD;IACE;;OAEG;IACH,YAAY,EAAE,MAAM,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9D,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB,GACD;IACE;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE;QAChB,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACvC,UAAU,EAAE,GAAG,CAAC;KACjB,KAAK,KAAK,CAAC,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB,CAAC;AAEN,MAAM,MAAM,gBAAgB,CAC1B,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,EACjC,KAAK,SAAS,eAAe,EAE7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,YAAY,EAC7B,UAAU,IACR;IACF;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,IAAI,EAAE,SAAS,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EACJ,aAAa,GACb,CAAC,CAAC,KAAK,EAAE;QACP,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACvC,UAAU,EAAE,UAAU,CAAC;QACvB,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC;KAC9B,KAAK,aAAa,CAAC,CAAC;IAEzB;;OAEG;IACH,SAAS,CAAC,EACN,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,GAChC,CAAC,CAAC,KAAK,EAAE;QACP,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACvC,UAAU,EAAE,UAAU,CAAC;KACxB,KAAK,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5C;;;;OAIG;IACH,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,KACrE,KAAK,CAAC,YAAY,CAAC;IAExB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;KAAE,KAAK,MAAM,GAAG,SAAS,CAAC;IAEvF;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,WAAW,CACrB,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,EACjC,KAAK,SAAS,eAAe,EAE7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,YAAY,EAC7B,UAAU,IACR,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,CAAC,GACpF,oBAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAE7C,MAAM,MAAM,gBAAgB,CAC1B,SAAS,SAAS,aAAa,EAE/B,aAAa,SAAS,EAAE,EACxB,UAAU,IACR;IACF;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,EACV,aAAa,GACb,CAAC,CAAC,KAAK,EAAE;QACP,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,SAAS,CAAC,CAAC;QAC7C,UAAU,EAAE,UAAU,CAAC;QACvB,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC;KAC9B,KAAK,aAAa,CAAC,CAAC;IAEzB;;;OAGG;IACH,YAAY,CAAC,EACT,CAAC,CACC,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,MAAM,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,KAC3E,KAAK,CAAC,YAAY,CAAC,GAExB,EAEC,CAAC;IAEN;;;OAGG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC;;OAEG;IACH,KAAK,EAAE;QACL,IAAI,EAAE,SAAS,CAAC;KACjB,CAAC;IACF;;OAEG;IACH,KAAK,EAAE;QACL,IAAI,EAAE;YACJ;;eAEG;YACH,KAAK,EAAE,eAAe,GAAG,YAAY,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;SACpE,CAAC;KACH,CAAC;IACF;;OAEG;IACH,OAAO,EAAE;QAAE,IAAI,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACvC;;;;OAIG;IACH,iBAAiB,EAAE;QACjB,IAAI,EAAE;YACJ;;eAEG;YACH,MAAM,EAAE,gBAAgB,CAAC;YACzB;;eAEG;YACH,IAAI,EAAE,OAAO,CAAC;YACd;;eAEG;YACH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;SAC3B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AAEvD,MAAM,MAAM,cAAc,CAAC,SAAS,SAAS,aAAa,IAAI;KAE3D,SAAS,IAAI,MAAM,SAAS,GAAG,qBAAqB,CAAC,EAAE,CAAC,SAAS,SAAS,CAAC,SAAS,CAAC,GAClF,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,SAAS,qBAAqB,CAAC,MAAM,CAAC,CAAC,GACvE,cAAc,CAAC,CAAC,CAAC,GACjB,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,GACzD,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC5D,CAAC,MAAM,SAAS,CAAC,CAAC;AAGnB,KAAK,mBAAmB,CAAC,SAAS,SAAS,EAAE,IAAI,SAAS,SAAS,aAAa,GAC5E,cAAc,CAAC,SAAS,CAAC,GACzB,KAAK,CAAC,MAAM,CAAC,CAAC;AAGlB,MAAM,MAAM,sBAAsB,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAiB,CAAC,SAAS,CAAC,GACrF,aAAa,CAAC,2BAA2B,CAAC,GAAG;IAC3C;;;;OAIG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC;IACzE;;OAEG;IACH,YAAY,IAAI,eAAe,CAAC;IAChC;;OAEG;IACH,eAAe,IAAI,mBAAmB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAC9D;;OAEG;IACH,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAAC;IACxC;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC;IACnB;;OAEG;IACH,UAAU,IAAI,KAAK,CAAC;IACpB;;OAEG;IACH,SAAS,IAAI,SAAS,CAAC;CACxB,CAAC;AAGJ,MAAM,MAAM,iCAAiC,CAAC,SAAS,SAAS,EAAE,IAChE,sBAAsB,CAAC,SAAS,CAAC,GAAG;IAClC,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;CACnD,CAAC;AAEJ,MAAM,MAAM,kBAAkB,CAAC,SAAS,SAAS,aAAa,IAAI;KAC/D,SAAS,IAAI,MAAM,SAAS,GAAG,OAAO;CACxC,CAAC;AAEF,MAAM,MAAM,OAAO,CACjB,SAAS,SAAS,aAAa,EAC/B,WAAW,SAAS,MAAM,GAAG,SAAS,EACtC,KAAK,SAAS,eAAe,EAE7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,YAAY,EAC7B,cAAc,SAAS,kBAAkB,CAAC,SAAS,CAAC,EACpD,SAAS,SAAS,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IACxC;IACF,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAEjC,SAAS,EAAE,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,eAAe,CAAC;IAEvB,aAAa,EAAE,EAAE,CAAC;IAElB,QAAQ,EAAE,EAAE,CAAC;IACb,cAAc,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAClD,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAC1B,SAAS,SAAS,aAAa,EAC/B,WAAW,SAAS,MAAM,GAAG,SAAS,EACtC,KAAK,SAAS,eAAe,EAE7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,YAAY,EAC7B,cAAc,SAAS,kBAAkB,CAAC,SAAS,CAAC,EACpD,SAAS,SAAS,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IACxC;IACF,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,CACxB,GAAG,SAAS,oBAAoB,EAChC,MAAM,GAAG,OAAO,IACd,sBAAsB,CACxB,GAAG,CAAC,WAAW,CAAC,EAChB,GAAG,CAAC,aAAa,CAAC,EAClB,GAAG,CAAC,OAAO,CAAC,EACZ,GAAG,CAAC,eAAe,CAAC,EACpB,GAAG,CAAC,UAAU,CAAC,EACf,GAAG,CAAC,gBAAgB,CAAC,EACrB,GAAG,CAAC,WAAW,CAAC,CACjB,GAEC,CAAC,SAAS,SAAS,MAAM,GAAG,EAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEvD,KAAK,sBAAsB,CACzB,SAAS,SAAS,aAAa,EAC/B,WAAW,SAAS,MAAM,GAAG,SAAS,EACtC,KAAK,SAAS,eAAe,EAE7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,YAAY,EAC7B,cAAc,SAAS,kBAAkB,CAAC,SAAS,CAAC,EACpD,SAAS,SAAS,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IACxC;IACF;;OAEG;IACH,SAAS,EAAE,KAAK,CAAC,aAAa,CAC5B,IAAI,CACF,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAC/B,MAAM,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC5D,GACC,uBAAuB,CACrB,SAAS,EACT,WAAW,EACX,KAAK,EACL,aAAa,EACb,QAAQ,EACR,cAAc,CAAC,MAAM,SAAS,CAAC,CAChC,CACJ,CAAC;IACF;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC,aAAa,CACxB,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,MAAM,SAAS,CAAC,CAAC,CAC5E,CAAC;IACF;;OAEG;IACH,MAAM,EAAE,CAAC,SAAS,SAAS,MAAM,SAAS,EACxC,CAAC,EAAE,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,KAC5F,IAAI,CAAC;CACX,CAAC;AAGF,MAAM,MAAM,qBAAqB,CAAC,SAAS,SAAS,EAAE,IAClD;IACE,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,eAAe,GAAG,SAAS,CAAC;CACpE,GACD;KACG,SAAS,IAAI,MAAM,SAAS,GAAG,SAAS,SAAS,SAAS,CAAC,SAAS,CAAC,GAClE;QACE,MAAM,EAAE,SAAS,CAAC;QAClB,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,KAAK,CAAC,EAAE,KAAK,CAAC;KACf,GACD;QACE,MAAM,EAAE,SAAS,CAAC;QAClB,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,KAAK,CAAC,EAAE,KAAK,CAAC;KACf;CACN,CAAC,MAAM,SAAS,CAAC,CAAC;AAEvB,KAAK,eAAe,GAAG;IACrB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC,CAAC;CAChD,CAAC;AAGF,MAAM,MAAM,UAAU,CAAC,SAAS,SAAS,EAAE,IAAI,OAAO,CAAC,eAAe,CAAC,GAAG;IACxE;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;IACnD;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,eAAe,CAAC,EAAE,CAAC;IACrC;;OAEG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACnC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,SAAS,CAAC;CACpC,CAAC;AAGF,MAAM,MAAM,aAAa,CAAC,SAAS,SAAS,EAAE,IAAI;KAC/C,SAAS,IAAI,MAAM,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,SAAS,qBAAqB,CAE9F,MAAM,CAAC,SAAS,EAAE,CACnB,GACG,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAEpB,AADF,mEAAmE;IACjE,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,SAAS,GAAG,kBAAkB,CAAC;CACpE,CAAC"} \ No newline at end of file diff --git a/packages/expo-router/build/react-navigation/core/types.js.map b/packages/expo-router/build/react-navigation/core/types.js.map index 1052c3ee857418..115c0381b5e14a 100644 --- a/packages/expo-router/build/react-navigation/core/types.js.map +++ b/packages/expo-router/build/react-navigation/core/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/react-navigation/core/types.tsx"],"names":[],"mappings":";;;AA6NA,MAAa,iBAAiB;IAC5B;;;;;;;;;OASG;IACO,EAAE,CAAK;CAClB;AAZD,8CAYC","sourcesContent":["import type * as React from 'react';\n\nimport type {\n DefaultRouterOptions,\n InitialState,\n NavigationAction,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n Router,\n} from '../routers';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace ReactNavigation {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n type RootParamList = {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface Theme {}\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ntype Keyof = Extract;\n\nexport type DefaultNavigatorOptions<\n ParamList extends ParamListBase,\n NavigatorID extends string | undefined,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n Navigation,\n> = DefaultRouterOptions> & {\n /**\n * Children React Elements to extract the route configuration from.\n * Only `Screen`, `Group` and `React.Fragment` are supported as children.\n */\n children: React.ReactNode;\n\n /**\n * Layout for the navigator.\n * Useful for wrapping with a component with access to navigator's state and options.\n */\n layout?: (props: {\n state: State;\n navigation: NavigationHelpers;\n descriptors: Record<\n string,\n Descriptor<\n ScreenOptions,\n NavigationProp<\n ParamList,\n keyof ParamList,\n string | undefined,\n State,\n ScreenOptions,\n EventMap\n >,\n RouteProp\n >\n >;\n children: React.ReactNode;\n }) => React.ReactElement;\n\n /**\n * Event listeners for all the screens in the navigator.\n */\n screenListeners?:\n | ScreenListeners\n | ((props: {\n route: RouteProp;\n navigation: Navigation;\n }) => ScreenListeners);\n\n /**\n * Default options for all screens under this navigator.\n */\n screenOptions?:\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: Navigation;\n theme: ReactNavigation.Theme;\n }) => ScreenOptions);\n\n /**\n * Layout for all screens under this navigator.\n */\n screenLayout?: (\n props: ScreenLayoutArgs\n ) => React.ReactElement;\n\n /**\n * A function returning overrides for the underlying router used by the navigator.\n * The overrides will be shallow merged onto the original router.\n * It receives the original router as an argument to the function.\n *\n * This must be a pure function and cannot reference outside dynamic variables.\n */\n UNSTABLE_router?: (\n original: Router\n ) => Partial>;\n\n /**\n * What should happen when the available route names change.\n * e.g. when different screens are rendered based on a condition.\n *\n * - 'firstMatch': Navigate to the first route in the new list of routes (default).\n * - 'lastUnhandled': Restore the last state that was unhandled due to conditional render.\n *\n * Example cases where previous state might have been unhandled:\n * - Opened a deep link to a screen, but a login screen was shown.\n * - Navigated to a screen containing a navigator, but a different screen was shown.\n * - Reset the navigator to a state with different routes not matching the current list of routes.\n *\n * In these cases, 'lastUnhandled' will reuse the unhandled state if present.\n * If there's no unhandled state, it will fallback to 'firstMatch' behavior.\n *\n * Caveats:\n * - Direct navigation is only handled for `NAVIGATE` actions.\n * - Unhandled state is restored only if the current state becomes invalid, i.e. it doesn't contain any currently defined screens.\n */\n UNSTABLE_routeNamesChangeBehavior?: 'firstMatch' | 'lastUnhandled';\n} & (NavigatorID extends string\n ? {\n /**\n * Optional ID for the navigator. Can be used with `navigation.getParent(id)` to refer to a parent.\n */\n id: NavigatorID;\n }\n : {\n id?: undefined;\n });\n\nexport type EventMapBase = Record;\n\nexport type EventMapCore = {\n focus: { data: undefined };\n blur: { data: undefined };\n state: { data: { state: State } };\n beforeRemove: { data: { action: NavigationAction }; canPreventDefault: true };\n};\n\nexport type EventArg<\n EventName,\n CanPreventDefault extends boolean | undefined = false,\n Data = undefined,\n> = {\n /**\n * Type of the event (e.g. `focus`, `blur`)\n */\n readonly type: EventName;\n readonly target?: string;\n} & (CanPreventDefault extends true\n ? {\n /**\n * Whether `event.preventDefault()` was called on this event object.\n */\n readonly defaultPrevented: boolean;\n /**\n * Prevent the default action which happens on this event.\n */\n preventDefault(): void;\n }\n : // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n {}) &\n (undefined extends Data ? { readonly data?: Readonly } : { readonly data: Readonly });\n\nexport type EventListenerCallback<\n EventMap extends EventMapBase,\n EventName extends keyof EventMap,\n EventCanPreventDefault extends boolean | undefined = EventMap[EventName]['canPreventDefault'],\n> = (\n e: EventArg<\n EventName,\n undefined extends EventCanPreventDefault ? false : EventCanPreventDefault,\n EventMap[EventName]['data']\n >\n) => void;\n\nexport type EventConsumer = {\n /**\n * Subscribe to events from the parent navigator.\n *\n * @param type Type of the event (e.g. `focus`, `blur`)\n * @param callback Callback listener which is executed upon receiving the event.\n */\n addListener>(\n type: EventName,\n callback: EventListenerCallback\n ): () => void;\n removeListener>(\n type: EventName,\n callback: EventListenerCallback\n ): void;\n};\n\nexport type EventEmitter = {\n /**\n * Emit an event to child screens.\n *\n * @param options.type Type of the event (e.g. `focus`, `blur`)\n * @param [options.data] Optional information regarding the event.\n * @param [options.target] Key of the target route which should receive the event.\n * If not specified, all routes receive the event.\n */\n emit>(\n options: {\n type: EventName;\n target?: string;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n } & (EventMap[EventName]['canPreventDefault'] extends true ? { canPreventDefault: true } : {}) &\n (undefined extends EventMap[EventName]['data']\n ? { data?: EventMap[EventName]['data'] }\n : { data: EventMap[EventName]['data'] })\n ): EventArg;\n};\n\nexport class PrivateValueStore {\n /**\n * UGLY HACK! DO NOT USE THE TYPE!!!\n *\n * TypeScript requires a type to be used to be able to infer it.\n * The type should exist as its own without any operations such as union.\n * So we need to figure out a way to store this type in a property.\n * The problem with a normal property is that it shows up in intelliSense.\n * Adding private keyword works, but the annotation is stripped away in declaration.\n * Turns out if we use an empty string, it doesn't show up in intelliSense.\n */\n protected ''?: T;\n}\n\ntype NavigationHelpersCommon<\n ParamList extends ParamListBase,\n State extends NavigationState = NavigationState,\n> = {\n /**\n * Dispatch an action or an update function to the router.\n * The update function will receive the current state,\n *\n * @param action Action object or update function.\n */\n dispatch(action: NavigationAction | ((state: Readonly) => NavigationAction)): void;\n\n /**\n * Navigate to a screen in the current or parent navigator.\n * If we're already on the screen, update the params instead.\n *\n * @param screen Name of the route to navigate to.\n * @param [params] Params object for the route.\n * @param [options.merge] Whether to merge the params onto the route. Defaults to `false`.\n * @param [options.pop] Whether to pop routes in a stack to go back to the matching route. Defaults to `false`.\n */\n navigate(\n ...args: // This condition allows us to iterate over a union type\n // This is to avoid getting a union of all the params from `ParamList[RouteName]`,\n // which will get our types all mixed up if a union RouteName is passed in.\n RouteName extends unknown\n ? // This condition checks if the params are optional,\n // which means it's either undefined or a union with undefined\n undefined extends ParamList[RouteName]\n ? [\n screen: RouteName,\n params?: ParamList[RouteName],\n options?: { merge?: boolean; pop?: boolean },\n ]\n : [\n screen: RouteName,\n params: ParamList[RouteName],\n options?: { merge?: boolean; pop?: boolean },\n ]\n : never\n ): void;\n\n /**\n * Navigate to a route in current navigation tree.\n *\n * @param options.name Name of the route to navigate to.\n * @param [options.params] Params object for the route.\n * @param [options.path] Path to associate the route with (e.g. for deep links).\n * @param [options.merge] Whether to merge the params onto the route. Defaults to `false`.\n * @param [options.pop] Whether to pop routes in a stack to go back to the matching route. Defaults to `false`.\n */\n navigate(\n options: RouteName extends unknown\n ? {\n name: RouteName;\n params: ParamList[RouteName];\n path?: string;\n merge?: boolean;\n pop?: boolean;\n }\n : never\n ): void;\n\n /**\n * Navigate to a route in current navigation tree.\n *\n * @deprecated Use `navigate` instead.\n *\n * @param screen Name of the route to navigate to.\n * @param [params] Params object for the route.\n */\n navigateDeprecated(\n ...args: RouteName extends unknown\n ? undefined extends ParamList[RouteName]\n ? [screen: RouteName, params?: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n : never\n ): void;\n\n /**\n * Navigate to a route in current navigation tree.\n *\n * @deprecated Use `navigate` instead.\n *\n * @param options Object with `name` for the route to navigate to, and a `params` object.\n */\n navigateDeprecated(\n options: RouteName extends unknown\n ? {\n name: RouteName;\n params: ParamList[RouteName];\n merge?: boolean;\n }\n : never\n ): void;\n\n /**\n * Preloads the route in current navigation tree.\n *\n * @param screen Name of the route to preload.\n * @param [params] Params object for the route.\n */\n preload(\n ...args: RouteName extends unknown\n ? undefined extends ParamList[RouteName]\n ? [screen: RouteName, params?: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n : never\n ): void;\n\n /**\n * Reset the navigation state to the provided state.\n *\n * @param state Navigation state object.\n */\n reset(state: PartialState | State): void;\n\n /**\n * Go back to the previous route in history.\n */\n goBack(): void;\n\n /**\n * Check if the screen is focused. The method returns `true` if focused, `false` otherwise.\n * Note that this method doesn't re-render screen when the focus changes. So don't use it in `render`.\n * To get notified of focus changes, use `addListener('focus', cb)` and `addListener('blur', cb)`.\n * To conditionally render content based on focus state, use the `useIsFocused` hook.\n */\n isFocused(): boolean;\n\n /**\n * Check if dispatching back action will be handled by navigation.\n * Note that this method doesn't re-render screen when the result changes. So don't use it in `render`.\n */\n canGoBack(): boolean;\n\n /**\n * Returns the name of the navigator specified in the `name` prop.\n * If no name is specified, returns `undefined`.\n */\n getId(): string | undefined;\n\n /**\n * Returns the navigation helpers from a parent navigator based on the ID.\n * If an ID is provided, the navigation helper from the parent navigator with matching ID (including current) will be returned.\n * If no ID is provided, the navigation helper from the immediate parent navigator will be returned.\n *\n * @param id Optional ID of a parent navigator.\n */\n getParent | undefined>(id?: string): T;\n\n /**\n * Returns the navigator's state.\n * Note that this method doesn't re-render screen when the result changes. So don't use it in `render`.\n */\n getState(): State;\n} & PrivateValueStore<[ParamList, unknown, unknown]>;\n\ntype NavigationHelpersRoute<\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ParamList extends {},\n RouteName extends keyof ParamList = Keyof,\n> = {\n /**\n * Update the param object for the route.\n * The new params will be shallow merged with the old one.\n *\n * @param params Partial params object for the current route.\n */\n setParams(\n params: ParamList[RouteName] extends undefined ? undefined : Partial\n ): void;\n\n /**\n * Replace the param object for the route\n *\n * @param params Params object for the current route.\n */\n replaceParams(\n params: ParamList[RouteName] extends undefined ? undefined : ParamList[RouteName]\n ): void;\n};\n\nexport type NavigationHelpers<\n ParamList extends ParamListBase,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n EventMap extends EventMapBase = {},\n> = NavigationHelpersCommon &\n EventEmitter &\n NavigationHelpersRoute;\n\nexport type NavigationContainerProps = {\n /**\n * Initial state object for the navigation tree.\n */\n initialState?: InitialState;\n /**\n * Callback which is called with the latest navigation state when it changes.\n */\n onStateChange?: (state: Readonly | undefined) => void;\n /**\n * Callback which is called after the navigation tree mounts.\n */\n onReady?: () => void;\n /**\n * Callback which is called when an action is not handled.\n */\n onUnhandledAction?: (action: Readonly) => void;\n /**\n * Whether child navigator should handle a navigation action.\n * The child navigator needs to be mounted before it can handle the action.\n * Defaults to `false`.\n *\n * This will be removed in the next major release.\n *\n * @deprecated Use nested navigation API instead\n */\n navigationInChildEnabled?: boolean;\n /**\n * Theme object for the UI elements.\n */\n theme?: ReactNavigation.Theme;\n /**\n * Children elements to render.\n */\n children: React.ReactNode;\n};\n\nexport type NavigationProp<\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ParamList extends {},\n RouteName extends keyof ParamList = Keyof,\n NavigatorID extends string | undefined = string | undefined,\n State extends NavigationState = NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {} = {},\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n EventMap extends EventMapBase = {},\n> = Omit, 'getParent'> & {\n /**\n * Returns the navigation prop from a parent navigator based on the ID.\n * If an ID is provided, the navigation prop from the parent navigator with matching ID (including current) will be returned.\n * If no ID is provided, the navigation prop from the immediate parent navigator will be returned.\n *\n * @param id Optional ID of a parent navigator.\n */\n getParent | undefined>(id?: NavigatorID): T;\n\n /**\n * Update the options for the route.\n * The options object will be shallow merged with default options object.\n *\n * @param update Options object or a callback which takes the options from navigator config and returns a new options object.\n */\n setOptions(options: Partial): void;\n} & NavigationHelpersRoute &\n EventConsumer> &\n PrivateValueStore<[ParamList, RouteName, EventMap]>;\n\nexport type RouteProp<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = Keyof,\n> = Route, ParamList[RouteName]>;\n\nexport type CompositeNavigationProp<\n A extends NavigationProp,\n B extends NavigationHelpersCommon,\n> = Omit> &\n NavigationProp<\n /**\n * Param list from both navigation objects needs to be combined\n * For example, we should be able to navigate to screens in both A and B\n */\n (A extends NavigationHelpersCommon ? T : never) &\n (B extends NavigationHelpersCommon ? U : never),\n /**\n * The route name should refer to the route name specified in the first type\n * Ideally it should work for any of them, but it's not possible to infer that way\n */\n A extends NavigationProp ? R : string,\n /**\n * ID from both navigation objects needs to be combined for `getParent`\n */\n | (A extends NavigationProp ? I : never)\n | (B extends NavigationProp ? J : never),\n /**\n * The type of state should refer to the state specified in the first type\n */\n A extends NavigationProp ? S : NavigationState,\n /**\n * Screen options should refer to the options specified in the first type\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n A extends NavigationProp ? O : {},\n /**\n * Event consumer config should refer to the config specified in the first type\n * This allows typechecking `addListener`/`removeListener`\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n A extends NavigationProp ? E : {}\n >;\n\nexport type CompositeScreenProps<\n A extends {\n navigation: NavigationProp;\n route: RouteProp;\n },\n B extends {\n navigation: NavigationHelpersCommon;\n },\n> = {\n navigation: CompositeNavigationProp;\n route: A['route'];\n};\n\nexport type ScreenLayoutArgs<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n Navigation,\n> = {\n route: RouteProp;\n options: ScreenOptions;\n navigation: Navigation;\n theme: ReactNavigation.Theme;\n children: React.ReactElement;\n};\n\nexport type Descriptor<\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n Navigation extends NavigationProp,\n Route extends RouteProp,\n> = {\n /**\n * Render the component associated with this route.\n */\n render(): React.JSX.Element;\n\n /**\n * Options for the route.\n */\n options: ScreenOptions;\n\n /**\n * Route object for the screen\n */\n route: Route;\n\n /**\n * Navigation object for the screen\n */\n navigation: Navigation;\n};\n\nexport type ScreenListeners<\n State extends NavigationState,\n EventMap extends EventMapBase,\n> = Partial<{\n [EventName in keyof (EventMap & EventMapCore)]: EventListenerCallback<\n EventMap & EventMapCore,\n EventName\n >;\n}>;\n\ntype ScreenComponentType =\n | React.ComponentType<{\n route: RouteProp;\n navigation: any;\n }>\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n | React.ComponentType<{}>;\n\nexport type RouteConfigComponent<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList,\n> =\n | {\n /**\n * React component to render for this screen.\n */\n component: ScreenComponentType;\n getComponent?: never;\n children?: never;\n }\n | {\n /**\n * Lazily get a React component to render for this screen.\n */\n getComponent: () => ScreenComponentType;\n component?: never;\n children?: never;\n }\n | {\n /**\n * Render callback to render content of this screen.\n */\n children: (props: {\n route: RouteProp;\n navigation: any;\n }) => React.ReactNode;\n component?: never;\n getComponent?: never;\n };\n\nexport type RouteConfigProps<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n Navigation,\n> = {\n /**\n * Optional key for this screen. This doesn't need to be unique.\n * If the key changes, existing screens with this name will be removed or reset.\n * Useful when we have some common screens and have conditional rendering.\n */\n navigationKey?: string;\n\n /**\n * Route name of this screen.\n */\n name: RouteName;\n\n /**\n * Navigator options for this screen.\n */\n options?:\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: Navigation;\n theme: ReactNavigation.Theme;\n }) => ScreenOptions);\n\n /**\n * Event listeners for this screen.\n */\n listeners?:\n | ScreenListeners\n | ((props: {\n route: RouteProp;\n navigation: Navigation;\n }) => ScreenListeners);\n\n /**\n * Layout for this screen.\n * Useful for wrapping the screen with custom containers.\n * e.g. for styling, error boundaries, suspense, etc.\n */\n layout?: (\n props: ScreenLayoutArgs\n ) => React.ReactElement;\n\n /**\n * Function to return an unique ID for this screen.\n * Receives an object with the route params.\n * For a given screen name, there will always be only one screen corresponding to an ID.\n * If `undefined` is returned, it acts same as no `getId` being specified.\n */\n getId?: ({ params }: { params: Readonly }) => string | undefined;\n\n /**\n * Initial params object for the route.\n */\n initialParams?: Partial;\n};\n\nexport type RouteConfig<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n Navigation,\n> = RouteConfigProps &\n RouteConfigComponent;\n\nexport type RouteGroupConfig<\n ParamList extends ParamListBase,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n Navigation,\n> = {\n /**\n * Optional key for the screens in this group.\n * If the key changes, all existing screens in this group will be removed or reset.\n */\n navigationKey?: string;\n\n /**\n * Navigator options for this screen.\n */\n screenOptions?:\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: Navigation;\n theme: ReactNavigation.Theme;\n }) => ScreenOptions);\n\n /**\n * Layout for the screens inside the group.\n * This will override the `screenLayout` of parent group or navigator.\n */\n screenLayout?:\n | ((\n props: ScreenLayoutArgs\n ) => React.ReactElement)\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n | {\n // FIXME: TypeScript doesn't seem to infer `navigation` correctly without this\n };\n\n /**\n * Children React Elements to extract the route configuration from.\n * Only `Screen`, `Group` and `React.Fragment` are supported as children.\n */\n children: React.ReactNode;\n};\n\nexport type NavigationContainerEventMap = {\n /**\n * Event that fires when the navigation container is ready to be used.\n */\n ready: {\n data: undefined;\n };\n /**\n * Event that fires when the navigation state changes.\n */\n state: {\n data: {\n /**\n * The updated state object after the state change.\n */\n state: NavigationState | PartialState | undefined;\n };\n };\n /**\n * Event that fires when current options changes.\n */\n options: { data: { options: object } };\n /**\n * Event that fires when an action is dispatched.\n * Only intended for debugging purposes, don't use it for app logic.\n * This event will be emitted before state changes have been applied.\n */\n __unsafe_action__: {\n data: {\n /**\n * The action object that was dispatched.\n */\n action: NavigationAction;\n /**\n * Whether the action was a no-op, i.e. resulted any state changes.\n */\n noop: boolean;\n /**\n * Stack trace of the action, this will only be available during development.\n */\n stack: string | undefined;\n };\n };\n};\n\ntype NotUndefined = T extends undefined ? never : T;\n\nexport type ParamListRoute = {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n [RouteName in keyof ParamList]: NavigatorScreenParams<{}> extends ParamList[RouteName]\n ? NotUndefined extends NavigatorScreenParams\n ? ParamListRoute\n : Route, ParamList[RouteName]>\n : Route, ParamList[RouteName]>;\n}[keyof ParamList];\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ntype MaybeParamListRoute = ParamList extends ParamListBase\n ? ParamListRoute\n : Route;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type NavigationContainerRef = NavigationHelpers &\n EventConsumer & {\n /**\n * Reset the navigation state of the root navigator to the provided state.\n *\n * @param state Navigation state object.\n */\n resetRoot(state?: PartialState | NavigationState): void;\n /**\n * Get the rehydrated navigation state of the navigation tree.\n */\n getRootState(): NavigationState;\n /**\n * Get the currently focused navigation route.\n */\n getCurrentRoute(): MaybeParamListRoute | undefined;\n /**\n * Get the currently focused route's options.\n */\n getCurrentOptions(): object | undefined;\n /**\n * Whether the navigation container is ready to handle actions.\n */\n isReady(): boolean;\n /**\n * Stub function for setOptions on navigation object for use with useNavigation.\n */\n setOptions(): never;\n /**\n * Stub function for getParent on navigation object for use with useNavigation.\n */\n getParent(): undefined;\n };\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type NavigationContainerRefWithCurrent =\n NavigationContainerRef & {\n current: NavigationContainerRef | null;\n };\n\nexport type NavigationListBase = {\n [RouteName in keyof ParamList]: unknown;\n};\n\nexport type TypeBag<\n ParamList extends ParamListBase,\n NavigatorID extends string | undefined,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n NavigationList extends NavigationListBase,\n Navigator extends React.ComponentType,\n> = {\n ParamList: ParamList;\n NavigatorID: NavigatorID;\n State: State;\n ScreenOptions: ScreenOptions;\n EventMap: EventMap;\n NavigationList: NavigationList;\n Navigator: Navigator;\n};\n\nexport type NavigatorTypeBagBase = {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ParamList: {};\n NavigatorID: string | undefined;\n State: NavigationState;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions: {};\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n EventMap: {};\n NavigationList: NavigationListBase;\n Navigator: React.ComponentType;\n};\n\nexport type NavigatorTypeBag<\n ParamList extends ParamListBase,\n NavigatorID extends string | undefined,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n NavigationList extends NavigationListBase,\n Navigator extends React.ComponentType,\n> = {\n ParamList: ParamList;\n NavigatorID: NavigatorID;\n State: State;\n ScreenOptions: ScreenOptions;\n EventMap: EventMap;\n NavigationList: NavigationList;\n Navigator: Navigator;\n};\n\nexport type TypedNavigator<\n Bag extends NavigatorTypeBagBase,\n Config = unknown,\n> = TypedNavigatorInternal<\n Bag['ParamList'],\n Bag['NavigatorID'],\n Bag['State'],\n Bag['ScreenOptions'],\n Bag['EventMap'],\n Bag['NavigationList'],\n Bag['Navigator']\n> &\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n (undefined extends Config ? {} : { config: Config });\n\ntype TypedNavigatorInternal<\n ParamList extends ParamListBase,\n NavigatorID extends string | undefined,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n NavigationList extends NavigationListBase,\n Navigator extends React.ComponentType,\n> = {\n /**\n * Navigator component which manages the child screens.\n */\n Navigator: React.ComponentType<\n Omit<\n React.ComponentProps,\n keyof DefaultNavigatorOptions\n > &\n DefaultNavigatorOptions<\n ParamList,\n NavigatorID,\n State,\n ScreenOptions,\n EventMap,\n NavigationList[keyof ParamList]\n >\n >;\n /**\n * Component used for grouping multiple route configuration.\n */\n Group: React.ComponentType<\n RouteGroupConfig\n >;\n /**\n * Component used for specifying route configuration.\n */\n Screen: (\n _: RouteConfig\n ) => null;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type NavigatorScreenParams =\n | {\n screen?: never;\n params?: never;\n merge?: never;\n initial?: never;\n pop?: never;\n path?: string;\n state: PartialState | NavigationState | undefined;\n }\n | {\n [RouteName in keyof ParamList]: undefined extends ParamList[RouteName]\n ? {\n screen: RouteName;\n params?: ParamList[RouteName];\n merge?: boolean;\n initial?: boolean;\n path?: string;\n pop?: boolean;\n state?: never;\n }\n : {\n screen: RouteName;\n params: ParamList[RouteName];\n merge?: boolean;\n initial?: boolean;\n path?: string;\n pop?: boolean;\n state?: never;\n };\n }[keyof ParamList];\n\ntype PathConfigAlias = {\n /**\n * Path string to match against.\n * e.g. `/users/:id` will match `/users/1` and extract `id` param as `1`.\n */\n path: string;\n /**\n * Whether the path should be consider parent paths or use the exact path.\n * By default, paths are relating to the path config on the parent screen.\n * If `exact` is set to `true`, the parent path configuration is not used.\n */\n exact?: boolean;\n /**\n * An object mapping the param name to a function which parses the param value.\n *\n * @example\n * ```js\n * parse: {\n * id: Number,\n * date: (value) => new Date(value)\n * }\n * ```\n */\n parse?: Record any>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type PathConfig = Partial & {\n /**\n * An object mapping the param name to a function which converts the param value to a string.\n * By default, all params are converted to strings using `String(value)`.\n *\n * @example\n * ```js\n * stringify: {\n * date: (value) => value.toISOString()\n * }\n * ```\n */\n stringify?: Record string>;\n /**\n * Additional path alias that will be matched to the same screen.\n */\n alias?: (string | PathConfigAlias)[];\n /**\n * Path configuration for child screens.\n */\n screens?: PathConfigMap;\n /**\n * Name of the initial route to use for the navigator when the path matches.\n */\n initialRouteName?: keyof ParamList;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type PathConfigMap = {\n [RouteName in keyof ParamList]?: NonNullable extends NavigatorScreenParams<\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n infer T extends {}\n >\n ? string | PathConfig\n : // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n string | Omit, 'screens' | 'initialRouteName'>;\n};\n"]} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/react-navigation/core/types.tsx"],"names":[],"mappings":";;;AA6NA,MAAa,iBAAiB;IAC5B;;;;;;;;;OASG;IACO,EAAE,CAAK;CAClB;AAZD,8CAYC","sourcesContent":["import type * as React from 'react';\n\nimport type {\n DefaultRouterOptions,\n InitialState,\n NavigationAction,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n Router,\n} from '../routers';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace ReactNavigation {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n type RootParamList = {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface Theme {}\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ntype Keyof = Extract;\n\nexport type DefaultNavigatorOptions<\n ParamList extends ParamListBase,\n NavigatorID extends string | undefined,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n Navigation,\n> = DefaultRouterOptions> & {\n /**\n * Children React Elements to extract the route configuration from.\n * Only `Screen`, `Group` and `React.Fragment` are supported as children.\n */\n children: React.ReactNode;\n\n /**\n * Layout for the navigator.\n * Useful for wrapping with a component with access to navigator's state and options.\n */\n layout?: (props: {\n state: State;\n navigation: NavigationHelpers;\n descriptors: Record<\n string,\n Descriptor<\n ScreenOptions,\n NavigationProp<\n ParamList,\n keyof ParamList,\n string | undefined,\n State,\n ScreenOptions,\n EventMap\n >,\n RouteProp\n >\n >;\n children: React.ReactNode;\n }) => React.ReactElement;\n\n /**\n * Event listeners for all the screens in the navigator.\n */\n screenListeners?:\n | ScreenListeners\n | ((props: {\n route: RouteProp;\n navigation: Navigation;\n }) => ScreenListeners);\n\n /**\n * Default options for all screens under this navigator.\n */\n screenOptions?:\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: Navigation;\n theme: ReactNavigation.Theme;\n }) => ScreenOptions);\n\n /**\n * Layout for all screens under this navigator.\n */\n screenLayout?: (\n props: ScreenLayoutArgs\n ) => React.ReactElement;\n\n /**\n * A function returning overrides for the underlying router used by the navigator.\n * The overrides will be shallow merged onto the original router.\n * It receives the original router as an argument to the function.\n *\n * This must be a pure function and cannot reference outside dynamic variables.\n */\n UNSTABLE_router?: (\n original: Router\n ) => Partial>;\n\n /**\n * What should happen when the available route names change.\n * e.g. when different screens are rendered based on a condition.\n *\n * - 'firstMatch': Navigate to the first route in the new list of routes (default).\n * - 'lastUnhandled': Restore the last state that was unhandled due to conditional render.\n *\n * Example cases where previous state might have been unhandled:\n * - Opened a deep link to a screen, but a login screen was shown.\n * - Navigated to a screen containing a navigator, but a different screen was shown.\n * - Reset the navigator to a state with different routes not matching the current list of routes.\n *\n * In these cases, 'lastUnhandled' will reuse the unhandled state if present.\n * If there's no unhandled state, it will fallback to 'firstMatch' behavior.\n *\n * Caveats:\n * - Direct navigation is only handled for `NAVIGATE` actions.\n * - Unhandled state is restored only if the current state becomes invalid, i.e. it doesn't contain any currently defined screens.\n */\n UNSTABLE_routeNamesChangeBehavior?: 'firstMatch' | 'lastUnhandled';\n} & (NavigatorID extends string\n ? {\n /**\n * Optional ID for the navigator. Can be used with `navigation.getParent(id)` to refer to a parent.\n */\n id: NavigatorID;\n }\n : {\n id?: undefined;\n });\n\nexport type EventMapBase = Record;\n\nexport type EventMapCore = {\n focus: { data: undefined };\n blur: { data: undefined };\n state: { data: { state: State } };\n beforeRemove: { data: { action: NavigationAction }; canPreventDefault: true };\n};\n\nexport type EventArg<\n EventName,\n CanPreventDefault extends boolean | undefined = false,\n Data = undefined,\n> = {\n /**\n * Type of the event (e.g. `focus`, `blur`)\n */\n readonly type: EventName;\n readonly target?: string;\n} & (CanPreventDefault extends true\n ? {\n /**\n * Whether `event.preventDefault()` was called on this event object.\n */\n readonly defaultPrevented: boolean;\n /**\n * Prevent the default action which happens on this event.\n */\n preventDefault(): void;\n }\n : // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n {}) &\n (undefined extends Data ? { readonly data?: Readonly } : { readonly data: Readonly });\n\nexport type EventListenerCallback<\n EventMap extends EventMapBase,\n EventName extends keyof EventMap,\n EventCanPreventDefault extends boolean | undefined = EventMap[EventName]['canPreventDefault'],\n> = (\n e: EventArg<\n EventName,\n undefined extends EventCanPreventDefault ? false : EventCanPreventDefault,\n EventMap[EventName]['data']\n >\n) => void;\n\nexport type EventConsumer = {\n /**\n * Subscribe to events from the parent navigator.\n *\n * @param type Type of the event (e.g. `focus`, `blur`)\n * @param callback Callback listener which is executed upon receiving the event.\n */\n addListener>(\n type: EventName,\n callback: EventListenerCallback\n ): () => void;\n removeListener>(\n type: EventName,\n callback: EventListenerCallback\n ): void;\n};\n\nexport type EventEmitter = {\n /**\n * Emit an event to child screens.\n *\n * @param options.type Type of the event (e.g. `focus`, `blur`)\n * @param [options.data] Optional information regarding the event.\n * @param [options.target] Key of the target route which should receive the event.\n * If not specified, all routes receive the event.\n */\n emit>(\n options: {\n type: EventName;\n target?: string;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n } & (EventMap[EventName]['canPreventDefault'] extends true ? { canPreventDefault: true } : {}) &\n (undefined extends EventMap[EventName]['data']\n ? { data?: EventMap[EventName]['data'] }\n : { data: EventMap[EventName]['data'] })\n ): EventArg;\n};\n\nexport class PrivateValueStore {\n /**\n * UGLY HACK! DO NOT USE THE TYPE!!!\n *\n * TypeScript requires a type to be used to be able to infer it.\n * The type should exist as its own without any operations such as union.\n * So we need to figure out a way to store this type in a property.\n * The problem with a normal property is that it shows up in intelliSense.\n * Adding private keyword works, but the annotation is stripped away in declaration.\n * Turns out if we use an empty string, it doesn't show up in intelliSense.\n */\n protected ''?: T;\n}\n\ntype NavigationHelpersCommon<\n ParamList extends ParamListBase,\n State extends NavigationState = NavigationState,\n> = {\n /**\n * Dispatch an action or an update function to the router.\n * The update function will receive the current state,\n *\n * @param action Action object or update function.\n */\n dispatch(action: NavigationAction | ((state: Readonly) => NavigationAction)): void;\n\n /**\n * Navigate to a screen in the current or parent navigator.\n * If we're already on the screen, update the params instead.\n *\n * @param screen Name of the route to navigate to.\n * @param [params] Params object for the route.\n * @param [options.merge] Whether to merge the params onto the route. Defaults to `false`.\n * @param [options.pop] Whether to pop routes in a stack to go back to the matching route. Defaults to `false`.\n */\n navigate(\n ...args: // This condition allows us to iterate over a union type\n // This is to avoid getting a union of all the params from `ParamList[RouteName]`,\n // which will get our types all mixed up if a union RouteName is passed in.\n RouteName extends unknown\n ? // This condition checks if the params are optional,\n // which means it's either undefined or a union with undefined\n undefined extends ParamList[RouteName]\n ? [\n screen: RouteName,\n params?: ParamList[RouteName],\n options?: { merge?: boolean; pop?: boolean },\n ]\n : [\n screen: RouteName,\n params: ParamList[RouteName],\n options?: { merge?: boolean; pop?: boolean },\n ]\n : never\n ): void;\n\n /**\n * Navigate to a route in current navigation tree.\n *\n * @param options.name Name of the route to navigate to.\n * @param [options.params] Params object for the route.\n * @param [options.path] Path to associate the route with (e.g. for deep links).\n * @param [options.merge] Whether to merge the params onto the route. Defaults to `false`.\n * @param [options.pop] Whether to pop routes in a stack to go back to the matching route. Defaults to `false`.\n */\n navigate(\n options: RouteName extends unknown\n ? {\n name: RouteName;\n params: ParamList[RouteName];\n path?: string;\n merge?: boolean;\n pop?: boolean;\n }\n : never\n ): void;\n\n /**\n * Navigate to a route in current navigation tree.\n *\n * @deprecated Use `navigate` instead.\n *\n * @param screen Name of the route to navigate to.\n * @param [params] Params object for the route.\n */\n navigateDeprecated(\n ...args: RouteName extends unknown\n ? undefined extends ParamList[RouteName]\n ? [screen: RouteName, params?: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n : never\n ): void;\n\n /**\n * Navigate to a route in current navigation tree.\n *\n * @deprecated Use `navigate` instead.\n *\n * @param options Object with `name` for the route to navigate to, and a `params` object.\n */\n navigateDeprecated(\n options: RouteName extends unknown\n ? {\n name: RouteName;\n params: ParamList[RouteName];\n merge?: boolean;\n }\n : never\n ): void;\n\n /**\n * Preloads the route in current navigation tree.\n *\n * @param screen Name of the route to preload.\n * @param [params] Params object for the route.\n */\n preload(\n ...args: RouteName extends unknown\n ? undefined extends ParamList[RouteName]\n ? [screen: RouteName, params?: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n : never\n ): void;\n\n /**\n * Reset the navigation state to the provided state.\n *\n * @param state Navigation state object.\n */\n reset(state: PartialState | State): void;\n\n /**\n * Go back to the previous route in history.\n */\n goBack(): void;\n\n /**\n * Check if the screen is focused. The method returns `true` if focused, `false` otherwise.\n * Note that this method doesn't re-render screen when the focus changes. So don't use it in `render`.\n * To get notified of focus changes, use `addListener('focus', cb)` and `addListener('blur', cb)`.\n * To conditionally render content based on focus state, use the `useIsFocused` hook.\n */\n isFocused(): boolean;\n\n /**\n * Check if dispatching back action will be handled by navigation.\n * Note that this method doesn't re-render screen when the result changes. So don't use it in `render`.\n */\n canGoBack(): boolean;\n\n /**\n * Returns the name of the navigator specified in the `name` prop.\n * If no name is specified, returns `undefined`.\n */\n getId(): string | undefined;\n\n /**\n * Returns the navigation helpers from a parent navigator based on the ID.\n * If an ID is provided, the navigation helper from the parent navigator with matching ID (including current) will be returned.\n * If no ID is provided, the navigation helper from the immediate parent navigator will be returned.\n *\n * @param id Optional ID of a parent navigator.\n */\n getParent | undefined>(id?: string): T;\n\n /**\n * Returns the navigator's state.\n * Note that this method doesn't re-render screen when the result changes. So don't use it in `render`.\n */\n getState(): State;\n} & PrivateValueStore<[ParamList, unknown, unknown]>;\n\ntype NavigationHelpersRoute<\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ParamList extends {},\n RouteName extends keyof ParamList = Keyof,\n> = {\n /**\n * Update the param object for the route.\n * The new params will be shallow merged with the old one.\n *\n * @param params Partial params object for the current route.\n */\n setParams(\n params: ParamList[RouteName] extends undefined ? undefined : Partial\n ): void;\n\n /**\n * Replace the param object for the route\n *\n * @param params Params object for the current route.\n */\n replaceParams(\n params: ParamList[RouteName] extends undefined ? undefined : ParamList[RouteName]\n ): void;\n};\n\nexport type NavigationHelpers<\n ParamList extends ParamListBase,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n EventMap extends EventMapBase = {},\n> = NavigationHelpersCommon &\n EventEmitter &\n NavigationHelpersRoute;\n\nexport type NavigationContainerProps = {\n /**\n * Initial state object for the navigation tree.\n */\n initialState?: InitialState;\n /**\n * Callback which is called with the latest navigation state when it changes.\n */\n onStateChange?: (state: Readonly | undefined) => void;\n /**\n * Callback which is called after the navigation tree mounts.\n */\n onReady?: () => void;\n /**\n * Callback which is called when an action is not handled.\n */\n onUnhandledAction?: (action: Readonly) => void;\n /**\n * Whether child navigator should handle a navigation action.\n * The child navigator needs to be mounted before it can handle the action.\n * Defaults to `false`.\n *\n * This will be removed in the next major release.\n *\n * @deprecated Use nested navigation API instead\n */\n navigationInChildEnabled?: boolean;\n /**\n * Theme object for the UI elements.\n */\n theme?: ReactNavigation.Theme;\n /**\n * Children elements to render.\n */\n children: React.ReactNode;\n};\n\nexport type NavigationProp<\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ParamList extends {},\n RouteName extends keyof ParamList = Keyof,\n NavigatorID extends string | undefined = string | undefined,\n State extends NavigationState = NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {} = {},\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n EventMap extends EventMapBase = {},\n> = Omit, 'getParent'> & {\n /**\n * Returns the navigation prop from a parent navigator based on the ID.\n * If an ID is provided, the navigation prop from the parent navigator with matching ID (including current) will be returned.\n * If no ID is provided, the navigation prop from the immediate parent navigator will be returned.\n *\n * @param id Optional ID of a parent navigator.\n */\n getParent | undefined>(id?: NavigatorID): T;\n\n /**\n * Update the options for the route.\n * The options object will be shallow merged with default options object.\n *\n * @param update Options object or a callback which takes the options from navigator config and returns a new options object.\n */\n setOptions(options: Partial): void;\n} & NavigationHelpersRoute &\n EventConsumer> &\n PrivateValueStore<[ParamList, RouteName, EventMap]>;\n\nexport type RouteProp<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = Keyof,\n> = Route, ParamList[RouteName]>;\n\nexport type CompositeNavigationProp<\n A extends NavigationProp,\n B extends NavigationHelpersCommon,\n> = Omit> &\n NavigationProp<\n /**\n * Param list from both navigation objects needs to be combined\n * For example, we should be able to navigate to screens in both A and B\n */\n (A extends NavigationHelpersCommon ? T : never) &\n (B extends NavigationHelpersCommon ? U : never),\n /**\n * The route name should refer to the route name specified in the first type\n * Ideally it should work for any of them, but it's not possible to infer that way\n */\n A extends NavigationProp ? R : string,\n /**\n * ID from both navigation objects needs to be combined for `getParent`\n */\n | (A extends NavigationProp ? I : never)\n | (B extends NavigationProp ? J : never),\n /**\n * The type of state should refer to the state specified in the first type\n */\n A extends NavigationProp ? S : NavigationState,\n /**\n * Screen options should refer to the options specified in the first type\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n A extends NavigationProp ? O : {},\n /**\n * Event consumer config should refer to the config specified in the first type\n * This allows typechecking `addListener`/`removeListener`\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n A extends NavigationProp ? E : {}\n >;\n\nexport type CompositeScreenProps<\n A extends {\n navigation: NavigationProp;\n route: RouteProp;\n },\n B extends {\n navigation: NavigationHelpersCommon;\n },\n> = {\n navigation: CompositeNavigationProp;\n route: A['route'];\n};\n\nexport type ScreenLayoutArgs<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n Navigation,\n> = {\n route: RouteProp;\n options: ScreenOptions;\n navigation: Navigation;\n theme: ReactNavigation.Theme;\n children: React.ReactElement;\n};\n\nexport type Descriptor<\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n Navigation extends NavigationProp,\n Route extends RouteProp,\n> = {\n /**\n * Render the component associated with this route.\n */\n render(): React.JSX.Element;\n\n /**\n * Options for the route.\n */\n options: ScreenOptions;\n\n /**\n * Route object for the screen\n */\n route: Route;\n\n /**\n * Navigation object for the screen\n */\n navigation: Navigation;\n};\n\nexport type ScreenListeners<\n State extends NavigationState,\n EventMap extends EventMapBase,\n> = Partial<{\n [EventName in keyof (EventMap & EventMapCore)]: EventListenerCallback<\n EventMap & EventMapCore,\n EventName\n >;\n}>;\n\ntype ScreenComponentType =\n | React.ComponentType<{\n route: RouteProp;\n navigation: any;\n }>\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n | React.ComponentType<{}>;\n\nexport type RouteConfigComponent<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList,\n> =\n | {\n /**\n * React component to render for this screen.\n */\n component: ScreenComponentType;\n getComponent?: never;\n children?: never;\n }\n | {\n /**\n * Lazily get a React component to render for this screen.\n */\n getComponent: () => ScreenComponentType;\n component?: never;\n children?: never;\n }\n | {\n /**\n * Render callback to render content of this screen.\n */\n children: (props: {\n route: RouteProp;\n navigation: any;\n }) => React.ReactNode;\n component?: never;\n getComponent?: never;\n };\n\nexport type RouteConfigProps<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n Navigation,\n> = {\n /**\n * Optional key for this screen. This doesn't need to be unique.\n * If the key changes, existing screens with this name will be removed or reset.\n * Useful when we have some common screens and have conditional rendering.\n */\n navigationKey?: string;\n\n /**\n * Route name of this screen.\n */\n name: RouteName;\n\n /**\n * Navigator options for this screen.\n */\n options?:\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: Navigation;\n theme: ReactNavigation.Theme;\n }) => ScreenOptions);\n\n /**\n * Event listeners for this screen.\n */\n listeners?:\n | ScreenListeners\n | ((props: {\n route: RouteProp;\n navigation: Navigation;\n }) => ScreenListeners);\n\n /**\n * Layout for this screen.\n * Useful for wrapping the screen with custom containers.\n * e.g. for styling, error boundaries, suspense, etc.\n */\n layout?: (\n props: ScreenLayoutArgs\n ) => React.ReactElement;\n\n /**\n * Function to return an unique ID for this screen.\n * Receives an object with the route params.\n * For a given screen name, there will always be only one screen corresponding to an ID.\n * If `undefined` is returned, it acts same as no `getId` being specified.\n */\n getId?: ({ params }: { params: Readonly }) => string | undefined;\n\n /**\n * Initial params object for the route.\n */\n initialParams?: Partial;\n};\n\nexport type RouteConfig<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n Navigation,\n> = RouteConfigProps &\n RouteConfigComponent;\n\nexport type RouteGroupConfig<\n ParamList extends ParamListBase,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n Navigation,\n> = {\n /**\n * Optional key for the screens in this group.\n * If the key changes, all existing screens in this group will be removed or reset.\n */\n navigationKey?: string;\n\n /**\n * Navigator options for this screen.\n */\n screenOptions?:\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: Navigation;\n theme: ReactNavigation.Theme;\n }) => ScreenOptions);\n\n /**\n * Layout for the screens inside the group.\n * This will override the `screenLayout` of parent group or navigator.\n */\n screenLayout?:\n | ((\n props: ScreenLayoutArgs\n ) => React.ReactElement)\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n | {\n // FIXME: TypeScript doesn't seem to infer `navigation` correctly without this\n };\n\n /**\n * Children React Elements to extract the route configuration from.\n * Only `Screen`, `Group` and `React.Fragment` are supported as children.\n */\n children: React.ReactNode;\n};\n\nexport type NavigationContainerEventMap = {\n /**\n * Event that fires when the navigation container is ready to be used.\n */\n ready: {\n data: undefined;\n };\n /**\n * Event that fires when the navigation state changes.\n */\n state: {\n data: {\n /**\n * The updated state object after the state change.\n */\n state: NavigationState | PartialState | undefined;\n };\n };\n /**\n * Event that fires when current options changes.\n */\n options: { data: { options: object } };\n /**\n * Event that fires when an action is dispatched.\n * Only intended for debugging purposes, don't use it for app logic.\n * This event will be emitted before state changes have been applied.\n */\n __unsafe_action__: {\n data: {\n /**\n * The action object that was dispatched.\n */\n action: NavigationAction;\n /**\n * Whether the action was a no-op, i.e. resulted any state changes.\n */\n noop: boolean;\n /**\n * Stack trace of the action, this will only be available during development.\n */\n stack: string | undefined;\n };\n };\n};\n\ntype NotUndefined = T extends undefined ? never : T;\n\nexport type ParamListRoute = {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n [RouteName in keyof ParamList]: NavigatorScreenParams<{}> extends ParamList[RouteName]\n ? NotUndefined extends NavigatorScreenParams\n ? ParamListRoute\n : Route, ParamList[RouteName]>\n : Route, ParamList[RouteName]>;\n}[keyof ParamList];\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ntype MaybeParamListRoute = ParamList extends ParamListBase\n ? ParamListRoute\n : Route;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type NavigationContainerRef = NavigationHelpers &\n EventConsumer & {\n /**\n * Reset the navigation state of the root navigator to the provided state.\n *\n * @param state Navigation state object.\n */\n resetRoot(state?: PartialState | NavigationState): void;\n /**\n * Get the rehydrated navigation state of the navigation tree.\n */\n getRootState(): NavigationState;\n /**\n * Get the currently focused navigation route.\n */\n getCurrentRoute(): MaybeParamListRoute | undefined;\n /**\n * Get the currently focused route's options.\n */\n getCurrentOptions(): object | undefined;\n /**\n * Whether the navigation container is ready to handle actions.\n */\n isReady(): boolean;\n /**\n * Stub function for setOptions on navigation object for use with useNavigation.\n */\n setOptions(): never;\n /**\n * Stub function for getParent on navigation object for use with useNavigation.\n */\n getParent(): undefined;\n };\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type NavigationContainerRefWithCurrent =\n NavigationContainerRef & {\n current: NavigationContainerRef | null;\n };\n\nexport type NavigationListBase = {\n [RouteName in keyof ParamList]: unknown;\n};\n\nexport type TypeBag<\n ParamList extends ParamListBase,\n NavigatorID extends string | undefined,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n NavigationList extends NavigationListBase,\n Navigator extends React.ComponentType,\n> = {\n ParamList: ParamList;\n NavigatorID: NavigatorID;\n State: State;\n ScreenOptions: ScreenOptions;\n EventMap: EventMap;\n NavigationList: NavigationList;\n Navigator: Navigator;\n};\n\nexport type NavigatorTypeBagBase = {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ParamList: {};\n NavigatorID: string | undefined;\n State: NavigationState;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions: {};\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n EventMap: {};\n NavigationList: NavigationListBase;\n Navigator: React.ComponentType;\n};\n\nexport type NavigatorTypeBag<\n ParamList extends ParamListBase,\n NavigatorID extends string | undefined,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n NavigationList extends NavigationListBase,\n Navigator extends React.ComponentType,\n> = {\n ParamList: ParamList;\n NavigatorID: NavigatorID;\n State: State;\n ScreenOptions: ScreenOptions;\n EventMap: EventMap;\n NavigationList: NavigationList;\n Navigator: Navigator;\n};\n\nexport type TypedNavigator<\n Bag extends NavigatorTypeBagBase,\n Config = unknown,\n> = TypedNavigatorInternal<\n Bag['ParamList'],\n Bag['NavigatorID'],\n Bag['State'],\n Bag['ScreenOptions'],\n Bag['EventMap'],\n Bag['NavigationList'],\n Bag['Navigator']\n> &\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n (undefined extends Config ? {} : { config: Config });\n\ntype TypedNavigatorInternal<\n ParamList extends ParamListBase,\n NavigatorID extends string | undefined,\n State extends NavigationState,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n NavigationList extends NavigationListBase,\n Navigator extends React.ComponentType,\n> = {\n /**\n * Navigator component which manages the child screens.\n */\n Navigator: React.ComponentType<\n Omit<\n React.ComponentProps,\n keyof DefaultNavigatorOptions\n > &\n DefaultNavigatorOptions<\n ParamList,\n NavigatorID,\n State,\n ScreenOptions,\n EventMap,\n NavigationList[keyof ParamList]\n >\n >;\n /**\n * Component used for grouping multiple route configuration.\n */\n Group: React.ComponentType<\n RouteGroupConfig\n >;\n /**\n * Component used for specifying route configuration.\n */\n Screen: (\n _: RouteConfig\n ) => null;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type NavigatorScreenParams =\n | {\n screen?: never;\n params?: never;\n merge?: never;\n initial?: never;\n pop?: never;\n path?: string;\n state: PartialState | NavigationState | undefined;\n }\n | {\n [RouteName in keyof ParamList]: undefined extends ParamList[RouteName]\n ? {\n screen: RouteName;\n params?: ParamList[RouteName];\n merge?: boolean;\n initial?: boolean;\n path?: string;\n pop?: boolean;\n state?: never;\n }\n : {\n screen: RouteName;\n params: ParamList[RouteName];\n merge?: boolean;\n initial?: boolean;\n path?: string;\n pop?: boolean;\n state?: never;\n };\n }[keyof ParamList];\n\ntype PathConfigAlias = {\n /**\n * Path string to match against.\n * e.g. `/users/:id` will match `/users/1` and extract `id` param as `1`.\n */\n path: string;\n /**\n * Whether the path should be consider parent paths or use the exact path.\n * By default, paths are relating to the path config on the parent screen.\n * If `exact` is set to `true`, the parent path configuration is not used.\n */\n exact?: boolean;\n /**\n * An object mapping the param name to a function which parses the param value.\n *\n * @example\n * ```js\n * parse: {\n * id: Number,\n * date: (value) => new Date(value)\n * }\n * ```\n */\n parse?: Record any>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type PathConfig = Partial & {\n /**\n * An object mapping the param name to a function which converts the param value to a string.\n * By default, all params are converted to strings using `String(value)`.\n *\n * @example\n * ```js\n * stringify: {\n * date: (value) => value.toISOString()\n * }\n * ```\n */\n stringify?: Record string>;\n /**\n * Additional path alias that will be matched to the same screen.\n */\n alias?: (string | PathConfigAlias)[];\n /**\n * Path configuration for child screens.\n */\n screens?: PathConfigMap;\n /**\n * Name of the initial route to use for the navigator when the path matches.\n */\n initialRouteName?: keyof ParamList;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type PathConfigMap = {\n [RouteName in keyof ParamList]?: NonNullable extends NavigatorScreenParams<\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n infer T extends {}\n >\n ? string | PathConfig\n : // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n string | Omit, 'screens' | 'initialRouteName'>;\n};\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.d.ts.map b/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.d.ts.map index 58a61baede2a54..999fd249286afe 100644 --- a/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.d.ts.map +++ b/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HeaderBackButton.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/elements/Header/HeaderBackButton.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAKtD,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,UAAU,EACV,WAA2D,EAC3D,aAAa,EACb,OAAO,EACP,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAuB,EACvB,kBAA6E,EAC7E,MAAM,EACN,KAAK,EACL,IAAI,GACL,EAAE,qBAAqB,2CA0IvB"} \ No newline at end of file +{"version":3,"file":"HeaderBackButton.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/elements/Header/HeaderBackButton.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,UAAU,EACV,WAA2D,EAC3D,aAAa,EACb,OAAO,EACP,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAuB,EACvB,kBAA6E,EAC7E,MAAM,EACN,KAAK,EACL,IAAI,GACL,EAAE,qBAAqB,2CA0IvB"} \ No newline at end of file diff --git a/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.js b/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.js index 802848df39287f..af006bd10e757c 100644 --- a/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.js +++ b/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.js @@ -41,12 +41,12 @@ exports.HeaderBackButton = HeaderBackButton; const jsx_runtime_1 = require("react/jsx-runtime"); const React = __importStar(require("react")); const react_native_1 = require("react-native"); -const back_icon_mask_png_1 = __importDefault(require("../../../../assets/react-navigation/elements/back-icon-mask.png")); -const back_icon_png_1 = __importDefault(require("../../../../assets/react-navigation/elements/back-icon.png")); -const MaskedView_1 = require("../MaskedView"); const HeaderButton_1 = require("./HeaderButton"); const HeaderIcon_1 = require("./HeaderIcon"); +const back_icon_mask_png_1 = __importDefault(require("../../../../assets/react-navigation/elements/back-icon-mask.png")); +const back_icon_png_1 = __importDefault(require("../../../../assets/react-navigation/elements/back-icon.png")); const native_1 = require("../../native"); +const MaskedView_1 = require("../MaskedView"); function HeaderBackButton({ disabled, allowFontScaling, backImage, label, labelStyle, displayMode = react_native_1.Platform.OS === 'ios' ? 'default' : 'minimal', onLabelLayout, onPress, pressColor, pressOpacity, screenLayout, tintColor, titleLayout, truncatedLabel = 'Back', accessibilityLabel = label && label !== 'Back' ? `${label}, back` : 'Go back', testID, style, href, }) { const { colors, fonts } = (0, native_1.useTheme)(); const { direction } = (0, native_1.useLocale)(); diff --git a/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.js.map b/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.js.map index 933694e17a8fdc..f576f8094e0a4e 100644 --- a/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.js.map +++ b/packages/expo-router/build/react-navigation/elements/Header/HeaderBackButton.js.map @@ -1 +1 @@ -{"version":3,"file":"HeaderBackButton.js","sourceRoot":"","sources":["../../../../src/react-navigation/elements/Header/HeaderBackButton.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport * as React from 'react';\nimport {\n Animated,\n Image,\n Platform,\n type StyleProp,\n StyleSheet,\n type TextStyle,\n View,\n} from 'react-native';\n\nimport backIconMask from '../../../../assets/react-navigation/elements/back-icon-mask.png';\nimport backIcon from '../../../../assets/react-navigation/elements/back-icon.png';\nimport { MaskedView } from '../MaskedView';\nimport type { HeaderBackButtonProps } from '../types';\nimport { HeaderButton } from './HeaderButton';\nimport { HeaderIcon, ICON_MARGIN } from './HeaderIcon';\nimport { useLocale, useTheme } from '../../native';\n\nexport function HeaderBackButton({\n disabled,\n allowFontScaling,\n backImage,\n label,\n labelStyle,\n displayMode = Platform.OS === 'ios' ? 'default' : 'minimal',\n onLabelLayout,\n onPress,\n pressColor,\n pressOpacity,\n screenLayout,\n tintColor,\n titleLayout,\n truncatedLabel = 'Back',\n accessibilityLabel = label && label !== 'Back' ? `${label}, back` : 'Go back',\n testID,\n style,\n href,\n}: HeaderBackButtonProps) {\n const { colors, fonts } = useTheme();\n const { direction } = useLocale();\n\n const [labelWidth, setLabelWidth] = React.useState(null);\n const [truncatedLabelWidth, setTruncatedLabelWidth] = React.useState(null);\n\n const renderBackImage = () => {\n if (backImage) {\n return backImage({ tintColor: tintColor ?? colors.text });\n } else {\n return (\n \n );\n }\n };\n\n const renderLabel = () => {\n if (displayMode === 'minimal') {\n return null;\n }\n\n const availableSpace =\n titleLayout && screenLayout\n ? (screenLayout.width - titleLayout.width) / 2 - (ICON_WIDTH + ICON_MARGIN)\n : null;\n\n const potentialLabelText = displayMode === 'default' ? label : truncatedLabel;\n const finalLabelText =\n availableSpace && labelWidth && truncatedLabelWidth\n ? availableSpace > labelWidth\n ? potentialLabelText\n : availableSpace > truncatedLabelWidth\n ? truncatedLabel\n : null\n : potentialLabelText;\n\n const commonStyle: Animated.WithAnimatedValue> = [\n fonts.regular,\n styles.label,\n labelStyle,\n ];\n\n const hiddenStyle: Animated.WithAnimatedValue> = [\n commonStyle,\n {\n position: 'absolute',\n top: 0,\n left: 0,\n opacity: 0,\n },\n ];\n\n const labelElement = (\n \n {label && displayMode === 'default' ? (\n setLabelWidth(e.nativeEvent.layout.width)}>\n {label}\n \n ) : null}\n {truncatedLabel ? (\n setTruncatedLabelWidth(e.nativeEvent.layout.width)}>\n {truncatedLabel}\n \n ) : null}\n {finalLabelText ? (\n \n {finalLabelText}\n \n ) : null}\n \n );\n\n if (backImage || Platform.OS !== 'ios') {\n // When a custom backimage is specified, we can't mask the label\n // Otherwise there might be weird effect due to our mask not being the same as the image\n return labelElement;\n }\n\n return (\n \n \n \n \n }>\n {labelElement}\n \n );\n };\n\n const handlePress = () => {\n if (onPress) {\n requestAnimationFrame(() => onPress());\n }\n };\n\n return (\n \n <>\n {renderBackImage()}\n {renderLabel()}\n \n \n );\n}\n\nconst ICON_WIDTH = Platform.OS === 'ios' ? 13 : 24;\nconst ICON_MARGIN_END = Platform.OS === 'ios' ? 22 : 3;\n\nconst styles = StyleSheet.create({\n container: {\n paddingHorizontal: 0,\n minWidth: StyleSheet.hairlineWidth, // Avoid collapsing when title is long\n ...Platform.select({\n ios: null,\n default: {\n marginVertical: 3,\n marginHorizontal: 11,\n },\n }),\n },\n label: {\n fontSize: 17,\n // Title and back label are a bit different width due to title being bold\n // Adjusting the letterSpacing makes them coincide better\n letterSpacing: 0.35,\n },\n labelWrapper: {\n // These styles will make sure that the label doesn't fill the available space\n // Otherwise it messes with the measurement of the label\n flexDirection: 'row',\n alignItems: 'flex-start',\n marginEnd: ICON_MARGIN,\n },\n icon: {\n width: ICON_WIDTH,\n marginEnd: ICON_MARGIN_END,\n },\n iconWithLabel:\n Platform.OS === 'ios'\n ? {\n marginEnd: 6,\n }\n : {},\n iconMaskContainer: {\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'center',\n },\n iconMaskFillerRect: {\n flex: 1,\n backgroundColor: '#000',\n },\n iconMask: {\n height: 21,\n width: 13,\n marginStart: -14.5,\n marginVertical: 12,\n alignSelf: 'center',\n },\n flip: {\n transform: 'scaleX(-1)',\n },\n});\n"]} \ No newline at end of file +{"version":3,"file":"HeaderBackButton.js","sourceRoot":"","sources":["../../../../src/react-navigation/elements/Header/HeaderBackButton.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport * as React from 'react';\nimport {\n Animated,\n Image,\n Platform,\n type StyleProp,\n StyleSheet,\n type TextStyle,\n View,\n} from 'react-native';\n\nimport { HeaderButton } from './HeaderButton';\nimport { HeaderIcon, ICON_MARGIN } from './HeaderIcon';\nimport backIconMask from '../../../../assets/react-navigation/elements/back-icon-mask.png';\nimport backIcon from '../../../../assets/react-navigation/elements/back-icon.png';\nimport { useLocale, useTheme } from '../../native';\nimport { MaskedView } from '../MaskedView';\nimport type { HeaderBackButtonProps } from '../types';\n\nexport function HeaderBackButton({\n disabled,\n allowFontScaling,\n backImage,\n label,\n labelStyle,\n displayMode = Platform.OS === 'ios' ? 'default' : 'minimal',\n onLabelLayout,\n onPress,\n pressColor,\n pressOpacity,\n screenLayout,\n tintColor,\n titleLayout,\n truncatedLabel = 'Back',\n accessibilityLabel = label && label !== 'Back' ? `${label}, back` : 'Go back',\n testID,\n style,\n href,\n}: HeaderBackButtonProps) {\n const { colors, fonts } = useTheme();\n const { direction } = useLocale();\n\n const [labelWidth, setLabelWidth] = React.useState(null);\n const [truncatedLabelWidth, setTruncatedLabelWidth] = React.useState(null);\n\n const renderBackImage = () => {\n if (backImage) {\n return backImage({ tintColor: tintColor ?? colors.text });\n } else {\n return (\n \n );\n }\n };\n\n const renderLabel = () => {\n if (displayMode === 'minimal') {\n return null;\n }\n\n const availableSpace =\n titleLayout && screenLayout\n ? (screenLayout.width - titleLayout.width) / 2 - (ICON_WIDTH + ICON_MARGIN)\n : null;\n\n const potentialLabelText = displayMode === 'default' ? label : truncatedLabel;\n const finalLabelText =\n availableSpace && labelWidth && truncatedLabelWidth\n ? availableSpace > labelWidth\n ? potentialLabelText\n : availableSpace > truncatedLabelWidth\n ? truncatedLabel\n : null\n : potentialLabelText;\n\n const commonStyle: Animated.WithAnimatedValue> = [\n fonts.regular,\n styles.label,\n labelStyle,\n ];\n\n const hiddenStyle: Animated.WithAnimatedValue> = [\n commonStyle,\n {\n position: 'absolute',\n top: 0,\n left: 0,\n opacity: 0,\n },\n ];\n\n const labelElement = (\n \n {label && displayMode === 'default' ? (\n setLabelWidth(e.nativeEvent.layout.width)}>\n {label}\n \n ) : null}\n {truncatedLabel ? (\n setTruncatedLabelWidth(e.nativeEvent.layout.width)}>\n {truncatedLabel}\n \n ) : null}\n {finalLabelText ? (\n \n {finalLabelText}\n \n ) : null}\n \n );\n\n if (backImage || Platform.OS !== 'ios') {\n // When a custom backimage is specified, we can't mask the label\n // Otherwise there might be weird effect due to our mask not being the same as the image\n return labelElement;\n }\n\n return (\n \n \n \n \n }>\n {labelElement}\n \n );\n };\n\n const handlePress = () => {\n if (onPress) {\n requestAnimationFrame(() => onPress());\n }\n };\n\n return (\n \n <>\n {renderBackImage()}\n {renderLabel()}\n \n \n );\n}\n\nconst ICON_WIDTH = Platform.OS === 'ios' ? 13 : 24;\nconst ICON_MARGIN_END = Platform.OS === 'ios' ? 22 : 3;\n\nconst styles = StyleSheet.create({\n container: {\n paddingHorizontal: 0,\n minWidth: StyleSheet.hairlineWidth, // Avoid collapsing when title is long\n ...Platform.select({\n ios: null,\n default: {\n marginVertical: 3,\n marginHorizontal: 11,\n },\n }),\n },\n label: {\n fontSize: 17,\n // Title and back label are a bit different width due to title being bold\n // Adjusting the letterSpacing makes them coincide better\n letterSpacing: 0.35,\n },\n labelWrapper: {\n // These styles will make sure that the label doesn't fill the available space\n // Otherwise it messes with the measurement of the label\n flexDirection: 'row',\n alignItems: 'flex-start',\n marginEnd: ICON_MARGIN,\n },\n icon: {\n width: ICON_WIDTH,\n marginEnd: ICON_MARGIN_END,\n },\n iconWithLabel:\n Platform.OS === 'ios'\n ? {\n marginEnd: 6,\n }\n : {},\n iconMaskContainer: {\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'center',\n },\n iconMaskFillerRect: {\n flex: 1,\n backgroundColor: '#000',\n },\n iconMask: {\n height: 21,\n width: 13,\n marginStart: -14.5,\n marginVertical: 12,\n alignSelf: 'center',\n },\n flip: {\n transform: 'scaleX(-1)',\n },\n});\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts b/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts index 70daada96160ca..218c4291fdb576 100644 --- a/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts +++ b/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts @@ -1,6 +1,6 @@ import { type ScreenStackHeaderConfigProps } from 'react-native-screens'; -import type { NativeStackNavigationOptions } from '../types'; import { type Route } from '../../native'; +import type { NativeStackNavigationOptions } from '../types'; type Props = NativeStackNavigationOptions & { headerTopInsetEnabled: boolean; headerHeight: number; diff --git a/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts.map b/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts.map index b3ea5b184fe439..0bdee9206f19df 100644 --- a/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts.map +++ b/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"useHeaderConfigProps.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/useHeaderConfigProps.tsx"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,4BAA4B,EAKlC,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAKV,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,KAAK,KAAK,EAAmC,MAAM,cAAc,CAAC;AAE3E,KAAK,KAAK,GAAG,4BAA4B,GAAG;IAC1C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IACxE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACtB,CAAC;AAoIF,wBAAgB,oBAAoB,CAAC,EACnC,cAAc,EACd,qBAAqB,EACrB,2BAA2B,EAC3B,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAAE,0BAA0B,EAC5C,uBAAoD,EACpD,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,EACV,KAAK,EACL,KAAK,EACL,wBAAwB,EAAE,eAAe,EACzC,yBAAyB,EAAE,gBAAgB,GAC5C,EAAE,KAAK,GAAG,4BAA4B,CAwRtC"} \ No newline at end of file +{"version":3,"file":"useHeaderConfigProps.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/useHeaderConfigProps.tsx"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,4BAA4B,EAKlC,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,KAAK,KAAK,EAAmC,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAKV,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAElB,KAAK,KAAK,GAAG,4BAA4B,GAAG;IAC1C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IACxE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACtB,CAAC;AAoIF,wBAAgB,oBAAoB,CAAC,EACnC,cAAc,EACd,qBAAqB,EACrB,2BAA2B,EAC3B,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAAE,0BAA0B,EAC5C,uBAAoD,EACpD,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,EACV,KAAK,EACL,KAAK,EACL,wBAAwB,EAAE,eAAe,EACzC,yBAAyB,EAAE,gBAAgB,GAC5C,EAAE,KAAK,GAAG,4BAA4B,CAwRtC"} \ No newline at end of file diff --git a/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.js b/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.js index acc3b9c83ace09..2de6d160cedffb 100644 --- a/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.js +++ b/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.js @@ -5,9 +5,9 @@ exports.useHeaderConfigProps = useHeaderConfigProps; const jsx_runtime_1 = require("react/jsx-runtime"); const react_native_1 = require("react-native"); const react_native_screens_1 = require("react-native-screens"); -const elements_1 = require("../../elements"); const FontProcessor_1 = require("./FontProcessor"); const color_1 = require("../../../utils/color"); +const elements_1 = require("../../elements"); const native_1 = require("../../native"); const processBarButtonItems = (items, colors, fonts) => { return items diff --git a/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.js.map b/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.js.map index ebacd4970425ab..aa1e771f41aa1b 100644 --- a/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.js.map +++ b/packages/expo-router/build/react-navigation/native-stack/views/useHeaderConfigProps.js.map @@ -1 +1 @@ -{"version":3,"file":"useHeaderConfigProps.js","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/useHeaderConfigProps.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport { Platform, StyleSheet, type TextStyle, View } from 'react-native';\nimport {\n type HeaderBarButtonItemMenuAction,\n type HeaderBarButtonItemSubmenu,\n type HeaderBarButtonItemWithAction,\n type HeaderBarButtonItemWithMenu,\n isSearchBarAvailableForCurrentPlatform,\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n type ScreenStackHeaderConfigProps,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n} from 'react-native-screens';\n\nimport { getHeaderTitle, HeaderTitle } from '../../elements';\nimport type {\n NativeStackHeaderItem,\n NativeStackHeaderItemButton,\n NativeStackHeaderItemMenuAction,\n NativeStackHeaderItemMenuSubmenu,\n NativeStackNavigationOptions,\n} from '../types';\nimport { processFonts } from './FontProcessor';\nimport { Color } from '../../../utils/color';\nimport { type Route, type Theme, useLocale, useTheme } from '../../native';\n\ntype Props = NativeStackNavigationOptions & {\n headerTopInsetEnabled: boolean;\n headerHeight: number;\n headerBack: { title?: string | undefined; href: undefined } | undefined;\n route: Route;\n};\n\nconst processBarButtonItems = (\n items: NativeStackHeaderItem[] | undefined,\n colors: Theme['colors'],\n fonts: Theme['fonts']\n) => {\n return items\n ?.map((item, index) => {\n if (item.type === 'custom') {\n // Handled with `ScreenStackHeaderLeftView` or `ScreenStackHeaderRightView`\n return null;\n }\n\n if (item.type === 'spacing') {\n if (item.spacing == null) {\n throw new Error(\n `Spacing item must have a 'spacing' property defined: ${JSON.stringify(item)}`\n );\n }\n\n return item;\n }\n\n if (item.type === 'button' || item.type === 'menu') {\n if (item.type === 'menu' && item.menu == null) {\n throw new Error(`Menu item must have a 'menu' property defined: ${JSON.stringify(item)}`);\n }\n\n const { badge, label, labelStyle, icon, ...rest } = item;\n\n const processedItemCommon = {\n ...rest,\n index,\n title: label,\n titleStyle: {\n ...fonts.regular,\n ...labelStyle,\n },\n icon: transformIcon(icon),\n };\n\n let processedItem: HeaderBarButtonItemWithAction | HeaderBarButtonItemWithMenu;\n\n if (processedItemCommon.type === 'menu' && item.type === 'menu') {\n const { multiselectable, layout } = item.menu;\n\n processedItem = {\n ...processedItemCommon,\n menu: {\n ...processedItemCommon.menu,\n singleSelection: !multiselectable,\n displayAsPalette: layout === 'palette',\n items: item.menu.items.map(getMenuItem),\n },\n };\n } else if (processedItemCommon.type === 'button' && item.type === 'button') {\n processedItem = processedItemCommon;\n } else {\n throw new Error(\n `Invalid item type: ${JSON.stringify(item)}. Valid types are 'button' and 'menu'.`\n );\n }\n\n if (badge) {\n const badgeBackgroundColor = badge.style?.backgroundColor ?? colors.notification;\n const badgeTextColor = Color(badgeBackgroundColor)?.isLight() ? 'black' : 'white';\n\n processedItem = {\n ...processedItem,\n badge: {\n ...badge,\n value: String(badge.value),\n style: {\n backgroundColor: badgeBackgroundColor,\n color: badgeTextColor,\n ...fonts.regular,\n ...badge.style,\n },\n },\n };\n }\n\n return processedItem;\n }\n\n throw new Error(\n `Invalid item type: ${JSON.stringify(item)}. Valid types are 'button', 'menu', 'custom' and 'spacing'.`\n );\n })\n .filter((item) => item != null);\n};\n\nconst transformIcon = (\n icon: NativeStackHeaderItemButton['icon']\n): HeaderBarButtonItemWithAction['icon'] | HeaderBarButtonItemWithMenu['icon'] => {\n if (icon?.type === 'image') {\n return icon.tinted === false\n ? { type: 'imageSource', imageSource: icon.source }\n : { type: 'templateSource', templateSource: icon.source };\n }\n\n return icon;\n};\n\nconst getMenuItem = (\n item: NativeStackHeaderItemMenuAction | NativeStackHeaderItemMenuSubmenu\n): HeaderBarButtonItemMenuAction | HeaderBarButtonItemSubmenu => {\n if (item.type === 'submenu') {\n const { label, icon, inline, layout, items, multiselectable, ...rest } = item;\n\n return {\n ...rest,\n icon: transformIcon(icon),\n title: label,\n displayAsPalette: layout === 'palette',\n displayInline: inline,\n singleSelection: !multiselectable,\n items: items.map(getMenuItem),\n };\n }\n\n const { label, icon, description, ...rest } = item;\n\n return {\n ...rest,\n icon: transformIcon(icon),\n title: label,\n subtitle: description,\n };\n};\n\nexport function useHeaderConfigProps({\n headerBackIcon,\n headerBackImageSource,\n headerBackButtonDisplayMode,\n headerBackButtonMenuEnabled,\n headerBackTitle,\n headerBackTitleStyle,\n headerBackVisible,\n headerShadowVisible,\n headerLargeStyle,\n headerLargeTitle: headerLargeTitleDeprecated,\n headerLargeTitleEnabled = headerLargeTitleDeprecated,\n headerLargeTitleShadowVisible,\n headerLargeTitleStyle,\n headerBackground,\n headerLeft,\n headerRight,\n headerShown,\n headerStyle,\n headerBlurEffect,\n headerTintColor,\n headerTitle,\n headerTitleAlign,\n headerTitleStyle,\n headerTransparent,\n headerSearchBarOptions,\n headerTopInsetEnabled,\n headerBack,\n route,\n title,\n unstable_headerLeftItems: headerLeftItems,\n unstable_headerRightItems: headerRightItems,\n}: Props): ScreenStackHeaderConfigProps {\n const { direction } = useLocale();\n const { colors, fonts, dark } = useTheme();\n const tintColor = headerTintColor ?? (Platform.OS === 'ios' ? colors.primary : colors.text);\n\n const headerBackTitleStyleFlattened =\n StyleSheet.flatten([fonts.regular, headerBackTitleStyle]) || {};\n const headerLargeTitleStyleFlattened =\n StyleSheet.flatten([\n Platform.select({ ios: fonts.heavy, default: fonts.medium }),\n headerLargeTitleStyle,\n ]) || {};\n const headerTitleStyleFlattened =\n StyleSheet.flatten([\n Platform.select({ ios: fonts.bold, default: fonts.medium }),\n headerTitleStyle,\n ]) || {};\n const headerStyleFlattened = StyleSheet.flatten(headerStyle) || {};\n const headerLargeStyleFlattened = StyleSheet.flatten(headerLargeStyle) || {};\n\n const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = processFonts([\n headerBackTitleStyleFlattened.fontFamily,\n headerLargeTitleStyleFlattened.fontFamily,\n headerTitleStyleFlattened.fontFamily,\n ]);\n\n const backTitleFontSize =\n 'fontSize' in headerBackTitleStyleFlattened\n ? headerBackTitleStyleFlattened.fontSize\n : undefined;\n\n const titleText = getHeaderTitle({ title, headerTitle }, route.name);\n const titleColor =\n 'color' in headerTitleStyleFlattened\n ? headerTitleStyleFlattened.color\n : (headerTintColor ?? colors.text);\n const titleFontSize =\n 'fontSize' in headerTitleStyleFlattened ? headerTitleStyleFlattened.fontSize : undefined;\n const titleFontWeight = headerTitleStyleFlattened.fontWeight;\n\n const largeTitleBackgroundColor = headerLargeStyleFlattened.backgroundColor;\n const largeTitleColor =\n 'color' in headerLargeTitleStyleFlattened ? headerLargeTitleStyleFlattened.color : undefined;\n const largeTitleFontSize =\n 'fontSize' in headerLargeTitleStyleFlattened\n ? headerLargeTitleStyleFlattened.fontSize\n : undefined;\n const largeTitleFontWeight = headerLargeTitleStyleFlattened.fontWeight;\n\n const headerTitleStyleSupported: TextStyle = { color: titleColor };\n\n if (headerTitleStyleFlattened.fontFamily != null) {\n headerTitleStyleSupported.fontFamily = headerTitleStyleFlattened.fontFamily;\n }\n\n if (titleFontSize != null) {\n headerTitleStyleSupported.fontSize = titleFontSize;\n }\n\n if (titleFontWeight != null) {\n headerTitleStyleSupported.fontWeight = titleFontWeight;\n }\n\n const headerBackgroundColor =\n headerStyleFlattened.backgroundColor ??\n (headerBackground != null ||\n headerTransparent ||\n // The title becomes invisible if background color is set with large title on iOS 26\n (Platform.OS === 'ios' && headerLargeTitleEnabled)\n ? 'transparent'\n : colors.card);\n\n const canGoBack = headerBack != null;\n\n const headerLeftElement = headerLeft?.({\n tintColor,\n canGoBack,\n backgroundColor: headerBackgroundColor,\n label: headerBackTitle ?? headerBack?.title,\n // `href` is only applicable to web\n href: undefined,\n });\n\n const headerRightElement = headerRight?.({\n tintColor,\n canGoBack,\n backgroundColor: headerBackgroundColor,\n });\n\n const headerTitleElement =\n typeof headerTitle === 'function'\n ? headerTitle({\n tintColor,\n children: titleText,\n })\n : null;\n\n const supportsHeaderSearchBar =\n typeof isSearchBarAvailableForCurrentPlatform === 'boolean'\n ? isSearchBarAvailableForCurrentPlatform\n : // Fallback for older versions of react-native-screens\n Platform.OS === 'ios' && SearchBar != null;\n\n const hasHeaderSearchBar = supportsHeaderSearchBar && headerSearchBarOptions != null;\n\n /**\n * We need to set this in if:\n * - Back button should stay visible when `headerLeft` is specified\n * - If `headerTitle` for Android is specified, so we only need to remove the title and keep the back button\n */\n const backButtonInCustomView =\n headerBackVisible ||\n (Platform.OS === 'android' && headerTitleElement != null && headerLeftElement == null);\n\n const translucent =\n headerBackground != null ||\n headerTransparent ||\n // When using a SearchBar or large title, the header needs to be translucent for it to work on iOS\n ((hasHeaderSearchBar || headerLargeTitleEnabled) &&\n Platform.OS === 'ios' &&\n headerTransparent !== false);\n\n const isBackButtonDisplayModeAvailable =\n // On iOS 14+\n Platform.OS === 'ios' &&\n parseInt(Platform.Version, 10) >= 14 &&\n // Doesn't have custom styling, by default System, see: https://github.com/software-mansion/react-native-screens/pull/2105#discussion_r1565222738\n (backTitleFontFamily == null || backTitleFontFamily === 'System') &&\n backTitleFontSize == null &&\n // Back button menu is not disabled\n headerBackButtonMenuEnabled !== false;\n\n const isCenterViewRenderedAndroid = headerTitleAlign === 'center';\n\n const leftItems = headerLeftItems?.({\n tintColor,\n canGoBack,\n });\n\n let rightItems = headerRightItems?.({\n tintColor,\n canGoBack,\n });\n\n if (rightItems) {\n // iOS renders right items in reverse order\n // So we need to reverse them here to match the order\n rightItems = [...rightItems].reverse();\n }\n\n const children = (\n <>\n {Platform.OS === 'ios' ? (\n <>\n {leftItems ? (\n leftItems.map((item, index) => {\n if (item.type === 'custom') {\n return (\n \n {item.element}\n \n );\n }\n\n return null;\n })\n ) : headerLeftElement != null ? (\n {headerLeftElement}\n ) : null}\n {headerTitleElement != null ? (\n {headerTitleElement}\n ) : null}\n \n ) : (\n <>\n {headerLeftElement != null || typeof headerTitle === 'function' ? (\n // The style passed to header left, together with title element being wrapped\n // in flex view is reqruied for proper header layout, in particular,\n // for the text truncation to work.\n \n {headerLeftElement}\n {headerTitleAlign !== 'center' ? (\n typeof headerTitle === 'function' ? (\n {headerTitleElement}\n ) : (\n \n \n {titleText}\n \n \n )\n ) : null}\n \n ) : null}\n {isCenterViewRenderedAndroid ? (\n \n {typeof headerTitle === 'function' ? (\n headerTitleElement\n ) : (\n \n {titleText}\n \n )}\n \n ) : null}\n \n )}\n {headerBackIcon !== undefined || headerBackImageSource !== undefined ? (\n \n ) : null}\n {Platform.OS === 'ios' && rightItems ? (\n rightItems.map((item, index) => {\n if (item.type === 'custom') {\n return (\n \n {item.element}\n \n );\n }\n\n return null;\n })\n ) : headerRightElement != null ? (\n {headerRightElement}\n ) : null}\n {hasHeaderSearchBar ? (\n \n \n \n ) : null}\n \n );\n\n return {\n backButtonInCustomView,\n backgroundColor: headerBackgroundColor,\n backTitle: headerBackTitle,\n backTitleVisible: isBackButtonDisplayModeAvailable\n ? undefined\n : headerBackButtonDisplayMode !== 'minimal',\n backButtonDisplayMode: isBackButtonDisplayModeAvailable\n ? headerBackButtonDisplayMode\n : undefined,\n backTitleFontFamily,\n backTitleFontSize,\n blurEffect: headerBlurEffect,\n color: tintColor,\n direction,\n disableBackButtonMenu: headerBackButtonMenuEnabled === false,\n hidden: headerShown === false,\n hideBackButton: headerBackVisible === false,\n hideShadow:\n headerShadowVisible === false ||\n headerBackground != null ||\n (headerTransparent && headerShadowVisible !== true),\n largeTitle: headerLargeTitleEnabled,\n largeTitleBackgroundColor,\n largeTitleColor,\n largeTitleFontFamily,\n largeTitleFontSize,\n largeTitleFontWeight,\n largeTitleHideShadow: headerLargeTitleShadowVisible === false,\n title: titleText,\n titleColor,\n titleFontFamily,\n titleFontSize,\n titleFontWeight: String(titleFontWeight),\n topInsetEnabled: headerTopInsetEnabled,\n translucent: translucent === true,\n children,\n headerLeftBarButtonItems: processBarButtonItems(leftItems, colors, fonts),\n headerRightBarButtonItems: processBarButtonItems(rightItems, colors, fonts),\n experimental_userInterfaceStyle: dark ? 'dark' : 'light',\n } as const;\n}\n"]} \ No newline at end of file +{"version":3,"file":"useHeaderConfigProps.js","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/useHeaderConfigProps.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AAsKb,oDAwTC;;AA7dD,+CAA0E;AAC1E,+DAa8B;AAE9B,mDAA+C;AAC/C,gDAA6C;AAC7C,6CAA6D;AAC7D,yCAA2E;AAgB3E,MAAM,qBAAqB,GAAG,CAC5B,KAA0C,EAC1C,MAAuB,EACvB,KAAqB,EACrB,EAAE;IACF,OAAO,KAAK;QACV,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,2EAA2E;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,wDAAwD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,kDAAkD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;YAEzD,MAAM,mBAAmB,GAAG;gBAC1B,GAAG,IAAI;gBACP,KAAK;gBACL,KAAK,EAAE,KAAK;gBACZ,UAAU,EAAE;oBACV,GAAG,KAAK,CAAC,OAAO;oBAChB,GAAG,UAAU;iBACd;gBACD,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;aAC1B,CAAC;YAEF,IAAI,aAA0E,CAAC;YAE/E,IAAI,mBAAmB,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAChE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;gBAE9C,aAAa,GAAG;oBACd,GAAG,mBAAmB;oBACtB,IAAI,EAAE;wBACJ,GAAG,mBAAmB,CAAC,IAAI;wBAC3B,eAAe,EAAE,CAAC,eAAe;wBACjC,gBAAgB,EAAE,MAAM,KAAK,SAAS;wBACtC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;qBACxC;iBACF,CAAC;YACJ,CAAC;iBAAM,IAAI,mBAAmB,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3E,aAAa,GAAG,mBAAmB,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,wCAAwC,CACnF,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,oBAAoB,GAAG,KAAK,CAAC,KAAK,EAAE,eAAe,IAAI,MAAM,CAAC,YAAY,CAAC;gBACjF,MAAM,cAAc,GAAG,IAAA,aAAK,EAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;gBAElF,aAAa,GAAG;oBACd,GAAG,aAAa;oBAChB,KAAK,EAAE;wBACL,GAAG,KAAK;wBACR,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;wBAC1B,KAAK,EAAE;4BACL,eAAe,EAAE,oBAAoB;4BACrC,KAAK,EAAE,cAAc;4BACrB,GAAG,KAAK,CAAC,OAAO;4BAChB,GAAG,KAAK,CAAC,KAAK;yBACf;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,6DAA6D,CACxG,CAAC;IACJ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CACpB,IAAyC,EACoC,EAAE;IAC/E,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK;YAC1B,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE;YACnD,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAC9D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAClB,IAAwE,EACZ,EAAE;IAC9D,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAE9E,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;YACzB,KAAK,EAAE,KAAK;YACZ,gBAAgB,EAAE,MAAM,KAAK,SAAS;YACtC,aAAa,EAAE,MAAM;YACrB,eAAe,EAAE,CAAC,eAAe;YACjC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAEnD,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;QACzB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,WAAW;KACtB,CAAC;AACJ,CAAC,CAAC;AAEF,SAAgB,oBAAoB,CAAC,EACnC,cAAc,EACd,qBAAqB,EACrB,2BAA2B,EAC3B,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAAE,0BAA0B,EAC5C,uBAAuB,GAAG,0BAA0B,EACpD,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,EACV,KAAK,EACL,KAAK,EACL,wBAAwB,EAAE,eAAe,EACzC,yBAAyB,EAAE,gBAAgB,GACrC;IACN,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,kBAAS,GAAE,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAA,iBAAQ,GAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,eAAe,IAAI,CAAC,uBAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5F,MAAM,6BAA6B,GACjC,yBAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,MAAM,8BAA8B,GAClC,yBAAU,CAAC,OAAO,CAAC;QACjB,uBAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5D,qBAAqB;KACtB,CAAC,IAAI,EAAE,CAAC;IACX,MAAM,yBAAyB,GAC7B,yBAAU,CAAC,OAAO,CAAC;QACjB,uBAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3D,gBAAgB;KACjB,CAAC,IAAI,EAAE,CAAC;IACX,MAAM,oBAAoB,GAAG,yBAAU,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACnE,MAAM,yBAAyB,GAAG,yBAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;IAE7E,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,eAAe,CAAC,GAAG,IAAA,4BAAY,EAAC;QAChF,6BAA6B,CAAC,UAAU;QACxC,8BAA8B,CAAC,UAAU;QACzC,yBAAyB,CAAC,UAAU;KACrC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GACrB,UAAU,IAAI,6BAA6B;QACzC,CAAC,CAAC,6BAA6B,CAAC,QAAQ;QACxC,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,SAAS,GAAG,IAAA,yBAAc,EAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,UAAU,GACd,OAAO,IAAI,yBAAyB;QAClC,CAAC,CAAC,yBAAyB,CAAC,KAAK;QACjC,CAAC,CAAC,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,aAAa,GACjB,UAAU,IAAI,yBAAyB,CAAC,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,MAAM,eAAe,GAAG,yBAAyB,CAAC,UAAU,CAAC;IAE7D,MAAM,yBAAyB,GAAG,yBAAyB,CAAC,eAAe,CAAC;IAC5E,MAAM,eAAe,GACnB,OAAO,IAAI,8BAA8B,CAAC,CAAC,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/F,MAAM,kBAAkB,GACtB,UAAU,IAAI,8BAA8B;QAC1C,CAAC,CAAC,8BAA8B,CAAC,QAAQ;QACzC,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,oBAAoB,GAAG,8BAA8B,CAAC,UAAU,CAAC;IAEvE,MAAM,yBAAyB,GAAc,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAEnE,IAAI,yBAAyB,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QACjD,yBAAyB,CAAC,UAAU,GAAG,yBAAyB,CAAC,UAAU,CAAC;IAC9E,CAAC;IAED,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QAC1B,yBAAyB,CAAC,QAAQ,GAAG,aAAa,CAAC;IACrD,CAAC;IAED,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;QAC5B,yBAAyB,CAAC,UAAU,GAAG,eAAe,CAAC;IACzD,CAAC;IAED,MAAM,qBAAqB,GACzB,oBAAoB,CAAC,eAAe;QACpC,CAAC,gBAAgB,IAAI,IAAI;YACzB,iBAAiB;YACjB,oFAAoF;YACpF,CAAC,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,uBAAuB,CAAC;YAChD,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEnB,MAAM,SAAS,GAAG,UAAU,IAAI,IAAI,CAAC;IAErC,MAAM,iBAAiB,GAAG,UAAU,EAAE,CAAC;QACrC,SAAS;QACT,SAAS;QACT,eAAe,EAAE,qBAAqB;QACtC,KAAK,EAAE,eAAe,IAAI,UAAU,EAAE,KAAK;QAC3C,mCAAmC;QACnC,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,WAAW,EAAE,CAAC;QACvC,SAAS;QACT,SAAS;QACT,eAAe,EAAE,qBAAqB;KACvC,CAAC,CAAC;IAEH,MAAM,kBAAkB,GACtB,OAAO,WAAW,KAAK,UAAU;QAC/B,CAAC,CAAC,WAAW,CAAC;YACV,SAAS;YACT,QAAQ,EAAE,SAAS;SACpB,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,uBAAuB,GAC3B,OAAO,6DAAsC,KAAK,SAAS;QACzD,CAAC,CAAC,6DAAsC;QACxC,CAAC,CAAC,sDAAsD;YACtD,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,gCAAS,IAAI,IAAI,CAAC;IAEjD,MAAM,kBAAkB,GAAG,uBAAuB,IAAI,sBAAsB,IAAI,IAAI,CAAC;IAErF;;;;OAIG;IACH,MAAM,sBAAsB,GAC1B,iBAAiB;QACjB,CAAC,uBAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,kBAAkB,IAAI,IAAI,IAAI,iBAAiB,IAAI,IAAI,CAAC,CAAC;IAEzF,MAAM,WAAW,GACf,gBAAgB,IAAI,IAAI;QACxB,iBAAiB;QACjB,kGAAkG;QAClG,CAAC,CAAC,kBAAkB,IAAI,uBAAuB,CAAC;YAC9C,uBAAQ,CAAC,EAAE,KAAK,KAAK;YACrB,iBAAiB,KAAK,KAAK,CAAC,CAAC;IAEjC,MAAM,gCAAgC;IACpC,aAAa;IACb,uBAAQ,CAAC,EAAE,KAAK,KAAK;QACrB,QAAQ,CAAC,uBAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,EAAE;QACpC,iJAAiJ;QACjJ,CAAC,mBAAmB,IAAI,IAAI,IAAI,mBAAmB,KAAK,QAAQ,CAAC;QACjE,iBAAiB,IAAI,IAAI;QACzB,mCAAmC;QACnC,2BAA2B,KAAK,KAAK,CAAC;IAExC,MAAM,2BAA2B,GAAG,gBAAgB,KAAK,QAAQ,CAAC;IAElE,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;QAClC,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IAEH,IAAI,UAAU,GAAG,gBAAgB,EAAE,CAAC;QAClC,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IAEH,IAAI,UAAU,EAAE,CAAC;QACf,2CAA2C;QAC3C,qDAAqD;QACrD,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,CACf,6DACG,uBAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CACvB,6DACG,SAAS,CAAC,CAAC,CAAC,CACX,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;wBAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BAC3B,OAAO,CACL,uBAAC,gDAAyB,IAExB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,YAChD,IAAI,CAAC,OAAO,IAFR,KAAK,CAGgB,CAC7B,CAAC;wBACJ,CAAC;wBAED,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,CACH,CAAC,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC,CAAC,CAC9B,uBAAC,gDAAyB,cAAE,iBAAiB,GAA6B,CAC3E,CAAC,CAAC,CAAC,IAAI,EACP,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,CAC5B,uBAAC,kDAA2B,cAAE,kBAAkB,GAA+B,CAChF,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC,CAAC,CAAC,CACF,6DACG,iBAAiB,IAAI,IAAI,IAAI,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,CAIhE,wBAAC,gDAAyB,IAAC,KAAK,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,aAChF,iBAAiB,EACjB,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC/B,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,CAClC,uBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,YAAG,kBAAkB,GAAQ,CACtD,CAAC,CAAC,CAAC,CACF,uBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,YACtB,uBAAC,sBAAW,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,yBAAyB,YAChE,SAAS,GACE,GACT,CACR,CACF,CAAC,CAAC,CAAC,IAAI,IACkB,CAC7B,CAAC,CAAC,CAAC,IAAI,EACP,2BAA2B,CAAC,CAAC,CAAC,CAC7B,uBAAC,kDAA2B,cACzB,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,CACnC,kBAAkB,CACnB,CAAC,CAAC,CAAC,CACF,uBAAC,sBAAW,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,yBAAyB,YAChE,SAAS,GACE,CACf,GAC2B,CAC/B,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,EACA,cAAc,KAAK,SAAS,IAAI,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,CACrE,uBAAC,uDAAgC,IAC/B,MAAM,EAAE,cAAc,EAAE,MAAM,IAAI,qBAAqB,GACvD,CACH,CAAC,CAAC,CAAC,IAAI,EACP,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,CACrC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3B,OAAO,CACL,uBAAC,iDAA0B,IAEzB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,YAChD,IAAI,CAAC,OAAO,IAFR,KAAK,CAGiB,CAC9B,CAAC;gBACJ,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CACH,CAAC,CAAC,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,CAC/B,uBAAC,iDAA0B,cAAE,kBAAkB,GAA8B,CAC9E,CAAC,CAAC,CAAC,IAAI,EACP,kBAAkB,CAAC,CAAC,CAAC,CACpB,uBAAC,qDAA8B,cAC7B,uBAAC,gCAAS,OAAK,sBAAsB,GAAI,GACV,CAClC,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC;IAEF,OAAO;QACL,sBAAsB;QACtB,eAAe,EAAE,qBAAqB;QACtC,SAAS,EAAE,eAAe;QAC1B,gBAAgB,EAAE,gCAAgC;YAChD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,2BAA2B,KAAK,SAAS;QAC7C,qBAAqB,EAAE,gCAAgC;YACrD,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,SAAS;QACb,mBAAmB;QACnB,iBAAiB;QACjB,UAAU,EAAE,gBAAgB;QAC5B,KAAK,EAAE,SAAS;QAChB,SAAS;QACT,qBAAqB,EAAE,2BAA2B,KAAK,KAAK;QAC5D,MAAM,EAAE,WAAW,KAAK,KAAK;QAC7B,cAAc,EAAE,iBAAiB,KAAK,KAAK;QAC3C,UAAU,EACR,mBAAmB,KAAK,KAAK;YAC7B,gBAAgB,IAAI,IAAI;YACxB,CAAC,iBAAiB,IAAI,mBAAmB,KAAK,IAAI,CAAC;QACrD,UAAU,EAAE,uBAAuB;QACnC,yBAAyB;QACzB,eAAe;QACf,oBAAoB;QACpB,kBAAkB;QAClB,oBAAoB;QACpB,oBAAoB,EAAE,6BAA6B,KAAK,KAAK;QAC7D,KAAK,EAAE,SAAS;QAChB,UAAU;QACV,eAAe;QACf,aAAa;QACb,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC;QACxC,eAAe,EAAE,qBAAqB;QACtC,WAAW,EAAE,WAAW,KAAK,IAAI;QACjC,QAAQ;QACR,wBAAwB,EAAE,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC;QACzE,yBAAyB,EAAE,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC;QAC3E,+BAA+B,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;KAChD,CAAC;AACb,CAAC","sourcesContent":["'use client';\nimport { Platform, StyleSheet, type TextStyle, View } from 'react-native';\nimport {\n type HeaderBarButtonItemMenuAction,\n type HeaderBarButtonItemSubmenu,\n type HeaderBarButtonItemWithAction,\n type HeaderBarButtonItemWithMenu,\n isSearchBarAvailableForCurrentPlatform,\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n type ScreenStackHeaderConfigProps,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n} from 'react-native-screens';\n\nimport { processFonts } from './FontProcessor';\nimport { Color } from '../../../utils/color';\nimport { getHeaderTitle, HeaderTitle } from '../../elements';\nimport { type Route, type Theme, useLocale, useTheme } from '../../native';\nimport type {\n NativeStackHeaderItem,\n NativeStackHeaderItemButton,\n NativeStackHeaderItemMenuAction,\n NativeStackHeaderItemMenuSubmenu,\n NativeStackNavigationOptions,\n} from '../types';\n\ntype Props = NativeStackNavigationOptions & {\n headerTopInsetEnabled: boolean;\n headerHeight: number;\n headerBack: { title?: string | undefined; href: undefined } | undefined;\n route: Route;\n};\n\nconst processBarButtonItems = (\n items: NativeStackHeaderItem[] | undefined,\n colors: Theme['colors'],\n fonts: Theme['fonts']\n) => {\n return items\n ?.map((item, index) => {\n if (item.type === 'custom') {\n // Handled with `ScreenStackHeaderLeftView` or `ScreenStackHeaderRightView`\n return null;\n }\n\n if (item.type === 'spacing') {\n if (item.spacing == null) {\n throw new Error(\n `Spacing item must have a 'spacing' property defined: ${JSON.stringify(item)}`\n );\n }\n\n return item;\n }\n\n if (item.type === 'button' || item.type === 'menu') {\n if (item.type === 'menu' && item.menu == null) {\n throw new Error(`Menu item must have a 'menu' property defined: ${JSON.stringify(item)}`);\n }\n\n const { badge, label, labelStyle, icon, ...rest } = item;\n\n const processedItemCommon = {\n ...rest,\n index,\n title: label,\n titleStyle: {\n ...fonts.regular,\n ...labelStyle,\n },\n icon: transformIcon(icon),\n };\n\n let processedItem: HeaderBarButtonItemWithAction | HeaderBarButtonItemWithMenu;\n\n if (processedItemCommon.type === 'menu' && item.type === 'menu') {\n const { multiselectable, layout } = item.menu;\n\n processedItem = {\n ...processedItemCommon,\n menu: {\n ...processedItemCommon.menu,\n singleSelection: !multiselectable,\n displayAsPalette: layout === 'palette',\n items: item.menu.items.map(getMenuItem),\n },\n };\n } else if (processedItemCommon.type === 'button' && item.type === 'button') {\n processedItem = processedItemCommon;\n } else {\n throw new Error(\n `Invalid item type: ${JSON.stringify(item)}. Valid types are 'button' and 'menu'.`\n );\n }\n\n if (badge) {\n const badgeBackgroundColor = badge.style?.backgroundColor ?? colors.notification;\n const badgeTextColor = Color(badgeBackgroundColor)?.isLight() ? 'black' : 'white';\n\n processedItem = {\n ...processedItem,\n badge: {\n ...badge,\n value: String(badge.value),\n style: {\n backgroundColor: badgeBackgroundColor,\n color: badgeTextColor,\n ...fonts.regular,\n ...badge.style,\n },\n },\n };\n }\n\n return processedItem;\n }\n\n throw new Error(\n `Invalid item type: ${JSON.stringify(item)}. Valid types are 'button', 'menu', 'custom' and 'spacing'.`\n );\n })\n .filter((item) => item != null);\n};\n\nconst transformIcon = (\n icon: NativeStackHeaderItemButton['icon']\n): HeaderBarButtonItemWithAction['icon'] | HeaderBarButtonItemWithMenu['icon'] => {\n if (icon?.type === 'image') {\n return icon.tinted === false\n ? { type: 'imageSource', imageSource: icon.source }\n : { type: 'templateSource', templateSource: icon.source };\n }\n\n return icon;\n};\n\nconst getMenuItem = (\n item: NativeStackHeaderItemMenuAction | NativeStackHeaderItemMenuSubmenu\n): HeaderBarButtonItemMenuAction | HeaderBarButtonItemSubmenu => {\n if (item.type === 'submenu') {\n const { label, icon, inline, layout, items, multiselectable, ...rest } = item;\n\n return {\n ...rest,\n icon: transformIcon(icon),\n title: label,\n displayAsPalette: layout === 'palette',\n displayInline: inline,\n singleSelection: !multiselectable,\n items: items.map(getMenuItem),\n };\n }\n\n const { label, icon, description, ...rest } = item;\n\n return {\n ...rest,\n icon: transformIcon(icon),\n title: label,\n subtitle: description,\n };\n};\n\nexport function useHeaderConfigProps({\n headerBackIcon,\n headerBackImageSource,\n headerBackButtonDisplayMode,\n headerBackButtonMenuEnabled,\n headerBackTitle,\n headerBackTitleStyle,\n headerBackVisible,\n headerShadowVisible,\n headerLargeStyle,\n headerLargeTitle: headerLargeTitleDeprecated,\n headerLargeTitleEnabled = headerLargeTitleDeprecated,\n headerLargeTitleShadowVisible,\n headerLargeTitleStyle,\n headerBackground,\n headerLeft,\n headerRight,\n headerShown,\n headerStyle,\n headerBlurEffect,\n headerTintColor,\n headerTitle,\n headerTitleAlign,\n headerTitleStyle,\n headerTransparent,\n headerSearchBarOptions,\n headerTopInsetEnabled,\n headerBack,\n route,\n title,\n unstable_headerLeftItems: headerLeftItems,\n unstable_headerRightItems: headerRightItems,\n}: Props): ScreenStackHeaderConfigProps {\n const { direction } = useLocale();\n const { colors, fonts, dark } = useTheme();\n const tintColor = headerTintColor ?? (Platform.OS === 'ios' ? colors.primary : colors.text);\n\n const headerBackTitleStyleFlattened =\n StyleSheet.flatten([fonts.regular, headerBackTitleStyle]) || {};\n const headerLargeTitleStyleFlattened =\n StyleSheet.flatten([\n Platform.select({ ios: fonts.heavy, default: fonts.medium }),\n headerLargeTitleStyle,\n ]) || {};\n const headerTitleStyleFlattened =\n StyleSheet.flatten([\n Platform.select({ ios: fonts.bold, default: fonts.medium }),\n headerTitleStyle,\n ]) || {};\n const headerStyleFlattened = StyleSheet.flatten(headerStyle) || {};\n const headerLargeStyleFlattened = StyleSheet.flatten(headerLargeStyle) || {};\n\n const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = processFonts([\n headerBackTitleStyleFlattened.fontFamily,\n headerLargeTitleStyleFlattened.fontFamily,\n headerTitleStyleFlattened.fontFamily,\n ]);\n\n const backTitleFontSize =\n 'fontSize' in headerBackTitleStyleFlattened\n ? headerBackTitleStyleFlattened.fontSize\n : undefined;\n\n const titleText = getHeaderTitle({ title, headerTitle }, route.name);\n const titleColor =\n 'color' in headerTitleStyleFlattened\n ? headerTitleStyleFlattened.color\n : (headerTintColor ?? colors.text);\n const titleFontSize =\n 'fontSize' in headerTitleStyleFlattened ? headerTitleStyleFlattened.fontSize : undefined;\n const titleFontWeight = headerTitleStyleFlattened.fontWeight;\n\n const largeTitleBackgroundColor = headerLargeStyleFlattened.backgroundColor;\n const largeTitleColor =\n 'color' in headerLargeTitleStyleFlattened ? headerLargeTitleStyleFlattened.color : undefined;\n const largeTitleFontSize =\n 'fontSize' in headerLargeTitleStyleFlattened\n ? headerLargeTitleStyleFlattened.fontSize\n : undefined;\n const largeTitleFontWeight = headerLargeTitleStyleFlattened.fontWeight;\n\n const headerTitleStyleSupported: TextStyle = { color: titleColor };\n\n if (headerTitleStyleFlattened.fontFamily != null) {\n headerTitleStyleSupported.fontFamily = headerTitleStyleFlattened.fontFamily;\n }\n\n if (titleFontSize != null) {\n headerTitleStyleSupported.fontSize = titleFontSize;\n }\n\n if (titleFontWeight != null) {\n headerTitleStyleSupported.fontWeight = titleFontWeight;\n }\n\n const headerBackgroundColor =\n headerStyleFlattened.backgroundColor ??\n (headerBackground != null ||\n headerTransparent ||\n // The title becomes invisible if background color is set with large title on iOS 26\n (Platform.OS === 'ios' && headerLargeTitleEnabled)\n ? 'transparent'\n : colors.card);\n\n const canGoBack = headerBack != null;\n\n const headerLeftElement = headerLeft?.({\n tintColor,\n canGoBack,\n backgroundColor: headerBackgroundColor,\n label: headerBackTitle ?? headerBack?.title,\n // `href` is only applicable to web\n href: undefined,\n });\n\n const headerRightElement = headerRight?.({\n tintColor,\n canGoBack,\n backgroundColor: headerBackgroundColor,\n });\n\n const headerTitleElement =\n typeof headerTitle === 'function'\n ? headerTitle({\n tintColor,\n children: titleText,\n })\n : null;\n\n const supportsHeaderSearchBar =\n typeof isSearchBarAvailableForCurrentPlatform === 'boolean'\n ? isSearchBarAvailableForCurrentPlatform\n : // Fallback for older versions of react-native-screens\n Platform.OS === 'ios' && SearchBar != null;\n\n const hasHeaderSearchBar = supportsHeaderSearchBar && headerSearchBarOptions != null;\n\n /**\n * We need to set this in if:\n * - Back button should stay visible when `headerLeft` is specified\n * - If `headerTitle` for Android is specified, so we only need to remove the title and keep the back button\n */\n const backButtonInCustomView =\n headerBackVisible ||\n (Platform.OS === 'android' && headerTitleElement != null && headerLeftElement == null);\n\n const translucent =\n headerBackground != null ||\n headerTransparent ||\n // When using a SearchBar or large title, the header needs to be translucent for it to work on iOS\n ((hasHeaderSearchBar || headerLargeTitleEnabled) &&\n Platform.OS === 'ios' &&\n headerTransparent !== false);\n\n const isBackButtonDisplayModeAvailable =\n // On iOS 14+\n Platform.OS === 'ios' &&\n parseInt(Platform.Version, 10) >= 14 &&\n // Doesn't have custom styling, by default System, see: https://github.com/software-mansion/react-native-screens/pull/2105#discussion_r1565222738\n (backTitleFontFamily == null || backTitleFontFamily === 'System') &&\n backTitleFontSize == null &&\n // Back button menu is not disabled\n headerBackButtonMenuEnabled !== false;\n\n const isCenterViewRenderedAndroid = headerTitleAlign === 'center';\n\n const leftItems = headerLeftItems?.({\n tintColor,\n canGoBack,\n });\n\n let rightItems = headerRightItems?.({\n tintColor,\n canGoBack,\n });\n\n if (rightItems) {\n // iOS renders right items in reverse order\n // So we need to reverse them here to match the order\n rightItems = [...rightItems].reverse();\n }\n\n const children = (\n <>\n {Platform.OS === 'ios' ? (\n <>\n {leftItems ? (\n leftItems.map((item, index) => {\n if (item.type === 'custom') {\n return (\n \n {item.element}\n \n );\n }\n\n return null;\n })\n ) : headerLeftElement != null ? (\n {headerLeftElement}\n ) : null}\n {headerTitleElement != null ? (\n {headerTitleElement}\n ) : null}\n \n ) : (\n <>\n {headerLeftElement != null || typeof headerTitle === 'function' ? (\n // The style passed to header left, together with title element being wrapped\n // in flex view is reqruied for proper header layout, in particular,\n // for the text truncation to work.\n \n {headerLeftElement}\n {headerTitleAlign !== 'center' ? (\n typeof headerTitle === 'function' ? (\n {headerTitleElement}\n ) : (\n \n \n {titleText}\n \n \n )\n ) : null}\n \n ) : null}\n {isCenterViewRenderedAndroid ? (\n \n {typeof headerTitle === 'function' ? (\n headerTitleElement\n ) : (\n \n {titleText}\n \n )}\n \n ) : null}\n \n )}\n {headerBackIcon !== undefined || headerBackImageSource !== undefined ? (\n \n ) : null}\n {Platform.OS === 'ios' && rightItems ? (\n rightItems.map((item, index) => {\n if (item.type === 'custom') {\n return (\n \n {item.element}\n \n );\n }\n\n return null;\n })\n ) : headerRightElement != null ? (\n {headerRightElement}\n ) : null}\n {hasHeaderSearchBar ? (\n \n \n \n ) : null}\n \n );\n\n return {\n backButtonInCustomView,\n backgroundColor: headerBackgroundColor,\n backTitle: headerBackTitle,\n backTitleVisible: isBackButtonDisplayModeAvailable\n ? undefined\n : headerBackButtonDisplayMode !== 'minimal',\n backButtonDisplayMode: isBackButtonDisplayModeAvailable\n ? headerBackButtonDisplayMode\n : undefined,\n backTitleFontFamily,\n backTitleFontSize,\n blurEffect: headerBlurEffect,\n color: tintColor,\n direction,\n disableBackButtonMenu: headerBackButtonMenuEnabled === false,\n hidden: headerShown === false,\n hideBackButton: headerBackVisible === false,\n hideShadow:\n headerShadowVisible === false ||\n headerBackground != null ||\n (headerTransparent && headerShadowVisible !== true),\n largeTitle: headerLargeTitleEnabled,\n largeTitleBackgroundColor,\n largeTitleColor,\n largeTitleFontFamily,\n largeTitleFontSize,\n largeTitleFontWeight,\n largeTitleHideShadow: headerLargeTitleShadowVisible === false,\n title: titleText,\n titleColor,\n titleFontFamily,\n titleFontSize,\n titleFontWeight: String(titleFontWeight),\n topInsetEnabled: headerTopInsetEnabled,\n translucent: translucent === true,\n children,\n headerLeftBarButtonItems: processBarButtonItems(leftItems, colors, fonts),\n headerRightBarButtonItems: processBarButtonItems(rightItems, colors, fonts),\n experimental_userInterfaceStyle: dark ? 'dark' : 'light',\n } as const;\n}\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/react-navigation/stack/views/Stack/CardStack.js.map b/packages/expo-router/build/react-navigation/stack/views/Stack/CardStack.js.map index 77923e8aa84c30..be60e7b508bc20 100644 --- a/packages/expo-router/build/react-navigation/stack/views/Stack/CardStack.js.map +++ b/packages/expo-router/build/react-navigation/stack/views/Stack/CardStack.js.map @@ -1 +1 @@ -{"version":3,"file":"CardStack.js","sourceRoot":"","sources":["../../../../../src/react-navigation/stack/views/Stack/CardStack.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Animated, type LayoutChangeEvent, Platform, StyleSheet, View } from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport { getDefaultHeaderHeight, SafeAreaProviderCompat } from '../../../elements';\nimport type { LocaleDirection, ParamListBase, Route, StackNavigationState } from '../../../native';\nimport {\n forModalPresentationIOS,\n forNoAnimation as forNoAnimationCard,\n} from '../../TransitionConfigs/CardStyleInterpolators';\nimport {\n BottomSheetAndroid,\n DefaultTransition,\n FadeFromBottomAndroid,\n FadeFromRightAndroid,\n ModalFadeTransition,\n ModalSlideFromBottomIOS,\n ModalTransition,\n RevealFromBottomAndroid,\n ScaleFromCenterAndroid,\n SlideFromLeftIOS,\n SlideFromRightIOS,\n} from '../../TransitionConfigs/TransitionPresets';\nimport type {\n Layout,\n Scene,\n StackAnimationName,\n StackCardStyleInterpolator,\n StackDescriptorMap,\n StackHeaderMode,\n StackNavigationOptions,\n TransitionPreset,\n} from '../../types';\nimport { findLastIndex } from '../../utils/findLastIndex';\nimport { getDistanceForDirection } from '../../utils/getDistanceForDirection';\nimport { getModalRouteKeys } from '../../utils/getModalRoutesKeys';\nimport type { Props as HeaderContainerProps } from '../Header/HeaderContainer';\nimport { MaybeScreen, MaybeScreenContainer } from '../Screens';\nimport { CardContainer } from './CardContainer';\n\ntype GestureValues = {\n [key: string]: Animated.Value;\n};\n\ntype Props = {\n direction: LocaleDirection;\n insets: EdgeInsets;\n state: StackNavigationState;\n descriptors: StackDescriptorMap;\n preloadedDescriptors: StackDescriptorMap;\n routes: Route[];\n openingRouteKeys: string[];\n closingRouteKeys: string[];\n onOpenRoute: (props: { route: Route }) => void;\n onCloseRoute: (props: { route: Route }) => void;\n getPreviousRoute: (props: { route: Route }) => Route | undefined;\n renderHeader: (props: HeaderContainerProps) => React.ReactNode;\n isParentHeaderShown: boolean;\n isParentModal: boolean;\n onTransitionStart: (props: { route: Route }, closing: boolean) => void;\n onTransitionEnd: (props: { route: Route }, closing: boolean) => void;\n onGestureStart: (props: { route: Route }) => void;\n onGestureEnd: (props: { route: Route }) => void;\n onGestureCancel: (props: { route: Route }) => void;\n detachInactiveScreens?: boolean;\n};\n\ntype State = {\n routes: Route[];\n descriptors: StackDescriptorMap;\n scenes: Scene[];\n gestures: GestureValues;\n layout: Layout;\n activeStates: (0 | 1 | Animated.AnimatedInterpolation<0 | 1>)[];\n headerHeights: Record;\n};\n\nconst NAMED_TRANSITIONS_PRESETS = {\n default: DefaultTransition,\n fade: ModalFadeTransition,\n fade_from_bottom: FadeFromBottomAndroid,\n fade_from_right: FadeFromRightAndroid,\n none: DefaultTransition,\n reveal_from_bottom: RevealFromBottomAndroid,\n scale_from_center: ScaleFromCenterAndroid,\n slide_from_left: SlideFromLeftIOS,\n slide_from_right: SlideFromRightIOS,\n slide_from_bottom: Platform.select({\n ios: ModalSlideFromBottomIOS,\n default: BottomSheetAndroid,\n }),\n} as const satisfies Record;\n\nconst EPSILON = 1e-5;\n\nconst STATE_INACTIVE = 0;\nconst STATE_TRANSITIONING_OR_BELOW_TOP = 1;\nconst STATE_ON_TOP = 2;\n\nconst FALLBACK_DESCRIPTOR = Object.freeze({ options: {} as StackNavigationOptions });\n\nconst getInterpolationIndex = (scenes: Scene[], index: number) => {\n const { cardStyleInterpolator } = scenes[index]!.descriptor.options;\n\n // Start from current card and count backwards the number of cards with same interpolation\n let interpolationIndex = 0;\n\n for (let i = index - 1; i >= 0; i--) {\n const cardStyleInterpolatorCurrent = scenes[i]?.descriptor.options.cardStyleInterpolator;\n\n if (cardStyleInterpolatorCurrent !== cardStyleInterpolator) {\n break;\n }\n\n interpolationIndex++;\n }\n\n return interpolationIndex;\n};\n\nconst getIsModalPresentation = (cardStyleInterpolator: StackCardStyleInterpolator) => {\n return (\n cardStyleInterpolator === forModalPresentationIOS ||\n // Handle custom modal presentation interpolators as well\n cardStyleInterpolator.name === 'forModalPresentationIOS'\n );\n};\n\nconst getIsModal = (scene: Scene, interpolationIndex: number, isParentModal: boolean) => {\n if (isParentModal) {\n return true;\n }\n\n const { cardStyleInterpolator } = scene.descriptor.options;\n const isModalPresentation = getIsModalPresentation(cardStyleInterpolator);\n const isModal = isModalPresentation && interpolationIndex !== 0;\n\n return isModal;\n};\n\nconst getHeaderHeights = (\n scenes: Scene[],\n insets: EdgeInsets,\n isParentHeaderShown: boolean,\n isParentModal: boolean,\n layout: Layout,\n previous: Record\n) => {\n return scenes.reduce>((acc, curr, index) => {\n const { headerStatusBarHeight = isParentHeaderShown ? 0 : insets.top, headerStyle } =\n curr.descriptor.options;\n\n const style = StyleSheet.flatten(headerStyle || {});\n\n const height =\n 'height' in style && typeof style.height === 'number'\n ? style.height\n : previous[curr.route.key];\n\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(curr, interpolationIndex, isParentModal);\n\n acc[curr.route.key] =\n typeof height === 'number'\n ? height\n : getDefaultHeaderHeight(layout, isModal, headerStatusBarHeight);\n\n return acc;\n }, {});\n};\n\nconst getDistanceFromOptions = (\n layout: Layout,\n options: StackNavigationOptions | undefined,\n isRTL: boolean\n) => {\n if (options?.gestureDirection) {\n return getDistanceForDirection(layout, options.gestureDirection, isRTL);\n }\n\n const defaultGestureDirection =\n options?.presentation === 'modal'\n ? ModalTransition.gestureDirection\n : DefaultTransition.gestureDirection;\n\n const gestureDirection = options?.animation\n ? NAMED_TRANSITIONS_PRESETS[options?.animation]?.gestureDirection\n : defaultGestureDirection;\n\n return getDistanceForDirection(layout, gestureDirection, isRTL);\n};\n\nconst getProgressFromGesture = (\n gesture: Animated.Value,\n layout: Layout,\n options: StackNavigationOptions | undefined,\n isRTL: boolean\n) => {\n const distance = getDistanceFromOptions(\n {\n // Make sure that we have a non-zero distance, otherwise there will be incorrect progress\n // This causes blank screen on web if it was previously inside container with display: none\n width: Math.max(1, layout.width),\n height: Math.max(1, layout.height),\n },\n options,\n isRTL\n );\n\n if (distance > 0) {\n return gesture.interpolate({\n inputRange: [0, distance],\n outputRange: [1, 0],\n });\n }\n\n return gesture.interpolate({\n inputRange: [distance, 0],\n outputRange: [0, 1],\n });\n};\n\nfunction getDefaultAnimation(animation: StackAnimationName | undefined) {\n // Disable screen transition animation by default on web, windows and macos to match the native behavior\n const excludedPlatforms =\n Platform.OS !== 'web' && Platform.OS !== 'windows' && Platform.OS !== 'macos';\n\n return animation ?? (excludedPlatforms ? 'default' : 'none');\n}\n\nexport function getAnimationEnabled(animation: StackAnimationName | undefined) {\n return getDefaultAnimation(animation) !== 'none';\n}\n\nexport class CardStack extends React.Component {\n static getDerivedStateFromProps(props: Props, state: State): Partial | null {\n if (props.routes === state.routes && props.descriptors === state.descriptors) {\n return null;\n }\n\n const gestures = [...props.routes, ...props.state.preloadedRoutes].reduce(\n (acc, curr) => {\n const descriptor = props.descriptors[curr.key] || props.preloadedDescriptors[curr.key];\n const { animation } = descriptor?.options || {};\n\n acc[curr.key] =\n state.gestures[curr.key] ||\n new Animated.Value(\n (props.openingRouteKeys.includes(curr.key) && getAnimationEnabled(animation)) ||\n props.state.preloadedRoutes.includes(curr)\n ? getDistanceFromOptions(state.layout, descriptor?.options, props.direction === 'rtl')\n : 0\n );\n\n return acc;\n },\n {}\n );\n\n const modalRouteKeys = getModalRouteKeys([...props.routes, ...props.state.preloadedRoutes], {\n ...props.descriptors,\n ...props.preloadedDescriptors,\n });\n\n const scenes = [...props.routes, ...props.state.preloadedRoutes].map((route, index, self) => {\n // For preloaded screens, we don't care about the previous and the next screen\n const isPreloaded = props.state.preloadedRoutes.includes(route);\n const previousRoute = isPreloaded ? undefined : self[index - 1];\n const nextRoute = isPreloaded ? undefined : self[index + 1];\n\n const oldScene = state.scenes[index];\n\n const currentGesture = gestures[route.key]!;\n const previousGesture = previousRoute ? gestures[previousRoute.key]! : undefined;\n const nextGesture = nextRoute ? gestures[nextRoute.key]! : undefined;\n\n const descriptor =\n (isPreloaded ? props.preloadedDescriptors : props.descriptors)[route.key] ||\n state.descriptors[route.key] ||\n (oldScene ? oldScene.descriptor : FALLBACK_DESCRIPTOR);\n\n const nextOptions =\n nextRoute &&\n (props.descriptors[nextRoute?.key] || state.descriptors[nextRoute?.key])?.options;\n\n const previousOptions =\n previousRoute &&\n (props.descriptors[previousRoute?.key] || state.descriptors[previousRoute?.key])?.options;\n\n // When a screen is not the last, it should use next screen's transition config\n // Many transitions also animate the previous screen, so using 2 different transitions doesn't look right\n // For example combining a slide and a modal transition would look wrong otherwise\n // With this approach, combining different transition styles in the same navigator mostly looks right\n // This will still be broken when 2 transitions have different idle state (e.g. modal presentation),\n // but the majority of the transitions look alright\n const optionsForTransitionConfig: StackNavigationOptions =\n index !== self.length - 1 && nextOptions && nextOptions?.presentation !== 'transparentModal'\n ? nextOptions\n : descriptor.options;\n\n // Assume modal if there are already modal screens in the stack\n // or current screen is a modal when no presentation is specified\n const isModal = modalRouteKeys.includes(route.key);\n\n const animation = getDefaultAnimation(optionsForTransitionConfig.animation);\n\n const isAnimationEnabled = getAnimationEnabled(animation);\n\n const transitionPreset =\n animation !== 'default'\n ? NAMED_TRANSITIONS_PRESETS[animation]!\n : optionsForTransitionConfig.presentation === 'transparentModal'\n ? ModalFadeTransition\n : optionsForTransitionConfig.presentation === 'modal' || isModal\n ? ModalTransition\n : DefaultTransition;\n\n const {\n gestureEnabled = Platform.OS === 'ios' && isAnimationEnabled,\n gestureDirection = transitionPreset.gestureDirection,\n transitionSpec = transitionPreset.transitionSpec,\n cardStyleInterpolator = isAnimationEnabled\n ? transitionPreset.cardStyleInterpolator\n : forNoAnimationCard,\n headerStyleInterpolator = transitionPreset.headerStyleInterpolator,\n cardOverlayEnabled = (Platform.OS !== 'ios' &&\n optionsForTransitionConfig.presentation !== 'transparentModal') ||\n getIsModalPresentation(cardStyleInterpolator),\n } = optionsForTransitionConfig;\n\n const headerMode: StackHeaderMode =\n descriptor.options.headerMode ??\n (!(\n optionsForTransitionConfig.presentation === 'modal' ||\n optionsForTransitionConfig.presentation === 'transparentModal' ||\n nextOptions?.presentation === 'modal' ||\n nextOptions?.presentation === 'transparentModal' ||\n getIsModalPresentation(cardStyleInterpolator)\n ) &&\n Platform.OS === 'ios' &&\n descriptor.options.header === undefined\n ? 'float'\n : 'screen');\n\n const isRTL = props.direction === 'rtl';\n\n const scene = {\n route,\n descriptor: {\n ...descriptor,\n options: {\n ...descriptor.options,\n animation,\n cardOverlayEnabled,\n cardStyleInterpolator,\n gestureDirection,\n gestureEnabled,\n headerStyleInterpolator,\n transitionSpec,\n headerMode,\n },\n },\n progress: {\n current: getProgressFromGesture(currentGesture, state.layout, descriptor.options, isRTL),\n next:\n nextGesture && nextOptions?.presentation !== 'transparentModal'\n ? getProgressFromGesture(nextGesture, state.layout, nextOptions, isRTL)\n : undefined,\n previous: previousGesture\n ? getProgressFromGesture(previousGesture, state.layout, previousOptions, isRTL)\n : undefined,\n },\n __memo: [\n state.layout,\n descriptor,\n nextOptions,\n previousOptions,\n currentGesture,\n nextGesture,\n previousGesture,\n ],\n };\n\n if (\n oldScene &&\n scene.__memo.every((it, i) => {\n // @ts-expect-error: we haven't added __memo to the annotation to prevent usage elsewhere\n return oldScene.__memo[i] === it;\n })\n ) {\n return oldScene;\n }\n\n return scene as unknown as Scene;\n });\n\n let activeStates = state.activeStates;\n\n if (props.routes.length !== state.routes.length) {\n let activeScreensLimit = 1;\n\n for (let i = props.routes.length - 1; i >= 0; i--) {\n const { options } = scenes[i]!.descriptor;\n\n const {\n // By default, we don't want to detach the previous screen of the active one for modals\n detachPreviousScreen = options.presentation === 'transparentModal'\n ? false\n : getIsModalPresentation(options.cardStyleInterpolator)\n ? i !==\n findLastIndex(scenes, (scene) => {\n const { cardStyleInterpolator } = scene.descriptor.options;\n\n return (\n cardStyleInterpolator === forModalPresentationIOS ||\n cardStyleInterpolator?.name === 'forModalPresentationIOS'\n );\n })\n : true,\n } = options;\n\n if (detachPreviousScreen === false) {\n activeScreensLimit++;\n } else {\n // Check at least last 2 screens before stopping\n // This will make sure that screen isn't detached when another screen is animating on top of the transparent one\n // e.g. opaque -> transparent -> opaque\n if (i <= props.routes.length - 2) {\n break;\n }\n }\n }\n\n activeStates = props.routes.map((_, index, self) => {\n // The activity state represents state of the screen:\n // 0 - inactive, the screen is detached\n // 1 - transitioning or below the top screen, the screen is mounted but interaction is disabled\n // 2 - on top of the stack, the screen is mounted and interaction is enabled\n let activityState: Animated.AnimatedInterpolation<0 | 1 | 2> | 0 | 1 | 2;\n\n const lastActiveState = state.activeStates[index];\n const activeAfterTransition = index >= self.length - activeScreensLimit;\n\n if (lastActiveState === STATE_INACTIVE && !activeAfterTransition) {\n // screen was inactive before and it will still be inactive after the transition\n activityState = STATE_INACTIVE;\n } else {\n const sceneForActivity = scenes[self.length - 1];\n const outputValue =\n index === self.length - 1\n ? STATE_ON_TOP // the screen is on top after the transition\n : activeAfterTransition\n ? STATE_TRANSITIONING_OR_BELOW_TOP // the screen should stay active after the transition, it is not on top but is in activeLimit\n : STATE_INACTIVE; // the screen should be active only during the transition, it is at the edge of activeLimit\n\n activityState = sceneForActivity\n ? sceneForActivity.progress.current.interpolate({\n inputRange: [0, 1 - EPSILON, 1],\n outputRange: [1, 1, outputValue],\n extrapolate: 'clamp',\n })\n : STATE_TRANSITIONING_OR_BELOW_TOP;\n }\n\n return activityState;\n });\n }\n\n return {\n routes: props.routes,\n scenes,\n gestures,\n descriptors: props.descriptors,\n activeStates,\n headerHeights: getHeaderHeights(\n scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n state.layout,\n state.headerHeights\n ),\n };\n }\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n routes: [],\n scenes: [],\n gestures: {},\n layout: SafeAreaProviderCompat.initialMetrics.frame,\n descriptors: this.props.descriptors,\n activeStates: [],\n // Used when card's header is null and mode is float to make transition\n // between screens with headers and those without headers smooth.\n // This is not a great heuristic here. We don't know synchronously\n // on mount what the header height is so we have just used the most\n // common cases here.\n headerHeights: {},\n };\n }\n\n private handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n const layout = { width, height };\n\n this.setState((state, props) => {\n if (height === state.layout.height && width === state.layout.width) {\n return null;\n }\n\n return {\n layout,\n headerHeights: getHeaderHeights(\n state.scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n layout,\n state.headerHeights\n ),\n };\n });\n };\n\n private handleHeaderLayout = ({ route, height }: { route: Route; height: number }) => {\n this.setState(({ headerHeights }) => {\n const previousHeight = headerHeights[route.key];\n\n if (previousHeight === height) {\n return null;\n }\n\n return {\n headerHeights: {\n ...headerHeights,\n [route.key]: height,\n },\n };\n });\n };\n\n private getFocusedRoute = () => {\n const { state } = this.props;\n\n return state.routes[state.index]!;\n };\n\n private getPreviousScene = ({ route }: { route: Route }) => {\n const { getPreviousRoute } = this.props;\n const { scenes } = this.state;\n\n const previousRoute = getPreviousRoute({ route });\n\n if (previousRoute) {\n const previousScene = scenes.find(\n (scene) => scene.descriptor.route.key === previousRoute.key\n );\n\n return previousScene;\n }\n\n return undefined;\n };\n\n render() {\n const {\n insets,\n state,\n routes,\n openingRouteKeys,\n closingRouteKeys,\n onOpenRoute,\n onCloseRoute,\n renderHeader,\n isParentHeaderShown,\n isParentModal,\n onTransitionStart,\n onTransitionEnd,\n onGestureStart,\n onGestureEnd,\n onGestureCancel,\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n } = this.props;\n\n const { scenes, layout, gestures, activeStates, headerHeights } = this.state;\n\n const focusedRoute = state.routes[state.index]!;\n const focusedHeaderHeight = headerHeights[focusedRoute.key];\n\n const isFloatHeaderAbsolute = this.state.scenes.slice(-2).some((scene) => {\n const options = scene.descriptor.options ?? {};\n const { headerMode, headerTransparent, headerShown = true } = options;\n\n if (headerTransparent || headerShown === false || headerMode === 'screen') {\n return true;\n }\n\n return false;\n });\n\n return (\n \n {renderHeader({\n mode: 'float',\n layout,\n scenes,\n getPreviousScene: this.getPreviousScene,\n getFocusedRoute: this.getFocusedRoute,\n onContentHeightChange: this.handleHeaderLayout,\n style: [\n styles.floating,\n isFloatHeaderAbsolute && [\n // Without this, the header buttons won't be touchable on Android when headerTransparent: true\n { height: focusedHeaderHeight },\n styles.absolute,\n ],\n ],\n })}\n \n {[...routes, ...state.preloadedRoutes].map((route, index) => {\n const focused = focusedRoute.key === route.key;\n const gesture = gestures[route.key]!;\n const scene = scenes[index]!;\n // It is possible that for a short period the route appears in both arrays.\n // Particularly, if the screen is removed with `retain`, then it needs a moment to execute the animation.\n // However, due to the router action, it immediately populates the `preloadedRoutes` array.\n // Practically, the logic below takes care that it is rendered only once.\n const isPreloaded = state.preloadedRoutes.includes(route) && !routes.includes(route);\n if (\n state.preloadedRoutes.includes(route) &&\n routes.includes(route) &&\n index >= routes.length\n ) {\n return null;\n }\n\n const {\n headerShown = true,\n headerTransparent,\n freezeOnBlur,\n autoHideHomeIndicator,\n } = scene.descriptor.options;\n\n const safeAreaInsetTop = insets.top;\n const safeAreaInsetRight = insets.right;\n const safeAreaInsetBottom = insets.bottom;\n const safeAreaInsetLeft = insets.left;\n\n const headerHeight = headerShown !== false ? (headerHeights[route.key] ?? 0) : 0;\n\n // Start from current card and count backwards the number of cards with same interpolation\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(scene, interpolationIndex, isParentModal);\n\n const isNextScreenTransparent =\n scenes[index + 1]?.descriptor.options.presentation === 'transparentModal';\n\n const detachCurrentScreen =\n scenes[index + 1]?.descriptor.options.detachPreviousScreen !== false;\n\n const activityState = isPreloaded ? STATE_INACTIVE : activeStates[index]!;\n\n return (\n \n \n \n );\n })}\n \n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n absolute: {\n position: 'absolute',\n top: 0,\n start: 0,\n end: 0,\n },\n floating: {\n zIndex: 1,\n },\n});\n"]} \ No newline at end of file +{"version":3,"file":"CardStack.js","sourceRoot":"","sources":["../../../../../src/react-navigation/stack/views/Stack/CardStack.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsOA,kDAEC;;AAxOD,6CAA+B;AAC/B,+CAA4F;AAG5F,gDAAmF;AAEnF,2FAGwD;AACxD,iFAYmD;AAWnD,6DAA0D;AAC1D,iFAA8E;AAC9E,uEAAmE;AAEnE,wCAA+D;AAC/D,mDAAgD;AAuChD,MAAM,yBAAyB,GAAG;IAChC,OAAO,EAAE,qCAAiB;IAC1B,IAAI,EAAE,uCAAmB;IACzB,gBAAgB,EAAE,yCAAqB;IACvC,eAAe,EAAE,wCAAoB;IACrC,IAAI,EAAE,qCAAiB;IACvB,kBAAkB,EAAE,2CAAuB;IAC3C,iBAAiB,EAAE,0CAAsB;IACzC,eAAe,EAAE,oCAAgB;IACjC,gBAAgB,EAAE,qCAAiB;IACnC,iBAAiB,EAAE,uBAAQ,CAAC,MAAM,CAAC;QACjC,GAAG,EAAE,2CAAuB;QAC5B,OAAO,EAAE,sCAAkB;KAC5B,CAAC;CAC6D,CAAC;AAElE,MAAM,OAAO,GAAG,IAAI,CAAC;AAErB,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAC3C,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAA4B,EAAE,CAAC,CAAC;AAErF,MAAM,qBAAqB,GAAG,CAAC,MAAe,EAAE,KAAa,EAAE,EAAE;IAC/D,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC,UAAU,CAAC,OAAO,CAAC;IAEpE,0FAA0F;IAC1F,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,4BAA4B,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC;QAEzF,IAAI,4BAA4B,KAAK,qBAAqB,EAAE,CAAC;YAC3D,MAAM;QACR,CAAC;QAED,kBAAkB,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,qBAAiD,EAAE,EAAE;IACnF,OAAO,CACL,qBAAqB,KAAK,gDAAuB;QACjD,yDAAyD;QACzD,qBAAqB,CAAC,IAAI,KAAK,yBAAyB,CACzD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,kBAA0B,EAAE,aAAsB,EAAE,EAAE;IACtF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,qBAAqB,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;IAC3D,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,qBAAqB,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,mBAAmB,IAAI,kBAAkB,KAAK,CAAC,CAAC;IAEhE,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,MAAe,EACf,MAAkB,EAClB,mBAA4B,EAC5B,aAAsB,EACtB,MAAc,EACd,QAAgC,EAChC,EAAE;IACF,OAAO,MAAM,CAAC,MAAM,CAAyB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAChE,MAAM,EAAE,qBAAqB,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,GACjF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAE1B,MAAM,KAAK,GAAG,yBAAU,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAEpD,MAAM,MAAM,GACV,QAAQ,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YACnD,CAAC,CAAC,KAAK,CAAC,MAAM;YACd,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE/B,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;QAEpE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACjB,OAAO,MAAM,KAAK,QAAQ;gBACxB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,IAAA,iCAAsB,EAAC,MAAM,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;QAErE,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC7B,MAAc,EACd,OAA2C,EAC3C,KAAc,EACd,EAAE;IACF,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC9B,OAAO,IAAA,iDAAuB,EAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,uBAAuB,GAC3B,OAAO,EAAE,YAAY,KAAK,OAAO;QAC/B,CAAC,CAAC,mCAAe,CAAC,gBAAgB;QAClC,CAAC,CAAC,qCAAiB,CAAC,gBAAgB,CAAC;IAEzC,MAAM,gBAAgB,GAAG,OAAO,EAAE,SAAS;QACzC,CAAC,CAAC,yBAAyB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,gBAAgB;QACjE,CAAC,CAAC,uBAAuB,CAAC;IAE5B,OAAO,IAAA,iDAAuB,EAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC7B,OAAuB,EACvB,MAAc,EACd,OAA2C,EAC3C,KAAc,EACd,EAAE;IACF,MAAM,QAAQ,GAAG,sBAAsB,CACrC;QACE,yFAAyF;QACzF,2FAA2F;QAC3F,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;QAChC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;KACnC,EACD,OAAO,EACP,KAAK,CACN,CAAC;IAEF,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC,WAAW,CAAC;YACzB,UAAU,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;YACzB,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;SACpB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzB,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KACpB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,mBAAmB,CAAC,SAAyC;IACpE,wGAAwG;IACxG,MAAM,iBAAiB,GACrB,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,uBAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,uBAAQ,CAAC,EAAE,KAAK,OAAO,CAAC;IAEhF,OAAO,SAAS,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,SAAgB,mBAAmB,CAAC,SAAyC;IAC3E,OAAO,mBAAmB,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC;AACnD,CAAC;AAED,MAAa,SAAU,SAAQ,KAAK,CAAC,SAAuB;IAC1D,MAAM,CAAC,wBAAwB,CAAC,KAAY,EAAE,KAAY;QACxD,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;YAC7E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,CACvE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACZ,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvF,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC;YAEhD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;gBACX,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;oBACxB,IAAI,uBAAQ,CAAC,KAAK,CAChB,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;wBAC3E,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAC1C,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC;wBACtF,CAAC,CAAC,CAAC,CACN,CAAC;YAEJ,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAE,CACH,CAAC;QAEF,MAAM,cAAc,GAAG,IAAA,sCAAiB,EAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;YAC1F,GAAG,KAAK,CAAC,WAAW;YACpB,GAAG,KAAK,CAAC,oBAAoB;SAC9B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC1F,8EAA8E;YAC9E,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChE,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAChE,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAE5D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAErC,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC;YAC5C,MAAM,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACjF,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAErE,MAAM,UAAU,GACd,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;gBACzE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC5B,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAEzD,MAAM,WAAW,GACf,SAAS;gBACT,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;YAEpF,MAAM,eAAe,GACnB,aAAa;gBACb,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;YAE5F,+EAA+E;YAC/E,yGAAyG;YACzG,kFAAkF;YAClF,qGAAqG;YACrG,oGAAoG;YACpG,mDAAmD;YACnD,MAAM,0BAA0B,GAC9B,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,IAAI,WAAW,EAAE,YAAY,KAAK,kBAAkB;gBAC1F,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;YAEzB,+DAA+D;YAC/D,iEAAiE;YACjE,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEnD,MAAM,SAAS,GAAG,mBAAmB,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;YAE5E,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;YAE1D,MAAM,gBAAgB,GACpB,SAAS,KAAK,SAAS;gBACrB,CAAC,CAAC,yBAAyB,CAAC,SAAS,CAAE;gBACvC,CAAC,CAAC,0BAA0B,CAAC,YAAY,KAAK,kBAAkB;oBAC9D,CAAC,CAAC,uCAAmB;oBACrB,CAAC,CAAC,0BAA0B,CAAC,YAAY,KAAK,OAAO,IAAI,OAAO;wBAC9D,CAAC,CAAC,mCAAe;wBACjB,CAAC,CAAC,qCAAiB,CAAC;YAE5B,MAAM,EACJ,cAAc,GAAG,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,kBAAkB,EAC5D,gBAAgB,GAAG,gBAAgB,CAAC,gBAAgB,EACpD,cAAc,GAAG,gBAAgB,CAAC,cAAc,EAChD,qBAAqB,GAAG,kBAAkB;gBACxC,CAAC,CAAC,gBAAgB,CAAC,qBAAqB;gBACxC,CAAC,CAAC,uCAAkB,EACtB,uBAAuB,GAAG,gBAAgB,CAAC,uBAAuB,EAClE,kBAAkB,GAAG,CAAC,uBAAQ,CAAC,EAAE,KAAK,KAAK;gBACzC,0BAA0B,CAAC,YAAY,KAAK,kBAAkB,CAAC;gBAC/D,sBAAsB,CAAC,qBAAqB,CAAC,GAChD,GAAG,0BAA0B,CAAC;YAE/B,MAAM,UAAU,GACd,UAAU,CAAC,OAAO,CAAC,UAAU;gBAC7B,CAAC,CAAC,CACA,0BAA0B,CAAC,YAAY,KAAK,OAAO;oBACnD,0BAA0B,CAAC,YAAY,KAAK,kBAAkB;oBAC9D,WAAW,EAAE,YAAY,KAAK,OAAO;oBACrC,WAAW,EAAE,YAAY,KAAK,kBAAkB;oBAChD,sBAAsB,CAAC,qBAAqB,CAAC,CAC9C;oBACD,uBAAQ,CAAC,EAAE,KAAK,KAAK;oBACrB,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;oBACrC,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,QAAQ,CAAC,CAAC;YAEhB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC;YAExC,MAAM,KAAK,GAAG;gBACZ,KAAK;gBACL,UAAU,EAAE;oBACV,GAAG,UAAU;oBACb,OAAO,EAAE;wBACP,GAAG,UAAU,CAAC,OAAO;wBACrB,SAAS;wBACT,kBAAkB;wBAClB,qBAAqB;wBACrB,gBAAgB;wBAChB,cAAc;wBACd,uBAAuB;wBACvB,cAAc;wBACd,UAAU;qBACX;iBACF;gBACD,QAAQ,EAAE;oBACR,OAAO,EAAE,sBAAsB,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;oBACxF,IAAI,EACF,WAAW,IAAI,WAAW,EAAE,YAAY,KAAK,kBAAkB;wBAC7D,CAAC,CAAC,sBAAsB,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC;wBACvE,CAAC,CAAC,SAAS;oBACf,QAAQ,EAAE,eAAe;wBACvB,CAAC,CAAC,sBAAsB,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC;wBAC/E,CAAC,CAAC,SAAS;iBACd;gBACD,MAAM,EAAE;oBACN,KAAK,CAAC,MAAM;oBACZ,UAAU;oBACV,WAAW;oBACX,eAAe;oBACf,cAAc;oBACd,WAAW;oBACX,eAAe;iBAChB;aACF,CAAC;YAEF,IACE,QAAQ;gBACR,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;oBAC3B,yFAAyF;oBACzF,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACnC,CAAC,CAAC,EACF,CAAC;gBACD,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,OAAO,KAAyB,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAI,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAEtC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAChD,IAAI,kBAAkB,GAAG,CAAC,CAAC;YAE3B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC;gBAE1C,MAAM;gBACJ,uFAAuF;gBACvF,oBAAoB,GAAG,OAAO,CAAC,YAAY,KAAK,kBAAkB;oBAChE,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,qBAAqB,CAAC;wBACrD,CAAC,CAAC,CAAC;4BACD,IAAA,6BAAa,EAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gCAC9B,MAAM,EAAE,qBAAqB,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;gCAE3D,OAAO,CACL,qBAAqB,KAAK,gDAAuB;oCACjD,qBAAqB,EAAE,IAAI,KAAK,yBAAyB,CAC1D,CAAC;4BACJ,CAAC,CAAC;wBACJ,CAAC,CAAC,IAAI,GACX,GAAG,OAAO,CAAC;gBAEZ,IAAI,oBAAoB,KAAK,KAAK,EAAE,CAAC;oBACnC,kBAAkB,EAAE,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,gDAAgD;oBAChD,gHAAgH;oBAChH,uCAAuC;oBACvC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACjC,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjD,qDAAqD;gBACrD,uCAAuC;gBACvC,+FAA+F;gBAC/F,4EAA4E;gBAC5E,IAAI,aAAoE,CAAC;gBAEzE,MAAM,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAClD,MAAM,qBAAqB,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,kBAAkB,CAAC;gBAExE,IAAI,eAAe,KAAK,cAAc,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBACjE,gFAAgF;oBAChF,aAAa,GAAG,cAAc,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACjD,MAAM,WAAW,GACf,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;wBACvB,CAAC,CAAC,YAAY,CAAC,4CAA4C;wBAC3D,CAAC,CAAC,qBAAqB;4BACrB,CAAC,CAAC,gCAAgC,CAAC,6FAA6F;4BAChI,CAAC,CAAC,cAAc,CAAC,CAAC,2FAA2F;oBAEnH,aAAa,GAAG,gBAAgB;wBAC9B,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;4BAC5C,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;4BAC/B,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;4BAChC,WAAW,EAAE,OAAO;yBACrB,CAAC;wBACJ,CAAC,CAAC,gCAAgC,CAAC;gBACvC,CAAC;gBAED,OAAO,aAAa,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM;YACN,QAAQ;YACR,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY;YACZ,aAAa,EAAE,gBAAgB,CAC7B,MAAM,EACN,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,aAAa,CACpB;SACF,CAAC;IACJ,CAAC;IAED,YAAY,KAAY;QACtB,KAAK,CAAC,KAAK,CAAC,CAAC;QAEb,IAAI,CAAC,KAAK,GAAG;YACX,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,iCAAsB,CAAC,cAAc,CAAC,KAAK;YACnD,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;YACnC,YAAY,EAAE,EAAE;YAChB,uEAAuE;YACvE,iEAAiE;YACjE,kEAAkE;YAClE,mEAAmE;YACnE,qBAAqB;YACrB,aAAa,EAAE,EAAE;SAClB,CAAC;IACJ,CAAC;IAEO,YAAY,GAAG,CAAC,CAAoB,EAAE,EAAE;QAC9C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;QAE/C,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAEjC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7B,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACnE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,MAAM;gBACN,aAAa,EAAE,gBAAgB,CAC7B,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,aAAa,EACnB,MAAM,EACN,KAAK,CAAC,aAAa,CACpB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEM,kBAAkB,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAA4C,EAAE,EAAE;QAC3F,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE;YAClC,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEhD,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,aAAa,EAAE;oBACb,GAAG,aAAa;oBAChB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM;iBACpB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEM,eAAe,GAAG,GAAG,EAAE;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAE7B,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;IACpC,CAAC,CAAC;IAEM,gBAAgB,GAAG,CAAC,EAAE,KAAK,EAA4B,EAAE,EAAE;QACjE,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACxC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAE9B,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAElD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAC/B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,aAAa,CAAC,GAAG,CAC5D,CAAC;YAEF,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM;QACJ,MAAM,EACJ,MAAM,EACN,KAAK,EACL,MAAM,EACN,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,eAAe,EACf,qBAAqB,GAAG,uBAAQ,CAAC,EAAE,KAAK,KAAK;YAC3C,uBAAQ,CAAC,EAAE,KAAK,SAAS;YACzB,uBAAQ,CAAC,EAAE,KAAK,KAAK,GACxB,GAAG,IAAI,CAAC,KAAK,CAAC;QAEf,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAE7E,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;QAChD,MAAM,mBAAmB,GAAG,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAE5D,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACvE,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;YAC/C,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;YAEtE,IAAI,iBAAiB,IAAI,WAAW,KAAK,KAAK,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC1E,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,OAAO,CACL,wBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,aAC1B,YAAY,CAAC;oBACZ,IAAI,EAAE,OAAO;oBACb,MAAM;oBACN,MAAM;oBACN,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oBACvC,eAAe,EAAE,IAAI,CAAC,eAAe;oBACrC,qBAAqB,EAAE,IAAI,CAAC,kBAAkB;oBAC9C,KAAK,EAAE;wBACL,MAAM,CAAC,QAAQ;wBACf,qBAAqB,IAAI;4BACvB,8FAA8F;4BAC9F,EAAE,MAAM,EAAE,mBAAmB,EAAE;4BAC/B,MAAM,CAAC,QAAQ;yBAChB;qBACF;iBACF,CAAC,EACF,uBAAC,8BAAoB,IACnB,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,CAAC,SAAS,EACvB,QAAQ,EAAE,IAAI,CAAC,YAAY,YAC1B,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBAC1D,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;wBAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC;wBACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;wBAC7B,2EAA2E;wBAC3E,yGAAyG;wBACzG,2FAA2F;wBAC3F,yEAAyE;wBACzE,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBACrF,IACE,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;4BACrC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;4BACtB,KAAK,IAAI,MAAM,CAAC,MAAM,EACtB,CAAC;4BACD,OAAO,IAAI,CAAC;wBACd,CAAC;wBAED,MAAM,EACJ,WAAW,GAAG,IAAI,EAClB,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,GACtB,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;wBAE7B,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC;wBACpC,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC;wBACxC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;wBAC1C,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC;wBAEtC,MAAM,YAAY,GAAG,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAEjF,0FAA0F;wBAC1F,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;wBAChE,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;wBAErE,MAAM,uBAAuB,GAC3B,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,KAAK,kBAAkB,CAAC;wBAE5E,MAAM,mBAAmB,GACvB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,oBAAoB,KAAK,KAAK,CAAC;wBAEvE,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAE,CAAC;wBAE1E,OAAO,CACL,uBAAC,qBAAW,IAEV,KAAK,EAAE,CAAC,yBAAU,CAAC,YAAY,CAAC,EAChC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,aAAa,KAAK,cAAc,IAAI,CAAC,WAAW,EAC9D,mBAAmB,EAAE,qBAAqB,EAC1C,aAAa,EAAC,UAAU,YACxB,uBAAC,6BAAa,IACZ,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,kBAAkB,EACtC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,EACnC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAC7C,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAC7C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,gBAAgB,EAAE,gBAAgB,EAClC,kBAAkB,EAAE,kBAAkB,EACtC,mBAAmB,EAAE,mBAAmB,EACxC,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,mBAAmB,EAAE,mBAAmB,EACxC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,EAC7C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EACvC,eAAe,EAAE,IAAI,CAAC,eAAe,EACrC,sBAAsB,EAAE,qBAAqB,IAAI,CAAC,iBAAiB,EACnE,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,EAChC,uBAAuB,EAAE,uBAAuB,EAChD,mBAAmB,EAAE,mBAAmB,EACxC,SAAS,EAAE,WAAW,GACtB,IAxCG,KAAK,CAAC,GAAG,CAyCF,CACf,CAAC;oBACJ,CAAC,CAAC,GACmB,IAClB,CACR,CAAC;IACJ,CAAC;CACF;AAveD,8BAueC;AAED,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,IAAI,EAAE,CAAC;KACR;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,CAAC;QACR,GAAG,EAAE,CAAC;KACP;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,CAAC;KACV;CACF,CAAC,CAAC","sourcesContent":["import * as React from 'react';\nimport { Animated, type LayoutChangeEvent, Platform, StyleSheet, View } from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport { getDefaultHeaderHeight, SafeAreaProviderCompat } from '../../../elements';\nimport type { LocaleDirection, ParamListBase, Route, StackNavigationState } from '../../../native';\nimport {\n forModalPresentationIOS,\n forNoAnimation as forNoAnimationCard,\n} from '../../TransitionConfigs/CardStyleInterpolators';\nimport {\n BottomSheetAndroid,\n DefaultTransition,\n FadeFromBottomAndroid,\n FadeFromRightAndroid,\n ModalFadeTransition,\n ModalSlideFromBottomIOS,\n ModalTransition,\n RevealFromBottomAndroid,\n ScaleFromCenterAndroid,\n SlideFromLeftIOS,\n SlideFromRightIOS,\n} from '../../TransitionConfigs/TransitionPresets';\nimport type {\n Layout,\n Scene,\n StackAnimationName,\n StackCardStyleInterpolator,\n StackDescriptorMap,\n StackHeaderMode,\n StackNavigationOptions,\n TransitionPreset,\n} from '../../types';\nimport { findLastIndex } from '../../utils/findLastIndex';\nimport { getDistanceForDirection } from '../../utils/getDistanceForDirection';\nimport { getModalRouteKeys } from '../../utils/getModalRoutesKeys';\nimport type { Props as HeaderContainerProps } from '../Header/HeaderContainer';\nimport { MaybeScreen, MaybeScreenContainer } from '../Screens';\nimport { CardContainer } from './CardContainer';\n\ntype GestureValues = {\n [key: string]: Animated.Value;\n};\n\ntype Props = {\n direction: LocaleDirection;\n insets: EdgeInsets;\n state: StackNavigationState;\n descriptors: StackDescriptorMap;\n preloadedDescriptors: StackDescriptorMap;\n routes: Route[];\n openingRouteKeys: string[];\n closingRouteKeys: string[];\n onOpenRoute: (props: { route: Route }) => void;\n onCloseRoute: (props: { route: Route }) => void;\n getPreviousRoute: (props: { route: Route }) => Route | undefined;\n renderHeader: (props: HeaderContainerProps) => React.ReactNode;\n isParentHeaderShown: boolean;\n isParentModal: boolean;\n onTransitionStart: (props: { route: Route }, closing: boolean) => void;\n onTransitionEnd: (props: { route: Route }, closing: boolean) => void;\n onGestureStart: (props: { route: Route }) => void;\n onGestureEnd: (props: { route: Route }) => void;\n onGestureCancel: (props: { route: Route }) => void;\n detachInactiveScreens?: boolean;\n};\n\ntype State = {\n routes: Route[];\n descriptors: StackDescriptorMap;\n scenes: Scene[];\n gestures: GestureValues;\n layout: Layout;\n activeStates: (0 | 1 | Animated.AnimatedInterpolation<0 | 1>)[];\n headerHeights: Record;\n};\n\nconst NAMED_TRANSITIONS_PRESETS = {\n default: DefaultTransition,\n fade: ModalFadeTransition,\n fade_from_bottom: FadeFromBottomAndroid,\n fade_from_right: FadeFromRightAndroid,\n none: DefaultTransition,\n reveal_from_bottom: RevealFromBottomAndroid,\n scale_from_center: ScaleFromCenterAndroid,\n slide_from_left: SlideFromLeftIOS,\n slide_from_right: SlideFromRightIOS,\n slide_from_bottom: Platform.select({\n ios: ModalSlideFromBottomIOS,\n default: BottomSheetAndroid,\n }),\n} as const satisfies Record;\n\nconst EPSILON = 1e-5;\n\nconst STATE_INACTIVE = 0;\nconst STATE_TRANSITIONING_OR_BELOW_TOP = 1;\nconst STATE_ON_TOP = 2;\n\nconst FALLBACK_DESCRIPTOR = Object.freeze({ options: {} as StackNavigationOptions });\n\nconst getInterpolationIndex = (scenes: Scene[], index: number) => {\n const { cardStyleInterpolator } = scenes[index]!.descriptor.options;\n\n // Start from current card and count backwards the number of cards with same interpolation\n let interpolationIndex = 0;\n\n for (let i = index - 1; i >= 0; i--) {\n const cardStyleInterpolatorCurrent = scenes[i]?.descriptor.options.cardStyleInterpolator;\n\n if (cardStyleInterpolatorCurrent !== cardStyleInterpolator) {\n break;\n }\n\n interpolationIndex++;\n }\n\n return interpolationIndex;\n};\n\nconst getIsModalPresentation = (cardStyleInterpolator: StackCardStyleInterpolator) => {\n return (\n cardStyleInterpolator === forModalPresentationIOS ||\n // Handle custom modal presentation interpolators as well\n cardStyleInterpolator.name === 'forModalPresentationIOS'\n );\n};\n\nconst getIsModal = (scene: Scene, interpolationIndex: number, isParentModal: boolean) => {\n if (isParentModal) {\n return true;\n }\n\n const { cardStyleInterpolator } = scene.descriptor.options;\n const isModalPresentation = getIsModalPresentation(cardStyleInterpolator);\n const isModal = isModalPresentation && interpolationIndex !== 0;\n\n return isModal;\n};\n\nconst getHeaderHeights = (\n scenes: Scene[],\n insets: EdgeInsets,\n isParentHeaderShown: boolean,\n isParentModal: boolean,\n layout: Layout,\n previous: Record\n) => {\n return scenes.reduce>((acc, curr, index) => {\n const { headerStatusBarHeight = isParentHeaderShown ? 0 : insets.top, headerStyle } =\n curr.descriptor.options;\n\n const style = StyleSheet.flatten(headerStyle || {});\n\n const height =\n 'height' in style && typeof style.height === 'number'\n ? style.height\n : previous[curr.route.key];\n\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(curr, interpolationIndex, isParentModal);\n\n acc[curr.route.key] =\n typeof height === 'number'\n ? height\n : getDefaultHeaderHeight(layout, isModal, headerStatusBarHeight);\n\n return acc;\n }, {});\n};\n\nconst getDistanceFromOptions = (\n layout: Layout,\n options: StackNavigationOptions | undefined,\n isRTL: boolean\n) => {\n if (options?.gestureDirection) {\n return getDistanceForDirection(layout, options.gestureDirection, isRTL);\n }\n\n const defaultGestureDirection =\n options?.presentation === 'modal'\n ? ModalTransition.gestureDirection\n : DefaultTransition.gestureDirection;\n\n const gestureDirection = options?.animation\n ? NAMED_TRANSITIONS_PRESETS[options?.animation]?.gestureDirection\n : defaultGestureDirection;\n\n return getDistanceForDirection(layout, gestureDirection, isRTL);\n};\n\nconst getProgressFromGesture = (\n gesture: Animated.Value,\n layout: Layout,\n options: StackNavigationOptions | undefined,\n isRTL: boolean\n) => {\n const distance = getDistanceFromOptions(\n {\n // Make sure that we have a non-zero distance, otherwise there will be incorrect progress\n // This causes blank screen on web if it was previously inside container with display: none\n width: Math.max(1, layout.width),\n height: Math.max(1, layout.height),\n },\n options,\n isRTL\n );\n\n if (distance > 0) {\n return gesture.interpolate({\n inputRange: [0, distance],\n outputRange: [1, 0],\n });\n }\n\n return gesture.interpolate({\n inputRange: [distance, 0],\n outputRange: [0, 1],\n });\n};\n\nfunction getDefaultAnimation(animation: StackAnimationName | undefined) {\n // Disable screen transition animation by default on web, windows and macos to match the native behavior\n const excludedPlatforms =\n Platform.OS !== 'web' && Platform.OS !== 'windows' && Platform.OS !== 'macos';\n\n return animation ?? (excludedPlatforms ? 'default' : 'none');\n}\n\nexport function getAnimationEnabled(animation: StackAnimationName | undefined) {\n return getDefaultAnimation(animation) !== 'none';\n}\n\nexport class CardStack extends React.Component {\n static getDerivedStateFromProps(props: Props, state: State): Partial | null {\n if (props.routes === state.routes && props.descriptors === state.descriptors) {\n return null;\n }\n\n const gestures = [...props.routes, ...props.state.preloadedRoutes].reduce(\n (acc, curr) => {\n const descriptor = props.descriptors[curr.key] || props.preloadedDescriptors[curr.key];\n const { animation } = descriptor?.options || {};\n\n acc[curr.key] =\n state.gestures[curr.key] ||\n new Animated.Value(\n (props.openingRouteKeys.includes(curr.key) && getAnimationEnabled(animation)) ||\n props.state.preloadedRoutes.includes(curr)\n ? getDistanceFromOptions(state.layout, descriptor?.options, props.direction === 'rtl')\n : 0\n );\n\n return acc;\n },\n {}\n );\n\n const modalRouteKeys = getModalRouteKeys([...props.routes, ...props.state.preloadedRoutes], {\n ...props.descriptors,\n ...props.preloadedDescriptors,\n });\n\n const scenes = [...props.routes, ...props.state.preloadedRoutes].map((route, index, self) => {\n // For preloaded screens, we don't care about the previous and the next screen\n const isPreloaded = props.state.preloadedRoutes.includes(route);\n const previousRoute = isPreloaded ? undefined : self[index - 1];\n const nextRoute = isPreloaded ? undefined : self[index + 1];\n\n const oldScene = state.scenes[index];\n\n const currentGesture = gestures[route.key]!;\n const previousGesture = previousRoute ? gestures[previousRoute.key]! : undefined;\n const nextGesture = nextRoute ? gestures[nextRoute.key]! : undefined;\n\n const descriptor =\n (isPreloaded ? props.preloadedDescriptors : props.descriptors)[route.key] ||\n state.descriptors[route.key] ||\n (oldScene ? oldScene.descriptor : FALLBACK_DESCRIPTOR);\n\n const nextOptions =\n nextRoute &&\n (props.descriptors[nextRoute?.key] || state.descriptors[nextRoute?.key])?.options;\n\n const previousOptions =\n previousRoute &&\n (props.descriptors[previousRoute?.key] || state.descriptors[previousRoute?.key])?.options;\n\n // When a screen is not the last, it should use next screen's transition config\n // Many transitions also animate the previous screen, so using 2 different transitions doesn't look right\n // For example combining a slide and a modal transition would look wrong otherwise\n // With this approach, combining different transition styles in the same navigator mostly looks right\n // This will still be broken when 2 transitions have different idle state (e.g. modal presentation),\n // but the majority of the transitions look alright\n const optionsForTransitionConfig: StackNavigationOptions =\n index !== self.length - 1 && nextOptions && nextOptions?.presentation !== 'transparentModal'\n ? nextOptions\n : descriptor.options;\n\n // Assume modal if there are already modal screens in the stack\n // or current screen is a modal when no presentation is specified\n const isModal = modalRouteKeys.includes(route.key);\n\n const animation = getDefaultAnimation(optionsForTransitionConfig.animation);\n\n const isAnimationEnabled = getAnimationEnabled(animation);\n\n const transitionPreset =\n animation !== 'default'\n ? NAMED_TRANSITIONS_PRESETS[animation]!\n : optionsForTransitionConfig.presentation === 'transparentModal'\n ? ModalFadeTransition\n : optionsForTransitionConfig.presentation === 'modal' || isModal\n ? ModalTransition\n : DefaultTransition;\n\n const {\n gestureEnabled = Platform.OS === 'ios' && isAnimationEnabled,\n gestureDirection = transitionPreset.gestureDirection,\n transitionSpec = transitionPreset.transitionSpec,\n cardStyleInterpolator = isAnimationEnabled\n ? transitionPreset.cardStyleInterpolator\n : forNoAnimationCard,\n headerStyleInterpolator = transitionPreset.headerStyleInterpolator,\n cardOverlayEnabled = (Platform.OS !== 'ios' &&\n optionsForTransitionConfig.presentation !== 'transparentModal') ||\n getIsModalPresentation(cardStyleInterpolator),\n } = optionsForTransitionConfig;\n\n const headerMode: StackHeaderMode =\n descriptor.options.headerMode ??\n (!(\n optionsForTransitionConfig.presentation === 'modal' ||\n optionsForTransitionConfig.presentation === 'transparentModal' ||\n nextOptions?.presentation === 'modal' ||\n nextOptions?.presentation === 'transparentModal' ||\n getIsModalPresentation(cardStyleInterpolator)\n ) &&\n Platform.OS === 'ios' &&\n descriptor.options.header === undefined\n ? 'float'\n : 'screen');\n\n const isRTL = props.direction === 'rtl';\n\n const scene = {\n route,\n descriptor: {\n ...descriptor,\n options: {\n ...descriptor.options,\n animation,\n cardOverlayEnabled,\n cardStyleInterpolator,\n gestureDirection,\n gestureEnabled,\n headerStyleInterpolator,\n transitionSpec,\n headerMode,\n },\n },\n progress: {\n current: getProgressFromGesture(currentGesture, state.layout, descriptor.options, isRTL),\n next:\n nextGesture && nextOptions?.presentation !== 'transparentModal'\n ? getProgressFromGesture(nextGesture, state.layout, nextOptions, isRTL)\n : undefined,\n previous: previousGesture\n ? getProgressFromGesture(previousGesture, state.layout, previousOptions, isRTL)\n : undefined,\n },\n __memo: [\n state.layout,\n descriptor,\n nextOptions,\n previousOptions,\n currentGesture,\n nextGesture,\n previousGesture,\n ],\n };\n\n if (\n oldScene &&\n scene.__memo.every((it, i) => {\n // @ts-expect-error: we haven't added __memo to the annotation to prevent usage elsewhere\n return oldScene.__memo[i] === it;\n })\n ) {\n return oldScene;\n }\n\n return scene as unknown as Scene;\n });\n\n let activeStates = state.activeStates;\n\n if (props.routes.length !== state.routes.length) {\n let activeScreensLimit = 1;\n\n for (let i = props.routes.length - 1; i >= 0; i--) {\n const { options } = scenes[i]!.descriptor;\n\n const {\n // By default, we don't want to detach the previous screen of the active one for modals\n detachPreviousScreen = options.presentation === 'transparentModal'\n ? false\n : getIsModalPresentation(options.cardStyleInterpolator)\n ? i !==\n findLastIndex(scenes, (scene) => {\n const { cardStyleInterpolator } = scene.descriptor.options;\n\n return (\n cardStyleInterpolator === forModalPresentationIOS ||\n cardStyleInterpolator?.name === 'forModalPresentationIOS'\n );\n })\n : true,\n } = options;\n\n if (detachPreviousScreen === false) {\n activeScreensLimit++;\n } else {\n // Check at least last 2 screens before stopping\n // This will make sure that screen isn't detached when another screen is animating on top of the transparent one\n // e.g. opaque -> transparent -> opaque\n if (i <= props.routes.length - 2) {\n break;\n }\n }\n }\n\n activeStates = props.routes.map((_, index, self) => {\n // The activity state represents state of the screen:\n // 0 - inactive, the screen is detached\n // 1 - transitioning or below the top screen, the screen is mounted but interaction is disabled\n // 2 - on top of the stack, the screen is mounted and interaction is enabled\n let activityState: Animated.AnimatedInterpolation<0 | 1 | 2> | 0 | 1 | 2;\n\n const lastActiveState = state.activeStates[index];\n const activeAfterTransition = index >= self.length - activeScreensLimit;\n\n if (lastActiveState === STATE_INACTIVE && !activeAfterTransition) {\n // screen was inactive before and it will still be inactive after the transition\n activityState = STATE_INACTIVE;\n } else {\n const sceneForActivity = scenes[self.length - 1];\n const outputValue =\n index === self.length - 1\n ? STATE_ON_TOP // the screen is on top after the transition\n : activeAfterTransition\n ? STATE_TRANSITIONING_OR_BELOW_TOP // the screen should stay active after the transition, it is not on top but is in activeLimit\n : STATE_INACTIVE; // the screen should be active only during the transition, it is at the edge of activeLimit\n\n activityState = sceneForActivity\n ? sceneForActivity.progress.current.interpolate({\n inputRange: [0, 1 - EPSILON, 1],\n outputRange: [1, 1, outputValue],\n extrapolate: 'clamp',\n })\n : STATE_TRANSITIONING_OR_BELOW_TOP;\n }\n\n return activityState;\n });\n }\n\n return {\n routes: props.routes,\n scenes,\n gestures,\n descriptors: props.descriptors,\n activeStates,\n headerHeights: getHeaderHeights(\n scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n state.layout,\n state.headerHeights\n ),\n };\n }\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n routes: [],\n scenes: [],\n gestures: {},\n layout: SafeAreaProviderCompat.initialMetrics.frame,\n descriptors: this.props.descriptors,\n activeStates: [],\n // Used when card's header is null and mode is float to make transition\n // between screens with headers and those without headers smooth.\n // This is not a great heuristic here. We don't know synchronously\n // on mount what the header height is so we have just used the most\n // common cases here.\n headerHeights: {},\n };\n }\n\n private handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n const layout = { width, height };\n\n this.setState((state, props) => {\n if (height === state.layout.height && width === state.layout.width) {\n return null;\n }\n\n return {\n layout,\n headerHeights: getHeaderHeights(\n state.scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n layout,\n state.headerHeights\n ),\n };\n });\n };\n\n private handleHeaderLayout = ({ route, height }: { route: Route; height: number }) => {\n this.setState(({ headerHeights }) => {\n const previousHeight = headerHeights[route.key];\n\n if (previousHeight === height) {\n return null;\n }\n\n return {\n headerHeights: {\n ...headerHeights,\n [route.key]: height,\n },\n };\n });\n };\n\n private getFocusedRoute = () => {\n const { state } = this.props;\n\n return state.routes[state.index]!;\n };\n\n private getPreviousScene = ({ route }: { route: Route }) => {\n const { getPreviousRoute } = this.props;\n const { scenes } = this.state;\n\n const previousRoute = getPreviousRoute({ route });\n\n if (previousRoute) {\n const previousScene = scenes.find(\n (scene) => scene.descriptor.route.key === previousRoute.key\n );\n\n return previousScene;\n }\n\n return undefined;\n };\n\n render() {\n const {\n insets,\n state,\n routes,\n openingRouteKeys,\n closingRouteKeys,\n onOpenRoute,\n onCloseRoute,\n renderHeader,\n isParentHeaderShown,\n isParentModal,\n onTransitionStart,\n onTransitionEnd,\n onGestureStart,\n onGestureEnd,\n onGestureCancel,\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n } = this.props;\n\n const { scenes, layout, gestures, activeStates, headerHeights } = this.state;\n\n const focusedRoute = state.routes[state.index]!;\n const focusedHeaderHeight = headerHeights[focusedRoute.key];\n\n const isFloatHeaderAbsolute = this.state.scenes.slice(-2).some((scene) => {\n const options = scene.descriptor.options ?? {};\n const { headerMode, headerTransparent, headerShown = true } = options;\n\n if (headerTransparent || headerShown === false || headerMode === 'screen') {\n return true;\n }\n\n return false;\n });\n\n return (\n \n {renderHeader({\n mode: 'float',\n layout,\n scenes,\n getPreviousScene: this.getPreviousScene,\n getFocusedRoute: this.getFocusedRoute,\n onContentHeightChange: this.handleHeaderLayout,\n style: [\n styles.floating,\n isFloatHeaderAbsolute && [\n // Without this, the header buttons won't be touchable on Android when headerTransparent: true\n { height: focusedHeaderHeight },\n styles.absolute,\n ],\n ],\n })}\n \n {[...routes, ...state.preloadedRoutes].map((route, index) => {\n const focused = focusedRoute.key === route.key;\n const gesture = gestures[route.key]!;\n const scene = scenes[index]!;\n // It is possible that for a short period the route appears in both arrays.\n // Particularly, if the screen is removed with `retain`, then it needs a moment to execute the animation.\n // However, due to the router action, it immediately populates the `preloadedRoutes` array.\n // Practically, the logic below takes care that it is rendered only once.\n const isPreloaded = state.preloadedRoutes.includes(route) && !routes.includes(route);\n if (\n state.preloadedRoutes.includes(route) &&\n routes.includes(route) &&\n index >= routes.length\n ) {\n return null;\n }\n\n const {\n headerShown = true,\n headerTransparent,\n freezeOnBlur,\n autoHideHomeIndicator,\n } = scene.descriptor.options;\n\n const safeAreaInsetTop = insets.top;\n const safeAreaInsetRight = insets.right;\n const safeAreaInsetBottom = insets.bottom;\n const safeAreaInsetLeft = insets.left;\n\n const headerHeight = headerShown !== false ? (headerHeights[route.key] ?? 0) : 0;\n\n // Start from current card and count backwards the number of cards with same interpolation\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(scene, interpolationIndex, isParentModal);\n\n const isNextScreenTransparent =\n scenes[index + 1]?.descriptor.options.presentation === 'transparentModal';\n\n const detachCurrentScreen =\n scenes[index + 1]?.descriptor.options.detachPreviousScreen !== false;\n\n const activityState = isPreloaded ? STATE_INACTIVE : activeStates[index]!;\n\n return (\n \n \n \n );\n })}\n \n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n absolute: {\n position: 'absolute',\n top: 0,\n start: 0,\n end: 0,\n },\n floating: {\n zIndex: 1,\n },\n});\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/ui/Slot.d.ts.map b/packages/expo-router/build/ui/Slot.d.ts.map index ad63ed136048bd..97e31fcb76f530 100644 --- a/packages/expo-router/build/ui/Slot.d.ts.map +++ b/packages/expo-router/build/ui/Slot.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Slot.d.ts","sourceRoot":"","sources":["../../src/ui/Slot.tsx"],"names":[],"mappings":"AACA,OAAc,EAGZ,KAAK,yBAAyB,EAC9B,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AACf,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAoC1D,MAAM,WAAW,IAAI,CAAC,KAAK,GAAG,SAAS,EAAE,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CACjE,SAAQ,yBAAyB,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;CAAG;AAElE,eAAO,MAAM,IAAI,EAAE,IAA8C,CAAC"} \ No newline at end of file +{"version":3,"file":"Slot.d.ts","sourceRoot":"","sources":["../../src/ui/Slot.tsx"],"names":[],"mappings":"AACA,OAAc,EAGZ,KAAK,yBAAyB,EAC9B,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AACf,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAoC1D,MAAM,WAAW,IAAI,CACnB,KAAK,GAAG,SAAS,EACjB,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAC1B,SAAQ,yBAAyB,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;CAAG;AAElE,eAAO,MAAM,IAAI,EAAE,IAA8C,CAAC"} \ No newline at end of file diff --git a/packages/expo-router/build/ui/Slot.js.map b/packages/expo-router/build/ui/Slot.js.map index 60f06ef8fd89e1..00d752327aa89c 100644 --- a/packages/expo-router/build/ui/Slot.js.map +++ b/packages/expo-router/build/ui/Slot.js.map @@ -1 +1 @@ -{"version":3,"file":"Slot.js","sourceRoot":"","sources":["../../src/ui/Slot.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAuD;AACvD,+CAMe;AACf,+CAA0D;AAE1D;;;;;;;;;;;;GAYG;AACH,SAAS,sBAAsB,CAAC,SAAyB;IACvD,OAAO,IAAA,kBAAU,EAAC,SAAS,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;QAC3D,KAAK,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,yBAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,IAAI,eAAK,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzC,IACE,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ;oBACxC,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI;oBAC7B,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK;oBAC/B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EACzC,CAAC;oBACD,MAAM,IAAI,KAAK,CACb,4KAA4K,CAC7K,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,uBAAC,SAAS,IAAC,GAAG,EAAE,GAAG,KAAM,KAAK,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC;AAKY,QAAA,IAAI,GAAS,sBAAsB,CAAC,iBAAO,CAAS,CAAC","sourcesContent":["import { Slot as RUISlot } from '@radix-ui/react-slot';\nimport React, {\n forwardRef,\n useMemo,\n type ForwardRefExoticComponent,\n type Component,\n type RefAttributes,\n} from 'react';\nimport { StyleSheet, type ViewProps } from 'react-native';\n\n/**\n * RadixUI has special logic to handle the merging of `style` and `className` props.\n * On the web styles are not allowed so Radix does not handle this scenario.\n * This could be fixed upstream (PR open), but it may not as RN is not their target\n * platform.\n *\n * This shim calls `StyleSheet.flatten` on the styles before we render the \n *\n * @see https://github.com/expo/expo/issues/31352\n * @see https://github.com/radix-ui/primitives/issues/3107\n * @param Component\n * @returns\n */\nfunction ShimSlotForReactNative(Component: typeof RUISlot): typeof RUISlot {\n return forwardRef(function RNSlotHOC({ style, ...props }, ref) {\n style = useMemo(() => StyleSheet.flatten(style), [style]);\n if (process.env.NODE_ENV !== 'production') {\n if (React.isValidElement(props.children)) {\n if (\n typeof props.children.props === 'object' &&\n props.children.props !== null &&\n 'style' in props.children.props &&\n Array.isArray(props.children.props.style)\n ) {\n throw new Error(\n `[expo-router]: You are passing an array of styles to a child of . Consider flattening the styles with StyleSheet.flatten before passing them to the child component.`\n );\n }\n }\n }\n return ;\n });\n}\n\nexport interface Slot>\n extends ForwardRefExoticComponent> {}\n\nexport const Slot: Slot = ShimSlotForReactNative(RUISlot) as Slot;\n"]} \ No newline at end of file +{"version":3,"file":"Slot.js","sourceRoot":"","sources":["../../src/ui/Slot.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAuD;AACvD,+CAMe;AACf,+CAA0D;AAE1D;;;;;;;;;;;;GAYG;AACH,SAAS,sBAAsB,CAAC,SAAyB;IACvD,OAAO,IAAA,kBAAU,EAAC,SAAS,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;QAC3D,KAAK,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,yBAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,IAAI,eAAK,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzC,IACE,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ;oBACxC,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI;oBAC7B,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK;oBAC/B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EACzC,CAAC;oBACD,MAAM,IAAI,KAAK,CACb,4KAA4K,CAC7K,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,uBAAC,SAAS,IAAC,GAAG,EAAE,GAAG,KAAM,KAAK,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC;AAOY,QAAA,IAAI,GAAS,sBAAsB,CAAC,iBAAO,CAAS,CAAC","sourcesContent":["import { Slot as RUISlot } from '@radix-ui/react-slot';\nimport React, {\n forwardRef,\n useMemo,\n type ForwardRefExoticComponent,\n type Component,\n type RefAttributes,\n} from 'react';\nimport { StyleSheet, type ViewProps } from 'react-native';\n\n/**\n * RadixUI has special logic to handle the merging of `style` and `className` props.\n * On the web styles are not allowed so Radix does not handle this scenario.\n * This could be fixed upstream (PR open), but it may not as RN is not their target\n * platform.\n *\n * This shim calls `StyleSheet.flatten` on the styles before we render the \n *\n * @see https://github.com/expo/expo/issues/31352\n * @see https://github.com/radix-ui/primitives/issues/3107\n * @param Component\n * @returns\n */\nfunction ShimSlotForReactNative(Component: typeof RUISlot): typeof RUISlot {\n return forwardRef(function RNSlotHOC({ style, ...props }, ref) {\n style = useMemo(() => StyleSheet.flatten(style), [style]);\n if (process.env.NODE_ENV !== 'production') {\n if (React.isValidElement(props.children)) {\n if (\n typeof props.children.props === 'object' &&\n props.children.props !== null &&\n 'style' in props.children.props &&\n Array.isArray(props.children.props.style)\n ) {\n throw new Error(\n `[expo-router]: You are passing an array of styles to a child of . Consider flattening the styles with StyleSheet.flatten before passing them to the child component.`\n );\n }\n }\n }\n return ;\n });\n}\n\nexport interface Slot<\n Props = ViewProps,\n Ref = Component,\n> extends ForwardRefExoticComponent> {}\n\nexport const Slot: Slot = ShimSlotForReactNative(RUISlot) as Slot;\n"]} \ No newline at end of file diff --git a/packages/expo-router/src/link/zoom/useZoomHref.ios.tsx b/packages/expo-router/src/link/zoom/useZoomHref.ios.tsx index 31e3c3e89d3c1f..8062dd84cf2e40 100644 --- a/packages/expo-router/src/link/zoom/useZoomHref.ios.tsx +++ b/packages/expo-router/src/link/zoom/useZoomHref.ios.tsx @@ -2,10 +2,10 @@ import { use, useMemo } from 'react'; +import { ZoomTransitionSourceContext } from './zoom-transition-context'; import { INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME } from '../../navigationParams'; import { parseUrlUsingCustomBase } from '../../utils/url'; import type { LinkProps } from '../useLinkHooks'; -import { ZoomTransitionSourceContext } from './zoom-transition-context'; export function useZoomHref({ href }: LinkProps) { const value = use(ZoomTransitionSourceContext); diff --git a/packages/expo-router/src/native-tabs/types.ts b/packages/expo-router/src/native-tabs/types.ts index 1bebe9c21f9a37..55c5dad1fc5d45 100644 --- a/packages/expo-router/src/native-tabs/types.ts +++ b/packages/expo-router/src/native-tabs/types.ts @@ -364,17 +364,16 @@ export interface OnTabChangeEventPayload { isNativeAction: boolean; } -export interface NativeTabsViewProps - extends Omit< - InternalNativeTabsProps, - | 'labelStyle' - | 'iconColor' - | 'backgroundColor' - | 'badgeBackgroundColor' - | 'blurEffect' - | 'indicatorColor' - | 'badgeTextColor' - > { +export interface NativeTabsViewProps extends Omit< + InternalNativeTabsProps, + | 'labelStyle' + | 'iconColor' + | 'backgroundColor' + | 'badgeBackgroundColor' + | 'blurEffect' + | 'indicatorColor' + | 'badgeTextColor' +> { focusedIndex: number; /** * Provenance counter associated with the currently rendered `focusedIndex`. diff --git a/packages/expo-router/src/react-navigation/bottom-tabs/views/BottomTabBar.tsx b/packages/expo-router/src/react-navigation/bottom-tabs/views/BottomTabBar.tsx index 25fade6a40835b..4cc773d8e1627b 100644 --- a/packages/expo-router/src/react-navigation/bottom-tabs/views/BottomTabBar.tsx +++ b/packages/expo-router/src/react-navigation/bottom-tabs/views/BottomTabBar.tsx @@ -11,6 +11,7 @@ import { } from 'react-native'; import type { EdgeInsets } from 'react-native-safe-area-context'; +import { BottomTabItem } from './BottomTabItem'; import { getDefaultSidebarWidth, getLabel, MissingIcon, useFrameSize } from '../../elements'; import { CommonActions, @@ -22,7 +23,6 @@ import { useTheme, } from '../../native'; import type { BottomTabBarProps, BottomTabDescriptorMap } from '../types'; -import { BottomTabItem } from './BottomTabItem'; import { BottomTabBarHeightCallbackContext } from '../utils/BottomTabBarHeightCallbackContext'; import { useIsKeyboardShown } from '../utils/useIsKeyboardShown'; diff --git a/packages/expo-router/src/react-navigation/bottom-tabs/views/BottomTabItem.tsx b/packages/expo-router/src/react-navigation/bottom-tabs/views/BottomTabItem.tsx index 08efabce73df23..242f18bb41f050 100644 --- a/packages/expo-router/src/react-navigation/bottom-tabs/views/BottomTabItem.tsx +++ b/packages/expo-router/src/react-navigation/bottom-tabs/views/BottomTabItem.tsx @@ -11,11 +11,11 @@ import { View, } from 'react-native'; -import { getLabel, Label, PlatformPressable } from '../../elements'; -import type { BottomTabBarButtonProps, BottomTabDescriptor, LabelPosition } from '../types'; import { TabBarIcon } from './TabBarIcon'; import { Color } from '../../../utils/color'; +import { getLabel, Label, PlatformPressable } from '../../elements'; import { type Route, useTheme } from '../../native'; +import type { BottomTabBarButtonProps, BottomTabDescriptor, LabelPosition } from '../types'; type Props = { /** diff --git a/packages/expo-router/src/react-navigation/core/types.tsx b/packages/expo-router/src/react-navigation/core/types.tsx index f834f39a7c000a..1e282dba40a4cb 100644 --- a/packages/expo-router/src/react-navigation/core/types.tsx +++ b/packages/expo-router/src/react-navigation/core/types.tsx @@ -1066,5 +1066,5 @@ export type PathConfigMap = { > ? string | PathConfig : // eslint-disable-next-line @typescript-eslint/no-empty-object-type - string | Omit, 'screens' | 'initialRouteName'>; + string | Omit, 'screens' | 'initialRouteName'>; }; diff --git a/packages/expo-router/src/react-navigation/elements/Header/HeaderBackButton.tsx b/packages/expo-router/src/react-navigation/elements/Header/HeaderBackButton.tsx index 76fb31949369aa..5a6deede0262b7 100644 --- a/packages/expo-router/src/react-navigation/elements/Header/HeaderBackButton.tsx +++ b/packages/expo-router/src/react-navigation/elements/Header/HeaderBackButton.tsx @@ -10,13 +10,13 @@ import { View, } from 'react-native'; +import { HeaderButton } from './HeaderButton'; +import { HeaderIcon, ICON_MARGIN } from './HeaderIcon'; import backIconMask from '../../../../assets/react-navigation/elements/back-icon-mask.png'; import backIcon from '../../../../assets/react-navigation/elements/back-icon.png'; +import { useLocale, useTheme } from '../../native'; import { MaskedView } from '../MaskedView'; import type { HeaderBackButtonProps } from '../types'; -import { HeaderButton } from './HeaderButton'; -import { HeaderIcon, ICON_MARGIN } from './HeaderIcon'; -import { useLocale, useTheme } from '../../native'; export function HeaderBackButton({ disabled, diff --git a/packages/expo-router/src/react-navigation/native-stack/views/useHeaderConfigProps.tsx b/packages/expo-router/src/react-navigation/native-stack/views/useHeaderConfigProps.tsx index fa6bc1aa4b87e7..e45f3cafed09c0 100644 --- a/packages/expo-router/src/react-navigation/native-stack/views/useHeaderConfigProps.tsx +++ b/packages/expo-router/src/react-navigation/native-stack/views/useHeaderConfigProps.tsx @@ -15,7 +15,10 @@ import { SearchBar, } from 'react-native-screens'; +import { processFonts } from './FontProcessor'; +import { Color } from '../../../utils/color'; import { getHeaderTitle, HeaderTitle } from '../../elements'; +import { type Route, type Theme, useLocale, useTheme } from '../../native'; import type { NativeStackHeaderItem, NativeStackHeaderItemButton, @@ -23,9 +26,6 @@ import type { NativeStackHeaderItemMenuSubmenu, NativeStackNavigationOptions, } from '../types'; -import { processFonts } from './FontProcessor'; -import { Color } from '../../../utils/color'; -import { type Route, type Theme, useLocale, useTheme } from '../../native'; type Props = NativeStackNavigationOptions & { headerTopInsetEnabled: boolean; diff --git a/packages/expo-router/src/react-navigation/stack/views/Stack/CardStack.tsx b/packages/expo-router/src/react-navigation/stack/views/Stack/CardStack.tsx index f2adf93af129fd..c743836d50215c 100755 --- a/packages/expo-router/src/react-navigation/stack/views/Stack/CardStack.tsx +++ b/packages/expo-router/src/react-navigation/stack/views/Stack/CardStack.tsx @@ -247,7 +247,7 @@ export class CardStack extends React.Component { state.gestures[curr.key] || new Animated.Value( (props.openingRouteKeys.includes(curr.key) && getAnimationEnabled(animation)) || - props.state.preloadedRoutes.includes(curr) + props.state.preloadedRoutes.includes(curr) ? getDistanceFromOptions(state.layout, descriptor?.options, props.direction === 'rtl') : 0 ); diff --git a/packages/expo-router/src/ui/Slot.tsx b/packages/expo-router/src/ui/Slot.tsx index 32fced40803e0d..b499749152c5db 100644 --- a/packages/expo-router/src/ui/Slot.tsx +++ b/packages/expo-router/src/ui/Slot.tsx @@ -42,7 +42,9 @@ function ShimSlotForReactNative(Component: typeof RUISlot): typeof RUISlot { }); } -export interface Slot> - extends ForwardRefExoticComponent> {} +export interface Slot< + Props = ViewProps, + Ref = Component, +> extends ForwardRefExoticComponent> {} export const Slot: Slot = ShimSlotForReactNative(RUISlot) as Slot; diff --git a/packages/expo-server/build/cjs/vendor/bun.js.map b/packages/expo-server/build/cjs/vendor/bun.js.map index f67f1873619901..b3fe22e3fb9c77 100644 --- a/packages/expo-server/build/cjs/vendor/bun.js.map +++ b/packages/expo-server/build/cjs/vendor/bun.js.map @@ -1 +1 @@ -{"version":3,"file":"bun.js","sourceRoot":"","sources":["../../../src/vendor/bun.ts"],"names":[],"mappings":";;;AAsBA,oDAUC;AAhCD,uDAAqD;AAErD,yCAIoB;AACpB,6CAA2E;AAE3E,uCAAuC;AAA9B,qGAAA,SAAS,OAAA;AAIlB,MAAM,KAAK,GAAG,IAAI,oCAAiB,EAAE,CAAC;AAMtC;;GAEG;AACH,SAAgB,oBAAoB,CAClC,MAAsD,EACtD,KAA4B;IAE5B,MAAM,GAAG,GAAG,IAAA,6BAAsB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAA,+BAAiB,EAAC;QAClC,GAAG,IAAA,oBAAa,EAAC,MAAM,CAAC;QACxB,GAAG,KAAK;KACT,CAAC,CAAC;IACH,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC"} \ No newline at end of file +{"version":3,"file":"bun.js","sourceRoot":"","sources":["../../../src/vendor/bun.ts"],"names":[],"mappings":";;;AAqBA,oDAUC;AA/BD,uDAAqD;AAErD,yCAIoB;AACpB,6CAA2E;AAE3E,uCAAuC;AAA9B,qGAAA,SAAS,OAAA;AAIlB,MAAM,KAAK,GAAG,IAAI,oCAAiB,EAAE,CAAC;AAKtC;;GAEG;AACH,SAAgB,oBAAoB,CAClC,MAAsD,EACtD,KAA4B;IAE5B,MAAM,GAAG,GAAG,IAAA,6BAAsB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAA,+BAAiB,EAAC;QAClC,GAAG,IAAA,oBAAa,EAAC,MAAM,CAAC;QACxB,GAAG,KAAK;KACT,CAAC,CAAC;IACH,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC"} \ No newline at end of file diff --git a/packages/expo-server/build/cjs/vendor/express.js.map b/packages/expo-server/build/cjs/vendor/express.js.map index eb2cdcf20c6b6a..691c34708db73f 100644 --- a/packages/expo-server/build/cjs/vendor/express.js.map +++ b/packages/expo-server/build/cjs/vendor/express.js.map @@ -1 +1 @@ -{"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/vendor/express.ts"],"names":[],"mappings":";;;AA8BA,oDAwCC;AArED,uDAAqD;AAErD,yCAIoB;AACpB,6CAA2E;AAC3E,iCAAiD;AAEjD,uCAAuC;AAA9B,qGAAA,SAAS,OAAA;AAQlB,MAAM,KAAK,GAAG,IAAI,oCAAiB,EAAE,CAAC;AAQtC;;GAEG;AACH,SAAgB,oBAAoB,CAClC,MAAsD,EACtD,KAA4B;IAE5B,MAAM,GAAG,GAAG,IAAA,6BAAsB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAA,+BAAiB,EAAC;QAClC,GAAG,IAAA,oBAAa,EAAC,MAAM,CAAC;QACxB,GAAG,KAAK;KACT,CAAC,CAAC;IAEH,KAAK,UAAU,cAAc,CAAC,OAAgB;QAC5C,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,gBAAgB,GAAG,KAAK,EAAE,gBAAgB,CAAC;YACjD,IAAI,gBAAgB,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACnE,IAAI,CAAC;oBACH,OAAO,MAAM,gBAAgB,CAAC,KAAc,CAAC,CAAC;gBAChD,CAAC;gBAAC,MAAM,CAAC;oBACP,+BAA+B;gBACjC,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,IAA0B,EAAE,EAAE;QACvF,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,qBAAc,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,IAAA,cAAO,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,wEAAwE;YACxE,+BAA+B;YAC/B,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,+BAAiD;AAAxC,sGAAA,cAAc,OAAA;AAAE,+FAAA,OAAO,OAAA"} \ No newline at end of file +{"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/vendor/express.ts"],"names":[],"mappings":";;;AA6BA,oDAwCC;AApED,uDAAqD;AAErD,yCAIoB;AACpB,6CAA2E;AAC3E,iCAAiD;AAEjD,uCAAuC;AAA9B,qGAAA,SAAS,OAAA;AAQlB,MAAM,KAAK,GAAG,IAAI,oCAAiB,EAAE,CAAC;AAOtC;;GAEG;AACH,SAAgB,oBAAoB,CAClC,MAAsD,EACtD,KAA4B;IAE5B,MAAM,GAAG,GAAG,IAAA,6BAAsB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAA,+BAAiB,EAAC;QAClC,GAAG,IAAA,oBAAa,EAAC,MAAM,CAAC;QACxB,GAAG,KAAK;KACT,CAAC,CAAC;IAEH,KAAK,UAAU,cAAc,CAAC,OAAgB;QAC5C,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,gBAAgB,GAAG,KAAK,EAAE,gBAAgB,CAAC;YACjD,IAAI,gBAAgB,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACnE,IAAI,CAAC;oBACH,OAAO,MAAM,gBAAgB,CAAC,KAAc,CAAC,CAAC;gBAChD,CAAC;gBAAC,MAAM,CAAC;oBACP,+BAA+B;gBACjC,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,IAA0B,EAAE,EAAE;QACvF,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,qBAAc,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,IAAA,cAAO,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,wEAAwE;YACxE,+BAA+B;YAC/B,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,+BAAiD;AAAxC,sGAAA,cAAc,OAAA;AAAE,+FAAA,OAAO,OAAA"} \ No newline at end of file diff --git a/packages/expo-server/build/cjs/vendor/http.js.map b/packages/expo-server/build/cjs/vendor/http.js.map index 105ac9e0b08385..60448a7cd8929b 100644 --- a/packages/expo-server/build/cjs/vendor/http.js.map +++ b/packages/expo-server/build/cjs/vendor/http.js.map @@ -1 +1 @@ -{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/vendor/http.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/vendor/http.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/expo-server/build/mjs/vendor/bun.js.map b/packages/expo-server/build/mjs/vendor/bun.js.map index 839eebe5ef929e..47829ac0783ebc 100644 --- a/packages/expo-server/build/mjs/vendor/bun.js.map +++ b/packages/expo-server/build/mjs/vendor/bun.js.map @@ -1 +1 @@ -{"version":3,"file":"bun.js","sourceRoot":"","sources":["../../../src/vendor/bun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EACL,oBAAoB,IAAI,iBAAiB,GAG1C,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAMtC;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAsD,EACtD,KAA4B;IAE5B,MAAM,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,iBAAiB,CAAC;QAClC,GAAG,aAAa,CAAC,MAAM,CAAC;QACxB,GAAG,KAAK;KACT,CAAC,CAAC;IACH,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC"} \ No newline at end of file +{"version":3,"file":"bun.js","sourceRoot":"","sources":["../../../src/vendor/bun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EACL,oBAAoB,IAAI,iBAAiB,GAG1C,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAKtC;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAsD,EACtD,KAA4B;IAE5B,MAAM,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,iBAAiB,CAAC;QAClC,GAAG,aAAa,CAAC,MAAM,CAAC;QACxB,GAAG,KAAK;KACT,CAAC,CAAC;IACH,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC"} \ No newline at end of file diff --git a/packages/expo-server/build/mjs/vendor/express.js.map b/packages/expo-server/build/mjs/vendor/express.js.map index 972e8a689562a9..91ef6e688ed01b 100644 --- a/packages/expo-server/build/mjs/vendor/express.js.map +++ b/packages/expo-server/build/mjs/vendor/express.js.map @@ -1 +1 @@ -{"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/vendor/express.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EACL,oBAAoB,IAAI,iBAAiB,GAG1C,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAQtC;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAsD,EACtD,KAA4B;IAE5B,MAAM,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,iBAAiB,CAAC;QAClC,GAAG,aAAa,CAAC,MAAM,CAAC;QACxB,GAAG,KAAK;KACT,CAAC,CAAC;IAEH,KAAK,UAAU,cAAc,CAAC,OAAgB;QAC5C,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,gBAAgB,GAAG,KAAK,EAAE,gBAAgB,CAAC;YACjD,IAAI,gBAAgB,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACnE,IAAI,CAAC;oBACH,OAAO,MAAM,gBAAgB,CAAC,KAAc,CAAC,CAAC;gBAChD,CAAC;gBAAC,MAAM,CAAC;oBACP,+BAA+B;gBACjC,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,IAA0B,EAAE,EAAE;QACvF,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,wEAAwE;YACxE,+BAA+B;YAC/B,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC"} \ No newline at end of file +{"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/vendor/express.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EACL,oBAAoB,IAAI,iBAAiB,GAG1C,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAOtC;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAsD,EACtD,KAA4B;IAE5B,MAAM,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,iBAAiB,CAAC;QAClC,GAAG,aAAa,CAAC,MAAM,CAAC;QACxB,GAAG,KAAK;KACT,CAAC,CAAC;IAEH,KAAK,UAAU,cAAc,CAAC,OAAgB;QAC5C,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,gBAAgB,GAAG,KAAK,EAAE,gBAAgB,CAAC;YACjD,IAAI,gBAAgB,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACnE,IAAI,CAAC;oBACH,OAAO,MAAM,gBAAgB,CAAC,KAAc,CAAC,CAAC;gBAChD,CAAC;gBAAC,MAAM,CAAC;oBACP,+BAA+B;gBACjC,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,IAA0B,EAAE,EAAE;QACvF,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,wEAAwE;YACxE,+BAA+B;YAC/B,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC"} \ No newline at end of file diff --git a/packages/expo-server/build/mjs/vendor/http.js.map b/packages/expo-server/build/mjs/vendor/http.js.map index dfad44540c9b46..e8663b9dc9ba44 100644 --- a/packages/expo-server/build/mjs/vendor/http.js.map +++ b/packages/expo-server/build/mjs/vendor/http.js.map @@ -1 +1 @@ -{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/vendor/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EACL,oBAAoB,IAAI,iBAAiB,GAG1C,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAUvC,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAQtC;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAA+E,EAC/E,KAAqC;IAErC,MAAM,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,iBAAiB,CAAC;QAClC,GAAG,aAAa,CAAC,MAAM,CAAC;QACxB,GAAG,KAAK;KACT,CAAC,CAAC;IAEH,KAAK,UAAU,cAAc,CAAC,OAAgB;QAC5C,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,gBAAgB,GAAG,KAAK,EAAE,gBAAgB,CAAC;YACjD,IAAI,gBAAgB,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACnE,IAAI,CAAC;oBACH,OAAO,MAAM,gBAAgB,CAAC,KAAc,CAAC,CAAC;gBAChD,CAAC;gBAAC,MAAM,CAAC;oBACP,+BAA+B;gBACjC,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,EAAE,GAAyB,EAAE,GAAwB,EAAE,IAAkB,EAAE,EAAE;QACvF,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,qEAAqE;YACrE,+BAA+B;YAC/B,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,cAAiC;IAC1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACxC,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,cAAc,CAAC,GAAyB,EAAE,GAAwB;IAChF,MAAM,KAAK,GAAG,WAAW,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACrF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAI,EAAE,GAAG,KAAK,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEhE,gFAAgF;IAChF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC/B,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBACnB,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACxB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5D,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACxB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5D,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAgB;QACxB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;QAC1C,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC;IAEF,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,4DAA4D;AAC5D,MAAM,4BAA4B,GAAG,CAAC,QAA8B,EAAE,OAAgB,EAAE,EAAE;IACxF,wDAAwD;IACxD,oEAAoE;IACpE,MAAM,UAAU,GAAsC,EAAE,CAAC;IACzD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACnC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YACnC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,8FAA8F;IAC9F,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5B,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAMF,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,YAAiC,EACjC,WAAqB,EACrB,OAAwB;IAExB,IAAI,YAAY,CAAC,aAAa,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;QACzD,OAAO;IACT,CAAC;IAED,YAAY,CAAC,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC;IACpD,YAAY,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;IAC7C,4BAA4B,CAAC,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAEhE,IAAI,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,IAA0B,CAAC,CAAC;QACtE,MAAM,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,YAAY,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/vendor/http.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/expo-server/src/vendor/bun.ts b/packages/expo-server/src/vendor/bun.ts index d4c02298246753..02526edd61890b 100644 --- a/packages/expo-server/src/vendor/bun.ts +++ b/packages/expo-server/src/vendor/bun.ts @@ -14,8 +14,7 @@ export type RequestHandler = (req: Request) => Promise; const STORE = new AsyncLocalStorage(); export interface RequestHandlerParams - extends ExpoRequestHandlerParams, - Partial {} + extends ExpoRequestHandlerParams, Partial {} /** * Returns a request handler for Express that serves the response using Remix. diff --git a/packages/expo-server/src/vendor/express.ts b/packages/expo-server/src/vendor/express.ts index 5b0f00723ebaa7..bfae95af74f350 100644 --- a/packages/expo-server/src/vendor/express.ts +++ b/packages/expo-server/src/vendor/express.ts @@ -20,8 +20,7 @@ export type RequestHandler = ( const STORE = new AsyncLocalStorage(); export interface RequestHandlerParams - extends ExpoRequestHandlerParams, - Partial { + extends ExpoRequestHandlerParams, Partial { handleRouteError?(error: Error): Promise; } diff --git a/packages/expo-server/src/vendor/http.ts b/packages/expo-server/src/vendor/http.ts index 72cbcdb6c552b3..ca867447624538 100644 --- a/packages/expo-server/src/vendor/http.ts +++ b/packages/expo-server/src/vendor/http.ts @@ -24,8 +24,7 @@ export type RequestHandler = ( const STORE = new AsyncLocalStorage(); export interface RequestHandlerParams - extends ExpoRequestHandlerParams, - Partial { + extends ExpoRequestHandlerParams, Partial { handleRouteError?(error: Error): Promise; } diff --git a/packages/expo-sqlite/dev-plugin-webui/bun.lock b/packages/expo-sqlite/dev-plugin-webui/bun.lock index 35fad6692cfb56..93f3e53315ed8e 100644 --- a/packages/expo-sqlite/dev-plugin-webui/bun.lock +++ b/packages/expo-sqlite/dev-plugin-webui/bun.lock @@ -21,7 +21,7 @@ "postcss": "^8.5.6", "react": "19.2.3", "react-dom": "19.2.3", - "react-native": "0.85.2", + "react-native": "0.85.3", "react-native-safe-area-context": "~5.6.2", "react-native-screens": "~4.24.0", "react-native-web": "~0.21.0", @@ -33,7 +33,7 @@ }, "devDependencies": { "@jest/globals": "~29.7.0", - "@react-native/jest-preset": "0.85.2", + "@react-native/jest-preset": "0.85.3", "@testing-library/react-native": "^13.3.0", "@types/bun": "^1.3.1", "@types/jest": "29.5.14", @@ -45,7 +45,7 @@ "expo-atlas": "^0.4.0", "jest": "~29.7.0", "jest-expo": "~55.0.9", - "prettier": "^3.6.2", + "prettier": "^3.8.3", "react-test-renderer": "19.2.3", "typescript": "~5.9.2", }, @@ -442,15 +442,15 @@ "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], - "@react-native/assets-registry": ["@react-native/assets-registry@0.85.2", "", {}, "sha512-kauC/oPaxklU4Y+u9gBfCBJm51qX6WBZq4xx0USCdimtp+G8+554kpygfSWIjoqCJa2o06bWxBEjesiuCv+LzA=="], + "@react-native/assets-registry": ["@react-native/assets-registry@0.85.3", "", {}, "sha512-u9ZiYP23vA2IFtdFQFmetzSmk6SM0xgKIoiOsr1hXNHjHaLhOm+/Ph1ud57wX6+Dbwdzx8coJgnzSKL3W21PCg=="], "@react-native/babel-plugin-codegen": ["@react-native/babel-plugin-codegen@0.83.2", "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.83.2.tgz", { "dependencies": { "@babel/traverse": "^7.25.3", "@react-native/codegen": "0.83.2" } }, "sha512-XbcN/BEa64pVlb0Hb/E/Ph2SepjVN/FcNKrJcQvtaKZA6mBSO8pW8Eircdlr61/KBH94LihHbQoQDzkQFpeaTg=="], "@react-native/babel-preset": ["@react-native/babel-preset@0.83.2", "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.83.2.tgz", { "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-transform-arrow-functions": "^7.24.7", "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-for-of": "^7.24.7", "@babel/plugin-transform-function-name": "^7.25.1", "@babel/plugin-transform-literals": "^7.25.2", "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", "@babel/plugin-transform-numeric-separator": "^7.24.7", "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-react-display-name": "^7.24.7", "@babel/plugin-transform-react-jsx": "^7.25.2", "@babel/plugin-transform-react-jsx-self": "^7.24.7", "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/plugin-transform-shorthand-properties": "^7.24.7", "@babel/plugin-transform-spread": "^7.24.7", "@babel/plugin-transform-sticky-regex": "^7.24.7", "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", "@react-native/babel-plugin-codegen": "0.83.2", "babel-plugin-syntax-hermes-parser": "0.32.0", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" } }, "sha512-X/RAXDfe6W+om/Fw1i6htTxQXFhBJ2jgNOWx3WpI3KbjeIWbq7ib6vrpTeIAW2NUMg+K3mML1NzgD4dpZeqdjA=="], - "@react-native/codegen": ["@react-native/codegen@0.85.2", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/parser": "^7.29.0", "hermes-parser": "0.33.3", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "tinyglobby": "^0.2.15", "yargs": "^17.6.2" } }, "sha512-XCginmxh0//++EXVOEJHBVZxHla294FzLCFF6jXwAUjvXVhqyIKyxhABfz+r4OOmaiuWk4Rtd4arqdAzeHeprg=="], + "@react-native/codegen": ["@react-native/codegen@0.85.3", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/parser": "^7.29.0", "hermes-parser": "0.33.3", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "tinyglobby": "^0.2.15", "yargs": "^17.6.2" } }, "sha512-/JkS1lGLyzBWP1FbgDwaqEf7qShIC6pUC1M0a/YMAd/v4iqR24MRkQWe7jkYvcBQ2LpEhs5NGE9InhxSv21zCA=="], - "@react-native/community-cli-plugin": ["@react-native/community-cli-plugin@0.85.2", "", { "dependencies": { "@react-native/dev-middleware": "0.85.2", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.84.0", "metro-config": "^0.84.0", "metro-core": "^0.84.0", "semver": "^7.1.3" }, "peerDependencies": { "@react-native-community/cli": "*", "@react-native/metro-config": "0.85.2" }, "optionalPeers": ["@react-native-community/cli", "@react-native/metro-config"] }, "sha512-3KLgSg1kHvBpr93zMaQhvfYTgnCw7yZRED+3J4dMcYjfSjtD0Wf8SofU6uBmAw9JaVYvP43lpdwUpI4p0+ABsg=="], + "@react-native/community-cli-plugin": ["@react-native/community-cli-plugin@0.85.3", "", { "dependencies": { "@react-native/dev-middleware": "0.85.3", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.84.3", "metro-config": "^0.84.3", "metro-core": "^0.84.3", "semver": "^7.1.3" }, "peerDependencies": { "@react-native-community/cli": "*", "@react-native/metro-config": "0.85.3" }, "optionalPeers": ["@react-native-community/cli", "@react-native/metro-config"] }, "sha512-fs85dmbIqNmtzEixDb0g+q6R3Vt4H9eAt8/inIZdDKfjN76+sUJA2r1nxODQ76bU23MrIbz8sI7KFBPaWk/zQw=="], "@react-native/debugger-frontend": ["@react-native/debugger-frontend@0.83.2", "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.83.2.tgz", {}, "sha512-t4fYfa7xopbUF5S4+ihNEwgaq4wLZLKLY0Ms8z72lkMteVd3bOX2Foxa8E2wTfRvdhPOkSpOsTeNDmD8ON4DoQ=="], @@ -458,15 +458,15 @@ "@react-native/dev-middleware": ["@react-native/dev-middleware@0.83.2", "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.83.2.tgz", { "dependencies": { "@isaacs/ttlcache": "^1.4.1", "@react-native/debugger-frontend": "0.83.2", "@react-native/debugger-shell": "0.83.2", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", "debug": "^4.4.0", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "open": "^7.0.3", "serve-static": "^1.16.2", "ws": "^7.5.10" } }, "sha512-Zi4EVaAm28+icD19NN07Gh8Pqg/84QQu+jn4patfWKNkcToRFP5vPEbbp0eLOGWS+BVB1d1Fn5lvMrJsBbFcOg=="], - "@react-native/gradle-plugin": ["@react-native/gradle-plugin@0.85.2", "", {}, "sha512-YXBOLeAqFrv7XwUeBPTKZeOV1FIxn4AW7UAEitScf3ibC8bu8+6NpJu4HWgbNQHg7vDbbTZVbcOl8EwGxsSq2w=="], + "@react-native/gradle-plugin": ["@react-native/gradle-plugin@0.85.3", "", {}, "sha512-39dY2j50Q1pntejzwt3XL7vwXtrj8jcIfHq6E+gyu3jzYxZJVvMkMutQ39vSg6zinIQOX36oQDhidXUbCXzgoA=="], - "@react-native/jest-preset": ["@react-native/jest-preset@0.85.2", "", { "dependencies": { "@jest/create-cache-key-function": "^29.7.0", "@react-native/js-polyfills": "0.85.2", "babel-jest": "^29.7.0", "jest-environment-node": "^29.7.0", "regenerator-runtime": "^0.13.2" }, "peerDependencies": { "react": "^19.2.3" } }, "sha512-tCps+2P67PKbFMlqlLMmYuvQ3C7QFAWaMvax/SfBktZO4TydFVxwGgXoVC+db35uY8Bue6xrkcNOwrFjY8ewzw=="], + "@react-native/jest-preset": ["@react-native/jest-preset@0.85.3", "", { "dependencies": { "@jest/create-cache-key-function": "^29.7.0", "@react-native/js-polyfills": "0.85.3", "babel-jest": "^29.7.0", "jest-environment-node": "^29.7.0", "regenerator-runtime": "^0.13.2" }, "peerDependencies": { "react": "^19.2.3" } }, "sha512-ALPSrM0q2fU+5AXcOXzDKx7rxVKPMvygAZfsTWLdrGRVWIqf/HEfM0R8euQqIKUqmEuQ1TxMWN+px3h6gc4vow=="], - "@react-native/js-polyfills": ["@react-native/js-polyfills@0.85.2", "", {}, "sha512-esGEAmKVM40DV/yVmNljCKZTIeUo7qXqc+Hwffkv3TG+b3E24xyFovHrbP98gGxZr2ZsEyx+2sKLdXF5asY5nw=="], + "@react-native/js-polyfills": ["@react-native/js-polyfills@0.85.3", "", {}, "sha512-U2+aMshIXf1uFn77tpBb/xhHWB9vkVrMpt7kkucAugF8hJKYTDGB587X7WwelHduK2KBfhl4giSv0rzZGoef9A=="], - "@react-native/normalize-colors": ["@react-native/normalize-colors@0.85.2", "", {}, "sha512-svuOLtjbFGXDdHsriHXuND5FgHg7XlkOXCbH/8+X4t76YLH6qSTffSIQQrKLDL5mn4EFU+Oh/PNO0/FfpnTOTg=="], + "@react-native/normalize-colors": ["@react-native/normalize-colors@0.85.3", "", {}, "sha512-hj0PScZEhIbcOvQV5yMKX3ha4XEIOy/SVE1Rrpp0beW0dpNLOgSC7KDxGewmDnIHK9YdQUXGY9eMEfShUMIaZw=="], - "@react-native/virtualized-lists": ["@react-native/virtualized-lists@0.85.2", "", { "dependencies": { "invariant": "^2.2.4", "nullthrows": "^1.1.1" }, "peerDependencies": { "@types/react": "^19.2.0", "react": "*", "react-native": "0.85.2" }, "optionalPeers": ["@types/react"] }, "sha512-wmVKpAlcr+UB0L5SpbrV865EdleUP7I5+X+48e1aRsQK8q+wsTRBXeUwWVip/1l+HZwlZFeO8iOILJ16VRu0Cw=="], + "@react-native/virtualized-lists": ["@react-native/virtualized-lists@0.85.3", "", { "dependencies": { "invariant": "^2.2.4", "nullthrows": "^1.1.1" }, "peerDependencies": { "@types/react": "^19.2.0", "react": "*", "react-native": "0.85.3" }, "optionalPeers": ["@types/react"] }, "sha512-dsCjI//OIPEUJMyNHp4l7zNLVjCx7bcaRUceOCkU+IB17hkbtbGWvi7HjGFSzy7FJGmS/MOlcfpb72xXiy1Oig=="], "@react-navigation/bottom-tabs": ["@react-navigation/bottom-tabs@7.10.1", "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-7.10.1.tgz", { "dependencies": { "@react-navigation/elements": "^2.9.5", "color": "^4.2.3", "sf-symbols-typescript": "^2.1.0" }, "peerDependencies": { "@react-navigation/native": "^7.1.28", "react": ">= 18.2.0", "react-native": "*", "react-native-safe-area-context": ">= 4.0.0", "react-native-screens": ">= 4.0.0" } }, "sha512-MirOzKEe/rRwPSE9HMrS4niIo0LyUhewlvd01TpzQ1ipuXjH2wJbzAM9gS/r62zriB6HMHz2OY6oIRduwQJtTw=="], @@ -1496,9 +1496,9 @@ "metro-resolver": ["metro-resolver@0.83.3", "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.83.3.tgz", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ=="], - "metro-runtime": ["metro-runtime@0.84.2", "", { "dependencies": { "@babel/runtime": "^7.25.0", "flow-enums-runtime": "^0.0.6" } }, "sha512-NzzORY2+mmN3tLhsZ7N4GDOBERusalyM1o1k36euulUIEe8UkDhwzcsRexvxKaSkrGLiRQ9PYDLp9uxPkQ+A0Q=="], + "metro-runtime": ["metro-runtime@0.84.4", "", { "dependencies": { "@babel/runtime": "^7.25.0", "flow-enums-runtime": "^0.0.6" } }, "sha512-Jibypds4g7AhzdRKY+kDoj51s5EXMwgyp5ddtlreDAsWefMdOx+agWqgm0H2XSZ/ueanHHVM89fnf5OJnlxa8Q=="], - "metro-source-map": ["metro-source-map@0.84.2", "", { "dependencies": { "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-symbolicate": "0.84.2", "nullthrows": "^1.1.1", "ob1": "0.84.2", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "sha512-m6rRVBefzaAyn6dBk5GOabVchCQ3VIS1/MhCj61dJB5cqLOOx34BV3DRFwnDBkuPw2RR/LUoul0U1sixlS9VQg=="], + "metro-source-map": ["metro-source-map@0.84.4", "", { "dependencies": { "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-symbolicate": "0.84.4", "nullthrows": "^1.1.1", "ob1": "0.84.4", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "sha512-jbWkPxIesVuo1IWkvezmMJld6iu8nD62GsrZiV6jP37AOdbo4OBq1FJ+qkOg8sV05wAHB//jAbziuW0SlJfW4g=="], "metro-symbolicate": ["metro-symbolicate@0.83.3", "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.83.3.tgz", { "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-source-map": "0.83.3", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "bin": { "metro-symbolicate": "src/index.js" } }, "sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw=="], @@ -1564,7 +1564,7 @@ "nwsapi": ["nwsapi@2.2.22", "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.22.tgz", {}, "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ=="], - "ob1": ["ob1@0.84.2", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-JID0ti8tDRQZJdQ3l+UeVAsKP+dW5Ucmktes/J9FwqP5KarafoTMqWvw4LRKrMtA7yWT3r/+E2w5wapd89GToA=="], + "ob1": ["ob1@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-eJXMpz4aQHXF/YBB9ddqZDIS+ooO91hObo9FoW/xBkr54/zCwYYCDqT/O54vNo8kOkWs5Ou/y28NgdrV0edQNA=="], "object-assign": ["object-assign@4.1.1", "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], @@ -1646,7 +1646,7 @@ "prelude-ls": ["prelude-ls@1.2.1", "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], - "prettier": ["prettier@3.6.2", "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="], + "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="], "prettier-linter-helpers": ["prettier-linter-helpers@1.0.0", "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", { "dependencies": { "fast-diff": "^1.1.2" } }, "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w=="], @@ -1698,7 +1698,7 @@ "react-is": ["react-is@19.2.4", "", {}, "sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA=="], - "react-native": ["react-native@0.85.2", "", { "dependencies": { "@react-native/assets-registry": "0.85.2", "@react-native/codegen": "0.85.2", "@react-native/community-cli-plugin": "0.85.2", "@react-native/gradle-plugin": "0.85.2", "@react-native/js-polyfills": "0.85.2", "@react-native/normalize-colors": "0.85.2", "@react-native/virtualized-lists": "0.85.2", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "babel-plugin-syntax-hermes-parser": "0.33.3", "base64-js": "^1.5.1", "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", "hermes-compiler": "250829098.0.10", "invariant": "^2.2.4", "memoize-one": "^5.0.0", "metro-runtime": "^0.84.0", "metro-source-map": "^0.84.0", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", "react-devtools-core": "^6.1.5", "react-refresh": "^0.14.0", "regenerator-runtime": "^0.13.2", "scheduler": "0.27.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", "tinyglobby": "^0.2.15", "whatwg-fetch": "^3.0.0", "ws": "^7.5.10", "yargs": "^17.6.2" }, "peerDependencies": { "@react-native/jest-preset": "0.85.2", "@types/react": "^19.1.1", "react": "^19.2.3" }, "optionalPeers": ["@react-native/jest-preset", "@types/react"], "bin": { "react-native": "cli.js" } }, "sha512-GFWEPwLYirfj5X8gMtXOWtqX0cqUEURRHETZfFk37VCa4++izrKvGvv24anvuyulXV87NAhVkfNw93rLg3HByw=="], + "react-native": ["react-native@0.85.3", "", { "dependencies": { "@react-native/assets-registry": "0.85.3", "@react-native/codegen": "0.85.3", "@react-native/community-cli-plugin": "0.85.3", "@react-native/gradle-plugin": "0.85.3", "@react-native/js-polyfills": "0.85.3", "@react-native/normalize-colors": "0.85.3", "@react-native/virtualized-lists": "0.85.3", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "babel-plugin-syntax-hermes-parser": "0.33.3", "base64-js": "^1.5.1", "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", "hermes-compiler": "250829098.0.10", "invariant": "^2.2.4", "memoize-one": "^5.0.0", "metro-runtime": "^0.84.3", "metro-source-map": "^0.84.3", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", "react-devtools-core": "^6.1.5", "react-refresh": "^0.14.0", "regenerator-runtime": "^0.13.2", "scheduler": "0.27.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", "tinyglobby": "^0.2.15", "whatwg-fetch": "^3.0.0", "ws": "^7.5.10", "yargs": "^17.6.2" }, "peerDependencies": { "@react-native/jest-preset": "0.85.3", "@types/react": "^19.1.1", "react": "^19.2.3" }, "optionalPeers": ["@react-native/jest-preset", "@types/react"], "bin": { "react-native": "cli.js" } }, "sha512-HN/fGC+3nZVcDNcw7gfbM/DuqZAvI9Mz+/SxuhODaua4JY0BPzhfTzWXRyTR4mRgMHmShTPpH2PYMTxvZrsdZA=="], "react-native-is-edge-to-edge": ["react-native-is-edge-to-edge@1.2.1", "https://registry.yarnpkg.com/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.2.1.tgz", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q=="], @@ -2202,13 +2202,13 @@ "@react-native/codegen/hermes-parser": ["hermes-parser@0.33.3", "", { "dependencies": { "hermes-estree": "0.33.3" } }, "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA=="], - "@react-native/community-cli-plugin/@react-native/dev-middleware": ["@react-native/dev-middleware@0.85.2", "", { "dependencies": { "@isaacs/ttlcache": "^1.4.1", "@react-native/debugger-frontend": "0.85.2", "@react-native/debugger-shell": "0.85.2", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.3.0", "connect": "^3.6.5", "debug": "^4.4.0", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "open": "^7.0.3", "serve-static": "^1.16.2", "ws": "^7.5.10" } }, "sha512-3J+NaDUg+QEfDeLAUzgaWhpaxEg78g+KwbydlDCewh2G6WnHpsty8XooruxNHzyAsqVWywZMrzmbn78Ctc1O9Q=="], + "@react-native/community-cli-plugin/@react-native/dev-middleware": ["@react-native/dev-middleware@0.85.3", "", { "dependencies": { "@isaacs/ttlcache": "^1.4.1", "@react-native/debugger-frontend": "0.85.3", "@react-native/debugger-shell": "0.85.3", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.3.0", "connect": "^3.6.5", "debug": "^4.4.0", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "open": "^7.0.3", "serve-static": "^1.16.2", "ws": "^7.5.10" } }, "sha512-JYzBiT4A8w+KQt+dOD5v+ti+tDrGoPnsSTuApq3Ls4RB5sfWbDlYMyz3dbc8qBIHz9tv0sQ5+eOu6Xwqzr5AQA=="], - "@react-native/community-cli-plugin/metro": ["metro@0.84.2", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/core": "^7.25.2", "@babel/generator": "^7.29.1", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "accepts": "^2.0.0", "chalk": "^4.0.0", "ci-info": "^2.0.0", "connect": "^3.6.5", "debug": "^4.4.0", "error-stack-parser": "^2.0.6", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", "hermes-parser": "0.33.3", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", "metro-babel-transformer": "0.84.2", "metro-cache": "0.84.2", "metro-cache-key": "0.84.2", "metro-config": "0.84.2", "metro-core": "0.84.2", "metro-file-map": "0.84.2", "metro-resolver": "0.84.2", "metro-runtime": "0.84.2", "metro-source-map": "0.84.2", "metro-symbolicate": "0.84.2", "metro-transform-plugins": "0.84.2", "metro-transform-worker": "0.84.2", "mime-types": "^3.0.1", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", "source-map": "^0.5.6", "throat": "^5.0.0", "ws": "^7.5.10", "yargs": "^17.6.2" }, "bin": { "metro": "src/cli.js" } }, "sha512-Qw7sl+e34cf/0LYEvDfVPiWvXmkvpuVgFqjzhPCc9Mw30NsvRFYZEH6I9zEHlpjugIveV+Jzdqt3YSPMU+Hx/w=="], + "@react-native/community-cli-plugin/metro": ["metro@0.84.4", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/core": "^7.25.2", "@babel/generator": "^7.29.1", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "accepts": "^2.0.0", "ci-info": "^2.0.0", "connect": "^3.6.5", "debug": "^4.4.0", "error-stack-parser": "^2.0.6", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", "hermes-parser": "0.35.0", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", "metro-babel-transformer": "0.84.4", "metro-cache": "0.84.4", "metro-cache-key": "0.84.4", "metro-config": "0.84.4", "metro-core": "0.84.4", "metro-file-map": "0.84.4", "metro-resolver": "0.84.4", "metro-runtime": "0.84.4", "metro-source-map": "0.84.4", "metro-symbolicate": "0.84.4", "metro-transform-plugins": "0.84.4", "metro-transform-worker": "0.84.4", "mime-types": "^3.0.1", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", "source-map": "^0.5.6", "throat": "^5.0.0", "ws": "^7.5.10", "yargs": "^17.6.2" }, "bin": { "metro": "src/cli.js" } }, "sha512-8ETTubqfD6ornDy2zYDvRcKnVDOXdFJsjetYDBsY4oAsb6NJkiwFR+FaMESyGppFmQUyBQA4H4sFGxzcQSGtFA=="], - "@react-native/community-cli-plugin/metro-config": ["metro-config@0.84.2", "", { "dependencies": { "connect": "^3.6.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", "metro": "0.84.2", "metro-cache": "0.84.2", "metro-core": "0.84.2", "metro-runtime": "0.84.2", "yaml": "^2.6.1" } }, "sha512-ze7IgJwLJoXoTxeXW86xqqKoxXjE0gZg5w8kW2mawaWLSfuvI0KgVaaERXgoVuWl+DQU2q22tIeAEdsCyUZvBQ=="], + "@react-native/community-cli-plugin/metro-config": ["metro-config@0.84.4", "", { "dependencies": { "connect": "^3.6.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", "metro": "0.84.4", "metro-cache": "0.84.4", "metro-core": "0.84.4", "metro-runtime": "0.84.4", "yaml": "^2.6.1" } }, "sha512-PMotGDjXcXLWo2TMRH+VR99phFNgYTwqh4OoieIKK3yTJa1Jmkl+fZJxDO0jfBvNF+WESHciHvpNuBtXaF3B0Q=="], - "@react-native/community-cli-plugin/metro-core": ["metro-core@0.84.2", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", "metro-resolver": "0.84.2" } }, "sha512-s9Ko372nzfbu5Y2uhWDlB/g3E6mba3Es95QzF/8IwNM4ynZgqM9rfnU0PR54onGvDGDfj44jbooSxaA1D09rDA=="], + "@react-native/community-cli-plugin/metro-core": ["metro-core@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", "metro-resolver": "0.84.4" } }, "sha512-HONpWC5LGXZn3ffkd4Hu6AIrfE7j4Z0g0wMo/goV24WOB3lhuFZ40KgvaDiSw8iyQHloMYay5N/wPX+z8oN/PQ=="], "@react-native/community-cli-plugin/semver": ["semver@7.7.3", "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], @@ -2400,7 +2400,7 @@ "metro-source-map/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], - "metro-source-map/metro-symbolicate": ["metro-symbolicate@0.84.2", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-source-map": "0.84.2", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "bin": { "metro-symbolicate": "src/index.js" } }, "sha512-o0RY49012YcGE1E4GsZtgzFCBPeoxlASzIsD5CNOTmAoKDIroHfTFFiYCGPLCGwRwQjMaCChhoH0TZCjAyyCKA=="], + "metro-source-map/metro-symbolicate": ["metro-symbolicate@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-source-map": "0.84.4", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "bin": { "metro-symbolicate": "src/index.js" } }, "sha512-OnfpacxUqGPZQ27t8qK9mFa7uqHIlVWeqRqkCbvMvreEBiamEeOn8krKtcwgP5M4cYDPwuSmCTopHMVthqG4zA=="], "metro-symbolicate/metro-source-map": ["metro-source-map@0.83.3", "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.83.3.tgz", { "dependencies": { "@babel/traverse": "^7.25.3", "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-symbolicate": "0.83.3", "nullthrows": "^1.1.1", "ob1": "0.83.3", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg=="], @@ -2540,9 +2540,9 @@ "@react-native/codegen/hermes-parser/hermes-estree": ["hermes-estree@0.33.3", "", {}, "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg=="], - "@react-native/community-cli-plugin/@react-native/dev-middleware/@react-native/debugger-frontend": ["@react-native/debugger-frontend@0.85.2", "", {}, "sha512-j+0b9H5f5hGTLQxHIhJU/b/W6ijuxJF+ZTLHB0se2kzUBNxFKd7DkIc6753qk3CJdiv55vxG3XDgmlpbHxOpmA=="], + "@react-native/community-cli-plugin/@react-native/dev-middleware/@react-native/debugger-frontend": ["@react-native/debugger-frontend@0.85.3", "", {}, "sha512-uAu7rM5o/Np1zgp6fi5zM1sP1aB8DcS7DdOLcj/TkSutOAjkMqqd2lWt1/+3S7qXexRHVK5XcP+o3VXo4L/V0A=="], - "@react-native/community-cli-plugin/@react-native/dev-middleware/@react-native/debugger-shell": ["@react-native/debugger-shell@0.85.2", "", { "dependencies": { "cross-spawn": "^7.0.6", "debug": "^4.4.0", "fb-dotslash": "0.5.8" } }, "sha512-r5BkhqPMfg3LmaZS5zadHmBNVH5h4bhSpv4BEPGfK4gat9HABAMzUzybi+2wpgU3SoHxnyKGdExEJvoqVcjeRg=="], + "@react-native/community-cli-plugin/@react-native/dev-middleware/@react-native/debugger-shell": ["@react-native/debugger-shell@0.85.3", "", { "dependencies": { "cross-spawn": "^7.0.6", "debug": "^4.4.0", "fb-dotslash": "0.5.8" } }, "sha512-/jRAaT9boiCttIcEwS02WPwYkUihqsjSaK/TMtHz05vT6uMgac9PaQt5kzBQLIABv5aEIa5gtrMmKVz49MjkjQ=="], "@react-native/community-cli-plugin/@react-native/dev-middleware/chromium-edge-launcher": ["chromium-edge-launcher@0.3.0", "", { "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", "is-wsl": "^2.2.0", "lighthouse-logger": "^1.0.0", "mkdirp": "^1.0.4" } }, "sha512-p03azHlGjtyRvFEee3cyvtsRYdniSkwjkzmM/KmVnqT5d7QkkwpJBhis/zCLMYdQMVJ5tt140TBNqqrZPaWeFA=="], @@ -2560,29 +2560,29 @@ "@react-native/community-cli-plugin/metro/ci-info": ["ci-info@2.0.0", "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz", {}, "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="], - "@react-native/community-cli-plugin/metro/hermes-parser": ["hermes-parser@0.33.3", "", { "dependencies": { "hermes-estree": "0.33.3" } }, "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA=="], + "@react-native/community-cli-plugin/metro/hermes-parser": ["hermes-parser@0.35.0", "", { "dependencies": { "hermes-estree": "0.35.0" } }, "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA=="], - "@react-native/community-cli-plugin/metro/metro-babel-transformer": ["metro-babel-transformer@0.84.2", "", { "dependencies": { "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", "hermes-parser": "0.33.3", "nullthrows": "^1.1.1" } }, "sha512-UZqjh1VMRDm0WasifM0aN+JreCn3CW0BaPoZgDXb0xOMFSF9dKZJsKhcrpzkjL1+qwmHFYjlhGiQ+tvXdSx+OQ=="], + "@react-native/community-cli-plugin/metro/metro-babel-transformer": ["metro-babel-transformer@0.84.4", "", { "dependencies": { "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", "hermes-parser": "0.35.0", "metro-cache-key": "0.84.4", "nullthrows": "^1.1.1" } }, "sha512-rvCfz8snl9h20VcvpOHxZuHP1SlAkv4HXbzw7nyyVwu6Eqo5PRerbakQ9XmUCOsRy70spJ37O+G1TK8oMzo48g=="], - "@react-native/community-cli-plugin/metro/metro-cache": ["metro-cache@0.84.2", "", { "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", "metro-core": "0.84.2" } }, "sha512-jPX2fwOc/MmP2KRScSg2jFtVN9BTd+QN6j/3qZ+HIbEAsePLONozbKR2kCIBGvVeBTe7js48WXziI4+AdfwfFQ=="], + "@react-native/community-cli-plugin/metro/metro-cache": ["metro-cache@0.84.4", "", { "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", "metro-core": "0.84.4" } }, "sha512-gpcFQdSLUwUCk71saKoE64jLFbx2nwTfVCcPSULMNT8QYq0p1eZZE29Jvd0HtT/UlhC3ZOutLxJME5xqD2JUZg=="], - "@react-native/community-cli-plugin/metro/metro-cache-key": ["metro-cache-key@0.84.2", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-+yJxLYu5nhKp7jZD6wtx4dMoSqLzK6MeYVkjMaUgjuh2Lu8DwGrxRnbmIVnn5Z9AQOs/K4eOWmuD7N2p64UCMw=="], + "@react-native/community-cli-plugin/metro/metro-cache-key": ["metro-cache-key@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-wVO79aGrkYImpnaVS4+d5RrRBRPX31QtvKB3wKGBuiNSznduZTQHzsrJZRroFJSwnygrzdsGUtDQPuqqFjFdvw=="], - "@react-native/community-cli-plugin/metro/metro-file-map": ["metro-file-map@0.84.2", "", { "dependencies": { "debug": "^4.4.0", "fb-watchman": "^2.0.0", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "nullthrows": "^1.1.1", "walker": "^1.0.7" } }, "sha512-ZgX1lXO9YJCgTY6OSuwvRcHdhXjAFd1DdYC4g2B+d7yAtLUW1/OqwTLpW6ixl1zqZDDQSDSYZXDsN7DL2IumBw=="], + "@react-native/community-cli-plugin/metro/metro-file-map": ["metro-file-map@0.84.4", "", { "dependencies": { "debug": "^4.4.0", "fb-watchman": "^2.0.0", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "nullthrows": "^1.1.1", "walker": "^1.0.7" } }, "sha512-KSVDi/u60hKPx++NLu3MTIvyjzNoJnFAF8PQFxaj1jiSka/wjw+Ua6sNuJ0TDHQv+7AAoFQxeMgaRAe8Yic5wQ=="], - "@react-native/community-cli-plugin/metro/metro-resolver": ["metro-resolver@0.84.2", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-2i6OQJIv18+olvLnmcM20uhi1T729+25izZozqOugSaV0YGzMV/EXkYFqxkXC9iNsantGcI/w9PgaI89wLK6JQ=="], + "@react-native/community-cli-plugin/metro/metro-resolver": ["metro-resolver@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-1qLgbxQ5ZGhhutuPot1Yp348ofDsATL2WkrHF65TobqTT9K3P9qJXw38bomk7ncp5B7OYMfWwtyBZo1lCV792A=="], - "@react-native/community-cli-plugin/metro/metro-symbolicate": ["metro-symbolicate@0.84.2", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-source-map": "0.84.2", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "bin": { "metro-symbolicate": "src/index.js" } }, "sha512-o0RY49012YcGE1E4GsZtgzFCBPeoxlASzIsD5CNOTmAoKDIroHfTFFiYCGPLCGwRwQjMaCChhoH0TZCjAyyCKA=="], + "@react-native/community-cli-plugin/metro/metro-symbolicate": ["metro-symbolicate@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-source-map": "0.84.4", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "bin": { "metro-symbolicate": "src/index.js" } }, "sha512-OnfpacxUqGPZQ27t8qK9mFa7uqHIlVWeqRqkCbvMvreEBiamEeOn8krKtcwgP5M4cYDPwuSmCTopHMVthqG4zA=="], - "@react-native/community-cli-plugin/metro/metro-transform-plugins": ["metro-transform-plugins@0.84.2", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/generator": "^7.29.1", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "flow-enums-runtime": "^0.0.6", "nullthrows": "^1.1.1" } }, "sha512-/821YLQv4PgD1NOruzPkr0r3HDALXqwCEECewyEQZ5hmSb8jzf1VdEpf3F8fx8zI4/5dHY/rARDVVuHCEb/Xrg=="], + "@react-native/community-cli-plugin/metro/metro-transform-plugins": ["metro-transform-plugins@0.84.4", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/generator": "^7.29.1", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "flow-enums-runtime": "^0.0.6", "nullthrows": "^1.1.1" } }, "sha512-kehr6HbAecqD0/a3xLXobELdPaAmRAl8bel0qagPF4vhZtux93nS8S4eq2kgKt6J2GnQpVjSoW1PXdst04mwow=="], - "@react-native/community-cli-plugin/metro/metro-transform-worker": ["metro-transform-worker@0.84.2", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/generator": "^7.29.1", "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", "metro": "0.84.2", "metro-babel-transformer": "0.84.2", "metro-cache": "0.84.2", "metro-cache-key": "0.84.2", "metro-minify-terser": "0.84.2", "metro-source-map": "0.84.2", "metro-transform-plugins": "0.84.2", "nullthrows": "^1.1.1" } }, "sha512-aR09svo3WC7OTYk5YB0VY0iSXOGrPdfmQWIxG8ADD2cKf/B95VR+y4GgVUbqB31buNvgtU+iCx9186i/YaNGlw=="], + "@react-native/community-cli-plugin/metro/metro-transform-worker": ["metro-transform-worker@0.84.4", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/generator": "^7.29.1", "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", "metro": "0.84.4", "metro-babel-transformer": "0.84.4", "metro-cache": "0.84.4", "metro-cache-key": "0.84.4", "metro-minify-terser": "0.84.4", "metro-source-map": "0.84.4", "metro-transform-plugins": "0.84.4", "nullthrows": "^1.1.1" } }, "sha512-W1IYMvvXTu4MxYr7d9h7CeG2vpIr3bmLLIavkPY4O1ilzDrvS8z/NEe6y+pC44Ff7raMXQgYSfdqDUwN/i39gg=="], "@react-native/community-cli-plugin/metro/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - "@react-native/community-cli-plugin/metro-config/metro-cache": ["metro-cache@0.84.2", "", { "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", "metro-core": "0.84.2" } }, "sha512-jPX2fwOc/MmP2KRScSg2jFtVN9BTd+QN6j/3qZ+HIbEAsePLONozbKR2kCIBGvVeBTe7js48WXziI4+AdfwfFQ=="], + "@react-native/community-cli-plugin/metro-config/metro-cache": ["metro-cache@0.84.4", "", { "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", "metro-core": "0.84.4" } }, "sha512-gpcFQdSLUwUCk71saKoE64jLFbx2nwTfVCcPSULMNT8QYq0p1eZZE29Jvd0HtT/UlhC3ZOutLxJME5xqD2JUZg=="], - "@react-native/community-cli-plugin/metro-core/metro-resolver": ["metro-resolver@0.84.2", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-2i6OQJIv18+olvLnmcM20uhi1T729+25izZozqOugSaV0YGzMV/EXkYFqxkXC9iNsantGcI/w9PgaI89wLK6JQ=="], + "@react-native/community-cli-plugin/metro-core/metro-resolver": ["metro-resolver@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-1qLgbxQ5ZGhhutuPot1Yp348ofDsATL2WkrHF65TobqTT9K3P9qJXw38bomk7ncp5B7OYMfWwtyBZo1lCV792A=="], "@types/jest/pretty-format/react-is": ["react-is@18.3.1", "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], @@ -2712,11 +2712,11 @@ "@react-native/community-cli-plugin/metro/accepts/negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "@react-native/community-cli-plugin/metro/hermes-parser/hermes-estree": ["hermes-estree@0.33.3", "", {}, "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg=="], + "@react-native/community-cli-plugin/metro/hermes-parser/hermes-estree": ["hermes-estree@0.35.0", "", {}, "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg=="], "@react-native/community-cli-plugin/metro/metro-cache/https-proxy-agent": ["https-proxy-agent@7.0.6", "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - "@react-native/community-cli-plugin/metro/metro-transform-worker/metro-minify-terser": ["metro-minify-terser@0.84.2", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "terser": "^5.15.0" } }, "sha512-1TNGPN4oUose+XSHsdDUvcvPHQxKP5lZNbiS6UteTXX+6zFNu+IzxqSokyrDoj9BSjVbdClrB3okuI+Fpls3LA=="], + "@react-native/community-cli-plugin/metro/metro-transform-worker/metro-minify-terser": ["metro-minify-terser@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "terser": "^5.15.0" } }, "sha512-5qpbaVOMC7CPitIpuewzVeGw7E+C3ykbv2mqTjQLl85Z3annSVGlSCTcsZjqXZzjupfK4Ztj3dDc4kc44NZwtQ=="], "@react-native/community-cli-plugin/metro/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], diff --git a/packages/expo-sqlite/dev-plugin-webui/package.json b/packages/expo-sqlite/dev-plugin-webui/package.json index 117923925c994b..40d46bafe64dc3 100644 --- a/packages/expo-sqlite/dev-plugin-webui/package.json +++ b/packages/expo-sqlite/dev-plugin-webui/package.json @@ -50,7 +50,7 @@ "expo-atlas": "^0.4.0", "jest": "~29.7.0", "jest-expo": "~55.0.9", - "prettier": "^3.6.2", + "prettier": "^3.8.3", "react-test-renderer": "19.2.3", "typescript": "~5.9.2" }, diff --git a/packages/expo-sqlite/dev-plugin-webui/src/components/ui/badge.tsx b/packages/expo-sqlite/dev-plugin-webui/src/components/ui/badge.tsx index 580691c221fc69..a167a4063d47b3 100644 --- a/packages/expo-sqlite/dev-plugin-webui/src/components/ui/badge.tsx +++ b/packages/expo-sqlite/dev-plugin-webui/src/components/ui/badge.tsx @@ -23,8 +23,7 @@ const badgeVariants = cva( ); export interface BadgeProps - extends React.HTMLAttributes, - VariantProps {} + extends React.HTMLAttributes, VariantProps {} function Badge({ className, variant, ...props }: BadgeProps) { return
; diff --git a/packages/expo-sqlite/dev-plugin-webui/src/components/ui/button.tsx b/packages/expo-sqlite/dev-plugin-webui/src/components/ui/button.tsx index 96cf7f8a22c1f7..64276881e10b4e 100644 --- a/packages/expo-sqlite/dev-plugin-webui/src/components/ui/button.tsx +++ b/packages/expo-sqlite/dev-plugin-webui/src/components/ui/button.tsx @@ -32,8 +32,7 @@ const buttonVariants = cva( ); export interface ButtonProps - extends React.ButtonHTMLAttributes, - VariantProps { + extends React.ButtonHTMLAttributes, VariantProps { asChild?: boolean; } diff --git a/packages/expo-sqlite/dev-plugin-webui/src/hooks/__tests__/useSQLiteDatabase.test.ts b/packages/expo-sqlite/dev-plugin-webui/src/hooks/__tests__/useSQLiteDatabase.test.ts index b21113b9e7fa30..fd1703787c1e85 100644 --- a/packages/expo-sqlite/dev-plugin-webui/src/hooks/__tests__/useSQLiteDatabase.test.ts +++ b/packages/expo-sqlite/dev-plugin-webui/src/hooks/__tests__/useSQLiteDatabase.test.ts @@ -308,9 +308,12 @@ describe('useSQLiteDatabase - SQL Query Building', () => { // Test updateRow await act(async () => { - const changes = await result.current.updateRow('users', { name: 'Bob', age: 31 }, 'id = ?', [ - 5, - ]); + const changes = await result.current.updateRow( + 'users', + { name: 'Bob', age: 31 }, + 'id = ?', + [5] + ); expect(changes).toBe(1); }); diff --git a/packages/expo-type-information/package.json b/packages/expo-type-information/package.json index 8781e6162301c6..3f44e12b2691ac 100644 --- a/packages/expo-type-information/package.json +++ b/packages/expo-type-information/package.json @@ -32,7 +32,7 @@ "dependencies": { "chalk": "^4.1.0", "commander": "^12.1.0", - "prettier": "^3.0.3", + "prettier": "^3.8.3", "yaml": "^2.3.2", "typescript": "~6.0.3" }, diff --git a/packages/expo-ui/build/swift-ui/TabView/index.d.ts b/packages/expo-ui/build/swift-ui/TabView/index.d.ts index 6048e07eeb04c5..ebde5d88c5db49 100644 --- a/packages/expo-ui/build/swift-ui/TabView/index.d.ts +++ b/packages/expo-ui/build/swift-ui/TabView/index.d.ts @@ -1,5 +1,5 @@ -import { type CommonViewModifierProps } from '../types'; import { Tab } from './Tab'; +import { type CommonViewModifierProps } from '../types'; export type TabViewProps = { /** * The selected tab (controlled mode). Pair with `onSelectionChange`. diff --git a/packages/expo-ui/build/swift-ui/TabView/index.d.ts.map b/packages/expo-ui/build/swift-ui/TabView/index.d.ts.map index 0267ee51b114b7..c841b3ce2ca62d 100644 --- a/packages/expo-ui/build/swift-ui/TabView/index.d.ts.map +++ b/packages/expo-ui/build/swift-ui/TabView/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/swift-ui/TabView/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;CACrD,GAAG,uBAAuB,CAAC;AAU5B,iBAAS,OAAO,CAAC,KAAK,EAAE,YAAY,2CAcnC;AAED,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC;;;;;;;;;;;;;;GAcG;AACH,QAAA,MAAM,QAAQ;;CAAkC,CAAC;AACjD,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/swift-ui/TabView/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;CACrD,GAAG,uBAAuB,CAAC;AAU5B,iBAAS,OAAO,CAAC,KAAK,EAAE,YAAY,2CAcnC;AAED,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC;;;;;;;;;;;;;;GAcG;AACH,QAAA,MAAM,QAAQ;;CAAkC,CAAC;AACjD,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,CAAC"} \ No newline at end of file diff --git a/packages/expo-ui/build/universal/Column/index.android.d.ts.map b/packages/expo-ui/build/universal/Column/index.android.d.ts.map index 33e5ada39935ce..1fccf0bda66416 100644 --- a/packages/expo-ui/build/universal/Column/index.android.d.ts.map +++ b/packages/expo-ui/build/universal/Column/index.android.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.android.d.ts","sourceRoot":"","sources":["../../../src/universal/Column/index.android.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAS3C,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,SAAmB,EACnB,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EAAE,cAAc,GAC1B,EAAE,WAAW,kDAmBb;AAED,cAAc,SAAS,CAAC"} \ No newline at end of file +{"version":3,"file":"index.android.d.ts","sourceRoot":"","sources":["../../../src/universal/Column/index.android.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQ3C,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,SAAmB,EACnB,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EAAE,cAAc,GAC1B,EAAE,WAAW,kDAmBb;AAED,cAAc,SAAS,CAAC"} \ No newline at end of file diff --git a/packages/expo-ui/build/universal/Row/index.android.d.ts.map b/packages/expo-ui/build/universal/Row/index.android.d.ts.map index 2826b4eeb9ef40..2f0c94aded774f 100644 --- a/packages/expo-ui/build/universal/Row/index.android.d.ts.map +++ b/packages/expo-ui/build/universal/Row/index.android.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.android.d.ts","sourceRoot":"","sources":["../../../src/universal/Row/index.android.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASxC,wBAAgB,GAAG,CAAC,EAClB,QAAQ,EACR,SAAmB,EACnB,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EAAE,cAAc,GAC1B,EAAE,QAAQ,kDAmBV;AAED,cAAc,SAAS,CAAC"} \ No newline at end of file +{"version":3,"file":"index.android.d.ts","sourceRoot":"","sources":["../../../src/universal/Row/index.android.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQxC,wBAAgB,GAAG,CAAC,EAClB,QAAQ,EACR,SAAmB,EACnB,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EAAE,cAAc,GAC1B,EAAE,QAAQ,kDAmBV;AAED,cAAc,SAAS,CAAC"} \ No newline at end of file diff --git a/packages/expo-ui/build/universal/TextInput/types.d.ts b/packages/expo-ui/build/universal/TextInput/types.d.ts index 5ca4d34b9249d2..bc9e9fb182eba9 100644 --- a/packages/expo-ui/build/universal/TextInput/types.d.ts +++ b/packages/expo-ui/build/universal/TextInput/types.d.ts @@ -2,9 +2,9 @@ import type { Ref } from 'react'; import type { ColorValue, KeyboardTypeOptions, ReturnKeyTypeOptions } from 'react-native'; import type { ModifierConfig } from '../../types'; import type { ObservableState } from '../State'; +import type { AutoComplete, EnterKeyHint, InputMode } from './utils'; import type { UniversalTextStyle } from '../Text/types'; import type { UniversalStyle } from '../types'; -import type { AutoComplete, EnterKeyHint, InputMode } from './utils'; /** * Imperative methods exposed via the `TextInput` ref. */ diff --git a/packages/expo-ui/build/universal/TextInput/types.d.ts.map b/packages/expo-ui/build/universal/TextInput/types.d.ts.map index 1eaad5bf175f27..153d43289635c7 100644 --- a/packages/expo-ui/build/universal/TextInput/types.d.ts.map +++ b/packages/expo-ui/build/universal/TextInput/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/universal/TextInput/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/universal/TextInput/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/expo-ui/src/swift-ui/TabView/index.tsx b/packages/expo-ui/src/swift-ui/TabView/index.tsx index 42f01f7695fc5e..7fe40c598504e9 100644 --- a/packages/expo-ui/src/swift-ui/TabView/index.tsx +++ b/packages/expo-ui/src/swift-ui/TabView/index.tsx @@ -1,9 +1,9 @@ import { requireNativeView } from 'expo'; +import { Tab } from './Tab'; import { type ViewEvent } from '../../types'; import { createViewModifierEventListener } from '../modifiers/utils'; import { type CommonViewModifierProps } from '../types'; -import { Tab } from './Tab'; export type TabViewProps = { /** diff --git a/packages/expo-ui/src/universal/Column/index.android.tsx b/packages/expo-ui/src/universal/Column/index.android.tsx index 2a704fcf28e08e..4133a8fee48b77 100644 --- a/packages/expo-ui/src/universal/Column/index.android.tsx +++ b/packages/expo-ui/src/universal/Column/index.android.tsx @@ -1,9 +1,9 @@ import { Column as ComposeColumn } from '@expo/ui/jetpack-compose'; +import { useUniversalLifecycle } from '../hooks'; import { transformToModifiers } from '../transformStyle'; import type { UniversalAlignment } from '../types'; import type { ColumnProps } from './types'; -import { useUniversalLifecycle } from '../hooks'; const alignmentMap: Record = { start: 'start', diff --git a/packages/expo-ui/src/universal/Row/index.android.tsx b/packages/expo-ui/src/universal/Row/index.android.tsx index 38d0425ea74a6f..48370850f98a1d 100644 --- a/packages/expo-ui/src/universal/Row/index.android.tsx +++ b/packages/expo-ui/src/universal/Row/index.android.tsx @@ -1,9 +1,9 @@ import { Row as ComposeRow } from '@expo/ui/jetpack-compose'; +import { useUniversalLifecycle } from '../hooks'; import { transformToModifiers } from '../transformStyle'; import type { UniversalAlignment } from '../types'; import type { RowProps } from './types'; -import { useUniversalLifecycle } from '../hooks'; const alignmentMap: Record = { start: 'top', diff --git a/packages/expo-ui/src/universal/TextInput/types.ts b/packages/expo-ui/src/universal/TextInput/types.ts index 6dd478d82a02ca..86b65af278663c 100644 --- a/packages/expo-ui/src/universal/TextInput/types.ts +++ b/packages/expo-ui/src/universal/TextInput/types.ts @@ -3,9 +3,9 @@ import type { ColorValue, KeyboardTypeOptions, ReturnKeyTypeOptions } from 'reac import type { ModifierConfig } from '../../types'; import type { ObservableState } from '../State'; +import type { AutoComplete, EnterKeyHint, InputMode } from './utils'; import type { UniversalTextStyle } from '../Text/types'; import type { UniversalStyle } from '../types'; -import type { AutoComplete, EnterKeyHint, InputMode } from './utils'; /** * Imperative methods exposed via the `TextInput` ref. diff --git a/packages/expo-updates/cli/src/resolveRuntimeVersion.ts b/packages/expo-updates/cli/src/resolveRuntimeVersion.ts index bf7d771e856480..4e94ff124ced08 100644 --- a/packages/expo-updates/cli/src/resolveRuntimeVersion.ts +++ b/packages/expo-updates/cli/src/resolveRuntimeVersion.ts @@ -40,9 +40,8 @@ Resolve expo-updates runtime version ); } - const { resolveRuntimeVersionAsync } = await import( - '../../utils/build/resolveRuntimeVersionAsync.js' - ); + const { resolveRuntimeVersionAsync } = + await import('../../utils/build/resolveRuntimeVersionAsync.js'); const platform = requireArg(args, '--platform'); if (!['ios', 'android'].includes(platform)) { diff --git a/packages/jest-expo/jest-preset.js b/packages/jest-expo/jest-preset.js index ab90a7abd24f85..f731c5ed81dc9c 100644 --- a/packages/jest-expo/jest-preset.js +++ b/packages/jest-expo/jest-preset.js @@ -99,9 +99,8 @@ const defaultExpoMetroAssetExts = [ ]; const assetNamePattern = `^.+\\.(${defaultExpoMetroAssetExts.join('|')})$`; -jestPreset.transform[assetNamePattern] = require.resolve( - 'jest-expo/src/preset/assetFileTransformer.js' -); +jestPreset.transform[assetNamePattern] = + require.resolve('jest-expo/src/preset/assetFileTransformer.js'); // transformIgnorePatterns if (!Array.isArray(jestPreset.transformIgnorePatterns)) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 669b59a498996c..e65e1de7697f4e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,8 +55,8 @@ importers: specifier: ^250231.0.0 version: 250231.0.0 prettier: - specifier: ~3.5.3 - version: 3.5.3 + specifier: ~3.8.3 + version: 3.8.3 devDependencies: '@types/jest': specifier: ^29.5.12 @@ -2330,7 +2330,7 @@ importers: version: 5.3.2 minimatch: specifier: ^10.2.2 - version: 10.2.4 + version: 10.2.5 resolve-from: specifier: ^5.0.0 version: 5.0.0 @@ -3340,13 +3340,13 @@ importers: version: 9.39.4(jiti@1.21.7) eslint-plugin-prettier: specifier: ^5.2.1 - version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7))(prettier@3.5.3) + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7))(prettier@3.8.3) eslint8: specifier: npm:eslint@^8.57.1 version: eslint@8.57.1 prettier: - specifier: ^3.4.2 - version: 3.5.3 + specifier: ^3.8.3 + version: 3.8.3 react: specifier: 19.2.3 version: 19.2.3 @@ -3376,7 +3376,7 @@ importers: version: 11.1.0(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-prettier: specifier: ^5.2.6 - version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7))(prettier@3.5.3) + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7))(prettier@3.8.3) eslint-plugin-react: specifier: ^7.37.5 version: 7.37.5(eslint@9.39.4(jiti@1.21.7)) @@ -3400,8 +3400,8 @@ importers: specifier: ^29.7.0 version: 29.7.0(@types/node@22.19.15)(ts-node@10.9.2(@swc/core@1.15.18)(@types/node@22.19.15)(typescript@6.0.3)) prettier: - specifier: ^3.5.3 - version: 3.5.3 + specifier: ^3.8.3 + version: 3.8.3 react: specifier: 19.2.3 version: 19.2.3 @@ -4379,7 +4379,7 @@ importers: version: 0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3) react-native-reanimated: specifier: '*' - version: 4.3.0(patch_hash=1e34e4238541638db96b94d5a2e974e73f3b801788a3d8f5c3f4b237a0559138)(react-native-worklets@0.8.3(patch_hash=3f49a21b44ba558989a3366eeff9c92ee331e18b736dbe89c5962ecc6f2802f1)(@babel/core@7.29.0)(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 4.3.1(patch_hash=1e34e4238541638db96b94d5a2e974e73f3b801788a3d8f5c3f4b237a0559138)(react-native-worklets@0.8.3(patch_hash=3f49a21b44ba558989a3366eeff9c92ee331e18b736dbe89c5962ecc6f2802f1)(@babel/core@7.29.0)(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-web: specifier: '*' version: 0.21.2(encoding@0.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -4892,7 +4892,7 @@ importers: version: 0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3) react-native-worklets: specifier: ^0.7.4 || ^0.8.0 - version: 0.8.1(patch_hash=3f49a21b44ba558989a3366eeff9c92ee331e18b736dbe89c5962ecc6f2802f1)(@babel/core@7.29.0)(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 0.8.3(patch_hash=3f49a21b44ba558989a3366eeff9c92ee331e18b736dbe89c5962ecc6f2802f1)(@babel/core@7.29.0)(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) devDependencies: '@testing-library/react-native': specifier: ^13.3.0 @@ -4925,8 +4925,8 @@ importers: specifier: ^13.0.0 version: 13.0.6 prettier: - specifier: ^3.0.3 - version: 3.5.3 + specifier: ^3.8.3 + version: 3.8.3 xml-js: specifier: ^1.6.11 version: 1.6.11 @@ -5658,8 +5658,8 @@ importers: specifier: ^12.1.0 version: 12.1.0 prettier: - specifier: ^3.0.3 - version: 3.5.3 + specifier: ^3.8.3 + version: 3.8.3 typescript: specifier: ~6.0.3 version: 6.0.3 @@ -6352,8 +6352,8 @@ importers: specifier: ^7.4.0 version: 7.4.0(eslint@9.39.4(jiti@1.21.7)) prettier: - specifier: ^3.3.3 - version: 3.5.3 + specifier: ^3.8.3 + version: 3.8.3 taskr: specifier: 1.1.0 version: 1.1.0 @@ -7509,7 +7509,7 @@ packages: '@expo/bunyan@4.0.1': resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} - engines: {'0': node >=0.10.0} + engines: {node: '>=0.10.0'} '@expo/code-signing-certificates@0.0.6': resolution: {integrity: sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==} @@ -9581,6 +9581,7 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} @@ -10191,10 +10192,6 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - brace-expansion@5.0.4: - resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} - engines: {node: 18 || 20 || >=22} - brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} @@ -13251,10 +13248,6 @@ packages: deprecated: please don't use. see readme (https://github.com/fizker/minifier) for details hasBin: true - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} - engines: {node: 18 || 20 || >=22} - minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -13932,10 +13925,6 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.14: resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} @@ -13963,11 +13952,6 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} - engines: {node: '>=14'} - hasBin: true - prettier@3.8.3: resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} engines: {node: '>=14'} @@ -14225,13 +14209,6 @@ packages: react-native: 0.85.3 react-native-safe-area-context: '*' - react-native-reanimated@4.3.0: - resolution: {integrity: sha512-HOTTPdKtddXTOsmQxDASXEwLS3lqEHrKERD3XOgzSqWJ7L3x81Pnx7mTcKx1FKdkgomMug/XSmm1C6Z7GIowxA==} - peerDependencies: - react: 19.2.3 - react-native: 0.85.3 - react-native-worklets: 0.8.x - react-native-reanimated@4.3.1: resolution: {integrity: sha512-KhGsS0YkCA+gusgyzlf9hnqzVPIR398KTpqXyqq/+yYJJPAvyEEPKcxlB0xtOOXSMrR2A9uRKVARVQhZwrOh+Q==} peerDependencies: @@ -14299,14 +14276,6 @@ packages: react: 19.2.3 react-native: 0.85.3 - react-native-worklets@0.8.1: - resolution: {integrity: sha512-oWP/lStsAHU6oYCaWDXrda/wOHVdhusQJz1e6x9gPnXdFf4ndNDAOtWCmk2zGrAnlapfyA3rM6PCQq94mPg9cw==} - peerDependencies: - '@babel/core': '*' - '@react-native/metro-config': '*' - react: 19.2.3 - react-native: 0.85.3 - react-native-worklets@0.8.3: resolution: {integrity: sha512-oCBJROyLU7yG/1R8s0INMflygTH71bx+5XcYkH0CM938TlhSoVbiunE1WVW5FZa51vwYqfLie/IXMX2s1Kh3eg==} peerDependencies: @@ -14834,6 +14803,7 @@ packages: sliced@1.0.1: resolution: {integrity: sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==} + deprecated: Unsupported slugify@1.6.8: resolution: {integrity: sha512-HVk9X1E0gz3mSpoi60h/saazLKXKaZThMLU3u/aNwoYn8/xQyX2MGxL0ui2eaokkD7tF+Zo+cKTHUbe1mmmGzA==} @@ -19753,7 +19723,7 @@ snapshots: '@typescript-eslint/types': 8.59.1 '@typescript-eslint/visitor-keys': 8.59.1 debug: 4.4.3 - minimatch: 10.2.4 + minimatch: 10.2.5 semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -20430,10 +20400,6 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.4: - dependencies: - balanced-match: 4.0.4 - brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 @@ -21556,10 +21522,10 @@ snapshots: resolve: 1.22.11 semver: 6.3.1 - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7))(prettier@3.5.3): + eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7))(prettier@3.8.3): dependencies: eslint: 9.39.4(jiti@1.21.7) - prettier: 3.5.3 + prettier: 3.8.3 prettier-linter-helpers: 1.0.1 synckit: 0.11.12 optionalDependencies: @@ -22369,14 +22335,14 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.2.3 - minimatch: 10.2.4 + minimatch: 10.2.5 minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 2.0.2 glob@13.0.6: dependencies: - minimatch: 10.2.4 + minimatch: 10.2.5 minipass: 7.1.3 path-scurry: 2.0.2 @@ -22646,9 +22612,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.49): + icss-utils@5.1.0(postcss@8.5.14): dependencies: - postcss: 8.4.49 + postcss: 8.5.14 idb@7.0.1: {} @@ -23535,7 +23501,7 @@ snapshots: js-yaml: 4.1.1 lodash: 4.17.23 minimist: 1.2.8 - prettier: 3.5.3 + prettier: 3.8.3 tinyglobby: 0.2.15 json-schema-traverse@0.4.1: {} @@ -24166,10 +24132,6 @@ snapshots: sqwish: 0.2.2 uglify-js: 2.8.29 - minimatch@10.2.4: - dependencies: - brace-expansion: 5.0.4 - minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 @@ -24786,54 +24748,54 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-import@15.1.0(postcss@8.4.49): + postcss-import@15.1.0(postcss@8.5.14): dependencies: - postcss: 8.4.49 + postcss: 8.5.14 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.11 - postcss-js@4.1.0(postcss@8.4.49): + postcss-js@4.1.0(postcss@8.5.14): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.49 + postcss: 8.5.14 - postcss-load-config@3.1.4(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.18)(@types/node@22.19.15)(typescript@6.0.3)): + postcss-load-config@3.1.4(postcss@8.5.14)(ts-node@10.9.2(@swc/core@1.15.18)(@types/node@22.19.15)(typescript@6.0.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: - postcss: 8.4.49 + postcss: 8.5.14 ts-node: 10.9.2(@swc/core@1.15.18)(@types/node@22.19.15)(typescript@6.0.3) - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.4.49)(tsx@4.21.0)(yaml@2.8.3): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.14)(tsx@4.21.0)(yaml@2.8.3): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 - postcss: 8.4.49 + postcss: 8.5.14 tsx: 4.21.0 yaml: 2.8.3 - postcss-modules-extract-imports@3.1.0(postcss@8.4.49): + postcss-modules-extract-imports@3.1.0(postcss@8.5.14): dependencies: - postcss: 8.4.49 + postcss: 8.5.14 - postcss-modules-local-by-default@4.2.0(postcss@8.4.49): + postcss-modules-local-by-default@4.2.0(postcss@8.5.14): dependencies: - icss-utils: 5.1.0(postcss@8.4.49) - postcss: 8.4.49 + icss-utils: 5.1.0(postcss@8.5.14) + postcss: 8.5.14 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.4.49): + postcss-modules-scope@3.2.1(postcss@8.5.14): dependencies: - postcss: 8.4.49 + postcss: 8.5.14 postcss-selector-parser: 7.1.1 - postcss-nested@6.2.0(postcss@8.4.49): + postcss-nested@6.2.0(postcss@8.5.14): dependencies: - postcss: 8.4.49 + postcss: 8.5.14 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.1.2: @@ -24848,12 +24810,6 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.49: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.14: dependencies: nanoid: 3.3.11 @@ -24885,8 +24841,6 @@ snapshots: prettier@2.8.8: {} - prettier@3.5.3: {} - prettier@3.8.3: {} pretty-bytes@5.6.0: {} @@ -25174,14 +25128,6 @@ snapshots: react-native-safe-area-context: 5.6.2(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) - react-native-reanimated@4.3.0(patch_hash=1e34e4238541638db96b94d5a2e974e73f3b801788a3d8f5c3f4b237a0559138)(react-native-worklets@0.8.3(patch_hash=3f49a21b44ba558989a3366eeff9c92ee331e18b736dbe89c5962ecc6f2802f1)(@babel/core@7.29.0)(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): - dependencies: - react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3) - react-native-is-edge-to-edge: 1.3.1(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-worklets: 0.8.3(patch_hash=3f49a21b44ba558989a3366eeff9c92ee331e18b736dbe89c5962ecc6f2802f1)(@babel/core@7.29.0)(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - semver: 7.7.4 - react-native-reanimated@4.3.1(patch_hash=1e34e4238541638db96b94d5a2e974e73f3b801788a3d8f5c3f4b237a0559138)(react-native-worklets@0.8.3(patch_hash=3f49a21b44ba558989a3366eeff9c92ee331e18b736dbe89c5962ecc6f2802f1)(@babel/core@7.29.0)(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 @@ -25258,26 +25204,6 @@ snapshots: react: 19.2.3 react-native: 0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3) - react-native-worklets@0.8.1(patch_hash=3f49a21b44ba558989a3366eeff9c92ee331e18b736dbe89c5962ecc6f2802f1)(@babel/core@7.29.0)(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): - dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@react-native/metro-config': 0.85.3(@babel/core@7.29.0) - convert-source-map: 2.0.0 - react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3) - semver: 7.7.4 - transitivePeerDependencies: - - supports-color - react-native-worklets@0.8.3(patch_hash=3f49a21b44ba558989a3366eeff9c92ee331e18b736dbe89c5962ecc6f2802f1)(@babel/core@7.29.0)(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/jest-preset@0.85.3(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.3(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: '@babel/core': 7.29.0 @@ -26262,11 +26188,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.4.49 - postcss-import: 15.1.0(postcss@8.4.49) - postcss-js: 4.1.0(postcss@8.4.49) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.4.49)(tsx@4.21.0)(yaml@2.8.3) - postcss-nested: 6.2.0(postcss@8.4.49) + postcss: 8.5.14 + postcss-import: 15.1.0(postcss@8.5.14) + postcss-js: 4.1.0(postcss@8.5.14) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.14)(tsx@4.21.0)(yaml@2.8.3) + postcss-nested: 6.2.0(postcss@8.5.14) postcss-selector-parser: 6.1.2 resolve: 1.22.11 sucrase: 3.35.1 @@ -26606,14 +26532,14 @@ snapshots: '@types/postcss-modules-local-by-default': 4.0.2 '@types/postcss-modules-scope': 3.0.4 dotenv: 16.6.1 - icss-utils: 5.1.0(postcss@8.4.49) + icss-utils: 5.1.0(postcss@8.5.14) less: 4.6.4 lodash.camelcase: 4.3.0 - postcss: 8.4.49 - postcss-load-config: 3.1.4(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.18)(@types/node@22.19.15)(typescript@6.0.3)) - postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) - postcss-modules-local-by-default: 4.2.0(postcss@8.4.49) - postcss-modules-scope: 3.2.1(postcss@8.4.49) + postcss: 8.5.14 + postcss-load-config: 3.1.4(postcss@8.5.14)(ts-node@10.9.2(@swc/core@1.15.18)(@types/node@22.19.15)(typescript@6.0.3)) + postcss-modules-extract-imports: 3.1.0(postcss@8.5.14) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.14) + postcss-modules-scope: 3.2.1(postcss@8.5.14) reserved-words: 0.1.2 sass: 1.98.0 source-map-js: 1.2.1 diff --git a/tools/package.json b/tools/package.json index 3d8f8d201344dd..c1157fce375408 100644 --- a/tools/package.json +++ b/tools/package.json @@ -89,7 +89,7 @@ "eslint": "^9.39.4", "eslint-config-universe": "workspace:^15.1.0", "eslint-plugin-lodash": "^7.4.0", - "prettier": "^3.3.3", + "prettier": "^3.8.3", "taskr": "1.1.0", "typescript": "^6.0.3" }, diff --git a/tools/src/GitHubActions.ts b/tools/src/GitHubActions.ts index 495fe7779d897d..a643054f3ad8e8 100644 --- a/tools/src/GitHubActions.ts +++ b/tools/src/GitHubActions.ts @@ -43,9 +43,9 @@ export async function getWorkflowsAsync(): Promise { const workflows = await filterAsync(response.data.workflows, async (workflow) => Boolean( workflow.name && - workflow.path && - workflow.state === 'active' && - (await fs.pathExists(path.join(EXPO_DIR, workflow.path))) + workflow.path && + workflow.state === 'active' && + (await fs.pathExists(path.join(EXPO_DIR, workflow.path))) ) ); return workflows diff --git a/tools/src/TasksRunner.ts b/tools/src/TasksRunner.ts index deba540ec8bad1..755dc92165a05c 100644 --- a/tools/src/TasksRunner.ts +++ b/tools/src/TasksRunner.ts @@ -94,9 +94,10 @@ export class TaskError extends Error { * and the runner makes sure they all are being run. Runner also provides an easy way to * backup and restore tasks' state. */ -export class TaskRunner - implements TaskRunnerDescriptor -{ +export class TaskRunner< + Args extends any[], + BackupDataType extends JSONObject | null = null, +> implements TaskRunnerDescriptor { // Descriptor properties readonly tasks: Task[]; diff --git a/tools/src/publish-packages/tasks/addTemplateTarball.ts b/tools/src/publish-packages/tasks/addTemplateTarball.ts index ff4e55c8c9c780..87c3d87829b85e 100644 --- a/tools/src/publish-packages/tasks/addTemplateTarball.ts +++ b/tools/src/publish-packages/tasks/addTemplateTarball.ts @@ -1,12 +1,12 @@ import fs from 'fs'; import path from 'path'; +import { selectPackagesToPublish } from './selectPackagesToPublish'; import { TEMPLATES_DIR } from '../../Constants'; import { packToTarballAsync } from '../../Npm'; import { Task } from '../../TasksRunner'; import { runWithSpinner } from '../../Utils'; import { Parcel, TaskArgs } from '../types'; -import { selectPackagesToPublish } from './selectPackagesToPublish'; /** * Add template tarball to Expo package. diff --git a/tools/src/publish-packages/tasks/updateProjectTemplates.ts b/tools/src/publish-packages/tasks/updateProjectTemplates.ts index efc5b045c2dac2..7b2705f8601514 100644 --- a/tools/src/publish-packages/tasks/updateProjectTemplates.ts +++ b/tools/src/publish-packages/tasks/updateProjectTemplates.ts @@ -2,11 +2,11 @@ import JsonFile from '@expo/json-file'; import chalk from 'chalk'; import path from 'path'; +import { selectPackagesToPublish } from './selectPackagesToPublish'; import { PACKAGES_DIR } from '../../Constants'; import logger from '../../Logger'; import { Task } from '../../TasksRunner'; import { CommandOptions, Parcel, TaskArgs } from '../types'; -import { selectPackagesToPublish } from './selectPackagesToPublish'; const { magenta, green, blue, cyan } = chalk; From ffd7cb1beca93533965577fca9b4d9f07d40fe16 Mon Sep 17 00:00:00 2001 From: Jakub Tkacz <32908614+Ubax@users.noreply.github.com> Date: Wed, 13 May 2026 19:51:43 +0200 Subject: [PATCH 11/21] [expo-router][expo-observe] fix ttr for preloaded routes (#45725) # Why Because `expo-observe` didn't know that route was preloaded it was incorrectly reporting, the preloaded routes as `cold_ttr` instead of warm one # How 1. Expose `pagePreloaded` listener from router 2. When route is preloaded add it to rendered screens, but don't report any metric # Test Plan 1. CI 2. Observe tester # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- .../__e2e__/native-navigation/app/_layout.tsx | 2 +- .../ObserveRouterIntegrationProvider.d.ts.map | 2 +- .../ObserveRouterIntegrationProvider.js | 11 +-- .../ObserveRouterIntegrationProvider.js.map | 2 +- .../integrations/expo-router/init.d.ts.map | 2 +- .../build/integrations/expo-router/init.js | 7 +- .../integrations/expo-router/init.js.map | 2 +- .../ObserveRouterIntegrationProvider.tsx | 9 ++- .../expo-router/__tests__/init.test.native.ts | 80 ++++++++++++++++++- .../src/integrations/expo-router/init.ts | 8 +- packages/expo-router/CHANGELOG.md | 2 + packages/expo-router/build/exports.d.ts | 2 +- packages/expo-router/build/exports.d.ts.map | 2 +- packages/expo-router/build/exports.js.map | 2 +- .../build/navigationEvents/index.d.ts | 6 +- .../build/navigationEvents/index.d.ts.map | 2 +- .../build/navigationEvents/index.js | 2 +- .../build/navigationEvents/index.js.map | 2 +- .../build/navigationEvents/types.d.ts | 11 +-- .../build/navigationEvents/types.d.ts.map | 2 +- .../build/navigationEvents/types.js.map | 2 +- packages/expo-router/build/useScreens.js | 6 +- packages/expo-router/build/useScreens.js.map | 2 +- packages/expo-router/src/exports.ts | 2 +- .../expo-router/src/navigationEvents/index.ts | 8 +- .../expo-router/src/navigationEvents/types.ts | 11 +-- packages/expo-router/src/useScreens.tsx | 8 +- 27 files changed, 145 insertions(+), 52 deletions(-) diff --git a/apps/router-e2e/__e2e__/native-navigation/app/_layout.tsx b/apps/router-e2e/__e2e__/native-navigation/app/_layout.tsx index cccc8e148960af..8683dca5d55ab3 100644 --- a/apps/router-e2e/__e2e__/native-navigation/app/_layout.tsx +++ b/apps/router-e2e/__e2e__/native-navigation/app/_layout.tsx @@ -4,7 +4,7 @@ import { DefaultTheme, ThemeProvider } from 'expo-router/react-navigation'; const appStart = Date.now(); unstable_navigationEvents.enable(); -(['pageWillRender', 'pageFocused', 'pageBlurred', 'pageRemoved'] as const).forEach((eventType) => { +(['pagePreloaded', 'pageFocused', 'pageBlurred', 'pageRemoved'] as const).forEach((eventType) => { unstable_navigationEvents.addListener(eventType, (event) => { console.log( `[${Date.now() - appStart}ms] ${eventType}:`, diff --git a/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.d.ts.map b/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.d.ts.map index 769b1f09feb0fe..46a579ea6a6455 100644 --- a/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.d.ts.map +++ b/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ObserveRouterIntegrationProvider.d.ts","sourceRoot":"","sources":["../../../src/integrations/expo-router/ObserveRouterIntegrationProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAA+B,MAAM,OAAO,CAAC;AAI3F,OAAO,EAAkC,KAAK,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAE1F,eAAO,MAAM,+BAA+B,0DAAuD,CAAC;AAEpG,wBAAgB,gCAAgC,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAsB/E"} \ No newline at end of file +{"version":3,"file":"ObserveRouterIntegrationProvider.d.ts","sourceRoot":"","sources":["../../../src/integrations/expo-router/ObserveRouterIntegrationProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAA+B,MAAM,OAAO,CAAC;AAI3F,OAAO,EAAkC,KAAK,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAE1F,eAAO,MAAM,+BAA+B,0DAAuD,CAAC;AAEpG,wBAAgB,gCAAgC,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAuB/E"} \ No newline at end of file diff --git a/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.js b/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.js index 831bd494b7c60a..894b0b61f0bd1d 100644 --- a/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.js +++ b/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.js @@ -6,15 +6,16 @@ import { createRouterIntegrationStorage } from './storage'; export const ObserveRouterIntegrationContext = createContext(null); export function ObserveRouterIntegrationProvider({ children }) { const [storage] = useState(() => isInitialized() ? createRouterIntegrationStorage() : null); + const [listenersCleanup] = useState(() => { + if (!storage || !optionalRouter) + return; + return initListeners(storage, optionalRouter.unstable_navigationEvents); + }); const prevInitialized = useRef(isInitialized()); if (prevInitialized.current !== isInitialized()) { throw new Error(`[expo-observe] Router integration was ${isInitialized() ? 'enabled' : 'disabled'} after application mounted. Call ExpoObserve.configure() before mounting AppMetricsRoot.`); } - useEffect(() => { - if (!storage || !optionalRouter) - return; - return initListeners(storage, optionalRouter.unstable_navigationEvents); - }, [storage]); + useEffect(() => listenersCleanup, [listenersCleanup]); return (_jsx(ObserveRouterIntegrationContext.Provider, { value: storage, children: children })); } //# sourceMappingURL=ObserveRouterIntegrationProvider.js.map \ No newline at end of file diff --git a/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.js.map b/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.js.map index d4a5459720d730..a8894c944c3b0f 100644 --- a/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.js.map +++ b/packages/expo-observe/build/integrations/expo-router/ObserveRouterIntegrationProvider.js.map @@ -1 +1 @@ -{"version":3,"file":"ObserveRouterIntegrationProvider.js","sourceRoot":"","sources":["../../../src/integrations/expo-router/ObserveRouterIntegrationProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAA0B,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAiC,MAAM,WAAW,CAAC;AAE1F,MAAM,CAAC,MAAM,+BAA+B,GAAG,aAAa,CAAkC,IAAI,CAAC,CAAC;AAEpG,MAAM,UAAU,gCAAgC,CAAC,EAAE,QAAQ,EAAqB;IAC9E,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAkC,GAAG,EAAE,CAC/D,aAAa,EAAE,CAAC,CAAC,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,IAAI,CAC1D,CAAC;IAEF,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD,IAAI,eAAe,CAAC,OAAO,KAAK,aAAa,EAAE,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,yCAAyC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,0FAA0F,CAC5K,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,CAAC,cAAc;YAAE,OAAO;QACxC,OAAO,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,CACL,KAAC,+BAA+B,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YACrD,QAAQ,GACgC,CAC5C,CAAC;AACJ,CAAC","sourcesContent":["import { createContext, type PropsWithChildren, useEffect, useRef, useState } from 'react';\n\nimport { initListeners, isInitialized } from './init';\nimport { optionalRouter } from './router';\nimport { createRouterIntegrationStorage, type RouterIntegrationStorage } from './storage';\n\nexport const ObserveRouterIntegrationContext = createContext(null);\n\nexport function ObserveRouterIntegrationProvider({ children }: PropsWithChildren) {\n const [storage] = useState(() =>\n isInitialized() ? createRouterIntegrationStorage() : null\n );\n\n const prevInitialized = useRef(isInitialized());\n if (prevInitialized.current !== isInitialized()) {\n throw new Error(\n `[expo-observe] Router integration was ${isInitialized() ? 'enabled' : 'disabled'} after application mounted. Call ExpoObserve.configure() before mounting AppMetricsRoot.`\n );\n }\n\n useEffect(() => {\n if (!storage || !optionalRouter) return;\n return initListeners(storage, optionalRouter.unstable_navigationEvents);\n }, [storage]);\n\n return (\n \n {children}\n \n );\n}\n"]} \ No newline at end of file +{"version":3,"file":"ObserveRouterIntegrationProvider.js","sourceRoot":"","sources":["../../../src/integrations/expo-router/ObserveRouterIntegrationProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAA0B,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAiC,MAAM,WAAW,CAAC;AAE1F,MAAM,CAAC,MAAM,+BAA+B,GAAG,aAAa,CAAkC,IAAI,CAAC,CAAC;AAEpG,MAAM,UAAU,gCAAgC,CAAC,EAAE,QAAQ,EAAqB;IAC9E,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAkC,GAAG,EAAE,CAC/D,aAAa,EAAE,CAAC,CAAC,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,IAAI,CAC1D,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QACvC,IAAI,CAAC,OAAO,IAAI,CAAC,cAAc;YAAE,OAAO;QACxC,OAAO,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD,IAAI,eAAe,CAAC,OAAO,KAAK,aAAa,EAAE,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,yCAAyC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,0FAA0F,CAC5K,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEtD,OAAO,CACL,KAAC,+BAA+B,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YACrD,QAAQ,GACgC,CAC5C,CAAC;AACJ,CAAC","sourcesContent":["import { createContext, type PropsWithChildren, useEffect, useRef, useState } from 'react';\n\nimport { initListeners, isInitialized } from './init';\nimport { optionalRouter } from './router';\nimport { createRouterIntegrationStorage, type RouterIntegrationStorage } from './storage';\n\nexport const ObserveRouterIntegrationContext = createContext(null);\n\nexport function ObserveRouterIntegrationProvider({ children }: PropsWithChildren) {\n const [storage] = useState(() =>\n isInitialized() ? createRouterIntegrationStorage() : null\n );\n const [listenersCleanup] = useState(() => {\n if (!storage || !optionalRouter) return;\n return initListeners(storage, optionalRouter.unstable_navigationEvents);\n });\n\n const prevInitialized = useRef(isInitialized());\n if (prevInitialized.current !== isInitialized()) {\n throw new Error(\n `[expo-observe] Router integration was ${isInitialized() ? 'enabled' : 'disabled'} after application mounted. Call ExpoObserve.configure() before mounting AppMetricsRoot.`\n );\n }\n\n useEffect(() => listenersCleanup, [listenersCleanup]);\n\n return (\n \n {children}\n \n );\n}\n"]} \ No newline at end of file diff --git a/packages/expo-observe/build/integrations/expo-router/init.d.ts.map b/packages/expo-observe/build/integrations/expo-router/init.d.ts.map index f6ddd88f860359..63edfcf8922bea 100644 --- a/packages/expo-observe/build/integrations/expo-router/init.d.ts.map +++ b/packages/expo-observe/build/integrations/expo-router/init.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/integrations/expo-router/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAS1D,eAAO,MAAM,aAAa,eAAoB,CAAC;AAE/C,wBAAgB,qBAAqB,SAGpC;AAED,KAAK,gBAAgB,GAAG,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC,2BAA2B,CAAC,CAAC;AAExF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,wBAAwB,EACjC,gBAAgB,EAAE,gBAAgB,GACjC,MAAM,IAAI,CA0EZ"} \ No newline at end of file +{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/integrations/expo-router/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAS1D,eAAO,MAAM,aAAa,eAAoB,CAAC;AAE/C,wBAAgB,qBAAqB,SAGpC;AAED,KAAK,gBAAgB,GAAG,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC,2BAA2B,CAAC,CAAC;AAExF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,wBAAwB,EACjC,gBAAgB,EAAE,gBAAgB,GACjC,MAAM,IAAI,CAgFZ"} \ No newline at end of file diff --git a/packages/expo-observe/build/integrations/expo-router/init.js b/packages/expo-observe/build/integrations/expo-router/init.js index d464061dcaee75..81db85d8a320cc 100644 --- a/packages/expo-observe/build/integrations/expo-router/init.js +++ b/packages/expo-observe/build/integrations/expo-router/init.js @@ -15,7 +15,6 @@ export function initListeners(storage, navigationEvents) { const appLaunchTime = performance.now(); const cleanup = new Set(); const unsubscribeAction = navigationEvents.addListener('actionDispatched', (event) => { - // TODO(@ubax): Handle screen preloading // PRELOAD comes from router.prefetch() — a route warm-up, not a user // navigation — so it must not seed dispatchTime. if (event.actionType === 'PRELOAD') @@ -26,6 +25,12 @@ export function initListeners(storage, navigationEvents) { }); }); cleanup.add(unsubscribeAction); + const unsubscribePreload = navigationEvents.addListener('pagePreloaded', (e) => { + // The screen rendered as part of a preload. Mark it as already rendered so + // the eventual `pageFocused` resolves to `warm_ttr` rather than `cold_ttr`. + storage.renderedScreensIds.add(e.screenId); + }); + cleanup.add(unsubscribePreload); const unsubscribeFocus = navigationEvents.addListener('pageFocused', async (e) => { // Snapshot both clocks once so every metric written below is stamped with // the moment the focus event fired, not the moment `addCustomMetricToSession` diff --git a/packages/expo-observe/build/integrations/expo-router/init.js.map b/packages/expo-observe/build/integrations/expo-router/init.js.map index 3aa662ee07e59f..53b8990042d416 100644 --- a/packages/expo-observe/build/integrations/expo-router/init.js.map +++ b/packages/expo-observe/build/integrations/expo-router/init.js.map @@ -1 +1 @@ -{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/integrations/expo-router/init.ts"],"names":[],"mappings":"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","sourcesContent":["import AppMetrics from 'expo-app-metrics';\n\nimport { optionalRouter } from './router';\nimport { type RouterIntegrationStorage } from './storage';\n\n// TODO(@ubax): split this module into `.native.ts` / `.web.ts` variants so the\n// web bundle doesn't pull in `expo-app-metrics`' native bridge calls. The web\n// version should be an explicit no-op (return a noop cleanup) rather than\n// relying on the web stubs in `expo-app-metrics/module.web.ts`.\n\nlet initialized = false;\n\nexport const isInitialized = () => initialized;\n\nexport function initRouterIntegration() {\n initialized = true;\n optionalRouter?.unstable_navigationEvents.enable();\n}\n\ntype NavigationEvents = NonNullable['unstable_navigationEvents'];\n\nexport function initListeners(\n storage: RouterIntegrationStorage,\n navigationEvents: NavigationEvents\n): () => void {\n const appLaunchTime = performance.now();\n const cleanup = new Set<() => void>();\n\n const unsubscribeAction = navigationEvents.addListener('actionDispatched', (event) => {\n // TODO(@ubax): Handle screen preloading\n // PRELOAD comes from router.prefetch() — a route warm-up, not a user\n // navigation — so it must not seed dispatchTime.\n if (event.actionType === 'PRELOAD') return;\n storage.pendingActions.push({\n actionType: event.actionType,\n dispatchTime: performance.now(),\n });\n });\n cleanup.add(unsubscribeAction);\n\n const unsubscribeFocus = navigationEvents.addListener('pageFocused', async (e) => {\n // Snapshot both clocks once so every metric written below is stamped with\n // the moment the focus event fired, not the moment `addCustomMetricToSession`\n // happens to run after the awaited `getMainSession()` round-trip.\n const now = performance.now();\n const timestamp = new Date().toISOString();\n const isInitial = !storage.renderedScreensIds.has(e.screenId);\n storage.renderedScreensIds.add(e.screenId);\n const name = isInitial ? 'cold_ttr' : 'warm_ttr';\n const mainSessionId = (await AppMetrics.getMainSession())?.id;\n if (!mainSessionId) {\n return;\n }\n\n if (!storage.hasRecordedInitialTtr) {\n // Stored in seconds to match the OTel `unit = \"s\"` convention\n const appLaunchTtrSeconds = (now - appLaunchTime) / 1000;\n storage.hasRecordedInitialTtr = true;\n AppMetrics.addCustomMetricToSession({\n sessionId: mainSessionId,\n timestamp,\n category: 'navigation',\n name,\n routeName: e.pathname,\n value: appLaunchTtrSeconds,\n params: { isAppLaunch: true, routeParams: e.params },\n });\n return;\n }\n\n if (storage.pendingActions.length === 0) return;\n\n const last = storage.pendingActions[storage.pendingActions.length - 1];\n if (last) {\n const dispatchTime = last.dispatchTime;\n storage.screenTimes[e.screenId] = {\n ...storage.screenTimes[e.screenId],\n dispatchTime,\n };\n\n AppMetrics.addCustomMetricToSession({\n sessionId: mainSessionId,\n timestamp,\n category: 'navigation',\n name,\n routeName: e.pathname,\n value: (now - dispatchTime) / 1000,\n params: { isAppLaunch: false, routeParams: e.params },\n });\n }\n storage.pendingActions.length = 0;\n });\n cleanup.add(unsubscribeFocus);\n\n return () => {\n cleanup.forEach((c) => c());\n cleanup.clear();\n };\n}\n"]} \ No newline at end of file +{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/integrations/expo-router/init.ts"],"names":[],"mappings":"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","sourcesContent":["import AppMetrics from 'expo-app-metrics';\n\nimport { optionalRouter } from './router';\nimport { type RouterIntegrationStorage } from './storage';\n\n// TODO(@ubax): split this module into `.native.ts` / `.web.ts` variants so the\n// web bundle doesn't pull in `expo-app-metrics`' native bridge calls. The web\n// version should be an explicit no-op (return a noop cleanup) rather than\n// relying on the web stubs in `expo-app-metrics/module.web.ts`.\n\nlet initialized = false;\n\nexport const isInitialized = () => initialized;\n\nexport function initRouterIntegration() {\n initialized = true;\n optionalRouter?.unstable_navigationEvents.enable();\n}\n\ntype NavigationEvents = NonNullable['unstable_navigationEvents'];\n\nexport function initListeners(\n storage: RouterIntegrationStorage,\n navigationEvents: NavigationEvents\n): () => void {\n const appLaunchTime = performance.now();\n const cleanup = new Set<() => void>();\n\n const unsubscribeAction = navigationEvents.addListener('actionDispatched', (event) => {\n // PRELOAD comes from router.prefetch() — a route warm-up, not a user\n // navigation — so it must not seed dispatchTime.\n if (event.actionType === 'PRELOAD') return;\n storage.pendingActions.push({\n actionType: event.actionType,\n dispatchTime: performance.now(),\n });\n });\n cleanup.add(unsubscribeAction);\n\n const unsubscribePreload = navigationEvents.addListener('pagePreloaded', (e) => {\n // The screen rendered as part of a preload. Mark it as already rendered so\n // the eventual `pageFocused` resolves to `warm_ttr` rather than `cold_ttr`.\n storage.renderedScreensIds.add(e.screenId);\n });\n cleanup.add(unsubscribePreload);\n\n const unsubscribeFocus = navigationEvents.addListener('pageFocused', async (e) => {\n // Snapshot both clocks once so every metric written below is stamped with\n // the moment the focus event fired, not the moment `addCustomMetricToSession`\n // happens to run after the awaited `getMainSession()` round-trip.\n const now = performance.now();\n const timestamp = new Date().toISOString();\n const isInitial = !storage.renderedScreensIds.has(e.screenId);\n storage.renderedScreensIds.add(e.screenId);\n const name = isInitial ? 'cold_ttr' : 'warm_ttr';\n const mainSessionId = (await AppMetrics.getMainSession())?.id;\n if (!mainSessionId) {\n return;\n }\n\n if (!storage.hasRecordedInitialTtr) {\n // Stored in seconds to match the OTel `unit = \"s\"` convention\n const appLaunchTtrSeconds = (now - appLaunchTime) / 1000;\n storage.hasRecordedInitialTtr = true;\n AppMetrics.addCustomMetricToSession({\n sessionId: mainSessionId,\n timestamp,\n category: 'navigation',\n name,\n routeName: e.pathname,\n value: appLaunchTtrSeconds,\n params: { isAppLaunch: true, routeParams: e.params },\n });\n return;\n }\n\n if (storage.pendingActions.length === 0) return;\n\n const last = storage.pendingActions[storage.pendingActions.length - 1];\n if (last) {\n const dispatchTime = last.dispatchTime;\n storage.screenTimes[e.screenId] = {\n ...storage.screenTimes[e.screenId],\n dispatchTime,\n };\n\n AppMetrics.addCustomMetricToSession({\n sessionId: mainSessionId,\n timestamp,\n category: 'navigation',\n name,\n routeName: e.pathname,\n value: (now - dispatchTime) / 1000,\n params: { isAppLaunch: false, routeParams: e.params },\n });\n }\n storage.pendingActions.length = 0;\n });\n cleanup.add(unsubscribeFocus);\n\n return () => {\n cleanup.forEach((c) => c());\n cleanup.clear();\n };\n}\n"]} \ No newline at end of file diff --git a/packages/expo-observe/src/integrations/expo-router/ObserveRouterIntegrationProvider.tsx b/packages/expo-observe/src/integrations/expo-router/ObserveRouterIntegrationProvider.tsx index 85ae8ea87fc68d..2cbb586c1d84a4 100644 --- a/packages/expo-observe/src/integrations/expo-router/ObserveRouterIntegrationProvider.tsx +++ b/packages/expo-observe/src/integrations/expo-router/ObserveRouterIntegrationProvider.tsx @@ -10,6 +10,10 @@ export function ObserveRouterIntegrationProvider({ children }: PropsWithChildren const [storage] = useState(() => isInitialized() ? createRouterIntegrationStorage() : null ); + const [listenersCleanup] = useState(() => { + if (!storage || !optionalRouter) return; + return initListeners(storage, optionalRouter.unstable_navigationEvents); + }); const prevInitialized = useRef(isInitialized()); if (prevInitialized.current !== isInitialized()) { @@ -18,10 +22,7 @@ export function ObserveRouterIntegrationProvider({ children }: PropsWithChildren ); } - useEffect(() => { - if (!storage || !optionalRouter) return; - return initListeners(storage, optionalRouter.unstable_navigationEvents); - }, [storage]); + useEffect(() => listenersCleanup, [listenersCleanup]); return ( diff --git a/packages/expo-observe/src/integrations/expo-router/__tests__/init.test.native.ts b/packages/expo-observe/src/integrations/expo-router/__tests__/init.test.native.ts index 6011167e9bd2b2..dec49de2adcc17 100644 --- a/packages/expo-observe/src/integrations/expo-router/__tests__/init.test.native.ts +++ b/packages/expo-observe/src/integrations/expo-router/__tests__/init.test.native.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-require-imports */ import AppMetrics from 'expo-app-metrics'; -import type { ActionDispatchedEvent, PageFocusedEvent } from 'expo-router'; +import type { ActionDispatchedEvent, PageFocusedEvent, PagePreloadedEvent } from 'expo-router'; import { initListeners } from '../init'; import { createRouterIntegrationStorage, type RouterIntegrationStorage } from '../storage'; @@ -61,6 +61,15 @@ function focus(events: FakeNavigationEvents, screenId: string) { }); } +function preload(events: FakeNavigationEvents, screenId: string) { + events.emit>('pagePreloaded', { + type: 'pagePreloaded', + screenId, + pathname: `/${screenId}`, + params: {}, + }); +} + function flushAsync() { return new Promise((resolve) => setImmediate(resolve)); } @@ -163,13 +172,80 @@ describe('initListeners', () => { expect(mockAddCustomMetric).not.toHaveBeenCalled(); }); - it('cleanup unsubscribes both listeners', async () => { + it('records warm_ttr when a preloaded screen is focused for the first time', async () => { + dispatch(events, 'PRELOAD'); + preload(events, 'a'); + dispatch(events, 'NAVIGATE'); + focus(events, 'a'); + await flushAsync(); + + expect(mockAddCustomMetric).toHaveBeenCalledTimes(1); + expect(mockAddCustomMetric.mock.calls[0][0].name).toBe('warm_ttr'); + }); + + it('records cold_ttr for a non-preloaded screen even when a different screen was preloaded', async () => { + dispatch(events, 'PRELOAD'); + preload(events, 'a'); + dispatch(events, 'NAVIGATE'); + focus(events, 'b'); + await flushAsync(); + + expect(mockAddCustomMetric).toHaveBeenCalledTimes(1); + expect(mockAddCustomMetric.mock.calls[0][0].name).toBe('cold_ttr'); + }); + + it('does not emit a metric when a screen is preloaded but never focused', async () => { + storage.hasRecordedInitialTtr = true; + + dispatch(events, 'PRELOAD'); + preload(events, 'a'); + await flushAsync(); + + expect(mockAddCustomMetric).not.toHaveBeenCalled(); + expect(storage.renderedScreensIds.has('a')).toBe(true); + }); + + it('handles a duplicate pagePreloaded for the same screen idempotently', async () => { + preload(events, 'a'); + preload(events, 'a'); + dispatch(events, 'NAVIGATE'); + focus(events, 'a'); + await flushAsync(); + + expect(mockAddCustomMetric).toHaveBeenCalledTimes(1); + expect(mockAddCustomMetric.mock.calls[0][0].name).toBe('warm_ttr'); + expect(storage.renderedScreensIds.size).toBe(1); + }); + + it('treats subsequent focuses of a preloaded screen as warm_ttr', async () => { + preload(events, 'a'); + dispatch(events, 'NAVIGATE'); + focus(events, 'a'); + await flushAsync(); + + dispatch(events, 'NAVIGATE'); + focus(events, 'b'); + await flushAsync(); + + dispatch(events, 'NAVIGATE'); + focus(events, 'a'); + await flushAsync(); + + expect(mockAddCustomMetric).toHaveBeenCalledTimes(3); + expect(mockAddCustomMetric.mock.calls[0][0].name).toBe('warm_ttr'); + expect(mockAddCustomMetric.mock.calls[1][0].name).toBe('cold_ttr'); + expect(mockAddCustomMetric.mock.calls[2][0].name).toBe('warm_ttr'); + }); + + it('cleanup unsubscribes all listeners', async () => { cleanup(); dispatch(events, 'NAVIGATE'); + preload(events, 'a'); focus(events, 'a'); await flushAsync(); expect(mockAddCustomMetric).not.toHaveBeenCalled(); expect(storage.pendingActions).toHaveLength(0); + expect(storage.renderedScreensIds.size).toBe(0); cleanup = () => {}; }); diff --git a/packages/expo-observe/src/integrations/expo-router/init.ts b/packages/expo-observe/src/integrations/expo-router/init.ts index cde391ca78aec1..b15cc66cea89b0 100644 --- a/packages/expo-observe/src/integrations/expo-router/init.ts +++ b/packages/expo-observe/src/integrations/expo-router/init.ts @@ -27,7 +27,6 @@ export function initListeners( const cleanup = new Set<() => void>(); const unsubscribeAction = navigationEvents.addListener('actionDispatched', (event) => { - // TODO(@ubax): Handle screen preloading // PRELOAD comes from router.prefetch() — a route warm-up, not a user // navigation — so it must not seed dispatchTime. if (event.actionType === 'PRELOAD') return; @@ -38,6 +37,13 @@ export function initListeners( }); cleanup.add(unsubscribeAction); + const unsubscribePreload = navigationEvents.addListener('pagePreloaded', (e) => { + // The screen rendered as part of a preload. Mark it as already rendered so + // the eventual `pageFocused` resolves to `warm_ttr` rather than `cold_ttr`. + storage.renderedScreensIds.add(e.screenId); + }); + cleanup.add(unsubscribePreload); + const unsubscribeFocus = navigationEvents.addListener('pageFocused', async (e) => { // Snapshot both clocks once so every metric written below is stamped with // the moment the focus event fired, not the moment `addCustomMetricToSession` diff --git a/packages/expo-router/CHANGELOG.md b/packages/expo-router/CHANGELOG.md index 4395bd43de0344..a41c984288ed77 100644 --- a/packages/expo-router/CHANGELOG.md +++ b/packages/expo-router/CHANGELOG.md @@ -15,6 +15,8 @@ ### 💡 Others +- expose `pagePreloaded` listener ([#45725](https://github.com/expo/expo/pull/45725) by [@Ubax](https://github.com/Ubax)) + ## 56.1.4 — 2026-05-13 ### 🎉 New features diff --git a/packages/expo-router/build/exports.d.ts b/packages/expo-router/build/exports.d.ts index 4b45ef4e8c3f8a..5bf162839cc9f7 100644 --- a/packages/expo-router/build/exports.d.ts +++ b/packages/expo-router/build/exports.d.ts @@ -31,7 +31,7 @@ export type { SingularOptions } from './useScreens'; export type * from './types'; export { Badge, type BadgeProps, Icon, type IconProps, Label, type LabelProps, VectorIcon, type VectorIconProps, } from './primitives'; export { unstable_navigationEvents } from './navigationEvents'; -export type { PageWillRender, PageFocusedEvent, PageBlurredEvent, PageRemoved, ActionDispatchedEvent, AnalyticsEvent, } from './navigationEvents'; +export type { PagePreloadedEvent, PageFocusedEvent, PageBlurredEvent, PageRemoved, ActionDispatchedEvent, AnalyticsEvent, } from './navigationEvents'; /** * @deprecated Use `import { Tabs } from 'expo-router/js-tabs'` instead. */ diff --git a/packages/expo-router/build/exports.d.ts.map b/packages/expo-router/build/exports.d.ts.map index 882d8e73089488..6db5d5c57526bb 100644 --- a/packages/expo-router/build/exports.d.ts.map +++ b/packages/expo-router/build/exports.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,WAAW,EACX,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,aAAa,EACb,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,MAAM,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAG3B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACxF,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;GAEG;AACH,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAE5D,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,mBAAmB,SAAS,CAAC;AAE7B,OAAO,EACL,KAAK,EACL,KAAK,UAAU,EACf,IAAI,EACJ,KAAK,SAAS,EACd,KAAK,EACL,KAAK,UAAU,EACf,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,YAAY,EACV,kCAAkC,EAClC,mCAAmC,EACnC,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,8BAA8B,CAAC"} \ No newline at end of file +{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,WAAW,EACX,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,aAAa,EACb,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,MAAM,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAG3B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACxF,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;GAEG;AACH,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAE5D,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,mBAAmB,SAAS,CAAC;AAE7B,OAAO,EACL,KAAK,EACL,KAAK,UAAU,EACf,IAAI,EACJ,KAAK,SAAS,EACd,KAAK,EACL,KAAK,UAAU,EACf,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,YAAY,EACV,kCAAkC,EAClC,mCAAmC,EACnC,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,8BAA8B,CAAC"} \ No newline at end of file diff --git a/packages/expo-router/build/exports.js.map b/packages/expo-router/build/exports.js.map index f2b6aaa92e6a9a..3adab327200abc 100644 --- a/packages/expo-router/build/exports.js.map +++ b/packages/expo-router/build/exports.js.map @@ -1 +1 @@ -{"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAAkB;AAClB,iDAAoD;AAmB3C,0FAnBA,qBAAS,OAmBA;AAAE,qFAnBA,gBAAI,OAmBA;AAjBxB,iCAYiB;AAXf,kGAAA,SAAS,OAAA;AACT,8GAAA,qBAAqB,OAAA;AACrB,oGAAA,WAAW,OAAA;AACX,kHAAA,yBAAyB,OAAA;AACzB,8GAAA,qBAAqB,OAAA;AACrB,6GAAA,oBAAoB,OAAA;AACpB,oGAAA,WAAW,OAAA;AACX,0GAAA,iBAAiB,OAAA;AACjB,+GAAA,sBAAsB,OAAA;AACtB,sGAAA,aAAa,OAAA;AACb,4GAAA,mBAAmB,OAAA;AAGrB,mDAAiE;AAAxD,wGAAA,MAAM,OAAA;AAEf,iEAAgE;AAAvD,sHAAA,iBAAiB,OAAA;AAG1B,oBAAoB;AACpB,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,+CAA8C;AAArC,sGAAA,SAAS,OAAA;AAClB,2CAA0C;AAAjC,kGAAA,OAAO,OAAA;AAChB,iDAAkE;AAAzD,wGAAA,UAAU,OAAA;AAEnB,uDAAsD;AAA7C,8GAAA,aAAa,OAAA;AACtB,6DAAwF;AAA/E,oHAAA,gBAAgB,OAAA;AAGzB,WAAW;AACX;;GAEG;AACH,+DAA+C;AAE/C,mBAAmB;AACnB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,mDAAuE;AAA9D,gHAAA,cAAc,OAAA;AACvB,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AAGrB,yEAAwE;AAA/D,sGAAA,SAAS,OAAA;AAClB,+EAA8E;AAArE,4GAAA,YAAY,OAAA;AACrB,+EAA8E;AAArE,8GAAA,aAAa,OAAA;AACtB,qEAAoE;AAA3D,oGAAA,QAAQ,OAAA;AACjB,uEAAsE;AAA7D,4GAAA,YAAY,OAAA;AACrB,2EAA0E;AAAjE,gHAAA,cAAc,OAAA;AACvB,6DAA4D;AAAnD,oGAAA,QAAQ,OAAA;AAOjB,2CASsB;AARpB,mGAAA,KAAK,OAAA;AAEL,kGAAA,IAAI,OAAA;AAEJ,mGAAA,KAAK,OAAA;AAEL,wGAAA,UAAU,OAAA;AAIZ,uDAA+D;AAAtD,6HAAA,yBAAyB,OAAA;AAUlC;;GAEG;AACH,uCAAsC;AAA7B,4FAAA,IAAI,OAAA;AAEb,mEAAiE;AAAxD,uHAAA,iBAAiB,OAAA","sourcesContent":["// Expo Router API\nimport { Navigator, Slot } from './views/Navigator';\n\nexport {\n useRouter,\n useUnstableGlobalHref,\n usePathname,\n useNavigationContainerRef,\n useGlobalSearchParams,\n useLocalSearchParams,\n useSegments,\n useRootNavigation,\n useRootNavigationState,\n useLoaderData,\n useCurrentRouteInfo,\n} from './hooks';\n\nexport { router, type ImperativeRouter } from './imperative-api';\n\nexport { withLayoutContext } from './layouts/withLayoutContext';\nexport { Navigator, Slot };\n\n// Expo Router Views\nexport { ExpoRoot } from './ExpoRoot';\nexport { Unmatched } from './views/Unmatched';\nexport { Sitemap } from './views/Sitemap';\nexport { useSitemap, type SitemapType } from './views/useSitemap';\nexport type { ErrorBoundaryProps } from './views/Try';\nexport { ErrorBoundary } from './views/ErrorBoundary';\nexport { SuspenseFallback, type SuspenseFallbackProps } from './views/SuspenseFallback';\nexport type { ScreenProps } from './useScreens';\n\n// Platform\n/**\n * @hidden\n */\nexport * as SplashScreen from './views/Splash';\n\n// React Navigation\nexport { useNavigation } from './useNavigation';\nexport { useFocusEffect, type EffectCallback } from './useFocusEffect';\nexport { useIsFocused } from './useIsFocused';\nexport type { ResultState } from './fork/getStateFromPath';\n\nexport { DarkTheme } from './react-navigation/native/theming/DarkTheme';\nexport { DefaultTheme } from './react-navigation/native/theming/DefaultTheme';\nexport { ThemeProvider } from './react-navigation/core/theming/ThemeProvider';\nexport { useTheme } from './react-navigation/core/theming/useTheme';\nexport { useRoutePath } from './react-navigation/native/useRoutePath';\nexport { useScrollToTop } from './react-navigation/native/useScrollToTop';\nexport { useRoute } from './react-navigation/core/useRoute';\n\nexport type { RedirectConfig } from './getRoutesCore';\nexport type { SingularOptions } from './useScreens';\n\nexport type * from './types';\n\nexport {\n Badge,\n type BadgeProps,\n Icon,\n type IconProps,\n Label,\n type LabelProps,\n VectorIcon,\n type VectorIconProps,\n} from './primitives';\n\nexport { unstable_navigationEvents } from './navigationEvents';\nexport type {\n PageWillRender,\n PageFocusedEvent,\n PageBlurredEvent,\n PageRemoved,\n ActionDispatchedEvent,\n AnalyticsEvent,\n} from './navigationEvents';\n\n/**\n * @deprecated Use `import { Tabs } from 'expo-router/js-tabs'` instead.\n */\nexport { Tabs } from './layouts/Tabs';\n\nexport { ExperimentalStack } from './layouts/experimental-stack';\nexport type {\n ExperimentalStackNavigationOptions,\n ExperimentalStackNavigationEventMap,\n ExperimentalStackNavigationProp,\n ExperimentalStackScreenProps,\n} from './layouts/experimental-stack';\n"]} \ No newline at end of file +{"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAAkB;AAClB,iDAAoD;AAmB3C,0FAnBA,qBAAS,OAmBA;AAAE,qFAnBA,gBAAI,OAmBA;AAjBxB,iCAYiB;AAXf,kGAAA,SAAS,OAAA;AACT,8GAAA,qBAAqB,OAAA;AACrB,oGAAA,WAAW,OAAA;AACX,kHAAA,yBAAyB,OAAA;AACzB,8GAAA,qBAAqB,OAAA;AACrB,6GAAA,oBAAoB,OAAA;AACpB,oGAAA,WAAW,OAAA;AACX,0GAAA,iBAAiB,OAAA;AACjB,+GAAA,sBAAsB,OAAA;AACtB,sGAAA,aAAa,OAAA;AACb,4GAAA,mBAAmB,OAAA;AAGrB,mDAAiE;AAAxD,wGAAA,MAAM,OAAA;AAEf,iEAAgE;AAAvD,sHAAA,iBAAiB,OAAA;AAG1B,oBAAoB;AACpB,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,+CAA8C;AAArC,sGAAA,SAAS,OAAA;AAClB,2CAA0C;AAAjC,kGAAA,OAAO,OAAA;AAChB,iDAAkE;AAAzD,wGAAA,UAAU,OAAA;AAEnB,uDAAsD;AAA7C,8GAAA,aAAa,OAAA;AACtB,6DAAwF;AAA/E,oHAAA,gBAAgB,OAAA;AAGzB,WAAW;AACX;;GAEG;AACH,+DAA+C;AAE/C,mBAAmB;AACnB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,mDAAuE;AAA9D,gHAAA,cAAc,OAAA;AACvB,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AAGrB,yEAAwE;AAA/D,sGAAA,SAAS,OAAA;AAClB,+EAA8E;AAArE,4GAAA,YAAY,OAAA;AACrB,+EAA8E;AAArE,8GAAA,aAAa,OAAA;AACtB,qEAAoE;AAA3D,oGAAA,QAAQ,OAAA;AACjB,uEAAsE;AAA7D,4GAAA,YAAY,OAAA;AACrB,2EAA0E;AAAjE,gHAAA,cAAc,OAAA;AACvB,6DAA4D;AAAnD,oGAAA,QAAQ,OAAA;AAOjB,2CASsB;AARpB,mGAAA,KAAK,OAAA;AAEL,kGAAA,IAAI,OAAA;AAEJ,mGAAA,KAAK,OAAA;AAEL,wGAAA,UAAU,OAAA;AAIZ,uDAA+D;AAAtD,6HAAA,yBAAyB,OAAA;AAUlC;;GAEG;AACH,uCAAsC;AAA7B,4FAAA,IAAI,OAAA;AAEb,mEAAiE;AAAxD,uHAAA,iBAAiB,OAAA","sourcesContent":["// Expo Router API\nimport { Navigator, Slot } from './views/Navigator';\n\nexport {\n useRouter,\n useUnstableGlobalHref,\n usePathname,\n useNavigationContainerRef,\n useGlobalSearchParams,\n useLocalSearchParams,\n useSegments,\n useRootNavigation,\n useRootNavigationState,\n useLoaderData,\n useCurrentRouteInfo,\n} from './hooks';\n\nexport { router, type ImperativeRouter } from './imperative-api';\n\nexport { withLayoutContext } from './layouts/withLayoutContext';\nexport { Navigator, Slot };\n\n// Expo Router Views\nexport { ExpoRoot } from './ExpoRoot';\nexport { Unmatched } from './views/Unmatched';\nexport { Sitemap } from './views/Sitemap';\nexport { useSitemap, type SitemapType } from './views/useSitemap';\nexport type { ErrorBoundaryProps } from './views/Try';\nexport { ErrorBoundary } from './views/ErrorBoundary';\nexport { SuspenseFallback, type SuspenseFallbackProps } from './views/SuspenseFallback';\nexport type { ScreenProps } from './useScreens';\n\n// Platform\n/**\n * @hidden\n */\nexport * as SplashScreen from './views/Splash';\n\n// React Navigation\nexport { useNavigation } from './useNavigation';\nexport { useFocusEffect, type EffectCallback } from './useFocusEffect';\nexport { useIsFocused } from './useIsFocused';\nexport type { ResultState } from './fork/getStateFromPath';\n\nexport { DarkTheme } from './react-navigation/native/theming/DarkTheme';\nexport { DefaultTheme } from './react-navigation/native/theming/DefaultTheme';\nexport { ThemeProvider } from './react-navigation/core/theming/ThemeProvider';\nexport { useTheme } from './react-navigation/core/theming/useTheme';\nexport { useRoutePath } from './react-navigation/native/useRoutePath';\nexport { useScrollToTop } from './react-navigation/native/useScrollToTop';\nexport { useRoute } from './react-navigation/core/useRoute';\n\nexport type { RedirectConfig } from './getRoutesCore';\nexport type { SingularOptions } from './useScreens';\n\nexport type * from './types';\n\nexport {\n Badge,\n type BadgeProps,\n Icon,\n type IconProps,\n Label,\n type LabelProps,\n VectorIcon,\n type VectorIconProps,\n} from './primitives';\n\nexport { unstable_navigationEvents } from './navigationEvents';\nexport type {\n PagePreloadedEvent,\n PageFocusedEvent,\n PageBlurredEvent,\n PageRemoved,\n ActionDispatchedEvent,\n AnalyticsEvent,\n} from './navigationEvents';\n\n/**\n * @deprecated Use `import { Tabs } from 'expo-router/js-tabs'` instead.\n */\nexport { Tabs } from './layouts/Tabs';\n\nexport { ExperimentalStack } from './layouts/experimental-stack';\nexport type {\n ExperimentalStackNavigationOptions,\n ExperimentalStackNavigationEventMap,\n ExperimentalStackNavigationProp,\n ExperimentalStackScreenProps,\n} from './layouts/experimental-stack';\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/navigationEvents/index.d.ts b/packages/expo-router/build/navigationEvents/index.d.ts index ae78f28574647c..6108b62152e0b3 100644 --- a/packages/expo-router/build/navigationEvents/index.d.ts +++ b/packages/expo-router/build/navigationEvents/index.d.ts @@ -1,6 +1,6 @@ -import type { PageWillRender, PageFocusedEvent, PageBlurredEvent, PageRemoved, ActionDispatchedEvent } from './types'; -export type { PageWillRender, PageFocusedEvent, PageBlurredEvent, PageRemoved, ActionDispatchedEvent, } from './types'; -export type AnalyticsEvent = PageWillRender | PageFocusedEvent | PageBlurredEvent | PageRemoved | ActionDispatchedEvent; +import type { PagePreloadedEvent, PageFocusedEvent, PageBlurredEvent, PageRemoved, ActionDispatchedEvent } from './types'; +export type { PagePreloadedEvent, PageFocusedEvent, PageBlurredEvent, PageRemoved, ActionDispatchedEvent, } from './types'; +export type AnalyticsEvent = PagePreloadedEvent | PageFocusedEvent | PageBlurredEvent | PageRemoved | ActionDispatchedEvent; type EventTypeName = AnalyticsEvent['type']; type Payload = Omit = Omit, 'type'>;\n\nconst subscribers: {\n [K in EventTypeName]?: Set<(event: Payload) => void>;\n} = {};\n\nfunction addListener(\n eventType: EventType,\n callback: (event: Payload) => void\n) {\n if (!availableEvents.includes(eventType)) {\n throw new Error(`Unsupported event type: ${eventType}`);\n }\n if (!subscribers[eventType]) {\n subscribers[eventType] = new Set() as (typeof subscribers)[EventType];\n }\n subscribers[eventType]!.add(callback);\n return () => {\n subscribers[eventType]!.delete(callback);\n if (subscribers[eventType]!.size === 0) {\n delete subscribers[eventType];\n }\n };\n}\n\nexport function emit(type: EventType, event: Payload) {\n const subscribersForEvent = subscribers[type];\n if (subscribersForEvent) {\n for (const callback of subscribersForEvent) {\n callback(event);\n }\n }\n}\n\nlet enabled = false;\n\nexport const unstable_navigationEvents = {\n addListener,\n emit,\n enable: () => {\n enabled = true;\n },\n isEnabled: () => {\n return enabled;\n },\n};\n"]} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/navigationEvents/index.ts"],"names":[],"mappings":";;;AAyDA,oBAOC;AAzCD,MAAM,eAAe,GAA6B;IAChD,eAAe;IACf,aAAa;IACb,aAAa;IACb,aAAa;IACb,kBAAkB;CACnB,CAAC;AAKF,MAAM,WAAW,GAEb,EAAE,CAAC;AAEP,SAAS,WAAW,CAClB,SAAoB,EACpB,QAA6C;IAE7C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,EAAqC,CAAC;IACxE,CAAC;IACD,WAAW,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,GAAG,EAAE;QACV,WAAW,CAAC,SAAS,CAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,WAAW,CAAC,SAAS,CAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,IAAI,CAAkC,IAAe,EAAE,KAAyB;IAC9F,MAAM,mBAAmB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,mBAAmB,EAAE,CAAC;QACxB,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;YAC3C,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,OAAO,GAAG,KAAK,CAAC;AAEP,QAAA,yBAAyB,GAAG;IACvC,WAAW;IACX,IAAI;IACJ,MAAM,EAAE,GAAG,EAAE;QACX,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,SAAS,EAAE,GAAG,EAAE;QACd,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC","sourcesContent":["import type {\n PagePreloadedEvent,\n PageFocusedEvent,\n PageBlurredEvent,\n PageRemoved,\n ActionDispatchedEvent,\n} from './types';\n\nexport type {\n PagePreloadedEvent,\n PageFocusedEvent,\n PageBlurredEvent,\n PageRemoved,\n ActionDispatchedEvent,\n} from './types';\n\nexport type AnalyticsEvent =\n | PagePreloadedEvent\n | PageFocusedEvent\n | PageBlurredEvent\n | PageRemoved\n | ActionDispatchedEvent;\n\nconst availableEvents: AnalyticsEvent['type'][] = [\n 'pagePreloaded',\n 'pageFocused',\n 'pageBlurred',\n 'pageRemoved',\n 'actionDispatched',\n];\n\ntype EventTypeName = AnalyticsEvent['type'];\ntype Payload = Omit, 'type'>;\n\nconst subscribers: {\n [K in EventTypeName]?: Set<(event: Payload) => void>;\n} = {};\n\nfunction addListener(\n eventType: EventType,\n callback: (event: Payload) => void\n) {\n if (!availableEvents.includes(eventType)) {\n throw new Error(`Unsupported event type: ${eventType}`);\n }\n if (!subscribers[eventType]) {\n subscribers[eventType] = new Set() as (typeof subscribers)[EventType];\n }\n subscribers[eventType]!.add(callback);\n return () => {\n subscribers[eventType]!.delete(callback);\n if (subscribers[eventType]!.size === 0) {\n delete subscribers[eventType];\n }\n };\n}\n\nexport function emit(type: EventType, event: Payload) {\n const subscribersForEvent = subscribers[type];\n if (subscribersForEvent) {\n for (const callback of subscribersForEvent) {\n callback(event);\n }\n }\n}\n\nlet enabled = false;\n\nexport const unstable_navigationEvents = {\n addListener,\n emit,\n enable: () => {\n enabled = true;\n },\n isEnabled: () => {\n return enabled;\n },\n};\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/navigationEvents/types.d.ts b/packages/expo-router/build/navigationEvents/types.d.ts index eadfd8b99c7666..f94e5ff0c4165d 100644 --- a/packages/expo-router/build/navigationEvents/types.d.ts +++ b/packages/expo-router/build/navigationEvents/types.d.ts @@ -6,12 +6,13 @@ export interface BasePageEvent { screenId: string; } /** - * The rendering of the page started - * - * This can happen if screen is to be focused for the first time or when the screen is preloaded + * The page rendered as part of a preload (e.g. `router.prefetch()`) and is not + * currently focused. If the user later navigates to this route, the matching + * `pageFocused` will fire then; the preload may also be invalidated or the + * route unmounted (`pageRemoved`) without a focus. */ -export interface PageWillRender extends BasePageEvent { - type: 'pageWillRender'; +export interface PagePreloadedEvent extends BasePageEvent { + type: 'pagePreloaded'; } export interface PageFocusedEvent extends BasePageEvent { type: 'pageFocused'; diff --git a/packages/expo-router/build/navigationEvents/types.d.ts.map b/packages/expo-router/build/navigationEvents/types.d.ts.map index c1946a4977564b..dd61a416da0b53 100644 --- a/packages/expo-router/build/navigationEvents/types.d.ts.map +++ b/packages/expo-router/build/navigationEvents/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/navigationEvents/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,kBAAkB,CAAC;IACzB,8EAA8E;IAC9E,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACrC,KAAK,EAAE,oBAAoB,CAAC;CAC7B"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/navigationEvents/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,kBAAkB,CAAC;IACzB,8EAA8E;IAC9E,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACrC,KAAK,EAAE,oBAAoB,CAAC;CAC7B"} \ No newline at end of file diff --git a/packages/expo-router/build/navigationEvents/types.js.map b/packages/expo-router/build/navigationEvents/types.js.map index 79d2680924738d..d442cd8db932fb 100644 --- a/packages/expo-router/build/navigationEvents/types.js.map +++ b/packages/expo-router/build/navigationEvents/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/navigationEvents/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ReactNavigationState } from '../global-state/types';\nimport type { NavigationAction } from '../react-navigation';\n\nexport interface BasePageEvent {\n pathname: string;\n params: Record;\n screenId: string;\n}\n\n/**\n * The rendering of the page started\n *\n * This can happen if screen is to be focused for the first time or when the screen is preloaded\n */\nexport interface PageWillRender extends BasePageEvent {\n type: 'pageWillRender';\n}\n\nexport interface PageFocusedEvent extends BasePageEvent {\n type: 'pageFocused';\n}\n\nexport interface PageBlurredEvent extends BasePageEvent {\n type: 'pageBlurred';\n}\n\nexport interface PageRemoved extends BasePageEvent {\n type: 'pageRemoved';\n}\n\nexport interface ActionDispatchedEvent {\n type: 'actionDispatched';\n /** The action type from the dispatched NavigationAction (e.g. `NAVIGATE`). */\n actionType: NavigationAction['type'];\n payload: NavigationAction['payload'];\n state: ReactNavigationState;\n}\n"]} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/navigationEvents/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ReactNavigationState } from '../global-state/types';\nimport type { NavigationAction } from '../react-navigation';\n\nexport interface BasePageEvent {\n pathname: string;\n params: Record;\n screenId: string;\n}\n\n/**\n * The page rendered as part of a preload (e.g. `router.prefetch()`) and is not\n * currently focused. If the user later navigates to this route, the matching\n * `pageFocused` will fire then; the preload may also be invalidated or the\n * route unmounted (`pageRemoved`) without a focus.\n */\nexport interface PagePreloadedEvent extends BasePageEvent {\n type: 'pagePreloaded';\n}\n\nexport interface PageFocusedEvent extends BasePageEvent {\n type: 'pageFocused';\n}\n\nexport interface PageBlurredEvent extends BasePageEvent {\n type: 'pageBlurred';\n}\n\nexport interface PageRemoved extends BasePageEvent {\n type: 'pageRemoved';\n}\n\nexport interface ActionDispatchedEvent {\n type: 'actionDispatched';\n /** The action type from the dispatched NavigationAction (e.g. `NAVIGATE`). */\n actionType: NavigationAction['type'];\n payload: NavigationAction['payload'];\n state: ReactNavigationState;\n}\n"]} \ No newline at end of file diff --git a/packages/expo-router/build/useScreens.js b/packages/expo-router/build/useScreens.js index 006be2ef0202e3..a8e06ded198866 100644 --- a/packages/expo-router/build/useScreens.js +++ b/packages/expo-router/build/useScreens.js @@ -263,10 +263,11 @@ function AnalyticsListeners({ navigation, screenId, }) { const isFirstRenderRef = react_2.default.useRef(true); const hasBlurredRef = react_2.default.useRef(true); const routeInfo = (0, hooks_1.useCurrentRouteInfo)(); + const isFocused = navigation.isFocused(); if (isFirstRenderRef.current) { isFirstRenderRef.current = false; - if (routeInfo) { - navigationEvents_1.unstable_navigationEvents.emit('pageWillRender', { + if (routeInfo && !isFocused) { + navigationEvents_1.unstable_navigationEvents.emit('pagePreloaded', { pathname: routeInfo.pathname, params: routeInfo.params, screenId, @@ -285,7 +286,6 @@ function AnalyticsListeners({ navigation, screenId, }) { } return () => { }; }, [routeInfo?.params, routeInfo?.pathname, screenId]); - const isFocused = navigation.isFocused(); // Emit `pageFocused` from an effect — not during render — so it fires after the // focused screen's content has committed. `hasBlurredRef` deduplicates across both paths. (0, react_2.useEffect)(() => { diff --git a/packages/expo-router/build/useScreens.js.map b/packages/expo-router/build/useScreens.js.map index dc50d0e77ff482..18bfe1d6a1b543 100644 --- a/packages/expo-router/build/useScreens.js.map +++ b/packages/expo-router/build/useScreens.js.map @@ -1 +1 @@ -{"version":3,"file":"useScreens.js","sourceRoot":"","sources":["../src/useScreens.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React, { use, useEffect } from 'react';\n\nimport type { LoadedRoute, RouteNode } from './Route';\nimport { SuspenseFallbackContext, Route, sortRoutesWithInitial, useRouteNode } from './Route';\nimport { useExpoRouterStore } from './global-state/storeContext';\nimport { useColorSchemeChangesIfNeeded } from './global-state/utils';\nimport { useCurrentRouteInfo } from './hooks';\nimport EXPO_ROUTER_IMPORT_MODE from './import-mode';\nimport { ZoomTransitionEnabler } from './link/zoom/ZoomTransitionEnabler';\nimport { ZoomTransitionTargetContextProvider } from './link/zoom/zoom-transition-context-providers';\nimport { unstable_navigationEvents } from './navigationEvents';\nimport {\n hasParam,\n INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME,\n removeParams,\n} from './navigationParams';\nimport { Screen } from './primitives';\nimport type { BottomTabNavigationEventMap } from './react-navigation/bottom-tabs';\nimport {\n useStateForPath,\n type EventConsumer,\n type EventMapBase,\n type NavigationProp,\n type NavigationState,\n type ParamListBase,\n type RouteProp,\n type ScreenListeners,\n} from './react-navigation/native';\nimport type { NativeStackNavigationEventMap } from './react-navigation/native-stack';\nimport type { UnknownOutputParams } from './types';\nimport { EmptyRoute } from './views/EmptyRoute';\nimport {\n SuspenseFallback as DefaultSuspenseFallback,\n type SuspenseFallbackProps,\n} from './views/SuspenseFallback';\nimport { Try } from './views/Try';\n\nexport type ScreenProps<\n TOptions extends Record = Record,\n TState extends NavigationState = NavigationState,\n TEventMap extends EventMapBase = EventMapBase,\n> = {\n /** Name is required when used inside a Layout component. */\n name?: string;\n /**\n * Redirect to the nearest sibling route.\n * If all children are `redirect={true}`, the layout will render `null` as there are no children to render.\n */\n redirect?: boolean;\n initialParams?: Record;\n options?:\n | TOptions\n | ((prop: { route: RouteProp; navigation: any }) => TOptions);\n\n listeners?:\n | ScreenListeners\n | ((prop: {\n route: RouteProp;\n navigation: any;\n }) => ScreenListeners);\n\n getId?: ({ params }: { params?: Record }) => string | undefined;\n\n dangerouslySingular?: SingularOptions;\n};\n\nexport type SingularOptions =\n | boolean\n | ((name: string, params: UnknownOutputParams) => string | undefined);\n\nfunction getSortedChildren(\n children: RouteNode[],\n order: ScreenProps[] = [],\n initialRouteName?: string\n): { route: RouteNode; props: Partial }[] {\n if (!order?.length) {\n return children\n .sort(sortRoutesWithInitial(initialRouteName))\n .map((route) => ({ route, props: {} }));\n }\n const entries = [...children];\n\n const ordered = order\n .map(\n ({\n name,\n redirect,\n initialParams,\n listeners,\n options,\n getId,\n dangerouslySingular: singular,\n }) => {\n if (!entries.length) {\n console.warn(\n `[Layout children]: Too many screens defined. Route \"${name}\" is extraneous.`\n );\n return null;\n }\n const matchIndex = entries.findIndex(\n (child) => child.route === name || child.route === `${name}/index`\n );\n if (matchIndex === -1) {\n console.warn(\n `[Layout children]: No route named \"${name}\" exists in nested children:`,\n children.map(({ route }) => route)\n );\n return null;\n } else {\n // Get match and remove from entries\n const match = entries[matchIndex];\n entries.splice(matchIndex, 1);\n\n // Ensure to return null after removing from entries.\n if (redirect) {\n if (typeof redirect === 'string') {\n throw new Error(`Redirecting to a specific route is not supported yet.`);\n }\n return null;\n }\n\n if (getId) {\n console.warn(\n `Deprecated: prop 'getId' on screen ${name} is deprecated. Please rename the prop to 'dangerouslySingular'`\n );\n if (singular) {\n console.warn(\n `Screen ${name} cannot use both getId and dangerouslySingular together.`\n );\n }\n } else if (singular) {\n // If singular is set, use it as the getId function.\n if (typeof singular === 'string') {\n getId = () => singular;\n } else if (typeof singular === 'function' && name) {\n getId = (options) => singular(name, options.params || {});\n } else if (singular === true && name) {\n getId = (options) => getSingularId(name, options);\n }\n }\n\n return {\n route: match,\n props: { initialParams, listeners, options, getId },\n };\n }\n }\n )\n .filter(Boolean) as {\n route: RouteNode;\n props: Partial;\n }[];\n\n // Add any remaining children\n ordered.push(\n ...entries.sort(sortRoutesWithInitial(initialRouteName)).map((route) => ({ route, props: {} }))\n );\n\n return ordered;\n}\n\n/**\n * @returns React Navigation screens sorted by the `route` property.\n */\nexport function useSortedScreens(\n order: ScreenProps[],\n protectedScreens: Set,\n useOnlyUserDefinedScreens: boolean = false\n): React.ReactNode[] {\n const node = useRouteNode();\n\n const nodeChildren = node?.children ?? [];\n const children = useOnlyUserDefinedScreens\n ? nodeChildren.filter((child) =>\n order.some(\n (userDefinedScreen) =>\n userDefinedScreen.name === child.route ||\n `${userDefinedScreen.name}/index` === child.route\n )\n )\n : nodeChildren;\n\n const sorted = children.length ? getSortedChildren(children, order, node?.initialRouteName) : [];\n return React.useMemo(\n () =>\n sorted\n .filter((item) => {\n const route = item.route.route;\n return (\n !protectedScreens.has(route) && !protectedScreens.has(route.replace(/\\/index$/, ''))\n );\n })\n .map((value) => {\n return routeToScreen(value.route, value.props);\n }),\n [sorted, protectedScreens]\n );\n}\n\nfunction fromImport(\n value: RouteNode,\n { ErrorBoundary, SuspenseFallback, ...component }: LoadedRoute\n) {\n // If possible, add a more helpful display name for the component stack to improve debugging of React errors such as `Text strings must be rendered within a component.`.\n if (component?.default && __DEV__) {\n component.default.displayName ??= `${component.default.name ?? 'Route'}(${value.contextKey})`;\n }\n\n if (ErrorBoundary) {\n const Wrapped = React.forwardRef((props: any, ref: any) => {\n const children = React.createElement(component.default || EmptyRoute, {\n ...props,\n ref,\n });\n return {children};\n });\n\n if (__DEV__) {\n Wrapped.displayName = `ErrorBoundary(${value.contextKey})`;\n }\n\n return {\n default: Wrapped,\n SuspenseFallback,\n };\n }\n if (process.env.NODE_ENV !== 'production') {\n if (\n typeof component.default === 'object' &&\n component.default &&\n Object.keys(component.default).length === 0\n ) {\n return { default: EmptyRoute, SuspenseFallback };\n }\n }\n\n return { default: component.default, SuspenseFallback };\n}\n\nfunction fromLoadedRoute(value: RouteNode, res: LoadedRoute) {\n if (!(res instanceof Promise)) {\n return fromImport(value, res);\n }\n\n return res.then(fromImport.bind(null, value));\n}\n\n// TODO: Maybe there's a more React-y way to do this?\n// Without this store, the process enters a recursive loop.\nconst qualifiedStore = new WeakMap>();\n\n/** Wrap the component with various enhancements and add access to child routes. */\nexport function getQualifiedRouteComponent(value: RouteNode) {\n if (qualifiedStore.has(value)) {\n return qualifiedStore.get(value)!;\n }\n\n let ScreenComponent:\n | React.ForwardRefExoticComponent>\n | React.ComponentType<{ segment?: string }>;\n\n let LayoutSuspenseFallback: React.ComponentType | undefined;\n\n // TODO: This ensures sync doesn't use React.lazy, but it's not ideal.\n if (EXPO_ROUTER_IMPORT_MODE === 'lazy') {\n ScreenComponent = React.lazy(async () => {\n const res = value.loadRoute();\n return fromLoadedRoute(value, res) as Promise<{\n default: React.ComponentType;\n }>;\n });\n\n if (__DEV__) {\n ScreenComponent.displayName = `AsyncRoute(${value.route})`;\n }\n } else {\n const res = value.loadRoute();\n const result = fromImport(value, res);\n ScreenComponent = result.default!;\n LayoutSuspenseFallback = value.type === 'layout' ? result.SuspenseFallback : undefined;\n }\n const WrappedScreenComponent: typeof ScreenComponent = (props: object) => {\n useColorSchemeChangesIfNeeded();\n return ;\n };\n function BaseRoute({\n // Remove these React Navigation props to\n // enforce usage of expo-router hooks (where the query params are correct).\n route,\n navigation,\n\n // Pass all other props to the component\n ...props\n }: {\n route?: RouteProp;\n navigation: Omit<\n NavigationProp<\n ParamListBase,\n string,\n undefined,\n NavigationState,\n object,\n NativeStackNavigationEventMap | BottomTabNavigationEventMap\n >,\n 'getState'\n > & {\n getState(): NavigationState | undefined;\n };\n }) {\n const stateForPath = useStateForPath();\n const isFocused = navigation.isFocused();\n const store = useExpoRouterStore();\n const InheritedSuspenseFallback = use(SuspenseFallbackContext);\n\n const ResolvedSuspenseFallback =\n EXPO_ROUTER_IMPORT_MODE === 'lazy'\n ? DefaultSuspenseFallback\n : (LayoutSuspenseFallback ?? InheritedSuspenseFallback ?? DefaultSuspenseFallback);\n const providedSuspenseFallback =\n value.type === 'layout'\n ? (LayoutSuspenseFallback ?? InheritedSuspenseFallback)\n : InheritedSuspenseFallback;\n\n if (isFocused) {\n const state = navigation.getState();\n const isLeaf = !(state && 'state' in state.routes[state.index]!);\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }\n\n useEffect(\n () =>\n navigation.addListener('focus', () => {\n const state = navigation.getState();\n const isLeaf = !(state && 'state' in state.routes[state.index]!);\n // Because setFocusedState caches the route info, this call will only trigger rerenders\n // if the component itself didn’t rerender and the route info changed.\n // Otherwise, the update from the `if` above will handle it,\n // and this won’t cause a redundant second update.\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }),\n [navigation]\n );\n\n useEffect(() => {\n return navigation.addListener('transitionEnd', (e) => {\n if (!e?.data?.closing) {\n // When navigating to a screen, remove the no animation param to re-enable animations\n // Otherwise the navigation back would also have no animation\n if (hasParam(route?.params, INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME)) {\n navigation.replaceParams(\n removeParams(route?.params, [INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME])\n );\n }\n }\n });\n }, [navigation]);\n\n const isRouteType = value.type === 'route';\n const hasRouteKey = !!route?.key;\n\n return (\n \n \n {unstable_navigationEvents.isEnabled() && isRouteType && hasRouteKey && (\n \n )}\n \n \n \n }>\n \n \n \n \n \n );\n }\n\n if (__DEV__) {\n BaseRoute.displayName = `Route(${value.route})`;\n }\n\n qualifiedStore.set(value, BaseRoute);\n return BaseRoute;\n}\n\nfunction AnalyticsListeners({\n navigation,\n screenId,\n}: {\n navigation: EventConsumer & {\n isFocused(): boolean;\n };\n screenId: string;\n}) {\n const isFirstRenderRef = React.useRef(true);\n const hasBlurredRef = React.useRef(true);\n const routeInfo = useCurrentRouteInfo();\n\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n if (routeInfo) {\n unstable_navigationEvents.emit('pageWillRender', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n }\n }\n\n useEffect(() => {\n if (routeInfo) {\n return () => {\n unstable_navigationEvents.emit('pageRemoved', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n };\n }\n return () => {};\n }, [routeInfo?.params, routeInfo?.pathname, screenId]);\n\n const isFocused = navigation.isFocused();\n\n // Emit `pageFocused` from an effect — not during render — so it fires after the\n // focused screen's content has committed. `hasBlurredRef` deduplicates across both paths.\n useEffect(() => {\n if (isFocused && routeInfo && hasBlurredRef.current) {\n unstable_navigationEvents.emit('pageFocused', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = false;\n }\n }, [isFocused, routeInfo?.pathname, routeInfo?.params, screenId]);\n\n useEffect(() => {\n if (routeInfo) {\n const cleanFocus = navigation.addListener('focus', () => {\n // If the screen was not blurred, don't emit focused again\n // hasBlurredRef will be false when the screen was initially focused\n if (hasBlurredRef.current) {\n unstable_navigationEvents.emit('pageFocused', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = false;\n }\n });\n const cleanBlur = navigation.addListener('blur', () => {\n unstable_navigationEvents.emit('pageBlurred', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = true;\n });\n return () => {\n cleanFocus();\n cleanBlur();\n };\n }\n return () => {};\n }, [navigation, routeInfo?.pathname, routeInfo?.params, screenId]);\n\n return null;\n}\n\nexport function screenOptionsFactory(\n route: RouteNode,\n options?: ScreenProps['options']\n): ScreenProps['options'] {\n return (args) => {\n // Only eager load generated components\n const staticOptions = route.generated ? route.loadRoute()?.getNavOptions : null;\n const staticResult = typeof staticOptions === 'function' ? staticOptions(args) : staticOptions;\n const dynamicResult = typeof options === 'function' ? options?.(args) : options;\n const output = {\n ...staticResult,\n ...dynamicResult,\n };\n\n // Prevent generated screens from showing up in the tab bar.\n if (route.internal) {\n output.tabBarItemStyle = { display: 'none' };\n output.tabBarButton = () => null;\n // TODO: React Navigation doesn't provide a way to prevent rendering the drawer item.\n output.drawerItemStyle = { height: 0, display: 'none' };\n }\n\n return output;\n };\n}\n\nexport function routeToScreen(\n route: RouteNode,\n { options, getId, ...props }: Partial = {}\n) {\n return (\n getQualifiedRouteComponent(route)}\n />\n );\n}\n\nexport function getSingularId(name: string, options: Record = {}) {\n return name\n .split('/')\n .map((segment) => {\n if (segment.startsWith('[...')) {\n return options.params?.[segment.slice(4, -1)]?.join('/') || segment;\n } else if (segment.startsWith('[') && segment.endsWith(']')) {\n return options.params?.[segment.slice(1, -1)] || segment;\n } else {\n return segment;\n }\n })\n .join('/');\n}\n"]} \ No newline at end of file +{"version":3,"file":"useScreens.js","sourceRoot":"","sources":["../src/useScreens.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsKb,4CAiCC;AAuDD,gEA+IC;AAuFD,oDAwBC;AAED,sCAcC;AAED,sCAaC;;;AAzhBD,+CAA8C;AAG9C,mCAA8F;AAC9F,8DAAiE;AACjE,gDAAqE;AACrE,mCAA8C;AAC9C,gEAAoD;AACpD,6EAA0E;AAC1E,qGAAoG;AACpG,yDAA+D;AAC/D,yDAI4B;AAC5B,6CAAsC;AAEtC,sDASmC;AAGnC,mDAAgD;AAChD,+DAGkC;AAClC,qCAAkC;AAmClC,SAAS,iBAAiB,CACxB,QAAqB,EACrB,QAAuB,EAAE,EACzB,gBAAyB;IAEzB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,QAAQ;aACZ,IAAI,CAAC,IAAA,6BAAqB,EAAC,gBAAgB,CAAC,CAAC;aAC7C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAE9B,MAAM,OAAO,GAAG,KAAK;SAClB,GAAG,CACF,CAAC,EACC,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,SAAS,EACT,OAAO,EACP,KAAK,EACL,mBAAmB,EAAE,QAAQ,GAC9B,EAAE,EAAE;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CACV,uDAAuD,IAAI,kBAAkB,CAC9E,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAClC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,IAAI,QAAQ,CACnE,CAAC;QACF,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CACV,sCAAsC,IAAI,8BAA8B,EACxE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CACnC,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAE9B,qDAAqD;YACrD,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;gBAC3E,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CACV,sCAAsC,IAAI,iEAAiE,CAC5G,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CACV,UAAU,IAAI,0DAA0D,CACzE,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,IAAI,QAAQ,EAAE,CAAC;gBACpB,oDAAoD;gBACpD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,KAAK,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;gBACzB,CAAC;qBAAM,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,IAAI,EAAE,CAAC;oBAClD,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBAC5D,CAAC;qBAAM,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC;oBACrC,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;aACpD,CAAC;QACJ,CAAC;IACH,CAAC,CACF;SACA,MAAM,CAAC,OAAO,CAGd,CAAC;IAEJ,6BAA6B;IAC7B,OAAO,CAAC,IAAI,CACV,GAAG,OAAO,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAChG,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,KAAoB,EACpB,gBAA6B,EAC7B,4BAAqC,KAAK;IAE1C,MAAM,IAAI,GAAG,IAAA,oBAAY,GAAE,CAAC;IAE5B,MAAM,YAAY,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,yBAAyB;QACxC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5B,KAAK,CAAC,IAAI,CACR,CAAC,iBAAiB,EAAE,EAAE,CACpB,iBAAiB,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK;YACtC,GAAG,iBAAiB,CAAC,IAAI,QAAQ,KAAK,KAAK,CAAC,KAAK,CACpD,CACF;QACH,CAAC,CAAC,YAAY,CAAC;IAEjB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,OAAO,eAAK,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,MAAM;SACH,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,OAAO,CACL,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CACrF,CAAC;IACJ,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,OAAO,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,EACN,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,KAAgB,EAChB,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,SAAS,EAAe;IAE9D,gLAAgL;IAChL,IAAI,SAAS,EAAE,OAAO,IAAI,OAAO,EAAE,CAAC;QAClC,SAAS,CAAC,OAAO,CAAC,WAAW,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC;IAChG,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,eAAK,CAAC,UAAU,CAAC,CAAC,KAAU,EAAE,GAAQ,EAAE,EAAE;YACxD,MAAM,QAAQ,GAAG,eAAK,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,IAAI,uBAAU,EAAE;gBACpE,GAAG,KAAK;gBACR,GAAG;aACJ,CAAC,CAAC;YACH,OAAO,uBAAC,SAAG,IAAC,KAAK,EAAE,aAAa,YAAG,QAAQ,GAAO,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,WAAW,GAAG,iBAAiB,KAAK,CAAC,UAAU,GAAG,CAAC;QAC7D,CAAC;QAED,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,gBAAgB;SACjB,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC1C,IACE,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;YACrC,SAAS,CAAC,OAAO;YACjB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAC3C,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,uBAAU,EAAE,gBAAgB,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,eAAe,CAAC,KAAgB,EAAE,GAAgB;IACzD,IAAI,CAAC,CAAC,GAAG,YAAY,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,qDAAqD;AACrD,2DAA2D;AAC3D,MAAM,cAAc,GAAG,IAAI,OAAO,EAAuC,CAAC;AAE1E,mFAAmF;AACnF,SAAgB,0BAA0B,CAAC,KAAgB;IACzD,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IACpC,CAAC;IAED,IAAI,eAEyC,CAAC;IAE9C,IAAI,sBAA8E,CAAC;IAEnF,sEAAsE;IACtE,IAAI,qBAAuB,KAAK,MAAM,EAAE,CAAC;QACvC,eAAe,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACtC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YAC9B,OAAO,eAAe,CAAC,KAAK,EAAE,GAAG,CAE/B,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,eAAe,CAAC,WAAW,GAAG,cAAc,KAAK,CAAC,KAAK,GAAG,CAAC;QAC7D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACtC,eAAe,GAAG,MAAM,CAAC,OAAQ,CAAC;QAClC,sBAAsB,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,CAAC;IACD,MAAM,sBAAsB,GAA2B,CAAC,KAAa,EAAE,EAAE;QACvE,IAAA,qCAA6B,GAAE,CAAC;QAChC,OAAO,uBAAC,eAAe,OAAK,KAAK,GAAI,CAAC;IACxC,CAAC,CAAC;IACF,SAAS,SAAS,CAAC;IACjB,yCAAyC;IACzC,2EAA2E;IAC3E,KAAK,EACL,UAAU;IAEV,wCAAwC;IACxC,GAAG,KAAK,EAgBT;QACC,MAAM,YAAY,GAAG,IAAA,wBAAe,GAAE,CAAC;QACvC,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAA,iCAAkB,GAAE,CAAC;QACnC,MAAM,yBAAyB,GAAG,IAAA,WAAG,EAAC,+BAAuB,CAAC,CAAC;QAE/D,MAAM,wBAAwB,GAC5B,qBAAuB,KAAK,MAAM;YAChC,CAAC,CAAC,mCAAuB;YACzB,CAAC,CAAC,CAAC,sBAAsB,IAAI,yBAAyB,IAAI,mCAAuB,CAAC,CAAC;QACvF,MAAM,wBAAwB,GAC5B,KAAK,CAAC,IAAI,KAAK,QAAQ;YACrB,CAAC,CAAC,CAAC,sBAAsB,IAAI,yBAAyB,CAAC;YACvD,CAAC,CAAC,yBAAyB,CAAC;QAEhC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,CAAC;YACjE,IAAI,MAAM,IAAI,YAAY;gBAAE,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAClE,CAAC;QAED,IAAA,iBAAS,EACP,GAAG,EAAE,CACH,UAAU,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE;YACnC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,CAAC;YACjE,uFAAuF;YACvF,sEAAsE;YACtE,4DAA4D;YAC5D,kDAAkD;YAClD,IAAI,MAAM,IAAI,YAAY;gBAAE,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAClE,CAAC,CAAC,EACJ,CAAC,UAAU,CAAC,CACb,CAAC;QAEF,IAAA,iBAAS,EAAC,GAAG,EAAE;YACb,OAAO,UAAU,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;gBACnD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBACtB,qFAAqF;oBACrF,6DAA6D;oBAC7D,IAAI,IAAA,2BAAQ,EAAC,KAAK,EAAE,MAAM,EAAE,+DAA4C,CAAC,EAAE,CAAC;wBAC1E,UAAU,CAAC,aAAa,CACtB,IAAA,+BAAY,EAAC,KAAK,EAAE,MAAM,EAAE,CAAC,+DAA4C,CAAC,CAAC,CAC5E,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAEjB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;QAC3C,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC;QAEjC,OAAO,CACL,uBAAC,aAAK,IAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YACvC,wBAAC,+BAAuB,IAAC,KAAK,EAAE,wBAAwB,aACrD,4CAAyB,CAAC,SAAS,EAAE,IAAI,WAAW,IAAI,WAAW,IAAI,CACtE,uBAAC,kBAAkB,IAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,GAAI,CACpE,EACD,wBAAC,uEAAmC,IAAC,KAAK,EAAE,KAAK,aAC/C,uBAAC,6CAAqB,IAAC,KAAK,EAAE,KAAK,GAAI,EACvC,uBAAC,eAAK,CAAC,QAAQ,IACb,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,EAChD,QAAQ,EACN,uBAAC,wBAAwB,IACvB,KAAK,EAAE,KAAK,CAAC,UAAU,EACvB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAoC,GAChE,YAEJ,uBAAC,sBAAsB,OACjB,KAAK;oCACT,oEAAoE;oCACpE,gEAAgE;oCAChE,OAAO,EAAE,KAAK,CAAC,KAAK,GACpB,GACa,IACmB,IACd,GACpB,CACT,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,SAAS,CAAC,WAAW,GAAG,SAAS,KAAK,CAAC,KAAK,GAAG,CAAC;IAClD,CAAC;IAED,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACrC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,EAC1B,UAAU,EACV,QAAQ,GAMT;IACC,MAAM,gBAAgB,GAAG,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,IAAA,2BAAmB,GAAE,CAAC;IAExC,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;IAEzC,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAC7B,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAC;QACjC,IAAI,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,4CAAyB,CAAC,IAAI,CAAC,eAAe,EAAE;gBAC9C,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,GAAG,EAAE;gBACV,4CAAyB,CAAC,IAAI,CAAC,aAAa,EAAE;oBAC5C,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvD,gFAAgF;IAChF,0FAA0F;IAC1F,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,SAAS,IAAI,SAAS,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YACpD,4CAAyB,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC5C,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,QAAQ;aACT,CAAC,CAAC;YACH,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAElE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE;gBACtD,0DAA0D;gBAC1D,oEAAoE;gBACpE,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;oBAC1B,4CAAyB,CAAC,IAAI,CAAC,aAAa,EAAE;wBAC5C,QAAQ,EAAE,SAAS,CAAC,QAAQ;wBAC5B,MAAM,EAAE,SAAS,CAAC,MAAM;wBACxB,QAAQ;qBACT,CAAC,CAAC;oBACH,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;gBAChC,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE;gBACpD,4CAAyB,CAAC,IAAI,CAAC,aAAa,EAAE;oBAC5C,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,QAAQ;iBACT,CAAC,CAAC;gBACH,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,EAAE;gBACV,UAAU,EAAE,CAAC;gBACb,SAAS,EAAE,CAAC;YACd,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,oBAAoB,CAClC,KAAgB,EAChB,OAAgC;IAEhC,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,uCAAuC;QACvC,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,MAAM,YAAY,GAAG,OAAO,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAC/F,MAAM,aAAa,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAChF,MAAM,MAAM,GAAG;YACb,GAAG,YAAY;YACf,GAAG,aAAa;SACjB,CAAC;QAEF,4DAA4D;QAC5D,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,CAAC,eAAe,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC7C,MAAM,CAAC,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;YACjC,qFAAqF;YACrF,MAAM,CAAC,eAAe,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC1D,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAC3B,KAAgB,EAChB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,KAA2B,EAAE;IAEvD,OAAO,CACL,2BAAC,mBAAM,OACD,KAAK,EACT,IAAI,EAAE,KAAK,CAAC,KAAK,EACjB,GAAG,EAAE,KAAK,CAAC,KAAK,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,EAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC,GACrD,CACH,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY,EAAE,UAA+B,EAAE;IAC3E,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACf,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC;QACtE,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5D,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC","sourcesContent":["'use client';\n\nimport React, { use, useEffect } from 'react';\n\nimport type { LoadedRoute, RouteNode } from './Route';\nimport { SuspenseFallbackContext, Route, sortRoutesWithInitial, useRouteNode } from './Route';\nimport { useExpoRouterStore } from './global-state/storeContext';\nimport { useColorSchemeChangesIfNeeded } from './global-state/utils';\nimport { useCurrentRouteInfo } from './hooks';\nimport EXPO_ROUTER_IMPORT_MODE from './import-mode';\nimport { ZoomTransitionEnabler } from './link/zoom/ZoomTransitionEnabler';\nimport { ZoomTransitionTargetContextProvider } from './link/zoom/zoom-transition-context-providers';\nimport { unstable_navigationEvents } from './navigationEvents';\nimport {\n hasParam,\n INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME,\n removeParams,\n} from './navigationParams';\nimport { Screen } from './primitives';\nimport type { BottomTabNavigationEventMap } from './react-navigation/bottom-tabs';\nimport {\n useStateForPath,\n type EventConsumer,\n type EventMapBase,\n type NavigationProp,\n type NavigationState,\n type ParamListBase,\n type RouteProp,\n type ScreenListeners,\n} from './react-navigation/native';\nimport type { NativeStackNavigationEventMap } from './react-navigation/native-stack';\nimport type { UnknownOutputParams } from './types';\nimport { EmptyRoute } from './views/EmptyRoute';\nimport {\n SuspenseFallback as DefaultSuspenseFallback,\n type SuspenseFallbackProps,\n} from './views/SuspenseFallback';\nimport { Try } from './views/Try';\n\nexport type ScreenProps<\n TOptions extends Record = Record,\n TState extends NavigationState = NavigationState,\n TEventMap extends EventMapBase = EventMapBase,\n> = {\n /** Name is required when used inside a Layout component. */\n name?: string;\n /**\n * Redirect to the nearest sibling route.\n * If all children are `redirect={true}`, the layout will render `null` as there are no children to render.\n */\n redirect?: boolean;\n initialParams?: Record;\n options?:\n | TOptions\n | ((prop: { route: RouteProp; navigation: any }) => TOptions);\n\n listeners?:\n | ScreenListeners\n | ((prop: {\n route: RouteProp;\n navigation: any;\n }) => ScreenListeners);\n\n getId?: ({ params }: { params?: Record }) => string | undefined;\n\n dangerouslySingular?: SingularOptions;\n};\n\nexport type SingularOptions =\n | boolean\n | ((name: string, params: UnknownOutputParams) => string | undefined);\n\nfunction getSortedChildren(\n children: RouteNode[],\n order: ScreenProps[] = [],\n initialRouteName?: string\n): { route: RouteNode; props: Partial }[] {\n if (!order?.length) {\n return children\n .sort(sortRoutesWithInitial(initialRouteName))\n .map((route) => ({ route, props: {} }));\n }\n const entries = [...children];\n\n const ordered = order\n .map(\n ({\n name,\n redirect,\n initialParams,\n listeners,\n options,\n getId,\n dangerouslySingular: singular,\n }) => {\n if (!entries.length) {\n console.warn(\n `[Layout children]: Too many screens defined. Route \"${name}\" is extraneous.`\n );\n return null;\n }\n const matchIndex = entries.findIndex(\n (child) => child.route === name || child.route === `${name}/index`\n );\n if (matchIndex === -1) {\n console.warn(\n `[Layout children]: No route named \"${name}\" exists in nested children:`,\n children.map(({ route }) => route)\n );\n return null;\n } else {\n // Get match and remove from entries\n const match = entries[matchIndex];\n entries.splice(matchIndex, 1);\n\n // Ensure to return null after removing from entries.\n if (redirect) {\n if (typeof redirect === 'string') {\n throw new Error(`Redirecting to a specific route is not supported yet.`);\n }\n return null;\n }\n\n if (getId) {\n console.warn(\n `Deprecated: prop 'getId' on screen ${name} is deprecated. Please rename the prop to 'dangerouslySingular'`\n );\n if (singular) {\n console.warn(\n `Screen ${name} cannot use both getId and dangerouslySingular together.`\n );\n }\n } else if (singular) {\n // If singular is set, use it as the getId function.\n if (typeof singular === 'string') {\n getId = () => singular;\n } else if (typeof singular === 'function' && name) {\n getId = (options) => singular(name, options.params || {});\n } else if (singular === true && name) {\n getId = (options) => getSingularId(name, options);\n }\n }\n\n return {\n route: match,\n props: { initialParams, listeners, options, getId },\n };\n }\n }\n )\n .filter(Boolean) as {\n route: RouteNode;\n props: Partial;\n }[];\n\n // Add any remaining children\n ordered.push(\n ...entries.sort(sortRoutesWithInitial(initialRouteName)).map((route) => ({ route, props: {} }))\n );\n\n return ordered;\n}\n\n/**\n * @returns React Navigation screens sorted by the `route` property.\n */\nexport function useSortedScreens(\n order: ScreenProps[],\n protectedScreens: Set,\n useOnlyUserDefinedScreens: boolean = false\n): React.ReactNode[] {\n const node = useRouteNode();\n\n const nodeChildren = node?.children ?? [];\n const children = useOnlyUserDefinedScreens\n ? nodeChildren.filter((child) =>\n order.some(\n (userDefinedScreen) =>\n userDefinedScreen.name === child.route ||\n `${userDefinedScreen.name}/index` === child.route\n )\n )\n : nodeChildren;\n\n const sorted = children.length ? getSortedChildren(children, order, node?.initialRouteName) : [];\n return React.useMemo(\n () =>\n sorted\n .filter((item) => {\n const route = item.route.route;\n return (\n !protectedScreens.has(route) && !protectedScreens.has(route.replace(/\\/index$/, ''))\n );\n })\n .map((value) => {\n return routeToScreen(value.route, value.props);\n }),\n [sorted, protectedScreens]\n );\n}\n\nfunction fromImport(\n value: RouteNode,\n { ErrorBoundary, SuspenseFallback, ...component }: LoadedRoute\n) {\n // If possible, add a more helpful display name for the component stack to improve debugging of React errors such as `Text strings must be rendered within a component.`.\n if (component?.default && __DEV__) {\n component.default.displayName ??= `${component.default.name ?? 'Route'}(${value.contextKey})`;\n }\n\n if (ErrorBoundary) {\n const Wrapped = React.forwardRef((props: any, ref: any) => {\n const children = React.createElement(component.default || EmptyRoute, {\n ...props,\n ref,\n });\n return {children};\n });\n\n if (__DEV__) {\n Wrapped.displayName = `ErrorBoundary(${value.contextKey})`;\n }\n\n return {\n default: Wrapped,\n SuspenseFallback,\n };\n }\n if (process.env.NODE_ENV !== 'production') {\n if (\n typeof component.default === 'object' &&\n component.default &&\n Object.keys(component.default).length === 0\n ) {\n return { default: EmptyRoute, SuspenseFallback };\n }\n }\n\n return { default: component.default, SuspenseFallback };\n}\n\nfunction fromLoadedRoute(value: RouteNode, res: LoadedRoute) {\n if (!(res instanceof Promise)) {\n return fromImport(value, res);\n }\n\n return res.then(fromImport.bind(null, value));\n}\n\n// TODO: Maybe there's a more React-y way to do this?\n// Without this store, the process enters a recursive loop.\nconst qualifiedStore = new WeakMap>();\n\n/** Wrap the component with various enhancements and add access to child routes. */\nexport function getQualifiedRouteComponent(value: RouteNode) {\n if (qualifiedStore.has(value)) {\n return qualifiedStore.get(value)!;\n }\n\n let ScreenComponent:\n | React.ForwardRefExoticComponent>\n | React.ComponentType<{ segment?: string }>;\n\n let LayoutSuspenseFallback: React.ComponentType | undefined;\n\n // TODO: This ensures sync doesn't use React.lazy, but it's not ideal.\n if (EXPO_ROUTER_IMPORT_MODE === 'lazy') {\n ScreenComponent = React.lazy(async () => {\n const res = value.loadRoute();\n return fromLoadedRoute(value, res) as Promise<{\n default: React.ComponentType;\n }>;\n });\n\n if (__DEV__) {\n ScreenComponent.displayName = `AsyncRoute(${value.route})`;\n }\n } else {\n const res = value.loadRoute();\n const result = fromImport(value, res);\n ScreenComponent = result.default!;\n LayoutSuspenseFallback = value.type === 'layout' ? result.SuspenseFallback : undefined;\n }\n const WrappedScreenComponent: typeof ScreenComponent = (props: object) => {\n useColorSchemeChangesIfNeeded();\n return ;\n };\n function BaseRoute({\n // Remove these React Navigation props to\n // enforce usage of expo-router hooks (where the query params are correct).\n route,\n navigation,\n\n // Pass all other props to the component\n ...props\n }: {\n route?: RouteProp;\n navigation: Omit<\n NavigationProp<\n ParamListBase,\n string,\n undefined,\n NavigationState,\n object,\n NativeStackNavigationEventMap | BottomTabNavigationEventMap\n >,\n 'getState'\n > & {\n getState(): NavigationState | undefined;\n };\n }) {\n const stateForPath = useStateForPath();\n const isFocused = navigation.isFocused();\n const store = useExpoRouterStore();\n const InheritedSuspenseFallback = use(SuspenseFallbackContext);\n\n const ResolvedSuspenseFallback =\n EXPO_ROUTER_IMPORT_MODE === 'lazy'\n ? DefaultSuspenseFallback\n : (LayoutSuspenseFallback ?? InheritedSuspenseFallback ?? DefaultSuspenseFallback);\n const providedSuspenseFallback =\n value.type === 'layout'\n ? (LayoutSuspenseFallback ?? InheritedSuspenseFallback)\n : InheritedSuspenseFallback;\n\n if (isFocused) {\n const state = navigation.getState();\n const isLeaf = !(state && 'state' in state.routes[state.index]!);\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }\n\n useEffect(\n () =>\n navigation.addListener('focus', () => {\n const state = navigation.getState();\n const isLeaf = !(state && 'state' in state.routes[state.index]!);\n // Because setFocusedState caches the route info, this call will only trigger rerenders\n // if the component itself didn’t rerender and the route info changed.\n // Otherwise, the update from the `if` above will handle it,\n // and this won’t cause a redundant second update.\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }),\n [navigation]\n );\n\n useEffect(() => {\n return navigation.addListener('transitionEnd', (e) => {\n if (!e?.data?.closing) {\n // When navigating to a screen, remove the no animation param to re-enable animations\n // Otherwise the navigation back would also have no animation\n if (hasParam(route?.params, INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME)) {\n navigation.replaceParams(\n removeParams(route?.params, [INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME])\n );\n }\n }\n });\n }, [navigation]);\n\n const isRouteType = value.type === 'route';\n const hasRouteKey = !!route?.key;\n\n return (\n \n \n {unstable_navigationEvents.isEnabled() && isRouteType && hasRouteKey && (\n \n )}\n \n \n \n }>\n \n \n \n \n \n );\n }\n\n if (__DEV__) {\n BaseRoute.displayName = `Route(${value.route})`;\n }\n\n qualifiedStore.set(value, BaseRoute);\n return BaseRoute;\n}\n\nfunction AnalyticsListeners({\n navigation,\n screenId,\n}: {\n navigation: EventConsumer & {\n isFocused(): boolean;\n };\n screenId: string;\n}) {\n const isFirstRenderRef = React.useRef(true);\n const hasBlurredRef = React.useRef(true);\n const routeInfo = useCurrentRouteInfo();\n\n const isFocused = navigation.isFocused();\n\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n if (routeInfo && !isFocused) {\n unstable_navigationEvents.emit('pagePreloaded', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n }\n }\n\n useEffect(() => {\n if (routeInfo) {\n return () => {\n unstable_navigationEvents.emit('pageRemoved', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n };\n }\n return () => {};\n }, [routeInfo?.params, routeInfo?.pathname, screenId]);\n\n // Emit `pageFocused` from an effect — not during render — so it fires after the\n // focused screen's content has committed. `hasBlurredRef` deduplicates across both paths.\n useEffect(() => {\n if (isFocused && routeInfo && hasBlurredRef.current) {\n unstable_navigationEvents.emit('pageFocused', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = false;\n }\n }, [isFocused, routeInfo?.pathname, routeInfo?.params, screenId]);\n\n useEffect(() => {\n if (routeInfo) {\n const cleanFocus = navigation.addListener('focus', () => {\n // If the screen was not blurred, don't emit focused again\n // hasBlurredRef will be false when the screen was initially focused\n if (hasBlurredRef.current) {\n unstable_navigationEvents.emit('pageFocused', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = false;\n }\n });\n const cleanBlur = navigation.addListener('blur', () => {\n unstable_navigationEvents.emit('pageBlurred', {\n pathname: routeInfo.pathname,\n params: routeInfo.params,\n screenId,\n });\n hasBlurredRef.current = true;\n });\n return () => {\n cleanFocus();\n cleanBlur();\n };\n }\n return () => {};\n }, [navigation, routeInfo?.pathname, routeInfo?.params, screenId]);\n\n return null;\n}\n\nexport function screenOptionsFactory(\n route: RouteNode,\n options?: ScreenProps['options']\n): ScreenProps['options'] {\n return (args) => {\n // Only eager load generated components\n const staticOptions = route.generated ? route.loadRoute()?.getNavOptions : null;\n const staticResult = typeof staticOptions === 'function' ? staticOptions(args) : staticOptions;\n const dynamicResult = typeof options === 'function' ? options?.(args) : options;\n const output = {\n ...staticResult,\n ...dynamicResult,\n };\n\n // Prevent generated screens from showing up in the tab bar.\n if (route.internal) {\n output.tabBarItemStyle = { display: 'none' };\n output.tabBarButton = () => null;\n // TODO: React Navigation doesn't provide a way to prevent rendering the drawer item.\n output.drawerItemStyle = { height: 0, display: 'none' };\n }\n\n return output;\n };\n}\n\nexport function routeToScreen(\n route: RouteNode,\n { options, getId, ...props }: Partial = {}\n) {\n return (\n getQualifiedRouteComponent(route)}\n />\n );\n}\n\nexport function getSingularId(name: string, options: Record = {}) {\n return name\n .split('/')\n .map((segment) => {\n if (segment.startsWith('[...')) {\n return options.params?.[segment.slice(4, -1)]?.join('/') || segment;\n } else if (segment.startsWith('[') && segment.endsWith(']')) {\n return options.params?.[segment.slice(1, -1)] || segment;\n } else {\n return segment;\n }\n })\n .join('/');\n}\n"]} \ No newline at end of file diff --git a/packages/expo-router/src/exports.ts b/packages/expo-router/src/exports.ts index f2f399f0ad71d6..58055668a9325b 100644 --- a/packages/expo-router/src/exports.ts +++ b/packages/expo-router/src/exports.ts @@ -68,7 +68,7 @@ export { export { unstable_navigationEvents } from './navigationEvents'; export type { - PageWillRender, + PagePreloadedEvent, PageFocusedEvent, PageBlurredEvent, PageRemoved, diff --git a/packages/expo-router/src/navigationEvents/index.ts b/packages/expo-router/src/navigationEvents/index.ts index 528ed4ce9e1df7..2581af9be42050 100644 --- a/packages/expo-router/src/navigationEvents/index.ts +++ b/packages/expo-router/src/navigationEvents/index.ts @@ -1,5 +1,5 @@ import type { - PageWillRender, + PagePreloadedEvent, PageFocusedEvent, PageBlurredEvent, PageRemoved, @@ -7,7 +7,7 @@ import type { } from './types'; export type { - PageWillRender, + PagePreloadedEvent, PageFocusedEvent, PageBlurredEvent, PageRemoved, @@ -15,14 +15,14 @@ export type { } from './types'; export type AnalyticsEvent = - | PageWillRender + | PagePreloadedEvent | PageFocusedEvent | PageBlurredEvent | PageRemoved | ActionDispatchedEvent; const availableEvents: AnalyticsEvent['type'][] = [ - 'pageWillRender', + 'pagePreloaded', 'pageFocused', 'pageBlurred', 'pageRemoved', diff --git a/packages/expo-router/src/navigationEvents/types.ts b/packages/expo-router/src/navigationEvents/types.ts index 838016d74507a2..822fd353d0a19b 100644 --- a/packages/expo-router/src/navigationEvents/types.ts +++ b/packages/expo-router/src/navigationEvents/types.ts @@ -8,12 +8,13 @@ export interface BasePageEvent { } /** - * The rendering of the page started - * - * This can happen if screen is to be focused for the first time or when the screen is preloaded + * The page rendered as part of a preload (e.g. `router.prefetch()`) and is not + * currently focused. If the user later navigates to this route, the matching + * `pageFocused` will fire then; the preload may also be invalidated or the + * route unmounted (`pageRemoved`) without a focus. */ -export interface PageWillRender extends BasePageEvent { - type: 'pageWillRender'; +export interface PagePreloadedEvent extends BasePageEvent { + type: 'pagePreloaded'; } export interface PageFocusedEvent extends BasePageEvent { diff --git a/packages/expo-router/src/useScreens.tsx b/packages/expo-router/src/useScreens.tsx index ad9e9d3f9c6cdf..67f65d8384aa7a 100644 --- a/packages/expo-router/src/useScreens.tsx +++ b/packages/expo-router/src/useScreens.tsx @@ -410,10 +410,12 @@ function AnalyticsListeners({ const hasBlurredRef = React.useRef(true); const routeInfo = useCurrentRouteInfo(); + const isFocused = navigation.isFocused(); + if (isFirstRenderRef.current) { isFirstRenderRef.current = false; - if (routeInfo) { - unstable_navigationEvents.emit('pageWillRender', { + if (routeInfo && !isFocused) { + unstable_navigationEvents.emit('pagePreloaded', { pathname: routeInfo.pathname, params: routeInfo.params, screenId, @@ -434,8 +436,6 @@ function AnalyticsListeners({ return () => {}; }, [routeInfo?.params, routeInfo?.pathname, screenId]); - const isFocused = navigation.isFocused(); - // Emit `pageFocused` from an effect — not during render — so it fires after the // focused screen's content has committed. `hasBlurredRef` deduplicates across both paths. useEffect(() => { From 8024446c6f54cc8c6bfe85fe77b1de1054ef1837 Mon Sep 17 00:00:00 2001 From: Jakub Tkacz <32908614+Ubax@users.noreply.github.com> Date: Wed, 13 May 2026 19:59:56 +0200 Subject: [PATCH 12/21] [observe-tester] Add example tab (#45665) # Why Add screen with examples for testing router integration # How # Test Plan # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- apps/observe-tester/app/(tabs)/_layout.tsx | 4 + .../app/(tabs)/examples/_layout.tsx | 19 +++++ .../app/(tabs)/examples/index.tsx | 48 +++++++++++ .../app/(tabs)/examples/modals/_layout.tsx | 33 ++++++++ .../app/(tabs)/examples/modals/formsheet.tsx | 57 +++++++++++++ .../app/(tabs)/examples/modals/index.tsx | 49 ++++++++++++ .../app/(tabs)/examples/modals/modal.tsx | 59 ++++++++++++++ .../app/(tabs)/examples/modals/pagesheet.tsx | 57 +++++++++++++ .../app/(tabs)/examples/nested-stack/[id].tsx | 58 ++++++++++++++ .../(tabs)/examples/nested-stack/_layout.tsx | 20 +++++ .../(tabs)/examples/nested-stack/heavy.tsx | 75 ++++++++++++++++++ .../(tabs)/examples/nested-stack/index.tsx | 53 +++++++++++++ .../examples/nested-stack/nested/_layout.tsx | 20 +++++ .../examples/nested-stack/nested/index.tsx | 44 +++++++++++ .../examples/nested-stack/nested/modal.tsx | 47 +++++++++++ .../(tabs)/examples/nested-stack/network.tsx | 68 ++++++++++++++++ .../app/(tabs)/examples/preloaded/_layout.tsx | 19 +++++ .../app/(tabs)/examples/preloaded/index.tsx | 79 +++++++++++++++++++ .../(tabs)/examples/preloaded/screen-a.tsx | 46 +++++++++++ .../(tabs)/examples/preloaded/screen-b.tsx | 46 +++++++++++ .../(tabs)/examples/preloaded/screen-c.tsx | 46 +++++++++++ apps/observe-tester/components/Button.tsx | 10 ++- 22 files changed, 954 insertions(+), 3 deletions(-) create mode 100644 apps/observe-tester/app/(tabs)/examples/_layout.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/index.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/modals/_layout.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/modals/formsheet.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/modals/index.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/modals/modal.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/modals/pagesheet.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/nested-stack/[id].tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/nested-stack/_layout.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/nested-stack/heavy.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/nested-stack/index.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/nested-stack/nested/_layout.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/nested-stack/nested/index.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/nested-stack/nested/modal.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/nested-stack/network.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/preloaded/_layout.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/preloaded/index.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/preloaded/screen-a.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/preloaded/screen-b.tsx create mode 100644 apps/observe-tester/app/(tabs)/examples/preloaded/screen-c.tsx diff --git a/apps/observe-tester/app/(tabs)/_layout.tsx b/apps/observe-tester/app/(tabs)/_layout.tsx index a7c80d5fa15581..9e4e92d927c537 100644 --- a/apps/observe-tester/app/(tabs)/_layout.tsx +++ b/apps/observe-tester/app/(tabs)/_layout.tsx @@ -11,6 +11,10 @@ export default function TabsLayout() { Sessions + + Examples + + Debug diff --git a/apps/observe-tester/app/(tabs)/examples/_layout.tsx b/apps/observe-tester/app/(tabs)/examples/_layout.tsx new file mode 100644 index 00000000000000..1abe2193b1445e --- /dev/null +++ b/apps/observe-tester/app/(tabs)/examples/_layout.tsx @@ -0,0 +1,19 @@ +import { Stack } from 'expo-router'; + +import { useTheme } from '@/utils/theme'; + +export default function ExamplesLayout() { + const theme = useTheme(); + return ( + + + + + + + ); +} diff --git a/apps/observe-tester/app/(tabs)/examples/index.tsx b/apps/observe-tester/app/(tabs)/examples/index.tsx new file mode 100644 index 00000000000000..5d8de89557b80d --- /dev/null +++ b/apps/observe-tester/app/(tabs)/examples/index.tsx @@ -0,0 +1,48 @@ +import { useObserve } from 'expo-observe'; +import { router } from 'expo-router'; +import { useEffect } from 'react'; +import { Platform, ScrollView, StyleSheet } from 'react-native'; + +import { Button } from '@/components/Button'; +import { useTheme } from '@/utils/theme'; + +export default function ExamplesIndex() { + const theme = useTheme(); + const { markInteractive } = useObserve(); + + useEffect(() => { + markInteractive(); + }, []); + + return ( + +