diff --git a/.github/workflows/android-instrumentation-tests.yml b/.github/workflows/android-instrumentation-tests.yml index 051781edf42771..774982009969d1 100644 --- a/.github/workflows/android-instrumentation-tests.yml +++ b/.github/workflows/android-instrumentation-tests.yml @@ -71,7 +71,7 @@ jobs: - name: ๐Ÿงน Cleanup GitHub Linux runner disk space uses: ./.github/actions/cleanup-linux-disk-space - name: ๐Ÿ”จ Use JDK 17 - uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/android-unit-tests.yml b/.github/workflows/android-unit-tests.yml index 0f67928cf25309..2694afa3d4c472 100644 --- a/.github/workflows/android-unit-tests.yml +++ b/.github/workflows/android-unit-tests.yml @@ -48,7 +48,7 @@ jobs: - name: ๐Ÿงน Cleanup GitHub Linux runner disk space uses: ./.github/actions/cleanup-linux-disk-space - name: ๐Ÿ”จ Use JDK 17 - uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/development-client-latest-e2e.yml b/.github/workflows/development-client-latest-e2e.yml index d36e042ef479ef..d192dad6e94c6d 100644 --- a/.github/workflows/development-client-latest-e2e.yml +++ b/.github/workflows/development-client-latest-e2e.yml @@ -34,7 +34,7 @@ jobs: - name: ๐Ÿ’Ž Install cocoapods run: sudo gem install cocoapods - name: ๐Ÿ”จ Use JDK 11 - uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 with: distribution: 'temurin' java-version: '11' diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 3f736ceefbb45c..e0d01fa4171f71 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -82,6 +82,11 @@ jobs: fail_on_error: true # Override vale-action's older bundled reviewdog to avoid large-diff limits. reviewdog_url: https://github.com/reviewdog/reviewdog/releases/download/v0.21.0/reviewdog_0.21.0_Linux_x86_64.tar.gz + - name: ๐Ÿ”„ Sync bundled native module versions + working-directory: docs + run: pnpm versions-schema-sync + continue-on-error: true + timeout-minutes: 1 - name: ๐Ÿ—๏ธ Build Docs website for deploy working-directory: docs run: pnpm export diff --git a/.github/workflows/expo-go-android-lint.yml b/.github/workflows/expo-go-android-lint.yml index 11ffa283d181b6..401146b9de0656 100644 --- a/.github/workflows/expo-go-android-lint.yml +++ b/.github/workflows/expo-go-android-lint.yml @@ -40,7 +40,7 @@ jobs: - name: ๐Ÿงน Cleanup GitHub Linux runner disk space uses: ./.github/actions/cleanup-linux-disk-space - name: ๐Ÿ”จ Use JDK 17 - uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/publish-canaries.yml b/.github/workflows/publish-canaries.yml index 01ab3ea7475a77..fc8b4560fac38a 100644 --- a/.github/workflows/publish-canaries.yml +++ b/.github/workflows/publish-canaries.yml @@ -42,7 +42,7 @@ jobs: cache: 'pnpm' registry-url: https://registry.npmjs.org/ - name: ๐Ÿ”จ Use JDK 17 - uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/test-react-native-nightly.yml b/.github/workflows/test-react-native-nightly.yml index 76a9d686c1f5b6..b0c3de5d9a0336 100644 --- a/.github/workflows/test-react-native-nightly.yml +++ b/.github/workflows/test-react-native-nightly.yml @@ -116,7 +116,7 @@ jobs: node-version: 20 cache: 'pnpm' - name: ๐Ÿ”จ Use JDK 17 - uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/test-suite-nightly.yml b/.github/workflows/test-suite-nightly.yml index 5545ebc78ea614..f122840dfc9747 100644 --- a/.github/workflows/test-suite-nightly.yml +++ b/.github/workflows/test-suite-nightly.yml @@ -166,7 +166,7 @@ jobs: with: bun-version: 1.x - name: ๐Ÿ”จ Use JDK 17 - uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/test-suite.yml b/.github/workflows/test-suite.yml index 4d425e40ca2e0c..a0203a57b9003f 100644 --- a/.github/workflows/test-suite.yml +++ b/.github/workflows/test-suite.yml @@ -357,7 +357,7 @@ jobs: with: bun-version: 1.x - name: ๐Ÿ”จ Use JDK 17 - uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 with: distribution: 'temurin' java-version: '17' diff --git a/apps/bare-expo/e2e/expo-video/player-output-test.yaml b/apps/bare-expo/e2e/expo-video/player-output-test.yaml index d4a00e301695ca..63d3c77cc7ef32 100644 --- a/apps/bare-expo/e2e/expo-video/player-output-test.yaml +++ b/apps/bare-expo/e2e/expo-video/player-output-test.yaml @@ -8,6 +8,10 @@ jsEngine: graaljs visible: 'Players ready' timeout: 30000 - tapOn: 'Move player 1 to the next video view' +- extendedWaitUntil: + visible: + id: 'viewshot-ready' + timeout: 10000 - runFlow: file: ../_nested-flows/viewshot-comparison.yaml env: @@ -18,6 +22,10 @@ jsEngine: graaljs text: 'Move player 2 to the next video view' repeat: 2 - tapOn: 'Move player 1 to the next video view' +- extendedWaitUntil: + visible: + id: 'viewshot-ready' + timeout: 10000 - runFlow: file: ../_nested-flows/viewshot-comparison.yaml env: @@ -26,6 +34,10 @@ jsEngine: graaljs mode: 'keep-originals' - tapOn: 'Move player 1 to first video view' - tapOn: 'Move player 2 to first video view' +- extendedWaitUntil: + visible: + id: 'viewshot-ready' + timeout: 10000 - runFlow: file: ../_nested-flows/viewshot-comparison.yaml env: @@ -40,6 +52,10 @@ jsEngine: graaljs - tapOn: text: 'Move player 1 to the next video view' repeat: 2 +- extendedWaitUntil: + visible: + id: 'viewshot-ready' + timeout: 10000 - runFlow: file: ../_nested-flows/viewshot-comparison.yaml env: diff --git a/apps/native-component-list/src/screens/Video/VideoChangePlayerOutputScreen.tsx b/apps/native-component-list/src/screens/Video/VideoChangePlayerOutputScreen.tsx index 35c4db9a6be287..d20299fbabd9db 100644 --- a/apps/native-component-list/src/screens/Video/VideoChangePlayerOutputScreen.tsx +++ b/apps/native-component-list/src/screens/Video/VideoChangePlayerOutputScreen.tsx @@ -1,7 +1,7 @@ import { useEvent } from 'expo'; import { useVideoPlayer, VideoPlayer, VideoView } from 'expo-video'; import React, { useCallback, useRef, useState } from 'react'; -import { View, StyleSheet, Text } from 'react-native'; +import { Platform, View, StyleSheet, Text } from 'react-native'; import { bigBuckBunnySource, elephantsDreamSource } from './videoSources'; import { styles } from './videoStyles'; @@ -39,6 +39,27 @@ export default function VideoChangePlayerOutputScreen() { const [viewPlayers, setViewPlayers] = useState([player, player2, null, null]); + // Per-view "frame painted" state to gate e2e screenshots: a swapped iOS VideoView stays blank until + // ready, so we mark it not-ready on swap and flip it back from `onFirstFrameRender`. Optimistic so + // other platforms don't gate. + const [readyViews, setReadyViews] = useState([true, true, true, true]); + + const framesSettled = viewPlayers.every( + (viewPlayer, index) => viewPlayer == null || readyViews[index] + ); + + const markViewRendered = useCallback((viewIndex: number) => { + setReadyViews((prev) => { + if (prev[viewIndex]) { + return prev; + } + + const next = [...prev]; + next[viewIndex] = true; + return next; + }); + }, []); + const advancePlayer = useCallback( (playerIndex: number) => { const currentIndex = players.current[playerIndex].viewIndex; @@ -59,6 +80,15 @@ export default function VideoChangePlayerOutputScreen() { newViewPlayers[newViewIndex] = players.current[playerIndex].ref; setViewPlayers(newViewPlayers); + // The view receiving the player must repaint; mark it not-ready until `onFirstFrameRender` fires. + if (Platform.OS === 'ios') { + setReadyViews((prev) => { + const next = [...prev]; + next[newViewIndex] = false; + return next; + }); + } + players.current[playerIndex].viewIndex = newViewIndex; }, [viewPlayers, useIncorrectReplace] @@ -79,6 +109,7 @@ export default function VideoChangePlayerOutputScreen() { player={viewPlayers[i]} nativeControls={nativeControls} allowsVideoFrameAnalysis={false} + onFirstFrameRender={() => markViewRendered(i)} /> ))} @@ -112,6 +143,7 @@ export default function VideoChangePlayerOutputScreen() { }} /> {e2eSetupDone && bothReady && Players ready} + {framesSettled && Viewshot ready} ); } diff --git a/apps/test-suite/tests/MediaLibraryNext.ts b/apps/test-suite/tests/MediaLibraryNext.ts index 7985d8c20a6b88..665d440a6327d9 100644 --- a/apps/test-suite/tests/MediaLibraryNext.ts +++ b/apps/test-suite/tests/MediaLibraryNext.ts @@ -821,6 +821,54 @@ export async function test(t) { t.expect(secondAsset.id).toBe(shorterAsset.id); t.expect(thirdAsset.id).toBe(tallerAsset.id); }); + + t.it('exeForMetadata works correctly for images', async () => { + // given + const asset = await Asset.create(pngFile.localUri); + assetsContainer.push(asset); + const albumName = createAlbumName('exeForMetadata works correctly for images'); + const album = await Album.create(albumName, [asset]); + albumsContainer.push(album); + // when + const results = await new Query().album(album).exeForMetadata(); + // then + t.expect(results.length).toBe(1); + const result = results[0]; + t.expect(result.id).toBeDefined(); + t.expect(result.creationTime).toBeDefined(); + t.expect(result.duration).toBe(null); + t.expect(result.filename.toLowerCase()).toMatch(/\.png/); + t.expect(result.height).toBeGreaterThan(0); + t.expect(result.mediaType).toBeDefined(); + t.expect(new Date(result.modificationTime).getFullYear()).toBeGreaterThan(1970); + t.expect(result.modificationTime).toBeGreaterThan(0); + t.expect(result.width).toBeGreaterThan(0); + t.expect(result.isFavorite).toBe(false); + }); + + t.it('exeForMetadata works correctly for videos', async () => { + // given + const asset = await Asset.create(mp4File.localUri); + assetsContainer.push(asset); + const albumName = createAlbumName('exeForMetadata works correctly for videos'); + const album = await Album.create(albumName, [asset]); + albumsContainer.push(album); + // when + const results = await new Query().album(album).exeForMetadata(); + // then + t.expect(results.length).toBe(1); + const result = results[0]; + t.expect(result.id).toBeDefined(); + t.expect(result.creationTime).toBeDefined(); + t.expect(result.duration).toBeGreaterThan(0); + t.expect(result.filename.toLowerCase()).toMatch(/\.mp4/); + t.expect(result.height).toBeGreaterThan(0); + t.expect(result.mediaType).toBeDefined(); + t.expect(new Date(result.modificationTime).getFullYear()).toBeGreaterThan(1970); + t.expect(result.modificationTime).toBeGreaterThan(0); + t.expect(result.width).toBeGreaterThan(0); + t.expect(result.isFavorite).toBe(false); + }); }); t.describe('asset.getAlbums()', () => { diff --git a/docs/.vale/writing-styles/expo-docs/HeadingCase.yml b/docs/.vale/writing-styles/expo-docs/HeadingCase.yml index a210d27266ad88..1ac80036dc5b5a 100644 --- a/docs/.vale/writing-styles/expo-docs/HeadingCase.yml +++ b/docs/.vale/writing-styles/expo-docs/HeadingCase.yml @@ -60,16 +60,19 @@ exceptions: - '.*CLI.*' - '.*TTI.*' - '.*Classic Updates.*' + - '.*Claude Code.*' - '.*Clerk.*' - '.*CNG.*' - '.*CocoaPods.*' - '.*CodePush.*' + - '.*Codex.*' - '.*Convex.*' - '.*Command Line Tools.*' - '.*Config Plugin.*' - '.*CORS.*' - '.*CRUD.*' - '.*credentials\.json.*' + - '.*Cursor.*' - '.*DevTools.*' - '.*Developer Console.*' - '.*Developer Mode.*' diff --git a/docs/common/client-redirects.ts b/docs/common/client-redirects.ts index 98273835210378..b6990bcfc74363 100644 --- a/docs/common/client-redirects.ts +++ b/docs/common/client-redirects.ts @@ -184,6 +184,9 @@ const RENAMED_PAGES: Record = { '/develop/development-builds/installation/': '/develop/development-builds/create-a-build/', '/develop/development-builds/parallel-installation': '/build-reference/variants/', + // MCP server moved out of the EAS section to the top-level /mcp route + '/eas/ai/mcp/': '/mcp/', + // Picker replaced by SegmentedButton '/versions/latest/sdk/ui/jetpack-compose/picker/': '/versions/latest/sdk/ui/jetpack-compose/segmentedbutton/', diff --git a/docs/constants/navigation.js b/docs/constants/navigation.js index 81ac55f74e9747..1c6d3ffe7c5fb7 100644 --- a/docs/constants/navigation.js +++ b/docs/constants/navigation.js @@ -20,6 +20,7 @@ const homeDirectories = [ 'deploy', 'review', 'monitoring', + 'agents', ]; /** Manual list of directories to categorize as "Learn" */ const learnDirectories = ['tutorial', 'additional-resources']; @@ -73,7 +74,19 @@ export const home = [ makePage('get-started/start-developing.mdx'), makePage('get-started/next-steps.mdx'), ]), - makeSection('AI', [makePage('skills.mdx'), makePage('llms.mdx')]), + makeSection('AI', [ + makePage('agents/index.mdx'), + makePage('skills.mdx'), + makePage('mcp.mdx'), + makeGroup( + 'AI agents', + [makePage('agents/claude.mdx'), makePage('agents/codex.mdx'), makePage('agents/cursor.mdx')], + { + expanded: false, + } + ), + makePage('llms.mdx'), + ]), makeSection('Develop', [ makePage('develop/tools.mdx'), makePage('develop/app-navigation.mdx'), @@ -445,7 +458,6 @@ export const eas = [ expanded: true, } ), - makeSection('AI', [makePage('eas/ai/mcp.mdx')]), makeSection('EAS Workflows', [ makePage('eas/workflows/introduction.mdx'), makePage('eas/workflows/get-started.mdx'), diff --git a/docs/package.json b/docs/package.json index ccc3588b093ca4..ce1a5123c72e9c 100644 --- a/docs/package.json +++ b/docs/package.json @@ -68,7 +68,6 @@ "prismjs": "^1.30.0", "prop-types": "^15.8.1", "react": "^19.2.6", - "react-confetti-explosion": "^3.0.3", "react-diff-view": "^3.3.3", "react-dom": "^19.2.6", "react-markdown": "^10.1.0", diff --git a/docs/pages/agents/claude.mdx b/docs/pages/agents/claude.mdx new file mode 100644 index 00000000000000..c7b1c5e19d3a73 --- /dev/null +++ b/docs/pages/agents/claude.mdx @@ -0,0 +1,130 @@ +--- +title: Claude Code and Expo +sidebar_title: Claude Code +description: Use Claude Code to build, upgrade, debug, and deploy your Expo and React Native projects. +--- + +import { BookOpen02Icon } from '@expo/styleguide-icons/outline/BookOpen02Icon'; + +import { BoxLink } from '~/ui/components/BoxLink'; +import { Collapsible } from '~/ui/components/Collapsible'; +import { Step } from '~/ui/components/Step'; +import { Terminal } from '~/ui/components/Snippet'; + +Claude Code is Anthropic's terminal-based AI coding agent. It can understand your entire codebase, propose edits, run terminal commands, and manage git operations. Expo projects created with `create-expo-app` are scaffolded with files for Claude Code through **CLAUDE.md** and **.claude/settings.json**. It can also check EAS and Expo CLI logs, fetch documentation from the Expo Model Context Protocol (MCP) Server, use Expo Skills for best practices, manage your EAS deployment workflow, and more. + +## Quick start + + + +### Install Claude Code + +Install Claude Code globally, then start it from any project. For other install methods, see the [Claude Code documentation](https://code.claude.com/docs). + + + + + + + +### Create a new Expo project + +Create a project with the following command or ensure your existing project has the latest expo package installed. + + + + + + + +### Set up Expo Skills and the Expo MCP Server + +Install Expo Skills and connect the Expo MCP Server so Claude Code knows Expo conventions and can reach your EAS. + + + + + + + + + +### Open your project and start prompting + +Run Claude Code from your project root, then describe what you want to do. + + + + + + + +### Verify setup + +Paste the following prompt in your Claude Code session to confirm it can read your project: + +```text Example prompt +Open package.json and tell me which Expo SDK version this project targets. +``` + +If the agent replies with the SDK version from **package.json**, the agent is reading your project correctly. + + + +## How Claude Code reads your Expo project + +When you start Claude Code in your project, it reads two of the scaffolded files: + +- **CLAUDE.md** contains a single line: `@AGENTS.md`. This line imports **AGENTS.md** into Claude Code's context. **AGENTS.md** points Claude Code to the documentation for your project's Expo SDK version. Add project-level instructions to **AGENTS.md**, not **CLAUDE.md**, so they stay in one place. +- **.claude/settings.json** enables the official Expo plugin ([`expo@claude-plugins-official`](https://claude.com/plugins/expo)) from the Claude Code plugin marketplace. + +Both files are committed to your project, so a developer's Claude Code session starts from the same context. + +## Example prompts + +After setup, describe Expo tasks in plain language. For example: + +| Task | Example prompt | +| ----------------- | --------------------------------------------------------------------------------- | +| Upgrade the SDK | Upgrade this project to the latest Expo SDK and fix any breaking changes. | +| Add navigation | Add a tab navigator with Expo Router and a new settings screen. | +| Automate builds | Create an EAS Workflow that builds the app on every pull request. | +| Debug a build | My latest iOS build failed. Read the EAS Build logs and tell me what went wrong. | +| Add notifications | Configure expo-notifications and show a local notification when the app launches. | +| Set up CI/CD | Create a CI/CD workflow that builds on every PR. | +| Add native UI | Add a SwiftUI picker component to my Expo app. | +| Check feedback | Show TestFlight feedback for my app. | +| Verify the UI | Take a screenshot and verify the blue circle view. | + +For more examples, see the Example prompts sections of [Expo Skills](/skills/#example-prompts) and [Expo MCP Server](/mcp/#what-does-expo-mcp-server-do). + +## Troubleshooting + + + +If you see this error in your Claude Code session, then you need to install the official [Expo plugin](https://claude.com/plugins/expo) on your developer machine. To install it, run the following command in the terminal window and then restart your Claude Code session: + + + +The above command installs the Expo plugin globally. If you want to install it just for this project, add `--scope project` to the command: + + + + diff --git a/docs/pages/agents/codex.mdx b/docs/pages/agents/codex.mdx new file mode 100644 index 00000000000000..b20555e380a39a --- /dev/null +++ b/docs/pages/agents/codex.mdx @@ -0,0 +1,112 @@ +--- +title: Codex and Expo +sidebar_title: Codex +description: Use Codex to build, upgrade, debug, and deploy your Expo and React Native projects. +--- + +import { BookOpen02Icon } from '@expo/styleguide-icons/outline/BookOpen02Icon'; + +import { BoxLink } from '~/ui/components/BoxLink'; +import { Step } from '~/ui/components/Step'; +import { Terminal } from '~/ui/components/Snippet'; + +Codex is OpenAI's terminal-based AI coding agent. It can read and write files across your project, run terminal commands, and browse the web. Expo projects created with `create-expo-app` are scaffolded with an **AGENTS.md** file that Codex reads directly. It can also check EAS and Expo CLI logs, fetch documentation from the Expo Model Context Protocol (MCP) Server, use Expo Skills for best practices, manage your EAS deployment workflow, and more. + +## Quick start + + + +### Install Codex + +Install Codex, then start it from any project. For other install methods, see the [Codex CLI documentation](https://developers.openai.com/codex/cli). + + + + + + + +### Create a new Expo project + +Create a project with the following command or ensure your existing project has the latest expo package installed. + + + + + + + +### Set up Expo Skills and the Expo MCP Server + +Install Expo Skills and connect the Expo MCP Server so Codex knows Expo conventions and can reach your EAS. + + + + + + + + + +### Open your project and start prompting + +Run Codex from your project root, then describe what you want to do. + + + + + + + +### Verify setup + +Paste the following prompt in your Codex session to confirm it can read your project: + +```text Example prompt +Open package.json and tell me which Expo SDK version this project targets. +``` + +If the agent replies with the SDK version from **package.json**, the agent is reading your project correctly. + + + +## How Codex reads your Expo project + +When you start Codex in your project, it reads the scaffolded **AGENTS.md** file. This file points Codex to the documentation for your project's Expo SDK version and holds any project-level instructions you add. + +**AGENTS.md** is committed to your project, so a developer's Codex session starts from the same context. + +## Example prompts + +After setup, describe Expo tasks in plain language. For example: + +| Task | Example prompt | +| ----------------- | --------------------------------------------------------------------------------- | +| Upgrade the SDK | Upgrade this project to the latest Expo SDK and fix any breaking changes. | +| Add navigation | Add a tab navigator with Expo Router and a new settings screen. | +| Automate builds | Create an EAS Workflow that builds the app on every pull request. | +| Debug a build | My latest iOS build failed. Read the EAS Build logs and tell me what went wrong. | +| Add notifications | Configure expo-notifications and show a local notification when the app launches. | +| Set up CI/CD | Create a CI/CD workflow that builds on every PR. | +| Add native UI | Add a SwiftUI picker component to my Expo app. | +| Check feedback | Show TestFlight feedback for my app. | +| Verify the UI | Take a screenshot and verify the blue circle view. | + +For more examples, see the Example prompts sections of [Expo Skills](/skills/#example-prompts) and [Expo MCP Server](/mcp/#what-does-expo-mcp-server-do). diff --git a/docs/pages/agents/cursor.mdx b/docs/pages/agents/cursor.mdx new file mode 100644 index 00000000000000..f13323fd6988f5 --- /dev/null +++ b/docs/pages/agents/cursor.mdx @@ -0,0 +1,108 @@ +--- +title: Cursor and Expo +sidebar_title: Cursor +description: Use Cursor to build, upgrade, debug, and deploy your Expo and React Native projects. +--- + +import { BookOpen02Icon } from '@expo/styleguide-icons/outline/BookOpen02Icon'; + +import { BoxLink } from '~/ui/components/BoxLink'; +import { Step } from '~/ui/components/Step'; +import { Terminal } from '~/ui/components/Snippet'; + +Cursor is an AI-first code editor built on VS Code. It can edit across multiple files, run terminal commands, and work autonomously with its agent. Expo projects created with `create-expo-app` are scaffolded with an **AGENTS.md** file that Cursor reads directly. It can also check EAS and Expo CLI logs, fetch documentation from the Expo Model Context Protocol (MCP) Server, use Expo Skills for best practices, manage your EAS deployment workflow, and more. + +## Quick start + + + +### Download Cursor + +Download and install Cursor from the [Cursor website](https://cursor.com). For setup details, see the [Cursor documentation](https://cursor.com/docs). + + + + + +### Create a new Expo project + +Create a project with the following command or ensure your existing project has the latest expo package installed. + + + + + + + +### Set up Expo Skills and the Expo MCP Server + +Install Expo Skills and connect the Expo MCP Server so Cursor knows Expo conventions and can reach your EAS. + + + + + + + + + +### Open your project and start prompting + +Open your project in Cursor, then open the Agent panel and describe what you want to do. + + + + + +### Verify setup + +In Cursor's Agent panel, enter the following prompt to confirm it can read your project: + +```text Example prompt +Open package.json and tell me which Expo SDK version this project targets. +``` + +If the agent replies with the SDK version from **package.json**, the agent is reading your project correctly. + + + +## How Cursor reads your Expo project + +When you open your project in Cursor, it reads the scaffolded **AGENTS.md** file at the project root, along with any nested **AGENTS.md** files in subdirectories. **AGENTS.md** points Cursor to the documentation for your project's Expo SDK version and holds any project-level instructions you add. **AGENTS.md** is committed to your project, so a developer's session starts from the same context inside Cursor. + +You can also add Cursor-specific rules under **.cursor/rules/**. + +## Example prompts + +After setup, describe Expo tasks in plain language. For example: + +| Task | Example prompt | +| ----------------- | --------------------------------------------------------------------------------- | +| Upgrade the SDK | Upgrade this project to the latest Expo SDK and fix any breaking changes. | +| Add navigation | Add a tab navigator with Expo Router and a new settings screen. | +| Automate builds | Create an EAS Workflow that builds the app on every pull request. | +| Debug a build | My latest iOS build failed. Read the EAS Build logs and tell me what went wrong. | +| Add notifications | Configure expo-notifications and show a local notification when the app launches. | +| Set up CI/CD | Create a CI/CD workflow that builds on every PR. | +| Add native UI | Add a SwiftUI picker component to my Expo app. | +| Check feedback | Show TestFlight feedback for my app. | +| Verify the UI | Take a screenshot and verify the blue circle view. | + +For more examples, see the Example prompts sections of [Expo Skills](/skills/#example-prompts) and [Expo MCP Server](/mcp/#what-does-expo-mcp-server-do). diff --git a/docs/pages/agents/index.mdx b/docs/pages/agents/index.mdx new file mode 100644 index 00000000000000..5dff93bd8e1a0a --- /dev/null +++ b/docs/pages/agents/index.mdx @@ -0,0 +1,89 @@ +--- +title: AI agents and Expo overview +sidebar_title: Overview +description: Build and publish Expo and React Native apps with AI coding agents such as Claude Code, Codex, and Cursor. +--- + +import { BookOpen02Icon } from '@expo/styleguide-icons/outline/BookOpen02Icon'; + +import { BoxLink } from '~/ui/components/BoxLink'; +import { + ClaudeLogoIcon, + CursorLogoIcon, + OpenAILogoIcon, +} from '~/ui/components/CustomIcons/AIProviderIcons'; + +Claude Code, Codex, Cursor, and other AI coding agents can help you build, upgrade, debug, and deploy your Expo and React Native projects. When you use [`create-expo-app`](/more/create-expo/) to create a new project, that new project is already set up with the configuration files required by an AI agent. This setup is also committed to your project, so everyone on your team starts from the same SDK version and project instructions, and their agents read the same project context. + +## How Expo supports AI agents + +Three pieces work together to give an AI agent consistent, Expo-specific context: + +- **Expo Skills:** A plugin that adds Expo-specific instructions and slash commands to the agent. The agent applies known-good Expo patterns (SDK upgrades, EAS Workflows, native UI with Jetpack Compose and SwiftUI, API routes) instead of guessing from training data. Skills install once per machine. +- **Expo MCP Server:** A remote Model Context Protocol (MCP) server that gives the agent live access to the latest Expo documentation, EAS Build history, EAS Update channels, and TestFlight metadata. The agent can install SDK-matching packages, read build logs, and take simulator screenshots through it. +- **Project context files:** `create-expo-app` writes **AGENTS.md**, **CLAUDE.md**, and **.claude/settings.json** at the project root. These are the first thing the agent reads when you open the project. They point the agent to the documentation for the Expo SDK version your project targets. + +## Set up Expo Skills and Expo MCP Server + +Expo Skills and the Expo MCP Server work with every supported agent. Set up each one by following the guides below: + + + + + +## Pick an agent + +Each per-agent guide covers install, setup, and example prompts for that agent: + + + + + + + +## Project context files for agents + +Each agent looks for project context in a different place. Instead of forcing one convention, `create-expo-app` CLI adds the following configuration files to a project's root when you create a new Expo project using the CLI: + +| File | Read by | Purpose | +| ------------------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| **AGENTS.md** | Codex and Cursor directly. Claude Code through **CLAUDE.md**. | Points the agent to the Expo documentation matching your project's SDK. This is the source of truth for project-level instructions. | +| **CLAUDE.md** | Claude Code on startup. | Contains `@AGENTS.md`, which imports **AGENTS.md** into Claude Code's context. | +| **.claude/settings.json** | Claude Code on startup. | Pre-enables the official Expo plugin from the Claude Code plugin marketplace. | + +Each file targets a different agent convention, so the same project works with Claude Code, Codex, or Cursor without per-agent configuration. + +## Verify the setup + +To confirm an agent can read your project, open a session for your AI agent within your Expo project and run this prompt: + +```text Example prompt +Open package.json and tell me which Expo SDK version this project targets. +``` + +If the agent replies with the SDK version from **package.json**, the agent is reading your project correctly. diff --git a/docs/pages/app-signing/apple-developer-program-roles-and-permissions.mdx b/docs/pages/app-signing/apple-developer-program-roles-and-permissions.mdx index f1cda8e56e7d22..b5e7f0ce3991e5 100644 --- a/docs/pages/app-signing/apple-developer-program-roles-and-permissions.mdx +++ b/docs/pages/app-signing/apple-developer-program-roles-and-permissions.mdx @@ -14,7 +14,7 @@ On individual Apple Developer accounts, only the Account Holder role can generat diff --git a/docs/pages/brownfield/integrated-approach.mdx b/docs/pages/brownfield/integrated-approach.mdx index 1685ce020907fd..fc86475b9c1c8b 100644 --- a/docs/pages/brownfield/integrated-approach.mdx +++ b/docs/pages/brownfield/integrated-approach.mdx @@ -361,7 +361,7 @@ engine](https://github.com/facebook/hermes/blob/main/README.md) that is shipped @@ -369,7 +369,7 @@ engine](https://github.com/facebook/hermes/blob/main/README.md) that is shipped Now switch to the **Build Phases** tab and add a new `Run Script Phase` before the `[CP] Embed Pods Frameworks` phase. This script will bundle your JavaScript code and assets into the iOS application. - + ```sh Build React Native code and image if [[ -f "$PODS_ROOT/../.xcode.env" ]]; then diff --git a/docs/pages/build-reference/variants.mdx b/docs/pages/build-reference/variants.mdx index 9dc1da05e2f0fa..1b4296f79e68c3 100644 --- a/docs/pages/build-reference/variants.mdx +++ b/docs/pages/build-reference/variants.mdx @@ -7,6 +7,7 @@ description: Learn how to install multiple variants of an app on the same device import { Collapsible } from '~/ui/components/Collapsible'; import { ContentSpotlight } from '~/ui/components/ContentSpotlight'; import { Prerequisites, Requirement } from '~/ui/components/Prerequisites'; +import { Terminal } from '~/ui/components/Snippet'; When creating [development, preview, and production builds](/build/eas-json/#common-use-cases), installing these build variants simultaneously on the same device is common. This allows working in development, previewing the next version of the app, and running the production version on a device without needing to uninstall and reinstall the app. @@ -153,7 +154,51 @@ When you run `eas build --profile production` the `APP_VARIANT` variable environ > **Note**: If you use EAS Update to publish JavaScript updates of your app, you should be cautious to set the correct environment variables for the app variant that you are publishing for when you run the `eas update` command. See the EAS Build [Environment variables and secrets](/build/updates) for more information. -### In an existing (bare) React Native project +### Build and run multiple app variants locally + +If you [build your app locally](/guides/local-app-overview/) with [`expo run:android|ios`](/workflow/continuous-native-generation/#usage), set the `APP_VARIANT` environment variable when you run the `expo run` command. For example, to compile the `development` variant for iOS as a debug build, run: + + + +`APP_VARIANT` changes only the app's name and package name on Android and bundle identifier on iOS. It does not affect how the binary is compiled. When you switch variants, the existing **android** and **ios** directories still reflect the previous variant. If a native directory is already present, `expo run` skips regenerating it and compiles it as-is. + +To switch variants, you need to regenerate the native directories again with `prebuild --clean` before compiling the app. In the example below, the `development` variant (existing debug build) is switched to `test`, which is another debug build. To regenerate the **android** and **ios** directories and then compile the `test` variant, set `APP_VARIANT` on both commands so that the clean prebuild and the compilation use the same variant: + + + +The **android** and **ios** directories are managed by [Continuous Native Generation](/workflow/continuous-native-generation/), so regenerating them is safe when they are listed in your **.gitignore**. + +### In an existing React Native project > **info** If you want to use your [app config file](/workflow/configuration/) as the source of truth for your app configuration (including bundle identifiers and package names for variants), you need to migrate to [Continuous Native Generation (CNG)](/workflow/continuous-native-generation/) and add **android** and **ios** directories to your **.gitignore** file. This is especially important if you started with a React Native CLI project and added custom native code. This ensures that the native project configuration doesn't take precedence over your app config, especially when using bundle ID lookup behavior. Without this, you may experience issues where the wrong app variant runs or development builds aren't detected properly. Alternatively, you can explicitly opt for the Android flavors and iOS schemes as described below. diff --git a/docs/pages/develop/user-interface/safe-areas.mdx b/docs/pages/develop/user-interface/safe-areas.mdx index 17e63800e707ef..3fecfcc4f8f455 100644 --- a/docs/pages/develop/user-interface/safe-areas.mdx +++ b/docs/pages/develop/user-interface/safe-areas.mdx @@ -13,7 +13,7 @@ Here's an example of an app screen's content getting concealed by the status bar @@ -25,7 +25,7 @@ Using the library, the result of the previous example changes as it displays the diff --git a/docs/pages/eas/hosting/api-routes.mdx b/docs/pages/eas/hosting/api-routes.mdx index 3b762e6b94b728..7ffb65da04b6ed 100644 --- a/docs/pages/eas/hosting/api-routes.mdx +++ b/docs/pages/eas/hosting/api-routes.mdx @@ -18,7 +18,7 @@ Crashes are grouped. If similar crashes are detected, you will see just one line ### Logs @@ -27,7 +27,7 @@ All logs from API routes and server functions (`console.log`, `console.info`, `c ### Requests @@ -38,7 +38,7 @@ This will show a list of requests against your service, with metadata (status, b ### Looking up a request by ID diff --git a/docs/pages/eas/observe/dashboard.mdx b/docs/pages/eas/observe/dashboard.mdx index 4300671b20bfa3..79d7c8ae96e13e 100644 --- a/docs/pages/eas/observe/dashboard.mdx +++ b/docs/pages/eas/observe/dashboard.mdx @@ -10,8 +10,8 @@ The EAS Observe dashboard provides a visual overview of your app's performance m ## Summary diff --git a/docs/pages/eas/observe/eas-update.mdx b/docs/pages/eas/observe/eas-update.mdx index cfa6f44f6f7a67..ea41678801667b 100644 --- a/docs/pages/eas/observe/eas-update.mdx +++ b/docs/pages/eas/observe/eas-update.mdx @@ -17,8 +17,8 @@ In the dashboard: open your project and navigate to [**Observe > EAS Update**](h ### Update download time diff --git a/docs/pages/eas/observe/events.mdx b/docs/pages/eas/observe/events.mdx index fe09274dd3bd14..85300c96ce0561 100644 --- a/docs/pages/eas/observe/events.mdx +++ b/docs/pages/eas/observe/events.mdx @@ -79,8 +79,8 @@ In the dashboard: open your project and navigate to [**Observe > Events**](https From the CLI: diff --git a/docs/pages/eas/observe/introduction.mdx b/docs/pages/eas/observe/introduction.mdx index 620ef5d68357e6..23cd877f95a644 100644 --- a/docs/pages/eas/observe/introduction.mdx +++ b/docs/pages/eas/observe/introduction.mdx @@ -22,8 +22,8 @@ Debugging performance in React Native has traditionally been limited to developm ## Quick start diff --git a/docs/pages/guides/building-for-tv.mdx b/docs/pages/guides/building-for-tv.mdx index bd5a18167b222b..b5d34414ccb3a2 100644 --- a/docs/pages/guides/building-for-tv.mdx +++ b/docs/pages/guides/building-for-tv.mdx @@ -75,11 +75,25 @@ The necessary changes to the native Android and iOS files are minimal and can be The fastest way to generate a new project is described in the [TV example](https://github.com/expo/examples/tree/master/with-tv) within the Expo examples repository: - + You can start with the [TV Router example](https://github.com/expo/examples/tree/master/with-router-tv): - + This creates a new project that uses [Expo Router](/router/introduction/) for file-based navigation, modeled after the [**create-expo-app** default template](/get-started/create-a-project/). @@ -204,7 +218,14 @@ The `react-native-tvos` version must match the Expo SDK you are using. For examp ### Add the TV config plugin - + When installed, the plugin will modify the project for TV when either: @@ -251,7 +272,14 @@ Set the `EXPO_TV` environment variable, and run prebuild to make the TV modifica Start an Android TV emulator and use the following command to start the app on the emulator: - + @@ -260,7 +288,14 @@ Start an Android TV emulator and use the following command to start the app on t Run the following command to build and run the app on an Apple TV simulator: - + diff --git a/docs/pages/guides/expo-ui-swift-ui/index.mdx b/docs/pages/guides/expo-ui-swift-ui/index.mdx index 0dd878a3c01b70..f0d03105be504f 100644 --- a/docs/pages/guides/expo-ui-swift-ui/index.mdx +++ b/docs/pages/guides/expo-ui-swift-ui/index.mdx @@ -70,7 +70,7 @@ Expo UI has several SwiftUI components available. You can use them in your app b @@ -106,7 +106,7 @@ You can also use the `HStack` and `VStack` components to build the entire layout @@ -172,7 +172,7 @@ You can also use the `HStack` and `VStack` components to build the entire layout @@ -256,7 +256,7 @@ Combining the Expo UI components and modifiers, you can build a UI like iOS Sett @@ -310,7 +310,7 @@ Use `foregroundStyle` to apply a [hierarchical style](/versions/latest/sdk/ui/sw @@ -380,7 +380,7 @@ A common pattern for brightness or volume controls is to flank a `Slider` with i @@ -454,7 +454,7 @@ Use `VStack` with `alignment="leading"` for list items with title and subtitle. diff --git a/docs/pages/guides/facebook-authentication.mdx b/docs/pages/guides/facebook-authentication.mdx index a582782e29e358..1e2e2b26d308c7 100644 --- a/docs/pages/guides/facebook-authentication.mdx +++ b/docs/pages/guides/facebook-authentication.mdx @@ -33,7 +33,7 @@ Adding Android as a platform in your Facebook project requires you to have your @@ -52,7 +52,7 @@ After that, go to your Facebook project's **Settings** > **Basic** and add the * diff --git a/docs/pages/guides/ios-developer-mode.mdx b/docs/pages/guides/ios-developer-mode.mdx index 6a55eda3c2dd4a..b0751af5803515 100644 --- a/docs/pages/guides/ios-developer-mode.mdx +++ b/docs/pages/guides/ios-developer-mode.mdx @@ -48,7 +48,7 @@ Go to the Settings app, and navigate to **Privacy & Security** > **Developer Mod @@ -60,7 +60,7 @@ Enable the toggle. You will receive a prompt from iOS to restart your device. Pr @@ -72,7 +72,7 @@ After the device restarts, unlock your device. A system alert should appear. Pre @@ -102,7 +102,7 @@ Under **Devices**, you'll see a warning "Previous preparation error: Developer M @@ -116,7 +116,7 @@ Enable the toggle. You will receive a prompt from iOS to restart your device. Pr diff --git a/docs/pages/guides/publishing-websites.mdx b/docs/pages/guides/publishing-websites.mdx index edc2f913105111..10e01bb392afbc 100644 --- a/docs/pages/guides/publishing-websites.mdx +++ b/docs/pages/guides/publishing-websites.mdx @@ -433,7 +433,7 @@ Now that the web app is published to the `gh-pages` branch, configure GitHub Pag diff --git a/docs/pages/guides/store-assets.mdx b/docs/pages/guides/store-assets.mdx index 06ce57f130c023..96456c46e0325e 100644 --- a/docs/pages/guides/store-assets.mdx +++ b/docs/pages/guides/store-assets.mdx @@ -30,7 +30,7 @@ The most straightforward option โ€” open up your app on a real device and take s @@ -45,7 +45,7 @@ The majority of apps use this approach. It involves taking screenshots of the ap @@ -60,7 +60,7 @@ In this option, on the app store pages, you can incorporate elements of your app diff --git a/docs/pages/guides/typescript.mdx b/docs/pages/guides/typescript.mdx index d48a46c6879728..b490adf8767c0a 100644 --- a/docs/pages/guides/typescript.mdx +++ b/docs/pages/guides/typescript.mdx @@ -19,7 +19,14 @@ This guide provides a quick way to get started for a new project and also steps To create a new project, use the default template which includes base TypeScript configuration, example code, and basic navigation structure: - + After you create a new project using the command above, make sure to follow instructions from: @@ -52,13 +59,27 @@ To install required `devDependencies` such as `typescript` and `@types/react` in - + - + @@ -70,7 +91,14 @@ To install required `devDependencies` such as `typescript` and `@types/react` in To type check your project's files run `tsc` command within the root of your project directory: - + @@ -82,7 +110,14 @@ To type check your project's files run `tsc` command within the root of your pro A project's **tsconfig.json** should extend `expo/tsconfig.base` by default. You can automatically generate a **tsconfig.json** file by running the command: - + The default configuration in **tsconfig.json** is user-friendly and encourages adoption. If you prefer **strict type checking** and reduce the chances of runtime errors, enable `strict` under [`compilerOptions`](https://www.typescriptlang.org/docs/handbook/compiler-options.html): @@ -193,13 +228,27 @@ Install [`tsx`](https://tsx.is/) as a dev dependency and utilize its [`tsx/cjs` - + - + diff --git a/docs/pages/guides/using-clerk.mdx b/docs/pages/guides/using-clerk.mdx index 1416c537bbc073..7056bf857c5a77 100644 --- a/docs/pages/guides/using-clerk.mdx +++ b/docs/pages/guides/using-clerk.mdx @@ -55,17 +55,38 @@ This guide shows you how to install `@clerk/expo`, wrap your app in ` + `expo-secure-store` is a peer dependency. Clerk uses it through `@clerk/expo/token-cache` to encrypt session tokens with the iOS Keychain and the Android Keystore. If you plan to use native Sign in with Google, also install `expo-crypto`: - + For native Sign in with Apple, install both `expo-apple-authentication` and `expo-crypto`: - + You do not need any of these extra packages if you only use `` from `@clerk/expo/native`, since the component handles social sign-in flows internally. @@ -206,15 +227,44 @@ export function ProfileLink() { This approach requires a development build because the components are backed by native modules: @@ -383,13 +433,27 @@ export default function HomeScreen() { - + - + @@ -397,7 +461,14 @@ export default function HomeScreen() { For the JavaScript-only approach, run the following command and open the project in Expo Go: - + diff --git a/docs/pages/guides/using-convex.mdx b/docs/pages/guides/using-convex.mdx index cd7f8b9292d6fe..7d4400f8ec255f 100644 --- a/docs/pages/guides/using-convex.mdx +++ b/docs/pages/guides/using-convex.mdx @@ -59,7 +59,14 @@ The integration command: After the integration command finishes, start the Convex dev server: - + This creates the local **convex** directory if your project does not have one yet, generates the typed API files, and syncs your Convex functions with your deployment while it runs. diff --git a/docs/pages/guides/using-eslint.mdx b/docs/pages/guides/using-eslint.mdx index 99fea7514a366d..4047b494c0fe01 100644 --- a/docs/pages/guides/using-eslint.mdx +++ b/docs/pages/guides/using-eslint.mdx @@ -21,7 +21,14 @@ This guide provides steps to set up and configure ESLint and Prettier. To set up ESLint in your Expo project, you can use the Expo CLI to install the necessary dependencies. Running this command also creates a **eslint.config.js** file at the root of your project which extends configuration from [`eslint-config-expo`](https://github.com/expo/expo/tree/main/packages/eslint-config-expo). - + ### Usage @@ -30,10 +37,24 @@ To set up ESLint in your Expo project, you can use the Expo CLI to install the n You can lint your code manually from the command line with the `npx expo lint` script: Running the above command will run the `lint` script from **package.json**. @@ -125,7 +146,12 @@ To install Prettier in your project: @@ -133,7 +159,12 @@ To install Prettier in your project: @@ -223,13 +254,27 @@ Upgrade ESLint and `eslint-config-expo`: - + - + @@ -237,6 +282,13 @@ Upgrade ESLint and `eslint-config-expo`: If you haven't customized your ESLint config at all, delete your **.eslintrc.js** and generate the new config with: - + Alternatively, migrate your config based on the [ESLint's migration guide](https://eslint.org/docs/latest/use/configure/migration-guide). `npx expo lint` supports both legacy and flat config, so the new config will automatically be picked up by the CLI. diff --git a/docs/pages/guides/using-firebase.mdx b/docs/pages/guides/using-firebase.mdx index c5ded28eed5543..44e7b3430a52d6 100644 --- a/docs/pages/guides/using-firebase.mdx +++ b/docs/pages/guides/using-firebase.mdx @@ -60,7 +60,14 @@ Firebase JS SDK does not support all services for mobile apps. Some of these ser After you have created your [Expo project](/get-started/create-a-project/), you can install the Firebase JS SDK using the following command: - + @@ -187,7 +194,14 @@ It allows configuring any native code required by React Native Firebase using [C To install [`expo-dev-client`](/develop/development-builds/create-a-build/), run the following command in your project: - + @@ -196,7 +210,14 @@ To install [`expo-dev-client`](/develop/development-builds/create-a-build/), run To use React Native Firebase, it is necessary to install the `@react-native-firebase/app` module. This module provides the core functionality for all other modules. It also adds custom native code in your project using a config plugin. You can install it using the following command: - + **At this point, you must follow the instructions from [React Native Firebase documentation](https://rnfirebase.io/#managed-workflow)** as it covers all the steps required to configure your project with the library. diff --git a/docs/pages/guides/using-logrocket.mdx b/docs/pages/guides/using-logrocket.mdx index 3bb27d5fa2732e..bd092bdc3c0b13 100644 --- a/docs/pages/guides/using-logrocket.mdx +++ b/docs/pages/guides/using-logrocket.mdx @@ -13,7 +13,14 @@ import { Terminal } from '~/ui/components/Snippet'; You can install the LogRocket SDK with the following command: - + Then, in your [app config](/workflow/configuration/), include the LogRocket config plugin: @@ -60,21 +67,21 @@ Go to your **Account settings** > [**Overview**](https://expo.dev/accounts/%5Bac Then, go to your project, under **Project settings** > [**General**](https://expo.dev/accounts/%5Baccount%5D/projects/%5BprojectName%5D/settings) and click **Connect** to link your LogRocket project with your project on Expo: Then, you'll start to see **View on LogRocket** buttons in the EAS dashboard in the Native Deployments and Updates dashboards, along with the last few sessions from your app. ## Learn more about LogRocket diff --git a/docs/pages/guides/using-nextjs.mdx b/docs/pages/guides/using-nextjs.mdx index 776e880167ddca..cfd6027347aa2a 100644 --- a/docs/pages/guides/using-nextjs.mdx +++ b/docs/pages/guides/using-nextjs.mdx @@ -20,7 +20,14 @@ Using Expo with Next.js means you can share some of your existing components and To quickly get started, create a new project using [with-nextjs](https://github.com/expo/examples/tree/master/with-nextjs) template: - + - **Native**: `npx expo start` โ€” start the Expo project - **Web**: `npx next dev` โ€” start the Next.js project @@ -31,7 +38,14 @@ To quickly get started, create a new project using [with-nextjs](https://github. Ensure you have `expo`, `next`, `@expo/next-adapter` installed in your project: - + ### Transpilation @@ -250,7 +264,14 @@ Add a `build` script to your **package.json**: Install the Vercel CLI: - + diff --git a/docs/pages/guides/using-resend.mdx b/docs/pages/guides/using-resend.mdx index af60f9595789cb..08a9a9f0f8d017 100644 --- a/docs/pages/guides/using-resend.mdx +++ b/docs/pages/guides/using-resend.mdx @@ -56,7 +56,14 @@ RESEND_API_KEY=YOUR_RESEND_API_KEY In your Expo project, install the Resend SDK using the following command: - + The resend SDK library is a server-only library. It allows you to send emails from the server-side code of your app. Since this guide uses [API Routes](/router/web/api-routes/) to handle email submissions, you need to install the resend as part of your Expo project. @@ -228,7 +235,14 @@ To make the API route (`/api/audience`) accessible from a URL, you can deploy it 1. Run the following command to export the web and API assets. The exported files are saved inside a **dist** directory and the API route file is part of this directory: - + 2. Run the following to create a production deployment via EAS Hosting: diff --git a/docs/pages/guides/using-sentry.mdx b/docs/pages/guides/using-sentry.mdx index 3aaff4ae2e7719..1f95c55397601f 100644 --- a/docs/pages/guides/using-sentry.mdx +++ b/docs/pages/guides/using-sentry.mdx @@ -64,7 +64,14 @@ The easiest way to set up Sentry in your Expo project is to use the Sentry wizar Run the following command in your project directory: - + The wizard will: @@ -104,10 +111,24 @@ Using the above instructions, no additional work is needed to integrate Sentry i After running `eas update`, upload the source maps to Sentry: That's it! Errors for your updates will now be properly symbolicated in Sentry. @@ -161,7 +182,7 @@ if (typeof updateGroup === 'string') { Once configured, information about the associated update will show up in an error's tag section: - + diff --git a/docs/pages/guides/using-supabase.mdx b/docs/pages/guides/using-supabase.mdx index c977f29356a903..57873528fcd6a0 100644 --- a/docs/pages/guides/using-supabase.mdx +++ b/docs/pages/guides/using-supabase.mdx @@ -39,7 +39,14 @@ Using [`supabase-js`](https://supabase.com/docs/reference/javascript/introductio After you have created your [Expo project](/get-started/create-a-project/), install `@supabase/supabase-js` and the required dependencies using the following command: - + diff --git a/docs/pages/llms.mdx b/docs/pages/llms.mdx index 378c84c943cb21..6e3580aef160fb 100644 --- a/docs/pages/llms.mdx +++ b/docs/pages/llms.mdx @@ -1,6 +1,6 @@ --- title: Documentation for AI agents and LLMs -sidebar_title: AI agents +sidebar_title: LLMs description: Efficient ways for AI agents and LLMs to access and consume Expo documentation. --- diff --git a/docs/pages/eas/ai/mcp.mdx b/docs/pages/mcp.mdx similarity index 100% rename from docs/pages/eas/ai/mcp.mdx rename to docs/pages/mcp.mdx diff --git a/docs/pages/modules/autolinking.mdx b/docs/pages/modules/autolinking.mdx index 08958a8b8a636e..44f9b6f2a78a43 100644 --- a/docs/pages/modules/autolinking.mdx +++ b/docs/pages/modules/autolinking.mdx @@ -193,7 +193,14 @@ When enabled, this flag opts you out of the new behavior and restores the behavi This command is called by the build system to resolve Expo modules during the first phase of autolinking. Its implementation is shared between all platforms. The output from `search` will contain a list of `duplicates` per package, if any duplicates were found. - + The above command returns an object in JSON format with Expo modules that Expo Autolinking found: @@ -218,7 +225,14 @@ The above command returns an object in JSON format with Expo modules that Expo A This command is called by the build system during the second phase of autolinking. It outputs an object with more (platform-specific) details for each Expo module, such as the path to the **build.gradle** or podspec files and module classes to link. -']} /> +'], + yarn: ['$ yarn dlx expo-modules-autolinking resolve --platform '], + pnpm: ['$ pnpm dlx expo-modules-autolinking resolve --platform '], + bun: ['$ bunx expo-modules-autolinking resolve --platform '], + }} +/> For example, with the `--platform apple` option, it returns an object in JSON format with an array of modules and resolved details for the platform: @@ -250,7 +264,14 @@ For example, with the `--platform apple` option, it returns an object in JSON fo Verifies the autolinked native modules by checking for duplicates. Warnings are shown for each conflicting, duplicate installation. - + Pass the `--verbose` option to list all autolinked native modules. @@ -259,7 +280,14 @@ Pass the `--verbose` option to list all autolinked native modules. This command is called by the build system when autolinking React Native modules. It outputs an object with more platform-specific details for each React Native module, such as the path to the gradle or podspec files. - + For example, with the `--platform ios` option, it returns an object in **react-native.config.js**'s output format with information about each React Native dependency and the path to the React Native installation. diff --git a/docs/pages/modules/config-plugin-and-native-module-tutorial.mdx b/docs/pages/modules/config-plugin-and-native-module-tutorial.mdx index 3310e88214fcfc..02e9d61c646671 100644 --- a/docs/pages/modules/config-plugin-and-native-module-tutorial.mdx +++ b/docs/pages/modules/config-plugin-and-native-module-tutorial.mdx @@ -23,7 +23,14 @@ This tutorial explains how to create a new config plugin from scratch and read c Start by initializing a new Expo module project with `create-expo-module`. This sets up scaffolding for Android, iOS, and TypeScript and includes an example project to test the module within an app. Run the following command to get started: - + This guide uses the name `expo-native-configuration`/`ExpoNativeConfiguration` for the module project. However, you can choose any name you prefer. @@ -138,29 +145,83 @@ export default function App() { In the root of your project, run the TypeScript compiler to watch for changes and rebuild the module's JavaScript: In another terminal window, compile and run the example app: You should see a screen with the text "API key: api-key". @@ -241,8 +302,12 @@ At the root of your project, run `npm run build plugin` to start the TypeScript When you run the `npx expo prebuild` command inside your **example** directory, the terminal logs "my custom plugin" through a console statement. To inject your custom API keys into **AndroidManifest.xml** and **Info.plist**, use helper [`mods` provided by `expo/config-plugins`](/config-plugins/mods/). These make it easy to modify native files. For this example, use `withAndroidManifest` and `withInfoPlist`. @@ -381,18 +446,56 @@ public class ExpoNativeConfigurationModule: Module { With your native modules reading the fields added to the native files, you can now run the example app and access your custom API key using the `ExamplePlugin.getApiKey()` function. diff --git a/docs/pages/modules/get-started.mdx b/docs/pages/modules/get-started.mdx index 8ad27e02bc3c48..95a524af16a820 100644 --- a/docs/pages/modules/get-started.mdx +++ b/docs/pages/modules/get-started.mdx @@ -29,7 +29,14 @@ Both of these flows are covered in the next sections. Navigate to your project directory (the one that contains the **package.json** file) and run the following command. This is the recommended way to create a local Expo module. - + You can provide a meaningful module name in the CLI prompt. For the rest of the prompts, you can also accept the default suggestions. @@ -48,7 +55,14 @@ Once you've run the command, you will see a new directory created in your projec Then, if your project doesn't have native projects generated (**android** and **ios** directories), run the following command, otherwise skip this command: - + > **Note**: If you have a pre-existing **ios** directory in your project's root which was created using `npx expo prebuild`, you must reinstall the pods: > @@ -80,7 +94,14 @@ export default function HomeScreen() { Start the development server in your terminal so that when you edit the native module and build the app in the next step, the changes will be reflected in the app: - + Congratulations! You have created a local Expo module. You can now start working on it. @@ -127,7 +148,14 @@ You have to repeat the build step anytime you make a change to the native code t To create a new Expo module from scratch, run the `create-expo-module` script as shown below. The script will ask you a few questions and then generate the native Expo module along with the example app for Android and iOS that uses your new module. - + @@ -137,11 +165,25 @@ The script will ask you a few questions and then generate the native Expo module Navigate to the module directory and then open the Android and/or iOS example project by running the following commands: - + Go to **example** directory and start the development server in your terminal so that when you edit the native module and build the app in the next step, the changes will be reflected in the app: - + > **Note:** If you're using Windows, you can open the example project by opening the **android** directory in Android Studio, but you cannot open the iOS project files. diff --git a/docs/pages/modules/inline-modules-tutorial.mdx b/docs/pages/modules/inline-modules-tutorial.mdx index c73cf6b23d8a89..52b3b643d49195 100644 --- a/docs/pages/modules/inline-modules-tutorial.mdx +++ b/docs/pages/modules/inline-modules-tutorial.mdx @@ -47,7 +47,14 @@ Note that not all directories are allowed. For more information, see the [inline Run the prebuild command to generate **android** and **ios** native projects with the inline modules setup. - + @@ -108,13 +115,36 @@ export default function InlineModulesDemoComponent() { Now, you can run the example app: After running the above command(s), you will see the app with text constant coming from the native android/iOS module. diff --git a/docs/pages/modules/native-module-tutorial.mdx b/docs/pages/modules/native-module-tutorial.mdx index 3b2716ae758926..34007014680309 100644 --- a/docs/pages/modules/native-module-tutorial.mdx +++ b/docs/pages/modules/native-module-tutorial.mdx @@ -28,7 +28,14 @@ In this tutorial, you build a module that stores the user's preferred app theme: First, create a new module. For this tutorial, the module is named `expo-settings` or `ExpoSettings`. You can choose a different name, but adjust the instructions to match your choice. - + > **info** Since you aren't going to actually ship this library, you can hit Return for all the prompts to accept the default values. @@ -131,24 +138,59 @@ export default function App() { Start the TypeScript compiler to watch for changes. In a separate terminal window, run the example app. You should see the text "Theme: system" in the center of the screen when you launch the example app. The value `"system"` comes from synchronously calling the `getTheme()` function in the native module. You will change this value in the next step. diff --git a/docs/pages/modules/native-view-tutorial.mdx b/docs/pages/modules/native-view-tutorial.mdx index 4c974d9cd2c3e9..519a62bfc36ab9 100644 --- a/docs/pages/modules/native-view-tutorial.mdx +++ b/docs/pages/modules/native-view-tutorial.mdx @@ -20,7 +20,14 @@ In this tutorial, you'll build an example module with a native view that renders Create a new module by running the following command and name the example module `expo-web-view`: - + > **info** Since this is an example library and won't be published, press Return for all prompts to accept the default values. @@ -105,22 +112,61 @@ export default function App() { To ensure everything is working, start the TypeScript compiler to watch for changes and rebuild the module's JavaScript: You should now see a blank purple screen. While it's not very exciting, it's a good start. Next, turn it into a WebView. @@ -191,14 +237,40 @@ class ExpoWebView: ExpoView { No changes are required. Rebuild and run the app using the following commands: After that, you'll see the [Expo Modules API overview page](/modules/overview) rendered. If the changes aren't reflected, try reinstalling the app. @@ -291,13 +363,36 @@ export default function App() { Rebuild the example app: After that, you'll see the [Expo homepage](https://expo.dev) in the WebView. @@ -551,7 +646,7 @@ function LoadingView({ isLoading }: { isLoading: boolean }) { diff --git a/docs/pages/modules/third-party-library.mdx b/docs/pages/modules/third-party-library.mdx index cbeab36c05d41d..aaef025c57bf12 100644 --- a/docs/pages/modules/third-party-library.mdx +++ b/docs/pages/modules/third-party-library.mdx @@ -45,7 +45,14 @@ The following steps assume that the new module is created inside a new Expo proj Alternatively, you can use the new module as a view inside the existing Expo project directory. Run the following command in your project's directory: - + Now, open the newly created `modules/expo-radial-chart` directory to start editing the native code. @@ -55,7 +62,14 @@ Now, open the newly created `modules/expo-radial-chart` directory to start editi Create a new empty Expo module that can be published on npm and utilized in any Expo app by running the following command: - + > **info** **Tip**: If you aren't going to ship this library, press Return for all the prompts to accept the default values in the terminal window. @@ -80,13 +94,36 @@ To verify that everything is functioning correctly, let's run the example projec If you started with an existing Expo project, run the following commands from your Expo project's root directory: @@ -96,24 +133,67 @@ If you started with an existing Expo project, run the following commands from yo If you started with a new module project, open a terminal window, start the TypeScript compiler to watch for changes, and rebuild the module JavaScript: In another terminal window, compile and run the example app: diff --git a/docs/pages/modules/type-generation-reference.mdx b/docs/pages/modules/type-generation-reference.mdx index cca6a24c0a3aee..29b72543c46cea 100644 --- a/docs/pages/modules/type-generation-reference.mdx +++ b/docs/pages/modules/type-generation-reference.mdx @@ -21,7 +21,14 @@ The `expo-type-information` package provides tools to automatically generate Typ Install the `expo-type-information` library: - + To use this package you also need to have `sourcekitten` installed. You can use macOS package manager like Homebrew. diff --git a/docs/pages/modules/type-generation-tutorial.mdx b/docs/pages/modules/type-generation-tutorial.mdx index ebd269939275c9..942a981fda92b8 100644 --- a/docs/pages/modules/type-generation-tutorial.mdx +++ b/docs/pages/modules/type-generation-tutorial.mdx @@ -17,7 +17,14 @@ In this tutorial you will learn how to use the `expo-type-information` package t First install the `expo-type-information` package. - + To use this package you also need to have sourcekitten installed. @@ -67,8 +74,16 @@ const styles = StyleSheet.create({ We will now use the `expo-type-information` package to generate a TS interface for these modules. When in the root of the project run the following command: The `--app-json` (short `-a`) specifies the path to the app configuration file, where watchedDirectories for inline modules are defined. When using `--watcher` (short `-w`) option the app configuration file and all `watchedDirectories` will be watched and TS interface will be regenerated when these change. @@ -225,8 +240,16 @@ const styles = StyleSheet.create({ To see the watcher in action make sure that you have the previous command still running And let's add a new function to the FirstInlineModule: @@ -359,15 +382,23 @@ First remove the files above and make sure you're in the project root. Now run a command to generate the interface If you intend on changing the file and want to see how the interface changes, add the `--watcher` (short `-w`) flag to the command. The `--module` option (short `-m`) is a path to the root folder of the module. After running this command you should see 3 new generated files in the module package. diff --git a/docs/pages/modules/use-standalone-expo-module-in-your-project.mdx b/docs/pages/modules/use-standalone-expo-module-in-your-project.mdx index 6dcc761b81887a..130a0a87fa2b02 100644 --- a/docs/pages/modules/use-standalone-expo-module-in-your-project.mdx +++ b/docs/pages/modules/use-standalone-expo-module-in-your-project.mdx @@ -32,7 +32,14 @@ Your project should use the following structure: Once you have set up the basic monorepo structure, create a new module using `create-expo-module` with the flag `--no-example` to skip creating the example app: - + @@ -61,24 +68,54 @@ Add your native module from **packages** to your apps' dependencies. Update the Run one of your apps to ensure everything works. Then, start the TypeScript compiler in **packages/expo-settings** to watch for changes and rebuild the module's JavaScript: Open another terminal window, select an app from the **apps** directory, and run the `prebuild` command with the `--clean` option. Repeat these steps for each app in your monorepo to use the new module. - + Compile and run the app with the following command: You can now use the module in your app. To test it, edit the **src/app/index.tsx** file in your app and render the text message from the `expo-settings` module: @@ -111,7 +148,14 @@ You can publish the module on npm and install it as a dependency in your project Start by creating a new module with `create-expo-module`. Follow the prompts carefully, as you will publish this library, and choose a unique name for your npm package. - + @@ -122,23 +166,59 @@ Start by creating a new module with `create-expo-module`. Follow the prompts car Run one of your apps to ensure everything works. Then, start the TypeScript compiler in the root of your project to watch for changes and rebuild the module's JavaScript: Open another terminal window, compile and run the example app: @@ -172,12 +252,28 @@ Apart from publishing your module to npm, you can use it in your project in the To test the published module in a new project, create a new app and install the module as a dependency by running the following command: You can now use the module in your app! To test it, edit **src/app/index.tsx** and render the text message from **expo-settings**. @@ -199,15 +295,40 @@ export default function TabOneScreen() { Finally, prebuild your project and run the app by executing the following commands: After this configuration, you see the text "Hello world! ๐Ÿ‘‹" displayed in the app. diff --git a/docs/pages/monitoring/services.mdx b/docs/pages/monitoring/services.mdx index b166fa69f60b12..d9caeb4cccc844 100644 --- a/docs/pages/monitoring/services.mdx +++ b/docs/pages/monitoring/services.mdx @@ -20,7 +20,7 @@ Expo provides the [`expo-insights`](/eas-insights/introduction/) library, which Get started with the following guide: @@ -38,8 +38,8 @@ Get started with the following guide: Get started with the following guide: @@ -57,7 +57,7 @@ You can get more insights with [LogRocket](https://logrocket.com). LogRocket rec Get started with the following guide: @@ -77,7 +77,7 @@ It notifies you of exceptions or errors that your users run into while using you Get started with the following guide: @@ -95,7 +95,7 @@ Get started with the following guide: Get started with the following guide: diff --git a/docs/pages/more/glossary-of-terms.mdx b/docs/pages/more/glossary-of-terms.mdx index e2db04ee9a39c2..d64491bd9039dd 100644 --- a/docs/pages/more/glossary-of-terms.mdx +++ b/docs/pages/more/glossary-of-terms.mdx @@ -217,7 +217,7 @@ Refers to the command `npx expo install` from [Expo CLI](#expo-cli). This comman ### Expo MCP server -[Expo MCP (Model Context Protocol) server](/eas/ai/mcp/) is a remote server hosted by Expo that integrates with AI-assisted tools such as Claude Code, Cursor, VS Code, and others. It enables them to interact directly with your Expo projects. +[Expo MCP (Model Context Protocol) server](/mcp/) is a remote server hosted by Expo that integrates with AI-assisted tools such as Claude Code, Cursor, VS Code, and others. It enables them to interact directly with your Expo projects. ### Expo Module Config diff --git a/docs/pages/push-notifications/push-notifications-setup.mdx b/docs/pages/push-notifications/push-notifications-setup.mdx index 87b0aceb1a27cc..1444058f1240f7 100644 --- a/docs/pages/push-notifications/push-notifications-setup.mdx +++ b/docs/pages/push-notifications/push-notifications-setup.mdx @@ -50,7 +50,14 @@ The following steps in this guide use [EAS Build](/build/introduction/). This is Run the following command to install the `expo-notifications` and `expo-constants` libraries: - + - [`expo-notifications`](/versions/latest/sdk/notifications) library is used to request a user's permission and to obtain the `ExpoPushToken` for sending push notifications. - [`expo-constants`](/versions/latest/sdk/constants) is used to get the `projectId` value from the app config. @@ -274,7 +281,14 @@ After creating and installing the development build, you can use [Expo push noti 1. Start the development server for your project: - + 2. Open the development build on your device. diff --git a/docs/pages/router/advanced/native-tabs.mdx b/docs/pages/router/advanced/native-tabs.mdx index efda93e6ef2a01..faa2c58920451b 100644 --- a/docs/pages/router/advanced/native-tabs.mdx +++ b/docs/pages/router/advanced/native-tabs.mdx @@ -51,7 +51,7 @@ The above file structure produces a layout with a tab bar at the bottom of the s @@ -502,7 +502,7 @@ export default function TabLayout() { @@ -746,7 +746,7 @@ export default function CheckoutScreen() { @@ -802,7 +802,7 @@ export default function TabLayout() { diff --git a/docs/pages/router/advanced/tabs.mdx b/docs/pages/router/advanced/tabs.mdx index 5daa1692192718..2997cdef92da27 100644 --- a/docs/pages/router/advanced/tabs.mdx +++ b/docs/pages/router/advanced/tabs.mdx @@ -62,7 +62,7 @@ This file structure produces a layout with a tab bar at the bottom of the screen diff --git a/docs/pages/router/advanced/web-modals.mdx b/docs/pages/router/advanced/web-modals.mdx index 8b1c48543915df..c2e70527e3e175 100644 --- a/docs/pages/router/advanced/web-modals.mdx +++ b/docs/pages/router/advanced/web-modals.mdx @@ -384,7 +384,7 @@ export default function Layout() { Here's the result of the above example: diff --git a/docs/pages/router/error-handling.mdx b/docs/pages/router/error-handling.mdx index 957c472a938464..ed855651dbeb8b 100644 --- a/docs/pages/router/error-handling.mdx +++ b/docs/pages/router/error-handling.mdx @@ -11,7 +11,7 @@ This guide specifies how to handle unmatched routes, errors, and loading states @@ -39,7 +39,7 @@ Expo Router enables fine-tuned error handling to enable a more opinionated data- diff --git a/docs/pages/router/reference/link-preview.mdx b/docs/pages/router/reference/link-preview.mdx index b758afa84bd164..176bcb2821b327 100644 --- a/docs/pages/router/reference/link-preview.mdx +++ b/docs/pages/router/reference/link-preview.mdx @@ -49,7 +49,7 @@ The following example shows a custom link preview size on iOS: @@ -82,7 +82,7 @@ The following example shows a custom link preview on iOS: @@ -104,7 +104,7 @@ The following example shows a custom link preview on iOS: @@ -132,7 +132,7 @@ The following example shows a context menu with four elements, each using a diff @@ -157,7 +157,7 @@ The following example shows a nested context menu on iOS: diff --git a/docs/pages/router/reference/sitemap.mdx b/docs/pages/router/reference/sitemap.mdx index 529c57170c9af7..58e2f725c84fe7 100644 --- a/docs/pages/router/reference/sitemap.mdx +++ b/docs/pages/router/reference/sitemap.mdx @@ -28,7 +28,7 @@ You can also search for links directly in a browser like Safari or Chrome to tes diff --git a/docs/pages/skills.mdx b/docs/pages/skills.mdx index 38b4eb8ecf2bac..1b9faae4c5e395 100644 --- a/docs/pages/skills.mdx +++ b/docs/pages/skills.mdx @@ -120,6 +120,6 @@ Try the following prompts after installing Expo Skills. Your AI agent will autom diff --git a/docs/pages/tutorial/add-navigation.mdx b/docs/pages/tutorial/add-navigation.mdx index 19513c86805e7c..62c611579005eb 100644 --- a/docs/pages/tutorial/add-navigation.mdx +++ b/docs/pages/tutorial/add-navigation.mdx @@ -269,7 +269,7 @@ Let's take a look at our app now to see the new bottom tabs: @@ -358,7 +358,7 @@ Our app now has a custom bottom tabs navigator: diff --git a/docs/pages/tutorial/build-a-screen.mdx b/docs/pages/tutorial/build-a-screen.mdx index 1756a06698a616..dccfbe49e43772 100644 --- a/docs/pages/tutorial/build-a-screen.mdx +++ b/docs/pages/tutorial/build-a-screen.mdx @@ -15,7 +15,7 @@ In this chapter, we'll create the first screen of the StickerSmash app. @@ -39,7 +39,7 @@ Before we build this screen by writing code, let's break it down into some essen @@ -52,7 +52,7 @@ The first button contains multiple components. The parent element provides a yel @@ -70,7 +70,7 @@ The Image component takes the source of an image as its value. The source can be @@ -298,7 +298,7 @@ Let's take a look at our app on Android, iOS and the web: diff --git a/docs/pages/tutorial/configuration.mdx b/docs/pages/tutorial/configuration.mdx index b9865bc7aa6d0d..66c6a678426ec7 100644 --- a/docs/pages/tutorial/configuration.mdx +++ b/docs/pages/tutorial/configuration.mdx @@ -56,7 +56,7 @@ Let's take a look at our app now on Android, and iOS: @@ -68,7 +68,7 @@ Let's take a look at our app now on Android, and iOS: Inside the project, there's an **icon.png** file inside the **assets/images** directory. This is our app icon. It's a 1024px by 1024px image and looks as shown below: - + Like the splash screen image, the `"icon"` property in the **app.json** file configures the app icon's path. By default, a new Expo project defines the correct path to `"./assets/images/icon.png"`. We don't have to change anything. @@ -78,7 +78,7 @@ You can see the icon in various places in Expo Go. Here is an example of the app diff --git a/docs/pages/tutorial/create-a-modal.mdx b/docs/pages/tutorial/create-a-modal.mdx index c0543819162c5a..03eed19e1ad149 100644 --- a/docs/pages/tutorial/create-a-modal.mdx +++ b/docs/pages/tutorial/create-a-modal.mdx @@ -316,7 +316,7 @@ Let's take a look at our app on Android, iOS and the web: @@ -516,7 +516,7 @@ Here is the result after this step: @@ -709,7 +709,7 @@ Let's take a look at our app on Android, iOS and the web: diff --git a/docs/pages/tutorial/create-your-first-app.mdx b/docs/pages/tutorial/create-your-first-app.mdx index b76ac39e44a0e8..05d97be658b72b 100644 --- a/docs/pages/tutorial/create-your-first-app.mdx +++ b/docs/pages/tutorial/create-your-first-app.mdx @@ -178,7 +178,7 @@ Once it is running on all platforms, the app should look like this: @@ -234,7 +234,7 @@ Once you save your changes, they're sent and applied to the running apps connect diff --git a/docs/pages/versions/unversioned/sdk/local-authentication.mdx b/docs/pages/versions/unversioned/sdk/local-authentication.mdx index 9f9f008c1ca7b8..0377a654b82953 100644 --- a/docs/pages/versions/unversioned/sdk/local-authentication.mdx +++ b/docs/pages/versions/unversioned/sdk/local-authentication.mdx @@ -58,7 +58,7 @@ You can configure `expo-local-authentication` using its built-in [config plugin] name: 'faceIDPermission', platform: 'ios', description: - 'A string to set the [`NSFaceIDUsageDescription`](#permission-nsfaceidusagedescription) permission message.', + 'A string to set the [`NSFaceIDUsageDescription`](#permission-nsfaceidusagedescription) permission message. Set it to `false` to omit `NSFaceIDUsageDescription` from your **Info.plist** if your app does not use Face ID.', default: '"Allow $(PRODUCT_NAME) to use Face ID"', }, ]} diff --git a/docs/pages/workflow/ios-simulator.mdx b/docs/pages/workflow/ios-simulator.mdx index bc44af0fbd29ea..1becaa12be77a2 100644 --- a/docs/pages/workflow/ios-simulator.mdx +++ b/docs/pages/workflow/ios-simulator.mdx @@ -33,7 +33,7 @@ You can also press Shift + I in the Expo CLI to interactiv @@ -71,7 +71,7 @@ Sometimes the iOS Simulator doesn't respond to the open command. If it seems stu You can use this menu to open any version of the simulator. You can also open multiple simulators at the same time, however, Expo CLI will always target the most recently opened simulator. diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 4d95237a55f482..b6d9afafc9923e 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -112,9 +112,6 @@ importers: react: specifier: ^19.2.6 version: 19.2.6 - react-confetti-explosion: - specifier: ^3.0.3 - version: 3.0.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react-diff-view: specifier: ^3.3.3 version: 3.3.3(react@19.2.6) @@ -5999,12 +5996,6 @@ packages: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} - react-confetti-explosion@3.0.3: - resolution: {integrity: sha512-ow5ns/1ttzXsIlbbfJmWJNiyQK8lTHBL6lRSUXGaK44K/3NIMngR57Ja96l+D6txTeFhfe0BfXGvORMxhtRDng==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - react-diff-view@3.3.3: resolution: {integrity: sha512-CPveApk6n7ZbkW7T6PoptR7LWAvD9hohTHZ7WnKnu3GZkTfUB5rvg486apPo94iYVi4fZd3Nt+rtBZ5877exoQ==} peerDependencies: @@ -13599,11 +13590,6 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 - react-confetti-explosion@3.0.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6): - dependencies: - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - react-diff-view@3.3.3(react@19.2.6): dependencies: classnames: 2.5.1 diff --git a/docs/public/_redirects b/docs/public/_redirects index 109dc9408c187f..21ceb6ab139d44 100644 --- a/docs/public/_redirects +++ b/docs/public/_redirects @@ -371,6 +371,9 @@ /eas/insights/* /eas-insights/:splat 301 /eas/insights /eas-insights/introduction 301 +# MCP server moved out of the EAS section to the top-level /mcp route +/eas/ai/mcp /mcp 301 + # After archiving Configure JS engines guide /guides/configuring-js-engines/ /archive/configuring-js-engines/ 301 diff --git a/docs/public/static/data/unversioned/expo-ui/swift-ui/modifiers.json b/docs/public/static/data/unversioned/expo-ui/swift-ui/modifiers.json index b478e7ec01b3dd..bcc5b874e07ff1 100644 --- a/docs/public/static/data/unversioned/expo-ui/swift-ui/modifiers.json +++ b/docs/public/static/data/unversioned/expo-ui/swift-ui/modifiers.json @@ -1 +1 @@ -{"schemaVersion":"2.0","name":"expo-ui/swift-ui/modifiers","variant":"project","kind":1,"children":[{"name":"ModifierConfig","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Base interface for all view modifiers.\nAll modifiers must have a type field and can include arbitrary parameters."}]},"children":[{"name":"$type","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"eventListener","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"args","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"any"}}]},{"name":"ChainableAnimationType","variant":"declaration","kind":2097152,"children":[{"name":"[VALUE_SYMBOL]","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/animation/types.ts","qualifiedName":"AnimationObject"},"name":"AnimationObject","package":"@expo/ui"}}]}}},{"name":"delay","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Adds a delay before the animation starts (in seconds)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"delay","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}}},{"name":"repeat","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Repeats the animation the given number of times."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"autoreverses","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"repeatCount","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}}}]},{"name":"Color","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/types.ts","qualifiedName":"NamedColor"},"name":"NamedColor","package":"@expo/ui"}]}},{"name":"ContainerBackgroundPlacement","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"widget"},{"type":"literal","value":"navigation"},{"type":"literal","value":"navigationSplitView"}]}},{"name":"DatePickerStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"compact"},{"type":"literal","value":"graphical"},{"type":"literal","value":"wheel"}]}},{"name":"DiscreteSymbolEffectValue","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Equatable primitive accepted as a discrete effect trigger."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"boolean"}]}},{"name":"DynamicTypeSizeValue","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A standard size for Dynamic Type, from "},{"kind":"code","text":"`xSmall`"},{"kind":"text","text":" through the five\n"},{"kind":"code","text":"`accessibility`"},{"kind":"text","text":" sizes. Mirrors SwiftUI's "},{"kind":"code","text":"`DynamicTypeSize`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"xSmall"},{"type":"literal","value":"small"},{"type":"literal","value":"medium"},{"type":"literal","value":"large"},{"type":"literal","value":"xLarge"},{"type":"literal","value":"xxLarge"},{"type":"literal","value":"xxxLarge"},{"type":"literal","value":"accessibility1"},{"type":"literal","value":"accessibility2"},{"type":"literal","value":"accessibility3"},{"type":"literal","value":"accessibility4"},{"type":"literal","value":"accessibility5"}]}},{"name":"EnvironmentConfig","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"editMode"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"active"},{"type":"literal","value":"inactive"},{"type":"literal","value":"transient"}]}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"colorScheme"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"light"},{"type":"literal","value":"dark"}]}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"locale"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"timeZone"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}}]}},{"name":"GaugeStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"circular"},{"type":"literal","value":"circularCapacity"},{"type":"literal","value":"linear"},{"type":"literal","value":"linearCapacity"}]}},{"name":"GlobalEvent","variant":"declaration","kind":2097152,"children":[{"name":"onGlobalEvent","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"event","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"nativeEvent","variant":"declaration","kind":1024,"type":{"type":"reference","name":"GlobalEventPayload","package":"@expo/ui"}}]}}}],"type":{"type":"intrinsic","name":"void"}}]}}}]},{"name":"GlobalEventPayload","variant":"declaration","kind":2097152,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"eventName","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"}}]}}},{"name":"IndexViewStyleConfig","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Configuration for the "},{"kind":"code","text":"`indexViewStyle`"},{"kind":"text","text":" modifier."}]},"children":[{"name":"backgroundDisplayMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Translucent background behind the page indicator dots. Useful when the\ndots sit on top of dark or busy content."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'automatic'"}]}]},"type":{"type":"reference","name":"PageIndexBackgroundDisplayMode","package":"@expo/ui"}}]},{"name":"InterpolatingSpringAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"bounce","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Extra bounce to apply to the spring animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"damping","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The damping applied to the spring."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"initialVelocity","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The initial velocity of the animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"mass","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The mass attached to the spring."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"stiffness","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The stiffness of the spring."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"ListStyle","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"plain"},{"type":"literal","value":"inset"},{"type":"literal","value":"insetGrouped"},{"type":"literal","value":"grouped"},{"type":"literal","value":"sidebar"}]}},{"name":"ObservableState","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Observable state shared between JavaScript and native views (Jetpack Compose\non Android and SwiftUI on iOS)."}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/SharedObject.ts","qualifiedName":"SharedObject"},"name":"SharedObject","package":"expo-modules-core"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"onChange","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A single listener invoked on the native UI runtime whenever the value changes\n(after iOS "},{"kind":"code","text":"`didSet`"},{"kind":"text","text":" and Android's setter). Assigning replaces the previous\nlistener; assign "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to clear. The initial value does not fire "},{"kind":"code","text":"`onChange`"},{"kind":"text","text":".\n\nThe callback must be a worklet so it can run synchronously on the UI thread.\nAttach it inside "},{"kind":"code","text":"`useEffect`"},{"kind":"text","text":" and clear it in the cleanup so the listener\nlifecycle matches the component lifecycle."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst state = useNativeState(0);\n\nuseEffect(() => {\n state.onChange = (value) => {\n 'worklet';\n console.log('changed to', value);\n };\n}, []);\n```"}]}]},"type":{"type":"union","types":[{"type":"indexedAccess","indexType":{"type":"literal","value":"listener"},"objectType":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"listener","variant":"declaration","kind":2048,"signatures":[{"name":"listener","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"intrinsic","name":"void"}}]}]}}},{"type":"literal","value":null}]}},{"name":"value","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The current value.\n\nWrites from a UI worklet are synchronous and immediately readable. Writes\nfrom the JS thread are scheduled to the UI thread asynchronously, the new value is not readable until the update has been\napplied. Prefer writing from a worklet when you need synchronous updates"}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}},{"name":"get","variant":"declaration","kind":2048,"signatures":[{"name":"get","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Reads the current value. A React Compiler compliant alternative to reading "},{"kind":"code","text":"`.value`"}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}]},{"name":"set","variant":"declaration","kind":2048,"signatures":[{"name":"set","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Writes a new value. A React Compiler-compliant alternative to assigning "},{"kind":"code","text":"`.value`"}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"intrinsic","name":"void"}}]}]}}]}},{"name":"PageIndexBackgroundDisplayMode","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"always"},{"type":"literal","value":"never"},{"type":"literal","value":"interactive"}]}},{"name":"PageIndexDisplayMode","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"always"},{"type":"literal","value":"never"}]}},{"name":"PickerStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"inline"},{"type":"literal","value":"menu"},{"type":"literal","value":"navigationLink"},{"type":"literal","value":"palette"},{"type":"literal","value":"segmented"},{"type":"literal","value":"wheel"}]}},{"name":"PresentationBackgroundInteractionType","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Presentation background interaction type."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"enabled"},{"type":"literal","value":"disabled"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"detent","variant":"declaration","kind":1024,"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"enabledUpThrough"}}]}}]}},{"name":"PresentationDetent","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Presentation detent type for controlling sheet heights.\n- "},{"kind":"code","text":"`'medium'`"},{"kind":"text","text":": System medium height (approximately half screen)\n- "},{"kind":"code","text":"`'large'`"},{"kind":"text","text":": System large height (full screen)\n- "},{"kind":"code","text":"`{ fraction: number }`"},{"kind":"text","text":": Fraction of screen height (0-1, for example, 0.4 equals to 40% of screen)\n- "},{"kind":"code","text":"`{ height: number }`"},{"kind":"text","text":": Fixed height in points"}]},"type":{"type":"union","types":[{"type":"literal","value":"medium"},{"type":"literal","value":"large"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"fraction","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}]}},{"name":"ProgressViewStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"linear"},{"type":"literal","value":"circular"}]}},{"name":"Shape","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.roundedRectangle","package":"@expo/ui","qualifiedName":"__object.roundedRectangle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.capsule","package":"@expo/ui","qualifiedName":"__object.capsule"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.rectangle","package":"@expo/ui","qualifiedName":"__object.rectangle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.ellipse","package":"@expo/ui","qualifiedName":"__object.ellipse"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.circle","package":"@expo/ui","qualifiedName":"__object.circle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.containerRelativeShape","package":"@expo/ui","qualifiedName":"__object.containerRelativeShape"}}],"name":"ReturnType","package":"typescript"}]}},{"name":"SpringAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"blendDuration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The duration over which to blend between animations (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"bounce","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Extra bounce to apply to the spring animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"dampingFraction","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The amount of damping applied to the spring's motion."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"response","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The spring's response time (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"SymbolEffect","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"AppearSymbolEffect"},"name":"AppearSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"BounceSymbolEffect"},"name":"BounceSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"BreatheSymbolEffect"},"name":"BreatheSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DisappearSymbolEffect"},"name":"DisappearSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DrawOffSymbolEffect"},"name":"DrawOffSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DrawOnSymbolEffect"},"name":"DrawOnSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"PulseSymbolEffect"},"name":"PulseSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"RotateSymbolEffect"},"name":"RotateSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"ScaleSymbolEffect"},"name":"ScaleSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"VariableColorSymbolEffect"},"name":"VariableColorSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"WiggleSymbolEffect"},"name":"WiggleSymbolEffect","package":"@expo/ui"}]}},{"name":"SymbolEffectOptions","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Animation options for a symbol effect."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [Apple documentation](https://developer.apple.com/documentation/symbols/symboleffectoptions)."}]}]},"children":[{"name":"repeat","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"How the effect repeats. Omit for the effect's natural cadence.\n- "},{"kind":"code","text":"`'nonRepeating'`"},{"kind":"text","text":" โ€” play exactly once.\n- "},{"kind":"code","text":"`'continuous'`"},{"kind":"text","text":" โ€” smooth, indefinite repetition (iOS 18+).\n- "},{"kind":"code","text":"`{ count?, delay? }`"},{"kind":"text","text":" โ€” periodic repetition with optional count and delay in seconds (iOS 18+)."}]},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"nonRepeating"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"count","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"delay","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}]}},{"name":"speed","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Animation speed multiplier (1.0 = default)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"TabViewStyleConfig","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Configuration for the "},{"kind":"code","text":"`tabViewStyle`"},{"kind":"text","text":" modifier.\n\n - "},{"kind":"code","text":"`'page'`"},{"kind":"text","text":" โ€” swipeable horizontal pager with optional dot indicators.\n - "},{"kind":"code","text":"`'automatic'`"},{"kind":"text","text":" โ€” SwiftUI's default tab-bar style.\n - "},{"kind":"code","text":"`'sidebarAdaptable'`"},{"kind":"text","text":" โ€” iOS 18+. Sidebar on iPad/Mac, bottom bar on\n iPhone."}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"indexDisplayMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Visibility of the page indicator dots. Only meaningful for the page style."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'automatic'"}]}]},"type":{"type":"reference","name":"PageIndexDisplayMode","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"page"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"automatic"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"sidebarAdaptable"}}]}}]}},{"name":"TimingAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"UnitPointValue","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"zero"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"top"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"leading"},{"type":"literal","value":"center"},{"type":"literal","value":"trailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottom"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"Animation","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"Built-in animation presets for the "},{"kind":"code","text":"`animation`"},{"kind":"text","text":" modifier.\nPresets:\n- Timing presets ("},{"kind":"code","text":"`easeInOut`"},{"kind":"text","text":", "},{"kind":"code","text":"`easeIn`"},{"kind":"text","text":", "},{"kind":"code","text":"`easeOut`"},{"kind":"text","text":", "},{"kind":"code","text":"`linear`"},{"kind":"text","text":") accept\n["},{"kind":"code","text":"`TimingAnimationParams`"},{"kind":"text","text":"](#timinganimationparams).\n- "},{"kind":"code","text":"`spring`"},{"kind":"text","text":" accepts ["},{"kind":"code","text":"`SpringAnimationParams`"},{"kind":"text","text":"](#springanimationparams).\n- "},{"kind":"code","text":"`interpolatingSpring`"},{"kind":"text","text":" accepts\n["},{"kind":"code","text":"`InterpolatingSpringAnimationParams`"},{"kind":"text","text":"](#interpolatingspringanimationparams).\n- Chaining returns ["},{"kind":"code","text":"`ChainableAnimationType`"},{"kind":"text","text":"](#chainableanimationtype)."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Host, VStack } from '@expo/ui/swift-ui';\nimport { animation, Animation } from '@expo/ui/swift-ui/modifiers';\n\nfunction Example() {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n \n \n //...\n \n \n );\n}\n```"}]},{"tag":"@hideType","content":[]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"},"defaultValue":"..."},{"name":"easeIn","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"easeInOut","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"easeOut","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"interpolatingSpring","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"InterpolatingSpringAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"linear","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"spring","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"SpringAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."}]}},"defaultValue":"..."},{"name":"shapes","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"Shape builders for modifiers that accept shapes, such as "},{"kind":"code","text":"`background`"},{"kind":"text","text":" and "},{"kind":"code","text":"`containerShape`"},{"kind":"text","text":".\n\nShapes: "},{"kind":"code","text":"`roundedRectangle`"},{"kind":"text","text":", "},{"kind":"code","text":"`capsule`"},{"kind":"text","text":", "},{"kind":"code","text":"`rectangle`"},{"kind":"text","text":", "},{"kind":"code","text":"`ellipse`"},{"kind":"text","text":", "},{"kind":"code","text":"`circle`"},{"kind":"text","text":", "},{"kind":"code","text":"`containerRelativeShape`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { background, shapes } from '@expo/ui/swift-ui/modifiers';\nimport { Text, Host } from '@expo/ui/swift-ui';\n\nfunction Example() {\n return (\n \n \n Hello, world!\n \n \n );\n}\n```"}]},{"tag":"@hideType","content":[]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"capsule","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"}]}}]}}}],"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.roundedCornerStyle"},{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'capsule'"}]}}}]}},"defaultValue":"..."},{"name":"circle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'circle'"}]}}}]}},"defaultValue":"..."},{"name":"containerRelativeShape","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'containerRelativeShape'"}]}}}]}},"defaultValue":"..."},{"name":"ellipse","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'ellipse'"}]}}}]}},"defaultValue":"..."},{"name":"rectangle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'rectangle'"}]}}}]}},"defaultValue":"..."},{"name":"roundedRectangle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"cornerSize","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"}]}}]}}}],"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.cornerRadius"},{"name":"cornerSize","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.cornerSize"},{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.roundedCornerStyle"},{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'roundedRectangle'"}]}}}]}},"defaultValue":"..."}]}},"defaultValue":"..."},{"name":"accessibilityHidden","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityHidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Marks the view as decoratively-named so VoiceOver and other assistive\ntechnologies skip it during element traversal. Useful for hero icons or\npresentational imagery that's already described by adjacent text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityhidden(_:))."}]}]},"parameters":[{"name":"hidden","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be hidden from accessibility. Defaults to "},{"kind":"code","text":"`true`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityHint","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityHint","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility hint for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityhint(_:))."}]}]},"parameters":[{"name":"hint","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility hint."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityIdentifier","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityIdentifier","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets an accessibility identifier for the view.\n\nUnlike "},{"kind":"code","text":"`accessibilityLabel`"},{"kind":"text","text":", this value is for UI testing and is not visible\nto the user. UI testing tools such as XCUITest read it to locate the view, so\nprefer a stable, machine-readable identifier here."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityidentifier(_:))."}]}]},"parameters":[{"name":"identifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility identifier used for UI testing."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityInputLabels","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityInputLabels","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets alternative spoken phrases that Voice Control uses to refer to the view.\nEach label is read as a "},{"kind":"code","text":"`Text`"},{"kind":"text","text":" element on iOS. For example, an \"End\" button\nmight offer \"Hang up\" so users can trigger it by saying that phrase."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityinputlabels(_:))."}]}]},"parameters":[{"name":"inputLabels","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The spoken phrases that select the view."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityLabel","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityLabel","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility label for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilitylabel(_:))."}]}]},"parameters":[{"name":"label","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility label."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityValue","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityValue","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility value for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityvalue(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility value."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"allowsTightening","variant":"declaration","kind":64,"signatures":[{"name":"allowsTightening","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets whether text in this view can compress the space between characters when necessary to fit text in a line"}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/allowstightening(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"animation","variant":"declaration","kind":64,"signatures":[{"name":"animation","variant":"signature","kind":4096,"parameters":[{"name":"animationObject","variant":"param","kind":32768,"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}},{"name":"animatedValue","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"boolean"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"aspectRatio","variant":"declaration","kind":64,"signatures":[{"name":"aspectRatio","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets aspect ratio constraint."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/aspectratio(_:contentmode:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Optional width/height aspect ratio and content mode."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"contentMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"fill"},{"type":"literal","value":"fit"}]}},{"name":"ratio","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"autocorrectionDisabled","variant":"declaration","kind":64,"signatures":[{"name":"autocorrectionDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables autocorrection for text input views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/autocorrectiondisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether autocorrection is disabled. Defaults to "},{"kind":"code","text":"`true`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"background","variant":"declaration","kind":64,"signatures":[{"name":"background","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/background(_:alignment:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"shape","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional shape to clip the background. If not provided, the background will fill the entire view."}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"backgroundOverlay","variant":"declaration","kind":64,"signatures":[{"name":"backgroundOverlay","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a background behind the view."}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Background color and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"badge","variant":"declaration","kind":64,"signatures":[{"name":"badge","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Generates a badge for the view from a localized string key."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/badge(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Text view to display as a badge. Set the value to nil to hide the badge."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"badgeProminence","variant":"declaration","kind":64,"signatures":[{"name":"badgeProminence","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The prominence to apply to badges associated with this environment."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/badgeprominence(_:))."}]}]},"parameters":[{"name":"badgeType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Select the type of badge"}]},"type":{"type":"union","types":[{"type":"literal","value":"standard"},{"type":"literal","value":"increased"},{"type":"literal","value":"decreased"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"blur","variant":"declaration","kind":64,"signatures":[{"name":"blur","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies blur to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/blur(radius:opaque:))."}]}]},"parameters":[{"name":"radius","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The blur radius."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"bold","variant":"declaration","kind":64,"signatures":[{"name":"bold","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes text bold.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", it works on all iOS/tvOS versions. When used on regular views, it requires iOS 16.0+/tvOS 16.0+."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/bold())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"border","variant":"declaration","kind":64,"signatures":[{"name":"border","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a border to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/border(_:width:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The border parameters. Color and width."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"width","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"brightness","variant":"declaration","kind":64,"signatures":[{"name":"brightness","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the brightness of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/brightness(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Brightness adjustment (-1 to 1)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"buttonBorderShape","variant":"declaration","kind":64,"signatures":[{"name":"buttonBorderShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the border shape used by buttons within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/buttonbordershape(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The button border shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"circle"},{"type":"literal","value":"automatic"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius, only used with "},{"kind":"code","text":"`'roundedRectangle'`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"buttonStyle","variant":"declaration","kind":64,"signatures":[{"name":"buttonStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the button style for button views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/buttonstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The button style. "},{"kind":"code","text":"`'glass'`"},{"kind":"text","text":" and "},{"kind":"code","text":"`'glassProminent'`"},{"kind":"text","text":" are available on iOS 26+ and tvOS 26+ only."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"bordered"},{"type":"literal","value":"borderedProminent"},{"type":"literal","value":"borderless"},{"type":"literal","value":"glass"},{"type":"literal","value":"glassProminent"},{"type":"literal","value":"plain"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"clipped","variant":"declaration","kind":64,"signatures":[{"name":"clipped","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clips content to bounds."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/clipped(antialiased:))."}]}]},"parameters":[{"name":"clipped","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to clip content."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"clipShape","variant":"declaration","kind":64,"signatures":[{"name":"clipShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clips the view to a specific shape."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/clipshape(_:style:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The clipping shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius for rounded rectangle (default: 8)"}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"colorInvert","variant":"declaration","kind":64,"signatures":[{"name":"colorInvert","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Inverts the colors of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/colorinvert())."}]}]},"parameters":[{"name":"inverted","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to invert colors."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerBackground","variant":"declaration","kind":64,"signatures":[{"name":"containerBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the container background of the enclosing container using a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/containerbackground(_:for:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The color to set as the background of the container."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"container","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of container to apply the background to."}]},"type":{"type":"reference","name":"ContainerBackgroundPlacement","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerRelativeFrame","variant":"declaration","kind":64,"signatures":[{"name":"containerRelativeFrame","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Positions this view within an invisible frame with a size relative to the nearest container."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/containerRelativeFrame(_:alignment:))."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The content relative frame parameters: "},{"kind":"code","text":"`axes`"},{"kind":"text","text":", "},{"kind":"code","text":"`count`"},{"kind":"text","text":", "},{"kind":"code","text":"`span`"},{"kind":"text","text":", "},{"kind":"code","text":"`spacing`"},{"kind":"text","text":" and "},{"kind":"code","text":"`alignment`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"axes","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"both"}]}},{"name":"count","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"spacing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"span","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerShape","variant":"declaration","kind":64,"signatures":[{"name":"containerShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the container shape for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/containershape(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A shape configuration from the shapes API"}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contentShape","variant":"declaration","kind":64,"signatures":[{"name":"contentShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Defines the content shape for hit-testing purposes.\n\nThis modifier is essential for making entire view areas (including "},{"kind":"code","text":"`Spacer`"},{"kind":"text","text":" or empty space)\ninteractive. Without it, only visible elements like "},{"kind":"code","text":"`Text`"},{"kind":"text","text":" or "},{"kind":"code","text":"`Image`"},{"kind":"text","text":" respond to tap gestures."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { HStack, List, Section, Spacer, Text } from \"@expo/ui/swift-ui\";\nimport { contentShape, onTapGesture } from \"@expo/ui/swift-ui/modifiers\";\nimport { shapes } from \"@expo/ui/swift-ui/modifiers\";\n\nfunction InteractiveRow() {\n return (\n \n
\n console.log(\"Row tapped!\"))\n ]}\n >\n Label\n \n Value\n \n
\n
\n );\n}\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contentshape(_:eofill:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A shape configuration from the shapes API (rectangle, circle, capsule, ellipse, roundedRectangle)."}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contentTransition","variant":"declaration","kind":64,"signatures":[{"name":"contentTransition","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the content transition type for a view.\nUseful for animating changes in text content, especially numeric text.\nUse with the ["},{"kind":"code","text":"`animation`"},{"kind":"text","text":"](#animationanimationobject-animatedvalue) modifier to animate the transition when the content changes."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n {count.toString()}\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contenttransition(_:))."}]}]},"parameters":[{"name":"transitionType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of content transition."}]},"type":{"type":"union","types":[{"type":"literal","value":"opacity"},{"type":"literal","value":"identity"},{"type":"literal","value":"numericText"},{"type":"literal","value":"interpolate"}]}},{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional parameters."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"countsDown","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the numeric text counts down."}]},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contrast","variant":"declaration","kind":64,"signatures":[{"name":"contrast","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the contrast of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contrast(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Contrast multiplier (0 to infinity, 1 = normal)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"controlSize","variant":"declaration","kind":64,"signatures":[{"name":"controlSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the size of controls within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/controlsize(_:))."}]}]},"parameters":[{"name":"size","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The control size."}]},"type":{"type":"union","types":[{"type":"literal","value":"small"},{"type":"literal","value":"mini"},{"type":"literal","value":"regular"},{"type":"literal","value":"large"},{"type":"literal","value":"extraLarge"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"cornerRadius","variant":"declaration","kind":64,"signatures":[{"name":"cornerRadius","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies corner radius to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/cornerradius(_:antialiased:))."}]}]},"parameters":[{"name":"radius","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The corner radius value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createModifier","variant":"declaration","kind":64,"signatures":[{"name":"createModifier","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Factory function to create modifier configuration objects.\nThis is used by all built-in modifier functions and can be used by 3rd party libraries to create custom modifiers."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A "},{"kind":"code","text":"`ModifierConfig`"},{"kind":"text","text":" object that can be passed in the "},{"kind":"code","text":"`modifiers`"},{"kind":"text","text":" prop array."}]},{"tag":"@example","content":[{"kind":"code","text":"```ts\n// In a 3rd party package\nimport { createModifier } from '@expo/ui/swift-ui/modifiers';\n\nexport const blurEffect = (params: { radius: number; style?: string }) =>\n createModifier('blurEffect', params);\n```"}]}]},"parameters":[{"name":"type","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The modifier type string that maps to a registered native modifier."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Additional parameters to pass to the modifier."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createModifierWithEventListener","variant":"declaration","kind":64,"signatures":[{"name":"createModifierWithEventListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Creates a modifier with an event listener."}]},"parameters":[{"name":"type","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}},{"name":"eventListener","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"args","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"params","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createViewModifierEventListener","variant":"declaration","kind":64,"signatures":[{"name":"createViewModifierEventListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Create an event listener for a view modifier."}]},"parameters":[{"name":"modifiers","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An array of modifier configs to extract event listeners from."}]},"type":{"type":"array","elementType":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}}],"type":{"type":"reference","name":"GlobalEvent","package":"@expo/ui"}}]},{"name":"datePickerStyle","variant":"declaration","kind":64,"signatures":[{"name":"datePickerStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the date picker."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/datepickerstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the date picker."}]},"type":{"type":"reference","name":"DatePickerStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"defaultScrollAnchor","variant":"declaration","kind":64,"signatures":[{"name":"defaultScrollAnchor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the default anchor point for a scroll view's content."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 14.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/defaultscrollanchor(_:))."}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The anchor point for initial scroll position and content size changes, or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to reset."}]},"type":{"type":"union","types":[{"type":"reference","name":"UnitPointValue","package":"@expo/ui"},{"type":"literal","value":null}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"defaultScrollAnchorForRole","variant":"declaration","kind":64,"signatures":[{"name":"defaultScrollAnchorForRole","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the default anchor point for a scroll view for a specific role.\nPass "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to opt out of a specific role while keeping anchors for other roles."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/defaultscrollanchor(_:for:))."}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The anchor point, or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to opt out of this role."}]},"type":{"type":"union","types":[{"type":"reference","name":"UnitPointValue","package":"@expo/ui"},{"type":"literal","value":null}]}},{"name":"role","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The scroll anchor role: "},{"kind":"code","text":"`'initialOffset'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'sizeChanges'`"},{"kind":"text","text":", or "},{"kind":"code","text":"`'alignment'`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"initialOffset"},{"type":"literal","value":"sizeChanges"},{"type":"literal","value":"alignment"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"deleteDisabled","variant":"declaration","kind":64,"signatures":[{"name":"deleteDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables the delete action for a view in a list.\nApply to items within a "},{"kind":"code","text":"`ForEach`"},{"kind":"text","text":" to prevent them from being deleted."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/deletedisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether deletion should be disabled"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"disabled","variant":"declaration","kind":64,"signatures":[{"name":"disabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables or enables a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/disabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be disabled."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"dynamicTypeSize","variant":"declaration","kind":64,"signatures":[{"name":"dynamicTypeSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets or constrains the Dynamic Type size within the view, overriding the\nvalue inherited from the system.\n\nFour variants matching SwiftUI's "},{"kind":"code","text":"`dynamicTypeSize(_:)`"},{"kind":"text","text":":\n- "},{"kind":"code","text":"`dynamicTypeSize('large')`"},{"kind":"text","text":" โ€” fixes the Dynamic Type size to a single value\n- "},{"kind":"code","text":"`dynamicTypeSize({ max: 'accessibility3' })`"},{"kind":"text","text":" โ€” caps growth at a ceiling ("},{"kind":"code","text":"`...accessibility3`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large' })`"},{"kind":"text","text":" โ€” sets a floor ("},{"kind":"code","text":"`large...`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large', max: 'accessibility3' })`"},{"kind":"text","text":" โ€” clamps to a range ("},{"kind":"code","text":"`large...accessibility3`"},{"kind":"text","text":")\n\n"},{"kind":"code","text":"`min`"},{"kind":"text","text":" and "},{"kind":"code","text":"`max`"},{"kind":"text","text":" are independent: pass either or both. Set it on a "},{"kind":"code","text":"``"},{"kind":"text","text":" to\ncascade the constraint to every descendant through the SwiftUI environment.\nKeep "},{"kind":"code","text":"`min`"},{"kind":"text","text":" at or below "},{"kind":"code","text":"`max`"},{"kind":"text","text":", or the range traps natively, like SwiftUI.\nPer Apple's guidance, prefer capping at an accessibility size over disabling\nDynamic Type entirely."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Cap how large text in a tight layout can grow\n...\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/dynamictypesize(_:))."}]}]},"parameters":[{"name":"size","variant":"param","kind":32768,"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"dynamicTypeSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets or constrains the Dynamic Type size within the view, overriding the\nvalue inherited from the system.\n\nFour variants matching SwiftUI's "},{"kind":"code","text":"`dynamicTypeSize(_:)`"},{"kind":"text","text":":\n- "},{"kind":"code","text":"`dynamicTypeSize('large')`"},{"kind":"text","text":" โ€” fixes the Dynamic Type size to a single value\n- "},{"kind":"code","text":"`dynamicTypeSize({ max: 'accessibility3' })`"},{"kind":"text","text":" โ€” caps growth at a ceiling ("},{"kind":"code","text":"`...accessibility3`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large' })`"},{"kind":"text","text":" โ€” sets a floor ("},{"kind":"code","text":"`large...`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large', max: 'accessibility3' })`"},{"kind":"text","text":" โ€” clamps to a range ("},{"kind":"code","text":"`large...accessibility3`"},{"kind":"text","text":")\n\n"},{"kind":"code","text":"`min`"},{"kind":"text","text":" and "},{"kind":"code","text":"`max`"},{"kind":"text","text":" are independent: pass either or both. Set it on a "},{"kind":"code","text":"``"},{"kind":"text","text":" to\ncascade the constraint to every descendant through the SwiftUI environment.\nKeep "},{"kind":"code","text":"`min`"},{"kind":"text","text":" at or below "},{"kind":"code","text":"`max`"},{"kind":"text","text":", or the range traps natively, like SwiftUI.\nPer Apple's guidance, prefer capping at an accessibility size over disabling\nDynamic Type entirely."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Cap how large text in a tight layout can grow\n...\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/dynamictypesize(_:))."}]}]},"parameters":[{"name":"range","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"environment","variant":"declaration","kind":64,"signatures":[{"name":"environment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a SwiftUI environment value."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/environment(_:_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"EnvironmentConfig","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"environment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a SwiftUI environment value."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/environment(_:_:))."}]}]},"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"literal","value":"colorScheme"},{"type":"literal","value":"editMode"},{"type":"literal","value":"locale"},{"type":"literal","value":"timeZone"}]}},{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"fixedSize","variant":"declaration","kind":64,"signatures":[{"name":"fixedSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls fixed size behavior."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/fixedsize())."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the view should use its ideal width or height."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"vertical","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"font","variant":"declaration","kind":64,"signatures":[{"name":"font","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the font properties of a view.\n\nPass "},{"kind":"code","text":"`textStyle`"},{"kind":"text","text":" to scale with the user's Dynamic Type setting. Combine\nit with "},{"kind":"code","text":"`family`"},{"kind":"text","text":" to scale a custom font."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Scales with Dynamic Type\nHello\n\n// Custom font that scales relative to the body text style\nHi\n\n// Fixed-size system font (no Dynamic Type scaling)\nStatic\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official SwiftUI documentation for ["},{"kind":"code","text":"`system(_:design:weight:)`"},{"kind":"text","text":"](https://developer.apple.com/documentation/swiftui/font/system(_:design:weight:)), and ["},{"kind":"code","text":"`custom(_:size:relativeTo:)`"},{"kind":"text","text":"](https://developer.apple.com/documentation/swiftui/font/custom(_:size:relativeto:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"design","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font design. Applied when no "},{"kind":"code","text":"`family`"},{"kind":"text","text":" is provided. "},{"kind":"code","text":"`Font.custom`"},{"kind":"text","text":" always uses the embedded font's own design."}]},"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"rounded"},{"type":"literal","value":"serif"},{"type":"literal","value":"monospaced"}]}},{"name":"family","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Custom font family name."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"size","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font size in points. Ignored when only "},{"kind":"code","text":"`textStyle`"},{"kind":"text","text":" is set."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"17"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"textStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"SwiftUI text style. When set, the resulting font scales with the user's\nDynamic Type setting."}]},"type":{"type":"union","types":[{"type":"literal","value":"largeTitle"},{"type":"literal","value":"title"},{"type":"literal","value":"title2"},{"type":"literal","value":"title3"},{"type":"literal","value":"headline"},{"type":"literal","value":"subheadline"},{"type":"literal","value":"body"},{"type":"literal","value":"callout"},{"type":"literal","value":"footnote"},{"type":"literal","value":"caption"},{"type":"literal","value":"caption2"}]}},{"name":"weight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font weight."}]},"type":{"type":"union","types":[{"type":"literal","value":"light"},{"type":"literal","value":"bold"},{"type":"literal","value":"black"},{"type":"literal","value":"regular"},{"type":"literal","value":"medium"},{"type":"literal","value":"ultraLight"},{"type":"literal","value":"thin"},{"type":"literal","value":"semibold"},{"type":"literal","value":"heavy"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"foregroundColor","variant":"declaration","kind":64,"signatures":[{"name":"foregroundColor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the foreground color/tint of a view."}],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"Use "},{"kind":"code","text":"`foregroundStyle`"},{"kind":"text","text":" instead."}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/foregroundcolor(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The foreground color (hex string)."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"foregroundStyle","variant":"declaration","kind":64,"signatures":[{"name":"foregroundStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the foreground style of a view with comprehensive styling options.\n\nReplaces the deprecated "},{"kind":"code","text":"`foregroundColor`"},{"kind":"text","text":" modifier with enhanced capabilities including\ncolors, gradients, and semantic hierarchical styles that adapt to system appearance."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Simple usage\nRed Text\n\n// Adaptive hierarchical styling\n\n Supporting Text\n\n\n// Linear gradient\n\n Gradient Text\n\n```"}]},{"tag":"@returns","content":[{"kind":"text","text":"A view modifier that applies the specified foreground style"}]},{"tag":"@since","content":[{"kind":"text","text":"iOS 15.0+ (hierarchical quinary requires iOS 16.0+)"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/foregroundstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The foreground style configuration. Can be:\n\n**Simple Color ("},{"kind":"code","text":"`Color`"},{"kind":"text","text":"):**\n- Hex colors: "},{"kind":"code","text":"`'#FF0000'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#RGB'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#RRGGBB'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#AARRGGBB'`"},{"kind":"text","text":"\n- Named colors: "},{"kind":"code","text":"`'red'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'blue'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'green'`"},{"kind":"text","text":", and so on.\n- React Native color values like "},{"kind":"code","text":"`PlatformColor('label')`"},{"kind":"text","text":"\n\n**Explicit Color Object:**\n"},{"kind":"code","text":"```ts\n{ type: 'color', color: PlatformColor('label') }\n```"},{"kind":"text","text":"\n\n**Hierarchical Styles (Semantic):**\nAuto-adapting semantic styles that respond to light/dark mode and accessibility settings:\n"},{"kind":"code","text":"```ts\n{ type: 'hierarchical', style: 'primary' } // Most prominent (main content, headlines)\n{ type: 'hierarchical', style: 'secondary' } // Supporting text, subheadlines\n{ type: 'hierarchical', style: 'tertiary' } // Less important text, captions\n{ type: 'hierarchical', style: 'quaternary' } // Subtle text, disabled states\n{ type: 'hierarchical', style: 'quinary' } // Most subtle (iOS 16+, fallback to quaternary)\n```"},{"kind":"text","text":"\n\n**Linear Gradient:**\n"},{"kind":"code","text":"```ts\n{\n type: 'linearGradient',\n colors: [PlatformColor('systemPink'), '#0000FF', '#00FF00'],\n startPoint: { x: 0, y: 0 }, // Top-left\n endPoint: { x: 1, y: 1 } // Bottom-right\n}\n```"},{"kind":"text","text":"\n\n**Radial Gradient:**\n"},{"kind":"code","text":"```ts\n{\n type: 'radialGradient',\n colors: [PlatformColor('systemPink'), '#0000FF'],\n center: { x: 0.5, y: 0.5 }, // Center of view\n startRadius: 0, // Inner radius\n endRadius: 100 // Outer radius\n}\n```"},{"kind":"text","text":"\n\n**Angular Gradient (Conic):**\n"},{"kind":"code","text":"```ts\n{\n type: 'angularGradient',\n colors: [PlatformColor('systemPink'), '#00FF00', '#0000FF'],\n center: { x: 0.5, y: 0.5 } // Rotation center\n}\n```"}]},"type":{"type":"union","types":[{"type":"reference","name":"Color","package":"@expo/ui"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"color"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"style","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"primary"},{"type":"literal","value":"secondary"},{"type":"literal","value":"tertiary"},{"type":"literal","value":"quaternary"},{"type":"literal","value":"quinary"}]}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"hierarchical"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"endPoint","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"startPoint","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"linearGradient"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"center","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"endRadius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"startRadius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"radialGradient"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"center","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"angularGradient"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"frame","variant":"declaration","kind":64,"signatures":[{"name":"frame","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the frame properties of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/frame(width:height:alignment:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The frame parameters. Width, height, minWidth, maxWidth, minHeight, maxHeight, idealWidth, idealHeight and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"height","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"idealHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"idealWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"maxHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"maxWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"minHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"minWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gaugeStyle","variant":"declaration","kind":64,"signatures":[{"name":"gaugeStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the gauge."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/gaugestyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the gauge."}]},"type":{"type":"reference","name":"GaugeStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"glassEffect","variant":"declaration","kind":64,"signatures":[{"name":"glassEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a glass effect to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/glasseffect(_:in:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The glass effect parameters. Variant, interactive, tint and shape."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"glass","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"interactive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"tint","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"variant","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"clear"},{"type":"literal","value":"regular"},{"type":"literal","value":"identity"}]}}]}}},{"name":"shape","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"glassEffectId","variant":"declaration","kind":64,"signatures":[{"name":"glassEffectId","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Associates an identity value to Liquid Glass effects defined within a "},{"kind":"code","text":"`GlassEffectContainer`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/glasseffectid(_:in:))."}]}]},"parameters":[{"name":"id","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The id of the glass effect."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"namespaceId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The namespace id of the glass effect. Use Namespace component to create a namespace."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"grayscale","variant":"declaration","kind":64,"signatures":[{"name":"grayscale","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes a view grayscale."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/grayscale(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Grayscale amount (0 to 1)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellAnchor","variant":"declaration","kind":64,"signatures":[{"name":"gridCellAnchor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies a custom alignment anchor for a view that acts as a grid cell."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified anchor point to align its content."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 16+"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Using a preset anchor\n\n\n// Using a custom anchor point\n\n```"}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The unit point that defines how to align the view within the bounds of its grid cell."}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"anchor","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"},{"type":"literal","value":"zero"}]}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"preset"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"points","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"custom"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellColumns","variant":"declaration","kind":64,"signatures":[{"name":"gridCellColumns","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Tells a view that acts as a cell in a grid to span the specified number of columns."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that occupies the specified number of columns in a grid row."}]}]},"parameters":[{"name":"count","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The number of columns that the view should consume when placed in a grid row."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellUnsizedAxes","variant":"declaration","kind":64,"signatures":[{"name":"gridCellUnsizedAxes","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Asks grid layouts not to offer the view extra size in the specified axes."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that doesnโ€™t ask an enclosing grid for extra size in one or more axes."}]}]},"parameters":[{"name":"axes","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The dimensions in which the grid shouldnโ€™t offer the view a share of any available space. This prevents a flexible view like a Spacer, Divider, or Color from defining the size of a row or column."}]},"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridColumnAlignment","variant":"declaration","kind":64,"signatures":[{"name":"gridColumnAlignment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Overrides the default horizontal alignment of the grid column that the view appears in."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified horizontal alignment, and that causes all cells in the same column of a grid to use the same alignment."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 16+"}]}]},"parameters":[{"name":"alignment","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The HorizontalAlignment guide to use for the grid column that the view appears in."}]},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"headerProminence","variant":"declaration","kind":64,"signatures":[{"name":"headerProminence","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the header prominence for this view."}]},"parameters":[{"name":"prominence","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The prominence to apply."}]},"type":{"type":"union","types":[{"type":"literal","value":"standard"},{"type":"literal","value":"increased"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"hidden","variant":"declaration","kind":64,"signatures":[{"name":"hidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Hides or shows a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/hidden(_:))."}]}]},"parameters":[{"name":"hidden","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be hidden."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"hueRotation","variant":"declaration","kind":64,"signatures":[{"name":"hueRotation","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a hue rotation to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/huerotation(_:))."}]}]},"parameters":[{"name":"angle","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Hue rotation angle in degrees."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"id","variant":"declaration","kind":64,"signatures":[{"name":"id","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Attaches a stable identifier to a view so it can be referenced by scroll target bindings.\nUse with "},{"kind":"code","text":"`scrollTargetLayout()`"},{"kind":"text","text":" on the containing stack and the "},{"kind":"code","text":"`scrollPosition`"},{"kind":"text","text":" modifier on a scrollable container."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/id(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"String identifier matched by "},{"kind":"code","text":"`scrollPosition`"},{"kind":"text","text":"'s observable state."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"ignoreSafeArea","variant":"declaration","kind":64,"signatures":[{"name":"ignoreSafeArea","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Allows a view to ignore safe area constraints."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ignoressafearea(_:edges:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The safe area regions to ignore and the edges to expand into."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"edges","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"all"}]}},{"name":"regions","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"container"},{"type":"literal","value":"all"},{"type":"literal","value":"keyboard"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"imageScale","variant":"declaration","kind":64,"signatures":[{"name":"imageScale","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Scales SF Symbols within this view relative to the surrounding text, using one of the standard sizes."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/imagescale(_:))."}]}]},"parameters":[{"name":"scale","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The relative image scale."}]},"type":{"type":"union","types":[{"type":"literal","value":"small"},{"type":"literal","value":"large"},{"type":"literal","value":"medium"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"indexViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"indexViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the page index view inside a "},{"kind":"code","text":"`TabView`"},{"kind":"text","text":". SwiftUI only\nships a "},{"kind":"code","text":"`.page`"},{"kind":"text","text":" index view style, so no style selector is exposed."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/indexviewstyle(_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"IndexViewStyleConfig","package":"@expo/ui"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"interactiveDismissDisabled","variant":"declaration","kind":64,"signatures":[{"name":"interactiveDismissDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables interactive dismissal of a sheet."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/interactivedismissdisabled(_:))."}]}]},"parameters":[{"name":"isDisabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether interactive dismiss is disabled (default: true)."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"italic","variant":"declaration","kind":64,"signatures":[{"name":"italic","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes text italic.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", it works on all iOS/tvOS versions. When used on regular views, it requires iOS 16.0+/tvOS 16.0+."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/italic())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"kerning","variant":"declaration","kind":64,"signatures":[{"name":"kerning","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the spacing, or kerning, between characters for the text in this view."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/kerning(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"keyboardType","variant":"declaration","kind":64,"signatures":[{"name":"keyboardType","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the keyboard type for text input views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/keyboardtype(_:))."}]}]},"parameters":[{"name":"keyboardType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of keyboard to display."}]},"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"email-address"},{"type":"literal","value":"numeric"},{"type":"literal","value":"phone-pad"},{"type":"literal","value":"ascii-capable"},{"type":"literal","value":"numbers-and-punctuation"},{"type":"literal","value":"url"},{"type":"literal","value":"name-phone-pad"},{"type":"literal","value":"decimal-pad"},{"type":"literal","value":"twitter"},{"type":"literal","value":"web-search"},{"type":"literal","value":"ascii-capable-number-pad"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"labelsHidden","variant":"declaration","kind":64,"signatures":[{"name":"labelsHidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Hides the labels of any controls contained within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/labelshidden())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"labelStyle","variant":"declaration","kind":64,"signatures":[{"name":"labelStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for labels within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/labelstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The label style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"iconOnly"},{"type":"literal","value":"titleAndIcon"},{"type":"literal","value":"titleOnly"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"layoutPriority","variant":"declaration","kind":64,"signatures":[{"name":"layoutPriority","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets layout priority for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/layoutpriority(_:))."}]}]},"parameters":[{"name":"priority","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Layout priority value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineHeight","variant":"declaration","kind":64,"signatures":[{"name":"lineHeight","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the total line height for text in this view."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 26.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 26.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 26.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/lineheight(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The line height in points."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineLimit","variant":"declaration","kind":64,"signatures":[{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"parameters":[{"name":"limit","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"reservesSpace","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"parameters":[{"name":"range","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"max","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"min","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineSpacing","variant":"declaration","kind":64,"signatures":[{"name":"lineSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The distance in points between the bottom of one line fragment and the top of the next."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linespacing(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The amount of space between the bottom of one line and the top of the next line in points. This value is always nonnegative. Otherwise, the default value will be used."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowBackground","variant":"declaration","kind":64,"signatures":[{"name":"listRowBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a row."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowbackground(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The row color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowInsets","variant":"declaration","kind":64,"signatures":[{"name":"listRowInsets","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an inset to the rows in a list."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowinsets(_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The inset to apply to the rows in a list."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowSeparator","variant":"declaration","kind":64,"signatures":[{"name":"listRowSeparator","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of the separator for a list row."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowseparator(_:edges:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility to apply."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}},{"name":"edges","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The edges where the separator visibility applies."}]},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"all"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowSpacing","variant":"declaration","kind":64,"signatures":[{"name":"listRowSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the vertical spacing between adjacent rows in a list."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowspacing(_:))."}]}]},"parameters":[{"name":"spacing","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The spacing value to use. When omitted, the default spacing is used."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listSectionMargins","variant":"declaration","kind":64,"signatures":[{"name":"listSectionMargins","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Allows a view to ignore safe area constraints."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listsectionmargins(_:_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The margins to apply to the section in a list."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"edges","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"all"}]}},{"name":"length","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listSectionSpacing","variant":"declaration","kind":64,"signatures":[{"name":"listSectionSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the spacing between adjacent sections."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]}]},"parameters":[{"name":"spacing","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The spacing to apply."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":"default"},{"type":"literal","value":"compact"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listStyle","variant":"declaration","kind":64,"signatures":[{"name":"listStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for a List view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/liststyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The list style to apply."}]},"type":{"type":"reference","name":"ListStyle","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"luminanceToAlpha","variant":"declaration","kind":64,"signatures":[{"name":"luminanceToAlpha","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a luminance to alpha effect to this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/luminanceToAlpha())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"mask","variant":"declaration","kind":64,"signatures":[{"name":"mask","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a mask to the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/mask(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The masking shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius for rounded rectangle (default: "},{"kind":"code","text":"`8`"},{"kind":"text","text":")."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"matchedGeometryEffect","variant":"declaration","kind":64,"signatures":[{"name":"matchedGeometryEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a matched geometry effect to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/matchedgeometryeffect(id:in:properties:anchor:issource:))."}]}]},"parameters":[{"name":"id","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The id of the view."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"namespaceId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The namespace id of the view. Use Namespace component to create a namespace."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"menuActionDismissBehavior","variant":"declaration","kind":64,"signatures":[{"name":"menuActionDismissBehavior","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the dismissal behavior of menu actions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/menuactiondismissbehavior(_:))."}]}]},"parameters":[{"name":"behavior","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The menu action dismiss behavior."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"disabled"},{"type":"literal","value":"enabled"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"minimumScaleFactor","variant":"declaration","kind":64,"signatures":[{"name":"minimumScaleFactor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the minimum amount that text in this view scales down to fit in the available space.\n\nUse this modifier if the text you place in a view doesn't fit and it's okay if the text shrinks\nto accommodate. For example, a label with a minimum scale factor of "},{"kind":"code","text":"`0.5`"},{"kind":"text","text":" draws its text in a\nfont size as small as half of the actual font if needed."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/minimumscalefactor(_:))."}]}]},"parameters":[{"name":"factor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A fraction between "},{"kind":"code","text":"`0`"},{"kind":"text","text":" and "},{"kind":"code","text":"`1`"},{"kind":"text","text":" (including "},{"kind":"code","text":"`0`"},{"kind":"text","text":" and "},{"kind":"code","text":"`1`"},{"kind":"text","text":") that specifies the amount\nof text to draw. For example, a value of "},{"kind":"code","text":"`0.5`"},{"kind":"text","text":" draws the text in a font size as small as half the\nactual font if needed."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"monospacedDigit","variant":"declaration","kind":64,"signatures":[{"name":"monospacedDigit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Modifies the fonts of all child views to use fixed-width digits, if possible, while leaving other characters proportionally spaced.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", modifies the text view's font to use fixed-width digits, while leaving other characters proportionally spaced."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/monospaceddigit())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"moveDisabled","variant":"declaration","kind":64,"signatures":[{"name":"moveDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables the move action for a view in a list.\nApply to items within a "},{"kind":"code","text":"`ForEach`"},{"kind":"text","text":" to prevent them from being moved."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/movedisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether moving should be disabled"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"multilineTextAlignment","variant":"declaration","kind":64,"signatures":[{"name":"multilineTextAlignment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"An alignment position for text along the horizontal axis."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/multilinetextalignment(_:))."}]}]},"parameters":[{"name":"alignment","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A value that you use to align multiple lines of text within a view."}]},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"offset","variant":"declaration","kind":64,"signatures":[{"name":"offset","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an offset (translation) to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/offset(x:y:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The offset parameters: "},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onAppear","variant":"declaration","kind":64,"signatures":[{"name":"onAppear","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an onAppear modifier that calls a function when the view appears."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onappear(perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when the view appears."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onDisappear","variant":"declaration","kind":64,"signatures":[{"name":"onDisappear","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an onDisappear modifier that calls a function when the view disappears."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ondisappear(perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when the view disappears."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onGeometryChange","variant":"declaration","kind":64,"signatures":[{"name":"onGeometryChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Calls the handler whenever the view's geometry changes, with its position and size.\n"},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":" are in the global coordinate space (relative to the window); all values are in points."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ongeometrychange(for:of:action:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function called with the new frame."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"frame","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onLongPressGesture","variant":"declaration","kind":64,"signatures":[{"name":"onLongPressGesture","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a long press gesture recognizer."}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when long pressed."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"minimumDuration","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Minimum duration for long press (default: 0.5s)"}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onScrollPhaseChange","variant":"declaration","kind":64,"signatures":[{"name":"onScrollPhaseChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fires when SwiftUI's scroll phase changes (e.g., the user begins dragging,\nthe scroll view starts decelerating, or scrolling settles to idle). The\nsecond argument is the scroll geometry sampled at the phase transition,\nuseful for reading the final offset on settle without subscribing to\nper-frame "},{"kind":"code","text":"`onScrollGeometryChange`"},{"kind":"text","text":".\n\nApply to a SwiftUI "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":" (and other scrollable views). On iOS below\n18.0 the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onscrollphasechange(_:))."}]}]},"parameters":[{"name":"callback","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"phase","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollPhase"},"name":"ScrollPhase","package":"@expo/ui"}},{"name":"geometry","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollGeometry"},"name":"ScrollGeometry","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onSubmit","variant":"declaration","kind":64,"signatures":[{"name":"onSubmit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an action to perform when the user submits a value to this view (e.g. pressing return in a text field)."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onsubmit(of:_:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call on submit."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onTapGesture","variant":"declaration","kind":64,"signatures":[{"name":"onTapGesture","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a tap gesture recognizer."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ontapgesture(count:perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when tapped."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"opacity","variant":"declaration","kind":64,"signatures":[{"name":"opacity","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the opacity of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/opacity(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Opacity value between 0 and 1."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"overlay","variant":"declaration","kind":64,"signatures":[{"name":"overlay","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Overlays another view on top."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/overlay(_:alignment:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Overlay color and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"padding","variant":"declaration","kind":64,"signatures":[{"name":"padding","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets padding on a view.\nSupports individual edges or shorthand properties."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/padding(_:_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The padding parameters: "},{"kind":"code","text":"`top`"},{"kind":"text","text":", "},{"kind":"code","text":"`bottom`"},{"kind":"text","text":", "},{"kind":"code","text":"`leading`"},{"kind":"text","text":", "},{"kind":"code","text":"`trailing`"},{"kind":"text","text":", "},{"kind":"code","text":"`horizontal`"},{"kind":"text","text":", "},{"kind":"code","text":"`vertical`"},{"kind":"text","text":" and "},{"kind":"code","text":"`all`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"all","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","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"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"pickerStyle","variant":"declaration","kind":64,"signatures":[{"name":"pickerStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the picker."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/pickerstyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the picker."}]},"type":{"type":"reference","name":"PickerStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationBackground","variant":"declaration","kind":64,"signatures":[{"name":"presentationBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a sheet presentation. Paints the entire sheet chrome\nincluding the drag-indicator zone and home-indicator safe-area inset, which\na regular "},{"kind":"code","text":"`background()`"},{"kind":"text","text":" modifier cannot reach."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI\ndocumentation](https://developer.apple.com/documentation/swiftui/view/presentationbackground(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationBackgroundInteraction","variant":"declaration","kind":64,"signatures":[{"name":"presentationBackgroundInteraction","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls interaction with the content behind a sheet."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.4+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationbackgroundinteraction(_:))."}]}]},"parameters":[{"name":"interaction","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background interaction behavior."}]},"type":{"type":"reference","name":"PresentationBackgroundInteractionType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationDetents","variant":"declaration","kind":64,"signatures":[{"name":"presentationDetents","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the available heights for a sheet presentation."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationdetents(_:selection:))."}]}]},"parameters":[{"name":"detents","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Array of detents the sheet can snap to."}]},"type":{"type":"array","elementType":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional settings for tracking the selected detent."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"onSelectionChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback fired when the user changes the active detent by dragging."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"detent","variant":"param","kind":32768,"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"selection","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The currently selected detent."}]},"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationDragIndicator","variant":"declaration","kind":64,"signatures":[{"name":"presentationDragIndicator","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of the drag indicator on a sheet."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationdragindicator(_:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility of the drag indicator."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"progressViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"progressViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the progress view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/progressviewstyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the progress view."}]},"type":{"type":"reference","name":"ProgressViewStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"refreshable","variant":"declaration","kind":64,"signatures":[{"name":"refreshable","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Marks a view as refreshable. Adds pull-to-refresh functionality."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/refreshable(action:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Async function to call when refresh is triggered."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"resizable","variant":"declaration","kind":64,"signatures":[{"name":"resizable","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the mode by which SwiftUI resizes an image to fit its space."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/image/resizable(capinsets:resizingmode:))."}]}]},"parameters":[{"name":"capInsets","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Inset values that indicate a portion of the image that SwiftUI doesnโ€™t resize."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"resizingMode","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The mode by which SwiftUI resizes the image."}]},"type":{"type":"union","types":[{"type":"literal","value":"stretch"},{"type":"literal","value":"tile"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"rotation3DEffect","variant":"declaration","kind":64,"signatures":[{"name":"rotation3DEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a 3D rotation transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/rotation3deffect(_:axis:anchor:anchorz:perspective:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The rotation parameters: "},{"kind":"code","text":"`angle`"},{"kind":"text","text":" (in degrees), "},{"kind":"code","text":"`axis`"},{"kind":"text","text":" (x, y, z), and "},{"kind":"code","text":"`perspective`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"angle","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"axis","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"z","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"perspective","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"rotationEffect","variant":"declaration","kind":64,"signatures":[{"name":"rotationEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies rotation transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/rotationeffect(_:anchor:))."}]}]},"parameters":[{"name":"angle","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Rotation angle in degrees."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"saturation","variant":"declaration","kind":64,"signatures":[{"name":"saturation","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the saturation of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/saturation(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Saturation multiplier (0 to infinity, 1 = normal)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scaleEffect","variant":"declaration","kind":64,"signatures":[{"name":"scaleEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies scaling transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scaleeffect(_:anchor:))."}]}]},"parameters":[{"name":"scale","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Uniform scale factor (1.0 = normal size), or an object with separate "},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":" scale factors."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollContentBackground","variant":"declaration","kind":64,"signatures":[{"name":"scrollContentBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the visibility of the background for scrollable views within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollcontentbackground(_:))."}]}]},"parameters":[{"name":"visible","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility of the background."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollDisabled","variant":"declaration","kind":64,"signatures":[{"name":"scrollDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables or enables scrolling in scrollable views."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolldisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether scrolling should be disabled (default: true)."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollDismissesKeyboard","variant":"declaration","kind":64,"signatures":[{"name":"scrollDismissesKeyboard","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls how the keyboard is dismissed when scrolling."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolldismisseskeyboard(_:))."}]}]},"parameters":[{"name":"mode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The keyboard dismiss mode."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"never"},{"type":"literal","value":"interactively"},{"type":"literal","value":"immediately"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollIndicators","variant":"declaration","kind":64,"signatures":[{"name":"scrollIndicators","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of scroll indicators for scrollable views.\nMirrors SwiftUI's "},{"kind":"code","text":"`scrollIndicators(_:axes:)`"},{"kind":"text","text":" modifier."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollindicators(_:axes:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Indicator visibility:\n- "},{"kind":"code","text":"`'automatic'`"},{"kind":"text","text":": platform-default behavior.\n- "},{"kind":"code","text":"`'visible'`"},{"kind":"text","text":": prefer showing indicators (may still be hidden by the system).\n- "},{"kind":"code","text":"`'hidden'`"},{"kind":"text","text":": prefer hiding indicators (may still be shown by the system).\n- "},{"kind":"code","text":"`'never'`"},{"kind":"text","text":": never show indicators."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"},{"type":"literal","value":"never"}]}},{"name":"axes","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Axes to apply the visibility to. Defaults to "},{"kind":"code","text":"`'both'`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"both"}]},"defaultValue":"'both'"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollPosition","variant":"declaration","kind":64,"signatures":[{"name":"scrollPosition","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Binds the leading scroll target of a scrollable container to an observable native state.\n\nReading "},{"kind":"code","text":"`state.value`"},{"kind":"text","text":" returns the id of the leading scroll target. Writing to it scrolls\nthe container to the matching view. Pair with "},{"kind":"code","text":"`scrollTargetLayout()`"},{"kind":"text","text":" on the content\ncontainer and "},{"kind":"code","text":"`id()`"},{"kind":"text","text":" on each target. Works on "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":", "},{"kind":"code","text":"`LazyVStack`"},{"kind":"text","text":", "},{"kind":"code","text":"`LazyHStack`"},{"kind":"text","text":",\nand other scrollable containers.\n\nOn iOS below 17.0, the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 14.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollposition(id:anchor:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst activeID = useNativeState(null);\n\n console.log('leading target:', newID),\n }),\n ]}>\n \n {items.map((item) => (\n {item.text}\n ))}\n \n\n```"}]}]},"parameters":[{"name":"state","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An "},{"kind":"code","text":"`ObservableState`"},{"kind":"text","text":" created with "},{"kind":"code","text":"`useNativeState`"},{"kind":"text","text":"."}]},"type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}],"name":"ObservableState","package":"@expo/ui"}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"anchor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Anchor used to pick which view drives the binding and to align\n programmatic scrolls. Maps to the "},{"kind":"code","text":"`anchor:`"},{"kind":"text","text":" parameter of SwiftUI's "},{"kind":"code","text":"`.scrollPosition(id:anchor:)`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"UnitPointValue","package":"@expo/ui"}},{"name":"onChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Fires on the JS thread whenever the leading scroll target changes."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"id","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}],"type":{"type":"intrinsic","name":"void"}}]}}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollTargetBehavior","variant":"declaration","kind":64,"signatures":[{"name":"scrollTargetBehavior","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the scroll snapping behavior for scrollable views.\nUse with "},{"kind":"code","text":"`scrollTargetLayout`"},{"kind":"text","text":" on the content container."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolltargetbehavior(_:))."}]}]},"parameters":[{"name":"behavior","variant":"param","kind":32768,"comment":{"summary":[{"kind":"code","text":"`'paging'`"},{"kind":"text","text":" for container-aligned snapping, "},{"kind":"code","text":"`'viewAligned'`"},{"kind":"text","text":" for view-aligned snapping."}]},"type":{"type":"union","types":[{"type":"literal","value":"paging"},{"type":"literal","value":"viewAligned"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollTargetLayout","variant":"declaration","kind":64,"signatures":[{"name":"scrollTargetLayout","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Configures a layout container as a scroll target layout for view-aligned snapping.\nApply to "},{"kind":"code","text":"`VStack`"},{"kind":"text","text":" or "},{"kind":"code","text":"`HStack`"},{"kind":"text","text":" inside a "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolltargetlayout(isenabled:))."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"shadow","variant":"declaration","kind":64,"signatures":[{"name":"shadow","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a shadow to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/shadow(color:radius:x:y:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The shadow parameters: "},{"kind":"code","text":"`radius`"},{"kind":"text","text":", offset ("},{"kind":"code","text":"`x`"},{"kind":"text","text":", "},{"kind":"code","text":"`y`"},{"kind":"text","text":") and "},{"kind":"code","text":"`color`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"radius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"strikethrough","variant":"declaration","kind":64,"signatures":[{"name":"strikethrough","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a strikethrough to the text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/strikethrough(_:color:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Controls whether the strikethrough is visible ("},{"kind":"code","text":"`true`"},{"kind":"text","text":" to show, "},{"kind":"code","text":"`false`"},{"kind":"text","text":" to hide)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"isActive","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"pattern","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/index.ts","qualifiedName":"LinePattern"},"name":"LinePattern","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"submitLabel","variant":"declaration","kind":64,"signatures":[{"name":"submitLabel","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the label to display in the keyboard's return key. For example, "},{"kind":"code","text":"`'done'`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified submit label."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 15+"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]}]},"parameters":[{"name":"submitLabel","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The label to display in the keyboard's return key."}]},"type":{"type":"union","types":[{"type":"literal","value":"join"},{"type":"literal","value":"search"},{"type":"literal","value":"done"},{"type":"literal","value":"continue"},{"type":"literal","value":"go"},{"type":"literal","value":"next"},{"type":"literal","value":"return"},{"type":"literal","value":"route"},{"type":"literal","value":"send"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"symbolEffect","variant":"declaration","kind":64,"signatures":[{"name":"symbolEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an SF Symbol effect to a view."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/symbolEffect(_:options:value:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst trigger = useNativeState(0);\n\n```"}]}]},"parameters":[{"name":"effect","variant":"param","kind":32768,"type":{"type":"reference","name":"SymbolEffect","package":"@expo/ui"}},{"name":"args","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"isActive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indefinite effects: runs while "},{"kind":"code","text":"`state.value === true`"},{"kind":"text","text":". Default active when omitted."}]},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"ObservableState","package":"@expo/ui"}},{"name":"options","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"SymbolEffectOptions","package":"@expo/ui"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Discrete effects: the effect fires once each time this value changes."}]},"type":{"type":"reference","typeArguments":[{"type":"reference","name":"DiscreteSymbolEffectValue","package":"@expo/ui"}],"name":"ObservableState","package":"@expo/ui"}}]}},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tabViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"tabViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for a "},{"kind":"code","text":"`TabView`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tabviewstyle(_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"TabViewStyleConfig","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tag","variant":"declaration","kind":64,"signatures":[{"name":"tag","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a tag on a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tag(_:includeoptional:))."}]}]},"parameters":[{"name":"tag","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The tag to set on the view."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textCase","variant":"declaration","kind":64,"signatures":[{"name":"textCase","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a transform for the case of the text contained in this view when displayed."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\"lowercase\""}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textcase(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"literal","value":"lowercase"},{"type":"literal","value":"uppercase"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textContentType","variant":"declaration","kind":64,"signatures":[{"name":"textContentType","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the text content type for input text, which the system uses to offer\nsuggestions (like autofill) while the user enters text."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 13.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textcontenttype(_:)-ufdv)."}]}]},"parameters":[{"name":"textContentType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The semantic meaning of the text input area."}]},"type":{"type":"union","types":[{"type":"literal","value":"URL"},{"type":"literal","value":"namePrefix"},{"type":"literal","value":"name"},{"type":"literal","value":"nameSuffix"},{"type":"literal","value":"givenName"},{"type":"literal","value":"middleName"},{"type":"literal","value":"familyName"},{"type":"literal","value":"nickname"},{"type":"literal","value":"organizationName"},{"type":"literal","value":"jobTitle"},{"type":"literal","value":"location"},{"type":"literal","value":"fullStreetAddress"},{"type":"literal","value":"streetAddressLine1"},{"type":"literal","value":"streetAddressLine2"},{"type":"literal","value":"addressCity"},{"type":"literal","value":"addressCityAndState"},{"type":"literal","value":"addressState"},{"type":"literal","value":"postalCode"},{"type":"literal","value":"sublocality"},{"type":"literal","value":"countryName"},{"type":"literal","value":"username"},{"type":"literal","value":"password"},{"type":"literal","value":"newPassword"},{"type":"literal","value":"oneTimeCode"},{"type":"literal","value":"emailAddress"},{"type":"literal","value":"telephoneNumber"},{"type":"literal","value":"cellularEID"},{"type":"literal","value":"cellularIMEI"},{"type":"literal","value":"creditCardNumber"},{"type":"literal","value":"creditCardExpiration"},{"type":"literal","value":"creditCardExpirationMonth"},{"type":"literal","value":"creditCardExpirationYear"},{"type":"literal","value":"creditCardSecurityCode"},{"type":"literal","value":"creditCardType"},{"type":"literal","value":"creditCardName"},{"type":"literal","value":"creditCardGivenName"},{"type":"literal","value":"creditCardMiddleName"},{"type":"literal","value":"creditCardFamilyName"},{"type":"literal","value":"birthdate"},{"type":"literal","value":"birthdateDay"},{"type":"literal","value":"birthdateMonth"},{"type":"literal","value":"birthdateYear"},{"type":"literal","value":"dateTime"},{"type":"literal","value":"flightNumber"},{"type":"literal","value":"shipmentTrackingNumber"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textFieldStyle","variant":"declaration","kind":64,"signatures":[{"name":"textFieldStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the text field style for text field views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textfieldstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The text field style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"plain"},{"type":"literal","value":"roundedBorder"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textInputAutocapitalization","variant":"declaration","kind":64,"signatures":[{"name":"textInputAutocapitalization","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets how often the shift key in the keyboard is automatically enabled."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textinputautocapitalization(_:))."}]}]},"parameters":[{"name":"autocapitalization","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The autocapitalization behavior."}]},"type":{"type":"union","types":[{"type":"literal","value":"never"},{"type":"literal","value":"words"},{"type":"literal","value":"sentences"},{"type":"literal","value":"characters"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textSelection","variant":"declaration","kind":64,"signatures":[{"name":"textSelection","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls whether people can select text within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textselection(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Enable selection"}]},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tint","variant":"declaration","kind":64,"signatures":[{"name":"tint","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the tint color of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tint(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The tint color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"toggleStyle","variant":"declaration","kind":64,"signatures":[{"name":"toggleStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for toggles within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/togglestyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The toggle style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"switch"},{"type":"literal","value":"button"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"truncationMode","variant":"declaration","kind":64,"signatures":[{"name":"truncationMode","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the truncation mode for lines of text that are too long to fit in the available space."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/truncationmode(_:))."}]}]},"parameters":[{"name":"mode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The truncation mode that specifies where to truncate the text within the text view, if needed.\nYou can truncate at the beginning, middle, or end of the text view."}]},"type":{"type":"union","types":[{"type":"literal","value":"head"},{"type":"literal","value":"middle"},{"type":"literal","value":"tail"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"underline","variant":"declaration","kind":64,"signatures":[{"name":"underline","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an underline to the text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/underline(_:pattern:color:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Controls whether the underline is visible ("},{"kind":"code","text":"`true`"},{"kind":"text","text":" to show, "},{"kind":"code","text":"`false`"},{"kind":"text","text":" to hide)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"isActive","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"pattern","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/index.ts","qualifiedName":"LinePattern"},"name":"LinePattern","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"useScrollGeometryChange","variant":"declaration","kind":64,"signatures":[{"name":"useScrollGeometryChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fires when the scroll geometry changes โ€” i.e., on every scroll update and\non container/content size changes. Use to drive continuous progress UI\nsuch as page indicators, parallax, or fractional offsets.\n\nIf the callback is marked with the "},{"kind":"code","text":"`'worklet'`"},{"kind":"text","text":" directive, it runs\nsynchronously on the UI thread (no JS-thread round-trip); otherwise it is\ndelivered asynchronously as a regular JS event. Both paths share the same\nnative modifier โ€” the worklet variant is automatically wrapped in a\n"},{"kind":"code","text":"`WorkletCallback`"},{"kind":"text","text":" shared object whose lifetime is managed by the hook.\n\nThis is a hook because the worklet path requires a stable shared-object\nreference across renders. Call it at the top of your component, then\ninclude the returned modifier in your "},{"kind":"code","text":"`modifiers`"},{"kind":"text","text":" array.\n\nApply to a SwiftUI "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":" (and other scrollable views). On iOS below\n18.0 the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onscrollgeometrychange(for:of:_:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst geometryModifier = useScrollGeometryChange((g) => {\n 'worklet';\n progress.value = g.contentOffsetX / g.containerWidth;\n});\n\n\n```"}]}]},"parameters":[{"name":"callback","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"geometry","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollGeometry"},"name":"ScrollGeometry","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"union","types":[{"type":"reference","name":"ModifierConfig","package":"@expo/ui"},{"type":"literal","value":null}]}}]},{"name":"widgetAccentedRenderingMode","variant":"declaration","kind":64,"signatures":[{"name":"widgetAccentedRenderingMode","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the how to render an Image when using the WidgetKit/WidgetRenderingMode/accented mode."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/image/widgetaccentedrenderingmode(_:))."}]}]},"parameters":[{"name":"renderingMode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A constant describing how the Image should be rendered."}]},"type":{"type":"union","types":[{"type":"literal","value":"fullColor"},{"type":"literal","value":"accented"},{"type":"literal","value":"desaturated"},{"type":"literal","value":"accentedDesaturated"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"widgetURL","variant":"declaration","kind":64,"signatures":[{"name":"widgetURL","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the URL to open in the containing app when the user clicks the widget.\nWidgets support one widgetURL modifier in their view hierarchy. If multiple views have widgetURL modifiers, the behavior is undefined."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/widgetURL(_:))."}]}]},"parameters":[{"name":"url","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The URL to open in the containing app."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"zIndex","variant":"declaration","kind":64,"signatures":[{"name":"zIndex","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the z-index (display order) of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/zindex(_:))."}]}]},"parameters":[{"name":"index","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The z-index value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]}],"packageName":"@expo/ui"} \ No newline at end of file +{"schemaVersion":"2.0","name":"expo-ui/swift-ui/modifiers","variant":"project","kind":1,"children":[{"name":"ModifierConfig","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Base interface for all view modifiers.\nAll modifiers must have a type field and can include arbitrary parameters."}]},"children":[{"name":"$type","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"eventListener","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"args","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"any"}}]},{"name":"ChainableAnimationType","variant":"declaration","kind":2097152,"children":[{"name":"[VALUE_SYMBOL]","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/animation/types.ts","qualifiedName":"AnimationObject"},"name":"AnimationObject","package":"@expo/ui"}}]}}},{"name":"delay","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Adds a delay before the animation starts (in seconds)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"delay","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}}},{"name":"repeat","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Repeats the animation the given number of times."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"autoreverses","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"repeatCount","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}}}]},{"name":"Color","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/types.ts","qualifiedName":"NamedColor"},"name":"NamedColor","package":"@expo/ui"}]}},{"name":"ContainerBackgroundPlacement","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"widget"},{"type":"literal","value":"navigation"},{"type":"literal","value":"navigationSplitView"}]}},{"name":"DatePickerStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"compact"},{"type":"literal","value":"graphical"},{"type":"literal","value":"wheel"}]}},{"name":"DiscreteSymbolEffectValue","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Equatable primitive accepted as a discrete effect trigger."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"boolean"}]}},{"name":"DynamicTypeSizeValue","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A standard size for Dynamic Type, from "},{"kind":"code","text":"`xSmall`"},{"kind":"text","text":" through the five\n"},{"kind":"code","text":"`accessibility`"},{"kind":"text","text":" sizes. Mirrors SwiftUI's "},{"kind":"code","text":"`DynamicTypeSize`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"xSmall"},{"type":"literal","value":"small"},{"type":"literal","value":"medium"},{"type":"literal","value":"large"},{"type":"literal","value":"xLarge"},{"type":"literal","value":"xxLarge"},{"type":"literal","value":"xxxLarge"},{"type":"literal","value":"accessibility1"},{"type":"literal","value":"accessibility2"},{"type":"literal","value":"accessibility3"},{"type":"literal","value":"accessibility4"},{"type":"literal","value":"accessibility5"}]}},{"name":"EnvironmentConfig","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"editMode"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"active"},{"type":"literal","value":"inactive"},{"type":"literal","value":"transient"}]}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"colorScheme"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"light"},{"type":"literal","value":"dark"}]}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"locale"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"timeZone"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}}]}},{"name":"GaugeStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"circular"},{"type":"literal","value":"circularCapacity"},{"type":"literal","value":"linear"},{"type":"literal","value":"linearCapacity"}]}},{"name":"GlobalEvent","variant":"declaration","kind":2097152,"children":[{"name":"onGlobalEvent","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"event","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"nativeEvent","variant":"declaration","kind":1024,"type":{"type":"reference","name":"GlobalEventPayload","package":"@expo/ui"}}]}}}],"type":{"type":"intrinsic","name":"void"}}]}}}]},{"name":"GlobalEventPayload","variant":"declaration","kind":2097152,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"eventName","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"}}]}}},{"name":"IndexViewStyleConfig","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Configuration for the "},{"kind":"code","text":"`indexViewStyle`"},{"kind":"text","text":" modifier."}]},"children":[{"name":"backgroundDisplayMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Translucent background behind the page indicator dots. Useful when the\ndots sit on top of dark or busy content."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'automatic'"}]}]},"type":{"type":"reference","name":"PageIndexBackgroundDisplayMode","package":"@expo/ui"}}]},{"name":"InterpolatingSpringAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"bounce","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Extra bounce to apply to the spring animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"damping","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The damping applied to the spring."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"initialVelocity","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The initial velocity of the animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"mass","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The mass attached to the spring."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"stiffness","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The stiffness of the spring."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"ListStyle","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"plain"},{"type":"literal","value":"inset"},{"type":"literal","value":"insetGrouped"},{"type":"literal","value":"grouped"},{"type":"literal","value":"sidebar"}]}},{"name":"ObservableState","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Observable state shared between JavaScript and native views (Jetpack Compose\non Android and SwiftUI on iOS)."}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/SharedObject.ts","qualifiedName":"SharedObject"},"name":"SharedObject","package":"expo-modules-core"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"onChange","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A single listener invoked on the native UI runtime whenever the value changes\n(after iOS "},{"kind":"code","text":"`didSet`"},{"kind":"text","text":" and Android's setter). Assigning replaces the previous\nlistener; assign "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to clear. The initial value does not fire "},{"kind":"code","text":"`onChange`"},{"kind":"text","text":".\n\nThe callback must be a worklet so it can run synchronously on the UI thread.\nAttach it inside "},{"kind":"code","text":"`useEffect`"},{"kind":"text","text":" and clear it in the cleanup so the listener\nlifecycle matches the component lifecycle."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst state = useNativeState(0);\n\nuseEffect(() => {\n state.onChange = (value) => {\n 'worklet';\n console.log('changed to', value);\n };\n}, []);\n```"}]}]},"type":{"type":"union","types":[{"type":"indexedAccess","indexType":{"type":"literal","value":"listener"},"objectType":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"listener","variant":"declaration","kind":2048,"signatures":[{"name":"listener","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"intrinsic","name":"void"}}]}]}}},{"type":"literal","value":null}]}},{"name":"value","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The current value.\n\nWrites from a UI worklet are synchronous and immediately readable. Writes\nfrom the JS thread are scheduled to the UI thread asynchronously, the new value is not readable until the update has been\napplied. Prefer writing from a worklet when you need synchronous updates"}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}},{"name":"get","variant":"declaration","kind":2048,"signatures":[{"name":"get","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Reads the current value. A React Compiler compliant alternative to reading "},{"kind":"code","text":"`.value`"}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}]},{"name":"set","variant":"declaration","kind":2048,"signatures":[{"name":"set","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Writes a new value. A React Compiler-compliant alternative to assigning "},{"kind":"code","text":"`.value`"}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"intrinsic","name":"void"}}]}]}}]}},{"name":"PageIndexBackgroundDisplayMode","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"always"},{"type":"literal","value":"never"},{"type":"literal","value":"interactive"}]}},{"name":"PageIndexDisplayMode","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"always"},{"type":"literal","value":"never"}]}},{"name":"PickerStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"inline"},{"type":"literal","value":"menu"},{"type":"literal","value":"navigationLink"},{"type":"literal","value":"palette"},{"type":"literal","value":"segmented"},{"type":"literal","value":"wheel"}]}},{"name":"PresentationBackgroundInteractionType","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Presentation background interaction type."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"enabled"},{"type":"literal","value":"disabled"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"detent","variant":"declaration","kind":1024,"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"enabledUpThrough"}}]}}]}},{"name":"PresentationDetent","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Presentation detent type for controlling sheet heights.\n- "},{"kind":"code","text":"`'medium'`"},{"kind":"text","text":": System medium height (approximately half screen)\n- "},{"kind":"code","text":"`'large'`"},{"kind":"text","text":": System large height (full screen)\n- "},{"kind":"code","text":"`{ fraction: number }`"},{"kind":"text","text":": Fraction of screen height (0-1, for example, 0.4 equals to 40% of screen)\n- "},{"kind":"code","text":"`{ height: number }`"},{"kind":"text","text":": Fixed height in points"}]},"type":{"type":"union","types":[{"type":"literal","value":"medium"},{"type":"literal","value":"large"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"fraction","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}]}},{"name":"ProgressViewStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"linear"},{"type":"literal","value":"circular"}]}},{"name":"Shape","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.roundedRectangle","package":"@expo/ui","qualifiedName":"__object.roundedRectangle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.capsule","package":"@expo/ui","qualifiedName":"__object.capsule"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.rectangle","package":"@expo/ui","qualifiedName":"__object.rectangle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.ellipse","package":"@expo/ui","qualifiedName":"__object.ellipse"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.circle","package":"@expo/ui","qualifiedName":"__object.circle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.containerRelativeShape","package":"@expo/ui","qualifiedName":"__object.containerRelativeShape"}}],"name":"ReturnType","package":"typescript"}]}},{"name":"SpringAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"blendDuration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The duration over which to blend between animations (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"bounce","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Extra bounce to apply to the spring animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"dampingFraction","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The amount of damping applied to the spring's motion."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"response","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The spring's response time (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"SymbolEffect","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"AppearSymbolEffect"},"name":"AppearSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"BounceSymbolEffect"},"name":"BounceSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"BreatheSymbolEffect"},"name":"BreatheSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DisappearSymbolEffect"},"name":"DisappearSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DrawOffSymbolEffect"},"name":"DrawOffSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DrawOnSymbolEffect"},"name":"DrawOnSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"PulseSymbolEffect"},"name":"PulseSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"RotateSymbolEffect"},"name":"RotateSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"ScaleSymbolEffect"},"name":"ScaleSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"VariableColorSymbolEffect"},"name":"VariableColorSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"WiggleSymbolEffect"},"name":"WiggleSymbolEffect","package":"@expo/ui"}]}},{"name":"SymbolEffectOptions","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Animation options for a symbol effect."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [Apple documentation](https://developer.apple.com/documentation/symbols/symboleffectoptions)."}]}]},"children":[{"name":"repeat","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"How the effect repeats. Omit for the effect's natural cadence.\n- "},{"kind":"code","text":"`'nonRepeating'`"},{"kind":"text","text":" โ€” play exactly once.\n- "},{"kind":"code","text":"`'continuous'`"},{"kind":"text","text":" โ€” smooth, indefinite repetition (iOS 18+).\n- "},{"kind":"code","text":"`{ count?, delay? }`"},{"kind":"text","text":" โ€” periodic repetition with optional count and delay in seconds (iOS 18+)."}]},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"nonRepeating"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"count","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"delay","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}]}},{"name":"speed","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Animation speed multiplier (1.0 = default)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"TabViewStyleConfig","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Configuration for the "},{"kind":"code","text":"`tabViewStyle`"},{"kind":"text","text":" modifier.\n\n - "},{"kind":"code","text":"`'page'`"},{"kind":"text","text":" โ€” swipeable horizontal pager with optional dot indicators.\n - "},{"kind":"code","text":"`'automatic'`"},{"kind":"text","text":" โ€” SwiftUI's default tab-bar style.\n - "},{"kind":"code","text":"`'sidebarAdaptable'`"},{"kind":"text","text":" โ€” iOS 18+. Sidebar on iPad/Mac, bottom bar on\n iPhone."}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"indexDisplayMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Visibility of the page indicator dots. Only meaningful for the page style."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'automatic'"}]}]},"type":{"type":"reference","name":"PageIndexDisplayMode","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"page"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"automatic"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"sidebarAdaptable"}}]}}]}},{"name":"TimingAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"UnitPointValue","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"zero"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"top"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"leading"},{"type":"literal","value":"center"},{"type":"literal","value":"trailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottom"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"Animation","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"Built-in animation presets for the "},{"kind":"code","text":"`animation`"},{"kind":"text","text":" modifier.\nPresets:\n- Timing presets ("},{"kind":"code","text":"`easeInOut`"},{"kind":"text","text":", "},{"kind":"code","text":"`easeIn`"},{"kind":"text","text":", "},{"kind":"code","text":"`easeOut`"},{"kind":"text","text":", "},{"kind":"code","text":"`linear`"},{"kind":"text","text":") accept\n["},{"kind":"code","text":"`TimingAnimationParams`"},{"kind":"text","text":"](#timinganimationparams).\n- "},{"kind":"code","text":"`spring`"},{"kind":"text","text":" accepts ["},{"kind":"code","text":"`SpringAnimationParams`"},{"kind":"text","text":"](#springanimationparams).\n- "},{"kind":"code","text":"`interpolatingSpring`"},{"kind":"text","text":" accepts\n["},{"kind":"code","text":"`InterpolatingSpringAnimationParams`"},{"kind":"text","text":"](#interpolatingspringanimationparams).\n- Chaining returns ["},{"kind":"code","text":"`ChainableAnimationType`"},{"kind":"text","text":"](#chainableanimationtype)."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Host, VStack } from '@expo/ui/swift-ui';\nimport { animation, Animation } from '@expo/ui/swift-ui/modifiers';\n\nfunction Example() {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n \n \n //...\n \n \n );\n}\n```"}]},{"tag":"@hideType","content":[]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"},"defaultValue":"..."},{"name":"easeIn","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"easeInOut","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"easeOut","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"interpolatingSpring","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"InterpolatingSpringAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"linear","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"spring","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"SpringAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."}]}},"defaultValue":"..."},{"name":"shapes","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"Shape builders for modifiers that accept shapes, such as "},{"kind":"code","text":"`background`"},{"kind":"text","text":" and "},{"kind":"code","text":"`containerShape`"},{"kind":"text","text":".\n\nShapes: "},{"kind":"code","text":"`roundedRectangle`"},{"kind":"text","text":", "},{"kind":"code","text":"`capsule`"},{"kind":"text","text":", "},{"kind":"code","text":"`rectangle`"},{"kind":"text","text":", "},{"kind":"code","text":"`ellipse`"},{"kind":"text","text":", "},{"kind":"code","text":"`circle`"},{"kind":"text","text":", "},{"kind":"code","text":"`containerRelativeShape`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { background, shapes } from '@expo/ui/swift-ui/modifiers';\nimport { Text, Host } from '@expo/ui/swift-ui';\n\nfunction Example() {\n return (\n \n \n Hello, world!\n \n \n );\n}\n```"}]},{"tag":"@hideType","content":[]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"capsule","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"}]}}]}}}],"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.roundedCornerStyle"},{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'capsule'"}]}}}]}},"defaultValue":"..."},{"name":"circle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'circle'"}]}}}]}},"defaultValue":"..."},{"name":"containerRelativeShape","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'containerRelativeShape'"}]}}}]}},"defaultValue":"..."},{"name":"ellipse","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'ellipse'"}]}}}]}},"defaultValue":"..."},{"name":"rectangle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'rectangle'"}]}}}]}},"defaultValue":"..."},{"name":"roundedRectangle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"cornerSize","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"}]}}]}}}],"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.cornerRadius"},{"name":"cornerSize","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.cornerSize"},{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.roundedCornerStyle"},{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'roundedRectangle'"}]}}}]}},"defaultValue":"..."}]}},"defaultValue":"..."},{"name":"accessibilityHidden","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityHidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Marks the view as decoratively-named so VoiceOver and other assistive\ntechnologies skip it during element traversal. Useful for hero icons or\npresentational imagery that's already described by adjacent text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityhidden(_:))."}]}]},"parameters":[{"name":"hidden","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be hidden from accessibility. Defaults to "},{"kind":"code","text":"`true`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityHint","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityHint","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility hint for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityhint(_:))."}]}]},"parameters":[{"name":"hint","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility hint."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityIdentifier","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityIdentifier","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets an accessibility identifier for the view.\n\nUnlike "},{"kind":"code","text":"`accessibilityLabel`"},{"kind":"text","text":", this value is for UI testing and is not visible\nto the user. UI testing tools such as XCUITest read it to locate the view, so\nprefer a stable, machine-readable identifier here."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityidentifier(_:))."}]}]},"parameters":[{"name":"identifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility identifier used for UI testing."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityInputLabels","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityInputLabels","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets alternative spoken phrases that Voice Control uses to refer to the view.\nEach label is read as a "},{"kind":"code","text":"`Text`"},{"kind":"text","text":" element on iOS. For example, an \"End\" button\nmight offer \"Hang up\" so users can trigger it by saying that phrase."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityinputlabels(_:))."}]}]},"parameters":[{"name":"inputLabels","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The spoken phrases that select the view."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityLabel","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityLabel","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility label for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilitylabel(_:))."}]}]},"parameters":[{"name":"label","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility label."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityValue","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityValue","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility value for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityvalue(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility value."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"activityBackgroundTint","variant":"declaration","kind":64,"signatures":[{"name":"activityBackgroundTint","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background tint color for a Live Activity."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/activitybackgroundtint(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background tint color, or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to use the system default."}]},"type":{"type":"union","types":[{"type":"reference","name":"Color","package":"@expo/ui"},{"type":"literal","value":null}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"allowsTightening","variant":"declaration","kind":64,"signatures":[{"name":"allowsTightening","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets whether text in this view can compress the space between characters when necessary to fit text in a line"}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/allowstightening(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"animation","variant":"declaration","kind":64,"signatures":[{"name":"animation","variant":"signature","kind":4096,"parameters":[{"name":"animationObject","variant":"param","kind":32768,"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}},{"name":"animatedValue","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"boolean"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"aspectRatio","variant":"declaration","kind":64,"signatures":[{"name":"aspectRatio","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets aspect ratio constraint."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/aspectratio(_:contentmode:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Optional width/height aspect ratio and content mode."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"contentMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"fill"},{"type":"literal","value":"fit"}]}},{"name":"ratio","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"autocorrectionDisabled","variant":"declaration","kind":64,"signatures":[{"name":"autocorrectionDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables autocorrection for text input views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/autocorrectiondisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether autocorrection is disabled. Defaults to "},{"kind":"code","text":"`true`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"background","variant":"declaration","kind":64,"signatures":[{"name":"background","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/background(_:alignment:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"shape","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional shape to clip the background. If not provided, the background will fill the entire view."}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"backgroundOverlay","variant":"declaration","kind":64,"signatures":[{"name":"backgroundOverlay","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a background behind the view."}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Background color and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"badge","variant":"declaration","kind":64,"signatures":[{"name":"badge","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Generates a badge for the view from a localized string key."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/badge(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Text view to display as a badge. Set the value to nil to hide the badge."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"badgeProminence","variant":"declaration","kind":64,"signatures":[{"name":"badgeProminence","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The prominence to apply to badges associated with this environment."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/badgeprominence(_:))."}]}]},"parameters":[{"name":"badgeType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Select the type of badge"}]},"type":{"type":"union","types":[{"type":"literal","value":"standard"},{"type":"literal","value":"increased"},{"type":"literal","value":"decreased"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"blur","variant":"declaration","kind":64,"signatures":[{"name":"blur","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies blur to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/blur(radius:opaque:))."}]}]},"parameters":[{"name":"radius","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The blur radius."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"bold","variant":"declaration","kind":64,"signatures":[{"name":"bold","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes text bold.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", it works on all iOS/tvOS versions. When used on regular views, it requires iOS 16.0+/tvOS 16.0+."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/bold())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"border","variant":"declaration","kind":64,"signatures":[{"name":"border","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a border to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/border(_:width:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The border parameters. Color and width."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"width","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"brightness","variant":"declaration","kind":64,"signatures":[{"name":"brightness","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the brightness of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/brightness(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Brightness adjustment (-1 to 1)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"buttonBorderShape","variant":"declaration","kind":64,"signatures":[{"name":"buttonBorderShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the border shape used by buttons within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/buttonbordershape(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The button border shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"circle"},{"type":"literal","value":"automatic"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius, only used with "},{"kind":"code","text":"`'roundedRectangle'`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"buttonStyle","variant":"declaration","kind":64,"signatures":[{"name":"buttonStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the button style for button views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/buttonstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The button style. "},{"kind":"code","text":"`'glass'`"},{"kind":"text","text":" and "},{"kind":"code","text":"`'glassProminent'`"},{"kind":"text","text":" are available on iOS 26+ and tvOS 26+ only."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"bordered"},{"type":"literal","value":"borderedProminent"},{"type":"literal","value":"borderless"},{"type":"literal","value":"glass"},{"type":"literal","value":"glassProminent"},{"type":"literal","value":"plain"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"clipped","variant":"declaration","kind":64,"signatures":[{"name":"clipped","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clips content to bounds."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/clipped(antialiased:))."}]}]},"parameters":[{"name":"clipped","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to clip content."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"clipShape","variant":"declaration","kind":64,"signatures":[{"name":"clipShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clips the view to a specific shape."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/clipshape(_:style:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The clipping shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius for rounded rectangle (default: 8)"}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"colorInvert","variant":"declaration","kind":64,"signatures":[{"name":"colorInvert","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Inverts the colors of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/colorinvert())."}]}]},"parameters":[{"name":"inverted","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to invert colors."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerBackground","variant":"declaration","kind":64,"signatures":[{"name":"containerBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the container background of the enclosing container using a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/containerbackground(_:for:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The color to set as the background of the container."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"container","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of container to apply the background to."}]},"type":{"type":"reference","name":"ContainerBackgroundPlacement","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerRelativeFrame","variant":"declaration","kind":64,"signatures":[{"name":"containerRelativeFrame","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Positions this view within an invisible frame with a size relative to the nearest container."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/containerRelativeFrame(_:alignment:))."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The content relative frame parameters: "},{"kind":"code","text":"`axes`"},{"kind":"text","text":", "},{"kind":"code","text":"`count`"},{"kind":"text","text":", "},{"kind":"code","text":"`span`"},{"kind":"text","text":", "},{"kind":"code","text":"`spacing`"},{"kind":"text","text":" and "},{"kind":"code","text":"`alignment`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"axes","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"both"}]}},{"name":"count","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"spacing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"span","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerShape","variant":"declaration","kind":64,"signatures":[{"name":"containerShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the container shape for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/containershape(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A shape configuration from the shapes API"}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contentShape","variant":"declaration","kind":64,"signatures":[{"name":"contentShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Defines the content shape for hit-testing purposes.\n\nThis modifier is essential for making entire view areas (including "},{"kind":"code","text":"`Spacer`"},{"kind":"text","text":" or empty space)\ninteractive. Without it, only visible elements like "},{"kind":"code","text":"`Text`"},{"kind":"text","text":" or "},{"kind":"code","text":"`Image`"},{"kind":"text","text":" respond to tap gestures."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { HStack, List, Section, Spacer, Text } from \"@expo/ui/swift-ui\";\nimport { contentShape, onTapGesture } from \"@expo/ui/swift-ui/modifiers\";\nimport { shapes } from \"@expo/ui/swift-ui/modifiers\";\n\nfunction InteractiveRow() {\n return (\n \n
\n console.log(\"Row tapped!\"))\n ]}\n >\n Label\n \n Value\n \n
\n
\n );\n}\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contentshape(_:eofill:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A shape configuration from the shapes API (rectangle, circle, capsule, ellipse, roundedRectangle)."}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contentTransition","variant":"declaration","kind":64,"signatures":[{"name":"contentTransition","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the content transition type for a view.\nUseful for animating changes in text content, especially numeric text.\nUse with the ["},{"kind":"code","text":"`animation`"},{"kind":"text","text":"](#animationanimationobject-animatedvalue) modifier to animate the transition when the content changes."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n {count.toString()}\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contenttransition(_:))."}]}]},"parameters":[{"name":"transitionType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of content transition."}]},"type":{"type":"union","types":[{"type":"literal","value":"opacity"},{"type":"literal","value":"identity"},{"type":"literal","value":"numericText"},{"type":"literal","value":"interpolate"}]}},{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional parameters."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"countsDown","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the numeric text counts down."}]},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contrast","variant":"declaration","kind":64,"signatures":[{"name":"contrast","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the contrast of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contrast(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Contrast multiplier (0 to infinity, 1 = normal)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"controlSize","variant":"declaration","kind":64,"signatures":[{"name":"controlSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the size of controls within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/controlsize(_:))."}]}]},"parameters":[{"name":"size","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The control size."}]},"type":{"type":"union","types":[{"type":"literal","value":"small"},{"type":"literal","value":"mini"},{"type":"literal","value":"regular"},{"type":"literal","value":"large"},{"type":"literal","value":"extraLarge"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"cornerRadius","variant":"declaration","kind":64,"signatures":[{"name":"cornerRadius","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies corner radius to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/cornerradius(_:antialiased:))."}]}]},"parameters":[{"name":"radius","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The corner radius value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createModifier","variant":"declaration","kind":64,"signatures":[{"name":"createModifier","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Factory function to create modifier configuration objects.\nThis is used by all built-in modifier functions and can be used by 3rd party libraries to create custom modifiers."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A "},{"kind":"code","text":"`ModifierConfig`"},{"kind":"text","text":" object that can be passed in the "},{"kind":"code","text":"`modifiers`"},{"kind":"text","text":" prop array."}]},{"tag":"@example","content":[{"kind":"code","text":"```ts\n// In a 3rd party package\nimport { createModifier } from '@expo/ui/swift-ui/modifiers';\n\nexport const blurEffect = (params: { radius: number; style?: string }) =>\n createModifier('blurEffect', params);\n```"}]}]},"parameters":[{"name":"type","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The modifier type string that maps to a registered native modifier."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Additional parameters to pass to the modifier."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createModifierWithEventListener","variant":"declaration","kind":64,"signatures":[{"name":"createModifierWithEventListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Creates a modifier with an event listener."}]},"parameters":[{"name":"type","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}},{"name":"eventListener","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"args","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"params","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createViewModifierEventListener","variant":"declaration","kind":64,"signatures":[{"name":"createViewModifierEventListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Create an event listener for a view modifier."}]},"parameters":[{"name":"modifiers","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An array of modifier configs to extract event listeners from."}]},"type":{"type":"array","elementType":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}}],"type":{"type":"reference","name":"GlobalEvent","package":"@expo/ui"}}]},{"name":"datePickerStyle","variant":"declaration","kind":64,"signatures":[{"name":"datePickerStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the date picker."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/datepickerstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the date picker."}]},"type":{"type":"reference","name":"DatePickerStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"defaultScrollAnchor","variant":"declaration","kind":64,"signatures":[{"name":"defaultScrollAnchor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the default anchor point for a scroll view's content."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 14.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/defaultscrollanchor(_:))."}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The anchor point for initial scroll position and content size changes, or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to reset."}]},"type":{"type":"union","types":[{"type":"reference","name":"UnitPointValue","package":"@expo/ui"},{"type":"literal","value":null}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"defaultScrollAnchorForRole","variant":"declaration","kind":64,"signatures":[{"name":"defaultScrollAnchorForRole","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the default anchor point for a scroll view for a specific role.\nPass "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to opt out of a specific role while keeping anchors for other roles."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/defaultscrollanchor(_:for:))."}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The anchor point, or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to opt out of this role."}]},"type":{"type":"union","types":[{"type":"reference","name":"UnitPointValue","package":"@expo/ui"},{"type":"literal","value":null}]}},{"name":"role","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The scroll anchor role: "},{"kind":"code","text":"`'initialOffset'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'sizeChanges'`"},{"kind":"text","text":", or "},{"kind":"code","text":"`'alignment'`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"initialOffset"},{"type":"literal","value":"sizeChanges"},{"type":"literal","value":"alignment"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"deleteDisabled","variant":"declaration","kind":64,"signatures":[{"name":"deleteDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables the delete action for a view in a list.\nApply to items within a "},{"kind":"code","text":"`ForEach`"},{"kind":"text","text":" to prevent them from being deleted."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/deletedisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether deletion should be disabled"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"disabled","variant":"declaration","kind":64,"signatures":[{"name":"disabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables or enables a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/disabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be disabled."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"dynamicTypeSize","variant":"declaration","kind":64,"signatures":[{"name":"dynamicTypeSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets or constrains the Dynamic Type size within the view, overriding the\nvalue inherited from the system.\n\nFour variants matching SwiftUI's "},{"kind":"code","text":"`dynamicTypeSize(_:)`"},{"kind":"text","text":":\n- "},{"kind":"code","text":"`dynamicTypeSize('large')`"},{"kind":"text","text":" โ€” fixes the Dynamic Type size to a single value\n- "},{"kind":"code","text":"`dynamicTypeSize({ max: 'accessibility3' })`"},{"kind":"text","text":" โ€” caps growth at a ceiling ("},{"kind":"code","text":"`...accessibility3`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large' })`"},{"kind":"text","text":" โ€” sets a floor ("},{"kind":"code","text":"`large...`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large', max: 'accessibility3' })`"},{"kind":"text","text":" โ€” clamps to a range ("},{"kind":"code","text":"`large...accessibility3`"},{"kind":"text","text":")\n\n"},{"kind":"code","text":"`min`"},{"kind":"text","text":" and "},{"kind":"code","text":"`max`"},{"kind":"text","text":" are independent: pass either or both. Set it on a "},{"kind":"code","text":"``"},{"kind":"text","text":" to\ncascade the constraint to every descendant through the SwiftUI environment.\nKeep "},{"kind":"code","text":"`min`"},{"kind":"text","text":" at or below "},{"kind":"code","text":"`max`"},{"kind":"text","text":", or the range traps natively, like SwiftUI.\nPer Apple's guidance, prefer capping at an accessibility size over disabling\nDynamic Type entirely."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Cap how large text in a tight layout can grow\n...\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/dynamictypesize(_:))."}]}]},"parameters":[{"name":"size","variant":"param","kind":32768,"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"dynamicTypeSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets or constrains the Dynamic Type size within the view, overriding the\nvalue inherited from the system.\n\nFour variants matching SwiftUI's "},{"kind":"code","text":"`dynamicTypeSize(_:)`"},{"kind":"text","text":":\n- "},{"kind":"code","text":"`dynamicTypeSize('large')`"},{"kind":"text","text":" โ€” fixes the Dynamic Type size to a single value\n- "},{"kind":"code","text":"`dynamicTypeSize({ max: 'accessibility3' })`"},{"kind":"text","text":" โ€” caps growth at a ceiling ("},{"kind":"code","text":"`...accessibility3`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large' })`"},{"kind":"text","text":" โ€” sets a floor ("},{"kind":"code","text":"`large...`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large', max: 'accessibility3' })`"},{"kind":"text","text":" โ€” clamps to a range ("},{"kind":"code","text":"`large...accessibility3`"},{"kind":"text","text":")\n\n"},{"kind":"code","text":"`min`"},{"kind":"text","text":" and "},{"kind":"code","text":"`max`"},{"kind":"text","text":" are independent: pass either or both. Set it on a "},{"kind":"code","text":"``"},{"kind":"text","text":" to\ncascade the constraint to every descendant through the SwiftUI environment.\nKeep "},{"kind":"code","text":"`min`"},{"kind":"text","text":" at or below "},{"kind":"code","text":"`max`"},{"kind":"text","text":", or the range traps natively, like SwiftUI.\nPer Apple's guidance, prefer capping at an accessibility size over disabling\nDynamic Type entirely."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Cap how large text in a tight layout can grow\n...\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/dynamictypesize(_:))."}]}]},"parameters":[{"name":"range","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"environment","variant":"declaration","kind":64,"signatures":[{"name":"environment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a SwiftUI environment value."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/environment(_:_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"EnvironmentConfig","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"environment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a SwiftUI environment value."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/environment(_:_:))."}]}]},"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"literal","value":"colorScheme"},{"type":"literal","value":"editMode"},{"type":"literal","value":"locale"},{"type":"literal","value":"timeZone"}]}},{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"fixedSize","variant":"declaration","kind":64,"signatures":[{"name":"fixedSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls fixed size behavior."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/fixedsize())."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the view should use its ideal width or height."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"vertical","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"font","variant":"declaration","kind":64,"signatures":[{"name":"font","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the font properties of a view.\n\nPass "},{"kind":"code","text":"`textStyle`"},{"kind":"text","text":" to scale with the user's Dynamic Type setting. Combine\nit with "},{"kind":"code","text":"`family`"},{"kind":"text","text":" to scale a custom font."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Scales with Dynamic Type\nHello\n\n// Custom font that scales relative to the body text style\nHi\n\n// Fixed-size system font (no Dynamic Type scaling)\nStatic\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official SwiftUI documentation for ["},{"kind":"code","text":"`system(_:design:weight:)`"},{"kind":"text","text":"](https://developer.apple.com/documentation/swiftui/font/system(_:design:weight:)), and ["},{"kind":"code","text":"`custom(_:size:relativeTo:)`"},{"kind":"text","text":"](https://developer.apple.com/documentation/swiftui/font/custom(_:size:relativeto:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"design","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font design. Applied when no "},{"kind":"code","text":"`family`"},{"kind":"text","text":" is provided. "},{"kind":"code","text":"`Font.custom`"},{"kind":"text","text":" always uses the embedded font's own design."}]},"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"rounded"},{"type":"literal","value":"serif"},{"type":"literal","value":"monospaced"}]}},{"name":"family","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Custom font family name."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"size","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font size in points. Ignored when only "},{"kind":"code","text":"`textStyle`"},{"kind":"text","text":" is set."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"17"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"textStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"SwiftUI text style. When set, the resulting font scales with the user's\nDynamic Type setting."}]},"type":{"type":"union","types":[{"type":"literal","value":"largeTitle"},{"type":"literal","value":"title"},{"type":"literal","value":"title2"},{"type":"literal","value":"title3"},{"type":"literal","value":"headline"},{"type":"literal","value":"subheadline"},{"type":"literal","value":"body"},{"type":"literal","value":"callout"},{"type":"literal","value":"footnote"},{"type":"literal","value":"caption"},{"type":"literal","value":"caption2"}]}},{"name":"weight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font weight."}]},"type":{"type":"union","types":[{"type":"literal","value":"light"},{"type":"literal","value":"bold"},{"type":"literal","value":"black"},{"type":"literal","value":"regular"},{"type":"literal","value":"medium"},{"type":"literal","value":"ultraLight"},{"type":"literal","value":"thin"},{"type":"literal","value":"semibold"},{"type":"literal","value":"heavy"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"foregroundColor","variant":"declaration","kind":64,"signatures":[{"name":"foregroundColor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the foreground color/tint of a view."}],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"Use "},{"kind":"code","text":"`foregroundStyle`"},{"kind":"text","text":" instead."}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/foregroundcolor(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The foreground color (hex string)."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"foregroundStyle","variant":"declaration","kind":64,"signatures":[{"name":"foregroundStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the foreground style of a view with comprehensive styling options.\n\nReplaces the deprecated "},{"kind":"code","text":"`foregroundColor`"},{"kind":"text","text":" modifier with enhanced capabilities including\ncolors, gradients, and semantic hierarchical styles that adapt to system appearance."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Simple usage\nRed Text\n\n// Adaptive hierarchical styling\n\n Supporting Text\n\n\n// Linear gradient\n\n Gradient Text\n\n```"}]},{"tag":"@returns","content":[{"kind":"text","text":"A view modifier that applies the specified foreground style"}]},{"tag":"@since","content":[{"kind":"text","text":"iOS 15.0+ (hierarchical quinary requires iOS 16.0+)"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/foregroundstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The foreground style configuration. Can be:\n\n**Simple Color ("},{"kind":"code","text":"`Color`"},{"kind":"text","text":"):**\n- Hex colors: "},{"kind":"code","text":"`'#FF0000'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#RGB'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#RRGGBB'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#AARRGGBB'`"},{"kind":"text","text":"\n- Named colors: "},{"kind":"code","text":"`'red'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'blue'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'green'`"},{"kind":"text","text":", and so on.\n- React Native color values like "},{"kind":"code","text":"`PlatformColor('label')`"},{"kind":"text","text":"\n\n**Explicit Color Object:**\n"},{"kind":"code","text":"```ts\n{ type: 'color', color: PlatformColor('label') }\n```"},{"kind":"text","text":"\n\n**Hierarchical Styles (Semantic):**\nAuto-adapting semantic styles that respond to light/dark mode and accessibility settings:\n"},{"kind":"code","text":"```ts\n{ type: 'hierarchical', style: 'primary' } // Most prominent (main content, headlines)\n{ type: 'hierarchical', style: 'secondary' } // Supporting text, subheadlines\n{ type: 'hierarchical', style: 'tertiary' } // Less important text, captions\n{ type: 'hierarchical', style: 'quaternary' } // Subtle text, disabled states\n{ type: 'hierarchical', style: 'quinary' } // Most subtle (iOS 16+, fallback to quaternary)\n```"},{"kind":"text","text":"\n\n**Linear Gradient:**\n"},{"kind":"code","text":"```ts\n{\n type: 'linearGradient',\n colors: [PlatformColor('systemPink'), '#0000FF', '#00FF00'],\n startPoint: { x: 0, y: 0 }, // Top-left\n endPoint: { x: 1, y: 1 } // Bottom-right\n}\n```"},{"kind":"text","text":"\n\n**Radial Gradient:**\n"},{"kind":"code","text":"```ts\n{\n type: 'radialGradient',\n colors: [PlatformColor('systemPink'), '#0000FF'],\n center: { x: 0.5, y: 0.5 }, // Center of view\n startRadius: 0, // Inner radius\n endRadius: 100 // Outer radius\n}\n```"},{"kind":"text","text":"\n\n**Angular Gradient (Conic):**\n"},{"kind":"code","text":"```ts\n{\n type: 'angularGradient',\n colors: [PlatformColor('systemPink'), '#00FF00', '#0000FF'],\n center: { x: 0.5, y: 0.5 } // Rotation center\n}\n```"}]},"type":{"type":"union","types":[{"type":"reference","name":"Color","package":"@expo/ui"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"color"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"style","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"primary"},{"type":"literal","value":"secondary"},{"type":"literal","value":"tertiary"},{"type":"literal","value":"quaternary"},{"type":"literal","value":"quinary"}]}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"hierarchical"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"endPoint","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"startPoint","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"linearGradient"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"center","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"endRadius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"startRadius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"radialGradient"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"center","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"angularGradient"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"frame","variant":"declaration","kind":64,"signatures":[{"name":"frame","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the frame properties of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/frame(width:height:alignment:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The frame parameters. Width, height, minWidth, maxWidth, minHeight, maxHeight, idealWidth, idealHeight and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"height","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"idealHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"idealWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"maxHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"maxWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"minHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"minWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gaugeStyle","variant":"declaration","kind":64,"signatures":[{"name":"gaugeStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the gauge."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/gaugestyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the gauge."}]},"type":{"type":"reference","name":"GaugeStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"glassEffect","variant":"declaration","kind":64,"signatures":[{"name":"glassEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a glass effect to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/glasseffect(_:in:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The glass effect parameters. Variant, interactive, tint and shape."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"glass","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"interactive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"tint","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"variant","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"clear"},{"type":"literal","value":"regular"},{"type":"literal","value":"identity"}]}}]}}},{"name":"shape","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"glassEffectId","variant":"declaration","kind":64,"signatures":[{"name":"glassEffectId","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Associates an identity value to Liquid Glass effects defined within a "},{"kind":"code","text":"`GlassEffectContainer`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/glasseffectid(_:in:))."}]}]},"parameters":[{"name":"id","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The id of the glass effect."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"namespaceId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The namespace id of the glass effect. Use Namespace component to create a namespace."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"grayscale","variant":"declaration","kind":64,"signatures":[{"name":"grayscale","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes a view grayscale."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/grayscale(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Grayscale amount (0 to 1)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellAnchor","variant":"declaration","kind":64,"signatures":[{"name":"gridCellAnchor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies a custom alignment anchor for a view that acts as a grid cell."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified anchor point to align its content."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 16+"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Using a preset anchor\n\n\n// Using a custom anchor point\n\n```"}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The unit point that defines how to align the view within the bounds of its grid cell."}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"anchor","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"},{"type":"literal","value":"zero"}]}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"preset"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"points","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"custom"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellColumns","variant":"declaration","kind":64,"signatures":[{"name":"gridCellColumns","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Tells a view that acts as a cell in a grid to span the specified number of columns."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that occupies the specified number of columns in a grid row."}]}]},"parameters":[{"name":"count","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The number of columns that the view should consume when placed in a grid row."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellUnsizedAxes","variant":"declaration","kind":64,"signatures":[{"name":"gridCellUnsizedAxes","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Asks grid layouts not to offer the view extra size in the specified axes."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that doesnโ€™t ask an enclosing grid for extra size in one or more axes."}]}]},"parameters":[{"name":"axes","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The dimensions in which the grid shouldnโ€™t offer the view a share of any available space. This prevents a flexible view like a Spacer, Divider, or Color from defining the size of a row or column."}]},"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridColumnAlignment","variant":"declaration","kind":64,"signatures":[{"name":"gridColumnAlignment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Overrides the default horizontal alignment of the grid column that the view appears in."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified horizontal alignment, and that causes all cells in the same column of a grid to use the same alignment."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 16+"}]}]},"parameters":[{"name":"alignment","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The HorizontalAlignment guide to use for the grid column that the view appears in."}]},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"headerProminence","variant":"declaration","kind":64,"signatures":[{"name":"headerProminence","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the header prominence for this view."}]},"parameters":[{"name":"prominence","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The prominence to apply."}]},"type":{"type":"union","types":[{"type":"literal","value":"standard"},{"type":"literal","value":"increased"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"hidden","variant":"declaration","kind":64,"signatures":[{"name":"hidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Hides or shows a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/hidden(_:))."}]}]},"parameters":[{"name":"hidden","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be hidden."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"hueRotation","variant":"declaration","kind":64,"signatures":[{"name":"hueRotation","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a hue rotation to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/huerotation(_:))."}]}]},"parameters":[{"name":"angle","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Hue rotation angle in degrees."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"id","variant":"declaration","kind":64,"signatures":[{"name":"id","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Attaches a stable identifier to a view so it can be referenced by scroll target bindings.\nUse with "},{"kind":"code","text":"`scrollTargetLayout()`"},{"kind":"text","text":" on the containing stack and the "},{"kind":"code","text":"`scrollPosition`"},{"kind":"text","text":" modifier on a scrollable container."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/id(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"String identifier matched by "},{"kind":"code","text":"`scrollPosition`"},{"kind":"text","text":"'s observable state."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"ignoreSafeArea","variant":"declaration","kind":64,"signatures":[{"name":"ignoreSafeArea","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Allows a view to ignore safe area constraints."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ignoressafearea(_:edges:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The safe area regions to ignore and the edges to expand into."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"edges","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"all"}]}},{"name":"regions","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"container"},{"type":"literal","value":"all"},{"type":"literal","value":"keyboard"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"imageScale","variant":"declaration","kind":64,"signatures":[{"name":"imageScale","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Scales SF Symbols within this view relative to the surrounding text, using one of the standard sizes."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/imagescale(_:))."}]}]},"parameters":[{"name":"scale","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The relative image scale."}]},"type":{"type":"union","types":[{"type":"literal","value":"small"},{"type":"literal","value":"large"},{"type":"literal","value":"medium"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"indexViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"indexViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the page index view inside a "},{"kind":"code","text":"`TabView`"},{"kind":"text","text":". SwiftUI only\nships a "},{"kind":"code","text":"`.page`"},{"kind":"text","text":" index view style, so no style selector is exposed."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/indexviewstyle(_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"IndexViewStyleConfig","package":"@expo/ui"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"interactiveDismissDisabled","variant":"declaration","kind":64,"signatures":[{"name":"interactiveDismissDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables interactive dismissal of a sheet."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/interactivedismissdisabled(_:))."}]}]},"parameters":[{"name":"isDisabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether interactive dismiss is disabled (default: true)."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"italic","variant":"declaration","kind":64,"signatures":[{"name":"italic","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes text italic.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", it works on all iOS/tvOS versions. When used on regular views, it requires iOS 16.0+/tvOS 16.0+."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/italic())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"kerning","variant":"declaration","kind":64,"signatures":[{"name":"kerning","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the spacing, or kerning, between characters for the text in this view."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/kerning(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"keyboardType","variant":"declaration","kind":64,"signatures":[{"name":"keyboardType","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the keyboard type for text input views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/keyboardtype(_:))."}]}]},"parameters":[{"name":"keyboardType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of keyboard to display."}]},"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"email-address"},{"type":"literal","value":"numeric"},{"type":"literal","value":"phone-pad"},{"type":"literal","value":"ascii-capable"},{"type":"literal","value":"numbers-and-punctuation"},{"type":"literal","value":"url"},{"type":"literal","value":"name-phone-pad"},{"type":"literal","value":"decimal-pad"},{"type":"literal","value":"twitter"},{"type":"literal","value":"web-search"},{"type":"literal","value":"ascii-capable-number-pad"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"labelsHidden","variant":"declaration","kind":64,"signatures":[{"name":"labelsHidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Hides the labels of any controls contained within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/labelshidden())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"labelStyle","variant":"declaration","kind":64,"signatures":[{"name":"labelStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for labels within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/labelstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The label style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"iconOnly"},{"type":"literal","value":"titleAndIcon"},{"type":"literal","value":"titleOnly"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"layoutPriority","variant":"declaration","kind":64,"signatures":[{"name":"layoutPriority","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets layout priority for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/layoutpriority(_:))."}]}]},"parameters":[{"name":"priority","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Layout priority value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineHeight","variant":"declaration","kind":64,"signatures":[{"name":"lineHeight","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the total line height for text in this view."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 26.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 26.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 26.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/lineheight(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The line height in points."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineLimit","variant":"declaration","kind":64,"signatures":[{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"parameters":[{"name":"limit","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"reservesSpace","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"parameters":[{"name":"range","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"max","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"min","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineSpacing","variant":"declaration","kind":64,"signatures":[{"name":"lineSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The distance in points between the bottom of one line fragment and the top of the next."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linespacing(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The amount of space between the bottom of one line and the top of the next line in points. This value is always nonnegative. Otherwise, the default value will be used."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowBackground","variant":"declaration","kind":64,"signatures":[{"name":"listRowBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a row."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowbackground(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The row color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowInsets","variant":"declaration","kind":64,"signatures":[{"name":"listRowInsets","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an inset to the rows in a list."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowinsets(_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The inset to apply to the rows in a list."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowSeparator","variant":"declaration","kind":64,"signatures":[{"name":"listRowSeparator","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of the separator for a list row."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowseparator(_:edges:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility to apply."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}},{"name":"edges","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The edges where the separator visibility applies."}]},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"all"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowSpacing","variant":"declaration","kind":64,"signatures":[{"name":"listRowSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the vertical spacing between adjacent rows in a list."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowspacing(_:))."}]}]},"parameters":[{"name":"spacing","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The spacing value to use. When omitted, the default spacing is used."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listSectionMargins","variant":"declaration","kind":64,"signatures":[{"name":"listSectionMargins","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Allows a view to ignore safe area constraints."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listsectionmargins(_:_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The margins to apply to the section in a list."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"edges","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"all"}]}},{"name":"length","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listSectionSpacing","variant":"declaration","kind":64,"signatures":[{"name":"listSectionSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the spacing between adjacent sections."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]}]},"parameters":[{"name":"spacing","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The spacing to apply."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":"default"},{"type":"literal","value":"compact"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listStyle","variant":"declaration","kind":64,"signatures":[{"name":"listStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for a List view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/liststyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The list style to apply."}]},"type":{"type":"reference","name":"ListStyle","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"luminanceToAlpha","variant":"declaration","kind":64,"signatures":[{"name":"luminanceToAlpha","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a luminance to alpha effect to this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/luminanceToAlpha())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"mask","variant":"declaration","kind":64,"signatures":[{"name":"mask","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a mask to the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/mask(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The masking shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius for rounded rectangle (default: "},{"kind":"code","text":"`8`"},{"kind":"text","text":")."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"matchedGeometryEffect","variant":"declaration","kind":64,"signatures":[{"name":"matchedGeometryEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a matched geometry effect to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/matchedgeometryeffect(id:in:properties:anchor:issource:))."}]}]},"parameters":[{"name":"id","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The id of the view."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"namespaceId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The namespace id of the view. Use Namespace component to create a namespace."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"menuActionDismissBehavior","variant":"declaration","kind":64,"signatures":[{"name":"menuActionDismissBehavior","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the dismissal behavior of menu actions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/menuactiondismissbehavior(_:))."}]}]},"parameters":[{"name":"behavior","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The menu action dismiss behavior."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"disabled"},{"type":"literal","value":"enabled"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"minimumScaleFactor","variant":"declaration","kind":64,"signatures":[{"name":"minimumScaleFactor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the minimum amount that text in this view scales down to fit in the available space.\n\nUse this modifier if the text you place in a view doesn't fit and it's okay if the text shrinks\nto accommodate. For example, a label with a minimum scale factor of "},{"kind":"code","text":"`0.5`"},{"kind":"text","text":" draws its text in a\nfont size as small as half of the actual font if needed."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/minimumscalefactor(_:))."}]}]},"parameters":[{"name":"factor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A fraction between "},{"kind":"code","text":"`0`"},{"kind":"text","text":" and "},{"kind":"code","text":"`1`"},{"kind":"text","text":" (including "},{"kind":"code","text":"`0`"},{"kind":"text","text":" and "},{"kind":"code","text":"`1`"},{"kind":"text","text":") that specifies the amount\nof text to draw. For example, a value of "},{"kind":"code","text":"`0.5`"},{"kind":"text","text":" draws the text in a font size as small as half the\nactual font if needed."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"monospacedDigit","variant":"declaration","kind":64,"signatures":[{"name":"monospacedDigit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Modifies the fonts of all child views to use fixed-width digits, if possible, while leaving other characters proportionally spaced.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", modifies the text view's font to use fixed-width digits, while leaving other characters proportionally spaced."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/monospaceddigit())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"moveDisabled","variant":"declaration","kind":64,"signatures":[{"name":"moveDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables the move action for a view in a list.\nApply to items within a "},{"kind":"code","text":"`ForEach`"},{"kind":"text","text":" to prevent them from being moved."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/movedisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether moving should be disabled"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"multilineTextAlignment","variant":"declaration","kind":64,"signatures":[{"name":"multilineTextAlignment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"An alignment position for text along the horizontal axis."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/multilinetextalignment(_:))."}]}]},"parameters":[{"name":"alignment","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A value that you use to align multiple lines of text within a view."}]},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"offset","variant":"declaration","kind":64,"signatures":[{"name":"offset","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an offset (translation) to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/offset(x:y:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The offset parameters: "},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onAppear","variant":"declaration","kind":64,"signatures":[{"name":"onAppear","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an onAppear modifier that calls a function when the view appears."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onappear(perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when the view appears."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onDisappear","variant":"declaration","kind":64,"signatures":[{"name":"onDisappear","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an onDisappear modifier that calls a function when the view disappears."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ondisappear(perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when the view disappears."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onGeometryChange","variant":"declaration","kind":64,"signatures":[{"name":"onGeometryChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Calls the handler whenever the view's geometry changes, with its position and size.\n"},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":" are in the global coordinate space (relative to the window); all values are in points."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ongeometrychange(for:of:action:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function called with the new frame."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"frame","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onLongPressGesture","variant":"declaration","kind":64,"signatures":[{"name":"onLongPressGesture","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a long press gesture recognizer."}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when long pressed."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"minimumDuration","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Minimum duration for long press (default: 0.5s)"}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onScrollPhaseChange","variant":"declaration","kind":64,"signatures":[{"name":"onScrollPhaseChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fires when SwiftUI's scroll phase changes (e.g., the user begins dragging,\nthe scroll view starts decelerating, or scrolling settles to idle). The\nsecond argument is the scroll geometry sampled at the phase transition,\nuseful for reading the final offset on settle without subscribing to\nper-frame "},{"kind":"code","text":"`onScrollGeometryChange`"},{"kind":"text","text":".\n\nApply to a SwiftUI "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":" (and other scrollable views). On iOS below\n18.0 the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onscrollphasechange(_:))."}]}]},"parameters":[{"name":"callback","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"phase","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollPhase"},"name":"ScrollPhase","package":"@expo/ui"}},{"name":"geometry","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollGeometry"},"name":"ScrollGeometry","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onSubmit","variant":"declaration","kind":64,"signatures":[{"name":"onSubmit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an action to perform when the user submits a value to this view (e.g. pressing return in a text field)."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onsubmit(of:_:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call on submit."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onTapGesture","variant":"declaration","kind":64,"signatures":[{"name":"onTapGesture","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a tap gesture recognizer."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ontapgesture(count:perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when tapped."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"opacity","variant":"declaration","kind":64,"signatures":[{"name":"opacity","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the opacity of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/opacity(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Opacity value between 0 and 1."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"overlay","variant":"declaration","kind":64,"signatures":[{"name":"overlay","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Overlays another view on top."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/overlay(_:alignment:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Overlay color and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"padding","variant":"declaration","kind":64,"signatures":[{"name":"padding","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets padding on a view.\nSupports individual edges or shorthand properties."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/padding(_:_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The padding parameters: "},{"kind":"code","text":"`top`"},{"kind":"text","text":", "},{"kind":"code","text":"`bottom`"},{"kind":"text","text":", "},{"kind":"code","text":"`leading`"},{"kind":"text","text":", "},{"kind":"code","text":"`trailing`"},{"kind":"text","text":", "},{"kind":"code","text":"`horizontal`"},{"kind":"text","text":", "},{"kind":"code","text":"`vertical`"},{"kind":"text","text":" and "},{"kind":"code","text":"`all`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"all","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","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"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"pickerStyle","variant":"declaration","kind":64,"signatures":[{"name":"pickerStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the picker."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/pickerstyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the picker."}]},"type":{"type":"reference","name":"PickerStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationBackground","variant":"declaration","kind":64,"signatures":[{"name":"presentationBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a sheet presentation. Paints the entire sheet chrome\nincluding the drag-indicator zone and home-indicator safe-area inset, which\na regular "},{"kind":"code","text":"`background()`"},{"kind":"text","text":" modifier cannot reach."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI\ndocumentation](https://developer.apple.com/documentation/swiftui/view/presentationbackground(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationBackgroundInteraction","variant":"declaration","kind":64,"signatures":[{"name":"presentationBackgroundInteraction","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls interaction with the content behind a sheet."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.4+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationbackgroundinteraction(_:))."}]}]},"parameters":[{"name":"interaction","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background interaction behavior."}]},"type":{"type":"reference","name":"PresentationBackgroundInteractionType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationDetents","variant":"declaration","kind":64,"signatures":[{"name":"presentationDetents","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the available heights for a sheet presentation."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationdetents(_:selection:))."}]}]},"parameters":[{"name":"detents","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Array of detents the sheet can snap to."}]},"type":{"type":"array","elementType":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional settings for tracking the selected detent."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"onSelectionChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback fired when the user changes the active detent by dragging."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"detent","variant":"param","kind":32768,"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"selection","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The currently selected detent."}]},"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationDragIndicator","variant":"declaration","kind":64,"signatures":[{"name":"presentationDragIndicator","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of the drag indicator on a sheet."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationdragindicator(_:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility of the drag indicator."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"progressViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"progressViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the progress view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/progressviewstyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the progress view."}]},"type":{"type":"reference","name":"ProgressViewStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"refreshable","variant":"declaration","kind":64,"signatures":[{"name":"refreshable","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Marks a view as refreshable. Adds pull-to-refresh functionality."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/refreshable(action:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Async function to call when refresh is triggered."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"resizable","variant":"declaration","kind":64,"signatures":[{"name":"resizable","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the mode by which SwiftUI resizes an image to fit its space."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/image/resizable(capinsets:resizingmode:))."}]}]},"parameters":[{"name":"capInsets","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Inset values that indicate a portion of the image that SwiftUI doesnโ€™t resize."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"resizingMode","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The mode by which SwiftUI resizes the image."}]},"type":{"type":"union","types":[{"type":"literal","value":"stretch"},{"type":"literal","value":"tile"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"rotation3DEffect","variant":"declaration","kind":64,"signatures":[{"name":"rotation3DEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a 3D rotation transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/rotation3deffect(_:axis:anchor:anchorz:perspective:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The rotation parameters: "},{"kind":"code","text":"`angle`"},{"kind":"text","text":" (in degrees), "},{"kind":"code","text":"`axis`"},{"kind":"text","text":" (x, y, z), and "},{"kind":"code","text":"`perspective`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"angle","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"axis","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"z","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"perspective","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"rotationEffect","variant":"declaration","kind":64,"signatures":[{"name":"rotationEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies rotation transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/rotationeffect(_:anchor:))."}]}]},"parameters":[{"name":"angle","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Rotation angle in degrees."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"saturation","variant":"declaration","kind":64,"signatures":[{"name":"saturation","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the saturation of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/saturation(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Saturation multiplier (0 to infinity, 1 = normal)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scaleEffect","variant":"declaration","kind":64,"signatures":[{"name":"scaleEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies scaling transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scaleeffect(_:anchor:))."}]}]},"parameters":[{"name":"scale","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Uniform scale factor (1.0 = normal size), or an object with separate "},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":" scale factors."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollContentBackground","variant":"declaration","kind":64,"signatures":[{"name":"scrollContentBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the visibility of the background for scrollable views within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollcontentbackground(_:))."}]}]},"parameters":[{"name":"visible","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility of the background."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollDisabled","variant":"declaration","kind":64,"signatures":[{"name":"scrollDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables or enables scrolling in scrollable views."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolldisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether scrolling should be disabled (default: true)."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollDismissesKeyboard","variant":"declaration","kind":64,"signatures":[{"name":"scrollDismissesKeyboard","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls how the keyboard is dismissed when scrolling."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolldismisseskeyboard(_:))."}]}]},"parameters":[{"name":"mode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The keyboard dismiss mode."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"never"},{"type":"literal","value":"interactively"},{"type":"literal","value":"immediately"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollIndicators","variant":"declaration","kind":64,"signatures":[{"name":"scrollIndicators","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of scroll indicators for scrollable views.\nMirrors SwiftUI's "},{"kind":"code","text":"`scrollIndicators(_:axes:)`"},{"kind":"text","text":" modifier."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollindicators(_:axes:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Indicator visibility:\n- "},{"kind":"code","text":"`'automatic'`"},{"kind":"text","text":": platform-default behavior.\n- "},{"kind":"code","text":"`'visible'`"},{"kind":"text","text":": prefer showing indicators (may still be hidden by the system).\n- "},{"kind":"code","text":"`'hidden'`"},{"kind":"text","text":": prefer hiding indicators (may still be shown by the system).\n- "},{"kind":"code","text":"`'never'`"},{"kind":"text","text":": never show indicators."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"},{"type":"literal","value":"never"}]}},{"name":"axes","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Axes to apply the visibility to. Defaults to "},{"kind":"code","text":"`'both'`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"both"}]},"defaultValue":"'both'"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollPosition","variant":"declaration","kind":64,"signatures":[{"name":"scrollPosition","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Binds the leading scroll target of a scrollable container to an observable native state.\n\nReading "},{"kind":"code","text":"`state.value`"},{"kind":"text","text":" returns the id of the leading scroll target. Writing to it scrolls\nthe container to the matching view. Pair with "},{"kind":"code","text":"`scrollTargetLayout()`"},{"kind":"text","text":" on the content\ncontainer and "},{"kind":"code","text":"`id()`"},{"kind":"text","text":" on each target. Works on "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":", "},{"kind":"code","text":"`LazyVStack`"},{"kind":"text","text":", "},{"kind":"code","text":"`LazyHStack`"},{"kind":"text","text":",\nand other scrollable containers.\n\nOn iOS below 17.0, the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 14.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollposition(id:anchor:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst activeID = useNativeState(null);\n\n console.log('leading target:', newID),\n }),\n ]}>\n \n {items.map((item) => (\n {item.text}\n ))}\n \n
\n```"}]}]},"parameters":[{"name":"state","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An "},{"kind":"code","text":"`ObservableState`"},{"kind":"text","text":" created with "},{"kind":"code","text":"`useNativeState`"},{"kind":"text","text":"."}]},"type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}],"name":"ObservableState","package":"@expo/ui"}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"anchor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Anchor used to pick which view drives the binding and to align\n programmatic scrolls. Maps to the "},{"kind":"code","text":"`anchor:`"},{"kind":"text","text":" parameter of SwiftUI's "},{"kind":"code","text":"`.scrollPosition(id:anchor:)`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"UnitPointValue","package":"@expo/ui"}},{"name":"onChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Fires on the JS thread whenever the leading scroll target changes."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"id","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}],"type":{"type":"intrinsic","name":"void"}}]}}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollTargetBehavior","variant":"declaration","kind":64,"signatures":[{"name":"scrollTargetBehavior","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the scroll snapping behavior for scrollable views.\nUse with "},{"kind":"code","text":"`scrollTargetLayout`"},{"kind":"text","text":" on the content container."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolltargetbehavior(_:))."}]}]},"parameters":[{"name":"behavior","variant":"param","kind":32768,"comment":{"summary":[{"kind":"code","text":"`'paging'`"},{"kind":"text","text":" for container-aligned snapping, "},{"kind":"code","text":"`'viewAligned'`"},{"kind":"text","text":" for view-aligned snapping."}]},"type":{"type":"union","types":[{"type":"literal","value":"paging"},{"type":"literal","value":"viewAligned"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollTargetLayout","variant":"declaration","kind":64,"signatures":[{"name":"scrollTargetLayout","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Configures a layout container as a scroll target layout for view-aligned snapping.\nApply to "},{"kind":"code","text":"`VStack`"},{"kind":"text","text":" or "},{"kind":"code","text":"`HStack`"},{"kind":"text","text":" inside a "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolltargetlayout(isenabled:))."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"shadow","variant":"declaration","kind":64,"signatures":[{"name":"shadow","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a shadow to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/shadow(color:radius:x:y:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The shadow parameters: "},{"kind":"code","text":"`radius`"},{"kind":"text","text":", offset ("},{"kind":"code","text":"`x`"},{"kind":"text","text":", "},{"kind":"code","text":"`y`"},{"kind":"text","text":") and "},{"kind":"code","text":"`color`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"radius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"strikethrough","variant":"declaration","kind":64,"signatures":[{"name":"strikethrough","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a strikethrough to the text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/strikethrough(_:color:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Controls whether the strikethrough is visible ("},{"kind":"code","text":"`true`"},{"kind":"text","text":" to show, "},{"kind":"code","text":"`false`"},{"kind":"text","text":" to hide)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"isActive","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"pattern","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/index.ts","qualifiedName":"LinePattern"},"name":"LinePattern","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"submitLabel","variant":"declaration","kind":64,"signatures":[{"name":"submitLabel","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the label to display in the keyboard's return key. For example, "},{"kind":"code","text":"`'done'`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified submit label."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 15+"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]}]},"parameters":[{"name":"submitLabel","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The label to display in the keyboard's return key."}]},"type":{"type":"union","types":[{"type":"literal","value":"join"},{"type":"literal","value":"search"},{"type":"literal","value":"done"},{"type":"literal","value":"continue"},{"type":"literal","value":"go"},{"type":"literal","value":"next"},{"type":"literal","value":"return"},{"type":"literal","value":"route"},{"type":"literal","value":"send"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"symbolEffect","variant":"declaration","kind":64,"signatures":[{"name":"symbolEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an SF Symbol effect to a view."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/symbolEffect(_:options:value:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst trigger = useNativeState(0);\n\n```"}]}]},"parameters":[{"name":"effect","variant":"param","kind":32768,"type":{"type":"reference","name":"SymbolEffect","package":"@expo/ui"}},{"name":"args","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"isActive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indefinite effects: runs while "},{"kind":"code","text":"`state.value === true`"},{"kind":"text","text":". Default active when omitted."}]},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"ObservableState","package":"@expo/ui"}},{"name":"options","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"SymbolEffectOptions","package":"@expo/ui"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Discrete effects: the effect fires once each time this value changes."}]},"type":{"type":"reference","typeArguments":[{"type":"reference","name":"DiscreteSymbolEffectValue","package":"@expo/ui"}],"name":"ObservableState","package":"@expo/ui"}}]}},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tabViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"tabViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for a "},{"kind":"code","text":"`TabView`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tabviewstyle(_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"TabViewStyleConfig","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tag","variant":"declaration","kind":64,"signatures":[{"name":"tag","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a tag on a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tag(_:includeoptional:))."}]}]},"parameters":[{"name":"tag","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The tag to set on the view."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textCase","variant":"declaration","kind":64,"signatures":[{"name":"textCase","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a transform for the case of the text contained in this view when displayed."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\"lowercase\""}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textcase(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"literal","value":"lowercase"},{"type":"literal","value":"uppercase"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textContentType","variant":"declaration","kind":64,"signatures":[{"name":"textContentType","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the text content type for input text, which the system uses to offer\nsuggestions (like autofill) while the user enters text."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 13.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textcontenttype(_:)-ufdv)."}]}]},"parameters":[{"name":"textContentType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The semantic meaning of the text input area."}]},"type":{"type":"union","types":[{"type":"literal","value":"URL"},{"type":"literal","value":"namePrefix"},{"type":"literal","value":"name"},{"type":"literal","value":"nameSuffix"},{"type":"literal","value":"givenName"},{"type":"literal","value":"middleName"},{"type":"literal","value":"familyName"},{"type":"literal","value":"nickname"},{"type":"literal","value":"organizationName"},{"type":"literal","value":"jobTitle"},{"type":"literal","value":"location"},{"type":"literal","value":"fullStreetAddress"},{"type":"literal","value":"streetAddressLine1"},{"type":"literal","value":"streetAddressLine2"},{"type":"literal","value":"addressCity"},{"type":"literal","value":"addressCityAndState"},{"type":"literal","value":"addressState"},{"type":"literal","value":"postalCode"},{"type":"literal","value":"sublocality"},{"type":"literal","value":"countryName"},{"type":"literal","value":"username"},{"type":"literal","value":"password"},{"type":"literal","value":"newPassword"},{"type":"literal","value":"oneTimeCode"},{"type":"literal","value":"emailAddress"},{"type":"literal","value":"telephoneNumber"},{"type":"literal","value":"cellularEID"},{"type":"literal","value":"cellularIMEI"},{"type":"literal","value":"creditCardNumber"},{"type":"literal","value":"creditCardExpiration"},{"type":"literal","value":"creditCardExpirationMonth"},{"type":"literal","value":"creditCardExpirationYear"},{"type":"literal","value":"creditCardSecurityCode"},{"type":"literal","value":"creditCardType"},{"type":"literal","value":"creditCardName"},{"type":"literal","value":"creditCardGivenName"},{"type":"literal","value":"creditCardMiddleName"},{"type":"literal","value":"creditCardFamilyName"},{"type":"literal","value":"birthdate"},{"type":"literal","value":"birthdateDay"},{"type":"literal","value":"birthdateMonth"},{"type":"literal","value":"birthdateYear"},{"type":"literal","value":"dateTime"},{"type":"literal","value":"flightNumber"},{"type":"literal","value":"shipmentTrackingNumber"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textFieldStyle","variant":"declaration","kind":64,"signatures":[{"name":"textFieldStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the text field style for text field views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textfieldstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The text field style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"plain"},{"type":"literal","value":"roundedBorder"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textInputAutocapitalization","variant":"declaration","kind":64,"signatures":[{"name":"textInputAutocapitalization","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets how often the shift key in the keyboard is automatically enabled."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textinputautocapitalization(_:))."}]}]},"parameters":[{"name":"autocapitalization","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The autocapitalization behavior."}]},"type":{"type":"union","types":[{"type":"literal","value":"never"},{"type":"literal","value":"words"},{"type":"literal","value":"sentences"},{"type":"literal","value":"characters"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textSelection","variant":"declaration","kind":64,"signatures":[{"name":"textSelection","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls whether people can select text within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textselection(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Enable selection"}]},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tint","variant":"declaration","kind":64,"signatures":[{"name":"tint","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the tint color of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tint(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The tint color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"toggleStyle","variant":"declaration","kind":64,"signatures":[{"name":"toggleStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for toggles within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/togglestyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The toggle style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"switch"},{"type":"literal","value":"button"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"truncationMode","variant":"declaration","kind":64,"signatures":[{"name":"truncationMode","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the truncation mode for lines of text that are too long to fit in the available space."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/truncationmode(_:))."}]}]},"parameters":[{"name":"mode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The truncation mode that specifies where to truncate the text within the text view, if needed.\nYou can truncate at the beginning, middle, or end of the text view."}]},"type":{"type":"union","types":[{"type":"literal","value":"head"},{"type":"literal","value":"middle"},{"type":"literal","value":"tail"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"underline","variant":"declaration","kind":64,"signatures":[{"name":"underline","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an underline to the text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/underline(_:pattern:color:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Controls whether the underline is visible ("},{"kind":"code","text":"`true`"},{"kind":"text","text":" to show, "},{"kind":"code","text":"`false`"},{"kind":"text","text":" to hide)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"isActive","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"pattern","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/index.ts","qualifiedName":"LinePattern"},"name":"LinePattern","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"useScrollGeometryChange","variant":"declaration","kind":64,"signatures":[{"name":"useScrollGeometryChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fires when the scroll geometry changes โ€” i.e., on every scroll update and\non container/content size changes. Use to drive continuous progress UI\nsuch as page indicators, parallax, or fractional offsets.\n\nIf the callback is marked with the "},{"kind":"code","text":"`'worklet'`"},{"kind":"text","text":" directive, it runs\nsynchronously on the UI thread (no JS-thread round-trip); otherwise it is\ndelivered asynchronously as a regular JS event. Both paths share the same\nnative modifier โ€” the worklet variant is automatically wrapped in a\n"},{"kind":"code","text":"`WorkletCallback`"},{"kind":"text","text":" shared object whose lifetime is managed by the hook.\n\nThis is a hook because the worklet path requires a stable shared-object\nreference across renders. Call it at the top of your component, then\ninclude the returned modifier in your "},{"kind":"code","text":"`modifiers`"},{"kind":"text","text":" array.\n\nApply to a SwiftUI "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":" (and other scrollable views). On iOS below\n18.0 the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onscrollgeometrychange(for:of:_:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst geometryModifier = useScrollGeometryChange((g) => {\n 'worklet';\n progress.value = g.contentOffsetX / g.containerWidth;\n});\n\n\n```"}]}]},"parameters":[{"name":"callback","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"geometry","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollGeometry"},"name":"ScrollGeometry","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"union","types":[{"type":"reference","name":"ModifierConfig","package":"@expo/ui"},{"type":"literal","value":null}]}}]},{"name":"widgetAccentedRenderingMode","variant":"declaration","kind":64,"signatures":[{"name":"widgetAccentedRenderingMode","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the how to render an Image when using the WidgetKit/WidgetRenderingMode/accented mode."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/image/widgetaccentedrenderingmode(_:))."}]}]},"parameters":[{"name":"renderingMode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A constant describing how the Image should be rendered."}]},"type":{"type":"union","types":[{"type":"literal","value":"fullColor"},{"type":"literal","value":"accented"},{"type":"literal","value":"desaturated"},{"type":"literal","value":"accentedDesaturated"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"widgetURL","variant":"declaration","kind":64,"signatures":[{"name":"widgetURL","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the URL to open in the containing app when the user clicks the widget.\nWidgets support one widgetURL modifier in their view hierarchy. If multiple views have widgetURL modifiers, the behavior is undefined."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/widgetURL(_:))."}]}]},"parameters":[{"name":"url","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The URL to open in the containing app."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"zIndex","variant":"declaration","kind":64,"signatures":[{"name":"zIndex","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the z-index (display order) of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/zindex(_:))."}]}]},"parameters":[{"name":"index","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The z-index value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]}],"packageName":"@expo/ui"} \ No newline at end of file diff --git a/docs/public/static/data/v56.0.0/expo-ui/swift-ui/modifiers.json b/docs/public/static/data/v56.0.0/expo-ui/swift-ui/modifiers.json index f112d4922109bf..78136474e66e5a 100644 --- a/docs/public/static/data/v56.0.0/expo-ui/swift-ui/modifiers.json +++ b/docs/public/static/data/v56.0.0/expo-ui/swift-ui/modifiers.json @@ -1 +1 @@ -{"schemaVersion":"2.0","name":"expo-ui/swift-ui/modifiers","variant":"project","kind":1,"children":[{"name":"ModifierConfig","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Base interface for all view modifiers.\nAll modifiers must have a type field and can include arbitrary parameters."}]},"children":[{"name":"$type","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"eventListener","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"args","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"any"}}]},{"name":"ChainableAnimationType","variant":"declaration","kind":2097152,"children":[{"name":"[VALUE_SYMBOL]","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/animation/types.ts","qualifiedName":"AnimationObject"},"name":"AnimationObject","package":"@expo/ui"}}]}}},{"name":"delay","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Adds a delay before the animation starts (in seconds)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"delay","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}}},{"name":"repeat","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Repeats the animation the given number of times."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"autoreverses","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"repeatCount","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}}}]},{"name":"Color","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/types.ts","qualifiedName":"NamedColor"},"name":"NamedColor","package":"@expo/ui"}]}},{"name":"ContainerBackgroundPlacement","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"widget"},{"type":"literal","value":"navigation"},{"type":"literal","value":"navigationSplitView"}]}},{"name":"DatePickerStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"compact"},{"type":"literal","value":"graphical"},{"type":"literal","value":"wheel"}]}},{"name":"DiscreteSymbolEffectValue","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Equatable primitive accepted as a discrete effect trigger."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"boolean"}]}},{"name":"DynamicTypeSizeValue","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A standard size for Dynamic Type, from "},{"kind":"code","text":"`xSmall`"},{"kind":"text","text":" through the five\n"},{"kind":"code","text":"`accessibility`"},{"kind":"text","text":" sizes. Mirrors SwiftUI's "},{"kind":"code","text":"`DynamicTypeSize`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"xSmall"},{"type":"literal","value":"small"},{"type":"literal","value":"medium"},{"type":"literal","value":"large"},{"type":"literal","value":"xLarge"},{"type":"literal","value":"xxLarge"},{"type":"literal","value":"xxxLarge"},{"type":"literal","value":"accessibility1"},{"type":"literal","value":"accessibility2"},{"type":"literal","value":"accessibility3"},{"type":"literal","value":"accessibility4"},{"type":"literal","value":"accessibility5"}]}},{"name":"EnvironmentConfig","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"editMode"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"active"},{"type":"literal","value":"inactive"},{"type":"literal","value":"transient"}]}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"colorScheme"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"light"},{"type":"literal","value":"dark"}]}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"locale"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"timeZone"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}}]}},{"name":"GaugeStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"circular"},{"type":"literal","value":"circularCapacity"},{"type":"literal","value":"linear"},{"type":"literal","value":"linearCapacity"}]}},{"name":"GlobalEvent","variant":"declaration","kind":2097152,"children":[{"name":"onGlobalEvent","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"event","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"nativeEvent","variant":"declaration","kind":1024,"type":{"type":"reference","name":"GlobalEventPayload","package":"@expo/ui"}}]}}}],"type":{"type":"intrinsic","name":"void"}}]}}}]},{"name":"GlobalEventPayload","variant":"declaration","kind":2097152,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"eventName","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"}}]}}},{"name":"IndexViewStyleConfig","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Configuration for the "},{"kind":"code","text":"`indexViewStyle`"},{"kind":"text","text":" modifier."}]},"children":[{"name":"backgroundDisplayMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Translucent background behind the page indicator dots. Useful when the\ndots sit on top of dark or busy content."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'automatic'"}]}]},"type":{"type":"reference","name":"PageIndexBackgroundDisplayMode","package":"@expo/ui"}}]},{"name":"InterpolatingSpringAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"bounce","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Extra bounce to apply to the spring animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"damping","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The damping applied to the spring."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"initialVelocity","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The initial velocity of the animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"mass","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The mass attached to the spring."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"stiffness","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The stiffness of the spring."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"ListStyle","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"plain"},{"type":"literal","value":"inset"},{"type":"literal","value":"insetGrouped"},{"type":"literal","value":"grouped"},{"type":"literal","value":"sidebar"}]}},{"name":"ObservableState","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Observable state shared between JavaScript and native views (Jetpack Compose\non Android and SwiftUI on iOS)."}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/SharedObject.ts","qualifiedName":"SharedObject"},"name":"SharedObject","package":"expo-modules-core"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"onChange","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A single listener invoked on the native UI runtime whenever the value changes\n(after iOS "},{"kind":"code","text":"`didSet`"},{"kind":"text","text":" and Android's setter). Assigning replaces the previous\nlistener; assign "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to clear. The initial value does not fire "},{"kind":"code","text":"`onChange`"},{"kind":"text","text":".\n\nThe callback must be a worklet so it can run synchronously on the UI thread.\nAttach it inside "},{"kind":"code","text":"`useEffect`"},{"kind":"text","text":" and clear it in the cleanup so the listener\nlifecycle matches the component lifecycle."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst state = useNativeState(0);\n\nuseEffect(() => {\n state.onChange = (value) => {\n 'worklet';\n console.log('changed to', value);\n };\n}, []);\n```"}]}]},"type":{"type":"union","types":[{"type":"indexedAccess","indexType":{"type":"literal","value":"listener"},"objectType":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"listener","variant":"declaration","kind":2048,"signatures":[{"name":"listener","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"intrinsic","name":"void"}}]}]}}},{"type":"literal","value":null}]}},{"name":"value","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The current value.\n\nWrites from a UI worklet are synchronous and immediately readable. Writes\nfrom the JS thread are scheduled to the UI thread asynchronously, the new value is not readable until the update has been\napplied. Prefer writing from a worklet when you need synchronous updates"}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}},{"name":"get","variant":"declaration","kind":2048,"signatures":[{"name":"get","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Reads the current value. A React Compiler compliant alternative to reading "},{"kind":"code","text":"`.value`"}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}]},{"name":"set","variant":"declaration","kind":2048,"signatures":[{"name":"set","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Writes a new value. A React Compiler-compliant alternative to assigning "},{"kind":"code","text":"`.value`"}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"intrinsic","name":"void"}}]}]}}]}},{"name":"PageIndexBackgroundDisplayMode","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"always"},{"type":"literal","value":"never"},{"type":"literal","value":"interactive"}]}},{"name":"PageIndexDisplayMode","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"always"},{"type":"literal","value":"never"}]}},{"name":"PickerStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"inline"},{"type":"literal","value":"menu"},{"type":"literal","value":"navigationLink"},{"type":"literal","value":"palette"},{"type":"literal","value":"segmented"},{"type":"literal","value":"wheel"}]}},{"name":"PresentationBackgroundInteractionType","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Presentation background interaction type."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"enabled"},{"type":"literal","value":"disabled"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"detent","variant":"declaration","kind":1024,"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"enabledUpThrough"}}]}}]}},{"name":"PresentationDetent","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Presentation detent type for controlling sheet heights.\n- "},{"kind":"code","text":"`'medium'`"},{"kind":"text","text":": System medium height (approximately half screen)\n- "},{"kind":"code","text":"`'large'`"},{"kind":"text","text":": System large height (full screen)\n- "},{"kind":"code","text":"`{ fraction: number }`"},{"kind":"text","text":": Fraction of screen height (0-1, for example, 0.4 equals to 40% of screen)\n- "},{"kind":"code","text":"`{ height: number }`"},{"kind":"text","text":": Fixed height in points"}]},"type":{"type":"union","types":[{"type":"literal","value":"medium"},{"type":"literal","value":"large"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"fraction","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}]}},{"name":"ProgressViewStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"linear"},{"type":"literal","value":"circular"}]}},{"name":"Shape","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.roundedRectangle","package":"@expo/ui","qualifiedName":"__object.roundedRectangle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.capsule","package":"@expo/ui","qualifiedName":"__object.capsule"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.rectangle","package":"@expo/ui","qualifiedName":"__object.rectangle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.ellipse","package":"@expo/ui","qualifiedName":"__object.ellipse"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.circle","package":"@expo/ui","qualifiedName":"__object.circle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.containerRelativeShape","package":"@expo/ui","qualifiedName":"__object.containerRelativeShape"}}],"name":"ReturnType","package":"typescript"}]}},{"name":"SpringAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"blendDuration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The duration over which to blend between animations (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"bounce","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Extra bounce to apply to the spring animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"dampingFraction","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The amount of damping applied to the spring's motion."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"response","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The spring's response time (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"SymbolEffect","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"AppearSymbolEffect"},"name":"AppearSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"BounceSymbolEffect"},"name":"BounceSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"BreatheSymbolEffect"},"name":"BreatheSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DisappearSymbolEffect"},"name":"DisappearSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DrawOffSymbolEffect"},"name":"DrawOffSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DrawOnSymbolEffect"},"name":"DrawOnSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"PulseSymbolEffect"},"name":"PulseSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"RotateSymbolEffect"},"name":"RotateSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"ScaleSymbolEffect"},"name":"ScaleSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"VariableColorSymbolEffect"},"name":"VariableColorSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"WiggleSymbolEffect"},"name":"WiggleSymbolEffect","package":"@expo/ui"}]}},{"name":"SymbolEffectOptions","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Animation options for a symbol effect."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [Apple documentation](https://developer.apple.com/documentation/symbols/symboleffectoptions)."}]}]},"children":[{"name":"repeat","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"How the effect repeats. Omit for the effect's natural cadence.\n- "},{"kind":"code","text":"`'nonRepeating'`"},{"kind":"text","text":" โ€” play exactly once.\n- "},{"kind":"code","text":"`'continuous'`"},{"kind":"text","text":" โ€” smooth, indefinite repetition (iOS 18+).\n- "},{"kind":"code","text":"`{ count?, delay? }`"},{"kind":"text","text":" โ€” periodic repetition with optional count and delay in seconds (iOS 18+)."}]},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"nonRepeating"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"count","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"delay","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}]}},{"name":"speed","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Animation speed multiplier (1.0 = default)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"TabViewStyleConfig","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Configuration for the "},{"kind":"code","text":"`tabViewStyle`"},{"kind":"text","text":" modifier.\n\n - "},{"kind":"code","text":"`'page'`"},{"kind":"text","text":" โ€” swipeable horizontal pager with optional dot indicators.\n - "},{"kind":"code","text":"`'automatic'`"},{"kind":"text","text":" โ€” SwiftUI's default tab-bar style.\n - "},{"kind":"code","text":"`'sidebarAdaptable'`"},{"kind":"text","text":" โ€” iOS 18+. Sidebar on iPad/Mac, bottom bar on\n iPhone."}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"indexDisplayMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Visibility of the page indicator dots. Only meaningful for the page style."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'automatic'"}]}]},"type":{"type":"reference","name":"PageIndexDisplayMode","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"page"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"automatic"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"sidebarAdaptable"}}]}}]}},{"name":"TimingAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"UnitPointValue","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"zero"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"top"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"leading"},{"type":"literal","value":"center"},{"type":"literal","value":"trailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottom"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"Animation","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"Built-in animation presets for the "},{"kind":"code","text":"`animation`"},{"kind":"text","text":" modifier.\nPresets:\n- Timing presets ("},{"kind":"code","text":"`easeInOut`"},{"kind":"text","text":", "},{"kind":"code","text":"`easeIn`"},{"kind":"text","text":", "},{"kind":"code","text":"`easeOut`"},{"kind":"text","text":", "},{"kind":"code","text":"`linear`"},{"kind":"text","text":") accept\n["},{"kind":"code","text":"`TimingAnimationParams`"},{"kind":"text","text":"](#timinganimationparams).\n- "},{"kind":"code","text":"`spring`"},{"kind":"text","text":" accepts ["},{"kind":"code","text":"`SpringAnimationParams`"},{"kind":"text","text":"](#springanimationparams).\n- "},{"kind":"code","text":"`interpolatingSpring`"},{"kind":"text","text":" accepts\n["},{"kind":"code","text":"`InterpolatingSpringAnimationParams`"},{"kind":"text","text":"](#interpolatingspringanimationparams).\n- Chaining returns ["},{"kind":"code","text":"`ChainableAnimationType`"},{"kind":"text","text":"](#chainableanimationtype)."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Host, VStack } from '@expo/ui/swift-ui';\nimport { animation, Animation } from '@expo/ui/swift-ui/modifiers';\n\nfunction Example() {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n \n \n //...\n \n \n );\n}\n```"}]},{"tag":"@hideType","content":[]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"},"defaultValue":"..."},{"name":"easeIn","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"easeInOut","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"easeOut","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"interpolatingSpring","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"InterpolatingSpringAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"linear","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"spring","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"SpringAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."}]}},"defaultValue":"..."},{"name":"shapes","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"Shape builders for modifiers that accept shapes, such as "},{"kind":"code","text":"`background`"},{"kind":"text","text":" and "},{"kind":"code","text":"`containerShape`"},{"kind":"text","text":".\n\nShapes: "},{"kind":"code","text":"`roundedRectangle`"},{"kind":"text","text":", "},{"kind":"code","text":"`capsule`"},{"kind":"text","text":", "},{"kind":"code","text":"`rectangle`"},{"kind":"text","text":", "},{"kind":"code","text":"`ellipse`"},{"kind":"text","text":", "},{"kind":"code","text":"`circle`"},{"kind":"text","text":", "},{"kind":"code","text":"`containerRelativeShape`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { background, shapes } from '@expo/ui/swift-ui/modifiers';\nimport { Text, Host } from '@expo/ui/swift-ui';\n\nfunction Example() {\n return (\n \n \n Hello, world!\n \n \n );\n}\n```"}]},{"tag":"@hideType","content":[]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"capsule","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"}]}}]}}}],"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.roundedCornerStyle"},{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'capsule'"}]}}}]}},"defaultValue":"..."},{"name":"circle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'circle'"}]}}}]}},"defaultValue":"..."},{"name":"containerRelativeShape","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'containerRelativeShape'"}]}}}]}},"defaultValue":"..."},{"name":"ellipse","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'ellipse'"}]}}}]}},"defaultValue":"..."},{"name":"rectangle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'rectangle'"}]}}}]}},"defaultValue":"..."},{"name":"roundedRectangle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"cornerSize","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"}]}}]}}}],"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.cornerRadius"},{"name":"cornerSize","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.cornerSize"},{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.roundedCornerStyle"},{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'roundedRectangle'"}]}}}]}},"defaultValue":"..."}]}},"defaultValue":"..."},{"name":"accessibilityHidden","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityHidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Marks the view as decoratively-named so VoiceOver and other assistive\ntechnologies skip it during element traversal. Useful for hero icons or\npresentational imagery that's already described by adjacent text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityhidden(_:))."}]}]},"parameters":[{"name":"hidden","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be hidden from accessibility. Defaults to "},{"kind":"code","text":"`true`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityHint","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityHint","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility hint for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityhint(_:))."}]}]},"parameters":[{"name":"hint","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility hint."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityIdentifier","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityIdentifier","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets an accessibility identifier for the view.\n\nUnlike "},{"kind":"code","text":"`accessibilityLabel`"},{"kind":"text","text":", this value is for UI testing and is not visible\nto the user. UI testing tools such as XCUITest read it to locate the view, so\nprefer a stable, machine-readable identifier here."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityidentifier(_:))."}]}]},"parameters":[{"name":"identifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility identifier used for UI testing."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityInputLabels","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityInputLabels","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets alternative spoken phrases that Voice Control uses to refer to the view.\nEach label is read as a "},{"kind":"code","text":"`Text`"},{"kind":"text","text":" element on iOS. For example, an \"End\" button\nmight offer \"Hang up\" so users can trigger it by saying that phrase."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityinputlabels(_:))."}]}]},"parameters":[{"name":"inputLabels","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The spoken phrases that select the view."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityLabel","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityLabel","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility label for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilitylabel(_:))."}]}]},"parameters":[{"name":"label","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility label."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityValue","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityValue","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility value for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityvalue(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility value."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"allowsTightening","variant":"declaration","kind":64,"signatures":[{"name":"allowsTightening","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets whether text in this view can compress the space between characters when necessary to fit text in a line"}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/allowstightening(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"animation","variant":"declaration","kind":64,"signatures":[{"name":"animation","variant":"signature","kind":4096,"parameters":[{"name":"animationObject","variant":"param","kind":32768,"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}},{"name":"animatedValue","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"boolean"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"aspectRatio","variant":"declaration","kind":64,"signatures":[{"name":"aspectRatio","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets aspect ratio constraint."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/aspectratio(_:contentmode:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Optional width/height aspect ratio and content mode."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"contentMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"fill"},{"type":"literal","value":"fit"}]}},{"name":"ratio","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"autocorrectionDisabled","variant":"declaration","kind":64,"signatures":[{"name":"autocorrectionDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables autocorrection for text input views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/autocorrectiondisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether autocorrection is disabled. Defaults to "},{"kind":"code","text":"`true`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"background","variant":"declaration","kind":64,"signatures":[{"name":"background","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/background(_:alignment:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"shape","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional shape to clip the background. If not provided, the background will fill the entire view."}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"backgroundOverlay","variant":"declaration","kind":64,"signatures":[{"name":"backgroundOverlay","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a background behind the view."}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Background color and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"badge","variant":"declaration","kind":64,"signatures":[{"name":"badge","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Generates a badge for the view from a localized string key."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/badge(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Text view to display as a badge. Set the value to nil to hide the badge."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"badgeProminence","variant":"declaration","kind":64,"signatures":[{"name":"badgeProminence","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The prominence to apply to badges associated with this environment."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/badgeprominence(_:))."}]}]},"parameters":[{"name":"badgeType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Select the type of badge"}]},"type":{"type":"union","types":[{"type":"literal","value":"standard"},{"type":"literal","value":"increased"},{"type":"literal","value":"decreased"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"blur","variant":"declaration","kind":64,"signatures":[{"name":"blur","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies blur to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/blur(radius:opaque:))."}]}]},"parameters":[{"name":"radius","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The blur radius."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"bold","variant":"declaration","kind":64,"signatures":[{"name":"bold","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes text bold.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", it works on all iOS/tvOS versions. When used on regular views, it requires iOS 16.0+/tvOS 16.0+."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/bold())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"border","variant":"declaration","kind":64,"signatures":[{"name":"border","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a border to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/border(_:width:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The border parameters. Color and width."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"width","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"brightness","variant":"declaration","kind":64,"signatures":[{"name":"brightness","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the brightness of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/brightness(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Brightness adjustment (-1 to 1)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"buttonBorderShape","variant":"declaration","kind":64,"signatures":[{"name":"buttonBorderShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the border shape used by buttons within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/buttonbordershape(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The button border shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"circle"},{"type":"literal","value":"automatic"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius, only used with "},{"kind":"code","text":"`'roundedRectangle'`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"buttonStyle","variant":"declaration","kind":64,"signatures":[{"name":"buttonStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the button style for button views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/buttonstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The button style. "},{"kind":"code","text":"`'glass'`"},{"kind":"text","text":" and "},{"kind":"code","text":"`'glassProminent'`"},{"kind":"text","text":" are available on iOS 26+ and tvOS 26+ only."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"bordered"},{"type":"literal","value":"borderedProminent"},{"type":"literal","value":"borderless"},{"type":"literal","value":"glass"},{"type":"literal","value":"glassProminent"},{"type":"literal","value":"plain"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"clipped","variant":"declaration","kind":64,"signatures":[{"name":"clipped","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clips content to bounds."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/clipped(antialiased:))."}]}]},"parameters":[{"name":"clipped","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to clip content."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"clipShape","variant":"declaration","kind":64,"signatures":[{"name":"clipShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clips the view to a specific shape."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/clipshape(_:style:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The clipping shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius for rounded rectangle (default: 8)"}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"colorInvert","variant":"declaration","kind":64,"signatures":[{"name":"colorInvert","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Inverts the colors of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/colorinvert())."}]}]},"parameters":[{"name":"inverted","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to invert colors."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerBackground","variant":"declaration","kind":64,"signatures":[{"name":"containerBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the container background of the enclosing container using a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/containerbackground(_:for:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The color to set as the background of the container."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"container","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of container to apply the background to."}]},"type":{"type":"reference","name":"ContainerBackgroundPlacement","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerRelativeFrame","variant":"declaration","kind":64,"signatures":[{"name":"containerRelativeFrame","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Positions this view within an invisible frame with a size relative to the nearest container."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/containerRelativeFrame(_:alignment:))."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The content relative frame parameters: "},{"kind":"code","text":"`axes`"},{"kind":"text","text":", "},{"kind":"code","text":"`count`"},{"kind":"text","text":", "},{"kind":"code","text":"`span`"},{"kind":"text","text":", "},{"kind":"code","text":"`spacing`"},{"kind":"text","text":" and "},{"kind":"code","text":"`alignment`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"axes","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"both"}]}},{"name":"count","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"spacing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"span","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerShape","variant":"declaration","kind":64,"signatures":[{"name":"containerShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the container shape for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/containershape(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A shape configuration from the shapes API"}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contentShape","variant":"declaration","kind":64,"signatures":[{"name":"contentShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Defines the content shape for hit-testing purposes.\n\nThis modifier is essential for making entire view areas (including "},{"kind":"code","text":"`Spacer`"},{"kind":"text","text":" or empty space)\ninteractive. Without it, only visible elements like "},{"kind":"code","text":"`Text`"},{"kind":"text","text":" or "},{"kind":"code","text":"`Image`"},{"kind":"text","text":" respond to tap gestures."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { HStack, List, Section, Spacer, Text } from \"@expo/ui/swift-ui\";\nimport { contentShape, onTapGesture } from \"@expo/ui/swift-ui/modifiers\";\nimport { shapes } from \"@expo/ui/swift-ui/modifiers\";\n\nfunction InteractiveRow() {\n return (\n \n
\n console.log(\"Row tapped!\"))\n ]}\n >\n Label\n \n Value\n \n
\n
\n );\n}\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contentshape(_:eofill:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A shape configuration from the shapes API (rectangle, circle, capsule, ellipse, roundedRectangle)."}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contentTransition","variant":"declaration","kind":64,"signatures":[{"name":"contentTransition","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the content transition type for a view.\nUseful for animating changes in text content, especially numeric text.\nUse with the ["},{"kind":"code","text":"`animation`"},{"kind":"text","text":"](#animationanimationobject-animatedvalue) modifier to animate the transition when the content changes."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n {count.toString()}\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contenttransition(_:))."}]}]},"parameters":[{"name":"transitionType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of content transition."}]},"type":{"type":"union","types":[{"type":"literal","value":"opacity"},{"type":"literal","value":"identity"},{"type":"literal","value":"numericText"},{"type":"literal","value":"interpolate"}]}},{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional parameters."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"countsDown","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the numeric text counts down."}]},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contrast","variant":"declaration","kind":64,"signatures":[{"name":"contrast","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the contrast of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contrast(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Contrast multiplier (0 to infinity, 1 = normal)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"controlSize","variant":"declaration","kind":64,"signatures":[{"name":"controlSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the size of controls within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/controlsize(_:))."}]}]},"parameters":[{"name":"size","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The control size."}]},"type":{"type":"union","types":[{"type":"literal","value":"small"},{"type":"literal","value":"mini"},{"type":"literal","value":"regular"},{"type":"literal","value":"large"},{"type":"literal","value":"extraLarge"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"cornerRadius","variant":"declaration","kind":64,"signatures":[{"name":"cornerRadius","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies corner radius to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/cornerradius(_:antialiased:))."}]}]},"parameters":[{"name":"radius","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The corner radius value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createModifier","variant":"declaration","kind":64,"signatures":[{"name":"createModifier","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Factory function to create modifier configuration objects.\nThis is used by all built-in modifier functions and can be used by 3rd party libraries to create custom modifiers."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A "},{"kind":"code","text":"`ModifierConfig`"},{"kind":"text","text":" object that can be passed in the "},{"kind":"code","text":"`modifiers`"},{"kind":"text","text":" prop array."}]},{"tag":"@example","content":[{"kind":"code","text":"```ts\n// In a 3rd party package\nimport { createModifier } from '@expo/ui/swift-ui/modifiers';\n\nexport const blurEffect = (params: { radius: number; style?: string }) =>\n createModifier('blurEffect', params);\n```"}]}]},"parameters":[{"name":"type","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The modifier type string that maps to a registered native modifier."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Additional parameters to pass to the modifier."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createModifierWithEventListener","variant":"declaration","kind":64,"signatures":[{"name":"createModifierWithEventListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Creates a modifier with an event listener."}]},"parameters":[{"name":"type","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}},{"name":"eventListener","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"args","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"params","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createViewModifierEventListener","variant":"declaration","kind":64,"signatures":[{"name":"createViewModifierEventListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Create an event listener for a view modifier."}]},"parameters":[{"name":"modifiers","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An array of modifier configs to extract event listeners from."}]},"type":{"type":"array","elementType":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}}],"type":{"type":"reference","name":"GlobalEvent","package":"@expo/ui"}}]},{"name":"datePickerStyle","variant":"declaration","kind":64,"signatures":[{"name":"datePickerStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the date picker."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/datepickerstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the date picker."}]},"type":{"type":"reference","name":"DatePickerStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"defaultScrollAnchor","variant":"declaration","kind":64,"signatures":[{"name":"defaultScrollAnchor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the default anchor point for a scroll view's content."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 14.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/defaultscrollanchor(_:))."}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The anchor point for initial scroll position and content size changes, or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to reset."}]},"type":{"type":"union","types":[{"type":"reference","name":"UnitPointValue","package":"@expo/ui"},{"type":"literal","value":null}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"defaultScrollAnchorForRole","variant":"declaration","kind":64,"signatures":[{"name":"defaultScrollAnchorForRole","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the default anchor point for a scroll view for a specific role.\nPass "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to opt out of a specific role while keeping anchors for other roles."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/defaultscrollanchor(_:for:))."}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The anchor point, or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to opt out of this role."}]},"type":{"type":"union","types":[{"type":"reference","name":"UnitPointValue","package":"@expo/ui"},{"type":"literal","value":null}]}},{"name":"role","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The scroll anchor role: "},{"kind":"code","text":"`'initialOffset'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'sizeChanges'`"},{"kind":"text","text":", or "},{"kind":"code","text":"`'alignment'`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"initialOffset"},{"type":"literal","value":"sizeChanges"},{"type":"literal","value":"alignment"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"deleteDisabled","variant":"declaration","kind":64,"signatures":[{"name":"deleteDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables the delete action for a view in a list.\nApply to items within a "},{"kind":"code","text":"`ForEach`"},{"kind":"text","text":" to prevent them from being deleted."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/deletedisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether deletion should be disabled"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"disabled","variant":"declaration","kind":64,"signatures":[{"name":"disabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables or enables a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/disabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be disabled."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"dynamicTypeSize","variant":"declaration","kind":64,"signatures":[{"name":"dynamicTypeSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets or constrains the Dynamic Type size within the view, overriding the\nvalue inherited from the system.\n\nFour variants matching SwiftUI's "},{"kind":"code","text":"`dynamicTypeSize(_:)`"},{"kind":"text","text":":\n- "},{"kind":"code","text":"`dynamicTypeSize('large')`"},{"kind":"text","text":" โ€” fixes the Dynamic Type size to a single value\n- "},{"kind":"code","text":"`dynamicTypeSize({ max: 'accessibility3' })`"},{"kind":"text","text":" โ€” caps growth at a ceiling ("},{"kind":"code","text":"`...accessibility3`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large' })`"},{"kind":"text","text":" โ€” sets a floor ("},{"kind":"code","text":"`large...`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large', max: 'accessibility3' })`"},{"kind":"text","text":" โ€” clamps to a range ("},{"kind":"code","text":"`large...accessibility3`"},{"kind":"text","text":")\n\n"},{"kind":"code","text":"`min`"},{"kind":"text","text":" and "},{"kind":"code","text":"`max`"},{"kind":"text","text":" are independent: pass either or both. Set it on a "},{"kind":"code","text":"``"},{"kind":"text","text":" to\ncascade the constraint to every descendant through the SwiftUI environment.\nKeep "},{"kind":"code","text":"`min`"},{"kind":"text","text":" at or below "},{"kind":"code","text":"`max`"},{"kind":"text","text":", or the range traps natively, like SwiftUI.\nPer Apple's guidance, prefer capping at an accessibility size over disabling\nDynamic Type entirely."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Cap how large text in a tight layout can grow\n...\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/dynamictypesize(_:))."}]}]},"parameters":[{"name":"size","variant":"param","kind":32768,"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"dynamicTypeSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets or constrains the Dynamic Type size within the view, overriding the\nvalue inherited from the system.\n\nFour variants matching SwiftUI's "},{"kind":"code","text":"`dynamicTypeSize(_:)`"},{"kind":"text","text":":\n- "},{"kind":"code","text":"`dynamicTypeSize('large')`"},{"kind":"text","text":" โ€” fixes the Dynamic Type size to a single value\n- "},{"kind":"code","text":"`dynamicTypeSize({ max: 'accessibility3' })`"},{"kind":"text","text":" โ€” caps growth at a ceiling ("},{"kind":"code","text":"`...accessibility3`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large' })`"},{"kind":"text","text":" โ€” sets a floor ("},{"kind":"code","text":"`large...`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large', max: 'accessibility3' })`"},{"kind":"text","text":" โ€” clamps to a range ("},{"kind":"code","text":"`large...accessibility3`"},{"kind":"text","text":")\n\n"},{"kind":"code","text":"`min`"},{"kind":"text","text":" and "},{"kind":"code","text":"`max`"},{"kind":"text","text":" are independent: pass either or both. Set it on a "},{"kind":"code","text":"``"},{"kind":"text","text":" to\ncascade the constraint to every descendant through the SwiftUI environment.\nKeep "},{"kind":"code","text":"`min`"},{"kind":"text","text":" at or below "},{"kind":"code","text":"`max`"},{"kind":"text","text":", or the range traps natively, like SwiftUI.\nPer Apple's guidance, prefer capping at an accessibility size over disabling\nDynamic Type entirely."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Cap how large text in a tight layout can grow\n...\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/dynamictypesize(_:))."}]}]},"parameters":[{"name":"range","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"environment","variant":"declaration","kind":64,"signatures":[{"name":"environment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a SwiftUI environment value."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/environment(_:_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"EnvironmentConfig","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"environment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a SwiftUI environment value."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/environment(_:_:))."}]}]},"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"literal","value":"colorScheme"},{"type":"literal","value":"editMode"},{"type":"literal","value":"locale"},{"type":"literal","value":"timeZone"}]}},{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"fixedSize","variant":"declaration","kind":64,"signatures":[{"name":"fixedSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls fixed size behavior."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/fixedsize())."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the view should use its ideal width or height."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"vertical","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"font","variant":"declaration","kind":64,"signatures":[{"name":"font","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the font properties of a view.\n\nPass "},{"kind":"code","text":"`textStyle`"},{"kind":"text","text":" to scale with the user's Dynamic Type setting. Combine\nit with "},{"kind":"code","text":"`family`"},{"kind":"text","text":" to scale a custom font."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Scales with Dynamic Type\nHello\n\n// Custom font that scales relative to the body text style\nHi\n\n// Fixed-size system font (no Dynamic Type scaling)\nStatic\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official SwiftUI documentation for ["},{"kind":"code","text":"`system(_:design:weight:)`"},{"kind":"text","text":"](https://developer.apple.com/documentation/swiftui/font/system(_:design:weight:)), and ["},{"kind":"code","text":"`custom(_:size:relativeTo:)`"},{"kind":"text","text":"](https://developer.apple.com/documentation/swiftui/font/custom(_:size:relativeto:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"design","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font design. Applied when no "},{"kind":"code","text":"`family`"},{"kind":"text","text":" is provided. "},{"kind":"code","text":"`Font.custom`"},{"kind":"text","text":" always uses the embedded font's own design."}]},"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"rounded"},{"type":"literal","value":"serif"},{"type":"literal","value":"monospaced"}]}},{"name":"family","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Custom font family name."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"size","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font size in points. Ignored when only "},{"kind":"code","text":"`textStyle`"},{"kind":"text","text":" is set."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"17"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"textStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"SwiftUI text style. When set, the resulting font scales with the user's\nDynamic Type setting."}]},"type":{"type":"union","types":[{"type":"literal","value":"largeTitle"},{"type":"literal","value":"title"},{"type":"literal","value":"title2"},{"type":"literal","value":"title3"},{"type":"literal","value":"headline"},{"type":"literal","value":"subheadline"},{"type":"literal","value":"body"},{"type":"literal","value":"callout"},{"type":"literal","value":"footnote"},{"type":"literal","value":"caption"},{"type":"literal","value":"caption2"}]}},{"name":"weight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font weight."}]},"type":{"type":"union","types":[{"type":"literal","value":"light"},{"type":"literal","value":"bold"},{"type":"literal","value":"black"},{"type":"literal","value":"regular"},{"type":"literal","value":"ultraLight"},{"type":"literal","value":"thin"},{"type":"literal","value":"medium"},{"type":"literal","value":"semibold"},{"type":"literal","value":"heavy"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"foregroundColor","variant":"declaration","kind":64,"signatures":[{"name":"foregroundColor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the foreground color/tint of a view."}],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"Use "},{"kind":"code","text":"`foregroundStyle`"},{"kind":"text","text":" instead."}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/foregroundcolor(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The foreground color (hex string)."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"foregroundStyle","variant":"declaration","kind":64,"signatures":[{"name":"foregroundStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the foreground style of a view with comprehensive styling options.\n\nReplaces the deprecated "},{"kind":"code","text":"`foregroundColor`"},{"kind":"text","text":" modifier with enhanced capabilities including\ncolors, gradients, and semantic hierarchical styles that adapt to system appearance."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Simple usage\nRed Text\n\n// Adaptive hierarchical styling\n\n Supporting Text\n\n\n// Linear gradient\n\n Gradient Text\n\n```"}]},{"tag":"@returns","content":[{"kind":"text","text":"A view modifier that applies the specified foreground style"}]},{"tag":"@since","content":[{"kind":"text","text":"iOS 15.0+ (hierarchical quinary requires iOS 16.0+)"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/foregroundstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The foreground style configuration. Can be:\n\n**Simple Color ("},{"kind":"code","text":"`Color`"},{"kind":"text","text":"):**\n- Hex colors: "},{"kind":"code","text":"`'#FF0000'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#RGB'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#RRGGBB'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#AARRGGBB'`"},{"kind":"text","text":"\n- Named colors: "},{"kind":"code","text":"`'red'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'blue'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'green'`"},{"kind":"text","text":", and so on.\n- React Native color values like "},{"kind":"code","text":"`PlatformColor('label')`"},{"kind":"text","text":"\n\n**Explicit Color Object:**\n"},{"kind":"code","text":"```ts\n{ type: 'color', color: PlatformColor('label') }\n```"},{"kind":"text","text":"\n\n**Hierarchical Styles (Semantic):**\nAuto-adapting semantic styles that respond to light/dark mode and accessibility settings:\n"},{"kind":"code","text":"```ts\n{ type: 'hierarchical', style: 'primary' } // Most prominent (main content, headlines)\n{ type: 'hierarchical', style: 'secondary' } // Supporting text, subheadlines\n{ type: 'hierarchical', style: 'tertiary' } // Less important text, captions\n{ type: 'hierarchical', style: 'quaternary' } // Subtle text, disabled states\n{ type: 'hierarchical', style: 'quinary' } // Most subtle (iOS 16+, fallback to quaternary)\n```"},{"kind":"text","text":"\n\n**Linear Gradient:**\n"},{"kind":"code","text":"```ts\n{\n type: 'linearGradient',\n colors: [PlatformColor('systemPink'), '#0000FF', '#00FF00'],\n startPoint: { x: 0, y: 0 }, // Top-left\n endPoint: { x: 1, y: 1 } // Bottom-right\n}\n```"},{"kind":"text","text":"\n\n**Radial Gradient:**\n"},{"kind":"code","text":"```ts\n{\n type: 'radialGradient',\n colors: [PlatformColor('systemPink'), '#0000FF'],\n center: { x: 0.5, y: 0.5 }, // Center of view\n startRadius: 0, // Inner radius\n endRadius: 100 // Outer radius\n}\n```"},{"kind":"text","text":"\n\n**Angular Gradient (Conic):**\n"},{"kind":"code","text":"```ts\n{\n type: 'angularGradient',\n colors: [PlatformColor('systemPink'), '#00FF00', '#0000FF'],\n center: { x: 0.5, y: 0.5 } // Rotation center\n}\n```"}]},"type":{"type":"union","types":[{"type":"reference","name":"Color","package":"@expo/ui"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"color"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"style","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"primary"},{"type":"literal","value":"secondary"},{"type":"literal","value":"tertiary"},{"type":"literal","value":"quaternary"},{"type":"literal","value":"quinary"}]}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"hierarchical"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"endPoint","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"startPoint","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"linearGradient"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"center","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"endRadius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"startRadius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"radialGradient"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"center","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"angularGradient"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"frame","variant":"declaration","kind":64,"signatures":[{"name":"frame","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the frame properties of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/frame(width:height:alignment:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The frame parameters. Width, height, minWidth, maxWidth, minHeight, maxHeight, idealWidth, idealHeight and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"height","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"idealHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"idealWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"maxHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"maxWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"minHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"minWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gaugeStyle","variant":"declaration","kind":64,"signatures":[{"name":"gaugeStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the gauge."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/gaugestyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the gauge."}]},"type":{"type":"reference","name":"GaugeStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"glassEffect","variant":"declaration","kind":64,"signatures":[{"name":"glassEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a glass effect to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/glasseffect(_:in:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The glass effect parameters. Variant, interactive, tint and shape."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"glass","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"interactive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"tint","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"variant","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"clear"},{"type":"literal","value":"regular"},{"type":"literal","value":"identity"}]}}]}}},{"name":"shape","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"glassEffectId","variant":"declaration","kind":64,"signatures":[{"name":"glassEffectId","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Associates an identity value to Liquid Glass effects defined within a "},{"kind":"code","text":"`GlassEffectContainer`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/glasseffectid(_:in:))."}]}]},"parameters":[{"name":"id","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The id of the glass effect."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"namespaceId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The namespace id of the glass effect. Use Namespace component to create a namespace."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"grayscale","variant":"declaration","kind":64,"signatures":[{"name":"grayscale","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes a view grayscale."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/grayscale(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Grayscale amount (0 to 1)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellAnchor","variant":"declaration","kind":64,"signatures":[{"name":"gridCellAnchor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies a custom alignment anchor for a view that acts as a grid cell."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified anchor point to align its content."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 16+"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Using a preset anchor\n\n\n// Using a custom anchor point\n\n```"}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The unit point that defines how to align the view within the bounds of its grid cell."}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"anchor","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"},{"type":"literal","value":"zero"}]}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"preset"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"points","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"custom"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellColumns","variant":"declaration","kind":64,"signatures":[{"name":"gridCellColumns","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Tells a view that acts as a cell in a grid to span the specified number of columns."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that occupies the specified number of columns in a grid row."}]}]},"parameters":[{"name":"count","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The number of columns that the view should consume when placed in a grid row."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellUnsizedAxes","variant":"declaration","kind":64,"signatures":[{"name":"gridCellUnsizedAxes","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Asks grid layouts not to offer the view extra size in the specified axes."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that doesnโ€™t ask an enclosing grid for extra size in one or more axes."}]}]},"parameters":[{"name":"axes","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The dimensions in which the grid shouldnโ€™t offer the view a share of any available space. This prevents a flexible view like a Spacer, Divider, or Color from defining the size of a row or column."}]},"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridColumnAlignment","variant":"declaration","kind":64,"signatures":[{"name":"gridColumnAlignment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Overrides the default horizontal alignment of the grid column that the view appears in."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified horizontal alignment, and that causes all cells in the same column of a grid to use the same alignment."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 16+"}]}]},"parameters":[{"name":"alignment","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The HorizontalAlignment guide to use for the grid column that the view appears in."}]},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"headerProminence","variant":"declaration","kind":64,"signatures":[{"name":"headerProminence","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the header prominence for this view."}]},"parameters":[{"name":"prominence","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The prominence to apply."}]},"type":{"type":"union","types":[{"type":"literal","value":"standard"},{"type":"literal","value":"increased"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"hidden","variant":"declaration","kind":64,"signatures":[{"name":"hidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Hides or shows a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/hidden(_:))."}]}]},"parameters":[{"name":"hidden","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be hidden."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"hueRotation","variant":"declaration","kind":64,"signatures":[{"name":"hueRotation","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a hue rotation to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/huerotation(_:))."}]}]},"parameters":[{"name":"angle","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Hue rotation angle in degrees."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"id","variant":"declaration","kind":64,"signatures":[{"name":"id","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Attaches a stable identifier to a view so it can be referenced by scroll target bindings.\nUse with "},{"kind":"code","text":"`scrollTargetLayout()`"},{"kind":"text","text":" on the containing stack and the "},{"kind":"code","text":"`scrollPosition`"},{"kind":"text","text":" modifier on a scrollable container."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/id(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"String identifier matched by "},{"kind":"code","text":"`scrollPosition`"},{"kind":"text","text":"'s observable state."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"ignoreSafeArea","variant":"declaration","kind":64,"signatures":[{"name":"ignoreSafeArea","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Allows a view to ignore safe area constraints."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ignoressafearea(_:edges:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The safe area regions to ignore and the edges to expand into."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"edges","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"all"}]}},{"name":"regions","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"container"},{"type":"literal","value":"all"},{"type":"literal","value":"keyboard"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"indexViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"indexViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the page index view inside a "},{"kind":"code","text":"`TabView`"},{"kind":"text","text":". SwiftUI only\nships a "},{"kind":"code","text":"`.page`"},{"kind":"text","text":" index view style, so no style selector is exposed."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/indexviewstyle(_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"IndexViewStyleConfig","package":"@expo/ui"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"interactiveDismissDisabled","variant":"declaration","kind":64,"signatures":[{"name":"interactiveDismissDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables interactive dismissal of a sheet."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/interactivedismissdisabled(_:))."}]}]},"parameters":[{"name":"isDisabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether interactive dismiss is disabled (default: true)."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"italic","variant":"declaration","kind":64,"signatures":[{"name":"italic","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes text italic.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", it works on all iOS/tvOS versions. When used on regular views, it requires iOS 16.0+/tvOS 16.0+."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/italic())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"kerning","variant":"declaration","kind":64,"signatures":[{"name":"kerning","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the spacing, or kerning, between characters for the text in this view."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/kerning(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"keyboardType","variant":"declaration","kind":64,"signatures":[{"name":"keyboardType","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the keyboard type for text input views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/keyboardtype(_:))."}]}]},"parameters":[{"name":"keyboardType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of keyboard to display."}]},"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"email-address"},{"type":"literal","value":"numeric"},{"type":"literal","value":"phone-pad"},{"type":"literal","value":"ascii-capable"},{"type":"literal","value":"numbers-and-punctuation"},{"type":"literal","value":"url"},{"type":"literal","value":"name-phone-pad"},{"type":"literal","value":"decimal-pad"},{"type":"literal","value":"twitter"},{"type":"literal","value":"web-search"},{"type":"literal","value":"ascii-capable-number-pad"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"labelsHidden","variant":"declaration","kind":64,"signatures":[{"name":"labelsHidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Hides the labels of any controls contained within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/labelshidden())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"labelStyle","variant":"declaration","kind":64,"signatures":[{"name":"labelStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for labels within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/labelstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The label style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"iconOnly"},{"type":"literal","value":"titleAndIcon"},{"type":"literal","value":"titleOnly"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"layoutPriority","variant":"declaration","kind":64,"signatures":[{"name":"layoutPriority","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets layout priority for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/layoutpriority(_:))."}]}]},"parameters":[{"name":"priority","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Layout priority value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineHeight","variant":"declaration","kind":64,"signatures":[{"name":"lineHeight","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the total line height for text in this view."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 26.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 26.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 26.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/lineheight(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The line height in points."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineLimit","variant":"declaration","kind":64,"signatures":[{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"parameters":[{"name":"limit","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"reservesSpace","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"parameters":[{"name":"range","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"max","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"min","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineSpacing","variant":"declaration","kind":64,"signatures":[{"name":"lineSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The distance in points between the bottom of one line fragment and the top of the next."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linespacing(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The amount of space between the bottom of one line and the top of the next line in points. This value is always nonnegative. Otherwise, the default value will be used."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowBackground","variant":"declaration","kind":64,"signatures":[{"name":"listRowBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a row."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowbackground(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The row color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowInsets","variant":"declaration","kind":64,"signatures":[{"name":"listRowInsets","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an inset to the rows in a list."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowinsets(_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The inset to apply to the rows in a list."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowSeparator","variant":"declaration","kind":64,"signatures":[{"name":"listRowSeparator","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of the separator for a list row."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowseparator(_:edges:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility to apply."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}},{"name":"edges","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The edges where the separator visibility applies."}]},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"all"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowSpacing","variant":"declaration","kind":64,"signatures":[{"name":"listRowSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the vertical spacing between adjacent rows in a list."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowspacing(_:))."}]}]},"parameters":[{"name":"spacing","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The spacing value to use. When omitted, the default spacing is used."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listSectionMargins","variant":"declaration","kind":64,"signatures":[{"name":"listSectionMargins","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Allows a view to ignore safe area constraints."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listsectionmargins(_:_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The margins to apply to the section in a list."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"edges","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"all"}]}},{"name":"length","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listSectionSpacing","variant":"declaration","kind":64,"signatures":[{"name":"listSectionSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the spacing between adjacent sections."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]}]},"parameters":[{"name":"spacing","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The spacing to apply."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":"default"},{"type":"literal","value":"compact"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listStyle","variant":"declaration","kind":64,"signatures":[{"name":"listStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for a List view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/liststyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The list style to apply."}]},"type":{"type":"reference","name":"ListStyle","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"luminanceToAlpha","variant":"declaration","kind":64,"signatures":[{"name":"luminanceToAlpha","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a luminance to alpha effect to this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/luminanceToAlpha())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"mask","variant":"declaration","kind":64,"signatures":[{"name":"mask","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a mask to the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/mask(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The masking shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius for rounded rectangle (default: "},{"kind":"code","text":"`8`"},{"kind":"text","text":")."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"matchedGeometryEffect","variant":"declaration","kind":64,"signatures":[{"name":"matchedGeometryEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a matched geometry effect to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/matchedgeometryeffect(id:in:properties:anchor:issource:))."}]}]},"parameters":[{"name":"id","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The id of the view."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"namespaceId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The namespace id of the view. Use Namespace component to create a namespace."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"menuActionDismissBehavior","variant":"declaration","kind":64,"signatures":[{"name":"menuActionDismissBehavior","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the dismissal behavior of menu actions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/menuactiondismissbehavior(_:))."}]}]},"parameters":[{"name":"behavior","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The menu action dismiss behavior."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"disabled"},{"type":"literal","value":"enabled"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"minimumScaleFactor","variant":"declaration","kind":64,"signatures":[{"name":"minimumScaleFactor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the minimum amount that text in this view scales down to fit in the available space.\n\nUse this modifier if the text you place in a view doesn't fit and it's okay if the text shrinks\nto accommodate. For example, a label with a minimum scale factor of "},{"kind":"code","text":"`0.5`"},{"kind":"text","text":" draws its text in a\nfont size as small as half of the actual font if needed."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/minimumscalefactor(_:))."}]}]},"parameters":[{"name":"factor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A fraction between "},{"kind":"code","text":"`0`"},{"kind":"text","text":" and "},{"kind":"code","text":"`1`"},{"kind":"text","text":" (including "},{"kind":"code","text":"`0`"},{"kind":"text","text":" and "},{"kind":"code","text":"`1`"},{"kind":"text","text":") that specifies the amount\nof text to draw. For example, a value of "},{"kind":"code","text":"`0.5`"},{"kind":"text","text":" draws the text in a font size as small as half the\nactual font if needed."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"monospacedDigit","variant":"declaration","kind":64,"signatures":[{"name":"monospacedDigit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Modifies the fonts of all child views to use fixed-width digits, if possible, while leaving other characters proportionally spaced.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", modifies the text view's font to use fixed-width digits, while leaving other characters proportionally spaced."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/monospaceddigit())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"moveDisabled","variant":"declaration","kind":64,"signatures":[{"name":"moveDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables the move action for a view in a list.\nApply to items within a "},{"kind":"code","text":"`ForEach`"},{"kind":"text","text":" to prevent them from being moved."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/movedisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether moving should be disabled"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"multilineTextAlignment","variant":"declaration","kind":64,"signatures":[{"name":"multilineTextAlignment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"An alignment position for text along the horizontal axis."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/multilinetextalignment(_:))."}]}]},"parameters":[{"name":"alignment","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A value that you use to align multiple lines of text within a view."}]},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"offset","variant":"declaration","kind":64,"signatures":[{"name":"offset","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an offset (translation) to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/offset(x:y:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The offset parameters: "},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onAppear","variant":"declaration","kind":64,"signatures":[{"name":"onAppear","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an onAppear modifier that calls a function when the view appears."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onappear(perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when the view appears."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onDisappear","variant":"declaration","kind":64,"signatures":[{"name":"onDisappear","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an onDisappear modifier that calls a function when the view disappears."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ondisappear(perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when the view disappears."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onGeometryChange","variant":"declaration","kind":64,"signatures":[{"name":"onGeometryChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Calls the handler whenever the view's geometry changes, with its position and size.\n"},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":" are in the global coordinate space (relative to the window); all values are in points."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ongeometrychange(for:of:action:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function called with the new frame."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"frame","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onLongPressGesture","variant":"declaration","kind":64,"signatures":[{"name":"onLongPressGesture","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a long press gesture recognizer."}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when long pressed."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"minimumDuration","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Minimum duration for long press (default: 0.5s)"}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onScrollPhaseChange","variant":"declaration","kind":64,"signatures":[{"name":"onScrollPhaseChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fires when SwiftUI's scroll phase changes (e.g., the user begins dragging,\nthe scroll view starts decelerating, or scrolling settles to idle). The\nsecond argument is the scroll geometry sampled at the phase transition,\nuseful for reading the final offset on settle without subscribing to\nper-frame "},{"kind":"code","text":"`onScrollGeometryChange`"},{"kind":"text","text":".\n\nApply to a SwiftUI "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":" (and other scrollable views). On iOS below\n18.0 the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onscrollphasechange(_:))."}]}]},"parameters":[{"name":"callback","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"phase","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollPhase"},"name":"ScrollPhase","package":"@expo/ui"}},{"name":"geometry","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollGeometry"},"name":"ScrollGeometry","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onSubmit","variant":"declaration","kind":64,"signatures":[{"name":"onSubmit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an action to perform when the user submits a value to this view (e.g. pressing return in a text field)."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onsubmit(of:_:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call on submit."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onTapGesture","variant":"declaration","kind":64,"signatures":[{"name":"onTapGesture","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a tap gesture recognizer."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ontapgesture(count:perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when tapped."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"opacity","variant":"declaration","kind":64,"signatures":[{"name":"opacity","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the opacity of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/opacity(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Opacity value between 0 and 1."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"overlay","variant":"declaration","kind":64,"signatures":[{"name":"overlay","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Overlays another view on top."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/overlay(_:alignment:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Overlay color and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"padding","variant":"declaration","kind":64,"signatures":[{"name":"padding","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets padding on a view.\nSupports individual edges or shorthand properties."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/padding(_:_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The padding parameters: "},{"kind":"code","text":"`top`"},{"kind":"text","text":", "},{"kind":"code","text":"`bottom`"},{"kind":"text","text":", "},{"kind":"code","text":"`leading`"},{"kind":"text","text":", "},{"kind":"code","text":"`trailing`"},{"kind":"text","text":", "},{"kind":"code","text":"`horizontal`"},{"kind":"text","text":", "},{"kind":"code","text":"`vertical`"},{"kind":"text","text":" and "},{"kind":"code","text":"`all`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"all","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","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"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"pickerStyle","variant":"declaration","kind":64,"signatures":[{"name":"pickerStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the picker."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/pickerstyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the picker."}]},"type":{"type":"reference","name":"PickerStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationBackground","variant":"declaration","kind":64,"signatures":[{"name":"presentationBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a sheet presentation. Paints the entire sheet chrome\nincluding the drag-indicator zone and home-indicator safe-area inset, which\na regular "},{"kind":"code","text":"`background()`"},{"kind":"text","text":" modifier cannot reach."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI\ndocumentation](https://developer.apple.com/documentation/swiftui/view/presentationbackground(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationBackgroundInteraction","variant":"declaration","kind":64,"signatures":[{"name":"presentationBackgroundInteraction","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls interaction with the content behind a sheet."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.4+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationbackgroundinteraction(_:))."}]}]},"parameters":[{"name":"interaction","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background interaction behavior."}]},"type":{"type":"reference","name":"PresentationBackgroundInteractionType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationDetents","variant":"declaration","kind":64,"signatures":[{"name":"presentationDetents","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the available heights for a sheet presentation."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationdetents(_:selection:))."}]}]},"parameters":[{"name":"detents","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Array of detents the sheet can snap to."}]},"type":{"type":"array","elementType":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional settings for tracking the selected detent."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"onSelectionChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback fired when the user changes the active detent by dragging."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"detent","variant":"param","kind":32768,"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"selection","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The currently selected detent."}]},"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationDragIndicator","variant":"declaration","kind":64,"signatures":[{"name":"presentationDragIndicator","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of the drag indicator on a sheet."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationdragindicator(_:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility of the drag indicator."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"progressViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"progressViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the progress view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/progressviewstyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the progress view."}]},"type":{"type":"reference","name":"ProgressViewStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"refreshable","variant":"declaration","kind":64,"signatures":[{"name":"refreshable","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Marks a view as refreshable. Adds pull-to-refresh functionality."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/refreshable(action:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Async function to call when refresh is triggered."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"resizable","variant":"declaration","kind":64,"signatures":[{"name":"resizable","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the mode by which SwiftUI resizes an image to fit its space."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/image/resizable(capinsets:resizingmode:))."}]}]},"parameters":[{"name":"capInsets","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Inset values that indicate a portion of the image that SwiftUI doesnโ€™t resize."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"resizingMode","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The mode by which SwiftUI resizes the image."}]},"type":{"type":"union","types":[{"type":"literal","value":"stretch"},{"type":"literal","value":"tile"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"rotation3DEffect","variant":"declaration","kind":64,"signatures":[{"name":"rotation3DEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a 3D rotation transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/rotation3deffect(_:axis:anchor:anchorz:perspective:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The rotation parameters: "},{"kind":"code","text":"`angle`"},{"kind":"text","text":" (in degrees), "},{"kind":"code","text":"`axis`"},{"kind":"text","text":" (x, y, z), and "},{"kind":"code","text":"`perspective`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"angle","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"axis","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"z","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"perspective","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"rotationEffect","variant":"declaration","kind":64,"signatures":[{"name":"rotationEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies rotation transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/rotationeffect(_:anchor:))."}]}]},"parameters":[{"name":"angle","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Rotation angle in degrees."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"saturation","variant":"declaration","kind":64,"signatures":[{"name":"saturation","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the saturation of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/saturation(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Saturation multiplier (0 to infinity, 1 = normal)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scaleEffect","variant":"declaration","kind":64,"signatures":[{"name":"scaleEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies scaling transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scaleeffect(_:anchor:))."}]}]},"parameters":[{"name":"scale","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Uniform scale factor (1.0 = normal size), or an object with separate "},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":" scale factors."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollContentBackground","variant":"declaration","kind":64,"signatures":[{"name":"scrollContentBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the visibility of the background for scrollable views within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollcontentbackground(_:))."}]}]},"parameters":[{"name":"visible","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility of the background."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollDisabled","variant":"declaration","kind":64,"signatures":[{"name":"scrollDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables or enables scrolling in scrollable views."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolldisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether scrolling should be disabled (default: true)."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollDismissesKeyboard","variant":"declaration","kind":64,"signatures":[{"name":"scrollDismissesKeyboard","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls how the keyboard is dismissed when scrolling."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolldismisseskeyboard(_:))."}]}]},"parameters":[{"name":"mode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The keyboard dismiss mode."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"never"},{"type":"literal","value":"interactively"},{"type":"literal","value":"immediately"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollIndicators","variant":"declaration","kind":64,"signatures":[{"name":"scrollIndicators","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of scroll indicators for scrollable views.\nMirrors SwiftUI's "},{"kind":"code","text":"`scrollIndicators(_:axes:)`"},{"kind":"text","text":" modifier."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollindicators(_:axes:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Indicator visibility:\n- "},{"kind":"code","text":"`'automatic'`"},{"kind":"text","text":": platform-default behavior.\n- "},{"kind":"code","text":"`'visible'`"},{"kind":"text","text":": prefer showing indicators (may still be hidden by the system).\n- "},{"kind":"code","text":"`'hidden'`"},{"kind":"text","text":": prefer hiding indicators (may still be shown by the system).\n- "},{"kind":"code","text":"`'never'`"},{"kind":"text","text":": never show indicators."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"},{"type":"literal","value":"never"}]}},{"name":"axes","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Axes to apply the visibility to. Defaults to "},{"kind":"code","text":"`'both'`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"both"}]},"defaultValue":"'both'"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollPosition","variant":"declaration","kind":64,"signatures":[{"name":"scrollPosition","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Binds the leading scroll target of a scrollable container to an observable native state.\n\nReading "},{"kind":"code","text":"`state.value`"},{"kind":"text","text":" returns the id of the leading scroll target. Writing to it scrolls\nthe container to the matching view. Pair with "},{"kind":"code","text":"`scrollTargetLayout()`"},{"kind":"text","text":" on the content\ncontainer and "},{"kind":"code","text":"`id()`"},{"kind":"text","text":" on each target. Works on "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":", "},{"kind":"code","text":"`LazyVStack`"},{"kind":"text","text":", "},{"kind":"code","text":"`LazyHStack`"},{"kind":"text","text":",\nand other scrollable containers.\n\nOn iOS below 17.0, the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 14.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollposition(id:anchor:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst activeID = useNativeState(null);\n\n console.log('leading target:', newID),\n }),\n ]}>\n \n {items.map((item) => (\n {item.text}\n ))}\n \n
\n```"}]}]},"parameters":[{"name":"state","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An "},{"kind":"code","text":"`ObservableState`"},{"kind":"text","text":" created with "},{"kind":"code","text":"`useNativeState`"},{"kind":"text","text":"."}]},"type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}],"name":"ObservableState","package":"@expo/ui"}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"anchor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Anchor used to pick which view drives the binding and to align\n programmatic scrolls. Maps to the "},{"kind":"code","text":"`anchor:`"},{"kind":"text","text":" parameter of SwiftUI's "},{"kind":"code","text":"`.scrollPosition(id:anchor:)`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"UnitPointValue","package":"@expo/ui"}},{"name":"onChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Fires on the JS thread whenever the leading scroll target changes."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"id","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}],"type":{"type":"intrinsic","name":"void"}}]}}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollTargetBehavior","variant":"declaration","kind":64,"signatures":[{"name":"scrollTargetBehavior","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the scroll snapping behavior for scrollable views.\nUse with "},{"kind":"code","text":"`scrollTargetLayout`"},{"kind":"text","text":" on the content container."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolltargetbehavior(_:))."}]}]},"parameters":[{"name":"behavior","variant":"param","kind":32768,"comment":{"summary":[{"kind":"code","text":"`'paging'`"},{"kind":"text","text":" for container-aligned snapping, "},{"kind":"code","text":"`'viewAligned'`"},{"kind":"text","text":" for view-aligned snapping."}]},"type":{"type":"union","types":[{"type":"literal","value":"paging"},{"type":"literal","value":"viewAligned"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollTargetLayout","variant":"declaration","kind":64,"signatures":[{"name":"scrollTargetLayout","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Configures a layout container as a scroll target layout for view-aligned snapping.\nApply to "},{"kind":"code","text":"`VStack`"},{"kind":"text","text":" or "},{"kind":"code","text":"`HStack`"},{"kind":"text","text":" inside a "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolltargetlayout(isenabled:))."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"shadow","variant":"declaration","kind":64,"signatures":[{"name":"shadow","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a shadow to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/shadow(color:radius:x:y:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The shadow parameters: "},{"kind":"code","text":"`radius`"},{"kind":"text","text":", offset ("},{"kind":"code","text":"`x`"},{"kind":"text","text":", "},{"kind":"code","text":"`y`"},{"kind":"text","text":") and "},{"kind":"code","text":"`color`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"radius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"strikethrough","variant":"declaration","kind":64,"signatures":[{"name":"strikethrough","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a strikethrough to the text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/strikethrough(_:color:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Controls whether the strikethrough is visible ("},{"kind":"code","text":"`true`"},{"kind":"text","text":" to show, "},{"kind":"code","text":"`false`"},{"kind":"text","text":" to hide)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"isActive","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"pattern","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/index.ts","qualifiedName":"LinePattern"},"name":"LinePattern","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"submitLabel","variant":"declaration","kind":64,"signatures":[{"name":"submitLabel","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the label to display in the keyboard's return key. For example, "},{"kind":"code","text":"`'done'`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified submit label."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 15+"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]}]},"parameters":[{"name":"submitLabel","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The label to display in the keyboard's return key."}]},"type":{"type":"union","types":[{"type":"literal","value":"join"},{"type":"literal","value":"search"},{"type":"literal","value":"done"},{"type":"literal","value":"continue"},{"type":"literal","value":"go"},{"type":"literal","value":"next"},{"type":"literal","value":"return"},{"type":"literal","value":"route"},{"type":"literal","value":"send"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"symbolEffect","variant":"declaration","kind":64,"signatures":[{"name":"symbolEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an SF Symbol effect to a view."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/symbolEffect(_:options:value:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst trigger = useNativeState(0);\n\n```"}]}]},"parameters":[{"name":"effect","variant":"param","kind":32768,"type":{"type":"reference","name":"SymbolEffect","package":"@expo/ui"}},{"name":"args","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"isActive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indefinite effects: runs while "},{"kind":"code","text":"`state.value === true`"},{"kind":"text","text":". Default active when omitted."}]},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"ObservableState","package":"@expo/ui"}},{"name":"options","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"SymbolEffectOptions","package":"@expo/ui"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Discrete effects: the effect fires once each time this value changes."}]},"type":{"type":"reference","typeArguments":[{"type":"reference","name":"DiscreteSymbolEffectValue","package":"@expo/ui"}],"name":"ObservableState","package":"@expo/ui"}}]}},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tabViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"tabViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for a "},{"kind":"code","text":"`TabView`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tabviewstyle(_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"TabViewStyleConfig","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tag","variant":"declaration","kind":64,"signatures":[{"name":"tag","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a tag on a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tag(_:includeoptional:))."}]}]},"parameters":[{"name":"tag","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The tag to set on the view."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textCase","variant":"declaration","kind":64,"signatures":[{"name":"textCase","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a transform for the case of the text contained in this view when displayed."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\"lowercase\""}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textcase(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"literal","value":"lowercase"},{"type":"literal","value":"uppercase"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textContentType","variant":"declaration","kind":64,"signatures":[{"name":"textContentType","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the text content type for input text, which the system uses to offer\nsuggestions (like autofill) while the user enters text."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 13.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textcontenttype(_:)-ufdv)."}]}]},"parameters":[{"name":"textContentType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The semantic meaning of the text input area."}]},"type":{"type":"union","types":[{"type":"literal","value":"URL"},{"type":"literal","value":"namePrefix"},{"type":"literal","value":"name"},{"type":"literal","value":"nameSuffix"},{"type":"literal","value":"givenName"},{"type":"literal","value":"middleName"},{"type":"literal","value":"familyName"},{"type":"literal","value":"nickname"},{"type":"literal","value":"organizationName"},{"type":"literal","value":"jobTitle"},{"type":"literal","value":"location"},{"type":"literal","value":"fullStreetAddress"},{"type":"literal","value":"streetAddressLine1"},{"type":"literal","value":"streetAddressLine2"},{"type":"literal","value":"addressCity"},{"type":"literal","value":"addressCityAndState"},{"type":"literal","value":"addressState"},{"type":"literal","value":"postalCode"},{"type":"literal","value":"sublocality"},{"type":"literal","value":"countryName"},{"type":"literal","value":"username"},{"type":"literal","value":"password"},{"type":"literal","value":"newPassword"},{"type":"literal","value":"oneTimeCode"},{"type":"literal","value":"emailAddress"},{"type":"literal","value":"telephoneNumber"},{"type":"literal","value":"cellularEID"},{"type":"literal","value":"cellularIMEI"},{"type":"literal","value":"creditCardNumber"},{"type":"literal","value":"creditCardExpiration"},{"type":"literal","value":"creditCardExpirationMonth"},{"type":"literal","value":"creditCardExpirationYear"},{"type":"literal","value":"creditCardSecurityCode"},{"type":"literal","value":"creditCardType"},{"type":"literal","value":"creditCardName"},{"type":"literal","value":"creditCardGivenName"},{"type":"literal","value":"creditCardMiddleName"},{"type":"literal","value":"creditCardFamilyName"},{"type":"literal","value":"birthdate"},{"type":"literal","value":"birthdateDay"},{"type":"literal","value":"birthdateMonth"},{"type":"literal","value":"birthdateYear"},{"type":"literal","value":"dateTime"},{"type":"literal","value":"flightNumber"},{"type":"literal","value":"shipmentTrackingNumber"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textFieldStyle","variant":"declaration","kind":64,"signatures":[{"name":"textFieldStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the text field style for text field views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textfieldstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The text field style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"plain"},{"type":"literal","value":"roundedBorder"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textInputAutocapitalization","variant":"declaration","kind":64,"signatures":[{"name":"textInputAutocapitalization","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets how often the shift key in the keyboard is automatically enabled."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textinputautocapitalization(_:))."}]}]},"parameters":[{"name":"autocapitalization","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The autocapitalization behavior."}]},"type":{"type":"union","types":[{"type":"literal","value":"never"},{"type":"literal","value":"words"},{"type":"literal","value":"sentences"},{"type":"literal","value":"characters"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textSelection","variant":"declaration","kind":64,"signatures":[{"name":"textSelection","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls whether people can select text within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textselection(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Enable selection"}]},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tint","variant":"declaration","kind":64,"signatures":[{"name":"tint","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the tint color of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tint(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The tint color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"toggleStyle","variant":"declaration","kind":64,"signatures":[{"name":"toggleStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for toggles within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/togglestyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The toggle style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"switch"},{"type":"literal","value":"button"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"truncationMode","variant":"declaration","kind":64,"signatures":[{"name":"truncationMode","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the truncation mode for lines of text that are too long to fit in the available space."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/truncationmode(_:))."}]}]},"parameters":[{"name":"mode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The truncation mode that specifies where to truncate the text within the text view, if needed.\nYou can truncate at the beginning, middle, or end of the text view."}]},"type":{"type":"union","types":[{"type":"literal","value":"head"},{"type":"literal","value":"middle"},{"type":"literal","value":"tail"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"underline","variant":"declaration","kind":64,"signatures":[{"name":"underline","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an underline to the text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/underline(_:pattern:color:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Controls whether the underline is visible ("},{"kind":"code","text":"`true`"},{"kind":"text","text":" to show, "},{"kind":"code","text":"`false`"},{"kind":"text","text":" to hide)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"isActive","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"pattern","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/index.ts","qualifiedName":"LinePattern"},"name":"LinePattern","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"useScrollGeometryChange","variant":"declaration","kind":64,"signatures":[{"name":"useScrollGeometryChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fires when the scroll geometry changes โ€” i.e., on every scroll update and\non container/content size changes. Use to drive continuous progress UI\nsuch as page indicators, parallax, or fractional offsets.\n\nIf the callback is marked with the "},{"kind":"code","text":"`'worklet'`"},{"kind":"text","text":" directive, it runs\nsynchronously on the UI thread (no JS-thread round-trip); otherwise it is\ndelivered asynchronously as a regular JS event. Both paths share the same\nnative modifier โ€” the worklet variant is automatically wrapped in a\n"},{"kind":"code","text":"`WorkletCallback`"},{"kind":"text","text":" shared object whose lifetime is managed by the hook.\n\nThis is a hook because the worklet path requires a stable shared-object\nreference across renders. Call it at the top of your component, then\ninclude the returned modifier in your "},{"kind":"code","text":"`modifiers`"},{"kind":"text","text":" array.\n\nApply to a SwiftUI "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":" (and other scrollable views). On iOS below\n18.0 the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onscrollgeometrychange(for:of:_:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst geometryModifier = useScrollGeometryChange((g) => {\n 'worklet';\n progress.value = g.contentOffsetX / g.containerWidth;\n});\n\n\n```"}]}]},"parameters":[{"name":"callback","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"geometry","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollGeometry"},"name":"ScrollGeometry","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"union","types":[{"type":"reference","name":"ModifierConfig","package":"@expo/ui"},{"type":"literal","value":null}]}}]},{"name":"widgetAccentedRenderingMode","variant":"declaration","kind":64,"signatures":[{"name":"widgetAccentedRenderingMode","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the how to render an Image when using the WidgetKit/WidgetRenderingMode/accented mode."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/image/widgetaccentedrenderingmode(_:))."}]}]},"parameters":[{"name":"renderingMode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A constant describing how the Image should be rendered."}]},"type":{"type":"union","types":[{"type":"literal","value":"fullColor"},{"type":"literal","value":"accented"},{"type":"literal","value":"desaturated"},{"type":"literal","value":"accentedDesaturated"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"widgetURL","variant":"declaration","kind":64,"signatures":[{"name":"widgetURL","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the URL to open in the containing app when the user clicks the widget.\nWidgets support one widgetURL modifier in their view hierarchy. If multiple views have widgetURL modifiers, the behavior is undefined."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/widgetURL(_:))."}]}]},"parameters":[{"name":"url","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The URL to open in the containing app."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"zIndex","variant":"declaration","kind":64,"signatures":[{"name":"zIndex","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the z-index (display order) of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/zindex(_:))."}]}]},"parameters":[{"name":"index","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The z-index value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]}],"packageName":"@expo/ui"} \ No newline at end of file +{"schemaVersion":"2.0","name":"expo-ui/swift-ui/modifiers","variant":"project","kind":1,"children":[{"name":"ModifierConfig","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Base interface for all view modifiers.\nAll modifiers must have a type field and can include arbitrary parameters."}]},"children":[{"name":"$type","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"eventListener","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"args","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"any"}}]},{"name":"ChainableAnimationType","variant":"declaration","kind":2097152,"children":[{"name":"[VALUE_SYMBOL]","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/animation/types.ts","qualifiedName":"AnimationObject"},"name":"AnimationObject","package":"@expo/ui"}}]}}},{"name":"delay","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Adds a delay before the animation starts (in seconds)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"delay","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}}},{"name":"repeat","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Repeats the animation the given number of times."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"autoreverses","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"repeatCount","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}}}]},{"name":"Color","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/types.ts","qualifiedName":"NamedColor"},"name":"NamedColor","package":"@expo/ui"}]}},{"name":"ContainerBackgroundPlacement","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"widget"},{"type":"literal","value":"navigation"},{"type":"literal","value":"navigationSplitView"}]}},{"name":"DatePickerStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"compact"},{"type":"literal","value":"graphical"},{"type":"literal","value":"wheel"}]}},{"name":"DiscreteSymbolEffectValue","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Equatable primitive accepted as a discrete effect trigger."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"boolean"}]}},{"name":"DynamicTypeSizeValue","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A standard size for Dynamic Type, from "},{"kind":"code","text":"`xSmall`"},{"kind":"text","text":" through the five\n"},{"kind":"code","text":"`accessibility`"},{"kind":"text","text":" sizes. Mirrors SwiftUI's "},{"kind":"code","text":"`DynamicTypeSize`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"xSmall"},{"type":"literal","value":"small"},{"type":"literal","value":"medium"},{"type":"literal","value":"large"},{"type":"literal","value":"xLarge"},{"type":"literal","value":"xxLarge"},{"type":"literal","value":"xxxLarge"},{"type":"literal","value":"accessibility1"},{"type":"literal","value":"accessibility2"},{"type":"literal","value":"accessibility3"},{"type":"literal","value":"accessibility4"},{"type":"literal","value":"accessibility5"}]}},{"name":"EnvironmentConfig","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"editMode"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"active"},{"type":"literal","value":"inactive"},{"type":"literal","value":"transient"}]}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"colorScheme"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"light"},{"type":"literal","value":"dark"}]}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"locale"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"key","variant":"declaration","kind":1024,"type":{"type":"literal","value":"timeZone"}},{"name":"value","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}}]}},{"name":"GaugeStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"circular"},{"type":"literal","value":"circularCapacity"},{"type":"literal","value":"linear"},{"type":"literal","value":"linearCapacity"}]}},{"name":"GlobalEvent","variant":"declaration","kind":2097152,"children":[{"name":"onGlobalEvent","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"event","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"nativeEvent","variant":"declaration","kind":1024,"type":{"type":"reference","name":"GlobalEventPayload","package":"@expo/ui"}}]}}}],"type":{"type":"intrinsic","name":"void"}}]}}}]},{"name":"GlobalEventPayload","variant":"declaration","kind":2097152,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"eventName","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"}}]}}},{"name":"IndexViewStyleConfig","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Configuration for the "},{"kind":"code","text":"`indexViewStyle`"},{"kind":"text","text":" modifier."}]},"children":[{"name":"backgroundDisplayMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Translucent background behind the page indicator dots. Useful when the\ndots sit on top of dark or busy content."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'automatic'"}]}]},"type":{"type":"reference","name":"PageIndexBackgroundDisplayMode","package":"@expo/ui"}}]},{"name":"InterpolatingSpringAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"bounce","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Extra bounce to apply to the spring animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"damping","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The damping applied to the spring."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"initialVelocity","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The initial velocity of the animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"mass","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The mass attached to the spring."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"stiffness","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The stiffness of the spring."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"ListStyle","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"plain"},{"type":"literal","value":"inset"},{"type":"literal","value":"insetGrouped"},{"type":"literal","value":"grouped"},{"type":"literal","value":"sidebar"}]}},{"name":"ObservableState","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Observable state shared between JavaScript and native views (Jetpack Compose\non Android and SwiftUI on iOS)."}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/SharedObject.ts","qualifiedName":"SharedObject"},"name":"SharedObject","package":"expo-modules-core"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"onChange","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A single listener invoked on the native UI runtime whenever the value changes\n(after iOS "},{"kind":"code","text":"`didSet`"},{"kind":"text","text":" and Android's setter). Assigning replaces the previous\nlistener; assign "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to clear. The initial value does not fire "},{"kind":"code","text":"`onChange`"},{"kind":"text","text":".\n\nThe callback must be a worklet so it can run synchronously on the UI thread.\nAttach it inside "},{"kind":"code","text":"`useEffect`"},{"kind":"text","text":" and clear it in the cleanup so the listener\nlifecycle matches the component lifecycle."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst state = useNativeState(0);\n\nuseEffect(() => {\n state.onChange = (value) => {\n 'worklet';\n console.log('changed to', value);\n };\n}, []);\n```"}]}]},"type":{"type":"union","types":[{"type":"indexedAccess","indexType":{"type":"literal","value":"listener"},"objectType":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"listener","variant":"declaration","kind":2048,"signatures":[{"name":"listener","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"intrinsic","name":"void"}}]}]}}},{"type":"literal","value":null}]}},{"name":"value","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The current value.\n\nWrites from a UI worklet are synchronous and immediately readable. Writes\nfrom the JS thread are scheduled to the UI thread asynchronously, the new value is not readable until the update has been\napplied. Prefer writing from a worklet when you need synchronous updates"}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}},{"name":"get","variant":"declaration","kind":2048,"signatures":[{"name":"get","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Reads the current value. A React Compiler compliant alternative to reading "},{"kind":"code","text":"`.value`"}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}]},{"name":"set","variant":"declaration","kind":2048,"signatures":[{"name":"set","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Writes a new value. A React Compiler-compliant alternative to assigning "},{"kind":"code","text":"`.value`"}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"intrinsic","name":"void"}}]}]}}]}},{"name":"PageIndexBackgroundDisplayMode","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"always"},{"type":"literal","value":"never"},{"type":"literal","value":"interactive"}]}},{"name":"PageIndexDisplayMode","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"always"},{"type":"literal","value":"never"}]}},{"name":"PickerStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"inline"},{"type":"literal","value":"menu"},{"type":"literal","value":"navigationLink"},{"type":"literal","value":"palette"},{"type":"literal","value":"segmented"},{"type":"literal","value":"wheel"}]}},{"name":"PresentationBackgroundInteractionType","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Presentation background interaction type."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"enabled"},{"type":"literal","value":"disabled"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"detent","variant":"declaration","kind":1024,"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"enabledUpThrough"}}]}}]}},{"name":"PresentationDetent","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Presentation detent type for controlling sheet heights.\n- "},{"kind":"code","text":"`'medium'`"},{"kind":"text","text":": System medium height (approximately half screen)\n- "},{"kind":"code","text":"`'large'`"},{"kind":"text","text":": System large height (full screen)\n- "},{"kind":"code","text":"`{ fraction: number }`"},{"kind":"text","text":": Fraction of screen height (0-1, for example, 0.4 equals to 40% of screen)\n- "},{"kind":"code","text":"`{ height: number }`"},{"kind":"text","text":": Fixed height in points"}]},"type":{"type":"union","types":[{"type":"literal","value":"medium"},{"type":"literal","value":"large"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"fraction","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}]}},{"name":"ProgressViewStyleType","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"linear"},{"type":"literal","value":"circular"}]}},{"name":"Shape","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.roundedRectangle","package":"@expo/ui","qualifiedName":"__object.roundedRectangle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.capsule","package":"@expo/ui","qualifiedName":"__object.capsule"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.rectangle","package":"@expo/ui","qualifiedName":"__object.rectangle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.ellipse","package":"@expo/ui","qualifiedName":"__object.ellipse"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.circle","package":"@expo/ui","qualifiedName":"__object.circle"}}],"name":"ReturnType","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"ReturnType"},"typeArguments":[{"type":"query","queryType":{"type":"reference","name":"shapes.containerRelativeShape","package":"@expo/ui","qualifiedName":"__object.containerRelativeShape"}}],"name":"ReturnType","package":"typescript"}]}},{"name":"SpringAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"blendDuration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The duration over which to blend between animations (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"bounce","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Extra bounce to apply to the spring animation."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"dampingFraction","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The amount of damping applied to the spring's motion."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"response","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The spring's response time (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"SymbolEffect","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"AppearSymbolEffect"},"name":"AppearSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"BounceSymbolEffect"},"name":"BounceSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"BreatheSymbolEffect"},"name":"BreatheSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DisappearSymbolEffect"},"name":"DisappearSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DrawOffSymbolEffect"},"name":"DrawOffSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"DrawOnSymbolEffect"},"name":"DrawOnSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"PulseSymbolEffect"},"name":"PulseSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"RotateSymbolEffect"},"name":"RotateSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"ScaleSymbolEffect"},"name":"ScaleSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"VariableColorSymbolEffect"},"name":"VariableColorSymbolEffect","package":"@expo/ui"},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/symbolEffect.ts","qualifiedName":"WiggleSymbolEffect"},"name":"WiggleSymbolEffect","package":"@expo/ui"}]}},{"name":"SymbolEffectOptions","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Animation options for a symbol effect."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [Apple documentation](https://developer.apple.com/documentation/symbols/symboleffectoptions)."}]}]},"children":[{"name":"repeat","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"How the effect repeats. Omit for the effect's natural cadence.\n- "},{"kind":"code","text":"`'nonRepeating'`"},{"kind":"text","text":" โ€” play exactly once.\n- "},{"kind":"code","text":"`'continuous'`"},{"kind":"text","text":" โ€” smooth, indefinite repetition (iOS 18+).\n- "},{"kind":"code","text":"`{ count?, delay? }`"},{"kind":"text","text":" โ€” periodic repetition with optional count and delay in seconds (iOS 18+)."}]},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"nonRepeating"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"count","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"delay","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}]}},{"name":"speed","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Animation speed multiplier (1.0 = default)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"TabViewStyleConfig","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Configuration for the "},{"kind":"code","text":"`tabViewStyle`"},{"kind":"text","text":" modifier.\n\n - "},{"kind":"code","text":"`'page'`"},{"kind":"text","text":" โ€” swipeable horizontal pager with optional dot indicators.\n - "},{"kind":"code","text":"`'automatic'`"},{"kind":"text","text":" โ€” SwiftUI's default tab-bar style.\n - "},{"kind":"code","text":"`'sidebarAdaptable'`"},{"kind":"text","text":" โ€” iOS 18+. Sidebar on iPad/Mac, bottom bar on\n iPhone."}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"indexDisplayMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Visibility of the page indicator dots. Only meaningful for the page style."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'automatic'"}]}]},"type":{"type":"reference","name":"PageIndexDisplayMode","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"page"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"automatic"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"sidebarAdaptable"}}]}}]}},{"name":"TimingAnimationParams","variant":"declaration","kind":2097152,"children":[{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Total animation duration (in seconds)."}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"UnitPointValue","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"literal","value":"zero"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"top"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"leading"},{"type":"literal","value":"center"},{"type":"literal","value":"trailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottom"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"Animation","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"Built-in animation presets for the "},{"kind":"code","text":"`animation`"},{"kind":"text","text":" modifier.\nPresets:\n- Timing presets ("},{"kind":"code","text":"`easeInOut`"},{"kind":"text","text":", "},{"kind":"code","text":"`easeIn`"},{"kind":"text","text":", "},{"kind":"code","text":"`easeOut`"},{"kind":"text","text":", "},{"kind":"code","text":"`linear`"},{"kind":"text","text":") accept\n["},{"kind":"code","text":"`TimingAnimationParams`"},{"kind":"text","text":"](#timinganimationparams).\n- "},{"kind":"code","text":"`spring`"},{"kind":"text","text":" accepts ["},{"kind":"code","text":"`SpringAnimationParams`"},{"kind":"text","text":"](#springanimationparams).\n- "},{"kind":"code","text":"`interpolatingSpring`"},{"kind":"text","text":" accepts\n["},{"kind":"code","text":"`InterpolatingSpringAnimationParams`"},{"kind":"text","text":"](#interpolatingspringanimationparams).\n- Chaining returns ["},{"kind":"code","text":"`ChainableAnimationType`"},{"kind":"text","text":"](#chainableanimationtype)."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Host, VStack } from '@expo/ui/swift-ui';\nimport { animation, Animation } from '@expo/ui/swift-ui/modifiers';\n\nfunction Example() {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n \n \n //...\n \n \n );\n}\n```"}]},{"tag":"@hideType","content":[]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"default","variant":"declaration","kind":1024,"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"},"defaultValue":"..."},{"name":"easeIn","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"easeInOut","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"easeOut","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"interpolatingSpring","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"InterpolatingSpringAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"linear","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"TimingAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."},{"name":"spring","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","name":"SpringAnimationParams","package":"@expo/ui"}}],"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}}]}},"defaultValue":"..."}]}},"defaultValue":"..."},{"name":"shapes","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"Shape builders for modifiers that accept shapes, such as "},{"kind":"code","text":"`background`"},{"kind":"text","text":" and "},{"kind":"code","text":"`containerShape`"},{"kind":"text","text":".\n\nShapes: "},{"kind":"code","text":"`roundedRectangle`"},{"kind":"text","text":", "},{"kind":"code","text":"`capsule`"},{"kind":"text","text":", "},{"kind":"code","text":"`rectangle`"},{"kind":"text","text":", "},{"kind":"code","text":"`ellipse`"},{"kind":"text","text":", "},{"kind":"code","text":"`circle`"},{"kind":"text","text":", "},{"kind":"code","text":"`containerRelativeShape`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { background, shapes } from '@expo/ui/swift-ui/modifiers';\nimport { Text, Host } from '@expo/ui/swift-ui';\n\nfunction Example() {\n return (\n \n \n Hello, world!\n \n \n );\n}\n```"}]},{"tag":"@hideType","content":[]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"capsule","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"}]}}]}}}],"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.roundedCornerStyle"},{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'capsule'"}]}}}]}},"defaultValue":"..."},{"name":"circle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'circle'"}]}}}]}},"defaultValue":"..."},{"name":"containerRelativeShape","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'containerRelativeShape'"}]}}}]}},"defaultValue":"..."},{"name":"ellipse","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'ellipse'"}]}}}]}},"defaultValue":"..."},{"name":"rectangle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'rectangle'"}]}}}]}},"defaultValue":"..."},{"name":"roundedRectangle","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"cornerSize","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"}]}}]}}}],"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.cornerRadius"},{"name":"cornerSize","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.cornerSize"},{"name":"roundedCornerStyle","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"continuous"},{"type":"literal","value":"circular"},{"type":"intrinsic","name":"undefined"}]},"defaultValue":"params.roundedCornerStyle"},{"name":"shape","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"},"defaultValue":"'roundedRectangle'"}]}}}]}},"defaultValue":"..."}]}},"defaultValue":"..."},{"name":"accessibilityHidden","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityHidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Marks the view as decoratively-named so VoiceOver and other assistive\ntechnologies skip it during element traversal. Useful for hero icons or\npresentational imagery that's already described by adjacent text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityhidden(_:))."}]}]},"parameters":[{"name":"hidden","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be hidden from accessibility. Defaults to "},{"kind":"code","text":"`true`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityHint","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityHint","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility hint for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityhint(_:))."}]}]},"parameters":[{"name":"hint","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility hint."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityIdentifier","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityIdentifier","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets an accessibility identifier for the view.\n\nUnlike "},{"kind":"code","text":"`accessibilityLabel`"},{"kind":"text","text":", this value is for UI testing and is not visible\nto the user. UI testing tools such as XCUITest read it to locate the view, so\nprefer a stable, machine-readable identifier here."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityidentifier(_:))."}]}]},"parameters":[{"name":"identifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility identifier used for UI testing."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityInputLabels","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityInputLabels","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets alternative spoken phrases that Voice Control uses to refer to the view.\nEach label is read as a "},{"kind":"code","text":"`Text`"},{"kind":"text","text":" element on iOS. For example, an \"End\" button\nmight offer \"Hang up\" so users can trigger it by saying that phrase."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityinputlabels(_:))."}]}]},"parameters":[{"name":"inputLabels","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The spoken phrases that select the view."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityLabel","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityLabel","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility label for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilitylabel(_:))."}]}]},"parameters":[{"name":"label","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility label."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"accessibilityValue","variant":"declaration","kind":64,"signatures":[{"name":"accessibilityValue","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets accessibility value for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/accessibilityvalue(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The accessibility value."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"activityBackgroundTint","variant":"declaration","kind":64,"signatures":[{"name":"activityBackgroundTint","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background tint color for a Live Activity."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/activitybackgroundtint(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background tint color, or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to use the system default."}]},"type":{"type":"union","types":[{"type":"reference","name":"Color","package":"@expo/ui"},{"type":"literal","value":null}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"allowsTightening","variant":"declaration","kind":64,"signatures":[{"name":"allowsTightening","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets whether text in this view can compress the space between characters when necessary to fit text in a line"}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/allowstightening(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"animation","variant":"declaration","kind":64,"signatures":[{"name":"animation","variant":"signature","kind":4096,"parameters":[{"name":"animationObject","variant":"param","kind":32768,"type":{"type":"reference","name":"ChainableAnimationType","package":"@expo/ui"}},{"name":"animatedValue","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"boolean"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"aspectRatio","variant":"declaration","kind":64,"signatures":[{"name":"aspectRatio","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets aspect ratio constraint."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/aspectratio(_:contentmode:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Optional width/height aspect ratio and content mode."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"contentMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"fill"},{"type":"literal","value":"fit"}]}},{"name":"ratio","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"autocorrectionDisabled","variant":"declaration","kind":64,"signatures":[{"name":"autocorrectionDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables autocorrection for text input views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/autocorrectiondisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether autocorrection is disabled. Defaults to "},{"kind":"code","text":"`true`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"background","variant":"declaration","kind":64,"signatures":[{"name":"background","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/background(_:alignment:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"shape","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional shape to clip the background. If not provided, the background will fill the entire view."}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"backgroundOverlay","variant":"declaration","kind":64,"signatures":[{"name":"backgroundOverlay","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a background behind the view."}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Background color and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"badge","variant":"declaration","kind":64,"signatures":[{"name":"badge","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Generates a badge for the view from a localized string key."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/badge(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Text view to display as a badge. Set the value to nil to hide the badge."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"badgeProminence","variant":"declaration","kind":64,"signatures":[{"name":"badgeProminence","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The prominence to apply to badges associated with this environment."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/badgeprominence(_:))."}]}]},"parameters":[{"name":"badgeType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Select the type of badge"}]},"type":{"type":"union","types":[{"type":"literal","value":"standard"},{"type":"literal","value":"increased"},{"type":"literal","value":"decreased"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"blur","variant":"declaration","kind":64,"signatures":[{"name":"blur","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies blur to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/blur(radius:opaque:))."}]}]},"parameters":[{"name":"radius","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The blur radius."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"bold","variant":"declaration","kind":64,"signatures":[{"name":"bold","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes text bold.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", it works on all iOS/tvOS versions. When used on regular views, it requires iOS 16.0+/tvOS 16.0+."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/bold())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"border","variant":"declaration","kind":64,"signatures":[{"name":"border","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a border to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/border(_:width:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The border parameters. Color and width."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"width","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"brightness","variant":"declaration","kind":64,"signatures":[{"name":"brightness","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the brightness of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/brightness(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Brightness adjustment (-1 to 1)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"buttonBorderShape","variant":"declaration","kind":64,"signatures":[{"name":"buttonBorderShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the border shape used by buttons within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/buttonbordershape(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The button border shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"circle"},{"type":"literal","value":"automatic"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius, only used with "},{"kind":"code","text":"`'roundedRectangle'`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"buttonStyle","variant":"declaration","kind":64,"signatures":[{"name":"buttonStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the button style for button views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/buttonstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The button style. "},{"kind":"code","text":"`'glass'`"},{"kind":"text","text":" and "},{"kind":"code","text":"`'glassProminent'`"},{"kind":"text","text":" are available on iOS 26+ and tvOS 26+ only."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"bordered"},{"type":"literal","value":"borderedProminent"},{"type":"literal","value":"borderless"},{"type":"literal","value":"glass"},{"type":"literal","value":"glassProminent"},{"type":"literal","value":"plain"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"clipped","variant":"declaration","kind":64,"signatures":[{"name":"clipped","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clips content to bounds."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/clipped(antialiased:))."}]}]},"parameters":[{"name":"clipped","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to clip content."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"clipShape","variant":"declaration","kind":64,"signatures":[{"name":"clipShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clips the view to a specific shape."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/clipshape(_:style:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The clipping shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius for rounded rectangle (default: 8)"}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"colorInvert","variant":"declaration","kind":64,"signatures":[{"name":"colorInvert","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Inverts the colors of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/colorinvert())."}]}]},"parameters":[{"name":"inverted","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to invert colors."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerBackground","variant":"declaration","kind":64,"signatures":[{"name":"containerBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the container background of the enclosing container using a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/containerbackground(_:for:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The color to set as the background of the container."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"container","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of container to apply the background to."}]},"type":{"type":"reference","name":"ContainerBackgroundPlacement","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerRelativeFrame","variant":"declaration","kind":64,"signatures":[{"name":"containerRelativeFrame","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Positions this view within an invisible frame with a size relative to the nearest container."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/containerRelativeFrame(_:alignment:))."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The content relative frame parameters: "},{"kind":"code","text":"`axes`"},{"kind":"text","text":", "},{"kind":"code","text":"`count`"},{"kind":"text","text":", "},{"kind":"code","text":"`span`"},{"kind":"text","text":", "},{"kind":"code","text":"`spacing`"},{"kind":"text","text":" and "},{"kind":"code","text":"`alignment`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"axes","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"both"}]}},{"name":"count","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"spacing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"span","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"containerShape","variant":"declaration","kind":64,"signatures":[{"name":"containerShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the container shape for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/containershape(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A shape configuration from the shapes API"}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contentShape","variant":"declaration","kind":64,"signatures":[{"name":"contentShape","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Defines the content shape for hit-testing purposes.\n\nThis modifier is essential for making entire view areas (including "},{"kind":"code","text":"`Spacer`"},{"kind":"text","text":" or empty space)\ninteractive. Without it, only visible elements like "},{"kind":"code","text":"`Text`"},{"kind":"text","text":" or "},{"kind":"code","text":"`Image`"},{"kind":"text","text":" respond to tap gestures."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { HStack, List, Section, Spacer, Text } from \"@expo/ui/swift-ui\";\nimport { contentShape, onTapGesture } from \"@expo/ui/swift-ui/modifiers\";\nimport { shapes } from \"@expo/ui/swift-ui/modifiers\";\n\nfunction InteractiveRow() {\n return (\n \n
\n console.log(\"Row tapped!\"))\n ]}\n >\n Label\n \n Value\n \n
\n
\n );\n}\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contentshape(_:eofill:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A shape configuration from the shapes API (rectangle, circle, capsule, ellipse, roundedRectangle)."}]},"type":{"type":"reference","name":"Shape","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contentTransition","variant":"declaration","kind":64,"signatures":[{"name":"contentTransition","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the content transition type for a view.\nUseful for animating changes in text content, especially numeric text.\nUse with the ["},{"kind":"code","text":"`animation`"},{"kind":"text","text":"](#animationanimationobject-animatedvalue) modifier to animate the transition when the content changes."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n {count.toString()}\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contenttransition(_:))."}]}]},"parameters":[{"name":"transitionType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of content transition."}]},"type":{"type":"union","types":[{"type":"literal","value":"opacity"},{"type":"literal","value":"identity"},{"type":"literal","value":"numericText"},{"type":"literal","value":"interpolate"}]}},{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional parameters."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"countsDown","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the numeric text counts down."}]},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"contrast","variant":"declaration","kind":64,"signatures":[{"name":"contrast","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the contrast of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contrast(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Contrast multiplier (0 to infinity, 1 = normal)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"controlSize","variant":"declaration","kind":64,"signatures":[{"name":"controlSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the size of controls within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/controlsize(_:))."}]}]},"parameters":[{"name":"size","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The control size."}]},"type":{"type":"union","types":[{"type":"literal","value":"small"},{"type":"literal","value":"mini"},{"type":"literal","value":"regular"},{"type":"literal","value":"large"},{"type":"literal","value":"extraLarge"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"cornerRadius","variant":"declaration","kind":64,"signatures":[{"name":"cornerRadius","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies corner radius to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/cornerradius(_:antialiased:))."}]}]},"parameters":[{"name":"radius","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The corner radius value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createModifier","variant":"declaration","kind":64,"signatures":[{"name":"createModifier","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Factory function to create modifier configuration objects.\nThis is used by all built-in modifier functions and can be used by 3rd party libraries to create custom modifiers."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A "},{"kind":"code","text":"`ModifierConfig`"},{"kind":"text","text":" object that can be passed in the "},{"kind":"code","text":"`modifiers`"},{"kind":"text","text":" prop array."}]},{"tag":"@example","content":[{"kind":"code","text":"```ts\n// In a 3rd party package\nimport { createModifier } from '@expo/ui/swift-ui/modifiers';\n\nexport const blurEffect = (params: { radius: number; style?: string }) =>\n createModifier('blurEffect', params);\n```"}]}]},"parameters":[{"name":"type","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The modifier type string that maps to a registered native modifier."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Additional parameters to pass to the modifier."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createModifierWithEventListener","variant":"declaration","kind":64,"signatures":[{"name":"createModifierWithEventListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Creates a modifier with an event listener."}]},"parameters":[{"name":"type","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}},{"name":"eventListener","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"args","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"params","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"createViewModifierEventListener","variant":"declaration","kind":64,"signatures":[{"name":"createViewModifierEventListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Create an event listener for a view modifier."}]},"parameters":[{"name":"modifiers","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An array of modifier configs to extract event listeners from."}]},"type":{"type":"array","elementType":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}}],"type":{"type":"reference","name":"GlobalEvent","package":"@expo/ui"}}]},{"name":"datePickerStyle","variant":"declaration","kind":64,"signatures":[{"name":"datePickerStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the date picker."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/datepickerstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the date picker."}]},"type":{"type":"reference","name":"DatePickerStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"defaultScrollAnchor","variant":"declaration","kind":64,"signatures":[{"name":"defaultScrollAnchor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the default anchor point for a scroll view's content."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 14.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/defaultscrollanchor(_:))."}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The anchor point for initial scroll position and content size changes, or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to reset."}]},"type":{"type":"union","types":[{"type":"reference","name":"UnitPointValue","package":"@expo/ui"},{"type":"literal","value":null}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"defaultScrollAnchorForRole","variant":"declaration","kind":64,"signatures":[{"name":"defaultScrollAnchorForRole","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the default anchor point for a scroll view for a specific role.\nPass "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to opt out of a specific role while keeping anchors for other roles."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/defaultscrollanchor(_:for:))."}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The anchor point, or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" to opt out of this role."}]},"type":{"type":"union","types":[{"type":"reference","name":"UnitPointValue","package":"@expo/ui"},{"type":"literal","value":null}]}},{"name":"role","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The scroll anchor role: "},{"kind":"code","text":"`'initialOffset'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'sizeChanges'`"},{"kind":"text","text":", or "},{"kind":"code","text":"`'alignment'`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"initialOffset"},{"type":"literal","value":"sizeChanges"},{"type":"literal","value":"alignment"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"deleteDisabled","variant":"declaration","kind":64,"signatures":[{"name":"deleteDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables the delete action for a view in a list.\nApply to items within a "},{"kind":"code","text":"`ForEach`"},{"kind":"text","text":" to prevent them from being deleted."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/deletedisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether deletion should be disabled"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"disabled","variant":"declaration","kind":64,"signatures":[{"name":"disabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables or enables a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/disabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be disabled."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"dynamicTypeSize","variant":"declaration","kind":64,"signatures":[{"name":"dynamicTypeSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets or constrains the Dynamic Type size within the view, overriding the\nvalue inherited from the system.\n\nFour variants matching SwiftUI's "},{"kind":"code","text":"`dynamicTypeSize(_:)`"},{"kind":"text","text":":\n- "},{"kind":"code","text":"`dynamicTypeSize('large')`"},{"kind":"text","text":" โ€” fixes the Dynamic Type size to a single value\n- "},{"kind":"code","text":"`dynamicTypeSize({ max: 'accessibility3' })`"},{"kind":"text","text":" โ€” caps growth at a ceiling ("},{"kind":"code","text":"`...accessibility3`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large' })`"},{"kind":"text","text":" โ€” sets a floor ("},{"kind":"code","text":"`large...`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large', max: 'accessibility3' })`"},{"kind":"text","text":" โ€” clamps to a range ("},{"kind":"code","text":"`large...accessibility3`"},{"kind":"text","text":")\n\n"},{"kind":"code","text":"`min`"},{"kind":"text","text":" and "},{"kind":"code","text":"`max`"},{"kind":"text","text":" are independent: pass either or both. Set it on a "},{"kind":"code","text":"``"},{"kind":"text","text":" to\ncascade the constraint to every descendant through the SwiftUI environment.\nKeep "},{"kind":"code","text":"`min`"},{"kind":"text","text":" at or below "},{"kind":"code","text":"`max`"},{"kind":"text","text":", or the range traps natively, like SwiftUI.\nPer Apple's guidance, prefer capping at an accessibility size over disabling\nDynamic Type entirely."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Cap how large text in a tight layout can grow\n...\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/dynamictypesize(_:))."}]}]},"parameters":[{"name":"size","variant":"param","kind":32768,"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"dynamicTypeSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets or constrains the Dynamic Type size within the view, overriding the\nvalue inherited from the system.\n\nFour variants matching SwiftUI's "},{"kind":"code","text":"`dynamicTypeSize(_:)`"},{"kind":"text","text":":\n- "},{"kind":"code","text":"`dynamicTypeSize('large')`"},{"kind":"text","text":" โ€” fixes the Dynamic Type size to a single value\n- "},{"kind":"code","text":"`dynamicTypeSize({ max: 'accessibility3' })`"},{"kind":"text","text":" โ€” caps growth at a ceiling ("},{"kind":"code","text":"`...accessibility3`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large' })`"},{"kind":"text","text":" โ€” sets a floor ("},{"kind":"code","text":"`large...`"},{"kind":"text","text":")\n- "},{"kind":"code","text":"`dynamicTypeSize({ min: 'large', max: 'accessibility3' })`"},{"kind":"text","text":" โ€” clamps to a range ("},{"kind":"code","text":"`large...accessibility3`"},{"kind":"text","text":")\n\n"},{"kind":"code","text":"`min`"},{"kind":"text","text":" and "},{"kind":"code","text":"`max`"},{"kind":"text","text":" are independent: pass either or both. Set it on a "},{"kind":"code","text":"``"},{"kind":"text","text":" to\ncascade the constraint to every descendant through the SwiftUI environment.\nKeep "},{"kind":"code","text":"`min`"},{"kind":"text","text":" at or below "},{"kind":"code","text":"`max`"},{"kind":"text","text":", or the range traps natively, like SwiftUI.\nPer Apple's guidance, prefer capping at an accessibility size over disabling\nDynamic Type entirely."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Cap how large text in a tight layout can grow\n...\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/dynamictypesize(_:))."}]}]},"parameters":[{"name":"range","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"DynamicTypeSizeValue","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"environment","variant":"declaration","kind":64,"signatures":[{"name":"environment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a SwiftUI environment value."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/environment(_:_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"EnvironmentConfig","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"environment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a SwiftUI environment value."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/environment(_:_:))."}]}]},"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"literal","value":"colorScheme"},{"type":"literal","value":"editMode"},{"type":"literal","value":"locale"},{"type":"literal","value":"timeZone"}]}},{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"fixedSize","variant":"declaration","kind":64,"signatures":[{"name":"fixedSize","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls fixed size behavior."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/fixedsize())."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the view should use its ideal width or height."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"vertical","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"font","variant":"declaration","kind":64,"signatures":[{"name":"font","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the font properties of a view.\n\nPass "},{"kind":"code","text":"`textStyle`"},{"kind":"text","text":" to scale with the user's Dynamic Type setting. Combine\nit with "},{"kind":"code","text":"`family`"},{"kind":"text","text":" to scale a custom font."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Scales with Dynamic Type\nHello\n\n// Custom font that scales relative to the body text style\nHi\n\n// Fixed-size system font (no Dynamic Type scaling)\nStatic\n```"}]},{"tag":"@see","content":[{"kind":"text","text":"Official SwiftUI documentation for ["},{"kind":"code","text":"`system(_:design:weight:)`"},{"kind":"text","text":"](https://developer.apple.com/documentation/swiftui/font/system(_:design:weight:)), and ["},{"kind":"code","text":"`custom(_:size:relativeTo:)`"},{"kind":"text","text":"](https://developer.apple.com/documentation/swiftui/font/custom(_:size:relativeto:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"design","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font design. Applied when no "},{"kind":"code","text":"`family`"},{"kind":"text","text":" is provided. "},{"kind":"code","text":"`Font.custom`"},{"kind":"text","text":" always uses the embedded font's own design."}]},"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"rounded"},{"type":"literal","value":"serif"},{"type":"literal","value":"monospaced"}]}},{"name":"family","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Custom font family name."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"size","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font size in points. Ignored when only "},{"kind":"code","text":"`textStyle`"},{"kind":"text","text":" is set."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"17"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"textStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"SwiftUI text style. When set, the resulting font scales with the user's\nDynamic Type setting."}]},"type":{"type":"union","types":[{"type":"literal","value":"largeTitle"},{"type":"literal","value":"title"},{"type":"literal","value":"title2"},{"type":"literal","value":"title3"},{"type":"literal","value":"headline"},{"type":"literal","value":"subheadline"},{"type":"literal","value":"body"},{"type":"literal","value":"callout"},{"type":"literal","value":"footnote"},{"type":"literal","value":"caption"},{"type":"literal","value":"caption2"}]}},{"name":"weight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Font weight."}]},"type":{"type":"union","types":[{"type":"literal","value":"light"},{"type":"literal","value":"bold"},{"type":"literal","value":"black"},{"type":"literal","value":"regular"},{"type":"literal","value":"ultraLight"},{"type":"literal","value":"thin"},{"type":"literal","value":"medium"},{"type":"literal","value":"semibold"},{"type":"literal","value":"heavy"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"foregroundColor","variant":"declaration","kind":64,"signatures":[{"name":"foregroundColor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the foreground color/tint of a view."}],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"Use "},{"kind":"code","text":"`foregroundStyle`"},{"kind":"text","text":" instead."}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/foregroundcolor(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The foreground color (hex string)."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"foregroundStyle","variant":"declaration","kind":64,"signatures":[{"name":"foregroundStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the foreground style of a view with comprehensive styling options.\n\nReplaces the deprecated "},{"kind":"code","text":"`foregroundColor`"},{"kind":"text","text":" modifier with enhanced capabilities including\ncolors, gradients, and semantic hierarchical styles that adapt to system appearance."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Simple usage\nRed Text\n\n// Adaptive hierarchical styling\n\n Supporting Text\n\n\n// Linear gradient\n\n Gradient Text\n\n```"}]},{"tag":"@returns","content":[{"kind":"text","text":"A view modifier that applies the specified foreground style"}]},{"tag":"@since","content":[{"kind":"text","text":"iOS 15.0+ (hierarchical quinary requires iOS 16.0+)"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/foregroundstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The foreground style configuration. Can be:\n\n**Simple Color ("},{"kind":"code","text":"`Color`"},{"kind":"text","text":"):**\n- Hex colors: "},{"kind":"code","text":"`'#FF0000'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#RGB'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#RRGGBB'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'#AARRGGBB'`"},{"kind":"text","text":"\n- Named colors: "},{"kind":"code","text":"`'red'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'blue'`"},{"kind":"text","text":", "},{"kind":"code","text":"`'green'`"},{"kind":"text","text":", and so on.\n- React Native color values like "},{"kind":"code","text":"`PlatformColor('label')`"},{"kind":"text","text":"\n\n**Explicit Color Object:**\n"},{"kind":"code","text":"```ts\n{ type: 'color', color: PlatformColor('label') }\n```"},{"kind":"text","text":"\n\n**Hierarchical Styles (Semantic):**\nAuto-adapting semantic styles that respond to light/dark mode and accessibility settings:\n"},{"kind":"code","text":"```ts\n{ type: 'hierarchical', style: 'primary' } // Most prominent (main content, headlines)\n{ type: 'hierarchical', style: 'secondary' } // Supporting text, subheadlines\n{ type: 'hierarchical', style: 'tertiary' } // Less important text, captions\n{ type: 'hierarchical', style: 'quaternary' } // Subtle text, disabled states\n{ type: 'hierarchical', style: 'quinary' } // Most subtle (iOS 16+, fallback to quaternary)\n```"},{"kind":"text","text":"\n\n**Linear Gradient:**\n"},{"kind":"code","text":"```ts\n{\n type: 'linearGradient',\n colors: [PlatformColor('systemPink'), '#0000FF', '#00FF00'],\n startPoint: { x: 0, y: 0 }, // Top-left\n endPoint: { x: 1, y: 1 } // Bottom-right\n}\n```"},{"kind":"text","text":"\n\n**Radial Gradient:**\n"},{"kind":"code","text":"```ts\n{\n type: 'radialGradient',\n colors: [PlatformColor('systemPink'), '#0000FF'],\n center: { x: 0.5, y: 0.5 }, // Center of view\n startRadius: 0, // Inner radius\n endRadius: 100 // Outer radius\n}\n```"},{"kind":"text","text":"\n\n**Angular Gradient (Conic):**\n"},{"kind":"code","text":"```ts\n{\n type: 'angularGradient',\n colors: [PlatformColor('systemPink'), '#00FF00', '#0000FF'],\n center: { x: 0.5, y: 0.5 } // Rotation center\n}\n```"}]},"type":{"type":"union","types":[{"type":"reference","name":"Color","package":"@expo/ui"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"color"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"style","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"primary"},{"type":"literal","value":"secondary"},{"type":"literal","value":"tertiary"},{"type":"literal","value":"quaternary"},{"type":"literal","value":"quinary"}]}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"hierarchical"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"endPoint","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"startPoint","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"linearGradient"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"center","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"endRadius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"startRadius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"radialGradient"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"center","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"colors","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"Color","package":"@expo/ui"}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"angularGradient"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"frame","variant":"declaration","kind":64,"signatures":[{"name":"frame","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the frame properties of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/frame(width:height:alignment:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The frame parameters. Width, height, minWidth, maxWidth, minHeight, maxHeight, idealWidth, idealHeight and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"}]}},{"name":"height","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"idealHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"idealWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"maxHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"maxWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"minHeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"minWidth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gaugeStyle","variant":"declaration","kind":64,"signatures":[{"name":"gaugeStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the gauge."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/gaugestyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the gauge."}]},"type":{"type":"reference","name":"GaugeStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"glassEffect","variant":"declaration","kind":64,"signatures":[{"name":"glassEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a glass effect to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/glasseffect(_:in:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The glass effect parameters. Variant, interactive, tint and shape."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"cornerRadius","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"glass","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"interactive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"tint","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"variant","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"clear"},{"type":"literal","value":"regular"},{"type":"literal","value":"identity"}]}}]}}},{"name":"shape","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"glassEffectId","variant":"declaration","kind":64,"signatures":[{"name":"glassEffectId","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Associates an identity value to Liquid Glass effects defined within a "},{"kind":"code","text":"`GlassEffectContainer`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/glasseffectid(_:in:))."}]}]},"parameters":[{"name":"id","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The id of the glass effect."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"namespaceId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The namespace id of the glass effect. Use Namespace component to create a namespace."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"grayscale","variant":"declaration","kind":64,"signatures":[{"name":"grayscale","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes a view grayscale."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/grayscale(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Grayscale amount (0 to 1)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellAnchor","variant":"declaration","kind":64,"signatures":[{"name":"gridCellAnchor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies a custom alignment anchor for a view that acts as a grid cell."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified anchor point to align its content."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 16+"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n// Using a preset anchor\n\n\n// Using a custom anchor point\n\n```"}]}]},"parameters":[{"name":"anchor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The unit point that defines how to align the view within the bounds of its grid cell."}]},"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"anchor","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"topLeading"},{"type":"literal","value":"topTrailing"},{"type":"literal","value":"bottomLeading"},{"type":"literal","value":"bottomTrailing"},{"type":"literal","value":"zero"}]}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"preset"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"points","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"custom"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellColumns","variant":"declaration","kind":64,"signatures":[{"name":"gridCellColumns","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Tells a view that acts as a cell in a grid to span the specified number of columns."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that occupies the specified number of columns in a grid row."}]}]},"parameters":[{"name":"count","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The number of columns that the view should consume when placed in a grid row."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridCellUnsizedAxes","variant":"declaration","kind":64,"signatures":[{"name":"gridCellUnsizedAxes","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Asks grid layouts not to offer the view extra size in the specified axes."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that doesnโ€™t ask an enclosing grid for extra size in one or more axes."}]}]},"parameters":[{"name":"axes","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The dimensions in which the grid shouldnโ€™t offer the view a share of any available space. This prevents a flexible view like a Spacer, Divider, or Color from defining the size of a row or column."}]},"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"gridColumnAlignment","variant":"declaration","kind":64,"signatures":[{"name":"gridColumnAlignment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Overrides the default horizontal alignment of the grid column that the view appears in."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified horizontal alignment, and that causes all cells in the same column of a grid to use the same alignment."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 16+"}]}]},"parameters":[{"name":"alignment","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The HorizontalAlignment guide to use for the grid column that the view appears in."}]},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"headerProminence","variant":"declaration","kind":64,"signatures":[{"name":"headerProminence","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the header prominence for this view."}]},"parameters":[{"name":"prominence","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The prominence to apply."}]},"type":{"type":"union","types":[{"type":"literal","value":"standard"},{"type":"literal","value":"increased"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"hidden","variant":"declaration","kind":64,"signatures":[{"name":"hidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Hides or shows a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/hidden(_:))."}]}]},"parameters":[{"name":"hidden","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether the view should be hidden."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"hueRotation","variant":"declaration","kind":64,"signatures":[{"name":"hueRotation","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a hue rotation to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/huerotation(_:))."}]}]},"parameters":[{"name":"angle","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Hue rotation angle in degrees."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"id","variant":"declaration","kind":64,"signatures":[{"name":"id","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Attaches a stable identifier to a view so it can be referenced by scroll target bindings.\nUse with "},{"kind":"code","text":"`scrollTargetLayout()`"},{"kind":"text","text":" on the containing stack and the "},{"kind":"code","text":"`scrollPosition`"},{"kind":"text","text":" modifier on a scrollable container."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/id(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"String identifier matched by "},{"kind":"code","text":"`scrollPosition`"},{"kind":"text","text":"'s observable state."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"ignoreSafeArea","variant":"declaration","kind":64,"signatures":[{"name":"ignoreSafeArea","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Allows a view to ignore safe area constraints."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ignoressafearea(_:edges:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The safe area regions to ignore and the edges to expand into."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"edges","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"all"}]}},{"name":"regions","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"container"},{"type":"literal","value":"all"},{"type":"literal","value":"keyboard"}]}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"indexViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"indexViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the page index view inside a "},{"kind":"code","text":"`TabView`"},{"kind":"text","text":". SwiftUI only\nships a "},{"kind":"code","text":"`.page`"},{"kind":"text","text":" index view style, so no style selector is exposed."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/indexviewstyle(_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"IndexViewStyleConfig","package":"@expo/ui"},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"interactiveDismissDisabled","variant":"declaration","kind":64,"signatures":[{"name":"interactiveDismissDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables interactive dismissal of a sheet."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/interactivedismissdisabled(_:))."}]}]},"parameters":[{"name":"isDisabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether interactive dismiss is disabled (default: true)."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"italic","variant":"declaration","kind":64,"signatures":[{"name":"italic","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Makes text italic.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", it works on all iOS/tvOS versions. When used on regular views, it requires iOS 16.0+/tvOS 16.0+."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/italic())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"kerning","variant":"declaration","kind":64,"signatures":[{"name":"kerning","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the spacing, or kerning, between characters for the text in this view."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/kerning(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"keyboardType","variant":"declaration","kind":64,"signatures":[{"name":"keyboardType","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the keyboard type for text input views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/keyboardtype(_:))."}]}]},"parameters":[{"name":"keyboardType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The type of keyboard to display."}]},"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"email-address"},{"type":"literal","value":"numeric"},{"type":"literal","value":"phone-pad"},{"type":"literal","value":"ascii-capable"},{"type":"literal","value":"numbers-and-punctuation"},{"type":"literal","value":"url"},{"type":"literal","value":"name-phone-pad"},{"type":"literal","value":"decimal-pad"},{"type":"literal","value":"twitter"},{"type":"literal","value":"web-search"},{"type":"literal","value":"ascii-capable-number-pad"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"labelsHidden","variant":"declaration","kind":64,"signatures":[{"name":"labelsHidden","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Hides the labels of any controls contained within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/labelshidden())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"labelStyle","variant":"declaration","kind":64,"signatures":[{"name":"labelStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for labels within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/labelstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The label style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"iconOnly"},{"type":"literal","value":"titleAndIcon"},{"type":"literal","value":"titleOnly"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"layoutPriority","variant":"declaration","kind":64,"signatures":[{"name":"layoutPriority","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets layout priority for the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/layoutpriority(_:))."}]}]},"parameters":[{"name":"priority","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Layout priority value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineHeight","variant":"declaration","kind":64,"signatures":[{"name":"lineHeight","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the total line height for text in this view."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 26.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 26.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 26.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/lineheight(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The line height in points."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineLimit","variant":"declaration","kind":64,"signatures":[{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"parameters":[{"name":"limit","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"reservesSpace","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}},{"name":"lineLimit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the line limit for text in the view.\n\nFour variants matching SwiftUI:\n- "},{"kind":"code","text":"`lineLimit()`"},{"kind":"text","text":" โ€” no line limit (unlimited lines)\n- "},{"kind":"code","text":"`lineLimit(5)`"},{"kind":"text","text":" โ€” max 5 lines\n- "},{"kind":"code","text":"`lineLimit(5, { reservesSpace: true })`"},{"kind":"text","text":" โ€” max 5 lines, reserves height even when empty (iOS 16+, tvOS 16+)\n- "},{"kind":"code","text":"`lineLimit({ min: 3, max: 8 })`"},{"kind":"text","text":" โ€” range of 3 to 8 lines (iOS 16+, tvOS 16+)"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linelimit(_:))."}]}]},"parameters":[{"name":"range","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"max","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"min","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"lineSpacing","variant":"declaration","kind":64,"signatures":[{"name":"lineSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The distance in points between the bottom of one line fragment and the top of the next."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/linespacing(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The amount of space between the bottom of one line and the top of the next line in points. This value is always nonnegative. Otherwise, the default value will be used."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowBackground","variant":"declaration","kind":64,"signatures":[{"name":"listRowBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a row."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowbackground(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The row color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowInsets","variant":"declaration","kind":64,"signatures":[{"name":"listRowInsets","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an inset to the rows in a list."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowinsets(_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The inset to apply to the rows in a list."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowSeparator","variant":"declaration","kind":64,"signatures":[{"name":"listRowSeparator","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of the separator for a list row."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowseparator(_:edges:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility to apply."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}},{"name":"edges","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The edges where the separator visibility applies."}]},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"all"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listRowSpacing","variant":"declaration","kind":64,"signatures":[{"name":"listRowSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the vertical spacing between adjacent rows in a list."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listrowspacing(_:))."}]}]},"parameters":[{"name":"spacing","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The spacing value to use. When omitted, the default spacing is used."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listSectionMargins","variant":"declaration","kind":64,"signatures":[{"name":"listSectionMargins","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Allows a view to ignore safe area constraints."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/listsectionmargins(_:_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The margins to apply to the section in a list."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"edges","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"},{"type":"literal","value":"all"}]}},{"name":"length","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listSectionSpacing","variant":"declaration","kind":64,"signatures":[{"name":"listSectionSpacing","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the spacing between adjacent sections."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]}]},"parameters":[{"name":"spacing","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The spacing to apply."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":"default"},{"type":"literal","value":"compact"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"listStyle","variant":"declaration","kind":64,"signatures":[{"name":"listStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for a List view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/liststyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The list style to apply."}]},"type":{"type":"reference","name":"ListStyle","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"luminanceToAlpha","variant":"declaration","kind":64,"signatures":[{"name":"luminanceToAlpha","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a luminance to alpha effect to this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/luminanceToAlpha())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"mask","variant":"declaration","kind":64,"signatures":[{"name":"mask","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a mask to the view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/mask(_:))."}]}]},"parameters":[{"name":"shape","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The masking shape."}]},"type":{"type":"union","types":[{"type":"literal","value":"roundedRectangle"},{"type":"literal","value":"capsule"},{"type":"literal","value":"rectangle"},{"type":"literal","value":"ellipse"},{"type":"literal","value":"circle"},{"type":"literal","value":"containerRelativeShape"}]}},{"name":"cornerRadius","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Corner radius for rounded rectangle (default: "},{"kind":"code","text":"`8`"},{"kind":"text","text":")."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"matchedGeometryEffect","variant":"declaration","kind":64,"signatures":[{"name":"matchedGeometryEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a matched geometry effect to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/matchedgeometryeffect(id:in:properties:anchor:issource:))."}]}]},"parameters":[{"name":"id","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The id of the view."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"namespaceId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The namespace id of the view. Use Namespace component to create a namespace."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"menuActionDismissBehavior","variant":"declaration","kind":64,"signatures":[{"name":"menuActionDismissBehavior","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the dismissal behavior of menu actions."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/menuactiondismissbehavior(_:))."}]}]},"parameters":[{"name":"behavior","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The menu action dismiss behavior."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"disabled"},{"type":"literal","value":"enabled"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"minimumScaleFactor","variant":"declaration","kind":64,"signatures":[{"name":"minimumScaleFactor","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the minimum amount that text in this view scales down to fit in the available space.\n\nUse this modifier if the text you place in a view doesn't fit and it's okay if the text shrinks\nto accommodate. For example, a label with a minimum scale factor of "},{"kind":"code","text":"`0.5`"},{"kind":"text","text":" draws its text in a\nfont size as small as half of the actual font if needed."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/minimumscalefactor(_:))."}]}]},"parameters":[{"name":"factor","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A fraction between "},{"kind":"code","text":"`0`"},{"kind":"text","text":" and "},{"kind":"code","text":"`1`"},{"kind":"text","text":" (including "},{"kind":"code","text":"`0`"},{"kind":"text","text":" and "},{"kind":"code","text":"`1`"},{"kind":"text","text":") that specifies the amount\nof text to draw. For example, a value of "},{"kind":"code","text":"`0.5`"},{"kind":"text","text":" draws the text in a font size as small as half the\nactual font if needed."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"monospacedDigit","variant":"declaration","kind":64,"signatures":[{"name":"monospacedDigit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Modifies the fonts of all child views to use fixed-width digits, if possible, while leaving other characters proportionally spaced.\nWhen applied to "},{"kind":"code","text":"`Text`"},{"kind":"text","text":", modifies the text view's font to use fixed-width digits, while leaving other characters proportionally spaced."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/monospaceddigit())."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"moveDisabled","variant":"declaration","kind":64,"signatures":[{"name":"moveDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables the move action for a view in a list.\nApply to items within a "},{"kind":"code","text":"`ForEach`"},{"kind":"text","text":" to prevent them from being moved."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/movedisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether moving should be disabled"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"multilineTextAlignment","variant":"declaration","kind":64,"signatures":[{"name":"multilineTextAlignment","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"An alignment position for text along the horizontal axis."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/multilinetextalignment(_:))."}]}]},"parameters":[{"name":"alignment","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A value that you use to align multiple lines of text within a view."}]},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"offset","variant":"declaration","kind":64,"signatures":[{"name":"offset","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an offset (translation) to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/offset(x:y:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The offset parameters: "},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onAppear","variant":"declaration","kind":64,"signatures":[{"name":"onAppear","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an onAppear modifier that calls a function when the view appears."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onappear(perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when the view appears."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onDisappear","variant":"declaration","kind":64,"signatures":[{"name":"onDisappear","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an onDisappear modifier that calls a function when the view disappears."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ondisappear(perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when the view disappears."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onGeometryChange","variant":"declaration","kind":64,"signatures":[{"name":"onGeometryChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Calls the handler whenever the view's geometry changes, with its position and size.\n"},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":" are in the global coordinate space (relative to the window); all values are in points."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ongeometrychange(for:of:action:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function called with the new frame."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"frame","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onLongPressGesture","variant":"declaration","kind":64,"signatures":[{"name":"onLongPressGesture","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a long press gesture recognizer."}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when long pressed."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"minimumDuration","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Minimum duration for long press (default: 0.5s)"}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onScrollPhaseChange","variant":"declaration","kind":64,"signatures":[{"name":"onScrollPhaseChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fires when SwiftUI's scroll phase changes (e.g., the user begins dragging,\nthe scroll view starts decelerating, or scrolling settles to idle). The\nsecond argument is the scroll geometry sampled at the phase transition,\nuseful for reading the final offset on settle without subscribing to\nper-frame "},{"kind":"code","text":"`onScrollGeometryChange`"},{"kind":"text","text":".\n\nApply to a SwiftUI "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":" (and other scrollable views). On iOS below\n18.0 the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onscrollphasechange(_:))."}]}]},"parameters":[{"name":"callback","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"phase","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollPhase"},"name":"ScrollPhase","package":"@expo/ui"}},{"name":"geometry","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollGeometry"},"name":"ScrollGeometry","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onSubmit","variant":"declaration","kind":64,"signatures":[{"name":"onSubmit","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds an action to perform when the user submits a value to this view (e.g. pressing return in a text field)."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onsubmit(of:_:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call on submit."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"onTapGesture","variant":"declaration","kind":64,"signatures":[{"name":"onTapGesture","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a tap gesture recognizer."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/ontapgesture(count:perform:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Function to call when tapped."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"opacity","variant":"declaration","kind":64,"signatures":[{"name":"opacity","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the opacity of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/opacity(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Opacity value between 0 and 1."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"overlay","variant":"declaration","kind":64,"signatures":[{"name":"overlay","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Overlays another view on top."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/overlay(_:alignment:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Overlay color and alignment."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alignment","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"center"},{"type":"literal","value":"top"},{"type":"literal","value":"bottom"},{"type":"literal","value":"leading"},{"type":"literal","value":"trailing"}]}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"padding","variant":"declaration","kind":64,"signatures":[{"name":"padding","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets padding on a view.\nSupports individual edges or shorthand properties."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/padding(_:_:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The padding parameters: "},{"kind":"code","text":"`top`"},{"kind":"text","text":", "},{"kind":"code","text":"`bottom`"},{"kind":"text","text":", "},{"kind":"code","text":"`leading`"},{"kind":"text","text":", "},{"kind":"code","text":"`trailing`"},{"kind":"text","text":", "},{"kind":"code","text":"`horizontal`"},{"kind":"text","text":", "},{"kind":"code","text":"`vertical`"},{"kind":"text","text":" and "},{"kind":"code","text":"`all`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"all","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"horizontal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","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"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"pickerStyle","variant":"declaration","kind":64,"signatures":[{"name":"pickerStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the picker."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/pickerstyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the picker."}]},"type":{"type":"reference","name":"PickerStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationBackground","variant":"declaration","kind":64,"signatures":[{"name":"presentationBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the background of a sheet presentation. Paints the entire sheet chrome\nincluding the drag-indicator zone and home-indicator safe-area inset, which\na regular "},{"kind":"code","text":"`background()`"},{"kind":"text","text":" modifier cannot reach."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI\ndocumentation](https://developer.apple.com/documentation/swiftui/view/presentationbackground(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationBackgroundInteraction","variant":"declaration","kind":64,"signatures":[{"name":"presentationBackgroundInteraction","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls interaction with the content behind a sheet."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.4+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.4+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationbackgroundinteraction(_:))."}]}]},"parameters":[{"name":"interaction","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The background interaction behavior."}]},"type":{"type":"reference","name":"PresentationBackgroundInteractionType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationDetents","variant":"declaration","kind":64,"signatures":[{"name":"presentationDetents","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the available heights for a sheet presentation."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationdetents(_:selection:))."}]}]},"parameters":[{"name":"detents","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Array of detents the sheet can snap to."}]},"type":{"type":"array","elementType":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional settings for tracking the selected detent."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"onSelectionChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback fired when the user changes the active detent by dragging."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"detent","variant":"param","kind":32768,"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"selection","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The currently selected detent."}]},"type":{"type":"reference","name":"PresentationDetent","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"presentationDragIndicator","variant":"declaration","kind":64,"signatures":[{"name":"presentationDragIndicator","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of the drag indicator on a sheet."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/presentationdragindicator(_:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility of the drag indicator."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"progressViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"progressViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for the progress view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/progressviewstyle)."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The style for the progress view."}]},"type":{"type":"reference","name":"ProgressViewStyleType","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"refreshable","variant":"declaration","kind":64,"signatures":[{"name":"refreshable","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Marks a view as refreshable. Adds pull-to-refresh functionality."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/refreshable(action:))."}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Async function to call when refresh is triggered."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"resizable","variant":"declaration","kind":64,"signatures":[{"name":"resizable","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the mode by which SwiftUI resizes an image to fit its space."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/image/resizable(capinsets:resizingmode:))."}]}]},"parameters":[{"name":"capInsets","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Inset values that indicate a portion of the image that SwiftUI doesnโ€™t resize."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"leading","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"trailing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"resizingMode","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The mode by which SwiftUI resizes the image."}]},"type":{"type":"union","types":[{"type":"literal","value":"stretch"},{"type":"literal","value":"tile"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"rotation3DEffect","variant":"declaration","kind":64,"signatures":[{"name":"rotation3DEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a 3D rotation transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/rotation3deffect(_:axis:anchor:anchorz:perspective:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The rotation parameters: "},{"kind":"code","text":"`angle`"},{"kind":"text","text":" (in degrees), "},{"kind":"code","text":"`axis`"},{"kind":"text","text":" (x, y, z), and "},{"kind":"code","text":"`perspective`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"angle","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"axis","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"z","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"perspective","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"rotationEffect","variant":"declaration","kind":64,"signatures":[{"name":"rotationEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies rotation transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/rotationeffect(_:anchor:))."}]}]},"parameters":[{"name":"angle","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Rotation angle in degrees."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"saturation","variant":"declaration","kind":64,"signatures":[{"name":"saturation","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adjusts the saturation of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/saturation(_:))."}]}]},"parameters":[{"name":"amount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Saturation multiplier (0 to infinity, 1 = normal)."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scaleEffect","variant":"declaration","kind":64,"signatures":[{"name":"scaleEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies scaling transformation."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scaleeffect(_:anchor:))."}]}]},"parameters":[{"name":"scale","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Uniform scale factor (1.0 = normal size), or an object with separate "},{"kind":"code","text":"`x`"},{"kind":"text","text":" and "},{"kind":"code","text":"`y`"},{"kind":"text","text":" scale factors."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollContentBackground","variant":"declaration","kind":64,"signatures":[{"name":"scrollContentBackground","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the visibility of the background for scrollable views within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollcontentbackground(_:))."}]}]},"parameters":[{"name":"visible","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The visibility of the background."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollDisabled","variant":"declaration","kind":64,"signatures":[{"name":"scrollDisabled","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Disables or enables scrolling in scrollable views."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolldisabled(_:))."}]}]},"parameters":[{"name":"disabled","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether scrolling should be disabled (default: true)."}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"true"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollDismissesKeyboard","variant":"declaration","kind":64,"signatures":[{"name":"scrollDismissesKeyboard","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls how the keyboard is dismissed when scrolling."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolldismisseskeyboard(_:))."}]}]},"parameters":[{"name":"mode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The keyboard dismiss mode."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"never"},{"type":"literal","value":"interactively"},{"type":"literal","value":"immediately"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollIndicators","variant":"declaration","kind":64,"signatures":[{"name":"scrollIndicators","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls the visibility of scroll indicators for scrollable views.\nMirrors SwiftUI's "},{"kind":"code","text":"`scrollIndicators(_:axes:)`"},{"kind":"text","text":" modifier."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 16.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 16.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollindicators(_:axes:))."}]}]},"parameters":[{"name":"visibility","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Indicator visibility:\n- "},{"kind":"code","text":"`'automatic'`"},{"kind":"text","text":": platform-default behavior.\n- "},{"kind":"code","text":"`'visible'`"},{"kind":"text","text":": prefer showing indicators (may still be hidden by the system).\n- "},{"kind":"code","text":"`'hidden'`"},{"kind":"text","text":": prefer hiding indicators (may still be shown by the system).\n- "},{"kind":"code","text":"`'never'`"},{"kind":"text","text":": never show indicators."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"hidden"},{"type":"literal","value":"visible"},{"type":"literal","value":"never"}]}},{"name":"axes","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Axes to apply the visibility to. Defaults to "},{"kind":"code","text":"`'both'`"},{"kind":"text","text":"."}]},"type":{"type":"union","types":[{"type":"literal","value":"vertical"},{"type":"literal","value":"horizontal"},{"type":"literal","value":"both"}]},"defaultValue":"'both'"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollPosition","variant":"declaration","kind":64,"signatures":[{"name":"scrollPosition","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Binds the leading scroll target of a scrollable container to an observable native state.\n\nReading "},{"kind":"code","text":"`state.value`"},{"kind":"text","text":" returns the id of the leading scroll target. Writing to it scrolls\nthe container to the matching view. Pair with "},{"kind":"code","text":"`scrollTargetLayout()`"},{"kind":"text","text":" on the content\ncontainer and "},{"kind":"code","text":"`id()`"},{"kind":"text","text":" on each target. Works on "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":", "},{"kind":"code","text":"`LazyVStack`"},{"kind":"text","text":", "},{"kind":"code","text":"`LazyHStack`"},{"kind":"text","text":",\nand other scrollable containers.\n\nOn iOS below 17.0, the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"macos 14.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrollposition(id:anchor:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst activeID = useNativeState(null);\n\n console.log('leading target:', newID),\n }),\n ]}>\n \n {items.map((item) => (\n {item.text}\n ))}\n \n
\n```"}]}]},"parameters":[{"name":"state","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An "},{"kind":"code","text":"`ObservableState`"},{"kind":"text","text":" created with "},{"kind":"code","text":"`useNativeState`"},{"kind":"text","text":"."}]},"type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}],"name":"ObservableState","package":"@expo/ui"}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"anchor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Anchor used to pick which view drives the binding and to align\n programmatic scrolls. Maps to the "},{"kind":"code","text":"`anchor:`"},{"kind":"text","text":" parameter of SwiftUI's "},{"kind":"code","text":"`.scrollPosition(id:anchor:)`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"UnitPointValue","package":"@expo/ui"}},{"name":"onChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Fires on the JS thread whenever the leading scroll target changes."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"id","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}],"type":{"type":"intrinsic","name":"void"}}]}}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollTargetBehavior","variant":"declaration","kind":64,"signatures":[{"name":"scrollTargetBehavior","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the scroll snapping behavior for scrollable views.\nUse with "},{"kind":"code","text":"`scrollTargetLayout`"},{"kind":"text","text":" on the content container."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolltargetbehavior(_:))."}]}]},"parameters":[{"name":"behavior","variant":"param","kind":32768,"comment":{"summary":[{"kind":"code","text":"`'paging'`"},{"kind":"text","text":" for container-aligned snapping, "},{"kind":"code","text":"`'viewAligned'`"},{"kind":"text","text":" for view-aligned snapping."}]},"type":{"type":"union","types":[{"type":"literal","value":"paging"},{"type":"literal","value":"viewAligned"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"scrollTargetLayout","variant":"declaration","kind":64,"signatures":[{"name":"scrollTargetLayout","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Configures a layout container as a scroll target layout for view-aligned snapping.\nApply to "},{"kind":"code","text":"`VStack`"},{"kind":"text","text":" or "},{"kind":"code","text":"`HStack`"},{"kind":"text","text":" inside a "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolltargetlayout(isenabled:))."}]}]},"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"shadow","variant":"declaration","kind":64,"signatures":[{"name":"shadow","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Adds a shadow to a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/shadow(color:radius:x:y:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The shadow parameters: "},{"kind":"code","text":"`radius`"},{"kind":"text","text":", offset ("},{"kind":"code","text":"`x`"},{"kind":"text","text":", "},{"kind":"code","text":"`y`"},{"kind":"text","text":") and "},{"kind":"code","text":"`color`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"radius","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"x","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"strikethrough","variant":"declaration","kind":64,"signatures":[{"name":"strikethrough","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies a strikethrough to the text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/text/strikethrough(_:color:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Controls whether the strikethrough is visible ("},{"kind":"code","text":"`true`"},{"kind":"text","text":" to show, "},{"kind":"code","text":"`false`"},{"kind":"text","text":" to hide)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"isActive","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"pattern","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/index.ts","qualifiedName":"LinePattern"},"name":"LinePattern","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"submitLabel","variant":"declaration","kind":64,"signatures":[{"name":"submitLabel","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the label to display in the keyboard's return key. For example, "},{"kind":"code","text":"`'done'`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A view that uses the specified submit label."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 15+"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n```"}]}]},"parameters":[{"name":"submitLabel","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The label to display in the keyboard's return key."}]},"type":{"type":"union","types":[{"type":"literal","value":"join"},{"type":"literal","value":"search"},{"type":"literal","value":"done"},{"type":"literal","value":"continue"},{"type":"literal","value":"go"},{"type":"literal","value":"next"},{"type":"literal","value":"return"},{"type":"literal","value":"route"},{"type":"literal","value":"send"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"symbolEffect","variant":"declaration","kind":64,"signatures":[{"name":"symbolEffect","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an SF Symbol effect to a view."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 17.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 17.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/symbolEffect(_:options:value:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst trigger = useNativeState(0);\n\n```"}]}]},"parameters":[{"name":"effect","variant":"param","kind":32768,"type":{"type":"reference","name":"SymbolEffect","package":"@expo/ui"}},{"name":"args","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"isActive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indefinite effects: runs while "},{"kind":"code","text":"`state.value === true`"},{"kind":"text","text":". Default active when omitted."}]},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"ObservableState","package":"@expo/ui"}},{"name":"options","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"SymbolEffectOptions","package":"@expo/ui"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Discrete effects: the effect fires once each time this value changes."}]},"type":{"type":"reference","typeArguments":[{"type":"reference","name":"DiscreteSymbolEffectValue","package":"@expo/ui"}],"name":"ObservableState","package":"@expo/ui"}}]}},"defaultValue":"{}"}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tabViewStyle","variant":"declaration","kind":64,"signatures":[{"name":"tabViewStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for a "},{"kind":"code","text":"`TabView`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tabviewstyle(_:))."}]}]},"parameters":[{"name":"config","variant":"param","kind":32768,"type":{"type":"reference","name":"TabViewStyleConfig","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tag","variant":"declaration","kind":64,"signatures":[{"name":"tag","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a tag on a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tag(_:includeoptional:))."}]}]},"parameters":[{"name":"tag","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The tag to set on the view."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textCase","variant":"declaration","kind":64,"signatures":[{"name":"textCase","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets a transform for the case of the text contained in this view when displayed."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\"lowercase\""}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textcase(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"union","types":[{"type":"literal","value":"lowercase"},{"type":"literal","value":"uppercase"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textContentType","variant":"declaration","kind":64,"signatures":[{"name":"textContentType","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the text content type for input text, which the system uses to offer\nsuggestions (like autofill) while the user enters text."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 13.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textcontenttype(_:)-ufdv)."}]}]},"parameters":[{"name":"textContentType","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The semantic meaning of the text input area."}]},"type":{"type":"union","types":[{"type":"literal","value":"URL"},{"type":"literal","value":"namePrefix"},{"type":"literal","value":"name"},{"type":"literal","value":"nameSuffix"},{"type":"literal","value":"givenName"},{"type":"literal","value":"middleName"},{"type":"literal","value":"familyName"},{"type":"literal","value":"nickname"},{"type":"literal","value":"organizationName"},{"type":"literal","value":"jobTitle"},{"type":"literal","value":"location"},{"type":"literal","value":"fullStreetAddress"},{"type":"literal","value":"streetAddressLine1"},{"type":"literal","value":"streetAddressLine2"},{"type":"literal","value":"addressCity"},{"type":"literal","value":"addressCityAndState"},{"type":"literal","value":"addressState"},{"type":"literal","value":"postalCode"},{"type":"literal","value":"sublocality"},{"type":"literal","value":"countryName"},{"type":"literal","value":"username"},{"type":"literal","value":"password"},{"type":"literal","value":"newPassword"},{"type":"literal","value":"oneTimeCode"},{"type":"literal","value":"emailAddress"},{"type":"literal","value":"telephoneNumber"},{"type":"literal","value":"cellularEID"},{"type":"literal","value":"cellularIMEI"},{"type":"literal","value":"creditCardNumber"},{"type":"literal","value":"creditCardExpiration"},{"type":"literal","value":"creditCardExpirationMonth"},{"type":"literal","value":"creditCardExpirationYear"},{"type":"literal","value":"creditCardSecurityCode"},{"type":"literal","value":"creditCardType"},{"type":"literal","value":"creditCardName"},{"type":"literal","value":"creditCardGivenName"},{"type":"literal","value":"creditCardMiddleName"},{"type":"literal","value":"creditCardFamilyName"},{"type":"literal","value":"birthdate"},{"type":"literal","value":"birthdateDay"},{"type":"literal","value":"birthdateMonth"},{"type":"literal","value":"birthdateYear"},{"type":"literal","value":"dateTime"},{"type":"literal","value":"flightNumber"},{"type":"literal","value":"shipmentTrackingNumber"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textFieldStyle","variant":"declaration","kind":64,"signatures":[{"name":"textFieldStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the text field style for text field views."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textfieldstyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The text field style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"plain"},{"type":"literal","value":"roundedBorder"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textInputAutocapitalization","variant":"declaration","kind":64,"signatures":[{"name":"textInputAutocapitalization","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets how often the shift key in the keyboard is automatically enabled."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 15.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textinputautocapitalization(_:))."}]}]},"parameters":[{"name":"autocapitalization","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The autocapitalization behavior."}]},"type":{"type":"union","types":[{"type":"literal","value":"never"},{"type":"literal","value":"words"},{"type":"literal","value":"sentences"},{"type":"literal","value":"characters"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"textSelection","variant":"declaration","kind":64,"signatures":[{"name":"textSelection","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Controls whether people can select text within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/textselection(_:))."}]}]},"parameters":[{"name":"value","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Enable selection"}]},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"tint","variant":"declaration","kind":64,"signatures":[{"name":"tint","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the tint color of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/tint(_:))."}]}]},"parameters":[{"name":"color","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The tint color (hex string). For example, "},{"kind":"code","text":"`#FF0000`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"Color","package":"@expo/ui"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"toggleStyle","variant":"declaration","kind":64,"signatures":[{"name":"toggleStyle","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the style for toggles within this view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/togglestyle(_:))."}]}]},"parameters":[{"name":"style","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The toggle style."}]},"type":{"type":"union","types":[{"type":"literal","value":"automatic"},{"type":"literal","value":"switch"},{"type":"literal","value":"button"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"truncationMode","variant":"declaration","kind":64,"signatures":[{"name":"truncationMode","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the truncation mode for lines of text that are too long to fit in the available space."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/truncationmode(_:))."}]}]},"parameters":[{"name":"mode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The truncation mode that specifies where to truncate the text within the text view, if needed.\nYou can truncate at the beginning, middle, or end of the text view."}]},"type":{"type":"union","types":[{"type":"literal","value":"head"},{"type":"literal","value":"middle"},{"type":"literal","value":"tail"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"underline","variant":"declaration","kind":64,"signatures":[{"name":"underline","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Applies an underline to the text."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/underline(_:pattern:color:))."}]}]},"parameters":[{"name":"params","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Controls whether the underline is visible ("},{"kind":"code","text":"`true`"},{"kind":"text","text":" to show, "},{"kind":"code","text":"`false`"},{"kind":"text","text":" to hide)."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"Color","package":"@expo/ui"}},{"name":"isActive","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"pattern","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/modifiers/index.ts","qualifiedName":"LinePattern"},"name":"LinePattern","package":"@expo/ui"}}]}}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"useScrollGeometryChange","variant":"declaration","kind":64,"signatures":[{"name":"useScrollGeometryChange","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fires when the scroll geometry changes โ€” i.e., on every scroll update and\non container/content size changes. Use to drive continuous progress UI\nsuch as page indicators, parallax, or fractional offsets.\n\nIf the callback is marked with the "},{"kind":"code","text":"`'worklet'`"},{"kind":"text","text":" directive, it runs\nsynchronously on the UI thread (no JS-thread round-trip); otherwise it is\ndelivered asynchronously as a regular JS event. Both paths share the same\nnative modifier โ€” the worklet variant is automatically wrapped in a\n"},{"kind":"code","text":"`WorkletCallback`"},{"kind":"text","text":" shared object whose lifetime is managed by the hook.\n\nThis is a hook because the worklet path requires a stable shared-object\nreference across renders. Call it at the top of your component, then\ninclude the returned modifier in your "},{"kind":"code","text":"`modifiers`"},{"kind":"text","text":" array.\n\nApply to a SwiftUI "},{"kind":"code","text":"`ScrollView`"},{"kind":"text","text":" (and other scrollable views). On iOS below\n18.0 the modifier is a no-op."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 18.0+"}]},{"tag":"@platform","content":[{"kind":"text","text":"tvos 18.0+"}]},{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onscrollgeometrychange(for:of:_:))."}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nconst geometryModifier = useScrollGeometryChange((g) => {\n 'worklet';\n progress.value = g.contentOffsetX / g.containerWidth;\n});\n\n\n```"}]}]},"parameters":[{"name":"callback","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"geometry","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/ScrollView/index.tsx","qualifiedName":"ScrollGeometry"},"name":"ScrollGeometry","package":"@expo/ui"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"union","types":[{"type":"reference","name":"ModifierConfig","package":"@expo/ui"},{"type":"literal","value":null}]}}]},{"name":"widgetAccentedRenderingMode","variant":"declaration","kind":64,"signatures":[{"name":"widgetAccentedRenderingMode","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Specifies the how to render an Image when using the WidgetKit/WidgetRenderingMode/accented mode."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/image/widgetaccentedrenderingmode(_:))."}]}]},"parameters":[{"name":"renderingMode","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A constant describing how the Image should be rendered."}]},"type":{"type":"union","types":[{"type":"literal","value":"fullColor"},{"type":"literal","value":"accented"},{"type":"literal","value":"desaturated"},{"type":"literal","value":"accentedDesaturated"}]}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"widgetURL","variant":"declaration","kind":64,"signatures":[{"name":"widgetURL","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the URL to open in the containing app when the user clicks the widget.\nWidgets support one widgetURL modifier in their view hierarchy. If multiple views have widgetURL modifiers, the behavior is undefined."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/SwiftUI/View/widgetURL(_:))."}]}]},"parameters":[{"name":"url","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The URL to open in the containing app."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]},{"name":"zIndex","variant":"declaration","kind":64,"signatures":[{"name":"zIndex","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the z-index (display order) of a view."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/zindex(_:))."}]}]},"parameters":[{"name":"index","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The z-index value."}]},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"ModifierConfig","package":"@expo/ui"}}]}],"packageName":"@expo/ui"} \ No newline at end of file diff --git a/docs/public/static/images/android-studio/build-tools.png b/docs/public/static/images/android-studio/build-tools.png deleted file mode 100644 index e65eb2cc15411b..00000000000000 Binary files a/docs/public/static/images/android-studio/build-tools.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/build-tools.webp b/docs/public/static/images/android-studio/build-tools.webp new file mode 100644 index 00000000000000..6830b272d80856 Binary files /dev/null and b/docs/public/static/images/android-studio/build-tools.webp differ diff --git a/docs/public/static/images/android-studio/create-device.png b/docs/public/static/images/android-studio/create-device.png deleted file mode 100644 index a24c30a87a0491..00000000000000 Binary files a/docs/public/static/images/android-studio/create-device.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/create-device.webp b/docs/public/static/images/android-studio/create-device.webp new file mode 100644 index 00000000000000..801c6d3bf9a3e9 Binary files /dev/null and b/docs/public/static/images/android-studio/create-device.webp differ diff --git a/docs/public/static/images/android-studio/install-type.webp b/docs/public/static/images/android-studio/install-type.webp new file mode 100644 index 00000000000000..97d14cf899f847 Binary files /dev/null and b/docs/public/static/images/android-studio/install-type.webp differ diff --git a/docs/public/static/images/android-studio/sdk-components-setup.png b/docs/public/static/images/android-studio/sdk-components-setup.png deleted file mode 100644 index 0a4a1a9b0c1e3a..00000000000000 Binary files a/docs/public/static/images/android-studio/sdk-components-setup.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/sdk-location.png b/docs/public/static/images/android-studio/sdk-location.png deleted file mode 100644 index 3a8d485c81045f..00000000000000 Binary files a/docs/public/static/images/android-studio/sdk-location.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/sdk-location.webp b/docs/public/static/images/android-studio/sdk-location.webp new file mode 100644 index 00000000000000..574f2af755f2b7 Binary files /dev/null and b/docs/public/static/images/android-studio/sdk-location.webp differ diff --git a/docs/public/static/images/android-studio/sdk-platforms.png b/docs/public/static/images/android-studio/sdk-platforms.png deleted file mode 100644 index 9de585a7d423b0..00000000000000 Binary files a/docs/public/static/images/android-studio/sdk-platforms.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/sdk-platforms.webp b/docs/public/static/images/android-studio/sdk-platforms.webp new file mode 100644 index 00000000000000..8cc5e9168ee80e Binary files /dev/null and b/docs/public/static/images/android-studio/sdk-platforms.webp differ diff --git a/docs/public/static/images/android-studio/select-hardware.png b/docs/public/static/images/android-studio/select-hardware.png deleted file mode 100644 index 5771135ddc1c8c..00000000000000 Binary files a/docs/public/static/images/android-studio/select-hardware.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/select-hardware.webp b/docs/public/static/images/android-studio/select-hardware.webp new file mode 100644 index 00000000000000..3313c606c170ba Binary files /dev/null and b/docs/public/static/images/android-studio/select-hardware.webp differ diff --git a/docs/public/static/images/android-studio/select-os.png b/docs/public/static/images/android-studio/select-os.png deleted file mode 100644 index e44b27cb94ed3a..00000000000000 Binary files a/docs/public/static/images/android-studio/select-os.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/select-os.webp b/docs/public/static/images/android-studio/select-os.webp new file mode 100644 index 00000000000000..f048d6c7229412 Binary files /dev/null and b/docs/public/static/images/android-studio/select-os.webp differ diff --git a/docs/public/static/images/android-studio/virtual-device.png b/docs/public/static/images/android-studio/virtual-device.png deleted file mode 100644 index aee9a804369831..00000000000000 Binary files a/docs/public/static/images/android-studio/virtual-device.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/virtual-device.webp b/docs/public/static/images/android-studio/virtual-device.webp new file mode 100644 index 00000000000000..7a522a36e2062a Binary files /dev/null and b/docs/public/static/images/android-studio/virtual-device.webp differ diff --git a/docs/public/static/images/android-studio/windows-android-home-variable.png b/docs/public/static/images/android-studio/windows-android-home-variable.png deleted file mode 100755 index 11aafc95dd7939..00000000000000 Binary files a/docs/public/static/images/android-studio/windows-android-home-variable.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/windows-android-home-variable.webp b/docs/public/static/images/android-studio/windows-android-home-variable.webp new file mode 100644 index 00000000000000..77c9590f6590da Binary files /dev/null and b/docs/public/static/images/android-studio/windows-android-home-variable.webp differ diff --git a/docs/public/static/images/android-studio/windows-android-sdk-location.png b/docs/public/static/images/android-studio/windows-android-sdk-location.png deleted file mode 100644 index 3d61f7611530de..00000000000000 Binary files a/docs/public/static/images/android-studio/windows-android-sdk-location.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/windows-android-sdk-location.webp b/docs/public/static/images/android-studio/windows-android-sdk-location.webp new file mode 100644 index 00000000000000..b3266d4245bab7 Binary files /dev/null and b/docs/public/static/images/android-studio/windows-android-sdk-location.webp differ diff --git a/docs/public/static/images/android-studio/windows-build-tools.png b/docs/public/static/images/android-studio/windows-build-tools.png deleted file mode 100644 index d0eedb58c13698..00000000000000 Binary files a/docs/public/static/images/android-studio/windows-build-tools.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/windows-build-tools.webp b/docs/public/static/images/android-studio/windows-build-tools.webp new file mode 100644 index 00000000000000..e19387a0e16c9f Binary files /dev/null and b/docs/public/static/images/android-studio/windows-build-tools.webp differ diff --git a/docs/public/static/images/android-studio/windows-install-type.png b/docs/public/static/images/android-studio/windows-install-type.png deleted file mode 100644 index bb05f4bc1c8c35..00000000000000 Binary files a/docs/public/static/images/android-studio/windows-install-type.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/windows-install-type.webp b/docs/public/static/images/android-studio/windows-install-type.webp new file mode 100644 index 00000000000000..d69e49db0f0b8b Binary files /dev/null and b/docs/public/static/images/android-studio/windows-install-type.webp differ diff --git a/docs/public/static/images/android-studio/windows-licenses.png b/docs/public/static/images/android-studio/windows-licenses.png deleted file mode 100755 index 77e72fb8490051..00000000000000 Binary files a/docs/public/static/images/android-studio/windows-licenses.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/windows-licenses.webp b/docs/public/static/images/android-studio/windows-licenses.webp new file mode 100644 index 00000000000000..a753405e7348ef Binary files /dev/null and b/docs/public/static/images/android-studio/windows-licenses.webp differ diff --git a/docs/public/static/images/android-studio/windows-platform-tools-path.png b/docs/public/static/images/android-studio/windows-platform-tools-path.png deleted file mode 100755 index 5ddcbaf39ce035..00000000000000 Binary files a/docs/public/static/images/android-studio/windows-platform-tools-path.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/windows-platform-tools-path.webp b/docs/public/static/images/android-studio/windows-platform-tools-path.webp new file mode 100644 index 00000000000000..aaa8dc6229474a Binary files /dev/null and b/docs/public/static/images/android-studio/windows-platform-tools-path.webp differ diff --git a/docs/public/static/images/android-studio/windows-sdk-platforms.png b/docs/public/static/images/android-studio/windows-sdk-platforms.png deleted file mode 100644 index 0b0c902e29737c..00000000000000 Binary files a/docs/public/static/images/android-studio/windows-sdk-platforms.png and /dev/null differ diff --git a/docs/public/static/images/android-studio/windows-sdk-platforms.webp b/docs/public/static/images/android-studio/windows-sdk-platforms.webp new file mode 100644 index 00000000000000..81296ec7e5ab34 Binary files /dev/null and b/docs/public/static/images/android-studio/windows-sdk-platforms.webp differ diff --git a/docs/public/static/images/apple-access-settings.png b/docs/public/static/images/apple-access-settings.png deleted file mode 100644 index 3a4302c1a61640..00000000000000 Binary files a/docs/public/static/images/apple-access-settings.png and /dev/null differ diff --git a/docs/public/static/images/apple-access-settings.webp b/docs/public/static/images/apple-access-settings.webp new file mode 100644 index 00000000000000..30f7c6948c84f7 Binary files /dev/null and b/docs/public/static/images/apple-access-settings.webp differ diff --git a/docs/public/static/images/brownfield/run-script-phase.png b/docs/public/static/images/brownfield/run-script-phase.png deleted file mode 100644 index 26904918cd7ef6..00000000000000 Binary files a/docs/public/static/images/brownfield/run-script-phase.png and /dev/null differ diff --git a/docs/public/static/images/brownfield/run-script-phase.webp b/docs/public/static/images/brownfield/run-script-phase.webp new file mode 100644 index 00000000000000..778ccf39fe7ac7 Binary files /dev/null and b/docs/public/static/images/brownfield/run-script-phase.webp differ diff --git a/docs/public/static/images/brownfield/user-script-sandboxing.png b/docs/public/static/images/brownfield/user-script-sandboxing.png deleted file mode 100644 index a78c83e7994a82..00000000000000 Binary files a/docs/public/static/images/brownfield/user-script-sandboxing.png and /dev/null differ diff --git a/docs/public/static/images/brownfield/user-script-sandboxing.webp b/docs/public/static/images/brownfield/user-script-sandboxing.webp new file mode 100644 index 00000000000000..4a0292936d1727 Binary files /dev/null and b/docs/public/static/images/brownfield/user-script-sandboxing.webp differ diff --git a/docs/public/static/images/distribution/publishing-websites-github-pages-config.png b/docs/public/static/images/distribution/publishing-websites-github-pages-config.png deleted file mode 100644 index 16677593efeba1..00000000000000 Binary files a/docs/public/static/images/distribution/publishing-websites-github-pages-config.png and /dev/null differ diff --git a/docs/public/static/images/distribution/publishing-websites-github-pages-config.webp b/docs/public/static/images/distribution/publishing-websites-github-pages-config.webp new file mode 100644 index 00000000000000..63a94840336531 Binary files /dev/null and b/docs/public/static/images/distribution/publishing-websites-github-pages-config.webp differ diff --git a/docs/public/static/images/eas-hosting/crashes.png b/docs/public/static/images/eas-hosting/crashes.png deleted file mode 100644 index 782628009747d5..00000000000000 Binary files a/docs/public/static/images/eas-hosting/crashes.png and /dev/null differ diff --git a/docs/public/static/images/eas-hosting/crashes.webp b/docs/public/static/images/eas-hosting/crashes.webp new file mode 100644 index 00000000000000..ef1d0d94751d97 Binary files /dev/null and b/docs/public/static/images/eas-hosting/crashes.webp differ diff --git a/docs/public/static/images/eas-hosting/logs.png b/docs/public/static/images/eas-hosting/logs.png deleted file mode 100644 index 02955216cd4b24..00000000000000 Binary files a/docs/public/static/images/eas-hosting/logs.png and /dev/null differ diff --git a/docs/public/static/images/eas-hosting/logs.webp b/docs/public/static/images/eas-hosting/logs.webp new file mode 100644 index 00000000000000..a48937d983e773 Binary files /dev/null and b/docs/public/static/images/eas-hosting/logs.webp differ diff --git a/docs/public/static/images/eas-hosting/requests.png b/docs/public/static/images/eas-hosting/requests.png deleted file mode 100644 index 2952733f6bb078..00000000000000 Binary files a/docs/public/static/images/eas-hosting/requests.png and /dev/null differ diff --git a/docs/public/static/images/eas-hosting/requests.webp b/docs/public/static/images/eas-hosting/requests.webp new file mode 100644 index 00000000000000..87e9808b3abbac Binary files /dev/null and b/docs/public/static/images/eas-hosting/requests.webp differ diff --git a/docs/public/static/images/expo-observe/observe-dark.png b/docs/public/static/images/expo-observe/observe-dark.png deleted file mode 100644 index 84efb5560848a4..00000000000000 Binary files a/docs/public/static/images/expo-observe/observe-dark.png and /dev/null differ diff --git a/docs/public/static/images/expo-observe/observe-dark.webp b/docs/public/static/images/expo-observe/observe-dark.webp new file mode 100644 index 00000000000000..d98e3c0cad7ee1 Binary files /dev/null and b/docs/public/static/images/expo-observe/observe-dark.webp differ diff --git a/docs/public/static/images/expo-observe/observe-dashboard-dark.png b/docs/public/static/images/expo-observe/observe-dashboard-dark.png deleted file mode 100644 index aff763f24ccdc3..00000000000000 Binary files a/docs/public/static/images/expo-observe/observe-dashboard-dark.png and /dev/null differ diff --git a/docs/public/static/images/expo-observe/observe-dashboard-dark.webp b/docs/public/static/images/expo-observe/observe-dashboard-dark.webp new file mode 100644 index 00000000000000..c0f1b9fda8636c Binary files /dev/null and b/docs/public/static/images/expo-observe/observe-dashboard-dark.webp differ diff --git a/docs/public/static/images/expo-observe/observe-dashboard-light.png b/docs/public/static/images/expo-observe/observe-dashboard-light.png deleted file mode 100644 index eb88756afa87ec..00000000000000 Binary files a/docs/public/static/images/expo-observe/observe-dashboard-light.png and /dev/null differ diff --git a/docs/public/static/images/expo-observe/observe-dashboard-light.webp b/docs/public/static/images/expo-observe/observe-dashboard-light.webp new file mode 100644 index 00000000000000..330b8dca710a7f Binary files /dev/null and b/docs/public/static/images/expo-observe/observe-dashboard-light.webp differ diff --git a/docs/public/static/images/expo-observe/observe-events-dark.png b/docs/public/static/images/expo-observe/observe-events-dark.png deleted file mode 100644 index 7d6d0aa68466db..00000000000000 Binary files a/docs/public/static/images/expo-observe/observe-events-dark.png and /dev/null differ diff --git a/docs/public/static/images/expo-observe/observe-events-dark.webp b/docs/public/static/images/expo-observe/observe-events-dark.webp new file mode 100644 index 00000000000000..0fd69f1e67489b Binary files /dev/null and b/docs/public/static/images/expo-observe/observe-events-dark.webp differ diff --git a/docs/public/static/images/expo-observe/observe-events-light.png b/docs/public/static/images/expo-observe/observe-events-light.png deleted file mode 100644 index bdb54acde1fcab..00000000000000 Binary files a/docs/public/static/images/expo-observe/observe-events-light.png and /dev/null differ diff --git a/docs/public/static/images/expo-observe/observe-events-light.webp b/docs/public/static/images/expo-observe/observe-events-light.webp new file mode 100644 index 00000000000000..7db56f95682f69 Binary files /dev/null and b/docs/public/static/images/expo-observe/observe-events-light.webp differ diff --git a/docs/public/static/images/expo-observe/observe-light.png b/docs/public/static/images/expo-observe/observe-light.png deleted file mode 100644 index 82852b1bf21c78..00000000000000 Binary files a/docs/public/static/images/expo-observe/observe-light.png and /dev/null differ diff --git a/docs/public/static/images/expo-observe/observe-light.webp b/docs/public/static/images/expo-observe/observe-light.webp new file mode 100644 index 00000000000000..160d2ccd366747 Binary files /dev/null and b/docs/public/static/images/expo-observe/observe-light.webp differ diff --git a/docs/public/static/images/expo-observe/observe-updates-dark.png b/docs/public/static/images/expo-observe/observe-updates-dark.png deleted file mode 100644 index 545c903c89bca1..00000000000000 Binary files a/docs/public/static/images/expo-observe/observe-updates-dark.png and /dev/null differ diff --git a/docs/public/static/images/expo-observe/observe-updates-dark.webp b/docs/public/static/images/expo-observe/observe-updates-dark.webp new file mode 100644 index 00000000000000..5510f476ba3e71 Binary files /dev/null and b/docs/public/static/images/expo-observe/observe-updates-dark.webp differ diff --git a/docs/public/static/images/expo-observe/observe-updates-light.png b/docs/public/static/images/expo-observe/observe-updates-light.png deleted file mode 100644 index adc252951d4b7f..00000000000000 Binary files a/docs/public/static/images/expo-observe/observe-updates-light.png and /dev/null differ diff --git a/docs/public/static/images/expo-observe/observe-updates-light.webp b/docs/public/static/images/expo-observe/observe-updates-light.webp new file mode 100644 index 00000000000000..096f345292aedd Binary files /dev/null and b/docs/public/static/images/expo-observe/observe-updates-light.webp differ diff --git a/docs/public/static/images/expo-router/directory.png b/docs/public/static/images/expo-router/directory.png deleted file mode 100644 index f748a96ca0baff..00000000000000 Binary files a/docs/public/static/images/expo-router/directory.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/directory.webp b/docs/public/static/images/expo-router/directory.webp new file mode 100644 index 00000000000000..1409b7eb10a863 Binary files /dev/null and b/docs/public/static/images/expo-router/directory.webp differ diff --git a/docs/public/static/images/expo-router/error-boundaries.png b/docs/public/static/images/expo-router/error-boundaries.png deleted file mode 100644 index d922340d62935e..00000000000000 Binary files a/docs/public/static/images/expo-router/error-boundaries.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/error-boundaries.webp b/docs/public/static/images/expo-router/error-boundaries.webp new file mode 100644 index 00000000000000..1a10170ef8757b Binary files /dev/null and b/docs/public/static/images/expo-router/error-boundaries.webp differ diff --git a/docs/public/static/images/expo-router/ios-26-search-bar.png b/docs/public/static/images/expo-router/ios-26-search-bar.png deleted file mode 100644 index 6d5b30e7167342..00000000000000 Binary files a/docs/public/static/images/expo-router/ios-26-search-bar.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/ios-26-search-bar.webp b/docs/public/static/images/expo-router/ios-26-search-bar.webp new file mode 100644 index 00000000000000..226ed49e16d063 Binary files /dev/null and b/docs/public/static/images/expo-router/ios-26-search-bar.webp differ diff --git a/docs/public/static/images/expo-router/ios-26-search-tab.png b/docs/public/static/images/expo-router/ios-26-search-tab.png deleted file mode 100644 index 2b8e3d80839ffa..00000000000000 Binary files a/docs/public/static/images/expo-router/ios-26-search-tab.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/ios-26-search-tab.webp b/docs/public/static/images/expo-router/ios-26-search-tab.webp new file mode 100644 index 00000000000000..e6fd6d0b7c1f45 Binary files /dev/null and b/docs/public/static/images/expo-router/ios-26-search-tab.webp differ diff --git a/docs/public/static/images/expo-router/link-preview-custom-content.png b/docs/public/static/images/expo-router/link-preview-custom-content.png deleted file mode 100644 index f52c7623f2c65b..00000000000000 Binary files a/docs/public/static/images/expo-router/link-preview-custom-content.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/link-preview-custom-content.webp b/docs/public/static/images/expo-router/link-preview-custom-content.webp new file mode 100644 index 00000000000000..dfd9823dc29bd2 Binary files /dev/null and b/docs/public/static/images/expo-router/link-preview-custom-content.webp differ diff --git a/docs/public/static/images/expo-router/link-preview-custom-size.png b/docs/public/static/images/expo-router/link-preview-custom-size.png deleted file mode 100644 index 137c172c5cc22d..00000000000000 Binary files a/docs/public/static/images/expo-router/link-preview-custom-size.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/link-preview-custom-size.webp b/docs/public/static/images/expo-router/link-preview-custom-size.webp new file mode 100644 index 00000000000000..0b6330ccf4a8b6 Binary files /dev/null and b/docs/public/static/images/expo-router/link-preview-custom-size.webp differ diff --git a/docs/public/static/images/expo-router/link-preview-icons.png b/docs/public/static/images/expo-router/link-preview-icons.png deleted file mode 100644 index 06f2b0042caa54..00000000000000 Binary files a/docs/public/static/images/expo-router/link-preview-icons.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/link-preview-icons.webp b/docs/public/static/images/expo-router/link-preview-icons.webp new file mode 100644 index 00000000000000..7a4074d9443922 Binary files /dev/null and b/docs/public/static/images/expo-router/link-preview-icons.webp differ diff --git a/docs/public/static/images/expo-router/link-preview-menu.png b/docs/public/static/images/expo-router/link-preview-menu.png deleted file mode 100644 index 88cec4796634e2..00000000000000 Binary files a/docs/public/static/images/expo-router/link-preview-menu.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/link-preview-menu.webp b/docs/public/static/images/expo-router/link-preview-menu.webp new file mode 100644 index 00000000000000..f010aaab580593 Binary files /dev/null and b/docs/public/static/images/expo-router/link-preview-menu.webp differ diff --git a/docs/public/static/images/expo-router/link-preview-nested-menu.png b/docs/public/static/images/expo-router/link-preview-nested-menu.png deleted file mode 100644 index 6559f6c0c20a87..00000000000000 Binary files a/docs/public/static/images/expo-router/link-preview-nested-menu.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/link-preview-nested-menu.webp b/docs/public/static/images/expo-router/link-preview-nested-menu.webp new file mode 100644 index 00000000000000..88e34a3bb11f76 Binary files /dev/null and b/docs/public/static/images/expo-router/link-preview-nested-menu.webp differ diff --git a/docs/public/static/images/expo-router/native-tabs-badges.png b/docs/public/static/images/expo-router/native-tabs-badges.png deleted file mode 100644 index 35475354f269c7..00000000000000 Binary files a/docs/public/static/images/expo-router/native-tabs-badges.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/native-tabs-badges.webp b/docs/public/static/images/expo-router/native-tabs-badges.webp new file mode 100644 index 00000000000000..9e01e424e0e6d7 Binary files /dev/null and b/docs/public/static/images/expo-router/native-tabs-badges.webp differ diff --git a/docs/public/static/images/expo-router/native-tabs.png b/docs/public/static/images/expo-router/native-tabs.png deleted file mode 100644 index bfafc89fe640ef..00000000000000 Binary files a/docs/public/static/images/expo-router/native-tabs.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/native-tabs.webp b/docs/public/static/images/expo-router/native-tabs.webp new file mode 100644 index 00000000000000..4b36cd20c44fb7 Binary files /dev/null and b/docs/public/static/images/expo-router/native-tabs.webp differ diff --git a/docs/public/static/images/expo-router/tabs.png b/docs/public/static/images/expo-router/tabs.png deleted file mode 100644 index 756a58d71aeec1..00000000000000 Binary files a/docs/public/static/images/expo-router/tabs.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/tabs.webp b/docs/public/static/images/expo-router/tabs.webp new file mode 100644 index 00000000000000..d65f097228e3de Binary files /dev/null and b/docs/public/static/images/expo-router/tabs.webp differ diff --git a/docs/public/static/images/expo-router/unmatched.png b/docs/public/static/images/expo-router/unmatched.png deleted file mode 100644 index 48d62a71f304a5..00000000000000 Binary files a/docs/public/static/images/expo-router/unmatched.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/unmatched.webp b/docs/public/static/images/expo-router/unmatched.webp new file mode 100644 index 00000000000000..486b61a445ef76 Binary files /dev/null and b/docs/public/static/images/expo-router/unmatched.webp differ diff --git a/docs/public/static/images/expo-router/web-modal-with-corner-radius.png b/docs/public/static/images/expo-router/web-modal-with-corner-radius.png deleted file mode 100644 index a9d0257173fd0c..00000000000000 Binary files a/docs/public/static/images/expo-router/web-modal-with-corner-radius.png and /dev/null differ diff --git a/docs/public/static/images/expo-router/web-modal-with-corner-radius.webp b/docs/public/static/images/expo-router/web-modal-with-corner-radius.webp new file mode 100644 index 00000000000000..2b1e161b0832f5 Binary files /dev/null and b/docs/public/static/images/expo-router/web-modal-with-corner-radius.webp differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/form.png b/docs/public/static/images/expo-ui/swift-ui-guide/form.png deleted file mode 100644 index f6b5e8c33194d8..00000000000000 Binary files a/docs/public/static/images/expo-ui/swift-ui-guide/form.png and /dev/null differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/form.webp b/docs/public/static/images/expo-ui/swift-ui-guide/form.webp new file mode 100644 index 00000000000000..cf6653b7edff0d Binary files /dev/null and b/docs/public/static/images/expo-ui/swift-ui-guide/form.webp differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/glass-effect.png b/docs/public/static/images/expo-ui/swift-ui-guide/glass-effect.png deleted file mode 100644 index ad634eba32fba8..00000000000000 Binary files a/docs/public/static/images/expo-ui/swift-ui-guide/glass-effect.png and /dev/null differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/glass-effect.webp b/docs/public/static/images/expo-ui/swift-ui-guide/glass-effect.webp new file mode 100644 index 00000000000000..810ab75d069b39 Binary files /dev/null and b/docs/public/static/images/expo-ui/swift-ui-guide/glass-effect.webp differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/hstack-vstack.png b/docs/public/static/images/expo-ui/swift-ui-guide/hstack-vstack.png deleted file mode 100644 index 8d1d32d2cd5150..00000000000000 Binary files a/docs/public/static/images/expo-ui/swift-ui-guide/hstack-vstack.png and /dev/null differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/hstack-vstack.webp b/docs/public/static/images/expo-ui/swift-ui-guide/hstack-vstack.webp new file mode 100644 index 00000000000000..19015a4f48c22d Binary files /dev/null and b/docs/public/static/images/expo-ui/swift-ui-guide/hstack-vstack.webp differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/loading.png b/docs/public/static/images/expo-ui/swift-ui-guide/loading.png deleted file mode 100644 index 0cb446f732860d..00000000000000 Binary files a/docs/public/static/images/expo-ui/swift-ui-guide/loading.png and /dev/null differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/loading.webp b/docs/public/static/images/expo-ui/swift-ui-guide/loading.webp new file mode 100644 index 00000000000000..4a9a515fab0a32 Binary files /dev/null and b/docs/public/static/images/expo-ui/swift-ui-guide/loading.webp differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/multi-line-list-item.png b/docs/public/static/images/expo-ui/swift-ui-guide/multi-line-list-item.png deleted file mode 100644 index 24d1badb7dac83..00000000000000 Binary files a/docs/public/static/images/expo-ui/swift-ui-guide/multi-line-list-item.png and /dev/null differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/multi-line-list-item.webp b/docs/public/static/images/expo-ui/swift-ui-guide/multi-line-list-item.webp new file mode 100644 index 00000000000000..ee3545c2ee48a9 Binary files /dev/null and b/docs/public/static/images/expo-ui/swift-ui-guide/multi-line-list-item.webp differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/secondary-text.png b/docs/public/static/images/expo-ui/swift-ui-guide/secondary-text.png deleted file mode 100644 index 7d5d8b032fd49e..00000000000000 Binary files a/docs/public/static/images/expo-ui/swift-ui-guide/secondary-text.png and /dev/null differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/secondary-text.webp b/docs/public/static/images/expo-ui/swift-ui-guide/secondary-text.webp new file mode 100644 index 00000000000000..bacf609c794fc8 Binary files /dev/null and b/docs/public/static/images/expo-ui/swift-ui-guide/secondary-text.webp differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/slider-with-icons.png b/docs/public/static/images/expo-ui/swift-ui-guide/slider-with-icons.png deleted file mode 100644 index 97e48c880ab7ff..00000000000000 Binary files a/docs/public/static/images/expo-ui/swift-ui-guide/slider-with-icons.png and /dev/null differ diff --git a/docs/public/static/images/expo-ui/swift-ui-guide/slider-with-icons.webp b/docs/public/static/images/expo-ui/swift-ui-guide/slider-with-icons.webp new file mode 100644 index 00000000000000..90683dbd87ebf6 Binary files /dev/null and b/docs/public/static/images/expo-ui/swift-ui-guide/slider-with-icons.webp differ diff --git a/docs/public/static/images/guides/android-package-error.png b/docs/public/static/images/guides/android-package-error.png deleted file mode 100644 index 49e33f2f05f195..00000000000000 Binary files a/docs/public/static/images/guides/android-package-error.png and /dev/null differ diff --git a/docs/public/static/images/guides/android-package-error.webp b/docs/public/static/images/guides/android-package-error.webp new file mode 100644 index 00000000000000..3dc73eba1d7a47 Binary files /dev/null and b/docs/public/static/images/guides/android-package-error.webp differ diff --git a/docs/public/static/images/guides/android-required-fields.png b/docs/public/static/images/guides/android-required-fields.png deleted file mode 100644 index 9e3ca8d0c1ef77..00000000000000 Binary files a/docs/public/static/images/guides/android-required-fields.png and /dev/null differ diff --git a/docs/public/static/images/guides/android-required-fields.webp b/docs/public/static/images/guides/android-required-fields.webp new file mode 100644 index 00000000000000..6c34564216a80c Binary files /dev/null and b/docs/public/static/images/guides/android-required-fields.webp differ diff --git a/docs/public/static/images/guides/brex-screenshots.png b/docs/public/static/images/guides/brex-screenshots.png deleted file mode 100644 index 13cbf5d752e6f8..00000000000000 Binary files a/docs/public/static/images/guides/brex-screenshots.png and /dev/null differ diff --git a/docs/public/static/images/guides/brex-screenshots.webp b/docs/public/static/images/guides/brex-screenshots.webp new file mode 100644 index 00000000000000..9b2884a1bcf4a8 Binary files /dev/null and b/docs/public/static/images/guides/brex-screenshots.webp differ diff --git a/docs/public/static/images/guides/expo-go-screenshots.png b/docs/public/static/images/guides/expo-go-screenshots.png deleted file mode 100644 index 41b60022a1c168..00000000000000 Binary files a/docs/public/static/images/guides/expo-go-screenshots.png and /dev/null differ diff --git a/docs/public/static/images/guides/expo-go-screenshots.webp b/docs/public/static/images/guides/expo-go-screenshots.webp new file mode 100644 index 00000000000000..c5f2c60f118df6 Binary files /dev/null and b/docs/public/static/images/guides/expo-go-screenshots.webp differ diff --git a/docs/public/static/images/guides/office-screenshots.png b/docs/public/static/images/guides/office-screenshots.png deleted file mode 100644 index 7a6f1397067c92..00000000000000 Binary files a/docs/public/static/images/guides/office-screenshots.png and /dev/null differ diff --git a/docs/public/static/images/guides/office-screenshots.webp b/docs/public/static/images/guides/office-screenshots.webp new file mode 100644 index 00000000000000..74b555dcf84ebe Binary files /dev/null and b/docs/public/static/images/guides/office-screenshots.webp differ diff --git a/docs/public/static/images/guides/sentry-tags.png b/docs/public/static/images/guides/sentry-tags.png deleted file mode 100644 index 007883853e5f97..00000000000000 Binary files a/docs/public/static/images/guides/sentry-tags.png and /dev/null differ diff --git a/docs/public/static/images/guides/sentry-tags.webp b/docs/public/static/images/guides/sentry-tags.webp new file mode 100644 index 00000000000000..7de9dde32783a5 Binary files /dev/null and b/docs/public/static/images/guides/sentry-tags.webp differ diff --git a/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-1.png b/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-1.png deleted file mode 100644 index 99ad866deaa97a..00000000000000 Binary files a/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-1.png and /dev/null differ diff --git a/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-1.webp b/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-1.webp new file mode 100644 index 00000000000000..662d1586e3fa1e Binary files /dev/null and b/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-1.webp differ diff --git a/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-2.png b/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-2.png deleted file mode 100644 index ddd2a1f88aa5a6..00000000000000 Binary files a/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-2.png and /dev/null differ diff --git a/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-2.webp b/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-2.webp new file mode 100644 index 00000000000000..e091fe8b0ff3c6 Binary files /dev/null and b/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-2.webp differ diff --git a/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-3.png b/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-3.png deleted file mode 100644 index 07ec81667ad282..00000000000000 Binary files a/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-3.png and /dev/null differ diff --git a/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-3.webp b/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-3.webp new file mode 100644 index 00000000000000..7f65bdd43ab429 Binary files /dev/null and b/docs/public/static/images/ios-dev-mode/ios-16-developer-mode-3.webp differ diff --git a/docs/public/static/images/ios-dev-mode/with-xcode-01.png b/docs/public/static/images/ios-dev-mode/with-xcode-01.png deleted file mode 100644 index 17b3a77a82713b..00000000000000 Binary files a/docs/public/static/images/ios-dev-mode/with-xcode-01.png and /dev/null differ diff --git a/docs/public/static/images/ios-dev-mode/with-xcode-01.webp b/docs/public/static/images/ios-dev-mode/with-xcode-01.webp new file mode 100644 index 00000000000000..c066f4a120d405 Binary files /dev/null and b/docs/public/static/images/ios-dev-mode/with-xcode-01.webp differ diff --git a/docs/public/static/images/ios-dev-mode/with-xcode-02.png b/docs/public/static/images/ios-dev-mode/with-xcode-02.png deleted file mode 100644 index 15456efec82117..00000000000000 Binary files a/docs/public/static/images/ios-dev-mode/with-xcode-02.png and /dev/null differ diff --git a/docs/public/static/images/ios-dev-mode/with-xcode-02.webp b/docs/public/static/images/ios-dev-mode/with-xcode-02.webp new file mode 100644 index 00000000000000..f98fda1ceaa4f9 Binary files /dev/null and b/docs/public/static/images/ios-dev-mode/with-xcode-02.webp differ diff --git a/docs/public/static/images/ios-simulator/open-simulator-manually.png b/docs/public/static/images/ios-simulator/open-simulator-manually.png deleted file mode 100644 index 5390da05b2e2bb..00000000000000 Binary files a/docs/public/static/images/ios-simulator/open-simulator-manually.png and /dev/null differ diff --git a/docs/public/static/images/ios-simulator/open-simulator-manually.webp b/docs/public/static/images/ios-simulator/open-simulator-manually.webp new file mode 100644 index 00000000000000..37dcc2f15fcfb8 Binary files /dev/null and b/docs/public/static/images/ios-simulator/open-simulator-manually.webp differ diff --git a/docs/public/static/images/ios-simulator/simulators-list.png b/docs/public/static/images/ios-simulator/simulators-list.png deleted file mode 100644 index 6529f59893b9cd..00000000000000 Binary files a/docs/public/static/images/ios-simulator/simulators-list.png and /dev/null differ diff --git a/docs/public/static/images/ios-simulator/simulators-list.webp b/docs/public/static/images/ios-simulator/simulators-list.webp new file mode 100644 index 00000000000000..46b9dfa49ec1d1 Binary files /dev/null and b/docs/public/static/images/ios-simulator/simulators-list.webp differ diff --git a/docs/public/static/images/ios-simulator/xcode-command-line.png b/docs/public/static/images/ios-simulator/xcode-command-line.png deleted file mode 100644 index 0113969b2dacec..00000000000000 Binary files a/docs/public/static/images/ios-simulator/xcode-command-line.png and /dev/null differ diff --git a/docs/public/static/images/ios-simulator/xcode-command-line.webp b/docs/public/static/images/ios-simulator/xcode-command-line.webp new file mode 100644 index 00000000000000..ce7bbba1c31906 Binary files /dev/null and b/docs/public/static/images/ios-simulator/xcode-command-line.webp differ diff --git a/docs/public/static/images/launch-party-banner-bg.svg b/docs/public/static/images/launch-party-banner-bg.svg deleted file mode 100644 index 08bcc681fa71c2..00000000000000 --- a/docs/public/static/images/launch-party-banner-bg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/public/static/images/modules/native-view-tutorial/web-browser.png b/docs/public/static/images/modules/native-view-tutorial/web-browser.png deleted file mode 100644 index 83b5b4c312d522..00000000000000 Binary files a/docs/public/static/images/modules/native-view-tutorial/web-browser.png and /dev/null differ diff --git a/docs/public/static/images/modules/native-view-tutorial/web-browser.webp b/docs/public/static/images/modules/native-view-tutorial/web-browser.webp new file mode 100644 index 00000000000000..e1683176ae5fbf Binary files /dev/null and b/docs/public/static/images/modules/native-view-tutorial/web-browser.webp differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/expo-insights.png b/docs/public/static/images/monitoring/monitor-your-app/expo-insights.png deleted file mode 100644 index 298b94846e7cab..00000000000000 Binary files a/docs/public/static/images/monitoring/monitor-your-app/expo-insights.png and /dev/null differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/expo-insights.webp b/docs/public/static/images/monitoring/monitor-your-app/expo-insights.webp new file mode 100644 index 00000000000000..f36e68bba6bb26 Binary files /dev/null and b/docs/public/static/images/monitoring/monitor-your-app/expo-insights.webp differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-account.png b/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-account.png deleted file mode 100644 index b29f35c71b179a..00000000000000 Binary files a/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-account.png and /dev/null differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-account.webp b/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-account.webp new file mode 100644 index 00000000000000..1a3450c8e6e13c Binary files /dev/null and b/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-account.webp differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-project.png b/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-project.png deleted file mode 100644 index 3f95aa7812bf83..00000000000000 Binary files a/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-project.png and /dev/null differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-project.webp b/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-project.webp new file mode 100644 index 00000000000000..b5c50d8fe41b6a Binary files /dev/null and b/docs/public/static/images/monitoring/monitor-your-app/logrocket-connect-project.webp differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/logrocket-view-on-logrocket.png b/docs/public/static/images/monitoring/monitor-your-app/logrocket-view-on-logrocket.png deleted file mode 100644 index 1f8ea8d3296146..00000000000000 Binary files a/docs/public/static/images/monitoring/monitor-your-app/logrocket-view-on-logrocket.png and /dev/null differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/logrocket-view-on-logrocket.webp b/docs/public/static/images/monitoring/monitor-your-app/logrocket-view-on-logrocket.webp new file mode 100644 index 00000000000000..fa0813b76287ce Binary files /dev/null and b/docs/public/static/images/monitoring/monitor-your-app/logrocket-view-on-logrocket.webp differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/logrocket.png b/docs/public/static/images/monitoring/monitor-your-app/logrocket.png deleted file mode 100644 index 45d88856c570ad..00000000000000 Binary files a/docs/public/static/images/monitoring/monitor-your-app/logrocket.png and /dev/null differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/logrocket.webp b/docs/public/static/images/monitoring/monitor-your-app/logrocket.webp new file mode 100644 index 00000000000000..058d8687472665 Binary files /dev/null and b/docs/public/static/images/monitoring/monitor-your-app/logrocket.webp differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/sentry.png b/docs/public/static/images/monitoring/monitor-your-app/sentry.png deleted file mode 100644 index 9b8f8e9a97ef42..00000000000000 Binary files a/docs/public/static/images/monitoring/monitor-your-app/sentry.png and /dev/null differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/sentry.webp b/docs/public/static/images/monitoring/monitor-your-app/sentry.webp new file mode 100644 index 00000000000000..9658a78da282e5 Binary files /dev/null and b/docs/public/static/images/monitoring/monitor-your-app/sentry.webp differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/vexo.png b/docs/public/static/images/monitoring/monitor-your-app/vexo.png deleted file mode 100644 index cf006e68cb4d92..00000000000000 Binary files a/docs/public/static/images/monitoring/monitor-your-app/vexo.png and /dev/null differ diff --git a/docs/public/static/images/monitoring/monitor-your-app/vexo.webp b/docs/public/static/images/monitoring/monitor-your-app/vexo.webp new file mode 100644 index 00000000000000..4b59ea503978f2 Binary files /dev/null and b/docs/public/static/images/monitoring/monitor-your-app/vexo.webp differ diff --git a/docs/public/static/images/safe-area/with-safe-area.png b/docs/public/static/images/safe-area/with-safe-area.png deleted file mode 100644 index 9ebb2d36a34699..00000000000000 Binary files a/docs/public/static/images/safe-area/with-safe-area.png and /dev/null differ diff --git a/docs/public/static/images/safe-area/with-safe-area.webp b/docs/public/static/images/safe-area/with-safe-area.webp new file mode 100644 index 00000000000000..fea1f81ebd2b3a Binary files /dev/null and b/docs/public/static/images/safe-area/with-safe-area.webp differ diff --git a/docs/public/static/images/safe-area/without-safe-area.png b/docs/public/static/images/safe-area/without-safe-area.png deleted file mode 100644 index 7bf74ebaeb5b94..00000000000000 Binary files a/docs/public/static/images/safe-area/without-safe-area.png and /dev/null differ diff --git a/docs/public/static/images/safe-area/without-safe-area.webp b/docs/public/static/images/safe-area/without-safe-area.webp new file mode 100644 index 00000000000000..10603c67d503ee Binary files /dev/null and b/docs/public/static/images/safe-area/without-safe-area.webp differ diff --git a/docs/public/static/images/tutorial/01-app-running-on-all-platforms.png b/docs/public/static/images/tutorial/01-app-running-on-all-platforms.png deleted file mode 100644 index e453bd1248efa1..00000000000000 Binary files a/docs/public/static/images/tutorial/01-app-running-on-all-platforms.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/01-app-running-on-all-platforms.webp b/docs/public/static/images/tutorial/01-app-running-on-all-platforms.webp new file mode 100644 index 00000000000000..26ae5098e7c437 Binary files /dev/null and b/docs/public/static/images/tutorial/01-app-running-on-all-platforms.webp differ diff --git a/docs/public/static/images/tutorial/02-index-screen-changes.png b/docs/public/static/images/tutorial/02-index-screen-changes.png deleted file mode 100644 index 25f9077ff43089..00000000000000 Binary files a/docs/public/static/images/tutorial/02-index-screen-changes.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/02-index-screen-changes.webp b/docs/public/static/images/tutorial/02-index-screen-changes.webp new file mode 100644 index 00000000000000..b6a1dda15a5090 Binary files /dev/null and b/docs/public/static/images/tutorial/02-index-screen-changes.webp differ diff --git a/docs/public/static/images/tutorial/03-bottom-tab-navigator.png b/docs/public/static/images/tutorial/03-bottom-tab-navigator.png deleted file mode 100644 index c4f7ef82a51f4d..00000000000000 Binary files a/docs/public/static/images/tutorial/03-bottom-tab-navigator.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/03-bottom-tab-navigator.webp b/docs/public/static/images/tutorial/03-bottom-tab-navigator.webp new file mode 100644 index 00000000000000..be1d5ecdbe7757 Binary files /dev/null and b/docs/public/static/images/tutorial/03-bottom-tab-navigator.webp differ diff --git a/docs/public/static/images/tutorial/04-tab-navigator-complete.png b/docs/public/static/images/tutorial/04-tab-navigator-complete.png deleted file mode 100644 index 30525128203b04..00000000000000 Binary files a/docs/public/static/images/tutorial/04-tab-navigator-complete.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/04-tab-navigator-complete.webp b/docs/public/static/images/tutorial/04-tab-navigator-complete.webp new file mode 100644 index 00000000000000..2f5c141e655537 Binary files /dev/null and b/docs/public/static/images/tutorial/04-tab-navigator-complete.webp differ diff --git a/docs/public/static/images/tutorial/app-icon-visible.png b/docs/public/static/images/tutorial/app-icon-visible.png deleted file mode 100644 index 03db8770b39167..00000000000000 Binary files a/docs/public/static/images/tutorial/app-icon-visible.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/app-icon-visible.webp b/docs/public/static/images/tutorial/app-icon-visible.webp new file mode 100644 index 00000000000000..8d62d966842982 Binary files /dev/null and b/docs/public/static/images/tutorial/app-icon-visible.webp differ diff --git a/docs/public/static/images/tutorial/background-image.png b/docs/public/static/images/tutorial/background-image.png deleted file mode 100644 index 39aa18d8988013..00000000000000 Binary files a/docs/public/static/images/tutorial/background-image.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/background-image.webp b/docs/public/static/images/tutorial/background-image.webp new file mode 100644 index 00000000000000..467a53203bffa4 Binary files /dev/null and b/docs/public/static/images/tutorial/background-image.webp differ diff --git a/docs/public/static/images/tutorial/breakdown-of-buttons.png b/docs/public/static/images/tutorial/breakdown-of-buttons.png deleted file mode 100644 index 359277250e10c1..00000000000000 Binary files a/docs/public/static/images/tutorial/breakdown-of-buttons.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/breakdown-of-buttons.webp b/docs/public/static/images/tutorial/breakdown-of-buttons.webp new file mode 100644 index 00000000000000..f61a2016f1c143 Binary files /dev/null and b/docs/public/static/images/tutorial/breakdown-of-buttons.webp differ diff --git a/docs/public/static/images/tutorial/breakdown-of-layout.png b/docs/public/static/images/tutorial/breakdown-of-layout.png deleted file mode 100644 index 424ee4cf144ed0..00000000000000 Binary files a/docs/public/static/images/tutorial/breakdown-of-layout.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/breakdown-of-layout.webp b/docs/public/static/images/tutorial/breakdown-of-layout.webp new file mode 100644 index 00000000000000..31e226619d401d Binary files /dev/null and b/docs/public/static/images/tutorial/breakdown-of-layout.webp differ diff --git a/docs/public/static/images/tutorial/button-options.png b/docs/public/static/images/tutorial/button-options.png deleted file mode 100644 index 71b34a6974b511..00000000000000 Binary files a/docs/public/static/images/tutorial/button-options.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/button-options.webp b/docs/public/static/images/tutorial/button-options.webp new file mode 100644 index 00000000000000..da2d31a19e6e51 Binary files /dev/null and b/docs/public/static/images/tutorial/button-options.webp differ diff --git a/docs/public/static/images/tutorial/buttons-created.png b/docs/public/static/images/tutorial/buttons-created.png deleted file mode 100644 index caeeab054c3ea2..00000000000000 Binary files a/docs/public/static/images/tutorial/buttons-created.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/buttons-created.webp b/docs/public/static/images/tutorial/buttons-created.webp new file mode 100644 index 00000000000000..209327bc80b773 Binary files /dev/null and b/docs/public/static/images/tutorial/buttons-created.webp differ diff --git a/docs/public/static/images/tutorial/emoji-picker.png b/docs/public/static/images/tutorial/emoji-picker.png deleted file mode 100644 index 3fe8029fa92e41..00000000000000 Binary files a/docs/public/static/images/tutorial/emoji-picker.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/emoji-picker.webp b/docs/public/static/images/tutorial/emoji-picker.webp new file mode 100644 index 00000000000000..1a9146ccebe5dd Binary files /dev/null and b/docs/public/static/images/tutorial/emoji-picker.webp differ diff --git a/docs/public/static/images/tutorial/icon.png b/docs/public/static/images/tutorial/icon.png deleted file mode 100644 index 12b667a46b4625..00000000000000 Binary files a/docs/public/static/images/tutorial/icon.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/icon.webp b/docs/public/static/images/tutorial/icon.webp new file mode 100644 index 00000000000000..cdb89926052a0d Binary files /dev/null and b/docs/public/static/images/tutorial/icon.webp differ diff --git a/docs/public/static/images/tutorial/initial-layout.png b/docs/public/static/images/tutorial/initial-layout.png deleted file mode 100644 index 9ff1057a0ae788..00000000000000 Binary files a/docs/public/static/images/tutorial/initial-layout.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/initial-layout.webp b/docs/public/static/images/tutorial/initial-layout.webp new file mode 100644 index 00000000000000..40eb90f4a493ae Binary files /dev/null and b/docs/public/static/images/tutorial/initial-layout.webp differ diff --git a/docs/public/static/images/tutorial/modal-creation.png b/docs/public/static/images/tutorial/modal-creation.png deleted file mode 100644 index 10e6c540fa96eb..00000000000000 Binary files a/docs/public/static/images/tutorial/modal-creation.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/modal-creation.webp b/docs/public/static/images/tutorial/modal-creation.webp new file mode 100644 index 00000000000000..ce16a01491d2c1 Binary files /dev/null and b/docs/public/static/images/tutorial/modal-creation.webp differ diff --git a/docs/public/static/images/tutorial/statusbar-example.png b/docs/public/static/images/tutorial/statusbar-example.png deleted file mode 100644 index 19d445dc8b5304..00000000000000 Binary files a/docs/public/static/images/tutorial/statusbar-example.png and /dev/null differ diff --git a/docs/public/static/images/tutorial/statusbar-example.webp b/docs/public/static/images/tutorial/statusbar-example.webp new file mode 100644 index 00000000000000..bd3df509e72246 Binary files /dev/null and b/docs/public/static/images/tutorial/statusbar-example.webp differ diff --git a/docs/public/static/schemas/v54.0.0/native-modules.json b/docs/public/static/schemas/v54.0.0/native-modules.json index 5bc9f73fca02fa..d6e101680bd609 100644 --- a/docs/public/static/schemas/v54.0.0/native-modules.json +++ b/docs/public/static/schemas/v54.0.0/native-modules.json @@ -1 +1 @@ -{"versions":[{"npmPackage":"eslint-config-expo","versionRange":"~10.0.0"},{"npmPackage":"expo-age-range","versionRange":"~0.2.1"},{"npmPackage":"expo-analytics-amplitude","versionRange":"~11.3.0"},{"npmPackage":"expo-app-auth","versionRange":"~11.1.0"},{"npmPackage":"expo-apple-authentication","versionRange":"~8.0.8"},{"npmPackage":"expo-application","versionRange":"~7.0.8"},{"npmPackage":"expo-app-loader-provider","versionRange":"~8.0.0"},{"npmPackage":"expo-asset","versionRange":"~12.0.13"},{"npmPackage":"expo-audio","versionRange":"~1.1.1"},{"npmPackage":"expo-auth-session","versionRange":"~7.0.11"},{"npmPackage":"expo-av","versionRange":"~16.0.8"},{"npmPackage":"expo-background-fetch","versionRange":"~14.0.9"},{"npmPackage":"expo-background-task","versionRange":"~1.0.10"},{"npmPackage":"expo-battery","versionRange":"~10.0.8"},{"npmPackage":"expo-blur","versionRange":"~15.0.8"},{"npmPackage":"expo-brightness","versionRange":"~14.0.8"},{"npmPackage":"expo-build-properties","versionRange":"~1.0.10"},{"npmPackage":"expo-calendar","versionRange":"~15.0.8"},{"npmPackage":"expo-camera","versionRange":"~17.0.10"},{"npmPackage":"expo-cellular","versionRange":"~8.0.8"},{"npmPackage":"expo-checkbox","versionRange":"~5.0.8"},{"npmPackage":"expo-clipboard","versionRange":"~8.0.8"},{"npmPackage":"expo-constants","versionRange":"~18.0.13"},{"npmPackage":"expo-contacts","versionRange":"~15.0.11"},{"npmPackage":"expo-crypto","versionRange":"~15.0.9"},{"npmPackage":"expo-dev-client","versionRange":"~6.0.21"},{"npmPackage":"expo-device","versionRange":"~8.0.10"},{"npmPackage":"expo-document-picker","versionRange":"~14.0.8"},{"npmPackage":"expo-file-system","versionRange":"~19.0.22"},{"npmPackage":"@expo/fingerprint","versionRange":"~0.15.5"},{"npmPackage":"expo-font","versionRange":"~14.0.11"},{"npmPackage":"expo-gl","versionRange":"~16.0.10"},{"npmPackage":"expo-glass-effect","versionRange":"~0.1.10"},{"npmPackage":"expo-google-app-auth","versionRange":"~8.3.0"},{"npmPackage":"expo-haptics","versionRange":"~15.0.8"},{"npmPackage":"expo-image","versionRange":"~3.0.11"},{"npmPackage":"expo-image-loader","versionRange":"~6.0.0"},{"npmPackage":"expo-image-manipulator","versionRange":"~14.0.8"},{"npmPackage":"expo-image-picker","versionRange":"~17.0.11"},{"npmPackage":"expo-insights","versionRange":"~0.10.8"},{"npmPackage":"expo-intent-launcher","versionRange":"~13.0.8"},{"npmPackage":"expo-keep-awake","versionRange":"~15.0.8"},{"npmPackage":"expo-linear-gradient","versionRange":"~15.0.8"},{"npmPackage":"expo-linking","versionRange":"~8.0.12"},{"npmPackage":"expo-live-photo","versionRange":"~1.0.8"},{"npmPackage":"expo-local-authentication","versionRange":"~17.0.8"},{"npmPackage":"expo-localization","versionRange":"~17.0.8"},{"npmPackage":"expo-location","versionRange":"~19.0.8"},{"npmPackage":"expo-mail-composer","versionRange":"~15.0.8"},{"npmPackage":"expo-manifests","versionRange":"~1.0.11"},{"npmPackage":"expo-maps","versionRange":"~0.12.10"},{"npmPackage":"expo-mcp","versionRange":"~0.2.1"},{"npmPackage":"expo-media-library","versionRange":"~18.2.1"},{"npmPackage":"expo-mesh-gradient","versionRange":"~0.4.8"},{"npmPackage":"@expo/metro-runtime","versionRange":"~6.1.2"},{"npmPackage":"expo-modules-core","versionRange":"~3.0.30"},{"npmPackage":"expo-module-template","versionRange":"~11.0.19"},{"npmPackage":"expo-navigation-bar","versionRange":"~5.0.10"},{"npmPackage":"expo-network","versionRange":"~8.0.8"},{"npmPackage":"expo-notifications","versionRange":"~0.32.17"},{"npmPackage":"expo-print","versionRange":"~15.0.8"},{"npmPackage":"expo-router","versionRange":"~6.0.23"},{"npmPackage":"expo-screen-capture","versionRange":"~8.0.9"},{"npmPackage":"expo-screen-orientation","versionRange":"~9.0.9"},{"npmPackage":"expo-secure-store","versionRange":"~15.0.8"},{"npmPackage":"expo-sensors","versionRange":"~15.0.8"},{"npmPackage":"expo-server","versionRange":"~1.0.6"},{"npmPackage":"expo-sharing","versionRange":"~14.0.8"},{"npmPackage":"expo-sms","versionRange":"~14.0.8"},{"npmPackage":"expo-speech","versionRange":"~14.0.8"},{"npmPackage":"expo-splash-screen","versionRange":"~31.0.13"},{"npmPackage":"expo-sqlite","versionRange":"~16.0.10"},{"npmPackage":"expo-status-bar","versionRange":"~3.0.9"},{"npmPackage":"expo-store-review","versionRange":"~9.0.9"},{"npmPackage":"expo-symbols","versionRange":"~1.0.8"},{"npmPackage":"expo-system-ui","versionRange":"~6.0.9"},{"npmPackage":"expo-task-manager","versionRange":"~14.0.9"},{"npmPackage":"expo-tracking-transparency","versionRange":"~6.0.8"},{"npmPackage":"@expo/ui","versionRange":"~0.2.0-beta.9"},{"npmPackage":"expo-updates","versionRange":"~29.0.17"},{"npmPackage":"@expo/vector-icons","versionRange":"^15.0.3"},{"npmPackage":"expo-video","versionRange":"~3.0.16"},{"npmPackage":"expo-video-thumbnails","versionRange":"~10.0.8"},{"npmPackage":"expo-web-browser","versionRange":"~15.0.11"},{"npmPackage":"jest-expo","versionRange":"~54.0.17"},{"npmPackage":"lottie-react-native","versionRange":"~7.3.1"},{"npmPackage":"react","versionRange":"19.1.0"},{"npmPackage":"react-dom","versionRange":"19.1.0"},{"npmPackage":"react-native","versionRange":"0.81.5"},{"npmPackage":"@react-native-async-storage/async-storage","versionRange":"2.2.0"},{"npmPackage":"react-native-bootsplash","versionRange":"^6.3.10"},{"npmPackage":"@react-native-community/datetimepicker","versionRange":"8.4.4"},{"npmPackage":"@react-native-community/netinfo","versionRange":"11.4.1"},{"npmPackage":"@react-native-community/slider","versionRange":"5.0.1"},{"npmPackage":"@react-native-community/viewpager","versionRange":"5.0.11"},{"npmPackage":"react-native-gesture-handler","versionRange":"~2.28.0"},{"npmPackage":"react-native-get-random-values","versionRange":"~1.11.0"},{"npmPackage":"react-native-keyboard-controller","versionRange":"1.18.5"},{"npmPackage":"react-native-maps","versionRange":"1.20.1"},{"npmPackage":"@react-native-masked-view/masked-view","versionRange":"0.3.2"},{"npmPackage":"react-native-pager-view","versionRange":"6.9.1"},{"npmPackage":"@react-native-picker/picker","versionRange":"2.11.1"},{"npmPackage":"react-native-reanimated","versionRange":"~4.1.1"},{"npmPackage":"react-native-safe-area-context","versionRange":"~5.6.0"},{"npmPackage":"react-native-screens","versionRange":"~4.16.0"},{"npmPackage":"@react-native-segmented-control/segmented-control","versionRange":"2.5.7"},{"npmPackage":"react-native-svg","versionRange":"15.12.1"},{"npmPackage":"react-native-view-shot","versionRange":"4.0.3"},{"npmPackage":"react-native-web","versionRange":"~0.21.0"},{"npmPackage":"react-native-webview","versionRange":"13.15.0"},{"npmPackage":"react-native-worklets","versionRange":"0.5.1"},{"npmPackage":"react-server-dom-webpack","versionRange":"~19.1.4"},{"npmPackage":"sentry-expo","versionRange":"~7.0.0"},{"npmPackage":"@sentry/react-native","versionRange":"~7.2.0"},{"npmPackage":"@shopify/flash-list","versionRange":"2.0.2"},{"npmPackage":"@shopify/react-native-skia","versionRange":"2.2.12"},{"npmPackage":"@stripe/stripe-react-native","versionRange":"0.50.3"},{"npmPackage":"unimodules-app-loader","versionRange":"~6.0.8"},{"npmPackage":"unimodules-image-loader-interface","versionRange":"~6.1.0"}]} \ No newline at end of file +{"versions":[{"npmPackage":"eslint-config-expo","versionRange":"~10.0.0"},{"npmPackage":"expo-age-range","versionRange":"~0.2.1"},{"npmPackage":"expo-analytics-amplitude","versionRange":"~11.3.0"},{"npmPackage":"expo-app-auth","versionRange":"~11.1.0"},{"npmPackage":"expo-apple-authentication","versionRange":"~8.0.8"},{"npmPackage":"expo-application","versionRange":"~7.0.8"},{"npmPackage":"expo-app-loader-provider","versionRange":"~8.0.0"},{"npmPackage":"expo-asset","versionRange":"~12.0.13"},{"npmPackage":"expo-audio","versionRange":"~1.1.1"},{"npmPackage":"expo-auth-session","versionRange":"~7.0.11"},{"npmPackage":"expo-av","versionRange":"~16.0.8"},{"npmPackage":"expo-background-fetch","versionRange":"~14.0.9"},{"npmPackage":"expo-background-task","versionRange":"~1.0.10"},{"npmPackage":"expo-battery","versionRange":"~10.0.8"},{"npmPackage":"expo-blur","versionRange":"~15.0.8"},{"npmPackage":"expo-brightness","versionRange":"~14.0.8"},{"npmPackage":"expo-build-properties","versionRange":"~1.0.10"},{"npmPackage":"expo-calendar","versionRange":"~15.0.8"},{"npmPackage":"expo-camera","versionRange":"~17.0.10"},{"npmPackage":"expo-cellular","versionRange":"~8.0.8"},{"npmPackage":"expo-checkbox","versionRange":"~5.0.8"},{"npmPackage":"expo-clipboard","versionRange":"~8.0.8"},{"npmPackage":"expo-constants","versionRange":"~18.0.13"},{"npmPackage":"expo-contacts","versionRange":"~15.0.11"},{"npmPackage":"expo-crypto","versionRange":"~15.0.9"},{"npmPackage":"expo-dev-client","versionRange":"~6.0.21"},{"npmPackage":"expo-device","versionRange":"~8.0.10"},{"npmPackage":"expo-document-picker","versionRange":"~14.0.8"},{"npmPackage":"expo-file-system","versionRange":"~19.0.23"},{"npmPackage":"@expo/fingerprint","versionRange":"~0.15.5"},{"npmPackage":"expo-font","versionRange":"~14.0.12"},{"npmPackage":"expo-gl","versionRange":"~16.0.10"},{"npmPackage":"expo-glass-effect","versionRange":"~0.1.10"},{"npmPackage":"expo-google-app-auth","versionRange":"~8.3.0"},{"npmPackage":"expo-haptics","versionRange":"~15.0.8"},{"npmPackage":"expo-image","versionRange":"~3.0.11"},{"npmPackage":"expo-image-loader","versionRange":"~6.0.0"},{"npmPackage":"expo-image-manipulator","versionRange":"~14.0.8"},{"npmPackage":"expo-image-picker","versionRange":"~17.0.11"},{"npmPackage":"expo-insights","versionRange":"~0.10.8"},{"npmPackage":"expo-intent-launcher","versionRange":"~13.0.8"},{"npmPackage":"expo-keep-awake","versionRange":"~15.0.8"},{"npmPackage":"expo-linear-gradient","versionRange":"~15.0.8"},{"npmPackage":"expo-linking","versionRange":"~8.0.12"},{"npmPackage":"expo-live-photo","versionRange":"~1.0.8"},{"npmPackage":"expo-local-authentication","versionRange":"~17.0.8"},{"npmPackage":"expo-localization","versionRange":"~17.0.9"},{"npmPackage":"expo-location","versionRange":"~19.0.8"},{"npmPackage":"expo-mail-composer","versionRange":"~15.0.8"},{"npmPackage":"expo-manifests","versionRange":"~1.0.11"},{"npmPackage":"expo-maps","versionRange":"~0.12.10"},{"npmPackage":"expo-mcp","versionRange":"~0.2.1"},{"npmPackage":"expo-media-library","versionRange":"~18.2.1"},{"npmPackage":"expo-mesh-gradient","versionRange":"~0.4.8"},{"npmPackage":"@expo/metro-runtime","versionRange":"~6.1.2"},{"npmPackage":"expo-modules-core","versionRange":"~3.0.30"},{"npmPackage":"expo-module-template","versionRange":"~11.0.19"},{"npmPackage":"expo-navigation-bar","versionRange":"~5.0.10"},{"npmPackage":"expo-network","versionRange":"~8.0.8"},{"npmPackage":"expo-notifications","versionRange":"~0.32.17"},{"npmPackage":"expo-print","versionRange":"~15.0.8"},{"npmPackage":"expo-router","versionRange":"~6.0.24"},{"npmPackage":"expo-screen-capture","versionRange":"~8.0.9"},{"npmPackage":"expo-screen-orientation","versionRange":"~9.0.9"},{"npmPackage":"expo-secure-store","versionRange":"~15.0.8"},{"npmPackage":"expo-sensors","versionRange":"~15.0.8"},{"npmPackage":"expo-server","versionRange":"~1.0.7"},{"npmPackage":"expo-sharing","versionRange":"~14.0.8"},{"npmPackage":"expo-sms","versionRange":"~14.0.8"},{"npmPackage":"expo-speech","versionRange":"~14.0.8"},{"npmPackage":"expo-splash-screen","versionRange":"~31.0.13"},{"npmPackage":"expo-sqlite","versionRange":"~16.0.10"},{"npmPackage":"expo-status-bar","versionRange":"~3.0.9"},{"npmPackage":"expo-store-review","versionRange":"~9.0.9"},{"npmPackage":"expo-symbols","versionRange":"~1.0.8"},{"npmPackage":"expo-system-ui","versionRange":"~6.0.9"},{"npmPackage":"expo-task-manager","versionRange":"~14.0.9"},{"npmPackage":"expo-tracking-transparency","versionRange":"~6.0.8"},{"npmPackage":"@expo/ui","versionRange":"~0.2.0-beta.9"},{"npmPackage":"expo-updates","versionRange":"~29.0.18"},{"npmPackage":"@expo/vector-icons","versionRange":"^15.0.3"},{"npmPackage":"expo-video","versionRange":"~3.0.16"},{"npmPackage":"expo-video-thumbnails","versionRange":"~10.0.8"},{"npmPackage":"expo-web-browser","versionRange":"~15.0.11"},{"npmPackage":"jest-expo","versionRange":"~54.0.17"},{"npmPackage":"lottie-react-native","versionRange":"~7.3.1"},{"npmPackage":"react","versionRange":"19.1.0"},{"npmPackage":"react-dom","versionRange":"19.1.0"},{"npmPackage":"react-native","versionRange":"0.81.5"},{"npmPackage":"@react-native-async-storage/async-storage","versionRange":"2.2.0"},{"npmPackage":"react-native-bootsplash","versionRange":"^6.3.10"},{"npmPackage":"@react-native-community/datetimepicker","versionRange":"8.4.4"},{"npmPackage":"@react-native-community/netinfo","versionRange":"11.4.1"},{"npmPackage":"@react-native-community/slider","versionRange":"5.0.1"},{"npmPackage":"@react-native-community/viewpager","versionRange":"5.0.11"},{"npmPackage":"react-native-gesture-handler","versionRange":"~2.28.0"},{"npmPackage":"react-native-get-random-values","versionRange":"~1.11.0"},{"npmPackage":"react-native-keyboard-controller","versionRange":"1.18.5"},{"npmPackage":"react-native-maps","versionRange":"1.20.1"},{"npmPackage":"@react-native-masked-view/masked-view","versionRange":"0.3.2"},{"npmPackage":"react-native-pager-view","versionRange":"6.9.1"},{"npmPackage":"@react-native-picker/picker","versionRange":"2.11.1"},{"npmPackage":"react-native-reanimated","versionRange":"~4.1.1"},{"npmPackage":"react-native-safe-area-context","versionRange":"~5.6.0"},{"npmPackage":"react-native-screens","versionRange":"~4.16.0"},{"npmPackage":"@react-native-segmented-control/segmented-control","versionRange":"2.5.7"},{"npmPackage":"react-native-svg","versionRange":"15.12.1"},{"npmPackage":"react-native-view-shot","versionRange":"4.0.3"},{"npmPackage":"react-native-web","versionRange":"~0.21.0"},{"npmPackage":"react-native-webview","versionRange":"13.15.0"},{"npmPackage":"react-native-worklets","versionRange":"0.5.1"},{"npmPackage":"react-server-dom-webpack","versionRange":"~19.1.4"},{"npmPackage":"sentry-expo","versionRange":"~7.0.0"},{"npmPackage":"@sentry/react-native","versionRange":"~7.2.0"},{"npmPackage":"@shopify/flash-list","versionRange":"2.0.2"},{"npmPackage":"@shopify/react-native-skia","versionRange":"2.2.12"},{"npmPackage":"@stripe/stripe-react-native","versionRange":"0.50.3"},{"npmPackage":"unimodules-app-loader","versionRange":"~6.0.8"},{"npmPackage":"unimodules-image-loader-interface","versionRange":"~6.1.0"}]} \ No newline at end of file diff --git a/docs/public/static/schemas/v55.0.0/native-modules.json b/docs/public/static/schemas/v55.0.0/native-modules.json index e91a2eb5368acc..2c6d09b16da32c 100644 --- a/docs/public/static/schemas/v55.0.0/native-modules.json +++ b/docs/public/static/schemas/v55.0.0/native-modules.json @@ -1 +1 @@ -{"versions":[{"npmPackage":"eslint-config-expo","versionRange":"~55.0.1"},{"npmPackage":"expo-analytics-amplitude","versionRange":"~11.3.0"},{"npmPackage":"expo-app-auth","versionRange":"~11.1.0"},{"npmPackage":"expo-apple-authentication","versionRange":"~55.0.13"},{"npmPackage":"expo-application","versionRange":"~55.0.15"},{"npmPackage":"expo-app-loader-provider","versionRange":"~8.0.0"},{"npmPackage":"expo-app-metrics","versionRange":"~0.2.1"},{"npmPackage":"expo-asset","versionRange":"~55.0.17"},{"npmPackage":"expo-audio","versionRange":"~55.0.14"},{"npmPackage":"expo-auth-session","versionRange":"~55.0.16"},{"npmPackage":"expo-background-fetch","versionRange":"~55.0.16"},{"npmPackage":"expo-background-task","versionRange":"~55.0.18"},{"npmPackage":"expo-battery","versionRange":"~55.0.13"},{"npmPackage":"expo-blur","versionRange":"~55.0.14"},{"npmPackage":"expo-brightness","versionRange":"~55.0.13"},{"npmPackage":"expo-brownfield","versionRange":"~55.0.23"},{"npmPackage":"expo-build-properties","versionRange":"~55.0.14"},{"npmPackage":"expo-calendar","versionRange":"~55.0.14"},{"npmPackage":"expo-camera","versionRange":"~55.0.18"},{"npmPackage":"expo-cellular","versionRange":"~55.0.13"},{"npmPackage":"expo-checkbox","versionRange":"~55.0.4"},{"npmPackage":"expo-clipboard","versionRange":"~55.0.13"},{"npmPackage":"expo-constants","versionRange":"~55.0.16"},{"npmPackage":"expo-contacts","versionRange":"~55.0.14"},{"npmPackage":"expo-crypto","versionRange":"~55.0.15"},{"npmPackage":"expo-dev-client","versionRange":"~55.0.33"},{"npmPackage":"expo-device","versionRange":"~55.0.17"},{"npmPackage":"expo-document-picker","versionRange":"~55.0.13"},{"npmPackage":"expo-file-system","versionRange":"~55.0.20"},{"npmPackage":"@expo/fingerprint","versionRange":"~0.16.7"},{"npmPackage":"expo-font","versionRange":"~55.0.7"},{"npmPackage":"expo-gl","versionRange":"~55.0.14"},{"npmPackage":"expo-glass-effect","versionRange":"~55.0.11"},{"npmPackage":"expo-google-app-auth","versionRange":"~8.3.0"},{"npmPackage":"expo-haptics","versionRange":"~55.0.14"},{"npmPackage":"expo-image","versionRange":"~55.0.10"},{"npmPackage":"expo-image-loader","versionRange":"~55.0.0"},{"npmPackage":"expo-image-manipulator","versionRange":"~55.0.16"},{"npmPackage":"expo-image-picker","versionRange":"~55.0.20"},{"npmPackage":"expo-insights","versionRange":"~55.0.17"},{"npmPackage":"expo-intent-launcher","versionRange":"~55.0.12"},{"npmPackage":"expo-keep-awake","versionRange":"~55.0.8"},{"npmPackage":"expo-linear-gradient","versionRange":"~55.0.14"},{"npmPackage":"expo-linking","versionRange":"~55.0.15"},{"npmPackage":"expo-live-photo","versionRange":"~55.0.15"},{"npmPackage":"expo-local-authentication","versionRange":"~55.0.14"},{"npmPackage":"expo-localization","versionRange":"~55.0.14"},{"npmPackage":"expo-location","versionRange":"~55.1.10"},{"npmPackage":"expo-mail-composer","versionRange":"~55.0.14"},{"npmPackage":"expo-manifests","versionRange":"~55.0.17"},{"npmPackage":"expo-maps","versionRange":"~55.0.18"},{"npmPackage":"expo-mcp","versionRange":"~0.2.1"},{"npmPackage":"expo-media-library","versionRange":"~55.0.17"},{"npmPackage":"expo-mesh-gradient","versionRange":"~55.0.14"},{"npmPackage":"@expo/metro-runtime","versionRange":"~55.0.11"},{"npmPackage":"expo-modules-core","versionRange":"~55.0.25"},{"npmPackage":"expo-module-template","versionRange":"~55.0.21"},{"npmPackage":"expo-navigation-bar","versionRange":"~55.0.13"},{"npmPackage":"expo-network","versionRange":"~55.0.14"},{"npmPackage":"expo-notifications","versionRange":"~55.0.23"},{"npmPackage":"expo-observe","versionRange":"~0.2.1"},{"npmPackage":"expo-print","versionRange":"~55.0.15"},{"npmPackage":"expo-router","versionRange":"~55.0.14"},{"npmPackage":"expo-screen-capture","versionRange":"~55.0.14"},{"npmPackage":"expo-screen-orientation","versionRange":"~55.0.15"},{"npmPackage":"expo-secure-store","versionRange":"~55.0.14"},{"npmPackage":"expo-sensors","versionRange":"~55.0.15"},{"npmPackage":"expo-server","versionRange":"~55.0.9"},{"npmPackage":"expo-sharing","versionRange":"~55.0.19"},{"npmPackage":"expo-sms","versionRange":"~55.0.14"},{"npmPackage":"expo-speech","versionRange":"~55.0.14"},{"npmPackage":"expo-splash-screen","versionRange":"~55.0.21"},{"npmPackage":"expo-sqlite","versionRange":"~55.0.16"},{"npmPackage":"expo-status-bar","versionRange":"~55.0.6"},{"npmPackage":"expo-store-review","versionRange":"~55.0.14"},{"npmPackage":"expo-symbols","versionRange":"~55.0.8"},{"npmPackage":"expo-system-ui","versionRange":"~55.0.18"},{"npmPackage":"expo-task-manager","versionRange":"~55.0.16"},{"npmPackage":"expo-tracking-transparency","versionRange":"~55.0.14"},{"npmPackage":"@expo/ui","versionRange":"~55.0.16"},{"npmPackage":"expo-updates","versionRange":"~55.0.22"},{"npmPackage":"@expo/vector-icons","versionRange":"^15.0.2"},{"npmPackage":"expo-video","versionRange":"~55.0.17"},{"npmPackage":"expo-video-thumbnails","versionRange":"~55.0.15"},{"npmPackage":"expo-web-browser","versionRange":"~55.0.16"},{"npmPackage":"jest-expo","versionRange":"~55.0.17"},{"npmPackage":"lottie-react-native","versionRange":"~7.3.4"},{"npmPackage":"react","versionRange":"19.2.0"},{"npmPackage":"react-dom","versionRange":"19.2.0"},{"npmPackage":"react-native","versionRange":"0.83.6"},{"npmPackage":"@react-native-async-storage/async-storage","versionRange":"2.2.0"},{"npmPackage":"react-native-bootsplash","versionRange":"^6.3.10"},{"npmPackage":"@react-native-community/datetimepicker","versionRange":"8.6.0"},{"npmPackage":"@react-native-community/netinfo","versionRange":"11.5.2"},{"npmPackage":"@react-native-community/slider","versionRange":"5.1.2"},{"npmPackage":"@react-native-community/viewpager","versionRange":"5.0.11"},{"npmPackage":"react-native-gesture-handler","versionRange":"~2.30.0"},{"npmPackage":"react-native-get-random-values","versionRange":"~1.11.0"},{"npmPackage":"react-native-keyboard-controller","versionRange":"1.20.7"},{"npmPackage":"react-native-maps","versionRange":"1.27.2"},{"npmPackage":"@react-native-masked-view/masked-view","versionRange":"0.3.2"},{"npmPackage":"react-native-pager-view","versionRange":"8.0.0"},{"npmPackage":"@react-native-picker/picker","versionRange":"2.11.4"},{"npmPackage":"react-native-reanimated","versionRange":"4.2.1"},{"npmPackage":"react-native-safe-area-context","versionRange":"~5.6.2"},{"npmPackage":"react-native-screens","versionRange":"~4.23.0"},{"npmPackage":"@react-native-segmented-control/segmented-control","versionRange":"2.5.7"},{"npmPackage":"react-native-svg","versionRange":"15.15.3"},{"npmPackage":"react-native-view-shot","versionRange":"4.0.3"},{"npmPackage":"react-native-web","versionRange":"~0.21.0"},{"npmPackage":"react-native-webview","versionRange":"13.16.0"},{"npmPackage":"react-native-worklets","versionRange":"0.7.4"},{"npmPackage":"react-server-dom-webpack","versionRange":"~19.2.4"},{"npmPackage":"sentry-expo","versionRange":"~7.0.0"},{"npmPackage":"@sentry/react-native","versionRange":"~7.11.0"},{"npmPackage":"@shopify/flash-list","versionRange":"2.0.2"},{"npmPackage":"@shopify/react-native-skia","versionRange":"2.4.18"},{"npmPackage":"@stripe/stripe-react-native","versionRange":"0.63.0"},{"npmPackage":"unimodules-app-loader","versionRange":"~55.0.5"},{"npmPackage":"unimodules-image-loader-interface","versionRange":"~6.1.0"}]} \ No newline at end of file +{"versions":[{"npmPackage":"eslint-config-expo","versionRange":"~55.0.1"},{"npmPackage":"expo-analytics-amplitude","versionRange":"~11.3.0"},{"npmPackage":"expo-app-auth","versionRange":"~11.1.0"},{"npmPackage":"expo-apple-authentication","versionRange":"~55.0.13"},{"npmPackage":"expo-application","versionRange":"~55.0.15"},{"npmPackage":"expo-app-loader-provider","versionRange":"~8.0.0"},{"npmPackage":"expo-app-metrics","versionRange":"~0.2.2"},{"npmPackage":"expo-asset","versionRange":"~55.0.17"},{"npmPackage":"expo-audio","versionRange":"~55.0.14"},{"npmPackage":"expo-auth-session","versionRange":"~55.0.16"},{"npmPackage":"expo-background-fetch","versionRange":"~55.0.16"},{"npmPackage":"expo-background-task","versionRange":"~55.0.18"},{"npmPackage":"expo-battery","versionRange":"~55.0.13"},{"npmPackage":"expo-blur","versionRange":"~55.0.14"},{"npmPackage":"expo-brightness","versionRange":"~55.0.13"},{"npmPackage":"expo-brownfield","versionRange":"~55.0.24"},{"npmPackage":"expo-build-properties","versionRange":"~55.0.14"},{"npmPackage":"expo-calendar","versionRange":"~55.0.15"},{"npmPackage":"expo-camera","versionRange":"~55.0.19"},{"npmPackage":"expo-cellular","versionRange":"~55.0.13"},{"npmPackage":"expo-checkbox","versionRange":"~55.0.4"},{"npmPackage":"expo-clipboard","versionRange":"~55.0.13"},{"npmPackage":"expo-constants","versionRange":"~55.0.16"},{"npmPackage":"expo-contacts","versionRange":"~55.0.14"},{"npmPackage":"expo-crypto","versionRange":"~55.0.15"},{"npmPackage":"expo-dev-client","versionRange":"~55.0.35"},{"npmPackage":"expo-device","versionRange":"~55.0.17"},{"npmPackage":"expo-document-picker","versionRange":"~55.0.13"},{"npmPackage":"expo-file-system","versionRange":"~55.0.22"},{"npmPackage":"@expo/fingerprint","versionRange":"~0.16.7"},{"npmPackage":"expo-font","versionRange":"~55.0.8"},{"npmPackage":"expo-gl","versionRange":"~55.0.14"},{"npmPackage":"expo-glass-effect","versionRange":"~55.0.11"},{"npmPackage":"expo-google-app-auth","versionRange":"~8.3.0"},{"npmPackage":"expo-haptics","versionRange":"~55.0.14"},{"npmPackage":"expo-image","versionRange":"~55.0.11"},{"npmPackage":"expo-image-loader","versionRange":"~55.0.1"},{"npmPackage":"expo-image-manipulator","versionRange":"~55.0.17"},{"npmPackage":"expo-image-picker","versionRange":"~55.0.20"},{"npmPackage":"expo-insights","versionRange":"~55.0.17"},{"npmPackage":"expo-intent-launcher","versionRange":"~55.0.12"},{"npmPackage":"expo-keep-awake","versionRange":"~55.0.8"},{"npmPackage":"expo-linear-gradient","versionRange":"~55.0.14"},{"npmPackage":"expo-linking","versionRange":"~55.0.15"},{"npmPackage":"expo-live-photo","versionRange":"~55.0.15"},{"npmPackage":"expo-local-authentication","versionRange":"~55.0.14"},{"npmPackage":"expo-localization","versionRange":"~55.0.15"},{"npmPackage":"expo-location","versionRange":"~55.1.10"},{"npmPackage":"expo-mail-composer","versionRange":"~55.0.14"},{"npmPackage":"expo-manifests","versionRange":"~55.0.17"},{"npmPackage":"expo-maps","versionRange":"~55.0.19"},{"npmPackage":"expo-mcp","versionRange":"~0.2.1"},{"npmPackage":"expo-media-library","versionRange":"~55.0.17"},{"npmPackage":"expo-mesh-gradient","versionRange":"~55.0.14"},{"npmPackage":"@expo/metro-runtime","versionRange":"~55.0.11"},{"npmPackage":"expo-modules-core","versionRange":"~55.0.25"},{"npmPackage":"expo-module-template","versionRange":"~55.0.22"},{"npmPackage":"expo-navigation-bar","versionRange":"~55.0.13"},{"npmPackage":"expo-network","versionRange":"~55.0.14"},{"npmPackage":"expo-notifications","versionRange":"~55.0.23"},{"npmPackage":"expo-observe","versionRange":"~0.2.2"},{"npmPackage":"expo-print","versionRange":"~55.0.15"},{"npmPackage":"expo-router","versionRange":"~55.0.16"},{"npmPackage":"expo-screen-capture","versionRange":"~55.0.14"},{"npmPackage":"expo-screen-orientation","versionRange":"~55.0.16"},{"npmPackage":"expo-secure-store","versionRange":"~55.0.14"},{"npmPackage":"expo-sensors","versionRange":"~55.0.15"},{"npmPackage":"expo-server","versionRange":"~55.0.11"},{"npmPackage":"expo-sharing","versionRange":"~55.0.20"},{"npmPackage":"expo-sms","versionRange":"~55.0.14"},{"npmPackage":"expo-speech","versionRange":"~55.0.14"},{"npmPackage":"expo-splash-screen","versionRange":"~55.0.21"},{"npmPackage":"expo-sqlite","versionRange":"~55.0.16"},{"npmPackage":"expo-status-bar","versionRange":"~55.0.6"},{"npmPackage":"expo-store-review","versionRange":"~55.0.14"},{"npmPackage":"expo-symbols","versionRange":"~55.0.9"},{"npmPackage":"expo-system-ui","versionRange":"~55.0.18"},{"npmPackage":"expo-task-manager","versionRange":"~55.0.16"},{"npmPackage":"expo-tracking-transparency","versionRange":"~55.0.14"},{"npmPackage":"@expo/ui","versionRange":"~55.0.17"},{"npmPackage":"expo-updates","versionRange":"~55.0.24"},{"npmPackage":"@expo/vector-icons","versionRange":"^15.0.2"},{"npmPackage":"expo-video","versionRange":"~55.0.17"},{"npmPackage":"expo-video-thumbnails","versionRange":"~55.0.15"},{"npmPackage":"expo-web-browser","versionRange":"~55.0.16"},{"npmPackage":"jest-expo","versionRange":"~55.0.18"},{"npmPackage":"lottie-react-native","versionRange":"~7.3.4"},{"npmPackage":"react","versionRange":"19.2.0"},{"npmPackage":"react-dom","versionRange":"19.2.0"},{"npmPackage":"react-native","versionRange":"0.83.6"},{"npmPackage":"@react-native-async-storage/async-storage","versionRange":"2.2.0"},{"npmPackage":"react-native-bootsplash","versionRange":"^6.3.10"},{"npmPackage":"@react-native-community/datetimepicker","versionRange":"8.6.0"},{"npmPackage":"@react-native-community/netinfo","versionRange":"11.5.2"},{"npmPackage":"@react-native-community/slider","versionRange":"5.1.2"},{"npmPackage":"@react-native-community/viewpager","versionRange":"5.0.11"},{"npmPackage":"react-native-gesture-handler","versionRange":"~2.30.0"},{"npmPackage":"react-native-get-random-values","versionRange":"~1.11.0"},{"npmPackage":"react-native-keyboard-controller","versionRange":"1.20.7"},{"npmPackage":"react-native-maps","versionRange":"1.27.2"},{"npmPackage":"@react-native-masked-view/masked-view","versionRange":"0.3.2"},{"npmPackage":"react-native-pager-view","versionRange":"8.0.0"},{"npmPackage":"@react-native-picker/picker","versionRange":"2.11.4"},{"npmPackage":"react-native-reanimated","versionRange":"4.2.1"},{"npmPackage":"react-native-safe-area-context","versionRange":"~5.6.2"},{"npmPackage":"react-native-screens","versionRange":"~4.23.0"},{"npmPackage":"@react-native-segmented-control/segmented-control","versionRange":"2.5.7"},{"npmPackage":"react-native-svg","versionRange":"15.15.3"},{"npmPackage":"react-native-view-shot","versionRange":"4.0.3"},{"npmPackage":"react-native-web","versionRange":"~0.21.0"},{"npmPackage":"react-native-webview","versionRange":"13.16.0"},{"npmPackage":"react-native-worklets","versionRange":"0.7.4"},{"npmPackage":"react-server-dom-webpack","versionRange":"~19.2.4"},{"npmPackage":"sentry-expo","versionRange":"~7.0.0"},{"npmPackage":"@sentry/react-native","versionRange":"~7.11.0"},{"npmPackage":"@shopify/flash-list","versionRange":"2.0.2"},{"npmPackage":"@shopify/react-native-skia","versionRange":"2.4.18"},{"npmPackage":"@stripe/stripe-react-native","versionRange":"0.63.0"},{"npmPackage":"unimodules-app-loader","versionRange":"~55.0.5"},{"npmPackage":"unimodules-image-loader-interface","versionRange":"~6.1.0"}]} \ No newline at end of file diff --git a/docs/public/static/schemas/v56.0.0/native-modules.json b/docs/public/static/schemas/v56.0.0/native-modules.json index 69e54933dc8a71..459ed47b6e4646 100644 --- a/docs/public/static/schemas/v56.0.0/native-modules.json +++ b/docs/public/static/schemas/v56.0.0/native-modules.json @@ -1 +1 @@ -{"versions":[{"npmPackage":"eslint-config-expo","versionRange":"~56.0.3"},{"npmPackage":"expo-analytics-amplitude","versionRange":"~11.3.0"},{"npmPackage":"expo-app-auth","versionRange":"~11.1.0"},{"npmPackage":"expo-apple-authentication","versionRange":"~56.0.3"},{"npmPackage":"expo-application","versionRange":"~56.0.3"},{"npmPackage":"expo-app-loader-provider","versionRange":"~8.0.0"},{"npmPackage":"expo-app-metrics","versionRange":"~56.0.7"},{"npmPackage":"expo-asset","versionRange":"~56.0.8"},{"npmPackage":"expo-audio","versionRange":"~56.0.5"},{"npmPackage":"expo-auth-session","versionRange":"~56.0.6"},{"npmPackage":"expo-background-fetch","versionRange":"~56.0.7"},{"npmPackage":"expo-background-task","versionRange":"~56.0.7"},{"npmPackage":"expo-battery","versionRange":"~56.0.3"},{"npmPackage":"expo-blur","versionRange":"~56.0.3"},{"npmPackage":"expo-brightness","versionRange":"~56.0.4"},{"npmPackage":"expo-brownfield","versionRange":"~56.0.8"},{"npmPackage":"expo-build-properties","versionRange":"~56.0.7"},{"npmPackage":"expo-calendar","versionRange":"~56.0.5"},{"npmPackage":"expo-camera","versionRange":"~56.0.4"},{"npmPackage":"expo-cellular","versionRange":"~56.0.4"},{"npmPackage":"expo-checkbox","versionRange":"~56.0.1"},{"npmPackage":"expo-clipboard","versionRange":"~56.0.3"},{"npmPackage":"expo-constants","versionRange":"~56.0.9"},{"npmPackage":"expo-contacts","versionRange":"~56.0.4"},{"npmPackage":"expo-crypto","versionRange":"~56.0.3"},{"npmPackage":"expo-dev-client","versionRange":"~56.0.9"},{"npmPackage":"expo-device","versionRange":"~56.0.4"},{"npmPackage":"expo-document-picker","versionRange":"~56.0.3"},{"npmPackage":"expo-file-system","versionRange":"~56.0.4"},{"npmPackage":"@expo/fingerprint","versionRange":"~0.18.0"},{"npmPackage":"expo-font","versionRange":"~56.0.3"},{"npmPackage":"expo-gl","versionRange":"~56.0.3"},{"npmPackage":"expo-glass-effect","versionRange":"~56.0.4"},{"npmPackage":"expo-google-app-auth","versionRange":"~8.3.0"},{"npmPackage":"expo-haptics","versionRange":"~56.0.3"},{"npmPackage":"expo-image","versionRange":"~56.0.4"},{"npmPackage":"expo-image-loader","versionRange":"~56.0.3"},{"npmPackage":"expo-image-manipulator","versionRange":"~56.0.7"},{"npmPackage":"expo-image-picker","versionRange":"~56.0.7"},{"npmPackage":"expo-insights","versionRange":"~56.0.7"},{"npmPackage":"expo-intent-launcher","versionRange":"~56.0.3"},{"npmPackage":"expo-keep-awake","versionRange":"~56.0.3"},{"npmPackage":"expo-linear-gradient","versionRange":"~56.0.4"},{"npmPackage":"expo-linking","versionRange":"~56.0.6"},{"npmPackage":"expo-live-photo","versionRange":"~56.0.3"},{"npmPackage":"expo-local-authentication","versionRange":"~56.0.3"},{"npmPackage":"expo-localization","versionRange":"~56.0.4"},{"npmPackage":"expo-location","versionRange":"~56.0.7"},{"npmPackage":"expo-mail-composer","versionRange":"~56.0.3"},{"npmPackage":"expo-manifests","versionRange":"~56.0.3"},{"npmPackage":"expo-maps","versionRange":"~56.0.5"},{"npmPackage":"expo-mcp","versionRange":"~0.2.1"},{"npmPackage":"expo-media-library","versionRange":"~56.0.4"},{"npmPackage":"expo-mesh-gradient","versionRange":"~56.0.3"},{"npmPackage":"@expo/metro-runtime","versionRange":"~56.0.7"},{"npmPackage":"expo-modules-core","versionRange":"~56.0.7"},{"npmPackage":"expo-module-template","versionRange":"~56.0.5"},{"npmPackage":"expo-navigation-bar","versionRange":"~56.0.3"},{"npmPackage":"expo-network","versionRange":"~56.0.3"},{"npmPackage":"expo-notifications","versionRange":"~56.0.7"},{"npmPackage":"expo-observe","versionRange":"~56.0.7"},{"npmPackage":"expo-print","versionRange":"~56.0.3"},{"npmPackage":"expo-router","versionRange":"~56.1.4"},{"npmPackage":"expo-screen-capture","versionRange":"~56.0.4"},{"npmPackage":"expo-screen-orientation","versionRange":"~56.0.3"},{"npmPackage":"expo-secure-store","versionRange":"~56.0.3"},{"npmPackage":"expo-sensors","versionRange":"~56.0.4"},{"npmPackage":"expo-server","versionRange":"~56.0.1"},{"npmPackage":"expo-sharing","versionRange":"~56.0.7"},{"npmPackage":"expo-sms","versionRange":"~56.0.3"},{"npmPackage":"expo-speech","versionRange":"~56.0.3"},{"npmPackage":"expo-splash-screen","versionRange":"~56.0.5"},{"npmPackage":"expo-sqlite","versionRange":"~56.0.3"},{"npmPackage":"expo-status-bar","versionRange":"~56.0.4"},{"npmPackage":"expo-store-review","versionRange":"~56.0.3"},{"npmPackage":"expo-symbols","versionRange":"~56.0.5"},{"npmPackage":"expo-system-ui","versionRange":"~56.0.4"},{"npmPackage":"expo-task-manager","versionRange":"~56.0.7"},{"npmPackage":"expo-tracking-transparency","versionRange":"~56.0.4"},{"npmPackage":"@expo/ui","versionRange":"~56.0.6"},{"npmPackage":"expo-updates","versionRange":"~56.0.10"},{"npmPackage":"@expo/vector-icons","versionRange":"^15.0.2"},{"npmPackage":"expo-video","versionRange":"~56.1.0"},{"npmPackage":"expo-video-thumbnails","versionRange":"~56.0.3"},{"npmPackage":"expo-web-browser","versionRange":"~56.0.4"},{"npmPackage":"expo-widgets","versionRange":"~56.0.7"},{"npmPackage":"jest-expo","versionRange":"~56.0.1"},{"npmPackage":"lottie-react-native","versionRange":"~7.3.4"},{"npmPackage":"react","versionRange":"19.2.3"},{"npmPackage":"react-dom","versionRange":"19.2.3"},{"npmPackage":"react-native","versionRange":"0.85.3"},{"npmPackage":"@react-native-async-storage/async-storage","versionRange":"2.2.0"},{"npmPackage":"react-native-bootsplash","versionRange":"^6.3.10"},{"npmPackage":"@react-native-community/datetimepicker","versionRange":"9.1.0"},{"npmPackage":"@react-native-community/netinfo","versionRange":"12.0.1"},{"npmPackage":"@react-native-community/slider","versionRange":"5.2.0"},{"npmPackage":"@react-native-community/viewpager","versionRange":"5.0.11"},{"npmPackage":"react-native-gesture-handler","versionRange":"~2.31.1"},{"npmPackage":"react-native-get-random-values","versionRange":"~1.11.0"},{"npmPackage":"react-native-keyboard-controller","versionRange":"1.21.6"},{"npmPackage":"react-native-maps","versionRange":"1.27.2"},{"npmPackage":"@react-native-masked-view/masked-view","versionRange":"0.3.2"},{"npmPackage":"react-native-pager-view","versionRange":"8.0.1"},{"npmPackage":"@react-native-picker/picker","versionRange":"2.11.4"},{"npmPackage":"react-native-reanimated","versionRange":"4.3.1"},{"npmPackage":"react-native-safe-area-context","versionRange":"~5.7.0"},{"npmPackage":"react-native-screens","versionRange":"4.25.0"},{"npmPackage":"@react-native-segmented-control/segmented-control","versionRange":"2.5.7"},{"npmPackage":"react-native-svg","versionRange":"15.15.4"},{"npmPackage":"react-native-view-shot","versionRange":"4.0.3"},{"npmPackage":"react-native-web","versionRange":"~0.21.0"},{"npmPackage":"react-native-webview","versionRange":"13.16.1"},{"npmPackage":"react-native-worklets","versionRange":"0.8.3"},{"npmPackage":"react-server-dom-webpack","versionRange":"~19.2.4"},{"npmPackage":"sentry-expo","versionRange":"~7.0.0"},{"npmPackage":"@sentry/react-native","versionRange":"~7.11.0"},{"npmPackage":"@shopify/flash-list","versionRange":"2.0.2"},{"npmPackage":"@shopify/react-native-skia","versionRange":"2.6.2"},{"npmPackage":"@stripe/stripe-react-native","versionRange":"0.64.0"},{"npmPackage":"unimodules-app-loader","versionRange":"~56.0.1"},{"npmPackage":"unimodules-image-loader-interface","versionRange":"~6.1.0"}]} \ No newline at end of file +{"versions":[{"npmPackage":"eslint-config-expo","versionRange":"~56.0.4"},{"npmPackage":"expo-analytics-amplitude","versionRange":"~11.3.0"},{"npmPackage":"expo-app-auth","versionRange":"~11.1.0"},{"npmPackage":"expo-apple-authentication","versionRange":"~56.0.4"},{"npmPackage":"expo-application","versionRange":"~56.0.3"},{"npmPackage":"expo-app-loader-provider","versionRange":"~8.0.0"},{"npmPackage":"expo-app-metrics","versionRange":"~56.0.17"},{"npmPackage":"expo-asset","versionRange":"~56.0.16"},{"npmPackage":"expo-audio","versionRange":"~56.0.11"},{"npmPackage":"expo-auth-session","versionRange":"~56.0.13"},{"npmPackage":"expo-background-fetch","versionRange":"~56.0.17"},{"npmPackage":"expo-background-task","versionRange":"~56.0.17"},{"npmPackage":"expo-battery","versionRange":"~56.0.4"},{"npmPackage":"expo-blur","versionRange":"~56.0.3"},{"npmPackage":"expo-brightness","versionRange":"~56.0.5"},{"npmPackage":"expo-brownfield","versionRange":"~56.0.18"},{"npmPackage":"expo-build-properties","versionRange":"~56.0.17"},{"npmPackage":"expo-calendar","versionRange":"~56.0.8"},{"npmPackage":"expo-camera","versionRange":"~56.0.7"},{"npmPackage":"expo-cellular","versionRange":"~56.0.5"},{"npmPackage":"expo-checkbox","versionRange":"~56.0.1"},{"npmPackage":"expo-clipboard","versionRange":"~56.0.4"},{"npmPackage":"expo-constants","versionRange":"~56.0.17"},{"npmPackage":"expo-contacts","versionRange":"~56.0.8"},{"npmPackage":"expo-crypto","versionRange":"~56.0.4"},{"npmPackage":"expo-dev-client","versionRange":"~56.0.19"},{"npmPackage":"expo-device","versionRange":"~56.0.4"},{"npmPackage":"expo-document-picker","versionRange":"~56.0.4"},{"npmPackage":"expo-file-system","versionRange":"~56.0.7"},{"npmPackage":"@expo/fingerprint","versionRange":"~0.19.4"},{"npmPackage":"expo-font","versionRange":"~56.0.5"},{"npmPackage":"expo-gl","versionRange":"~56.0.5"},{"npmPackage":"expo-glass-effect","versionRange":"~56.0.4"},{"npmPackage":"expo-google-app-auth","versionRange":"~8.3.0"},{"npmPackage":"expo-haptics","versionRange":"~56.0.3"},{"npmPackage":"expo-image","versionRange":"~56.0.10"},{"npmPackage":"expo-image-loader","versionRange":"~56.0.3"},{"npmPackage":"expo-image-manipulator","versionRange":"~56.0.17"},{"npmPackage":"expo-image-picker","versionRange":"~56.0.16"},{"npmPackage":"expo-insights","versionRange":"~56.0.16"},{"npmPackage":"expo-intent-launcher","versionRange":"~56.0.4"},{"npmPackage":"expo-keep-awake","versionRange":"~56.0.3"},{"npmPackage":"expo-linear-gradient","versionRange":"~56.0.4"},{"npmPackage":"expo-linking","versionRange":"~56.0.13"},{"npmPackage":"expo-live-photo","versionRange":"~56.0.3"},{"npmPackage":"expo-local-authentication","versionRange":"~56.0.4"},{"npmPackage":"expo-localization","versionRange":"~56.0.6"},{"npmPackage":"expo-location","versionRange":"~56.0.16"},{"npmPackage":"expo-mail-composer","versionRange":"~56.0.4"},{"npmPackage":"expo-manifests","versionRange":"~56.0.4"},{"npmPackage":"expo-maps","versionRange":"~56.0.6"},{"npmPackage":"expo-mcp","versionRange":"~0.2.1"},{"npmPackage":"expo-media-library","versionRange":"~56.0.6"},{"npmPackage":"expo-mesh-gradient","versionRange":"~56.0.3"},{"npmPackage":"@expo/metro-runtime","versionRange":"~56.0.14"},{"npmPackage":"expo-modules-core","versionRange":"~56.0.15"},{"npmPackage":"expo-module-template","versionRange":"~56.0.13"},{"npmPackage":"expo-navigation-bar","versionRange":"~56.0.3"},{"npmPackage":"expo-network","versionRange":"~56.0.5"},{"npmPackage":"expo-notifications","versionRange":"~56.0.16"},{"npmPackage":"expo-observe","versionRange":"~56.0.19"},{"npmPackage":"expo-print","versionRange":"~56.0.3"},{"npmPackage":"expo-router","versionRange":"~56.2.9"},{"npmPackage":"expo-screen-capture","versionRange":"~56.0.4"},{"npmPackage":"expo-screen-orientation","versionRange":"~56.0.5"},{"npmPackage":"expo-secure-store","versionRange":"~56.0.4"},{"npmPackage":"expo-sensors","versionRange":"~56.0.5"},{"npmPackage":"expo-server","versionRange":"~56.0.5"},{"npmPackage":"expo-sharing","versionRange":"~56.0.16"},{"npmPackage":"expo-sms","versionRange":"~56.0.3"},{"npmPackage":"expo-speech","versionRange":"~56.0.3"},{"npmPackage":"expo-splash-screen","versionRange":"~56.0.10"},{"npmPackage":"expo-sqlite","versionRange":"~56.0.4"},{"npmPackage":"expo-status-bar","versionRange":"~56.0.4"},{"npmPackage":"expo-store-review","versionRange":"~56.0.3"},{"npmPackage":"expo-symbols","versionRange":"~56.0.6"},{"npmPackage":"expo-system-ui","versionRange":"~56.0.5"},{"npmPackage":"expo-task-manager","versionRange":"~56.0.17"},{"npmPackage":"expo-tracking-transparency","versionRange":"~56.0.5"},{"npmPackage":"@expo/ui","versionRange":"~56.0.16"},{"npmPackage":"expo-updates","versionRange":"~56.0.18"},{"npmPackage":"@expo/vector-icons","versionRange":"^15.0.2"},{"npmPackage":"expo-video","versionRange":"~56.1.2"},{"npmPackage":"expo-video-thumbnails","versionRange":"~56.0.3"},{"npmPackage":"expo-web-browser","versionRange":"~56.0.5"},{"npmPackage":"expo-widgets","versionRange":"~56.0.17"},{"npmPackage":"jest-expo","versionRange":"~56.0.4"},{"npmPackage":"lottie-react-native","versionRange":"~7.3.4"},{"npmPackage":"react","versionRange":"19.2.3"},{"npmPackage":"react-dom","versionRange":"19.2.3"},{"npmPackage":"react-native","versionRange":"0.85.3"},{"npmPackage":"@react-native-async-storage/async-storage","versionRange":"2.2.0"},{"npmPackage":"react-native-bootsplash","versionRange":"^6.3.10"},{"npmPackage":"@react-native-community/datetimepicker","versionRange":"9.1.0"},{"npmPackage":"@react-native-community/netinfo","versionRange":"12.0.1"},{"npmPackage":"@react-native-community/slider","versionRange":"5.2.0"},{"npmPackage":"@react-native-community/viewpager","versionRange":"5.0.11"},{"npmPackage":"react-native-gesture-handler","versionRange":"~2.31.1"},{"npmPackage":"react-native-get-random-values","versionRange":"~1.11.0"},{"npmPackage":"react-native-keyboard-controller","versionRange":"1.21.6"},{"npmPackage":"react-native-maps","versionRange":"1.27.2"},{"npmPackage":"@react-native-masked-view/masked-view","versionRange":"0.3.2"},{"npmPackage":"react-native-pager-view","versionRange":"8.0.1"},{"npmPackage":"@react-native-picker/picker","versionRange":"2.11.4"},{"npmPackage":"react-native-reanimated","versionRange":"4.3.1"},{"npmPackage":"react-native-safe-area-context","versionRange":"~5.7.0"},{"npmPackage":"react-native-screens","versionRange":"4.25.2"},{"npmPackage":"@react-native-segmented-control/segmented-control","versionRange":"2.5.7"},{"npmPackage":"react-native-svg","versionRange":"15.15.4"},{"npmPackage":"react-native-view-shot","versionRange":"5.1.0"},{"npmPackage":"react-native-web","versionRange":"~0.21.0"},{"npmPackage":"react-native-webview","versionRange":"13.16.1"},{"npmPackage":"react-native-worklets","versionRange":"0.8.3"},{"npmPackage":"react-server-dom-webpack","versionRange":"~19.2.4"},{"npmPackage":"sentry-expo","versionRange":"~7.0.0"},{"npmPackage":"@sentry/react-native","versionRange":"~7.11.0"},{"npmPackage":"@shopify/flash-list","versionRange":"2.0.2"},{"npmPackage":"@shopify/react-native-skia","versionRange":"2.6.2"},{"npmPackage":"@stripe/stripe-react-native","versionRange":"0.64.0"},{"npmPackage":"unimodules-app-loader","versionRange":"~56.0.1"},{"npmPackage":"unimodules-image-loader-interface","versionRange":"~6.1.0"}]} \ No newline at end of file diff --git a/docs/scenes/get-started/set-up-your-environment/instructions/_androidEmulatorInstructions.mdx b/docs/scenes/get-started/set-up-your-environment/instructions/_androidEmulatorInstructions.mdx index 52adbd8d4145da..1bd876184cb742 100644 --- a/docs/scenes/get-started/set-up-your-environment/instructions/_androidEmulatorInstructions.mdx +++ b/docs/scenes/get-started/set-up-your-environment/instructions/_androidEmulatorInstructions.mdx @@ -8,7 +8,7 @@ On the Android Studio main screen, click **More Actions**, then **Virtual Device @@ -16,11 +16,11 @@ On the Android Studio main screen, click **More Actions**, then **Virtual Device -Click the **Create device** button. +Click **Create virtual device**. @@ -32,7 +32,7 @@ Under **Add device**, choose the type of hardware you'd like to emulate. We reco @@ -44,7 +44,7 @@ Select an OS version to load on the emulator (probably one of the system images) @@ -52,6 +52,6 @@ Select an OS version to load on the emulator (probably one of the system images) -Change any other settings you'd like, and press **Finish** to create the emulator. You can now run this emulator anytime by pressing the Play button in the AVD Manager window. +Change any other settings you'd like, and press **Finish** to create the emulator. You can now run this emulator anytime by pressing the Play button in the **Device Manager** window. diff --git a/docs/scenes/get-started/set-up-your-environment/instructions/_androidStudioInstructions.mdx b/docs/scenes/get-started/set-up-your-environment/instructions/_androidStudioInstructions.mdx index 26563523f9f369..d3221551fa97f5 100644 --- a/docs/scenes/get-started/set-up-your-environment/instructions/_androidStudioInstructions.mdx +++ b/docs/scenes/get-started/set-up-your-environment/instructions/_androidStudioInstructions.mdx @@ -18,25 +18,27 @@ Download and install [Android Studio](https://developer.android.com/studio). -Open the **Android Studio** app, you will see the **SDK Components setup** screen. Click **Next** to continue to install the Android SDK and Android SDK Platform. Click **Next** again to verify the settings and install. +Open the **Android Studio** app. On the first launch, the **Android Studio Setup Wizard** appears. Click **Next** on the **Welcome** screen. Then, under **Install Type**, select **Standard** and click **Next**. +Verify the settings and click **Next**. Then, accept the license agreement and click **Next** again. The wizard downloads and installs the Android SDK and its tools. Click **Finish** when the installation completes. + -By default, Android Studio will install the latest version of the Android SDK. However, Android 15 (`VanillaIceCream`) SDK is required to compile a React Native app. +By default, Android Studio will install the latest version of the Android SDK. However, Android 16 (`Baklava`) SDK is required to compile a React Native app. -Open Android Studio, go to **Settings** > **Languages & Frameworks** > **Android SDK**. From the **SDK Platforms** tab, and under **Android 15 (`VanillaIceCream`)**, select **Android SDK Platform 35** and **Sources for Android 35**. +Open Android Studio, go to **Settings** > **Languages & Frameworks** > **Android SDK**. From the **SDK Platforms** tab, and under **Android 16 (`Baklava`)**, select **Android SDK Platform 36** and **Sources for Android 36**. @@ -48,7 +50,7 @@ Then, click on the **SDK Tools** tab and make sure you have at least one version @@ -60,7 +62,7 @@ Copy or remember the path listed in the box that says **Android SDK Location**. @@ -140,7 +142,7 @@ In the Android Studio Setup Wizard, under **Install Type**, select **Standard** @@ -158,7 +160,7 @@ In the next window, accept licenses for all available components. @@ -166,13 +168,13 @@ In the next window, accept licenses for all available components. -By default, Android Studio will install the latest version of the Android SDK. However, Android 15 (`VanillaIceCream`) SDK is required to compile a React Native app. +By default, Android Studio will install the latest version of the Android SDK. However, Android 16 (`Baklava`) SDK is required to compile a React Native app. -Open Android Studio, go to **Settings** > **Languages & Frameworks** > **Android SDK**. From the **SDK Platforms** tab, and under **Android 15 (`VanillaIceCream`)**, select **Android SDK Platform 35** and **Sources for Android 35**. +Open Android Studio, go to **Settings** > **Languages & Frameworks** > **Android SDK**. From the **SDK Platforms** tab, and under **Android 16 (`Baklava`)**, select **Android SDK Platform 36** and **Sources for Android 36**. @@ -184,7 +186,7 @@ Then, click on the **SDK Tools** tab and make sure you have at least one version @@ -196,7 +198,7 @@ After the tools installation is complete, configure the `ANDROID_HOME` environme @@ -212,7 +214,7 @@ To find the location of the SDK in Android Studio manually, go to **Settings** > @@ -236,7 +238,7 @@ To add platform-tools to the Path, go to **Windows Control Panel** > **User Acco diff --git a/docs/scenes/get-started/set-up-your-environment/instructions/_xcodeInstructions.mdx b/docs/scenes/get-started/set-up-your-environment/instructions/_xcodeInstructions.mdx index a86aa70d6c269c..ec11f5f28e3941 100644 --- a/docs/scenes/get-started/set-up-your-environment/instructions/_xcodeInstructions.mdx +++ b/docs/scenes/get-started/set-up-your-environment/instructions/_xcodeInstructions.mdx @@ -18,7 +18,7 @@ Open Xcode, choose **Settings...** from the Xcode menu (or press cmd โŒ˜ diff --git a/docs/scripts/fetch-versions-schema.js b/docs/scripts/fetch-versions-schema.js index 6dbb233db5889f..35f93edc205d89 100644 --- a/docs/scripts/fetch-versions-schema.js +++ b/docs/scripts/fetch-versions-schema.js @@ -47,11 +47,21 @@ export async function getSchemaAsync(sdkVersion, isUnversioned = false) { } const versionedVersions = VERSIONS.filter(version => version.includes('.')); -const nextVersion = inc(BETA_VERSION ?? LATEST_VERSION, 'major'); +const nextVersion = inc(BETA_VERSION || LATEST_VERSION, 'major'); -await Promise.all([ +const labels = [...versionedVersions, `${nextVersion} (unversioned)`]; +const results = await Promise.allSettled([ ...versionedVersions.map(version => getSchemaAsync(version)), getSchemaAsync(nextVersion, true), ]); -console.log(` \x1b[1m\x1b[32mโœ“\x1b[0m Successfully fetched versions schemas`); +results.forEach((result, index) => { + if (result.status === 'rejected') { + console.warn( + ` \x1b[1m\x1b[33mโš \x1b[0m Kept committed snapshot for ${labels[index]}: ${result.reason.message}` + ); + } +}); + +const fetched = results.filter(result => result.status === 'fulfilled').length; +console.log(` \x1b[1m\x1b[32mโœ“\x1b[0m Fetched ${fetched}/${results.length} versions schemas`); diff --git a/docs/tailwind.config.cjs b/docs/tailwind.config.cjs index 404dca1854c967..081e650ff7451d 100644 --- a/docs/tailwind.config.cjs +++ b/docs/tailwind.config.cjs @@ -29,19 +29,12 @@ module.exports = { xl: '1328px', '2xl': '1572px', }, - backgroundColor: { - 'launch-party-red': '#D22323', - 'launch-party-blue': '#006CFF', - 'launch-party-yellow': '#F3AD0D', - }, borderColor: { 'palette-orange3.5': 'hsl(from var(--orange-4) h calc(s - 5) calc(l + 5));', }, backgroundImage: { 'cell-quickstart-pattern': "url('/static/images/home/QuickStartPattern.svg')", 'cell-tutorial-pattern': "url('/static/images/home/TutorialPattern.svg')", - 'launch-party-banner': "url('/static/images/launch-party-banner-bg.svg')", - 'launch-party-banner-mobile': "url('/static/images/launch-party-banner-bg.svg') 200px", }, keyframes: { wave: { diff --git a/docs/ui/components/CustomIcons/AIProviderIcons.tsx b/docs/ui/components/CustomIcons/AIProviderIcons.tsx index 5cde4645be65b9..98ce312a67011f 100644 --- a/docs/ui/components/CustomIcons/AIProviderIcons.tsx +++ b/docs/ui/components/CustomIcons/AIProviderIcons.tsx @@ -11,3 +11,29 @@ export const ClaudeLogoIcon = ({ className, ...props }: SVGProps) ); + +export const ClaudeCodeLogoIcon = ({ className, ...props }: SVGProps) => ( + + + +); + +export const CodexLogoIcon = ({ className, ...props }: SVGProps) => ( + + + +); + +export const CursorLogoIcon = ({ className, ...props }: SVGProps) => ( + + + +); diff --git a/docs/ui/components/LaunchPartyBanner/ConfettiPopper.tsx b/docs/ui/components/LaunchPartyBanner/ConfettiPopper.tsx deleted file mode 100644 index 4270e3b7bcd6aa..00000000000000 --- a/docs/ui/components/LaunchPartyBanner/ConfettiPopper.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { mergeClasses } from '@expo/styleguide'; -import { useState } from 'react'; -import ConfettiExplosionComponent from 'react-confetti-explosion'; - -const CONFETTI_DURATION = 2250; - -export function ConfettiPopper() { - const [confettiPressed, setConfettiPressed] = useState(false); - const [confettiShown, setConfettiShown] = useState(false); - - function onEasterEggClick() { - if (!confettiShown) { - setConfettiShown(true); - setTimeout(() => { - setConfettiShown(false); - }, CONFETTI_DURATION); - } - } - return ( - <> -
{ - if (!confettiShown) { - setConfettiPressed(true); - } - }} - onMouseUp={() => { - setConfettiPressed(false); - }} - onTouchStart={() => { - if (!confettiShown) { - setConfettiPressed(true); - } - }} - onTouchEnd={() => { - setConfettiPressed(false); - }} - className={mergeClasses( - 'inline-flex cursor-help transition duration-150', - confettiPressed && 'scale-90' - )}> - ๐ŸŽ‰ -
- {confettiShown && ( -
- -
- )} - - ); -} diff --git a/docs/ui/components/LaunchPartyBanner/index.tsx b/docs/ui/components/LaunchPartyBanner/index.tsx deleted file mode 100644 index f976a1df0695f0..00000000000000 --- a/docs/ui/components/LaunchPartyBanner/index.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { Button, mergeClasses } from '@expo/styleguide'; -import { ArrowUpRightIcon } from '@expo/styleguide-icons/outline/ArrowUpRightIcon'; -import { XIcon } from '@expo/styleguide-icons/outline/XIcon'; -import { isBefore } from 'date-fns/isBefore'; -import { useEffect, useState } from 'react'; - -import { useLocalStorage } from '~/common/useLocalStorage'; -import { CALLOUT, HEADLINE } from '~/ui/components/Text'; - -import { ConfettiPopper } from './ConfettiPopper'; - -type Props = { - currentDateAsString?: string; -}; - -export function LaunchPartyBanner({ currentDateAsString }: Props) { - const [isLoaded, setIsLoaded] = useState(false); - const [isLaunchPartyBannerVisible, setLaunchPartyBannerVisible] = useLocalStorage({ - name: '2024-launch-party-banner', - defaultValue: true, - }); - - const appJSConfEndDate = new Date('2024-11-22'); - const currentDate = currentDateAsString ? new Date(currentDateAsString) : new Date(); - const showLaunchPartyShoutout = isBefore(currentDate, appJSConfEndDate); - - useEffect(function didMount() { - setIsLoaded(true); - }, []); - - if (!isLaunchPartyBannerVisible || !showLaunchPartyShoutout || !isLoaded) { - return null; - } - - return ( -
- - ); -} diff --git a/docs/ui/components/MarkdownActions/MarkdownActionsDropdown.tsx b/docs/ui/components/MarkdownActions/MarkdownActionsDropdown.tsx index a84fdcfedf5151..abf88014701a15 100644 --- a/docs/ui/components/MarkdownActions/MarkdownActionsDropdown.tsx +++ b/docs/ui/components/MarkdownActions/MarkdownActionsDropdown.tsx @@ -4,13 +4,19 @@ import { Copy04Icon } from '@expo/styleguide-icons/outline/Copy04Icon'; import { useRouter } from 'next/compat/router'; import { useCallback, useMemo } from 'react'; -import { ClaudeLogoIcon, OpenAILogoIcon } from '~/ui/components/CustomIcons/AIProviderIcons'; +import { + ClaudeCodeLogoIcon, + ClaudeLogoIcon, + CodexLogoIcon, + CursorLogoIcon, + OpenAILogoIcon, +} from '~/ui/components/CustomIcons/AIProviderIcons'; import { MarkdownIcon } from '~/ui/components/CustomIcons/MarkdownIcon'; import * as Dropdown from '~/ui/components/Dropdown'; import { FOOTNOTE } from '~/ui/components/Text'; const getPrompt = (url: string) => - encodeURIComponent(`Read from ${url} so I can ask questions about it.`); + encodeURIComponent(`Read this documentation page, so I can ask questions about it:\n\n${url}`); export function MarkdownActionsDropdown() { const router = useRouter(); @@ -56,31 +62,52 @@ export function MarkdownActionsDropdown() { } }, [markdownViewUrl]); - const pageUrl = useMemo(() => { - if (!pagePath) { + const markdownUrl = useMemo(() => { + if (!markdownViewUrl) { return null; } if (typeof window !== 'undefined' && window.location?.origin) { - return `${window.location.origin}${pagePath}`; + return `${window.location.origin}${markdownViewUrl}`; } - return `https://docs.expo.dev${pagePath}`; - }, [pagePath]); + return `https://docs.expo.dev${markdownViewUrl}`; + }, [markdownViewUrl]); const chatGptUrl = useMemo(() => { - if (!pageUrl) { + if (!markdownUrl) { return null; } - return `https://chat.openai.com/?q=${getPrompt(pageUrl)}`; - }, [pageUrl]); + return `https://chat.openai.com/?q=${getPrompt(markdownUrl)}`; + }, [markdownUrl]); + + const codexUrl = useMemo(() => { + if (!markdownUrl) { + return null; + } + return `codex://new?prompt=${getPrompt(markdownUrl)}`; + }, [markdownUrl]); const claudeUrl = useMemo(() => { - if (!pageUrl) { + if (!markdownUrl) { + return null; + } + return `https://claude.ai/new?q=${getPrompt(markdownUrl)}`; + }, [markdownUrl]); + + const claudeCodeUrl = useMemo(() => { + if (!markdownUrl) { + return null; + } + return `claude-cli://open?q=${getPrompt(markdownUrl)}`; + }, [markdownUrl]); + + const cursorUrl = useMemo(() => { + if (!markdownUrl) { return null; } - return `https://claude.ai/new?q=${getPrompt(pageUrl)}`; - }, [pageUrl]); + return `https://cursor.com/link/prompt?text=${getPrompt(markdownUrl)}`; + }, [markdownUrl]); const dropdownItems = []; @@ -119,6 +146,18 @@ export function MarkdownActionsDropdown() { ); } + if (codexUrl) { + dropdownItems.push( + + ); + } + if (claudeUrl) { dropdownItems.push( + ); + } + + if (cursorUrl) { + dropdownItems.push( + + ); + } + if (dropdownItems.length === 0) { return null; } diff --git a/packages/create-expo-nightly/src/Packages.ts b/packages/create-expo-nightly/src/Packages.ts index 9ff51ee5610054..53dc5feabcea4b 100644 --- a/packages/create-expo-nightly/src/Packages.ts +++ b/packages/create-expo-nightly/src/Packages.ts @@ -1,11 +1,8 @@ import fs from 'node:fs'; import path from 'node:path'; -import { mergeJsonFilesAsync, readJsonFileAsync } from './JsonFile.js'; import { runAsync } from './Processes.js'; -const cachedPackages: Package[] | null = null; - const EXCLUDE_PACKAGES = [ '@expo/fingerprint', 'create-expo', @@ -68,16 +65,22 @@ export async function getReactNativeTransitivePackagesAsync( return packages; } -async function createPackageAsync(packageRoot: string): Promise { - const packageJsonPath = path.join(packageRoot, 'package.json'); - const packagePath = path.dirname(packageJsonPath); - const packageJson = await readJsonFileAsync(packageJsonPath); - const name = packageJson.name as string; - if (EXCLUDE_PACKAGES.includes(name)) { - return null; - } - return { - name, - path: packagePath, - }; +/** + * Get the names of every Expo package in the expo repo that can be linked from + * local source, i.e. every workspace package under `packages/` minus the + * excluded ones. + */ +export async function getExpoPackageNamesAsync(expoRepoPath: string): Promise> { + const { stdout } = await runAsync('pnpm', ['list', '--depth=-1', '--recursive', '--json'], { + cwd: expoRepoPath, + }); + + const workspaces = JSON.parse(stdout) as Package[]; + const packagesRoot = path.join(expoRepoPath, 'packages') + path.sep; + + const names = workspaces + .filter(({ name, path }) => path.startsWith(packagesRoot) && !EXCLUDE_PACKAGES.includes(name)) + .map(({ name }) => name); + + return new Set(names); } diff --git a/packages/create-expo-nightly/src/Project.ts b/packages/create-expo-nightly/src/Project.ts index a46abfb29fdd95..abe6ed080b9ce1 100644 --- a/packages/create-expo-nightly/src/Project.ts +++ b/packages/create-expo-nightly/src/Project.ts @@ -7,11 +7,10 @@ import { type JSONArray, type JSONObject, type JSONValue, - mergeJsonFilesAsync, readJsonFileAsync, writeJsonFileAsync, } from './JsonFile.js'; -import { REACT_NATIVE_TRANSITIVE_DEPENDENCIES } from './Packages.js'; +import { REACT_NATIVE_TRANSITIVE_DEPENDENCIES, getExpoPackageNamesAsync } from './Packages.js'; import { runAsync } from './Processes.js'; export interface ProjectProperties { @@ -77,22 +76,32 @@ async function setupProjectPackageJsonAsync( const packageJsonPath = path.join(projectRoot, 'package.json'); const packageJson = await readJsonFileAsync(packageJsonPath); - let workspacePrefix: string; - const relativePath = path.relative(projectRoot, expoRepoPath); - if (relativePath.startsWith('..')) { - workspacePrefix = expoRepoPath; - } else { - workspacePrefix = relativePath; - } - const resolutions: Record = (packageJson.resolutions as Record) ?? {}; for (const name of REACT_NATIVE_TRANSITIVE_DEPENDENCIES) { resolutions[name] = `${nightlyVersion}`; } - await mergeJsonFilesAsync(packageJsonPath, { - // Add workspaces - workspaces: [`${workspacePrefix}/packages/*`, `${workspacePrefix}/packages/@expo/*`], + + // Point repo dependencies at the local workspace copy so the build tests the + // code under test, not the published canary. Only the `workspace:` protocol + // forces this; pnpm won't link a workspace package whose version doesn't + // satisfy the declared range, and the canary template pins different versions. + const repoPackageNames = await getExpoPackageNamesAsync(expoRepoPath); + + for (const field of ['dependencies', 'devDependencies'] as const) { + const deps = packageJson[field] as Record | undefined; + + if (deps != null) { + for (const name of Object.keys(deps)) { + if (repoPackageNames.has(name)) { + deps[name] = 'workspace:*'; + } + } + } + } + + await writeJsonFileAsync(packageJsonPath, { + ...packageJson, // Exclude templates from autolinking expo: { @@ -104,6 +113,17 @@ async function setupProjectPackageJsonAsync( // Pin the versions of transitive dependencies resolutions, }); + + // pnpm ignores the package.json `workspaces` field, so the repo packages must + // be declared as workspace members here for the `workspace:*` specifiers to + // resolve to local source. + const relativePrefix = path.relative(projectRoot, expoRepoPath); + const workspaceGlobs = [`${relativePrefix}/packages/*`, `${relativePrefix}/packages/@expo/*`]; + + await fs.promises.writeFile( + path.join(projectRoot, 'pnpm-workspace.yaml'), + ['packages:', ...workspaceGlobs.map((glob) => ` - '${glob}'`), ''].join('\n') + ); } /** diff --git a/packages/create-expo-nightly/src/index.ts b/packages/create-expo-nightly/src/index.ts index 3345535a3da48b..4afa038586e1d9 100755 --- a/packages/create-expo-nightly/src/index.ts +++ b/packages/create-expo-nightly/src/index.ts @@ -60,9 +60,6 @@ async function runAsync(programName: string) { ); const expoRepoPath = await createExpoApp(projectRoot, projectProps); - // NOTE(@kitten): We used to set dependencies to `workspace:*` specifiers here manually for all packages - // However, this isn't needed as long as `preferWorkspacePackages: true` is set in `pnpm-workspace.yaml` - console.log(chalk.cyan(`Reinstalling packages`)); await reinstallPackagesAsync(projectRoot); diff --git a/packages/expo-media-library/CHANGELOG.md b/packages/expo-media-library/CHANGELOG.md index c24a21da249c39..25aa9ad376f31c 100644 --- a/packages/expo-media-library/CHANGELOG.md +++ b/packages/expo-media-library/CHANGELOG.md @@ -6,6 +6,8 @@ ### ๐ŸŽ‰ New features +- Add `Query.exeForMetadata()` for cheap bulk fetch ([#46485](https://github.com/expo/expo/pull/46485) by [@Wenszel](https://github.com/Wenszel)) + ### ๐Ÿ› Bug fixes ### ๐Ÿ’ก Others diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/MediaLibraryNextModule.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/MediaLibraryNextModule.kt index ec32503808fb6a..2f7b9f4aad22cc 100644 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/MediaLibraryNextModule.kt +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/MediaLibraryNextModule.kt @@ -15,6 +15,7 @@ import expo.modules.medialibrary.next.objects.album.AlbumQuery import expo.modules.medialibrary.next.objects.asset.Asset import expo.modules.medialibrary.next.objects.album.factories.AlbumModernFactory import expo.modules.medialibrary.next.objects.album.factories.AlbumLegacyFactory +import expo.modules.medialibrary.next.objects.asset.AssetMapper import expo.modules.medialibrary.next.objects.asset.deleters.AssetLegacyDeleter import expo.modules.medialibrary.next.objects.asset.deleters.AssetModernDeleter import expo.modules.medialibrary.next.objects.asset.factories.AssetModernFactory @@ -75,11 +76,15 @@ class MediaLibraryNextModule : Module() { } } + private val assetMapper by lazy { + AssetMapper(context.contentResolver) + } + private val assetFactory by lazy { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - AssetModernFactory(assetDeleter, assetMover, mediaStorePermissionsDelegate, context) + AssetModernFactory(assetDeleter, assetMover, assetMapper, mediaStorePermissionsDelegate, context) } else { - AssetLegacyFactory(assetDeleter, assetMover, systemPermissionsDelegate, context) + AssetLegacyFactory(assetDeleter, assetMover, assetMapper, systemPermissionsDelegate, context) } } @@ -240,7 +245,7 @@ class MediaLibraryNextModule : Module() { Class(Query::class) { Constructor { - Query(assetFactory, context) + Query(assetFactory, assetMapper, context.contentResolver) } Function("limit") { self: Query, limit: Int -> @@ -291,7 +296,11 @@ class MediaLibraryNextModule : Module() { } AsyncFunction("exe") Coroutine { self: Query -> - return@Coroutine self.exe() + self.exe() + } + + AsyncFunction("exeForMetadata") Coroutine { self: Query -> + self.exeForMetadata() } } diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/CursorExtensions.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/CursorExtensions.kt index 79767e2ed5c354..4969b414fba1a3 100644 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/CursorExtensions.kt +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/CursorExtensions.kt @@ -26,3 +26,29 @@ fun Cursor.asIterable(): Iterable { } } } + +fun Cursor.asSequence(): Sequence { + return sequence { + while (moveToNext()) { + yield(this@asSequence) + } + } +} + +// This wrapper enforces null-safety, because the default getString() method returns String! type +fun Cursor.getNullableString(columnIndex: Int): String? = + getString(columnIndex) + +fun Cursor.getNullableInt(columnIndex: Int): Int? = + if (isNull(columnIndex)) { + null + } else { + getInt(columnIndex) + } + +fun Cursor.getNullableLong(columnIndex: Int): Long? = + if (isNull(columnIndex)) { + null + } else { + getLong(columnIndex) + } diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/AlbumExtensions.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/AlbumExtensions.kt index 6ad296f8caec4e..31c17c36fbe543 100644 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/AlbumExtensions.kt +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/AlbumExtensions.kt @@ -5,6 +5,7 @@ import android.database.Cursor import android.net.Uri import android.provider.MediaStore import expo.modules.medialibrary.next.extensions.asIterable +import expo.modules.medialibrary.next.extensions.getNullableString import expo.modules.medialibrary.next.objects.wrappers.RelativePath import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ensureActive @@ -16,7 +17,7 @@ suspend fun ContentResolver.queryAlbumTitle(bucketId: String): String? = queryOne( EXTERNAL_CONTENT_URI, MediaStore.MediaColumns.BUCKET_DISPLAY_NAME, - Cursor::getString, + Cursor::getNullableString, "${MediaStore.MediaColumns.BUCKET_ID} = ?", arrayOf(bucketId) ) @@ -25,7 +26,7 @@ suspend fun ContentResolver.queryAlbumRelativePath(bucketId: String): RelativePa queryOne( EXTERNAL_CONTENT_URI, MediaStore.MediaColumns.RELATIVE_PATH, - { index -> RelativePath(getString(index)) }, + { index -> getNullableString(index)?.let { RelativePath(it) } }, "${MediaStore.MediaColumns.BUCKET_ID} = ?", arrayOf(bucketId) ) @@ -34,7 +35,7 @@ suspend fun ContentResolver.queryAlbumFilepath(bucketId: String): String? = queryOne( EXTERNAL_CONTENT_URI, MediaStore.MediaColumns.DATA, - Cursor::getString, + Cursor::getNullableString, "${MediaStore.Files.FileColumns.BUCKET_ID} = ?", arrayOf(bucketId) ) @@ -43,7 +44,7 @@ suspend fun ContentResolver.queryAlbumId(relativePath: RelativePath): String? = queryOne( EXTERNAL_CONTENT_URI, MediaStore.Files.FileColumns.BUCKET_ID, - Cursor::getString, + Cursor::getNullableString, "${MediaStore.Files.FileColumns.RELATIVE_PATH} = ?", arrayOf(relativePath.value) ) @@ -52,7 +53,7 @@ suspend fun ContentResolver.queryAlbumId(name: String): String? = queryOne( EXTERNAL_CONTENT_URI, MediaStore.Files.FileColumns.BUCKET_ID, - Cursor::getString, + Cursor::getNullableString, "${MediaStore.MediaColumns.BUCKET_DISPLAY_NAME} = ?", arrayOf(name) ) @@ -66,7 +67,7 @@ suspend fun ContentResolver.queryAllAlbumIds(): List = val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.BUCKET_ID) cursor .asIterable() - .mapNotNull { it.getString(idColumn) } + .mapNotNull { it.getNullableString(idColumn) } .toSet() .toList() } ?: emptyList() diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/AssetExtensions.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/AssetExtensions.kt index a8c5847ef1abbe..378a2997866c29 100644 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/AssetExtensions.kt +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/AssetExtensions.kt @@ -9,7 +9,13 @@ import android.provider.MediaStore import androidx.annotation.RequiresApi import expo.modules.medialibrary.EXTERNAL_CONTENT_URI import expo.modules.medialibrary.next.exceptions.AssetCouldNotBeCreated -import expo.modules.medialibrary.next.extensions.resolver.AssetMediaStoreItemBuilder.Companion.buildAssetMediaStoreItem +import expo.modules.medialibrary.next.extensions.getNullableInt +import expo.modules.medialibrary.next.extensions.getNullableLong +import expo.modules.medialibrary.next.extensions.getNullableString +import expo.modules.medialibrary.next.objects.asset.domain.AssetMediaStoreItem +import expo.modules.medialibrary.next.objects.asset.domain.MediaStoreAudio +import expo.modules.medialibrary.next.objects.asset.domain.MediaStoreImage +import expo.modules.medialibrary.next.objects.asset.domain.MediaStoreVideo import expo.modules.medialibrary.next.objects.wrappers.MediaType import expo.modules.medialibrary.next.objects.wrappers.RelativePath import expo.modules.medialibrary.next.objects.wrappers.MimeType @@ -17,45 +23,68 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext suspend fun ContentResolver.queryAssetDisplayName(contentUri: Uri): String? = - queryOne(contentUri, AssetMediaStoreProperty.DisplayName.column, Cursor::getString) + queryOne(contentUri, MediaStore.Files.FileColumns.DISPLAY_NAME, Cursor::getNullableString) suspend fun ContentResolver.queryAssetDateTaken(contentUri: Uri): Long? = - queryOne(contentUri, AssetMediaStoreProperty.DateTaken.column, Cursor::getLong) + queryOne(contentUri, MediaStore.Images.ImageColumns.DATE_TAKEN, Cursor::getNullableLong) suspend fun ContentResolver.queryAssetDateModified(contentUri: Uri): Long? = - queryOne(contentUri, AssetMediaStoreProperty.DateModified.column, Cursor::getLong) + queryOne(contentUri, MediaStore.MediaColumns.DATE_MODIFIED, Cursor::getNullableLong) suspend fun ContentResolver.queryAssetDuration(contentUri: Uri): Long? = - queryOne(contentUri, AssetMediaStoreProperty.Duration.column, Cursor::getLong) + queryOne(contentUri, MediaStore.MediaColumns.DURATION, Cursor::getNullableLong) suspend fun ContentResolver.queryAssetWidth(contentUri: Uri): Int? = - queryOne(contentUri, AssetMediaStoreProperty.Width.column, Cursor::getInt) + queryOne(contentUri, MediaStore.MediaColumns.WIDTH, Cursor::getNullableInt) suspend fun ContentResolver.queryAssetHeight(contentUri: Uri): Int? = - queryOne(contentUri, AssetMediaStoreProperty.Height.column, Cursor::getInt) + queryOne(contentUri, MediaStore.MediaColumns.HEIGHT, Cursor::getNullableInt) suspend fun ContentResolver.queryAssetData(contentUri: Uri): String? = - queryOne(contentUri, AssetMediaStoreProperty.Data.column, Cursor::getString) + queryOne(contentUri, MediaStore.MediaColumns.DATA, Cursor::getNullableString) suspend fun ContentResolver.queryAssetBucketId(contentUri: Uri): Int? = - queryOne(contentUri, AssetMediaStoreProperty.BucketId.column, Cursor::getInt) + queryOne(contentUri, MediaStore.MediaColumns.BUCKET_ID, Cursor::getNullableInt) @RequiresApi(Build.VERSION_CODES.Q) -suspend fun ContentResolver.queryAssetIsFavorite(contentUri: Uri): Boolean = - queryOne(contentUri, AssetMediaStoreProperty.IsFavorite.column, Cursor::getInt) == 1 - -suspend fun ContentResolver.queryAssetMediaStoreItem( - contentUri: Uri -): AssetMediaStoreItem? = withContext(Dispatchers.IO) { - // Attempting to get a duration from an image may result in an exception on older Android versions - val includeDuration = MediaType.fromContentUri(contentUri) != MediaType.IMAGE - val projection = AssetMediaStoreProperty.projection(includeDuration) +suspend fun ContentResolver.queryAssetIsFavorite(contentUri: Uri): Int? = + queryOne(contentUri, MediaStore.MediaColumns.IS_FAVORITE, Cursor::getNullableInt) + +suspend fun ContentResolver.queryAssetMediaStoreItem(contentUri: Uri): AssetMediaStoreItem? { + return when (MediaType.fromContentUri(contentUri)) { + MediaType.IMAGE -> queryMediaStoreImageAsset(contentUri)?.let { AssetMediaStoreItem.Image(it) } + MediaType.VIDEO -> queryMediaStoreVideoAsset(contentUri)?.let { AssetMediaStoreItem.Video(it) } + MediaType.AUDIO -> queryMediaStoreAudioAsset(contentUri)?.let { AssetMediaStoreItem.Audio(it) } + MediaType.UNKNOWN -> null + } +} + +suspend fun ContentResolver.queryMediaStoreImageAsset(contentUri: Uri): MediaStoreImage? = + querySingleMediaStoreAsset(contentUri, MediaStoreImage.projection) { + MediaStoreImage.from(this) + } + +suspend fun ContentResolver.queryMediaStoreVideoAsset(contentUri: Uri): MediaStoreVideo? = + querySingleMediaStoreAsset(contentUri, MediaStoreVideo.projection) { + MediaStoreVideo.from(this) + } + +suspend fun ContentResolver.queryMediaStoreAudioAsset(contentUri: Uri): MediaStoreAudio? = + querySingleMediaStoreAsset(contentUri, MediaStoreAudio.projection) { + MediaStoreAudio.from(this) + } + +private suspend fun ContentResolver.querySingleMediaStoreAsset( + contentUri: Uri, + projection: Array, + fromCursor: Cursor.() -> T +): T? = withContext(Dispatchers.IO) { val cursor = safeQuery(contentUri, projection, null, null) ?: return@withContext null return@withContext cursor.use { if (it.moveToFirst()) { - it.buildAssetMediaStoreItem(includeDuration) + it.fromCursor() } else { null } diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/AssetMediaStoreItem.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/AssetMediaStoreItem.kt deleted file mode 100644 index 597a6b5a76df08..00000000000000 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/AssetMediaStoreItem.kt +++ /dev/null @@ -1,103 +0,0 @@ -package expo.modules.medialibrary.next.extensions.resolver - -import android.database.Cursor -import android.provider.MediaStore - -data class AssetMediaStoreItem( - val displayName: String?, - val height: Int?, - val width: Int?, - val dateTaken: Long?, - val dateModified: Long?, - val duration: Long?, - val data: String?, - val bucketId: String? -) - -class AssetMediaStoreItemBuilder { - private var displayName: String? = null - private var height: Int? = null - private var width: Int? = null - private var dateTaken: Long? = null - private var dateModified: Long? = null - private var duration: Long? = null - private var data: String? = null - private var bucketId: String? = null - private var isFavorite: Boolean? = null - - fun build(): AssetMediaStoreItem { - return AssetMediaStoreItem( - displayName = displayName, - height = height, - width = width, - dateTaken = dateTaken, - dateModified = dateModified, - duration = duration, - data = data, - bucketId = bucketId - ) - } - - fun Cursor.set(property: AssetMediaStoreProperty) { - with(property) { - when (property) { - AssetMediaStoreProperty.Data -> data = getString() - AssetMediaStoreProperty.DisplayName -> displayName = getString() - AssetMediaStoreProperty.Height -> height = getInt() - AssetMediaStoreProperty.Width -> width = getInt() - AssetMediaStoreProperty.DateTaken -> dateTaken = getLong() - AssetMediaStoreProperty.DateModified -> dateModified = getLong() - AssetMediaStoreProperty.Duration -> duration = getLong() - AssetMediaStoreProperty.BucketId -> bucketId = getString() - AssetMediaStoreProperty.IsFavorite -> isFavorite = getInt() == 1 - } - } - } - - companion object { - fun Cursor.buildAssetMediaStoreItem(includeDuration: Boolean): AssetMediaStoreItem { - val assetMediaStoreItemBuilder = AssetMediaStoreItemBuilder() - AssetMediaStoreProperty - .values() - .filter { includeDuration || it != AssetMediaStoreProperty.Duration } - .forEach { - with(assetMediaStoreItemBuilder) { - set(it) - } - } - return assetMediaStoreItemBuilder.build() - } - } -} - -enum class AssetMediaStoreProperty(val column: String) { - DisplayName(MediaStore.Files.FileColumns.DISPLAY_NAME), - Height(MediaStore.MediaColumns.HEIGHT), - Width(MediaStore.MediaColumns.WIDTH), - DateTaken(MediaStore.Images.ImageColumns.DATE_TAKEN), - DateModified(MediaStore.MediaColumns.DATE_MODIFIED), - Duration(MediaStore.MediaColumns.DURATION), - Data(MediaStore.MediaColumns.DATA), - BucketId(MediaStore.MediaColumns.BUCKET_ID), - IsFavorite(MediaStore.MediaColumns.IS_FAVORITE); - - fun Cursor.columnIndex(): Int = - getColumnIndexOrThrow(column) - - fun Cursor.getString(): String? = - getString(columnIndex()) - - fun Cursor.getInt(): Int? = - getInt(columnIndex()) - - fun Cursor.getLong(): Long? = - getLong(columnIndex()) - - companion object { - fun projection(includeDuration: Boolean): Array = - values() - .filter { includeDuration || it != Duration } - .map { it.column } - .toTypedArray() - } -} diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/CursorExtensions.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/CursorExtensions.kt index 7f66d6324da2ce..d65ad9f53cb7e5 100644 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/CursorExtensions.kt +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/extensions/resolver/CursorExtensions.kt @@ -5,10 +5,12 @@ import android.database.Cursor import android.net.Uri import android.os.Build import android.provider.MediaStore +import expo.modules.medialibrary.next.extensions.getNullableInt -fun Cursor.extractAssetContentUri(idColumn: Int, typeColumn: Int): Uri { - val id = getLong(idColumn) - val mediaType = getInt(typeColumn) +fun Cursor.extractAssetContentUri(idColumn: Int, typeColumn: Int): Uri = + extractAssetContentUri(getLong(idColumn), getNullableInt(typeColumn)) + +fun extractAssetContentUri(id: Long, mediaType: Int?): Uri { val baseUri = if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q) { when (mediaType) { MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE -> MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/AssetMapper.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/AssetMapper.kt new file mode 100644 index 00000000000000..df7a47740cb63d --- /dev/null +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/AssetMapper.kt @@ -0,0 +1,170 @@ +package expo.modules.medialibrary.next.objects.asset + +import android.content.ContentResolver +import android.graphics.BitmapFactory +import android.net.Uri +import android.provider.MediaStore +import androidx.core.net.toUri +import expo.modules.medialibrary.next.exceptions.AssetPropertyNotFoundException +import expo.modules.medialibrary.next.extensions.resolver.extractAssetContentUri +import expo.modules.medialibrary.next.extensions.resolver.queryAssetData +import expo.modules.medialibrary.next.objects.asset.domain.AssetMediaStoreItem +import expo.modules.medialibrary.next.objects.asset.domain.MediaStoreAudio +import expo.modules.medialibrary.next.objects.asset.domain.MediaStoreFile +import expo.modules.medialibrary.next.objects.asset.domain.MediaStoreImage +import expo.modules.medialibrary.next.objects.asset.domain.MediaStoreVideo +import expo.modules.medialibrary.next.objects.wrappers.MediaType +import expo.modules.medialibrary.next.records.AssetInfo +import expo.modules.medialibrary.next.records.AssetMetadata +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import java.io.File +import kotlin.time.DurationUnit +import kotlin.time.toDuration + +class AssetMapper(private val contentResolver: ContentResolver) { + suspend fun toDto(mediaStoreItem: AssetMediaStoreItem): AssetInfo = + when (mediaStoreItem) { + is AssetMediaStoreItem.Image -> toDto(mediaStoreItem.asset) + is AssetMediaStoreItem.Video -> toDto(mediaStoreItem.asset) + is AssetMediaStoreItem.Audio -> toDto(mediaStoreItem.asset) + } + + private suspend fun toDto(imageAsset: MediaStoreImage): AssetInfo { + val contentUri = extractAssetContentUri( + imageAsset.id, + MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE + ) + + return AssetInfo( + id = contentUri, + uri = mapUri(imageAsset.data) + ?: throw AssetPropertyNotFoundException("Uri"), + mediaType = MediaType.IMAGE, + width = mapWidth(imageAsset.width, contentUri) + ?: throw AssetPropertyNotFoundException("Width"), + height = mapHeight(imageAsset.height, contentUri) + ?: throw AssetPropertyNotFoundException("Height"), + creationTime = mapCreationTime(imageAsset.dateTaken), + modificationTime = mapModificationTime(imageAsset.dateModified), + duration = null, + filename = imageAsset.displayName + ?: throw AssetPropertyNotFoundException("Filename"), + isFavorite = mapIsFavorite(imageAsset.isFavorite) + ) + } + + private suspend fun toDto(videoAsset: MediaStoreVideo): AssetInfo { + val contentUri = extractAssetContentUri( + videoAsset.id, + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO + ) + + return AssetInfo( + id = contentUri, + uri = mapUri(videoAsset.data) + ?: throw AssetPropertyNotFoundException("Uri"), + mediaType = MediaType.VIDEO, + width = mapWidth(videoAsset.width, contentUri) + ?: throw AssetPropertyNotFoundException("Width"), + height = mapHeight(videoAsset.height, contentUri) + ?: throw AssetPropertyNotFoundException("Height"), + creationTime = mapCreationTime(videoAsset.dateTaken), + modificationTime = mapModificationTime(videoAsset.dateModified), + duration = mapDuration(videoAsset.duration), + filename = videoAsset.displayName + ?: throw AssetPropertyNotFoundException("Filename"), + isFavorite = mapIsFavorite(videoAsset.isFavorite) + ) + } + + private fun toDto(audioAsset: MediaStoreAudio): AssetInfo { + val contentUri = extractAssetContentUri( + audioAsset.id, + MediaStore.Files.FileColumns.MEDIA_TYPE_AUDIO + ) + + return AssetInfo( + id = contentUri, + uri = mapUri(audioAsset.data) + ?: throw AssetPropertyNotFoundException("Uri"), + mediaType = MediaType.AUDIO, + width = 0, + height = 0, + creationTime = mapCreationTime(audioAsset.dateTaken), + modificationTime = mapModificationTime(audioAsset.dateModified), + duration = mapDuration(audioAsset.duration), + filename = audioAsset.displayName + ?: throw AssetPropertyNotFoundException("Filename"), + isFavorite = mapIsFavorite(audioAsset.isFavorite) + ) + } + + fun toMetadata(fileAsset: MediaStoreFile): AssetMetadata { + return AssetMetadata( + id = extractAssetContentUri(fileAsset.id, fileAsset.mediaType), + mediaType = fileAsset.mediaType?.let { MediaType.fromMediaStoreValue(it) } + ?: MediaType.UNKNOWN, + width = fileAsset.width, + height = fileAsset.height, + creationTime = mapCreationTime(fileAsset.dateTaken), + modificationTime = mapModificationTime(fileAsset.dateModified), + duration = mapDuration(fileAsset.duration), + filename = fileAsset.displayName, + isFavorite = mapIsFavorite(fileAsset.isFavorite) + ) + } + + suspend fun mapHeight(mediaStoreHeight: Int?, contentUri: Uri): Int? { + return transformDimension(mediaStoreHeight, contentUri) { + downloadBitmapAndGet(contentUri) { it.outHeight } + } + } + + suspend fun mapWidth(mediaStoreWidth: Int?, contentUri: Uri): Int? { + return transformDimension(mediaStoreWidth, contentUri) { + downloadBitmapAndGet(contentUri) { it.outWidth } + } + } + + private suspend fun transformDimension( + mediaStoreDimension: Int?, + contentUri: Uri, + fallback: suspend () -> Int? + ): Int? { + val isImage = MediaType.fromContentUri(contentUri) == MediaType.IMAGE + return when { + isImage && (mediaStoreDimension == null || mediaStoreDimension <= 0) -> fallback() + mediaStoreDimension != null && mediaStoreDimension > 0 -> mediaStoreDimension + else -> null + } + } + + private suspend fun downloadBitmapAndGet( + contentUri: Uri, + extract: (BitmapFactory.Options) -> Int + ): Int = withContext(Dispatchers.IO) { + val options = BitmapFactory.Options().apply { inJustDecodeBounds = true } + val path = contentResolver.queryAssetData(contentUri) + BitmapFactory.decodeFile(path, options) + return@withContext extract(options) + } + + fun mapCreationTime(mediaStoreDateTaken: Long?): Long? = + mediaStoreDateTaken.takeIf { it != 0L } + + fun mapDuration(mediaStoreDuration: Long?): Long? = + mediaStoreDuration.takeIf { it != 0L } + + fun mapModificationTime(mediaStoreDateModified: Long?): Long? = + mediaStoreDateModified + ?.takeIf { it != 0L } + ?.toDuration(DurationUnit.SECONDS) + ?.inWholeMilliseconds + + fun mapUri(mediaStoreData: String?): Uri? = + mediaStoreData?.let { File(it).toUri() } + + fun mapIsFavorite(mediaStoreIsFavorite: Int?): Boolean = + mediaStoreIsFavorite == 1 +} diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/delegates/AssetLegacyDelegate.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/delegates/AssetLegacyDelegate.kt index 2976506840c060..3fb18c03979cd7 100644 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/delegates/AssetLegacyDelegate.kt +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/delegates/AssetLegacyDelegate.kt @@ -30,6 +30,7 @@ import expo.modules.medialibrary.next.objects.asset.deleters.AssetDeleter import expo.modules.medialibrary.next.objects.asset.factories.AssetFactory import expo.modules.medialibrary.next.extensions.resolver.queryAlbumTitle import expo.modules.medialibrary.next.extensions.resolver.queryAssetBucketId +import expo.modules.medialibrary.next.objects.asset.AssetMapper import expo.modules.medialibrary.next.objects.asset.movers.AssetMover import expo.modules.medialibrary.next.objects.wrappers.MediaType import expo.modules.medialibrary.next.objects.wrappers.MimeType @@ -49,6 +50,7 @@ import kotlin.collections.component2 class AssetLegacyDelegate( contentUri: Uri, val assetDeleter: AssetDeleter, + val assetMapper: AssetMapper, val systemPermissionsDelegate: SystemPermissionsDelegate, val assetFactory: AssetFactory, val assetMover: AssetMover, @@ -69,13 +71,9 @@ class AssetLegacyDelegate( override var contentUri: Uri = contentUri private set - private val mediaStoreToAssetAdapter by lazy { - MediaStoreToAssetAdapter(contextRef.getOrThrow()) - } - override suspend fun getCreationTime(): Long? { val mediaStoreDateTaken = contentResolver.queryAssetDateTaken(contentUri) - return mediaStoreToAssetAdapter.transformCreationTime(mediaStoreDateTaken) + return assetMapper.mapCreationTime(mediaStoreDateTaken) } override suspend fun getDuration(): Long? { @@ -83,7 +81,7 @@ class AssetLegacyDelegate( return null } val mediaStoreDuration = contentResolver.queryAssetDuration(contentUri) - return mediaStoreToAssetAdapter.transformDuration(mediaStoreDuration) + return assetMapper.mapDuration(mediaStoreDuration) } override suspend fun getFilename(): String = @@ -92,13 +90,13 @@ class AssetLegacyDelegate( override suspend fun getHeight(): Int { val mediaStoreHeight = contentResolver.queryAssetHeight(contentUri) - return mediaStoreToAssetAdapter.transformHeight(mediaStoreHeight, contentUri) + return assetMapper.mapHeight(mediaStoreHeight, contentUri) ?: throw AssetPropertyNotFoundException("Height") } override suspend fun getWidth(): Int { val mediaStoreWidth = contentResolver.queryAssetWidth(contentUri) - return mediaStoreToAssetAdapter.transformWidth(mediaStoreWidth, contentUri) + return assetMapper.mapWidth(mediaStoreWidth, contentUri) ?: throw AssetPropertyNotFoundException("Width") } @@ -113,39 +111,20 @@ class AssetLegacyDelegate( override suspend fun getModificationTime(): Long? { val mediaStoreDateModified = contentResolver.queryAssetDateModified(contentUri) - return mediaStoreToAssetAdapter.transformModificationTime(mediaStoreDateModified) + return assetMapper.mapModificationTime(mediaStoreDateModified) } override suspend fun getUri(): Uri { // e.g. storage/emulated/0/Android/data/expo/files/[ROOT_ALBUM]/[ALBUM_NAME] val mediaStoreData = contentResolver.queryAssetData(contentUri) // e.g. file:///storage/emulated/0/Android/data/expo/files/[ROOT_ALBUM]/[ALBUM_NAME] - return mediaStoreToAssetAdapter.transformUri(mediaStoreData) + return assetMapper.mapUri(mediaStoreData) ?: throw AssetPropertyNotFoundException("Uri") } override suspend fun getInfo(): AssetInfo { - val mediaStoreItem = contentResolver.queryAssetMediaStoreItem(contentUri) + return contentResolver.queryAssetMediaStoreItem(contentUri)?.let { assetMapper.toDto(it) } ?: throw AssetPropertyNotFoundException("Info") - val mediaType = getMediaType() - val height = mediaStoreToAssetAdapter.transformHeight(mediaStoreItem.height, contentUri) - val width = mediaStoreToAssetAdapter.transformWidth(mediaStoreItem.width, contentUri) - return AssetInfo( - id = contentUri, - mediaType = mediaType, - creationTime = mediaStoreToAssetAdapter.transformCreationTime(mediaStoreItem.dateTaken), - modificationTime = mediaStoreToAssetAdapter.transformModificationTime(mediaStoreItem.dateModified), - duration = mediaStoreToAssetAdapter.transformDuration(mediaStoreItem.duration), - filename = mediaStoreItem.displayName - ?: throw AssetPropertyNotFoundException("Filename"), - height = height - ?: throw AssetPropertyNotFoundException("Height"), - width = width - ?: throw AssetPropertyNotFoundException("Width"), - uri = mediaStoreToAssetAdapter.transformUri(mediaStoreItem.data) - ?: throw AssetPropertyNotFoundException("Uri"), - isFavorite = false - ) } override suspend fun getFavorite(): Boolean = false diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/delegates/AssetModernDelegate.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/delegates/AssetModernDelegate.kt index f2b90c11ba3c73..5aad32f7cd076e 100644 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/delegates/AssetModernDelegate.kt +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/delegates/AssetModernDelegate.kt @@ -21,8 +21,8 @@ import expo.modules.medialibrary.next.extensions.resolver.queryAssetWidth import expo.modules.medialibrary.next.extensions.resolver.queryAssetData import expo.modules.medialibrary.next.extensions.resolver.queryAssetDateModified import expo.modules.medialibrary.next.extensions.resolver.queryAssetDateTaken -import expo.modules.medialibrary.next.extensions.resolver.queryAssetMediaStoreItem import expo.modules.medialibrary.next.extensions.resolver.queryAssetIsFavorite +import expo.modules.medialibrary.next.extensions.resolver.queryAssetMediaStoreItem import expo.modules.medialibrary.next.extensions.resolver.safeUpdate import expo.modules.medialibrary.next.extensions.resolver.updateRelativePath import expo.modules.medialibrary.next.extensions.resolver.updateRelativePathAndName @@ -34,6 +34,7 @@ import expo.modules.medialibrary.next.objects.asset.deleters.AssetDeleter import expo.modules.medialibrary.next.objects.asset.factories.AssetFactory import expo.modules.medialibrary.next.extensions.resolver.queryAlbumTitle import expo.modules.medialibrary.next.extensions.resolver.queryAssetBucketId +import expo.modules.medialibrary.next.objects.asset.AssetMapper import expo.modules.medialibrary.next.objects.asset.factories.buildUniqueDisplayName import expo.modules.medialibrary.next.objects.asset.movers.AssetMover import expo.modules.medialibrary.next.objects.wrappers.MediaType @@ -55,6 +56,7 @@ class AssetModernDelegate( override val contentUri: Uri, val assetDeleter: AssetDeleter, val assetMover: AssetMover, + val assetMapper: AssetMapper, val mediaStorePermissionsDelegate: MediaStorePermissionsDelegate, val assetFactory: AssetFactory, context: Context @@ -66,13 +68,9 @@ class AssetModernDelegate( .getOrThrow() .contentResolver ?: throw ContentResolverNotObtainedException() - private val mediaStoreToAssetAdapter by lazy { - MediaStoreToAssetAdapter(contextRef.getOrThrow()) - } - override suspend fun getCreationTime(): Long? { val mediaStoreDateTaken = contentResolver.queryAssetDateTaken(contentUri) - return mediaStoreToAssetAdapter.transformCreationTime(mediaStoreDateTaken) + return assetMapper.mapCreationTime(mediaStoreDateTaken) } override suspend fun getDuration(): Long? { @@ -80,7 +78,7 @@ class AssetModernDelegate( return null } val mediaStoreDuration = contentResolver.queryAssetDuration(contentUri) - return mediaStoreToAssetAdapter.transformDuration(mediaStoreDuration) + return assetMapper.mapDuration(mediaStoreDuration) } override suspend fun getFilename(): String = @@ -89,13 +87,13 @@ class AssetModernDelegate( override suspend fun getHeight(): Int { val mediaStoreHeight = contentResolver.queryAssetHeight(contentUri) - return mediaStoreToAssetAdapter.transformHeight(mediaStoreHeight, contentUri) + return assetMapper.mapHeight(mediaStoreHeight, contentUri) ?: throw AssetPropertyNotFoundException("Height") } override suspend fun getWidth(): Int { val mediaStoreWidth = contentResolver.queryAssetWidth(contentUri) - return mediaStoreToAssetAdapter.transformWidth(mediaStoreWidth, contentUri) + return assetMapper.mapWidth(mediaStoreWidth, contentUri) ?: throw AssetPropertyNotFoundException("Width") } @@ -110,43 +108,24 @@ class AssetModernDelegate( override suspend fun getModificationTime(): Long? { val mediaStoreDateModified = contentResolver.queryAssetDateModified(contentUri) - return mediaStoreToAssetAdapter.transformModificationTime(mediaStoreDateModified) + return assetMapper.mapModificationTime(mediaStoreDateModified) } override suspend fun getUri(): Uri { // e.g. storage/emulated/0/Android/data/expo/files/[ROOT_ALBUM]/[ALBUM_NAME] val mediaStoreData = contentResolver.queryAssetData(contentUri) // e.g. file:///storage/emulated/0/Android/data/expo/files/[ROOT_ALBUM]/[ALBUM_NAME] - return mediaStoreToAssetAdapter.transformUri(mediaStoreData) + return assetMapper.mapUri(mediaStoreData) ?: throw AssetPropertyNotFoundException("Uri") } override suspend fun getInfo(): AssetInfo { - val mediaStoreItem = contentResolver.queryAssetMediaStoreItem(contentUri) + return contentResolver.queryAssetMediaStoreItem(contentUri)?.let { assetMapper.toDto(it) } ?: throw AssetPropertyNotFoundException("Info") - val mediaType = getMediaType() - val height = mediaStoreToAssetAdapter.transformHeight(mediaStoreItem.height, contentUri) - val width = mediaStoreToAssetAdapter.transformWidth(mediaStoreItem.width, contentUri) - return AssetInfo( - id = contentUri, - mediaType = mediaType, - creationTime = mediaStoreToAssetAdapter.transformCreationTime(mediaStoreItem.dateTaken), - modificationTime = mediaStoreToAssetAdapter.transformModificationTime(mediaStoreItem.dateModified), - duration = mediaStoreToAssetAdapter.transformDuration(mediaStoreItem.duration), - filename = mediaStoreItem.displayName - ?: throw AssetPropertyNotFoundException("Filename"), - height = height - ?: throw AssetPropertyNotFoundException("Height"), - width = width - ?: throw AssetPropertyNotFoundException("Width"), - uri = mediaStoreToAssetAdapter.transformUri(mediaStoreItem.data) - ?: throw AssetPropertyNotFoundException("Uri"), - isFavorite = contentResolver.queryAssetIsFavorite(contentUri) - ) } override suspend fun getFavorite(): Boolean = - contentResolver.queryAssetIsFavorite(contentUri) + assetMapper.mapIsFavorite(contentResolver.queryAssetIsFavorite(contentUri)) override suspend fun setFavorite(isFavorite: Boolean): Unit = withContext(Dispatchers.IO) { mediaStorePermissionsDelegate.requestMediaLibraryWritePermission(listOf(contentUri)) diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/delegates/MediaStoreToAssetAdapter.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/delegates/MediaStoreToAssetAdapter.kt deleted file mode 100644 index 3c59954cfdf009..00000000000000 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/delegates/MediaStoreToAssetAdapter.kt +++ /dev/null @@ -1,75 +0,0 @@ -package expo.modules.medialibrary.next.objects.asset.delegates - -import android.content.Context -import android.graphics.BitmapFactory -import android.net.Uri -import androidx.core.net.toUri -import expo.modules.medialibrary.next.exceptions.ContentResolverNotObtainedException -import expo.modules.medialibrary.next.extensions.getOrThrow -import expo.modules.medialibrary.next.extensions.resolver.queryAssetData -import expo.modules.medialibrary.next.objects.wrappers.MediaType -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import java.io.File -import java.lang.ref.WeakReference -import kotlin.time.DurationUnit -import kotlin.time.toDuration - -class MediaStoreToAssetAdapter(context: Context) { - private val contextRef = WeakReference(context) - - private val contentResolver - get() = contextRef - .getOrThrow() - .contentResolver ?: throw ContentResolverNotObtainedException() - - suspend fun transformHeight(mediaStoreHeight: Int?, contentUri: Uri): Int? { - return transformDimension(mediaStoreHeight, contentUri) { - downloadBitmapAndGet(contentUri) { it.outHeight } - } - } - - suspend fun transformWidth(mediaStoreWidth: Int?, contentUri: Uri): Int? { - return transformDimension(mediaStoreWidth, contentUri) { - downloadBitmapAndGet(contentUri) { it.outWidth } - } - } - - private suspend fun transformDimension( - mediaStoreDimension: Int?, - contentUri: Uri, - fallback: suspend () -> Int? - ): Int? { - val isImage = MediaType.fromContentUri(contentUri) == MediaType.IMAGE - return when { - isImage && (mediaStoreDimension == null || mediaStoreDimension <= 0) -> fallback() - mediaStoreDimension != null && mediaStoreDimension > 0 -> mediaStoreDimension - else -> null - } - } - - private suspend fun downloadBitmapAndGet( - contentUri: Uri, - extract: (BitmapFactory.Options) -> Int - ): Int = withContext(Dispatchers.IO) { - val options = BitmapFactory.Options().apply { inJustDecodeBounds = true } - val path = contentResolver.queryAssetData(contentUri) - BitmapFactory.decodeFile(path, options) - return@withContext extract(options) - } - - fun transformCreationTime(mediaStoreDateTaken: Long?): Long? = - mediaStoreDateTaken.takeIf { it != 0L } - - fun transformDuration(mediaStoreDuration: Long?): Long? = - mediaStoreDuration.takeIf { it != 0L } - - fun transformModificationTime(mediaStoreDateModified: Long?): Long? = - mediaStoreDateModified - ?.takeIf { it != 0L } - ?.toDuration(DurationUnit.SECONDS) - ?.inWholeMilliseconds - - fun transformUri(mediaStoreData: String?): Uri? = - mediaStoreData?.let { File(it).toUri() } -} diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/AssetMediaStoreItem.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/AssetMediaStoreItem.kt new file mode 100644 index 00000000000000..5bc181a1b4b809 --- /dev/null +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/AssetMediaStoreItem.kt @@ -0,0 +1,7 @@ +package expo.modules.medialibrary.next.objects.asset.domain + +sealed interface AssetMediaStoreItem { + data class Image(val asset: MediaStoreImage) : AssetMediaStoreItem + data class Video(val asset: MediaStoreVideo) : AssetMediaStoreItem + data class Audio(val asset: MediaStoreAudio) : AssetMediaStoreItem +} diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreAudio.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreAudio.kt new file mode 100644 index 00000000000000..3a4a47b38cbf1d --- /dev/null +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreAudio.kt @@ -0,0 +1,75 @@ +package expo.modules.medialibrary.next.objects.asset.domain + +import android.database.Cursor +import android.os.Build +import android.provider.MediaStore.Audio.Media.* +import expo.modules.medialibrary.next.extensions.getNullableInt +import expo.modules.medialibrary.next.extensions.getNullableLong +import expo.modules.medialibrary.next.extensions.getNullableString + +data class MediaStoreAudio( + val id: Long, + val displayName: String?, + val dateTaken: Long?, + val dateModified: Long?, + val duration: Long?, + val data: String?, + val isFavorite: Int? +) { + companion object { + fun from( + cursor: Cursor, + columnIndexes: MediaStoreAudioColumnIndexes = MediaStoreAudioColumnIndexes.from(cursor) + ) = with(cursor) { + MediaStoreAudio( + id = getLong(columnIndexes.id), + displayName = getNullableString(columnIndexes.displayName), + dateTaken = getNullableLong(columnIndexes.dateTaken), + dateModified = getNullableLong(columnIndexes.dateModified), + duration = getNullableLong(columnIndexes.duration), + data = getNullableString(columnIndexes.data), + isFavorite = columnIndexes.isFavorite?.let { getNullableInt(it) } + ) + } + + val projection = buildList { + add(_ID) + add(DISPLAY_NAME) + add(DATE_TAKEN) + add(DATE_MODIFIED) + add(DATA) + add(DURATION) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + add(IS_FAVORITE) + } + }.toTypedArray() + } +} + +data class MediaStoreAudioColumnIndexes( + val id: Int, + val displayName: Int, + val dateTaken: Int, + val dateModified: Int, + val duration: Int, + val data: Int, + val isFavorite: Int? +) { + companion object { + fun from(cursor: Cursor) = with(cursor) { + MediaStoreAudioColumnIndexes( + id = getColumnIndexOrThrow(_ID), + displayName = getColumnIndexOrThrow(DISPLAY_NAME), + dateTaken = getColumnIndexOrThrow(DATE_TAKEN), + dateModified = getColumnIndexOrThrow(DATE_MODIFIED), + duration = getColumnIndexOrThrow(DURATION), + data = getColumnIndexOrThrow(DATA), + isFavorite = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + getColumnIndexOrThrow(IS_FAVORITE) + } else { + null + } + ) + } + } +} diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreFile.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreFile.kt new file mode 100644 index 00000000000000..7b995744047aef --- /dev/null +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreFile.kt @@ -0,0 +1,91 @@ +package expo.modules.medialibrary.next.objects.asset.domain + +import android.database.Cursor +import android.os.Build +import android.provider.MediaStore +import expo.modules.medialibrary.next.extensions.getNullableInt +import expo.modules.medialibrary.next.extensions.getNullableLong +import expo.modules.medialibrary.next.extensions.getNullableString + +data class MediaStoreFile( + val id: Long, + val displayName: String?, + val dateTaken: Long?, + val dateModified: Long?, + val width: Int?, + val height: Int?, + val duration: Long?, + val mediaType: Int?, + val isFavorite: Int? +) { + companion object { + fun from( + cursor: Cursor, + columnIndexes: MediaStoreFileColumnIndexes = MediaStoreFileColumnIndexes.from(cursor) + ) = with(cursor) { + MediaStoreFile( + id = getLong(columnIndexes.id), + displayName = getNullableString(columnIndexes.displayName), + dateTaken = getNullableLong(columnIndexes.dateTaken), + dateModified = getNullableLong(columnIndexes.dateModified), + width = getNullableInt(columnIndexes.width), + height = getNullableInt(columnIndexes.height), + duration = columnIndexes.duration?.let { getNullableLong(it) }, + mediaType = getNullableInt(columnIndexes.mediaType), + isFavorite = columnIndexes.isFavorite?.let { getNullableInt(it) } + ) + } + + val projection = buildList { + add(MediaStore.Files.FileColumns.MEDIA_TYPE) + add(MediaStore.Files.FileColumns._ID) + add(MediaStore.Files.FileColumns.DISPLAY_NAME) + add(MediaStore.Files.FileColumns.DATE_TAKEN) + add(MediaStore.Files.FileColumns.DATE_MODIFIED) + add(MediaStore.Files.FileColumns.WIDTH) + add(MediaStore.Files.FileColumns.HEIGHT) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + add(MediaStore.Files.FileColumns.DURATION) + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + add(MediaStore.Files.FileColumns.IS_FAVORITE) + } + }.toTypedArray() + } +} + +data class MediaStoreFileColumnIndexes( + val mediaType: Int, + val id: Int, + val displayName: Int, + val dateTaken: Int, + val dateModified: Int, + val width: Int, + val height: Int, + val duration: Int?, + val isFavorite: Int? +) { + companion object { + fun from(cursor: Cursor) = with(cursor) { + MediaStoreFileColumnIndexes( + mediaType = getColumnIndexOrThrow(MediaStore.Files.FileColumns.MEDIA_TYPE), + id = getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID), + displayName = getColumnIndexOrThrow(MediaStore.Files.FileColumns.DISPLAY_NAME), + dateTaken = getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATE_TAKEN), + dateModified = getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATE_MODIFIED), + width = getColumnIndexOrThrow(MediaStore.Files.FileColumns.WIDTH), + height = getColumnIndexOrThrow(MediaStore.Files.FileColumns.HEIGHT), + duration = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + getColumnIndexOrThrow(MediaStore.Files.FileColumns.DURATION) + } else { + null + }, + isFavorite = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + getColumnIndexOrThrow(MediaStore.Files.FileColumns.IS_FAVORITE) + } else { + null + } + ) + } + } +} diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreImage.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreImage.kt new file mode 100644 index 00000000000000..eaf589c304a967 --- /dev/null +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreImage.kt @@ -0,0 +1,80 @@ +package expo.modules.medialibrary.next.objects.asset.domain + +import android.database.Cursor +import android.os.Build +import android.provider.MediaStore.Images.Media.* +import expo.modules.medialibrary.next.extensions.getNullableInt +import expo.modules.medialibrary.next.extensions.getNullableLong +import expo.modules.medialibrary.next.extensions.getNullableString + +data class MediaStoreImage( + val id: Long, + val displayName: String?, + val dateTaken: Long?, + val dateModified: Long?, + val width: Int?, + val height: Int?, + val data: String?, + val isFavorite: Int? +) { + companion object { + fun from( + cursor: Cursor, + columnIndexes: MediaStoreImageColumnIndexes = MediaStoreImageColumnIndexes.from(cursor) + ) = with(cursor) { + MediaStoreImage( + id = getLong(columnIndexes.id), + displayName = getNullableString(columnIndexes.displayName), + dateTaken = getNullableLong(columnIndexes.dateTaken), + dateModified = getNullableLong(columnIndexes.dateModified), + width = getNullableInt(columnIndexes.width), + height = getNullableInt(columnIndexes.height), + data = getNullableString(columnIndexes.data), + isFavorite = columnIndexes.isFavorite?.let { getNullableInt(it) } + ) + } + + val projection = buildList { + add(_ID) + add(DISPLAY_NAME) + add(DATE_TAKEN) + add(DATE_MODIFIED) + add(WIDTH) + add(HEIGHT) + add(DATA) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + add(IS_FAVORITE) + } + }.toTypedArray() + } +} + +data class MediaStoreImageColumnIndexes( + val id: Int, + val displayName: Int, + val dateTaken: Int, + val dateModified: Int, + val width: Int, + val height: Int, + val data: Int, + val isFavorite: Int? +) { + companion object { + fun from(cursor: Cursor) = with(cursor) { + MediaStoreImageColumnIndexes( + id = getColumnIndexOrThrow(_ID), + displayName = getColumnIndexOrThrow(DISPLAY_NAME), + dateTaken = getColumnIndexOrThrow(DATE_TAKEN), + dateModified = getColumnIndexOrThrow(DATE_MODIFIED), + width = getColumnIndexOrThrow(WIDTH), + height = getColumnIndexOrThrow(HEIGHT), + data = getColumnIndexOrThrow(DATA), + isFavorite = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + getColumnIndexOrThrow(IS_FAVORITE) + } else { + null + } + ) + } + } +} diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreVideo.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreVideo.kt new file mode 100644 index 00000000000000..ff87283e57ef84 --- /dev/null +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/domain/MediaStoreVideo.kt @@ -0,0 +1,85 @@ +package expo.modules.medialibrary.next.objects.asset.domain + +import android.database.Cursor +import android.os.Build +import android.provider.MediaStore.Video.VideoColumns.* +import expo.modules.medialibrary.next.extensions.getNullableInt +import expo.modules.medialibrary.next.extensions.getNullableLong +import expo.modules.medialibrary.next.extensions.getNullableString + +data class MediaStoreVideo( + val id: Long, + val displayName: String?, + val dateTaken: Long?, + val dateModified: Long?, + val width: Int?, + val height: Int?, + val duration: Long?, + val data: String?, + val isFavorite: Int? +) { + companion object { + fun from( + cursor: Cursor, + columnIndexes: MediaStoreVideoColumnIndexes = MediaStoreVideoColumnIndexes.from(cursor) + ) = with(cursor) { + MediaStoreVideo( + id = getLong(columnIndexes.id), + displayName = getNullableString(columnIndexes.displayName), + dateTaken = getNullableLong(columnIndexes.dateTaken), + dateModified = getNullableLong(columnIndexes.dateModified), + width = getNullableInt(columnIndexes.width), + height = getNullableInt(columnIndexes.height), + duration = getNullableLong(columnIndexes.duration), + data = getNullableString(columnIndexes.data), + isFavorite = columnIndexes.isFavorite?.let { getNullableInt(it) } + ) + } + + val projection = buildList { + add(_ID) + add(DISPLAY_NAME) + add(DATE_TAKEN) + add(DATE_MODIFIED) + add(WIDTH) + add(HEIGHT) + add(DATA) + add(DURATION) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + add(IS_FAVORITE) + } + }.toTypedArray() + } +} + +data class MediaStoreVideoColumnIndexes( + val id: Int, + val displayName: Int, + val dateTaken: Int, + val dateModified: Int, + val width: Int, + val height: Int, + val duration: Int, + val data: Int, + val isFavorite: Int? +) { + companion object { + fun from(cursor: Cursor) = with(cursor) { + MediaStoreVideoColumnIndexes( + id = getColumnIndexOrThrow(_ID), + displayName = getColumnIndexOrThrow(DISPLAY_NAME), + dateTaken = getColumnIndexOrThrow(DATE_TAKEN), + dateModified = getColumnIndexOrThrow(DATE_MODIFIED), + width = getColumnIndexOrThrow(WIDTH), + height = getColumnIndexOrThrow(HEIGHT), + duration = getColumnIndexOrThrow(DURATION), + data = getColumnIndexOrThrow(DATA), + isFavorite = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + getColumnIndexOrThrow(IS_FAVORITE) + } else { + null + } + ) + } + } +} diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/factories/AssetLegacyFactory.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/factories/AssetLegacyFactory.kt index c7c711f7d0329b..5a052e0d3d80d0 100644 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/factories/AssetLegacyFactory.kt +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/factories/AssetLegacyFactory.kt @@ -14,6 +14,7 @@ import expo.modules.medialibrary.next.objects.wrappers.RelativePath import expo.modules.medialibrary.next.objects.asset.Asset import expo.modules.medialibrary.next.objects.asset.delegates.AssetDelegate import expo.modules.medialibrary.next.objects.asset.delegates.AssetLegacyDelegate +import expo.modules.medialibrary.next.objects.asset.AssetMapper import expo.modules.medialibrary.next.objects.asset.deleters.AssetDeleter import expo.modules.medialibrary.next.objects.asset.movers.AssetMover import expo.modules.medialibrary.next.objects.wrappers.MimeType @@ -30,6 +31,7 @@ import kotlin.coroutines.suspendCoroutine class AssetLegacyFactory( val assetDeleter: AssetDeleter, val assetMover: AssetMover, + val assetMapper: AssetMapper, val systemPermissionsDelegate: SystemPermissionsDelegate, context: Context ) : AssetFactory { @@ -41,7 +43,7 @@ class AssetLegacyFactory( .contentResolver ?: throw ContentResolverNotObtainedException() private fun createAssetDelegate(contentUri: Uri): AssetDelegate { - return AssetLegacyDelegate(contentUri, assetDeleter, systemPermissionsDelegate, this, assetMover, contextRef.getOrThrow()) + return AssetLegacyDelegate(contentUri, assetDeleter, assetMapper, systemPermissionsDelegate, this, assetMover, contextRef.getOrThrow()) } override fun create(contentUri: Uri): Asset { diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/factories/AssetModernFactory.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/factories/AssetModernFactory.kt index ca15de15d44965..4ca385cb211b48 100644 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/factories/AssetModernFactory.kt +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/asset/factories/AssetModernFactory.kt @@ -13,6 +13,7 @@ import expo.modules.medialibrary.next.objects.wrappers.RelativePath import expo.modules.medialibrary.next.objects.asset.Asset import expo.modules.medialibrary.next.objects.asset.delegates.AssetDelegate import expo.modules.medialibrary.next.objects.asset.delegates.AssetModernDelegate +import expo.modules.medialibrary.next.objects.asset.AssetMapper import expo.modules.medialibrary.next.objects.asset.deleters.AssetDeleter import expo.modules.medialibrary.next.objects.asset.movers.AssetMover import expo.modules.medialibrary.next.objects.wrappers.MimeType @@ -26,6 +27,7 @@ import java.lang.ref.WeakReference class AssetModernFactory( val assetDeleter: AssetDeleter, val assetMover: AssetMover, + val assetMapper: AssetMapper, val mediaStorePermissionsDelegate: MediaStorePermissionsDelegate, context: Context ) : AssetFactory { @@ -41,6 +43,7 @@ class AssetModernFactory( contentUri, assetDeleter, assetMover, + assetMapper, mediaStorePermissionsDelegate, this, contextRef.getOrThrow() diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/query/Query.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/query/Query.kt index 4cb8dbd8f90c2f..9d83d49fd15a68 100644 --- a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/query/Query.kt +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/objects/query/Query.kt @@ -1,37 +1,33 @@ package expo.modules.medialibrary.next.objects.query -import android.content.Context +import android.content.ContentResolver import android.os.Build import android.provider.MediaStore import expo.modules.kotlin.sharedobjects.SharedObject -import expo.modules.medialibrary.next.exceptions.ContentResolverNotObtainedException import expo.modules.medialibrary.next.extensions.asIterable -import expo.modules.medialibrary.next.extensions.getOrThrow +import expo.modules.medialibrary.next.extensions.asSequence import expo.modules.medialibrary.next.extensions.resolver.extractAssetContentUri import expo.modules.medialibrary.next.objects.album.Album import expo.modules.medialibrary.next.objects.asset.Asset +import expo.modules.medialibrary.next.objects.asset.AssetMapper import expo.modules.medialibrary.next.objects.asset.factories.AssetFactory +import expo.modules.medialibrary.next.objects.asset.domain.MediaStoreFile +import expo.modules.medialibrary.next.objects.asset.domain.MediaStoreFileColumnIndexes import expo.modules.medialibrary.next.objects.query.builder.QueryLegacyExecutor import expo.modules.medialibrary.next.objects.query.builder.QueryModernExecutor import expo.modules.medialibrary.next.records.AssetField +import expo.modules.medialibrary.next.records.AssetMetadata import expo.modules.medialibrary.next.records.SortDescriptor import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ensureActive import kotlinx.coroutines.withContext -import java.lang.ref.WeakReference import kotlin.collections.joinToString class Query( val assetFactory: AssetFactory, - context: Context + val assetMapper: AssetMapper, + val contentResolver: ContentResolver ) : SharedObject() { - private val contextRef = WeakReference(context) - - private val contentResolver - get() = contextRef - .getOrThrow() - .contentResolver ?: throw ContentResolverNotObtainedException() - private val clauses = mutableListOf() private val args = mutableListOf() private val orderBy = mutableListOf() @@ -109,4 +105,21 @@ class Query( .toList() } } + + suspend fun exeForMetadata(): List = withContext(Dispatchers.IO) { + val queryExecutor = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + QueryModernExecutor(clauses, args, orderBy, limit, offset) + } else { + QueryLegacyExecutor(clauses, args, orderBy, limit, offset) + } + + queryExecutor.exe(MediaStoreFile.projection, contentResolver).use { + ensureActive() + val columnIndexes = MediaStoreFileColumnIndexes.from(it) + it.asSequence() + .map { row -> MediaStoreFile.from(row, columnIndexes) } + .map { fileAsset -> assetMapper.toMetadata(fileAsset) } + .toList() + } + } } diff --git a/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/records/AssetMetadata.kt b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/records/AssetMetadata.kt new file mode 100644 index 00000000000000..b19245d07c496e --- /dev/null +++ b/packages/expo-media-library/android/src/main/java/expo/modules/medialibrary/next/records/AssetMetadata.kt @@ -0,0 +1,20 @@ +package expo.modules.medialibrary.next.records + +import android.net.Uri +import expo.modules.kotlin.records.Field +import expo.modules.kotlin.records.Record +import expo.modules.medialibrary.next.objects.wrappers.MediaType +import expo.modules.kotlin.types.OptimizedRecord + +@OptimizedRecord +data class AssetMetadata( + @Field val id: Uri, + @Field val creationTime: Long?, + @Field val duration: Long?, + @Field val filename: String?, + @Field val height: Int?, + @Field val width: Int?, + @Field val mediaType: MediaType, + @Field val modificationTime: Long?, + @Field val isFavorite: Boolean +) : Record diff --git a/packages/expo-media-library/build/MediaLibraryNext.types.d.ts b/packages/expo-media-library/build/MediaLibraryNext.types.d.ts index e33136572368cd..02620cc17275d0 100644 --- a/packages/expo-media-library/build/MediaLibraryNext.types.d.ts +++ b/packages/expo-media-library/build/MediaLibraryNext.types.d.ts @@ -5,6 +5,7 @@ export * from './types/MediaType'; export * from './types/MediaTypeFilter'; export * from './types/GranularPermission'; export * from './types/AssetInfo'; +export * from './types/AssetMetadata'; export * from './types/Location'; export * from './types/MediaLibraryAssetsChangeEvent'; export * from './types/Shape'; diff --git a/packages/expo-media-library/build/MediaLibraryNext.types.d.ts.map b/packages/expo-media-library/build/MediaLibraryNext.types.d.ts.map index 7ac537734a4cf7..dcbf76b3229295 100644 --- a/packages/expo-media-library/build/MediaLibraryNext.types.d.ts.map +++ b/packages/expo-media-library/build/MediaLibraryNext.types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"MediaLibraryNext.types.d.ts","sourceRoot":"","sources":["../src/MediaLibraryNext.types.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uCAAuC,CAAC;AACtD,cAAc,eAAe,CAAC"} \ No newline at end of file +{"version":3,"file":"MediaLibraryNext.types.d.ts","sourceRoot":"","sources":["../src/MediaLibraryNext.types.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uCAAuC,CAAC;AACtD,cAAc,eAAe,CAAC"} \ No newline at end of file diff --git a/packages/expo-media-library/build/MediaLibraryNext.types.js b/packages/expo-media-library/build/MediaLibraryNext.types.js index c3a0c2045918bc..a96556df6d6f39 100644 --- a/packages/expo-media-library/build/MediaLibraryNext.types.js +++ b/packages/expo-media-library/build/MediaLibraryNext.types.js @@ -5,6 +5,7 @@ export * from './types/MediaType'; export * from './types/MediaTypeFilter'; export * from './types/GranularPermission'; export * from './types/AssetInfo'; +export * from './types/AssetMetadata'; export * from './types/Location'; export * from './types/MediaLibraryAssetsChangeEvent'; export * from './types/Shape'; diff --git a/packages/expo-media-library/build/MediaLibraryNext.types.js.map b/packages/expo-media-library/build/MediaLibraryNext.types.js.map index 348d75c55d7271..1afaeddd15fa36 100644 --- a/packages/expo-media-library/build/MediaLibraryNext.types.js.map +++ b/packages/expo-media-library/build/MediaLibraryNext.types.js.map @@ -1 +1 @@ -{"version":3,"file":"MediaLibraryNext.types.js","sourceRoot":"","sources":["../src/MediaLibraryNext.types.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uCAAuC,CAAC;AACtD,cAAc,eAAe,CAAC","sourcesContent":["export * from './types/SortDescriptor';\nexport * from './types/AssetField';\nexport * from './types/MediaSubtype';\nexport * from './types/MediaType';\nexport * from './types/MediaTypeFilter';\nexport * from './types/GranularPermission';\nexport * from './types/AssetInfo';\nexport * from './types/Location';\nexport * from './types/MediaLibraryAssetsChangeEvent';\nexport * from './types/Shape';\n"]} \ No newline at end of file +{"version":3,"file":"MediaLibraryNext.types.js","sourceRoot":"","sources":["../src/MediaLibraryNext.types.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uCAAuC,CAAC;AACtD,cAAc,eAAe,CAAC","sourcesContent":["export * from './types/SortDescriptor';\nexport * from './types/AssetField';\nexport * from './types/MediaSubtype';\nexport * from './types/MediaType';\nexport * from './types/MediaTypeFilter';\nexport * from './types/GranularPermission';\nexport * from './types/AssetInfo';\nexport * from './types/AssetMetadata';\nexport * from './types/Location';\nexport * from './types/MediaLibraryAssetsChangeEvent';\nexport * from './types/Shape';\n"]} \ No newline at end of file diff --git a/packages/expo-media-library/build/types/AssetMetadata.d.ts b/packages/expo-media-library/build/types/AssetMetadata.d.ts new file mode 100644 index 00000000000000..cf26c43ef32cb3 --- /dev/null +++ b/packages/expo-media-library/build/types/AssetMetadata.d.ts @@ -0,0 +1,21 @@ +import type { MediaType } from './MediaType'; +/** + * Lightweight metadata for a single asset, returned by [Query.exeForMetadata](#exeformetadata). + * + * Contains fields that can be read cheaply from the media store, without resolving file paths or + * decoding files. Use [Asset](#asset) getters when you need heavier fields such as URI or EXIF data. + * + * > On Android, `width` and `height` may be `null` when the media store does not record them. + */ +export type AssetMetadata = { + id: string; + filename: string | null; + mediaType: MediaType; + width: number | null; + height: number | null; + duration: number | null; + creationTime: number | null; + modificationTime: number | null; + isFavorite: boolean; +}; +//# sourceMappingURL=AssetMetadata.d.ts.map \ No newline at end of file diff --git a/packages/expo-media-library/build/types/AssetMetadata.d.ts.map b/packages/expo-media-library/build/types/AssetMetadata.d.ts.map new file mode 100644 index 00000000000000..d32e8869e42592 --- /dev/null +++ b/packages/expo-media-library/build/types/AssetMetadata.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"AssetMetadata.d.ts","sourceRoot":"","sources":["../../src/types/AssetMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC"} \ No newline at end of file diff --git a/packages/expo-media-library/build/types/AssetMetadata.js b/packages/expo-media-library/build/types/AssetMetadata.js new file mode 100644 index 00000000000000..54f2e008485dfe --- /dev/null +++ b/packages/expo-media-library/build/types/AssetMetadata.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=AssetMetadata.js.map \ No newline at end of file diff --git a/packages/expo-media-library/build/types/AssetMetadata.js.map b/packages/expo-media-library/build/types/AssetMetadata.js.map new file mode 100644 index 00000000000000..83261a415fc5c6 --- /dev/null +++ b/packages/expo-media-library/build/types/AssetMetadata.js.map @@ -0,0 +1 @@ +{"version":3,"file":"AssetMetadata.js","sourceRoot":"","sources":["../../src/types/AssetMetadata.ts"],"names":[],"mappings":"","sourcesContent":["import type { MediaType } from './MediaType';\n\n/**\n * Lightweight metadata for a single asset, returned by [Query.exeForMetadata](#exeformetadata).\n *\n * Contains fields that can be read cheaply from the media store, without resolving file paths or\n * decoding files. Use [Asset](#asset) getters when you need heavier fields such as URI or EXIF data.\n *\n * > On Android, `width` and `height` may be `null` when the media store does not record them.\n */\nexport type AssetMetadata = {\n id: string;\n filename: string | null;\n mediaType: MediaType;\n width: number | null;\n height: number | null;\n duration: number | null;\n creationTime: number | null;\n modificationTime: number | null;\n isFavorite: boolean;\n};\n"]} \ No newline at end of file diff --git a/packages/expo-media-library/build/types/Query.d.ts b/packages/expo-media-library/build/types/Query.d.ts index 014e92dd1fa6e7..71c0d31288cebe 100644 --- a/packages/expo-media-library/build/types/Query.d.ts +++ b/packages/expo-media-library/build/types/Query.d.ts @@ -1,6 +1,7 @@ import type { Album } from './Album'; import type { Asset } from './Asset'; import type { AssetField, AssetFieldValueMap } from './AssetField'; +import type { AssetMetadata } from './AssetMetadata'; import type { SortDescriptor } from './SortDescriptor'; /** * Represents a query to fetch data from the media library. @@ -89,5 +90,24 @@ export declare class Query { * ``` */ exe(): Promise; + /** + * Executes the query and retrieves lightweight metadata for the matching assets. + * + * Returns fields that can be read cheaply from the media store, without resolving file paths or + * decoding files. + * + * @returns A promise that resolves to an array of [AssetMetadata](#assetmetadata) objects that match the query criteria. + * + * @example + * ```ts + * const assets = await new Query() + * .eq(AssetField.MEDIA_TYPE, MediaType.IMAGE) + * .lte(AssetField.HEIGHT, 1080) + * .orderBy(AssetField.CREATION_TIME) + * .limit(20) + * .exeForMetadata(); + * ``` + */ + exeForMetadata(): Promise; } //# sourceMappingURL=Query.d.ts.map \ No newline at end of file diff --git a/packages/expo-media-library/build/types/Query.d.ts.map b/packages/expo-media-library/build/types/Query.d.ts.map index c3071c91163374..f66bbf7b74ea16 100644 --- a/packages/expo-media-library/build/types/Query.d.ts.map +++ b/packages/expo-media-library/build/types/Query.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../src/types/Query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,KAAK;;IAKxB;;;;;OAKG;IACH,EAAE,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,KAAK;IACvE;;;;;OAKG;IACH,MAAM,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK;IAC7E;;;;;OAKG;IACH,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK;IAC3C;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK;IAC5C;;;;;OAKG;IACH,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK;IAC3C;;;;;OAKG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK;IAC5C;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK;IAC3B;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK;IAC7B;;;OAGG;IACH,OAAO,CAAC,eAAe,EAAE,cAAc,GAAG,UAAU,GAAG,KAAK;IAC5D;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;IAC1B;;;;;;;;;;;;;OAaG;IACH,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;CACxB"} \ No newline at end of file +{"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../src/types/Query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,KAAK;;IAKxB;;;;;OAKG;IACH,EAAE,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,KAAK;IACvE;;;;;OAKG;IACH,MAAM,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK;IAC7E;;;;;OAKG;IACH,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK;IAC3C;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK;IAC5C;;;;;OAKG;IACH,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK;IAC3C;;;;;OAKG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK;IAC5C;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK;IAC3B;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK;IAC7B;;;OAGG;IACH,OAAO,CAAC,eAAe,EAAE,cAAc,GAAG,UAAU,GAAG,KAAK;IAC5D;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;IAC1B;;;;;;;;;;;;;OAaG;IACH,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CAC3C"} \ No newline at end of file diff --git a/packages/expo-media-library/build/types/Query.js.map b/packages/expo-media-library/build/types/Query.js.map index fbe6fda8340609..578e123543ee94 100644 --- a/packages/expo-media-library/build/types/Query.js.map +++ b/packages/expo-media-library/build/types/Query.js.map @@ -1 +1 @@ -{"version":3,"file":"Query.js","sourceRoot":"","sources":["../../src/types/Query.ts"],"names":[],"mappings":"","sourcesContent":["import type { Album } from './Album';\nimport type { Asset } from './Asset';\nimport type { AssetField, AssetFieldValueMap } from './AssetField';\nimport type { SortDescriptor } from './SortDescriptor';\n\n/**\n * Represents a query to fetch data from the media library.\n *\n * A `query` implements a builder pattern, allowing you to chain multiple filtering and sorting methods\n * to construct complex queries.\n */\nexport declare class Query {\n /*\n * Initializes a new, empty query.\n */\n constructor();\n /**\n * Filters assets where the specified field is equal to the given value.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - The value that the field should equal. Each field has a specific unique type.\n * @returns The updated query object for chaining.\n */\n eq(field: T, value: AssetFieldValueMap[T]): Query;\n /**\n * Filters assets where the specified field's value is in the given array of values.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - An array of values that the field should match. Each field has a specific unique type.\n * @returns The updated query object for chaining.\n */\n within(field: T, value: AssetFieldValueMap[T][]): Query;\n /**\n * Filters assets where the specified field is greater than the given value.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - The value that the field should be greater than.\n * @returns The updated query object for chaining.\n */\n gt(field: AssetField, value: number): Query;\n /**\n * Filters assets where the specified field is greater than or equal to the given value.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - The value that the field should be greater than or equal to.\n */\n gte(field: AssetField, value: number): Query;\n /**\n * Filters assets where the specified field is less than the given value.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - The value that the field should be less than.\n * @returns The updated query object for chaining.\n */\n lt(field: AssetField, value: number): Query;\n /**\n * Filters assets where the specified field is less than or equal to the given value.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - The value that the field should be less than or equal to.\n * @returns The updated query object for chaining.\n */\n lte(field: AssetField, value: number): Query;\n /**\n * Limits the number of results returned by the query.\n * @param limit - The maximum number of results to return.\n * @returns The updated query object for chaining.\n */\n limit(limit: number): Query;\n /**\n * Skips the specified number of results.\n * @param offset - The number of results to skip.\n * @returns The updated query object for chaining.\n */\n offset(offset: number): Query;\n /**\n * Orders the results by the specified sort descriptor or asset field.\n * @param sortDescriptors - An instance of SortDescriptor or an AssetField. If an AssetField is provided, the sorting will be done in ascending order by default.\n */\n orderBy(sortDescriptors: SortDescriptor | AssetField): Query;\n /**\n * Filters assets to only those contained in the specified album.\n * @param album - The album to filter assets by.\n * @returns The updated query object for chaining.\n */\n album(album: Album): Query;\n /**\n * Executes the query and retrieves the matching assets.\n * @returns A promise that resolves to an array of [Asset](#asset) objects that match the query criteria.\n *\n * @example\n * ```ts\n * const assets = await new Query()\n * .eq(AssetField.MEDIA_TYPE, MediaType.IMAGE)\n * .lte(AssetField.HEIGHT, 1080)\n * .orderBy(AssetField.CREATION_TIME)\n * .limit(20)\n * .exe();\n * ```\n */\n exe(): Promise;\n}\n"]} \ No newline at end of file +{"version":3,"file":"Query.js","sourceRoot":"","sources":["../../src/types/Query.ts"],"names":[],"mappings":"","sourcesContent":["import type { Album } from './Album';\nimport type { Asset } from './Asset';\nimport type { AssetField, AssetFieldValueMap } from './AssetField';\nimport type { AssetMetadata } from './AssetMetadata';\nimport type { SortDescriptor } from './SortDescriptor';\n\n/**\n * Represents a query to fetch data from the media library.\n *\n * A `query` implements a builder pattern, allowing you to chain multiple filtering and sorting methods\n * to construct complex queries.\n */\nexport declare class Query {\n /*\n * Initializes a new, empty query.\n */\n constructor();\n /**\n * Filters assets where the specified field is equal to the given value.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - The value that the field should equal. Each field has a specific unique type.\n * @returns The updated query object for chaining.\n */\n eq(field: T, value: AssetFieldValueMap[T]): Query;\n /**\n * Filters assets where the specified field's value is in the given array of values.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - An array of values that the field should match. Each field has a specific unique type.\n * @returns The updated query object for chaining.\n */\n within(field: T, value: AssetFieldValueMap[T][]): Query;\n /**\n * Filters assets where the specified field is greater than the given value.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - The value that the field should be greater than.\n * @returns The updated query object for chaining.\n */\n gt(field: AssetField, value: number): Query;\n /**\n * Filters assets where the specified field is greater than or equal to the given value.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - The value that the field should be greater than or equal to.\n */\n gte(field: AssetField, value: number): Query;\n /**\n * Filters assets where the specified field is less than the given value.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - The value that the field should be less than.\n * @returns The updated query object for chaining.\n */\n lt(field: AssetField, value: number): Query;\n /**\n * Filters assets where the specified field is less than or equal to the given value.\n * @param field - an [AssetField](#assetfield) to filter by.\n * @param value - The value that the field should be less than or equal to.\n * @returns The updated query object for chaining.\n */\n lte(field: AssetField, value: number): Query;\n /**\n * Limits the number of results returned by the query.\n * @param limit - The maximum number of results to return.\n * @returns The updated query object for chaining.\n */\n limit(limit: number): Query;\n /**\n * Skips the specified number of results.\n * @param offset - The number of results to skip.\n * @returns The updated query object for chaining.\n */\n offset(offset: number): Query;\n /**\n * Orders the results by the specified sort descriptor or asset field.\n * @param sortDescriptors - An instance of SortDescriptor or an AssetField. If an AssetField is provided, the sorting will be done in ascending order by default.\n */\n orderBy(sortDescriptors: SortDescriptor | AssetField): Query;\n /**\n * Filters assets to only those contained in the specified album.\n * @param album - The album to filter assets by.\n * @returns The updated query object for chaining.\n */\n album(album: Album): Query;\n /**\n * Executes the query and retrieves the matching assets.\n * @returns A promise that resolves to an array of [Asset](#asset) objects that match the query criteria.\n *\n * @example\n * ```ts\n * const assets = await new Query()\n * .eq(AssetField.MEDIA_TYPE, MediaType.IMAGE)\n * .lte(AssetField.HEIGHT, 1080)\n * .orderBy(AssetField.CREATION_TIME)\n * .limit(20)\n * .exe();\n * ```\n */\n exe(): Promise;\n /**\n * Executes the query and retrieves lightweight metadata for the matching assets.\n *\n * Returns fields that can be read cheaply from the media store, without resolving file paths or\n * decoding files.\n *\n * @returns A promise that resolves to an array of [AssetMetadata](#assetmetadata) objects that match the query criteria.\n *\n * @example\n * ```ts\n * const assets = await new Query()\n * .eq(AssetField.MEDIA_TYPE, MediaType.IMAGE)\n * .lte(AssetField.HEIGHT, 1080)\n * .orderBy(AssetField.CREATION_TIME)\n * .limit(20)\n * .exeForMetadata();\n * ```\n */\n exeForMetadata(): Promise;\n}\n"]} \ No newline at end of file diff --git a/packages/expo-media-library/ios/next/MediaLibraryNextModule.swift b/packages/expo-media-library/ios/next/MediaLibraryNextModule.swift index d4b23942496390..8aa825b6935211 100644 --- a/packages/expo-media-library/ios/next/MediaLibraryNextModule.swift +++ b/packages/expo-media-library/ios/next/MediaLibraryNextModule.swift @@ -4,6 +4,7 @@ import PhotosUI public final class MediaLibraryNextModule: Module { private static let libraryDidChangeEvent = "mediaLibraryDidChange" + private let assetMapper = AssetMapper() private lazy var observerManager = PhotoLibraryObserverManager(onChange: { [weak self] body in guard let self = self else { return @@ -27,7 +28,7 @@ public final class MediaLibraryNextModule: Module { // swiftlint:disable:next closure_body_length Class(Asset.self) { Constructor { (id: String) -> Asset in - return Asset(id: id) + return Asset(id: id, assetMapper: assetMapper) } Property("id") { (this: Asset) in @@ -123,7 +124,7 @@ public final class MediaLibraryNextModule: Module { } try await AssetCollectionRepository.shared.add(assets: [asset], to: guardedAlbum.id) } - return Asset(localIdentifier: newAssetId) + return Asset(localIdentifier: newAssetId, assetMapper: assetMapper) } StaticAsyncFunction("delete") { (assets: [Asset]) async throws in @@ -136,7 +137,7 @@ public final class MediaLibraryNextModule: Module { // swiftlint:disable:next closure_body_length Class(Query.self) { Constructor { - return Query() + return Query(assetMapper: assetMapper) } Function("eq") { (this: Query, assetField: AssetField, value: Either) in @@ -188,11 +189,15 @@ public final class MediaLibraryNextModule: Module { AsyncFunction("exe") { (this: Query) in try await this.exe() } + + AsyncFunction("exeForMetadata") { (this: Query) in + try await this.exeForMetadata() + } } Class(Album.self) { Constructor { (id: String) -> Album in - return Album(id: id) + return Album(id: id, assetMapper: assetMapper) } Property("id") { (album: Album) in @@ -221,7 +226,7 @@ public final class MediaLibraryNextModule: Module { StaticAsyncFunction("getAll") { try await checkIfPermissionGranted() - return try await Album.getAll() + return try await Album.getAll(assetMapper: assetMapper) } StaticAsyncFunction("get") { (title: String) -> Album? in @@ -229,7 +234,7 @@ public final class MediaLibraryNextModule: Module { guard let collection = AssetCollectionRepository.shared.get(byTitle: title) else { return nil } - return Album(id: collection.localIdentifier) + return Album(id: collection.localIdentifier, assetMapper: assetMapper) } StaticAsyncFunction("delete") { (albums: [Album], deleteAssets: Bool?) async throws in @@ -244,7 +249,7 @@ public final class MediaLibraryNextModule: Module { let newCollectionId = try await AssetCollectionRepository.shared.add(name: name) let phAssetsToAdd = AssetRepository.shared.get(by: assetIds) try await AssetCollectionRepository.shared.add(assets: phAssetsToAdd, to: newCollectionId) - return Album(id: newCollectionId) + return Album(id: newCollectionId, assetMapper: assetMapper) } } diff --git a/packages/expo-media-library/ios/next/objects/Query/Query.swift b/packages/expo-media-library/ios/next/objects/Query/Query.swift index 80c901207617bc..e8c1c7b48d1dbf 100644 --- a/packages/expo-media-library/ios/next/objects/Query/Query.swift +++ b/packages/expo-media-library/ios/next/objects/Query/Query.swift @@ -2,12 +2,17 @@ import Photos import ExpoModulesCore class Query: SharedObject { + private let assetMapper: AssetMapper private var predicates: [NSPredicate] = [] private var sortDescriptors: [NSSortDescriptor] = [] private var album: Album? private var limit: Int? private var offset: Int? + init(assetMapper: AssetMapper) { + self.assetMapper = assetMapper + } + func eq(_ assetField: AssetField, _ value: Either) throws -> Query { let predicate = try AssetFieldPredicateBuilder.buildPredicate( assetField: assetField, @@ -95,14 +100,24 @@ class Query: SharedObject { } func exe() async throws -> [Asset] { - if let result = try await resolveZeroLimitResult() { - return result + return try await fetchMatchingPHAssets().map { + Asset(localIdentifier: $0.localIdentifier, assetMapper: assetMapper) + } + } + + func exeForMetadata() async throws -> [AssetMetadata] { + return try await fetchMatchingPHAssets().map { + assetMapper.toMetadata($0) } + } + private func fetchMatchingPHAssets() async throws -> [PHAsset] { + if try await shouldReturnEmpty() { + return [] + } let fetchOptions = constructFetchOptions() let phFetchResult = try await fetch(fetchOptions) return sliceFetchedAssets(from: phFetchResult) - .map { Asset(localIdentifier: $0.localIdentifier) } } private func constructFetchOptions() -> PHFetchOptions { @@ -125,15 +140,15 @@ class Query: SharedObject { // fetchLimit set to 0 in the Photo Library returns all assets. // The API should return empty array in this scenario. - private func resolveZeroLimitResult() async throws -> [Asset]? { + private func shouldReturnEmpty() async throws -> Bool { guard limit == 0 else { - return nil + return false } // Validates the album and throws if it doesn't exist. if let album { _ = try await album.getCollection() } - return [] + return true } private func sliceFetchedAssets( diff --git a/packages/expo-media-library/ios/next/objects/album/Album.swift b/packages/expo-media-library/ios/next/objects/album/Album.swift index 4fd69e0f337e44..4fbf68ff03e783 100644 --- a/packages/expo-media-library/ios/next/objects/album/Album.swift +++ b/packages/expo-media-library/ios/next/objects/album/Album.swift @@ -4,10 +4,12 @@ import UniformTypeIdentifiers class Album: SharedObject { let id: String + private let assetMapper: AssetMapper private(set) var collection: PHAssetCollection? - init(id: String) { + init(id: String, assetMapper: AssetMapper) { self.id = id + self.assetMapper = assetMapper } func getCollection() async throws -> PHAssetCollection { @@ -18,7 +20,7 @@ class Album: SharedObject { func getAssets() async throws -> [Asset] { let collection = try await requirePHAssetCollection() let phAssets = AssetRepository.shared.get(by: collection) - return phAssets.map { Asset(localIdentifier: $0.localIdentifier) } + return phAssets.map { Asset(localIdentifier: $0.localIdentifier, assetMapper: assetMapper) } } func title() async throws -> String { @@ -89,8 +91,8 @@ class Album: SharedObject { } } - static func getAll() async throws -> [Album] { + static func getAll(assetMapper: AssetMapper) async throws -> [Album] { AssetCollectionRepository.shared.getAll() - .map { Album(id: $0.localIdentifier) } + .map { Album(id: $0.localIdentifier, assetMapper: assetMapper) } } } diff --git a/packages/expo-media-library/ios/next/objects/asset/Asset.swift b/packages/expo-media-library/ios/next/objects/asset/Asset.swift index e026f636704668..6fb83d29ed98fc 100644 --- a/packages/expo-media-library/ios/next/objects/asset/Asset.swift +++ b/packages/expo-media-library/ios/next/objects/asset/Asset.swift @@ -6,16 +6,19 @@ import ExpoModulesCore class Asset: SharedObject { let id: String let localIdentifier: String + private let assetMapper: AssetMapper var phAsset: PHAsset? - init(id: String) { + init(id: String, assetMapper: AssetMapper) { self.id = id self.localIdentifier = String(id.dropFirst("ph://".count)) + self.assetMapper = assetMapper } - init(localIdentifier: String) { + init(localIdentifier: String, assetMapper: AssetMapper) { self.id = "ph://\(localIdentifier)" self.localIdentifier = localIdentifier + self.assetMapper = assetMapper } func getHeight() async throws -> Int { @@ -38,23 +41,17 @@ class Asset: SharedObject { func getDuration() async throws -> Int? { let phAsset = try await requirePHAsset() - return phAsset.duration > 0 ? Int(phAsset.duration * 1000) : nil + return assetMapper.mapDuration(phAsset.duration) } func getFilename() async throws -> String { let phAsset = try await requirePHAsset() - guard let filename = phAsset.value(forKey: "filename") as? String else { - throw FailedToGetPropertyException("filename") - } - return filename + return try assetMapper.mapFilename(phAsset) } func getCreationTime() async throws -> Int? { let phAsset = try await requirePHAsset() - guard let date = phAsset.creationDate else { - return nil - } - return date.millisecondsSince1970 + return assetMapper.mapCreationTime(phAsset.creationDate) } func getLocation() async throws -> Location? { @@ -70,10 +67,7 @@ class Asset: SharedObject { func getModificationTime() async throws -> Int? { let phAsset = try await requirePHAsset() - guard let date = phAsset.modificationDate else { - return nil - } - return date.millisecondsSince1970 + return assetMapper.mapModificationTime(phAsset.modificationDate) } func getFavorite() async throws -> Bool { @@ -83,7 +77,7 @@ class Asset: SharedObject { func getMediaType() async throws -> MediaTypeNext { let phAsset = try await requirePHAsset() - return MediaTypeNext.from(phAsset.mediaType) + return assetMapper.mapMediaType(phAsset.mediaType) } func getMediaSubtypes() async throws -> [String] { @@ -140,28 +134,18 @@ class Asset: SharedObject { func getUri() async throws -> String { let phAsset = try await requirePHAsset() - return try await UriExtractor.extract(from: phAsset).absoluteString + return try await assetMapper.mapUri(phAsset) } func getInfo() async throws -> AssetInfo { - return await AssetInfo( - id: id, - creationTime: try getCreationTime(), - duration: try getDuration(), - uri: try getUri(), - filename: try getFilename(), - height: try getHeight(), - width: try getWidth(), - mediaType: try getMediaType(), - modificationTime: try getModificationTime(), - isFavorite: try getFavorite() - ) + let phAsset = try await requirePHAsset() + return try await assetMapper.toDto(phAsset) } func getAlbums() async throws -> [Album] { let phAsset = try await requirePHAsset() let collections = AssetCollectionRepository.shared.get(containing: phAsset) - return collections.map { Album(id: $0.localIdentifier) } + return collections.map { Album(id: $0.localIdentifier, assetMapper: assetMapper) } } func delete() async throws { @@ -210,11 +194,11 @@ class Asset: SharedObject { self.phAsset = nil } - static func from(filePath: URL) async throws -> Asset { + static func from(filePath: URL, assetMapper: AssetMapper) async throws -> Asset { guard FileManager.default.fileExists(atPath: filePath.path) else { throw FailedToCreateAssetException("File does not exist at path: \(filePath.path)") } let localIdentifier = try await AssetRepository.shared.add(from: filePath) - return Asset(localIdentifier: localIdentifier) + return Asset(localIdentifier: localIdentifier, assetMapper: assetMapper) } } diff --git a/packages/expo-media-library/ios/next/objects/asset/AssetMapper.swift b/packages/expo-media-library/ios/next/objects/asset/AssetMapper.swift new file mode 100644 index 00000000000000..d6d2a48adb9049 --- /dev/null +++ b/packages/expo-media-library/ios/next/objects/asset/AssetMapper.swift @@ -0,0 +1,60 @@ +import Foundation +import Photos + +class AssetMapper { + func toDto(_ phAsset: PHAsset) async throws -> AssetInfo { + return AssetInfo( + id: "ph://\(phAsset.localIdentifier)", + creationTime: mapCreationTime(phAsset.creationDate), + duration: mapDuration(phAsset.duration), + uri: try await mapUri(phAsset), + filename: try mapFilename(phAsset), + height: phAsset.pixelHeight, + width: phAsset.pixelWidth, + mediaType: mapMediaType(phAsset.mediaType), + modificationTime: mapModificationTime(phAsset.modificationDate), + isFavorite: phAsset.isFavorite + ) + } + + func toMetadata(_ phAsset: PHAsset) -> AssetMetadata { + return AssetMetadata( + id: "ph://\(phAsset.localIdentifier)", + creationTime: mapCreationTime(phAsset.creationDate), + duration: mapDuration(phAsset.duration), + filename: phAsset.value(forKey: "filename") as? String, + height: phAsset.pixelHeight, + width: phAsset.pixelWidth, + mediaType: mapMediaType(phAsset.mediaType), + modificationTime: mapModificationTime(phAsset.modificationDate), + isFavorite: phAsset.isFavorite + ) + } + + func mapCreationTime(_ date: Date?) -> Int? { + return date?.millisecondsSince1970 + } + + func mapDuration(_ duration: TimeInterval) -> Int? { + return duration > 0 ? Int(duration * 1000) : nil + } + + func mapUri(_ phAsset: PHAsset) async throws -> String { + return try await UriExtractor.extract(from: phAsset).absoluteString + } + + func mapFilename(_ phAsset: PHAsset) throws -> String { + guard let filename = phAsset.value(forKey: "filename") as? String else { + throw FailedToGetPropertyException("filename") + } + return filename + } + + func mapMediaType(_ mediaType: PHAssetMediaType) -> MediaTypeNext { + return MediaTypeNext.from(mediaType) + } + + func mapModificationTime(_ date: Date?) -> Int? { + return date?.millisecondsSince1970 + } +} diff --git a/packages/expo-media-library/ios/next/objects/asset/AssetMetadata.swift b/packages/expo-media-library/ios/next/objects/asset/AssetMetadata.swift new file mode 100644 index 00000000000000..132dd929385f4c --- /dev/null +++ b/packages/expo-media-library/ios/next/objects/asset/AssetMetadata.swift @@ -0,0 +1,37 @@ +import ExpoModulesCore + +struct AssetMetadata: Record { + @Field var id: String + @Field var creationTime: Int? + @Field var duration: Int? + @Field var filename: String? + @Field var height: Int? + @Field var width: Int? + @Field var mediaType: MediaTypeNext = .UNKNOWN + @Field var modificationTime: Int? + @Field var isFavorite: Bool + + init () {} + + init( + id: String, + creationTime: Int? = nil, + duration: Int? = nil, + filename: String?, + height: Int?, + width: Int?, + mediaType: MediaTypeNext, + modificationTime: Int? = nil, + isFavorite: Bool + ) { + self.id = id + self.creationTime = creationTime + self.duration = duration + self.filename = filename + self.height = height + self.width = width + self.mediaType = mediaType + self.modificationTime = modificationTime + self.isFavorite = isFavorite + } +} diff --git a/packages/expo-media-library/src/MediaLibraryNext.types.ts b/packages/expo-media-library/src/MediaLibraryNext.types.ts index 74d39a6e868141..124320b687e6a0 100644 --- a/packages/expo-media-library/src/MediaLibraryNext.types.ts +++ b/packages/expo-media-library/src/MediaLibraryNext.types.ts @@ -5,6 +5,7 @@ export * from './types/MediaType'; export * from './types/MediaTypeFilter'; export * from './types/GranularPermission'; export * from './types/AssetInfo'; +export * from './types/AssetMetadata'; export * from './types/Location'; export * from './types/MediaLibraryAssetsChangeEvent'; export * from './types/Shape'; diff --git a/packages/expo-media-library/src/types/AssetMetadata.ts b/packages/expo-media-library/src/types/AssetMetadata.ts new file mode 100644 index 00000000000000..aabda6f110efbb --- /dev/null +++ b/packages/expo-media-library/src/types/AssetMetadata.ts @@ -0,0 +1,21 @@ +import type { MediaType } from './MediaType'; + +/** + * Lightweight metadata for a single asset, returned by [Query.exeForMetadata](#exeformetadata). + * + * Contains fields that can be read cheaply from the media store, without resolving file paths or + * decoding files. Use [Asset](#asset) getters when you need heavier fields such as URI or EXIF data. + * + * > On Android, `width` and `height` may be `null` when the media store does not record them. + */ +export type AssetMetadata = { + id: string; + filename: string | null; + mediaType: MediaType; + width: number | null; + height: number | null; + duration: number | null; + creationTime: number | null; + modificationTime: number | null; + isFavorite: boolean; +}; diff --git a/packages/expo-media-library/src/types/Query.ts b/packages/expo-media-library/src/types/Query.ts index 26291dec5171d6..e4dbd51ebd0c12 100644 --- a/packages/expo-media-library/src/types/Query.ts +++ b/packages/expo-media-library/src/types/Query.ts @@ -1,6 +1,7 @@ import type { Album } from './Album'; import type { Asset } from './Asset'; import type { AssetField, AssetFieldValueMap } from './AssetField'; +import type { AssetMetadata } from './AssetMetadata'; import type { SortDescriptor } from './SortDescriptor'; /** @@ -93,4 +94,23 @@ export declare class Query { * ``` */ exe(): Promise; + /** + * Executes the query and retrieves lightweight metadata for the matching assets. + * + * Returns fields that can be read cheaply from the media store, without resolving file paths or + * decoding files. + * + * @returns A promise that resolves to an array of [AssetMetadata](#assetmetadata) objects that match the query criteria. + * + * @example + * ```ts + * const assets = await new Query() + * .eq(AssetField.MEDIA_TYPE, MediaType.IMAGE) + * .lte(AssetField.HEIGHT, 1080) + * .orderBy(AssetField.CREATION_TIME) + * .limit(20) + * .exeForMetadata(); + * ``` + */ + exeForMetadata(): Promise; } diff --git a/packages/expo-modules-core/CHANGELOG.md b/packages/expo-modules-core/CHANGELOG.md index 072cf6c3e9bf5e..a9fadfa135ed11 100644 --- a/packages/expo-modules-core/CHANGELOG.md +++ b/packages/expo-modules-core/CHANGELOG.md @@ -12,6 +12,7 @@ ### ๐Ÿ› Bug fixes - [android] Add a synchronous shadow node size update path, fixing a layout shift for `Host` `matchContents` views. ([#46604](https://github.com/expo/expo/pull/46604) by [@nishan](https://github.com/intergalacticspacehighway)) +- [Android] Fix `NullPointerException` crash when a `matchContents` view is unmounted while a shadow node size update is pending (e.g. closing a bottom sheet mid-resize). ([#46785](https://github.com/expo/expo/pull/46785) by [@nishan](https://github.com/intergalacticspacehighway)) - [iOS] Accept JS `Double` timestamps in `Date` Convertible. JS numbers arrive across the JSI bridge as Swift `Double`; the prior `as? Int` branch never matched, throwing `ConvertingException` whenever a JS caller passed `someDate.getTime()` to a `Date` / `Date?` argument. ([#46340](https://github.com/expo/expo/pull/46340) by [@kyleasaff](https://github.com/kyleasaff)) - [Android] Fix events being silently dropped for Compose views in custom modules. ([#46623](https://github.com/expo/expo/issues/46623) by [@benjaminkomen](https://github.com/benjaminkomen)) ([#46624](https://github.com/expo/expo/pull/46624) by [@nishan](https://github.com/intergalacticspacehighway)) - [Android] Fix nested `Host` double-composing children. ([#46282](https://github.com/expo/expo/issues/46282) by [@sadbytes](https://github.com/sadbytes)) ([#46304](https://github.com/expo/expo/pull/46304) by [@nishan](https://github.com/intergalacticspacehighway)) @@ -27,6 +28,7 @@ - Update edge-to-edge package to call `updateEdgeToEdgeFeatureFlag` ([#46335](https://github.com/expo/expo/pull/46335) by [@zoontek](https://github.com/zoontek)) - `NativeArrayBuffer` arguments no longer copy the buffer when it's already native-backed. ([#46448](https://github.com/expo/expo/pull/46448) by [@barthap](https://github.com/barthap)) - [iOS] `SharedObject::NativeState` now derives from `expo::NativeState` so the Swift wrapper can be recovered from the JS side via `getNativeState`, laying the groundwork for native-state-based shared object lookup. ([#46330](https://github.com/expo/expo/pull/46330) by [@tsapeta](https://github.com/tsapeta)) +- [Android] Ignore already-settled promises. ([#46770](https://github.com/expo/expo/pull/46770) by [@jakex7](https://github.com/jakex7)) ## 56.0.13 โ€” 2026-05-26 diff --git a/packages/expo-modules-core/android/src/main/cpp/fabric/NativeStatePropsGetter.cpp b/packages/expo-modules-core/android/src/main/cpp/fabric/NativeStatePropsGetter.cpp index d52da5134cf1fb..65dc1b5854f1fa 100644 --- a/packages/expo-modules-core/android/src/main/cpp/fabric/NativeStatePropsGetter.cpp +++ b/packages/expo-modules-core/android/src/main/cpp/fabric/NativeStatePropsGetter.cpp @@ -9,8 +9,8 @@ namespace expo { void NativeStatePropsGetter::registerNatives() { javaClassLocal()->registerNatives({ makeNativeMethod("getStateProps", NativeStatePropsGetter::getStateProps), - makeNativeMethod("updateStyleSizeImmediate", NativeStatePropsGetter::updateStyleSizeImmediate), - makeNativeMethod("updateViewSizeImmediate", NativeStatePropsGetter::updateViewSizeImmediate), + makeNativeMethod("updateStyleSizeImmediateImpl", NativeStatePropsGetter::updateStyleSizeImmediate), + makeNativeMethod("updateViewSizeImmediateImpl", NativeStatePropsGetter::updateViewSizeImmediate), }); } diff --git a/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/PromiseImpl.kt b/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/PromiseImpl.kt index c0a975cb6643c7..8184c2c7cf9aec 100644 --- a/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/PromiseImpl.kt +++ b/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/PromiseImpl.kt @@ -1,11 +1,8 @@ package expo.modules.kotlin.jni -import expo.modules.BuildConfig import expo.modules.core.interfaces.DoNotStrip import expo.modules.kotlin.AppContext import expo.modules.kotlin.Promise -import expo.modules.kotlin.exception.PromiseAlreadySettledException -import expo.modules.kotlin.logger import java.lang.ref.WeakReference @DoNotStrip @@ -61,17 +58,7 @@ class PromiseImpl @DoNotStrip internal constructor( private inline fun checkIfWasSettled(body: () -> Unit) { if (wasSettled) { - val exception = PromiseAlreadySettledException(fullFunctionName ?: "unknown") - val jsLogger = appContextHolder?.get()?.jsLogger - // We want to report that a promise was settled twice in the development build. - // However, in production, the app should crash. - if (BuildConfig.DEBUG && jsLogger != null) { - jsLogger.error("Trying to resolve promise that was already settled", exception) - logger.error("Trying to resolve promise that was already settled", exception) - return - } - - throw exception + return } body() diff --git a/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/fabric/NativeStatePropsGetter.kt b/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/fabric/NativeStatePropsGetter.kt index 09f8e9c5e33e57..dad95b46f95684 100644 --- a/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/fabric/NativeStatePropsGetter.kt +++ b/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/fabric/NativeStatePropsGetter.kt @@ -1,5 +1,6 @@ package expo.modules.kotlin.jni.fabric +import com.facebook.jni.HybridData import com.facebook.yoga.annotations.DoNotStrip @DoNotStrip @@ -8,8 +9,31 @@ class NativeStatePropsGetter { external fun getStateProps(stateWrapper: Any): Map? // Synchronously flush a style property size update in the current frame (pass NaN for "unset"). - external fun updateStyleSizeImmediate(stateWrapper: Any, styleWidth: Double, styleHeight: Double) + fun updateStyleSizeImmediate(stateWrapper: Any, styleWidth: Double, styleHeight: Double) { + if (!isStateValid(stateWrapper)) { + return + } + updateStyleSizeImmediateImpl(stateWrapper, styleWidth, styleHeight) + } // Synchronously flush a size update in the current frame. - external fun updateViewSizeImmediate(stateWrapper: Any, width: Double, height: Double) + fun updateViewSizeImmediate(stateWrapper: Any, width: Double, height: Double) { + if (!isStateValid(stateWrapper)) { + return + } + updateViewSizeImmediateImpl(stateWrapper, width, height) + } + + private external fun updateStyleSizeImmediateImpl( + stateWrapper: Any, + styleWidth: Double, + styleHeight: Double + ) + + private external fun updateViewSizeImmediateImpl(stateWrapper: Any, width: Double, height: Double) + + // The only `StateWrapper` is RN's `StateWrapperImpl`, a fbjni `HybridData`. When the shadow node is + // destroyed its native pointer is reset and calling into it throws. Skip the update like RN does + // before its own native state accesses. + private fun isStateValid(stateWrapper: Any): Boolean = (stateWrapper as? HybridData)?.isValid == true } diff --git a/packages/expo-type-information/build/typescriptGeneration.js b/packages/expo-type-information/build/typescriptGeneration.js index 829feeff215a66..12e7ea1be60c1b 100644 --- a/packages/expo-type-information/build/typescriptGeneration.js +++ b/packages/expo-type-information/build/typescriptGeneration.js @@ -254,6 +254,9 @@ function buildClassProperty(declaration) { typeNode: mapTypeToTsTypeNode(declaration.type), }); } +function getModuleClassEventsTypeName(moduleClassDeclaration) { + return `${moduleClassDeclaration.name}Events`; +} function buildNativeModuleClassDeclaration({ moduleClassDeclaration, exportedModuleName, }) { const buildClassTypeProperty = (classDeclaration) => createProperty({ // TODO(@HubertBer): that's a hack, but I couldn't find a proper way to do this @@ -275,7 +278,9 @@ function buildNativeModuleClassDeclaration({ moduleClassDeclaration, exportedMod return [ typescript_1.default.factory.createClassDeclaration([exportModifier(), declareModifier()], exportedModuleName ?? `${moduleClassDeclaration.name}NativeModuleType`, undefined, [ typescript_1.default.factory.createHeritageClause(typescript_1.default.SyntaxKind.ExtendsKeyword, [ - typescript_1.default.factory.createExpressionWithTypeArguments(typescript_1.default.factory.createIdentifier('NativeModule'), undefined), + typescript_1.default.factory.createExpressionWithTypeArguments(typescript_1.default.factory.createIdentifier('NativeModule'), [ + typescript_1.default.factory.createTypeReferenceNode(getModuleClassEventsTypeName(moduleClassDeclaration)), + ]), ]), ], [ ...moduleClassDeclaration.constants.map(buildClassProperty), @@ -398,6 +403,23 @@ function buildDefaultViewComponent({ componentName, propsTypeAlias, }) { ], undefined, functionBody), ]; } +function buildModuleEventsTypeDeclaration(moduleClassDeclaration, { exported }) { + const createEventType = () => typescript_1.default.factory.createFunctionTypeNode(undefined, [ + typescript_1.default.factory.createParameterDeclaration(undefined, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.DotDotDotToken), typescript_1.default.factory.createIdentifier('args'), undefined, typescript_1.default.factory.createArrayTypeNode(typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.AnyKeyword)), undefined), + ], voidKeywordType()); + return [ + typescript_1.default.addSyntheticLeadingComment(createTypeAlias({ + exported, + alias: getModuleClassEventsTypeName(moduleClassDeclaration), + type: typescript_1.default.factory.createTypeLiteralNode(moduleClassDeclaration.events.map((event) => { + return createPropertySignature({ + name: event, + typeNode: createEventType(), + }); + })), + }), typescript_1.default.SyntaxKind.SingleLineCommentTrivia, ` These events may have arguments that weren't resolved!`), + ]; +} function buildExposedTypesDeclarations(ctx, options) { const recordDeclarationMap = (recordType) => buildRecordTypeAlias(recordType, options.exported ?? false); const enumDeclarationMap = (enumType) => buildEnumTypeDeclaration(enumType, options.exported ?? false, options.declare ?? false); @@ -408,6 +430,7 @@ function buildExposedTypesDeclarations(ctx, options) { ctx.fileInfo.records.flatMap(recordDeclarationMap), ctx.fileInfo.enums.flatMap(enumDeclarationMap), ctx.module.classes.map(classDeclarationMap), + buildModuleEventsTypeDeclaration(ctx.module, options), ]); } function buildModuleDeclarationNodes(ctx) { @@ -519,7 +542,11 @@ function buildStableNativeModuleInterface(ctx) { createImportDeclaration({ namedImportsNames: [ ...ctx.fileInfo.usedTypeIdentifiers.difference(getBasicTypesIdentifiers()), - ...[generatedModuleTypeAlias, ctx.view ? getViewPropsTypeName(ctx.view) : null].filter((v) => v !== null), + ...[ + getModuleClassEventsTypeName(ctx.module), + generatedModuleTypeAlias, + ctx.view ? getViewPropsTypeName(ctx.view) : null, + ].filter((v) => v !== null), ], importFromName: generatedFilePath, }), @@ -682,7 +709,10 @@ async function generateFullTsInterface(fileTypeInformation) { importFromName: 'expo', }), createImportDeclaration({ - namedImportsNames: [...getAllNonBasicTypes(ctx.fileInfo)], + namedImportsNames: [ + ...getAllNonBasicTypes(ctx.fileInfo), + getModuleClassEventsTypeName(ctx.module), + ], importFromName: `./${moduleTypesFileImportName}`, }), buildNativeModuleClassDeclaration({ diff --git a/packages/expo-type-information/build/typescriptGeneration.js.map b/packages/expo-type-information/build/typescriptGeneration.js.map index 7e4d954b2a644b..a995b2e054a45b 100644 --- a/packages/expo-type-information/build/typescriptGeneration.js.map +++ b/packages/expo-type-information/build/typescriptGeneration.js.map @@ -1 +1 @@ -{"version":3,"file":"typescriptGeneration.js","sourceRoot":"","sources":["../src/typescriptGeneration.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"typescriptGeneration.js","sourceRoot":"","sources":["../src/typescriptGeneration.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/expo-type-information/src/typescriptGeneration.ts b/packages/expo-type-information/src/typescriptGeneration.ts index 6670e35387c035..2fcb79def41fd5 100644 --- a/packages/expo-type-information/src/typescriptGeneration.ts +++ b/packages/expo-type-information/src/typescriptGeneration.ts @@ -480,6 +480,10 @@ function buildClassProperty(declaration: PropertyDeclaration): ts.PropertyDeclar }); } +function getModuleClassEventsTypeName(moduleClassDeclaration: ModuleClassDeclaration): string { + return `${moduleClassDeclaration.name}Events`; +} + function buildNativeModuleClassDeclaration({ moduleClassDeclaration, exportedModuleName, @@ -519,7 +523,11 @@ function buildNativeModuleClassDeclaration({ ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [ ts.factory.createExpressionWithTypeArguments( ts.factory.createIdentifier('NativeModule'), - undefined + [ + ts.factory.createTypeReferenceNode( + getModuleClassEventsTypeName(moduleClassDeclaration) + ), + ] ), ]), ], @@ -786,6 +794,48 @@ function buildDefaultViewComponent({ ]; } +function buildModuleEventsTypeDeclaration( + moduleClassDeclaration: ModuleClassDeclaration, + { exported }: { exported?: boolean } +): ts.Node[] { + const createEventType = () => + ts.factory.createFunctionTypeNode( + undefined, + [ + ts.factory.createParameterDeclaration( + undefined, + ts.factory.createToken(ts.SyntaxKind.DotDotDotToken), + ts.factory.createIdentifier('args'), + undefined, + ts.factory.createArrayTypeNode( + ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword) + ), + undefined + ), + ], + voidKeywordType() + ); + + return [ + ts.addSyntheticLeadingComment( + createTypeAlias({ + exported, + alias: getModuleClassEventsTypeName(moduleClassDeclaration), + type: ts.factory.createTypeLiteralNode( + moduleClassDeclaration.events.map((event) => { + return createPropertySignature({ + name: event, + typeNode: createEventType(), + }); + }) + ), + }), + ts.SyntaxKind.SingleLineCommentTrivia, + ` These events may have arguments that weren't resolved!` + ), + ]; +} + export function buildExposedTypesDeclarations( ctx: GenerationContext, options: { exported?: boolean; declare?: boolean } @@ -803,6 +853,7 @@ export function buildExposedTypesDeclarations( ctx.fileInfo.records.flatMap(recordDeclarationMap), ctx.fileInfo.enums.flatMap(enumDeclarationMap), ctx.module.classes.map(classDeclarationMap), + buildModuleEventsTypeDeclaration(ctx.module, options), ]); } @@ -958,9 +1009,11 @@ function buildStableNativeModuleInterface(ctx: GenerationContext): ts.Node[] { createImportDeclaration({ namedImportsNames: [ ...ctx.fileInfo.usedTypeIdentifiers.difference(getBasicTypesIdentifiers()), - ...[generatedModuleTypeAlias, ctx.view ? getViewPropsTypeName(ctx.view) : null].filter( - (v) => v !== null - ), + ...[ + getModuleClassEventsTypeName(ctx.module), + generatedModuleTypeAlias, + ctx.view ? getViewPropsTypeName(ctx.view) : null, + ].filter((v) => v !== null), ], importFromName: generatedFilePath, }), @@ -1165,7 +1218,10 @@ export async function generateFullTsInterface(fileTypeInformation: FileTypeInfor importFromName: 'expo', }), createImportDeclaration({ - namedImportsNames: [...getAllNonBasicTypes(ctx.fileInfo)], + namedImportsNames: [ + ...getAllNonBasicTypes(ctx.fileInfo), + getModuleClassEventsTypeName(ctx.module), + ], importFromName: `./${moduleTypesFileImportName}`, }), buildNativeModuleClassDeclaration({ diff --git a/packages/expo-type-information/tests/TestModule.swift b/packages/expo-type-information/tests/TestModule.swift index 08dca4366ea68e..b4d33ac9f68079 100644 --- a/packages/expo-type-information/tests/TestModule.swift +++ b/packages/expo-type-information/tests/TestModule.swift @@ -3,6 +3,8 @@ import WebKit public class TestModule: Module { public func definition() -> ModuleDefinition { + Events("event1", "event2", "event3") + Constant("StringConstant") { () -> Int in return "Swift constant 1283" } diff --git a/packages/expo-type-information/tests/__snapshots__/typeInformation.test.ts.snap b/packages/expo-type-information/tests/__snapshots__/typeInformation.test.ts.snap index ff0711ddb69319..7df63f56a779f3 100644 --- a/packages/expo-type-information/tests/__snapshots__/typeInformation.test.ts.snap +++ b/packages/expo-type-information/tests/__snapshots__/typeInformation.test.ts.snap @@ -54,6 +54,13 @@ export declare class TestBasicClass { } export declare class TestEmptyClass {} +// These events may have arguments that weren't resolved! +export type TestModuleEvents = { + event1: (...args: any[]) => void; + event2: (...args: any[]) => void; + event3: (...args: any[]) => void; +}; + export interface ExpoWebViewProps extends ViewProps { url: URL; testRecord: TestRecord; @@ -64,7 +71,7 @@ export interface ExpoWebViewProps extends ViewProps { onEvent2?: (event: any) => void; } -export declare class TestModuleNativeModuleType extends NativeModule { +export declare class TestModuleNativeModuleType extends NativeModule { readonly StringConstant: number; readonly IntConstant: number; readonly UntypedConstant: unknown /*The type couldn't be resolved automatically.*/; @@ -118,6 +125,7 @@ import { SomeParametrizedType, TestRecord, TestRecordClass, + TestModuleEvents, TestModuleNativeModuleType, ExpoWebViewProps } from './TestModule.generated'; @@ -220,10 +228,11 @@ import { TestEmptyClass, URL, BarcodeType, - SomeParametrizedType + SomeParametrizedType, + TestModuleEvents } from './TestModule.types'; -export declare class TestModule extends NativeModule { +export declare class TestModule extends NativeModule { readonly StringConstant: number; readonly IntConstant: number; readonly UntypedConstant: unknown /*The type couldn't be resolved automatically.*/; @@ -323,6 +332,13 @@ export declare class TestBasicClass { } export declare class TestEmptyClass {} +// These events may have arguments that weren't resolved! +export type TestModuleEvents = { + event1: (...args: any[]) => void; + event2: (...args: any[]) => void; + event3: (...args: any[]) => void; +}; + export interface ExpoWebViewProps extends ViewProps { url: URL; testRecord: TestRecord; @@ -544,7 +560,14 @@ export declare class TestBasicClass { } export declare class TestEmptyClass {} -export declare class TestModuleNativeModuleType extends NativeModule { +// These events may have arguments that weren't resolved! +export type TestModuleEvents = { + event1: (...args: any[]) => void; + event2: (...args: any[]) => void; + event3: (...args: any[]) => void; +}; + +export declare class TestModuleNativeModuleType extends NativeModule { readonly StringConstant: number; readonly IntConstant: number; readonly UntypedConstant: unknown /*The type couldn't be resolved automatically.*/; @@ -673,7 +696,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 2435, + "definitionOffset": 2481, "name": "TestSimpleAsyncFunction", "parameters": [], "returnType": { @@ -701,7 +724,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 2626, + "definitionOffset": 2672, "name": "TestUnderscore", "parameters": [], "returnType": { @@ -723,9 +746,9 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 2752, + "definitionOffset": 2798, }, - "definitionOffset": 2706, + "definitionOffset": 2752, "methods": [], "name": "TestClassWithConstructor", "properties": [], @@ -742,7 +765,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 3294, + "definitionOffset": 3340, "name": "TestAsyncFunction", "parameters": [], "returnType": { @@ -787,14 +810,14 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 2854, + "definitionOffset": 2900, }, - "definitionOffset": 2818, + "definitionOffset": 2864, "methods": [], "name": "TestBasicClass", "properties": [ { - "definitionOffset": 2958, + "definitionOffset": 3004, "name": "TestIntProperty", "type": { "kind": 0, @@ -802,7 +825,7 @@ exports[`Same type information 1`] = ` }, }, { - "definitionOffset": 3026, + "definitionOffset": 3072, "name": "TestEitherProperty", "type": { "kind": 2, @@ -822,7 +845,7 @@ exports[`Same type information 1`] = ` }, }, { - "definitionOffset": 3113, + "definitionOffset": 3159, "name": "TestEnumProperty", "type": { "kind": 1, @@ -830,7 +853,7 @@ exports[`Same type information 1`] = ` }, }, { - "definitionOffset": 3197, + "definitionOffset": 3243, "name": "TestRecordProperty", "type": { "kind": 1, @@ -842,7 +865,7 @@ exports[`Same type information 1`] = ` { "asyncMethods": [], "constructor": null, - "definitionOffset": 3396, + "definitionOffset": 3442, "methods": [], "name": "TestEmptyClass", "properties": [], @@ -850,7 +873,7 @@ exports[`Same type information 1`] = ` ], "constants": [ { - "definitionOffset": 125, + "definitionOffset": 167, "name": "StringConstant", "type": { "kind": 0, @@ -858,7 +881,7 @@ exports[`Same type information 1`] = ` }, }, { - "definitionOffset": 284, + "definitionOffset": 326, "name": "IntConstant", "type": { "kind": 0, @@ -866,7 +889,7 @@ exports[`Same type information 1`] = ` }, }, { - "definitionOffset": 422, + "definitionOffset": 464, "name": "UntypedConstant", "type": { "kind": 0, @@ -876,7 +899,11 @@ exports[`Same type information 1`] = ` ], "constructor": null, "definitionOffset": 81, - "events": [], + "events": [ + "event1", + "event2", + "event3", + ], "functions": [ { "arguments": [ @@ -895,7 +922,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 468, + "definitionOffset": 510, "name": "SimpleFunction", "parameters": [], "returnType": { @@ -905,7 +932,7 @@ exports[`Same type information 1`] = ` }, { "arguments": [], - "definitionOffset": 632, + "definitionOffset": 674, "name": "TestUntypedFunction", "parameters": [], "returnType": { @@ -915,7 +942,7 @@ exports[`Same type information 1`] = ` }, { "arguments": [], - "definitionOffset": 776, + "definitionOffset": 818, "name": "TestUnicodeCharacters", "parameters": [], "returnType": { @@ -925,7 +952,7 @@ exports[`Same type information 1`] = ` }, { "arguments": [], - "definitionOffset": 966, + "definitionOffset": 1008, "name": "TestUntypedFunction2", "parameters": [], "returnType": { @@ -935,7 +962,7 @@ exports[`Same type information 1`] = ` }, { "arguments": [], - "definitionOffset": 1130, + "definitionOffset": 1172, "name": "TestUntypedFunction3", "parameters": [], "returnType": { @@ -956,7 +983,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 1296, + "definitionOffset": 1338, "name": "TestArrays", "parameters": [], "returnType": { @@ -1014,7 +1041,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 1455, + "definitionOffset": 1497, "name": "TestDictionaries", "parameters": [], "returnType": { @@ -1104,7 +1131,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 1648, + "definitionOffset": 1694, "name": "TestParametrizedTypes", "parameters": [], "returnType": { @@ -1131,7 +1158,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 1892, + "definitionOffset": 1938, "name": "TestTypeCombinations", "parameters": [], "returnType": { @@ -1168,7 +1195,7 @@ exports[`Same type information 1`] = ` }, { "arguments": [], - "definitionOffset": 2093, + "definitionOffset": 2139, "name": "TestFunctionReturningRecord", "parameters": [], "returnType": { @@ -1178,7 +1205,7 @@ exports[`Same type information 1`] = ` }, { "arguments": [], - "definitionOffset": 2258, + "definitionOffset": 2304, "name": "TestFunctionReturningEnum", "parameters": [], "returnType": { @@ -1196,7 +1223,7 @@ exports[`Same type information 1`] = ` "classes": [], "constants": [], "constructor": null, - "definitionOffset": 3459, + "definitionOffset": 3505, "events": [ "onEvent1", "onEvent2", @@ -1222,7 +1249,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 3505, + "definitionOffset": 3551, "name": "url", }, { @@ -1242,7 +1269,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 3689, + "definitionOffset": 3735, "name": "testRecord", }, { @@ -1262,7 +1289,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 3760, + "definitionOffset": 3806, "name": "testRecord2", }, { @@ -1282,7 +1309,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 3834, + "definitionOffset": 3880, "name": "testRecordClass", }, { @@ -1302,7 +1329,7 @@ exports[`Same type information 1`] = ` }, }, ], - "definitionOffset": 3920, + "definitionOffset": 3966, "name": "testEnum", }, ], diff --git a/packages/expo-ui/CHANGELOG.md b/packages/expo-ui/CHANGELOG.md index 524271b434703a..209b5a8d81161a 100644 --- a/packages/expo-ui/CHANGELOG.md +++ b/packages/expo-ui/CHANGELOG.md @@ -8,6 +8,7 @@ ### ๐ŸŽ‰ New features +- [iOS] Added the SwiftUI `activityBackgroundTint` modifier for setting Live Activity background. ([#46756](https://github.com/expo/expo/pull/46756) by [@jakex7](https://github.com/jakex7)) - [iOS] Added the SwiftUI `imageScale` modifier to scale SF Symbols within a view relative to the surrounding text (`small`, `medium`, `large`). ([#46774](https://github.com/expo/expo/pull/46774) by [@ramonclaudio](https://github.com/ramonclaudio)) - [jetpack-compose] Added `onGloballyPositioned` modifier, which reports a composable's window position and size. ([#46744](https://github.com/expo/expo/pull/46744) by [@nishan](https://github.com/intergalacticspacehighway)) - [iOS] Extended the SwiftUI `onGeometryChange` modifier to also report the view's global position (`x`/`y`) alongside its size. ([#46744](https://github.com/expo/expo/pull/46744) by [@nishan](https://github.com/intergalacticspacehighway)) diff --git a/packages/expo-ui/build/swift-ui/modifiers/index.d.ts b/packages/expo-ui/build/swift-ui/modifiers/index.d.ts index 3c19b5ac29a831..d31b598f58c874 100644 --- a/packages/expo-ui/build/swift-ui/modifiers/index.d.ts +++ b/packages/expo-ui/build/swift-ui/modifiers/index.d.ts @@ -16,7 +16,7 @@ import { onScrollPhaseChange, useScrollGeometryChange } from './scrollObservatio import { id, scrollPosition } from './scrollPosition'; import { symbolEffect } from './symbolEffect'; import type { Color } from './types'; -import { widgetAccentedRenderingMode, widgetURL } from './widgets'; +import { activityBackgroundTint, widgetAccentedRenderingMode, widgetURL } from './widgets'; /** * Sets the spacing between adjacent sections. * @param spacing - The spacing to apply. @@ -1065,7 +1065,7 @@ export declare const resizable: (capInsets?: { * This provides type safety for the modifiers array. * @hidden */ -export type BuiltInModifier = ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType