diff --git a/apps/bare-expo/package.json b/apps/bare-expo/package.json index 2b00375069f9ff..d4363377316cce 100644 --- a/apps/bare-expo/package.json +++ b/apps/bare-expo/package.json @@ -41,9 +41,9 @@ }, "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/dom-webview": "56.0.1", + "@expo/dom-webview": "workspace:*", "@expo/styleguide-base": "^1.0.1", - "@expo/ui": "56.0.1", + "@expo/ui": "workspace:*", "@react-native-async-storage/async-storage": "2.2.0", "@react-native-community/datetimepicker": "8.6.0", "@react-native-community/netinfo": "11.5.2", @@ -56,29 +56,29 @@ "@react-navigation/native-stack": "^7.14.5", "@shopify/flash-list": "2.0.2", "@shopify/react-native-skia": "2.4.18", - "expo": "56.0.0-preview.2", - "expo-app-metrics": "56.0.0", - "expo-background-fetch": "56.0.0", - "expo-brownfield": "56.0.0", - "expo-build-properties": "56.0.0", - "expo-camera": "56.0.0", - "expo-dev-client": "56.0.0", - "expo-dev-menu": "56.0.0", - "expo-font": "56.0.1", - "expo-image": "56.0.1", - "expo-insights": "56.0.0", - "expo-linking": "56.0.0", - "expo-location": "56.0.0", - "expo-navigation-bar": "56.0.0", - "expo-network-addons": "56.0.0", - "expo-notifications": "56.0.0", - "expo-observe": "56.0.0", - "expo-splash-screen": "56.0.1", - "expo-status-bar": "56.0.1", - "expo-tracking-transparency": "56.0.0", - "expo-updates": "56.0.1", - "expo-video": "56.0.0", - "expo-web-browser": "56.0.1", + "expo": "workspace:*", + "expo-app-metrics": "workspace:*", + "expo-background-fetch": "workspace:*", + "expo-brownfield": "workspace:*", + "expo-build-properties": "workspace:*", + "expo-camera": "workspace:*", + "expo-dev-client": "workspace:*", + "expo-dev-menu": "workspace:*", + "expo-font": "workspace:*", + "expo-image": "workspace:*", + "expo-insights": "workspace:*", + "expo-linking": "workspace:*", + "expo-location": "workspace:*", + "expo-navigation-bar": "workspace:*", + "expo-network-addons": "workspace:*", + "expo-notifications": "workspace:*", + "expo-observe": "workspace:*", + "expo-splash-screen": "workspace:*", + "expo-status-bar": "workspace:*", + "expo-tracking-transparency": "workspace:*", + "expo-updates": "workspace:*", + "expo-video": "workspace:*", + "expo-web-browser": "workspace:*", "lottie-react-native": "^7.3.4", "native-component-list": "workspace:*", "react": "19.2.3", @@ -98,11 +98,11 @@ }, "devDependencies": { "@babel/core": "^7.20.0", - "@expo/cli": "56.0.2", + "@expo/cli": "workspace:*", "@expo/spawn-async": "^1.7.2", "@types/react": "~19.2.0", - "babel-preset-expo": "56.0.1", - "expo-module-scripts": "56.0.0", + "babel-preset-expo": "workspace:*", + "expo-module-scripts": "workspace:*", "jest": "^29.3.1" }, "codegenConfig": { diff --git a/apps/brownfield-tester/expo-app/package.json b/apps/brownfield-tester/expo-app/package.json index 7326298be0381c..65294bc7e8f60a 100644 --- a/apps/brownfield-tester/expo-app/package.json +++ b/apps/brownfield-tester/expo-app/package.json @@ -13,21 +13,21 @@ "@react-navigation/bottom-tabs": "^7.15.5", "@react-navigation/elements": "^2.9.10", "@react-navigation/native": "^7.1.33", - "expo": "56.0.0-preview.2", - "expo-brownfield": "56.0.0", - "expo-constants": "56.0.1", - "expo-device": "56.0.1", - "expo-dev-menu": "56.0.0", - "expo-font": "56.0.1", - "expo-glass-effect": "56.0.1", - "expo-image": "56.0.1", - "expo-linking": "56.0.0", - "expo-router": "56.0.1", - "expo-splash-screen": "56.0.1", - "expo-status-bar": "56.0.1", - "expo-symbols": "56.0.1", - "expo-system-ui": "56.0.1", - "expo-web-browser": "56.0.1", + "expo": "workspace:*", + "expo-brownfield": "workspace:*", + "expo-constants": "workspace:*", + "expo-device": "workspace:*", + "expo-dev-menu": "workspace:*", + "expo-font": "workspace:*", + "expo-glass-effect": "workspace:*", + "expo-image": "workspace:*", + "expo-linking": "workspace:*", + "expo-router": "workspace:*", + "expo-splash-screen": "workspace:*", + "expo-status-bar": "workspace:*", + "expo-symbols": "workspace:*", + "expo-system-ui": "workspace:*", + "expo-web-browser": "workspace:*", "react": "19.2.3", "react-dom": "19.2.3", "react-native": "0.85.2", diff --git a/apps/brownfield-tester/package.json b/apps/brownfield-tester/package.json index 9da6f457d4a2ba..53465feff9bd83 100644 --- a/apps/brownfield-tester/package.json +++ b/apps/brownfield-tester/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "dependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "0.85.2", "react": "19.2.3", "react-native-reanimated": "4.3.0", diff --git a/apps/eas-expo-go/package.json b/apps/eas-expo-go/package.json index a29ae20704ebac..79665aaa5df19a 100644 --- a/apps/eas-expo-go/package.json +++ b/apps/eas-expo-go/package.json @@ -4,7 +4,7 @@ "main": "index.js", "license": "MIT", "dependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" }, "scripts": { "eas-build-pre-install": "./scripts/eas-build-pre-install.sh", diff --git a/apps/expo-go/package.json b/apps/expo-go/package.json index 2ccd67cb36784e..f288c1c883c56a 100644 --- a/apps/expo-go/package.json +++ b/apps/expo-go/package.json @@ -7,7 +7,7 @@ "author": "Expo", "license": "MIT", "dependencies": { - "@expo/ui": "56.0.1", + "@expo/ui": "workspace:*", "@expo/vector-icons": "^15.0.2", "@react-native-async-storage/async-storage": "2.2.0", "@react-native-community/datetimepicker": "^9.1.0", @@ -18,62 +18,62 @@ "@react-native-segmented-control/segmented-control": "2.5.7", "@shopify/react-native-skia": "2.6.2", "@stripe/stripe-react-native": "0.64.0", - "expo": "56.0.0-preview.2", - "expo-application": "56.0.0", - "expo-asset": "56.0.1", - "expo-audio": "56.0.0", - "expo-background-fetch": "56.0.0", - "expo-background-task": "56.0.0", - "expo-battery": "56.0.0", - "expo-blob": "56.0.0", - "expo-blur": "56.0.0", - "expo-brightness": "56.0.0", - "expo-calendar": "56.0.0", - "expo-camera": "56.0.0", - "expo-cellular": "56.0.0", - "expo-clipboard": "56.0.0", - "expo-constants": "56.0.1", - "expo-contacts": "56.0.0", - "expo-crypto": "56.0.0", - "expo-dev-menu": "56.0.0", - "expo-device": "56.0.1", - "expo-document-picker": "56.0.0", - "expo-font": "56.0.1", - "expo-gl": "56.0.0", - "expo-haptics": "56.0.0", - "expo-image-loader": "56.0.0", - "expo-image-manipulator": "56.0.0", - "expo-image-picker": "56.0.0", - "expo-intent-launcher": "56.0.0", - "expo-linear-gradient": "56.0.0", - "expo-linking": "56.0.0", - "expo-local-authentication": "56.0.0", - "expo-localization": "56.0.0", - "expo-location": "56.0.0", - "expo-mail-composer": "56.0.0", - "expo-media-library": "56.0.0", - "expo-navigation-bar": "56.0.0", - "expo-network": "56.0.0", - "expo-notifications": "56.0.0", - "expo-print": "56.0.0", - "expo-router": "56.0.1", - "expo-screen-capture": "56.0.0", - "expo-screen-orientation": "56.0.0", - "expo-secure-store": "56.0.0", - "expo-sensors": "56.0.0", - "expo-sharing": "56.0.0", - "expo-sms": "56.0.0", - "expo-speech": "56.0.0", - "expo-splash-screen": "56.0.1", - "expo-sqlite": "56.0.0", - "expo-store-review": "56.0.0", - "expo-system-ui": "56.0.1", - "expo-task-manager": "56.0.0", - "expo-tracking-transparency": "56.0.0", - "expo-updates": "56.0.1", - "expo-video": "56.0.0", - "expo-video-thumbnails": "56.0.0", - "expo-web-browser": "56.0.1", + "expo": "workspace:*", + "expo-application": "workspace:*", + "expo-asset": "workspace:*", + "expo-audio": "workspace:*", + "expo-background-fetch": "workspace:*", + "expo-background-task": "workspace:*", + "expo-battery": "workspace:*", + "expo-blob": "workspace:*", + "expo-blur": "workspace:*", + "expo-brightness": "workspace:*", + "expo-calendar": "workspace:*", + "expo-camera": "workspace:*", + "expo-cellular": "workspace:*", + "expo-clipboard": "workspace:*", + "expo-constants": "workspace:*", + "expo-contacts": "workspace:*", + "expo-crypto": "workspace:*", + "expo-dev-menu": "workspace:*", + "expo-device": "workspace:*", + "expo-document-picker": "workspace:*", + "expo-font": "workspace:*", + "expo-gl": "workspace:*", + "expo-haptics": "workspace:*", + "expo-image-loader": "workspace:*", + "expo-image-manipulator": "workspace:*", + "expo-image-picker": "workspace:*", + "expo-intent-launcher": "workspace:*", + "expo-linear-gradient": "workspace:*", + "expo-linking": "workspace:*", + "expo-local-authentication": "workspace:*", + "expo-localization": "workspace:*", + "expo-location": "workspace:*", + "expo-mail-composer": "workspace:*", + "expo-media-library": "workspace:*", + "expo-navigation-bar": "workspace:*", + "expo-network": "workspace:*", + "expo-notifications": "workspace:*", + "expo-print": "workspace:*", + "expo-router": "workspace:*", + "expo-screen-capture": "workspace:*", + "expo-screen-orientation": "workspace:*", + "expo-secure-store": "workspace:*", + "expo-sensors": "workspace:*", + "expo-sharing": "workspace:*", + "expo-sms": "workspace:*", + "expo-speech": "workspace:*", + "expo-splash-screen": "workspace:*", + "expo-sqlite": "workspace:*", + "expo-store-review": "workspace:*", + "expo-system-ui": "workspace:*", + "expo-task-manager": "workspace:*", + "expo-tracking-transparency": "workspace:*", + "expo-updates": "workspace:*", + "expo-video": "workspace:*", + "expo-video-thumbnails": "workspace:*", + "expo-web-browser": "workspace:*", "lottie-react-native": "^7.3.4", "react": "19.2.3", "react-native": "0.85.2", diff --git a/apps/jest-expo-mock-generator/package.json b/apps/jest-expo-mock-generator/package.json index cb2ccd7617105b..42360bd32fccbd 100644 --- a/apps/jest-expo-mock-generator/package.json +++ b/apps/jest-expo-mock-generator/package.json @@ -6,8 +6,8 @@ "main": "index.js", "dependencies": { "@expo/mux": "^1.0.7", - "expo": "56.0.0-preview.2", - "expo-clipboard": "56.0.0", + "expo": "workspace:*", + "expo-clipboard": "workspace:*", "react": "19.2.3", "react-native": "0.85.2" } diff --git a/apps/minimal-tester/package.json b/apps/minimal-tester/package.json index 57114268159c56..bd09464a17ac04 100644 --- a/apps/minimal-tester/package.json +++ b/apps/minimal-tester/package.json @@ -10,19 +10,19 @@ "eject": "expo eject" }, "dependencies": { - "expo": "56.0.0-preview.2", - "expo-apple-authentication": "56.0.0", - "expo-blur": "56.0.0", - "expo-brownfield": "56.0.0", - "expo-build-properties": "56.0.0", - "expo-camera": "56.0.0", - "expo-dev-client": "56.0.0", - "expo-image": "56.0.1", - "expo-linear-gradient": "56.0.0", - "expo-splash-screen": "56.0.1", - "expo-status-bar": "56.0.1", - "expo-updates": "56.0.1", - "expo-video": "56.0.0", + "expo": "workspace:*", + "expo-apple-authentication": "workspace:*", + "expo-blur": "workspace:*", + "expo-brownfield": "workspace:*", + "expo-build-properties": "workspace:*", + "expo-camera": "workspace:*", + "expo-dev-client": "workspace:*", + "expo-image": "workspace:*", + "expo-linear-gradient": "workspace:*", + "expo-splash-screen": "workspace:*", + "expo-status-bar": "workspace:*", + "expo-updates": "workspace:*", + "expo-video": "workspace:*", "react": "19.2.3", "react-dom": "19.2.3", "react-native": "0.85.2", diff --git a/apps/native-component-list/package.json b/apps/native-component-list/package.json index 4251b928aa6f13..335f030429c8dc 100644 --- a/apps/native-component-list/package.json +++ b/apps/native-component-list/package.json @@ -33,12 +33,12 @@ }, "dependencies": { "@expo-google-fonts/inter": "^0.2.3", - "@expo/app-integrity": "56.0.0", - "@expo/html-elements": "56.0.0", + "@expo/app-integrity": "workspace:*", + "@expo/html-elements": "workspace:*", "@expo/material-symbols": "~0.1.1", "@expo/react-native-action-sheet": "^4.1.1", "@expo/styleguide-base": "^1.0.1", - "@expo/ui": "56.0.1", + "@expo/ui": "workspace:*", "@expo/vector-icons": "^15.0.2", "@lottiefiles/dotlottie-react": "^0.10.1", "@lottiefiles/react-lottie-player": "^3.5.4", @@ -60,79 +60,79 @@ "canvaskit-wasm": "^0.40.0", "date-format": "^2.0.0", "deep-object-diff": "^1.1.9", - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "expo-2d-context": "^0.0.4", - "expo-age-range": "56.0.0", - "expo-apple-authentication": "56.0.0", - "expo-application": "56.0.0", - "expo-asset": "56.0.1", - "expo-audio": "56.0.0", - "expo-auth-session": "56.0.0", - "expo-background-fetch": "56.0.0", - "expo-background-task": "56.0.0", - "expo-battery": "56.0.0", - "expo-blob": "56.0.0", - "expo-blur": "56.0.0", - "expo-brightness": "56.0.0", - "expo-calendar": "56.0.0", - "expo-camera": "56.0.0", - "expo-cellular": "56.0.0", - "expo-checkbox": "56.0.0", - "expo-clipboard": "56.0.0", - "expo-constants": "56.0.1", - "expo-contacts": "56.0.0", - "expo-crypto": "56.0.0", - "expo-device": "56.0.1", - "expo-document-picker": "56.0.0", - "expo-file-system": "56.0.1", - "expo-font": "56.0.1", - "expo-gl": "56.0.0", - "expo-glass-effect": "56.0.1", - "expo-haptics": "56.0.0", - "expo-image": "56.0.1", - "expo-image-loader": "56.0.0", - "expo-image-manipulator": "56.0.0", - "expo-image-picker": "56.0.0", - "expo-intent-launcher": "56.0.0", - "expo-keep-awake": "56.0.1", - "expo-linear-gradient": "56.0.0", - "expo-linking": "56.0.0", - "expo-live-photo": "56.0.0", - "expo-local-authentication": "56.0.0", - "expo-localization": "56.0.0", - "expo-location": "56.0.0", - "expo-mail-composer": "56.0.0", - "expo-maps": "56.0.0", - "expo-media-library": "56.0.0", - "expo-mesh-gradient": "56.0.0", - "expo-modules-test-core": "56.0.0", - "expo-navigation-bar": "56.0.0", - "expo-network": "56.0.0", - "expo-notifications": "56.0.0", - "expo-print": "56.0.0", - "expo-processing": "56.0.0", + "expo-age-range": "workspace:*", + "expo-apple-authentication": "workspace:*", + "expo-application": "workspace:*", + "expo-asset": "workspace:*", + "expo-audio": "workspace:*", + "expo-auth-session": "workspace:*", + "expo-background-fetch": "workspace:*", + "expo-background-task": "workspace:*", + "expo-battery": "workspace:*", + "expo-blob": "workspace:*", + "expo-blur": "workspace:*", + "expo-brightness": "workspace:*", + "expo-calendar": "workspace:*", + "expo-camera": "workspace:*", + "expo-cellular": "workspace:*", + "expo-checkbox": "workspace:*", + "expo-clipboard": "workspace:*", + "expo-constants": "workspace:*", + "expo-contacts": "workspace:*", + "expo-crypto": "workspace:*", + "expo-device": "workspace:*", + "expo-document-picker": "workspace:*", + "expo-file-system": "workspace:*", + "expo-font": "workspace:*", + "expo-gl": "workspace:*", + "expo-glass-effect": "workspace:*", + "expo-haptics": "workspace:*", + "expo-image": "workspace:*", + "expo-image-loader": "workspace:*", + "expo-image-manipulator": "workspace:*", + "expo-image-picker": "workspace:*", + "expo-intent-launcher": "workspace:*", + "expo-keep-awake": "workspace:*", + "expo-linear-gradient": "workspace:*", + "expo-linking": "workspace:*", + "expo-live-photo": "workspace:*", + "expo-local-authentication": "workspace:*", + "expo-localization": "workspace:*", + "expo-location": "workspace:*", + "expo-mail-composer": "workspace:*", + "expo-maps": "workspace:*", + "expo-media-library": "workspace:*", + "expo-mesh-gradient": "workspace:*", + "expo-modules-test-core": "workspace:*", + "expo-navigation-bar": "workspace:*", + "expo-network": "workspace:*", + "expo-notifications": "workspace:*", + "expo-print": "workspace:*", + "expo-processing": "workspace:*", "expo-progress": "^0.0.2", - "expo-screen-capture": "56.0.0", - "expo-screen-orientation": "56.0.0", - "expo-secure-store": "56.0.0", - "expo-sensors": "56.0.0", - "expo-sharing": "56.0.0", - "expo-sms": "56.0.0", - "expo-speech": "56.0.0", - "expo-splash-screen": "56.0.1", - "expo-sqlite": "56.0.0", - "expo-standard-web-crypto": "56.0.0", - "expo-status-bar": "56.0.1", - "expo-store-review": "56.0.0", - "expo-symbols": "56.0.1", - "expo-system-ui": "56.0.1", - "expo-task-manager": "56.0.0", + "expo-screen-capture": "workspace:*", + "expo-screen-orientation": "workspace:*", + "expo-secure-store": "workspace:*", + "expo-sensors": "workspace:*", + "expo-sharing": "workspace:*", + "expo-sms": "workspace:*", + "expo-speech": "workspace:*", + "expo-splash-screen": "workspace:*", + "expo-sqlite": "workspace:*", + "expo-standard-web-crypto": "workspace:*", + "expo-status-bar": "workspace:*", + "expo-store-review": "workspace:*", + "expo-symbols": "workspace:*", + "expo-system-ui": "workspace:*", + "expo-task-manager": "workspace:*", "expo-three": "7.0.1", - "expo-tracking-transparency": "56.0.0", - "expo-updates": "56.0.1", - "expo-video": "56.0.0", - "expo-video-thumbnails": "56.0.0", - "expo-web-browser": "56.0.1", + "expo-tracking-transparency": "workspace:*", + "expo-updates": "workspace:*", + "expo-video": "workspace:*", + "expo-video-thumbnails": "workspace:*", + "expo-web-browser": "workspace:*", "fbemitter": "^2.1.1", "fuse.js": "^6.4.6", "gl-mat4": "^1.1.4", @@ -175,7 +175,7 @@ "@types/react": "~19.2.0", "@types/three": "^0.137.0", "babel-jest": "^29.2.1", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "jest": "^29.2.1", "react-test-renderer": "19.2.3" } diff --git a/apps/native-component-list/src/screens/UI/DropdownMenuScreen.android.tsx b/apps/native-component-list/src/screens/UI/DropdownMenuScreen.android.tsx index 426eefd68cd999..808756e2f7902b 100644 --- a/apps/native-component-list/src/screens/UI/DropdownMenuScreen.android.tsx +++ b/apps/native-component-list/src/screens/UI/DropdownMenuScreen.android.tsx @@ -14,7 +14,7 @@ import { } from '@expo/ui/jetpack-compose'; import { background } from '@expo/ui/jetpack-compose/modifiers'; import * as React from 'react'; -import { View, Text } from 'react-native'; +import { View, Text, Alert } from 'react-native'; import { Section } from '../../components/Page'; @@ -68,6 +68,11 @@ export default function DropdownMenuScreen() { { setThemeMenuExpanded(false); setSelectedTheme('Light'); @@ -118,6 +123,31 @@ export default function DropdownMenuScreen() { )} + { + Alert.alert('This should not happen'); + }}> + + Disabled + + + + + {selectedTheme === 'Auto' && ( + + + + )} + diff --git a/apps/native-component-list/src/screens/UI/HorizontalFloatingToolbarScreen.android.tsx b/apps/native-component-list/src/screens/UI/HorizontalFloatingToolbarScreen.android.tsx index 6b0fe67302ce2a..15b368d133a555 100644 --- a/apps/native-component-list/src/screens/UI/HorizontalFloatingToolbarScreen.android.tsx +++ b/apps/native-component-list/src/screens/UI/HorizontalFloatingToolbarScreen.android.tsx @@ -41,9 +41,9 @@ export default function HorizontalFloatingToolbarScreen() { variant="vibrant" colors={{ toolbarContainerColor: '#1B5E20', - // toolbarContentColor: '#FFFFFF', + toolbarContentColor: '#AAA', fabContainerColor: '#FFB300', - // fabContentColor: '#000000', + fabContentColor: '#0000FF', }} modifiers={[align('bottomCenter'), offset(0, -16)]}> ) — a horizontally scrolling pager that snaps to individual pages. + +`HorizontalPager` does not impose its own height — give it one with the [`height`](modifiers/#heightheight) modifier or place it inside a parent with a finite height. + +## Installation + + + +## Usage + +### Uncontrolled + +The pager owns its scroll position natively. Use `initialPage` to pick the starting page, and listen for changes with `onCurrentPageChange` (fires mid-swipe as the snap target flips) or `onSettledPageChange` (fires only after the swipe settles). + +```tsx UncontrolledPagerExample.tsx +import { Box, Column, Host, HorizontalPager, Text } from '@expo/ui/jetpack-compose'; +import { background, fillMaxSize, fillMaxWidth, height } from '@expo/ui/jetpack-compose/modifiers'; +import { useState } from 'react'; + +export default function UncontrolledPagerExample() { + const [currentPage, setCurrentPage] = useState(1); + const [settledPage, setSettledPage] = useState(1); + + return ( + + + + currentPage: {currentPage} · settledPage: {settledPage} + + + + + + + + + ); +} + +function Page({ label, color }: { label: string; color: string }) { + return ( + + + {label} + + + ); +} +``` + +### Programmatic navigation + +Attach a `ref` and call `animateScrollToPage` or `scrollToPage` on it. These mirror Compose's `PagerState.animateScrollToPage` and `PagerState.scrollToPage`. + +```tsx ProgrammaticPagerExample.tsx +import { + Box, + Button, + Column, + Host, + HorizontalPager, + type HorizontalPagerHandle, + Row, + Text, +} from '@expo/ui/jetpack-compose'; +import { background, fillMaxSize, fillMaxWidth, height } from '@expo/ui/jetpack-compose/modifiers'; +import { useRef, useState } from 'react'; + +const PAGE_COUNT = 5; + +export default function ProgrammaticPagerExample() { + const pagerRef = useRef(null); + const [page, setPage] = useState(0); + + return ( + + + + Page {page + 1} / {PAGE_COUNT} + + + {Array.from({ length: PAGE_COUNT }).map((_, i) => ( + + ))} + + + + + + + + + ); +} + +const COLORS = ['#6200EE', '#03DAC5', '#FF5722', '#4CAF50', '#2196F3']; + +function Page({ label, color }: { label: string; color: string }) { + return ( + + + {label} + + + ); +} +``` + +### Page spacing and content padding + +Use `pageSpacing` to add a gap between pages (visible during swipe) and `contentPadding` to inset the pager so neighboring pages peek at rest. + +```tsx PagerLayoutExample.tsx +import { Box, Host, HorizontalPager, Text } from '@expo/ui/jetpack-compose'; +import { background, fillMaxSize, fillMaxWidth, height } from '@expo/ui/jetpack-compose/modifiers'; + +export default function PagerLayoutExample() { + return ( + + + + + + + + ); +} + +function Page({ label, color }: { label: string; color: string }) { + return ( + + + {label} + + + ); +} +``` + +## API + +```tsx +import { HorizontalPager } from '@expo/ui/jetpack-compose'; +``` + + diff --git a/docs/public/static/data/unversioned/expo-ui/jetpack-compose/horizontalpager.json b/docs/public/static/data/unversioned/expo-ui/jetpack-compose/horizontalpager.json new file mode 100644 index 00000000000000..d3fe23da42362f --- /dev/null +++ b/docs/public/static/data/unversioned/expo-ui/jetpack-compose/horizontalpager.json @@ -0,0 +1 @@ +{"schemaVersion":"2.0","name":"expo-ui/jetpack-compose/horizontalpager","variant":"project","kind":1,"children":[{"name":"HorizontalPagerHandle","variant":"declaration","kind":2097152,"children":[{"name":"animateScrollToPage","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Mirrors Compose's "},{"kind":"code","text":"`PagerState.animateScrollToPage`"},{"kind":"text","text":". Resolves when the\nanimation completes."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"page","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}},{"name":"scrollToPage","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Mirrors Compose's "},{"kind":"code","text":"`PagerState.scrollToPage`"},{"kind":"text","text":". Jumps without animation."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"page","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}}]},{"name":"HorizontalPagerProps","variant":"declaration","kind":2097152,"children":[{"name":"beyondViewportPageCount","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Number of pages to compose and keep beyond the visible viewport."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"children","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Children to render as pages."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"contentPadding","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Padding for pager content (dp or per-side object)."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"reference","name":"PaddingValuesRecord","package":"@expo/ui"}]}},{"name":"initialPage","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Page to mount on. Mirrors "},{"kind":"code","text":"`rememberPagerState(initialPage = …)`"},{"kind":"text","text":". Subsequent\nchanges have no effect — use the ref methods to navigate after mount."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"modifiers","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Modifiers for the component."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/types.ts","qualifiedName":"ModifierConfig"},"name":"ModifierConfig","package":"@expo/ui"}}},{"name":"onCurrentPageChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Fires when Compose's "},{"kind":"code","text":"`PagerState.currentPage`"},{"kind":"text","text":" changes — i.e. when the page\nclosest to the snap position flips, including mid-swipe as the user\ncrosses between pages."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"page","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"onSettledPageChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Fires when Compose's "},{"kind":"code","text":"`PagerState.settledPage`"},{"kind":"text","text":" changes — i.e. after a\nswipe or programmatic scroll has fully settled."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"page","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"pageSpacing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Spacing between pages in dp."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"ref","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Imperative handle for programmatic navigation. Mirrors the methods on\nCompose's "},{"kind":"code","text":"`PagerState`"},{"kind":"text","text":"."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.Ref"},"typeArguments":[{"type":"reference","name":"HorizontalPagerHandle","package":"@expo/ui"}],"name":"Ref","package":"@types/react","qualifiedName":"React.Ref"}},{"name":"reverseLayout","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to reverse the layout direction."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"userScrollEnabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the user can scroll the pager by swiping."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"PaddingValuesRecord","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Per-side padding values in dp for the content."}]},"children":[{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"end","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"start","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":"HorizontalPager","variant":"declaration","kind":64,"signatures":[{"name":"HorizontalPager","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A horizontally scrolling pager that snaps to individual pages,\nmatching Compose's "},{"kind":"code","text":"`HorizontalPager`"},{"kind":"text","text":"."}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"HorizontalPagerProps","package":"@expo/ui"}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}],"packageName":"@expo/ui"} \ No newline at end of file diff --git a/packages/@expo/cli/package.json b/packages/@expo/cli/package.json index 4f5712b4b79c92..c453c1bbdc47e0 100644 --- a/packages/@expo/cli/package.json +++ b/packages/@expo/cli/package.json @@ -50,24 +50,24 @@ "homepage": "https://github.com/expo/expo/tree/main/packages/@expo/cli", "dependencies": { "@expo/code-signing-certificates": "^0.0.6", - "@expo/config": "56.0.0", - "@expo/config-plugins": "56.0.0", + "@expo/config": "workspace:~56.0.0", + "@expo/config-plugins": "workspace:~56.0.0", "@expo/devcert": "^1.2.1", - "@expo/env": "2.2.0", - "@expo/image-utils": "0.9.0", - "@expo/inline-modules": "0.0.2", - "@expo/json-file": "10.1.0", - "@expo/log-box": "56.0.1", + "@expo/env": "workspace:~2.2.0", + "@expo/image-utils": "workspace:^0.9.0", + "@expo/inline-modules": "workspace:0.0.2", + "@expo/json-file": "workspace:^10.1.0", + "@expo/log-box": "workspace:56.0.1", "@expo/metro": "~56.0.0", - "@expo/metro-config": "56.0.1", - "@expo/metro-file-map": "56.0.0-0", - "@expo/osascript": "2.5.0", - "@expo/package-manager": "1.11.0", - "@expo/plist": "0.6.0", - "@expo/prebuild-config": "56.0.0", - "@expo/require-utils": "56.0.0", - "@expo/router-server": "56.0.1", - "@expo/schema-utils": "56.0.0", + "@expo/metro-config": "workspace:~56.0.1", + "@expo/metro-file-map": "workspace:56.0.0-0", + "@expo/osascript": "workspace:^2.5.0", + "@expo/package-manager": "workspace:^1.11.0", + "@expo/plist": "workspace:^0.6.0", + "@expo/prebuild-config": "workspace:^56.0.0", + "@expo/require-utils": "workspace:^56.0.0", + "@expo/router-server": "workspace:^56.0.1", + "@expo/schema-utils": "workspace:^56.0.0", "@expo/spawn-async": "^1.7.2", "@expo/ws-tunnel": "^1.0.1", "@expo/xcpretty": "^4.4.0", @@ -83,7 +83,7 @@ "connect": "^3.7.0", "debug": "^4.3.4", "dnssd-advertise": "^1.1.4", - "expo-server": "56.0.0", + "expo-server": "workspace:^56.0.0", "fetch-nodeshim": "^0.4.10", "getenv": "^2.0.0", "glob": "^13.0.0", @@ -115,8 +115,8 @@ ] }, "peerDependencies": { - "expo": "56.0.0-preview.2", - "expo-router": "56.0.1", + "expo": "workspace:*", + "expo-router": "workspace:*", "react-native": "*" }, "peerDependenciesMeta": { @@ -128,7 +128,7 @@ } }, "devDependencies": { - "@expo/fingerprint": "0.17.1", + "@expo/fingerprint": "workspace:*", "@expo/mcp-tunnel": "~0.2.3", "@expo/ngrok": "^4.1.3", "@jest/globals": "^29.7.0", @@ -162,8 +162,8 @@ "devtools-protocol": "^0.0.1113120", "expect": "^29.7.0", "expo-atlas": "^0.4.1", - "expo-module-scripts": "56.0.0", - "expo-modules-autolinking": "56.0.0", + "expo-module-scripts": "workspace:*", + "expo-modules-autolinking": "workspace:*", "find-process": "^1.4.7", "jest-matcher-utils": "^29.7.0", "klaw-sync": "^6.0.0", diff --git a/packages/@expo/config-plugins/package.json b/packages/@expo/config-plugins/package.json index 2ef6fc0ff14202..b9ca0145bb0848 100644 --- a/packages/@expo/config-plugins/package.json +++ b/packages/@expo/config-plugins/package.json @@ -54,9 +54,9 @@ "paths" ], "dependencies": { - "@expo/config-types": "56.0.0", - "@expo/json-file": "10.1.0", - "@expo/plist": "0.6.0", + "@expo/config-types": "workspace:^56.0.0", + "@expo/json-file": "workspace:~10.1.0", + "@expo/plist": "workspace:^0.6.0", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", @@ -74,7 +74,7 @@ "@types/getenv": "^1.0.0", "@types/semver": "^7.7.0", "@types/xml2js": "~0.4.11", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "publishConfig": { "access": "public" diff --git a/packages/@expo/config-types/package.json b/packages/@expo/config-types/package.json index 0c4e80a02bcde4..674fb74c655db7 100644 --- a/packages/@expo/config-types/package.json +++ b/packages/@expo/config-types/package.json @@ -38,7 +38,7 @@ "devDependencies": { "chalk": "^4.1.2", "commander": "^12.1.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "json-schema-to-typescript": "^15.0.0", "semver": "^7.7.4" }, diff --git a/packages/@expo/config/package.json b/packages/@expo/config/package.json index f09e9e0e01cdd8..83c1492f7a5df2 100644 --- a/packages/@expo/config/package.json +++ b/packages/@expo/config/package.json @@ -32,10 +32,10 @@ "paths" ], "dependencies": { - "@expo/config-plugins": "56.0.0", - "@expo/config-types": "56.0.0", - "@expo/json-file": "10.1.0", - "@expo/require-utils": "56.0.0", + "@expo/config-plugins": "workspace:~56.0.0", + "@expo/config-types": "workspace:^56.0.0", + "@expo/json-file": "workspace:^10.1.0", + "@expo/require-utils": "workspace:^56.0.0", "deepmerge": "^4.3.1", "getenv": "^2.0.0", "glob": "^13.0.0", @@ -48,7 +48,7 @@ "@types/babel__code-frame": "^7.27.0", "@types/getenv": "^1.0.0", "@types/semver": "^7.5.8", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "publishConfig": { "access": "public" diff --git a/packages/@expo/devtools/package.json b/packages/@expo/devtools/package.json index 7fcb1ebed38d29..0c5fcd8ecf54f0 100644 --- a/packages/@expo/devtools/package.json +++ b/packages/@expo/devtools/package.json @@ -47,7 +47,7 @@ "devDependencies": { "@types/node": "^22.14.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "ws": "^8.18.0" }, "peerDependencies": { diff --git a/packages/@expo/dom-webview/package.json b/packages/@expo/dom-webview/package.json index f7e0d343406f62..e3ff26cb5d651e 100644 --- a/packages/@expo/dom-webview/package.json +++ b/packages/@expo/dom-webview/package.json @@ -37,10 +37,10 @@ "dependencies": {}, "devDependencies": { "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/@expo/env/package.json b/packages/@expo/env/package.json index 0303beec821afb..ebb4ab556c58c9 100644 --- a/packages/@expo/env/package.json +++ b/packages/@expo/env/package.json @@ -37,7 +37,7 @@ "@babel/cli": "^7.23.4", "@types/debug": "^4.1.7", "@types/getenv": "^1.0.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "publishConfig": { "access": "public" diff --git a/packages/@expo/fingerprint/package.json b/packages/@expo/fingerprint/package.json index f390ca24a1ca48..528e2d4a92a08d 100644 --- a/packages/@expo/fingerprint/package.json +++ b/packages/@expo/fingerprint/package.json @@ -43,7 +43,7 @@ "license": "MIT", "homepage": "https://github.com/expo/expo/tree/main/packages/@expo/fingerprint#readme", "dependencies": { - "@expo/env": "2.2.0", + "@expo/env": "workspace:^2.2.0", "@expo/spawn-async": "^1.7.2", "arg": "^5.0.2", "chalk": "^4.1.2", @@ -60,9 +60,9 @@ "@types/getenv": "^1.0.0", "@types/semver": "^7.5.8", "@types/node": "^22.14.0", - "expo": "56.0.0-preview.2", - "expo-module-scripts": "56.0.0", - "expo-splash-screen": "56.0.1", + "expo": "workspace:*", + "expo-module-scripts": "workspace:*", + "expo-splash-screen": "workspace:*", "require-from-string": "^2.0.2", "temp-dir": "^2.0.0" } diff --git a/packages/@expo/image-utils/package.json b/packages/@expo/image-utils/package.json index a41b248fea2564..9e8f787d735444 100644 --- a/packages/@expo/image-utils/package.json +++ b/packages/@expo/image-utils/package.json @@ -32,7 +32,7 @@ ], "dependencies": { "@expo/spawn-async": "^1.7.2", - "@expo/require-utils": "56.0.0", + "@expo/require-utils": "workspace:^56.0.0", "chalk": "^4.0.0", "getenv": "^2.0.0", "jimp-compact": "0.16.1", @@ -42,7 +42,7 @@ "devDependencies": { "@types/getenv": "^1.0.0", "@types/semver": "^7.0.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "sharp": "~0.34.2", "sharp-cli": "^5.2.0" }, diff --git a/packages/@expo/inline-modules/package.json b/packages/@expo/inline-modules/package.json index 78cc2133e33218..d93700f53b64a2 100644 --- a/packages/@expo/inline-modules/package.json +++ b/packages/@expo/inline-modules/package.json @@ -30,11 +30,11 @@ "url": "https://github.com/expo/expo/issues" }, "dependencies": { - "@expo/config-plugins": "56.0.0" + "@expo/config-plugins": "workspace:~56.0.0" }, "devDependencies": { "@types/jest": "^29.2.1", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" } } diff --git a/packages/@expo/json-file/package.json b/packages/@expo/json-file/package.json index f25f230a7d19f0..043ec7a4ded33d 100644 --- a/packages/@expo/json-file/package.json +++ b/packages/@expo/json-file/package.json @@ -36,7 +36,7 @@ "@types/babel__code-frame": "^7.27.0", "@types/json5": "^2.2.0", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "memfs": "^3.2.0" }, "publishConfig": { diff --git a/packages/@expo/local-build-cache-provider/package.json b/packages/@expo/local-build-cache-provider/package.json index 95ea8b36cf65b8..1cea7feac48cdb 100644 --- a/packages/@expo/local-build-cache-provider/package.json +++ b/packages/@expo/local-build-cache-provider/package.json @@ -39,12 +39,12 @@ "build" ], "dependencies": { - "@expo/config": "56.0.0", + "@expo/config": "workspace:~56.0.0", "chalk": "^4.1.2" }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "memfs": "^3.2.0" } } diff --git a/packages/@expo/log-box/package.json b/packages/@expo/log-box/package.json index 8cbe76af371694..a1efe6c949b9d3 100644 --- a/packages/@expo/log-box/package.json +++ b/packages/@expo/log-box/package.json @@ -20,7 +20,7 @@ "export:web": "expo export -p web --no-minify" }, "dependencies": { - "@expo/dom-webview": "56.0.1", + "@expo/dom-webview": "workspace:^56.0.1", "anser": "^1.4.9", "stacktrace-parser": "^0.1.10" }, @@ -28,7 +28,7 @@ "@expo/spawn-async": "^1.7.2", "@types/react": "~19.2.0", "@types/react-dom": "^19.1.7", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "glob": "^13.0.0", "npm-run-all2": "^8.0.4", "react": "19.2.3", @@ -39,8 +39,8 @@ "typescript-plugin-css-modules": "^5.2.0" }, "peerDependencies": { - "@expo/dom-webview": "56.0.1", - "expo": "56.0.0-preview.2", + "@expo/dom-webview": "workspace:^56.0.1", + "expo": "workspace:*", "react": "*", "react-native": "*" }, diff --git a/packages/@expo/metro-config/package.json b/packages/@expo/metro-config/package.json index 88df6a42eb36d7..277c6d54e9a4ae 100644 --- a/packages/@expo/metro-config/package.json +++ b/packages/@expo/metro-config/package.json @@ -65,9 +65,9 @@ "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", - "@expo/config": "56.0.0", - "@expo/env": "2.2.0", - "@expo/json-file": "10.1.0", + "@expo/config": "workspace:~56.0.0", + "@expo/env": "workspace:~2.2.0", + "@expo/json-file": "workspace:~10.1.0", "@expo/metro": "~56.0.0", "@expo/spawn-async": "^1.7.2", "browserslist": "^4.25.0", @@ -83,7 +83,7 @@ "resolve-from": "^5.0.0" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" }, "peerDependenciesMeta": { "expo": { @@ -98,7 +98,7 @@ "@types/getenv": "^1.0.0", "@types/picomatch": "^4.0.2", "dedent": "^1.5.3", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "metro-minify-terser": "^0.84.2", "sass": "^1.60.0" }, diff --git a/packages/@expo/metro-file-map/package.json b/packages/@expo/metro-file-map/package.json index bc629b0e065295..12917ea43cba56 100644 --- a/packages/@expo/metro-file-map/package.json +++ b/packages/@expo/metro-file-map/package.json @@ -45,7 +45,7 @@ "@types/invariant": "^2.2.37", "@types/micromatch": "^4.0.10", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "memfs": "^3.6.0" }, "publishConfig": { diff --git a/packages/@expo/metro-runtime/package.json b/packages/@expo/metro-runtime/package.json index c9bf43c74749ef..833c9e90878055 100644 --- a/packages/@expo/metro-runtime/package.json +++ b/packages/@expo/metro-runtime/package.json @@ -38,7 +38,7 @@ "url": "https://github.com/expo/expo.git" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-dom": "*", "react-native": "*" @@ -49,7 +49,7 @@ } }, "dependencies": { - "@expo/log-box": "56.0.1", + "@expo/log-box": "workspace:56.0.1", "anser": "^1.4.9", "stacktrace-parser": "^0.1.10", "pretty-format": "^29.7.0", @@ -57,8 +57,8 @@ }, "devDependencies": { "@types/react": "~19.2.0", - "expo-constants": "56.0.1", - "expo-module-scripts": "56.0.0", + "expo-constants": "workspace:*", + "expo-module-scripts": "workspace:*", "react-dom": "19.2.3" } } diff --git a/packages/@expo/osascript/package.json b/packages/@expo/osascript/package.json index dd7d503647a6e0..de85aea7713c0c 100644 --- a/packages/@expo/osascript/package.json +++ b/packages/@expo/osascript/package.json @@ -40,7 +40,7 @@ }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "publishConfig": { "access": "public" diff --git a/packages/@expo/package-manager/package.json b/packages/@expo/package-manager/package.json index 8e6ff06a270db1..eab90fafef5183 100644 --- a/packages/@expo/package-manager/package.json +++ b/packages/@expo/package-manager/package.json @@ -36,7 +36,7 @@ "build" ], "dependencies": { - "@expo/json-file": "10.1.0", + "@expo/json-file": "workspace:^10.1.0", "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", "npm-package-arg": "^11.0.0", @@ -46,7 +46,7 @@ "devDependencies": { "@types/micromatch": "^4.0.2", "@types/npm-package-arg": "^6.1.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "publishConfig": { "access": "public" diff --git a/packages/@expo/pkcs12/package.json b/packages/@expo/pkcs12/package.json index 95fbb2ffced6be..2525e439faab68 100644 --- a/packages/@expo/pkcs12/package.json +++ b/packages/@expo/pkcs12/package.json @@ -34,7 +34,7 @@ "devDependencies": { "@types/node": "^22.14.0", "@types/node-forge": "^1.0.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "publishConfig": { "access": "public" diff --git a/packages/@expo/plist/package.json b/packages/@expo/plist/package.json index 71261f281912a8..da587affeea477 100644 --- a/packages/@expo/plist/package.json +++ b/packages/@expo/plist/package.json @@ -35,7 +35,7 @@ }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "publishConfig": { "access": "public" diff --git a/packages/@expo/prebuild-config/package.json b/packages/@expo/prebuild-config/package.json index dede59cb5dfb00..675e0d41317f55 100644 --- a/packages/@expo/prebuild-config/package.json +++ b/packages/@expo/prebuild-config/package.json @@ -32,20 +32,20 @@ ], "devDependencies": { "@babel/cli": "^7.23.4", - "@expo/plist": "0.6.0", + "@expo/plist": "workspace:*", "@types/debug": "^4.1.5", "@types/semver": "^7.5.8", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "memfs": "^3.2.0" }, "dependencies": { - "@expo/config": "56.0.0", - "@expo/config-plugins": "56.0.0", - "@expo/config-types": "56.0.0", - "@expo/image-utils": "0.9.0", - "@expo/json-file": "10.1.0", + "@expo/config": "workspace:~56.0.0", + "@expo/config-plugins": "workspace:~56.0.0", + "@expo/config-types": "workspace:^56.0.0", + "@expo/image-utils": "workspace:^0.9.0", + "@expo/json-file": "workspace:^10.1.0", "@react-native/normalize-colors": "0.85.2", - "expo-modules-autolinking": "56.0.0", + "expo-modules-autolinking": "workspace:~56.0.0", "debug": "^4.3.1", "resolve-from": "^5.0.0", "semver": "^7.6.0" diff --git a/packages/@expo/require-utils/package.json b/packages/@expo/require-utils/package.json index 0dfaeb12314bb8..db2126232ab819 100644 --- a/packages/@expo/require-utils/package.json +++ b/packages/@expo/require-utils/package.json @@ -44,7 +44,7 @@ "@types/babel__core": "^7.20.5", "@types/babel__code-frame": "^7.27.0", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "memfs": "^3.2.0" }, "publishConfig": { diff --git a/packages/@expo/router-server/package.json b/packages/@expo/router-server/package.json index db39a1bfc24119..483ea2b3fdeb51 100644 --- a/packages/@expo/router-server/package.json +++ b/packages/@expo/router-server/package.json @@ -34,12 +34,12 @@ "expo" ], "peerDependencies": { - "@expo/metro-runtime": "56.0.1", - "expo": "56.0.0-preview.2", - "expo-constants": "56.0.1", - "expo-font": "56.0.1", - "expo-router": "56.0.1", - "expo-server": "56.0.0", + "@expo/metro-runtime": "workspace:^56.0.1", + "expo": "workspace:*", + "expo-constants": "workspace:^56.0.1", + "expo-font": "workspace:^56.0.1", + "expo-router": "workspace:*", + "expo-server": "workspace:^56.0.0", "react": "*", "react-dom": "*", "react-server-dom-webpack": "~19.0.1 || ~19.1.2 || ~19.2.1" diff --git a/packages/@expo/schema-utils/package.json b/packages/@expo/schema-utils/package.json index a1d2f0b2a79361..dff4833e70fa7e 100644 --- a/packages/@expo/schema-utils/package.json +++ b/packages/@expo/schema-utils/package.json @@ -29,7 +29,7 @@ "devDependencies": { "@babel/cli": "^7.23.4", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "json-schema-to-typescript": "^15.0.0" }, "publishConfig": { diff --git a/packages/@expo/schemer/package.json b/packages/@expo/schemer/package.json index fe60eb45fc439a..22ec96e58e1065 100644 --- a/packages/@expo/schemer/package.json +++ b/packages/@expo/schemer/package.json @@ -35,7 +35,7 @@ }, "devDependencies": { "@types/probe-image-size": "^7.2.4", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "publishConfig": { "access": "public" diff --git a/packages/babel-preset-expo/package.json b/packages/babel-preset-expo/package.json index 548742f4e34431..2f7b0e6dd0e090 100644 --- a/packages/babel-preset-expo/package.json +++ b/packages/babel-preset-expo/package.json @@ -40,8 +40,8 @@ }, "peerDependencies": { "@babel/runtime": "^7.20.0", - "expo": "56.0.0-preview.2", - "expo-widgets": "56.0.1", + "expo": "workspace:*", + "expo-widgets": "workspace:^56.0.1", "react-refresh": ">=0.14.0 <1.0.0" }, "peerDependenciesMeta": { @@ -102,13 +102,13 @@ "devDependencies": { "@babel/core": "^7.26.0", "@expo/metro": "~56.0.0", - "@expo/metro-config": "56.0.1", + "@expo/metro-config": "workspace:*", "@types/babel__core": "^7.20.5", "@types/babel__generator": "^7.27.0", "@types/node": "^22.14.0", "babel-plugin-module-resolver": "^5.0.2", - "expo-module-scripts": "56.0.0", - "expo-splash-screen": "56.0.1", + "expo-module-scripts": "workspace:*", + "expo-splash-screen": "workspace:*", "jest": "^29.2.1", "react-refresh": "^0.14.2", "resolve-from": "^5.0.0" diff --git a/packages/create-expo-module/package.json b/packages/create-expo-module/package.json index ff89de8db008e2..5b6a8f3da6b548 100644 --- a/packages/create-expo-module/package.json +++ b/packages/create-expo-module/package.json @@ -42,7 +42,7 @@ "prepublishOnly": "pnpm run clean && pnpm run build:prod" }, "devDependencies": { - "@expo/json-file": "10.1.0", + "@expo/json-file": "workspace:*", "@expo/rudder-sdk-node": "^1.1.1", "@expo/spawn-async": "^1.7.2", "@octokit/types": "^15.0.0", @@ -59,7 +59,7 @@ "cross-spawn": "^7.0.5", "debug": "^4.3.4", "ejs": "^3.1.10", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "getenv": "^2.0.0", "ora": "^5.4.1", "prompts": "^2.4.2", diff --git a/packages/create-expo-nightly/package.json b/packages/create-expo-nightly/package.json index e66c74ac95ca27..19caf112df7f36 100644 --- a/packages/create-expo-nightly/package.json +++ b/packages/create-expo-nightly/package.json @@ -40,6 +40,6 @@ }, "devDependencies": { "@tsconfig/node22": "^22.0.3", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" } } diff --git a/packages/create-expo/package.json b/packages/create-expo/package.json index 656ab639302121..a0d5ea2780de5d 100644 --- a/packages/create-expo/package.json +++ b/packages/create-expo/package.json @@ -37,9 +37,9 @@ "prepublishOnly": "pnpm run clean && pnpm run build:prod" }, "devDependencies": { - "@expo/config": "56.0.0", - "@expo/json-file": "10.1.0", - "@expo/package-manager": "1.11.0", + "@expo/config": "workspace:*", + "@expo/json-file": "workspace:*", + "@expo/package-manager": "workspace:*", "@expo/spawn-async": "^1.7.2", "@octokit/types": "^13.5.0", "@types/debug": "^4.1.7", @@ -51,7 +51,7 @@ "arg": "^5.0.2", "chalk": "^4.0.0", "debug": "^4.3.4", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "getenv": "^2.0.0", "glob": "^13.0.0", "nock": "^14.0.10", diff --git a/packages/eslint-config-expo/package.json b/packages/eslint-config-expo/package.json index e034b341b50d35..558b6e06cc67a1 100644 --- a/packages/eslint-config-expo/package.json +++ b/packages/eslint-config-expo/package.json @@ -39,7 +39,7 @@ "@typescript-eslint/eslint-plugin": "^8.59.0", "@typescript-eslint/parser": "^8.59.0", "eslint-import-resolver-typescript": "^3.6.3", - "eslint-plugin-expo": "1.0.1", + "eslint-plugin-expo": "workspace:^1.0.1", "eslint-plugin-import": "^2.30.0", "eslint-plugin-react": "^7.37.3", "eslint-plugin-react-hooks": "^5.1.0", diff --git a/packages/eslint-plugin-expo/package.json b/packages/eslint-plugin-expo/package.json index 7d993dc1f4e449..5e801e19f2530c 100644 --- a/packages/eslint-plugin-expo/package.json +++ b/packages/eslint-plugin-expo/package.json @@ -32,7 +32,7 @@ "@types/eslint": "^8.56.12", "@types/jest": "^29.5.12", "@typescript-eslint/rule-tester": "^8.59.0", - "eslint-config-universe": "15.1.0", + "eslint-config-universe": "workspace:*", "eslint-plugin-eslint-plugin": "^6.2.0", "jest": "^29.7.0", "ts-jest": "^29.1.2" diff --git a/packages/expo-age-range/package.json b/packages/expo-age-range/package.json index 95e894a8e6b521..2ff7b5b1d05bd5 100644 --- a/packages/expo-age-range/package.json +++ b/packages/expo-age-range/package.json @@ -35,10 +35,10 @@ }, "dependencies": {}, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-app-integrity/package.json b/packages/expo-app-integrity/package.json index a8dc5f0af83b48..09febcc94f1b77 100644 --- a/packages/expo-app-integrity/package.json +++ b/packages/expo-app-integrity/package.json @@ -36,7 +36,7 @@ }, "dependencies": {}, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { "expo": "workspace:*", diff --git a/packages/expo-app-metrics/package.json b/packages/expo-app-metrics/package.json index 6a0ee881be37d8..08a1557fee254c 100644 --- a/packages/expo-app-metrics/package.json +++ b/packages/expo-app-metrics/package.json @@ -30,14 +30,14 @@ "author": "650 Industries, Inc.", "license": "MIT", "dependencies": { - "expo-updates-interface": "56.0.1" + "expo-updates-interface": "workspace:~56.0.1" }, "devDependencies": { "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-apple-authentication/package.json b/packages/expo-apple-authentication/package.json index 2ec0ec2188a28b..c33bf399ee02cc 100644 --- a/packages/expo-apple-authentication/package.json +++ b/packages/expo-apple-authentication/package.json @@ -34,10 +34,10 @@ "devDependencies": { "@types/node": "^22.14.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-application/package.json b/packages/expo-application/package.json index 6e4f2223ac1516..1507ea631cee14 100644 --- a/packages/expo-application/package.json +++ b/packages/expo-application/package.json @@ -30,9 +30,9 @@ "homepage": "https://docs.expo.dev/versions/latest/sdk/application/", "dependencies": {}, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-asset/package.json b/packages/expo-asset/package.json index a019d333d6f2cf..421be87759aff6 100644 --- a/packages/expo-asset/package.json +++ b/packages/expo-asset/package.json @@ -48,18 +48,18 @@ "preset": "expo-module-scripts" }, "dependencies": { - "@expo/image-utils": "0.9.0", - "expo-constants": "56.0.1" + "@expo/image-utils": "workspace:^0.9.0", + "expo-constants": "workspace:~56.0.1" }, "devDependencies": { "@testing-library/react-native": "^13.3.0", "@types/node": "^22.14.0", "@types/react": "~19.2.0", "@types/react-native__assets": "^1.0.3", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-audio/package.json b/packages/expo-audio/package.json index 22cb2d2742b734..5559d999ddebee 100644 --- a/packages/expo-audio/package.json +++ b/packages/expo-audio/package.json @@ -34,12 +34,12 @@ "devDependencies": { "@types/react": "~19.2.0", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*", - "expo-asset": "56.0.1" + "expo-asset": "workspace:*" } } diff --git a/packages/expo-auth-session/package.json b/packages/expo-auth-session/package.json index f64f8046013eae..7d531bb6a6d281 100644 --- a/packages/expo-auth-session/package.json +++ b/packages/expo-auth-session/package.json @@ -33,17 +33,17 @@ "license": "MIT", "homepage": "https://docs.expo.dev/versions/latest/sdk/auth-session", "dependencies": { - "expo-application": "56.0.0", - "expo-constants": "56.0.1", - "expo-crypto": "56.0.0", - "expo-linking": "56.0.0", - "expo-web-browser": "56.0.1", + "expo-application": "workspace:~56.0.0", + "expo-constants": "workspace:~56.0.1", + "expo-crypto": "workspace:~56.0.0", + "expo-linking": "workspace:~56.0.0", + "expo-web-browser": "workspace:~56.0.1", "invariant": "^2.2.4" }, "devDependencies": { "@types/react": "~19.2.0", "@types/invariant": "^2.2.33", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { "react": "*", diff --git a/packages/expo-background-fetch/package.json b/packages/expo-background-fetch/package.json index f8782881f56c29..762252abcd1d24 100644 --- a/packages/expo-background-fetch/package.json +++ b/packages/expo-background-fetch/package.json @@ -32,13 +32,13 @@ "license": "MIT", "homepage": "https://docs.expo.dev/versions/latest/sdk/background-fetch/", "dependencies": { - "expo-task-manager": "56.0.0" + "expo-task-manager": "workspace:~56.0.0" }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-background-task/package.json b/packages/expo-background-task/package.json index 53bf7291eb72f7..8ebdef51fb7a40 100644 --- a/packages/expo-background-task/package.json +++ b/packages/expo-background-task/package.json @@ -31,13 +31,13 @@ "license": "MIT", "homepage": "https://docs.expo.dev/versions/latest/sdk/background-task/", "dependencies": { - "expo-task-manager": "56.0.0" + "expo-task-manager": "workspace:~56.0.0" }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-battery/package.json b/packages/expo-battery/package.json index 893d25ec8ca7ed..1fcc861056fa7a 100644 --- a/packages/expo-battery/package.json +++ b/packages/expo-battery/package.json @@ -31,10 +31,10 @@ "dependencies": {}, "devDependencies": { "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*" } } diff --git a/packages/expo-blob/package.json b/packages/expo-blob/package.json index 77ac74e510bd45..bd2261145aea8a 100644 --- a/packages/expo-blob/package.json +++ b/packages/expo-blob/package.json @@ -31,9 +31,9 @@ "dependencies": {}, "devDependencies": { "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-blur/package.json b/packages/expo-blur/package.json index afdb842d151b7e..e09bfcf1ee1a46 100644 --- a/packages/expo-blur/package.json +++ b/packages/expo-blur/package.json @@ -39,10 +39,10 @@ "@testing-library/react": "^16.3.0", "@testing-library/react-native": "^13.3.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-brightness/package.json b/packages/expo-brightness/package.json index 9907e4e63e6614..88603df624807c 100644 --- a/packages/expo-brightness/package.json +++ b/packages/expo-brightness/package.json @@ -35,10 +35,10 @@ }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-brownfield/package.json b/packages/expo-brownfield/package.json index bdbc3b3d59dc3b..9bd9de03c0ae1b 100644 --- a/packages/expo-brownfield/package.json +++ b/packages/expo-brownfield/package.json @@ -49,12 +49,12 @@ "preset": "expo-module-scripts" }, "dependencies": { - "@expo/env": "2.2.0", + "@expo/env": "workspace:~2.2.0", "chalk": "^4.1.2", "commander": "^14.0.3", "diff": "^5.2.0", - "expo-build-properties": "56.0.0", - "expo-manifests": "56.0.1", + "expo-build-properties": "workspace:~56.0.0", + "expo-manifests": "workspace:~56.0.1", "ora": "^5.4.1", "prompts": "^2.4.2" }, @@ -65,12 +65,12 @@ "@types/prompts": "^2.0.6", "@types/react": "~19.2.0", "@types/node": "^22.14.0", - "create-expo": "3.7.0", - "expo-module-scripts": "56.0.0", + "create-expo": "workspace:*", + "expo-module-scripts": "workspace:*", "glob": "^13.0.6" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*" } } diff --git a/packages/expo-build-properties/package.json b/packages/expo-build-properties/package.json index 4f5e3b99755f66..696c1ce4026e64 100644 --- a/packages/expo-build-properties/package.json +++ b/packages/expo-build-properties/package.json @@ -36,16 +36,16 @@ "license": "MIT", "homepage": "https://docs.expo.dev/versions/latest/sdk/build-properties", "dependencies": { - "@expo/schema-utils": "56.0.0", + "@expo/schema-utils": "workspace:^56.0.0", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, "devDependencies": { "@types/semver": "^7.0.0", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-calendar/package.json b/packages/expo-calendar/package.json index 29afab44d6120d..95fa6f1b1df49e 100644 --- a/packages/expo-calendar/package.json +++ b/packages/expo-calendar/package.json @@ -35,10 +35,10 @@ }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-camera/package.json b/packages/expo-camera/package.json index 77504abc8cee15..2ec17f46c19e75 100644 --- a/packages/expo-camera/package.json +++ b/packages/expo-camera/package.json @@ -38,10 +38,10 @@ "devDependencies": { "@types/react": "~19.2.0", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*", "react-native-web": "*" diff --git a/packages/expo-cellular/package.json b/packages/expo-cellular/package.json index 9f5c11ed4c1d45..e661fadfdc4034 100644 --- a/packages/expo-cellular/package.json +++ b/packages/expo-cellular/package.json @@ -31,9 +31,9 @@ "dependencies": {}, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-checkbox/package.json b/packages/expo-checkbox/package.json index 0ec07a355d668f..d80f6497a089df 100644 --- a/packages/expo-checkbox/package.json +++ b/packages/expo-checkbox/package.json @@ -34,7 +34,7 @@ "@testing-library/react": "^16.3.0", "@testing-library/react-native": "^13.3.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { "react": "*", diff --git a/packages/expo-clipboard/package.json b/packages/expo-clipboard/package.json index 45e8c0e48f65c2..c27e9c9281113f 100644 --- a/packages/expo-clipboard/package.json +++ b/packages/expo-clipboard/package.json @@ -31,10 +31,10 @@ "dependencies": {}, "devDependencies": { "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" }, diff --git a/packages/expo-codemod/package.json b/packages/expo-codemod/package.json index ed3771394094dc..e0bb9acd65edf5 100644 --- a/packages/expo-codemod/package.json +++ b/packages/expo-codemod/package.json @@ -46,6 +46,6 @@ "devDependencies": { "@types/jscodeshift": "^17.0.0", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" } } diff --git a/packages/expo-constants/package.json b/packages/expo-constants/package.json index 12fec84d314d51..47e0dd0841e2ad 100644 --- a/packages/expo-constants/package.json +++ b/packages/expo-constants/package.json @@ -42,16 +42,16 @@ "preset": "expo-module-scripts" }, "dependencies": { - "@expo/env": "2.2.0" + "@expo/env": "workspace:~2.2.0" }, "devDependencies": { "@types/node": "^22.14.0", - "expo-manifests": "56.0.1", - "expo-updates": "56.0.1", - "expo-module-scripts": "56.0.0" + "expo-manifests": "workspace:*", + "expo-updates": "workspace:*", + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-contacts/package.json b/packages/expo-contacts/package.json index d4c6609b186493..3a02fb4a14163d 100644 --- a/packages/expo-contacts/package.json +++ b/packages/expo-contacts/package.json @@ -35,10 +35,10 @@ "devDependencies": { "@types/react": "~19.2.0", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-crypto/package.json b/packages/expo-crypto/package.json index 182236e4ddb372..6ea272cd24845f 100644 --- a/packages/expo-crypto/package.json +++ b/packages/expo-crypto/package.json @@ -39,9 +39,9 @@ }, "dependencies": {}, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-dev-client/package.json b/packages/expo-dev-client/package.json index c843146ecbe0e1..bb1bf0c87799ec 100644 --- a/packages/expo-dev-client/package.json +++ b/packages/expo-dev-client/package.json @@ -31,19 +31,19 @@ "license": "MIT", "homepage": "https://docs.expo.dev/versions/latest/sdk/dev-client/", "dependencies": { - "expo-dev-launcher": "56.0.0", - "expo-dev-menu": "56.0.0", - "expo-dev-menu-interface": "56.0.0", - "expo-manifests": "56.0.1", - "expo-updates-interface": "56.0.1" + "expo-dev-launcher": "workspace:56.0.0", + "expo-dev-menu": "workspace:56.0.0", + "expo-dev-menu-interface": "workspace:56.0.0", + "expo-manifests": "workspace:~56.0.1", + "expo-updates-interface": "workspace:~56.0.1" }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0", - "expo-test-runner": "0.3.13" + "expo-module-scripts": "workspace:*", + "expo-test-runner": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" }, "jest": { "preset": "expo-module-scripts" diff --git a/packages/expo-dev-launcher/package.json b/packages/expo-dev-launcher/package.json index 663bfbe149ab8f..9fec213dacf569 100644 --- a/packages/expo-dev-launcher/package.json +++ b/packages/expo-dev-launcher/package.json @@ -19,12 +19,12 @@ "license": "MIT", "homepage": "https://docs.expo.dev", "dependencies": { - "@expo/schema-utils": "56.0.0", - "expo-dev-menu": "56.0.0", - "expo-manifests": "56.0.1" + "@expo/schema-utils": "workspace:^56.0.0", + "expo-dev-menu": "workspace:56.0.0", + "expo-manifests": "workspace:~56.0.1" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" }, "devDependencies": { diff --git a/packages/expo-dev-menu-interface/package.json b/packages/expo-dev-menu-interface/package.json index e938a52cfe5bbf..25e4c46ee5beeb 100644 --- a/packages/expo-dev-menu-interface/package.json +++ b/packages/expo-dev-menu-interface/package.json @@ -23,6 +23,6 @@ "license": "MIT", "homepage": "https://docs.expo.dev", "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-dev-menu/package.json b/packages/expo-dev-menu/package.json index 171b5eb47f42c2..99c40b053c9143 100644 --- a/packages/expo-dev-menu/package.json +++ b/packages/expo-dev-menu/package.json @@ -32,19 +32,19 @@ "license": "MIT", "homepage": "https://docs.expo.dev", "dependencies": { - "expo-dev-menu-interface": "56.0.0" + "expo-dev-menu-interface": "workspace:56.0.0" }, "devDependencies": { "@babel/preset-typescript": "^7.7.4", "@testing-library/react-native": "^13.3.0", "@types/node": "^22.14.0", - "babel-preset-expo": "56.0.1", - "expo-module-scripts": "56.0.0", + "babel-preset-expo": "workspace:*", + "expo-module-scripts": "workspace:*", "react": "19.2.3", "react-native": "0.85.2" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-device/package.json b/packages/expo-device/package.json index 0877e208fcbbe5..0bca66f33d6a8e 100644 --- a/packages/expo-device/package.json +++ b/packages/expo-device/package.json @@ -36,9 +36,9 @@ }, "devDependencies": { "@types/ua-parser-js": "^0.7.39", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-doctor/package.json b/packages/expo-doctor/package.json index 0805f55c23e052..62610a88aeb977 100644 --- a/packages/expo-doctor/package.json +++ b/packages/expo-doctor/package.json @@ -36,11 +36,11 @@ "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" }, "devDependencies": { - "@expo/config": "56.0.0", - "@expo/env": "2.2.0", - "@expo/json-file": "10.1.0", + "@expo/config": "workspace:*", + "@expo/env": "workspace:*", + "@expo/json-file": "workspace:*", "@expo/metro": "~56.0.0", - "@expo/schemer": "2.2.0", + "@expo/schemer": "workspace:*", "@expo/spawn-async": "^1.7.2", "@types/debug": "^4.1.8", "@types/getenv": "^1.0.0", @@ -48,9 +48,9 @@ "@vercel/ncc": "0.38.3", "chalk": "^4.0.0", "debug": "^4.3.4", - "expo-modules-autolinking": "56.0.0", - "expo-module-scripts": "56.0.0", - "expo": "56.0.0-preview.2", + "expo-modules-autolinking": "workspace:*", + "expo-module-scripts": "workspace:*", + "expo": "workspace:*", "getenv": "^2.0.0", "glob": "^13.0.0", "ignore": "^5.3.2", diff --git a/packages/expo-document-picker/package.json b/packages/expo-document-picker/package.json index c32cfbb54f2762..02c8939eb377c6 100644 --- a/packages/expo-document-picker/package.json +++ b/packages/expo-document-picker/package.json @@ -35,9 +35,9 @@ }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-eas-client/package.json b/packages/expo-eas-client/package.json index 8bb98968619dfe..7c1946b876d7bc 100644 --- a/packages/expo-eas-client/package.json +++ b/packages/expo-eas-client/package.json @@ -34,6 +34,6 @@ "preset": "expo-module-scripts" }, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" } } diff --git a/packages/expo-env-info/package.json b/packages/expo-env-info/package.json index 6cb3724afefdb1..f5dae1197e7fc9 100644 --- a/packages/expo-env-info/package.json +++ b/packages/expo-env-info/package.json @@ -38,7 +38,7 @@ "devDependencies": { "@types/envinfo": "^7.8.1", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" diff --git a/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemDirectory.kt b/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemDirectory.kt index f53487ba5726ec..a2c85b79ff210d 100644 --- a/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemDirectory.kt +++ b/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemDirectory.kt @@ -51,14 +51,14 @@ class FileSystemDirectory(uri: Uri) : FileSystemPath(uri) { } fun create(options: CreateOptions = CreateOptions()) { + if (uri.isContentUri) { + throw UnableToCreateException("Directory.create function does not work with SAF content:// uris, use `Directory.createDirectory` instead") + } validateType() validatePermission(FilePermissionService.Permission.WRITE) if (!needsCreation(options)) { return } - if (uri.isContentUri) { - throw UnableToCreateException("create function does not work with SAF Uris, use `createDirectory` and `createFile` instead") - } validateCanCreate(options) if (options.overwrite && file.exists()) { file.delete() diff --git a/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemFile.kt b/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemFile.kt index 35daee2fda7de7..3429bdb7c3cdd7 100644 --- a/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemFile.kt +++ b/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemFile.kt @@ -36,12 +36,12 @@ class FileSystemFile(uri: Uri) : FileSystemPath(uri) { } fun create(options: CreateOptions = CreateOptions()) { + if (uri.isContentUri) { + throw UnableToCreateException("File.create function does not work with SAF content:// uris, use `Directory.createFile` instead") + } validateType() validatePermission(FilePermissionService.Permission.WRITE) validateCanCreate(options) - if (uri.isContentUri) { - throw UnableToCreateException("create function does not work with SAF Uris, use `createDirectory` and `createFile` instead") - } if (options.overwrite && exists) { javaFile.delete() } diff --git a/packages/expo-file-system/android/src/test/java/expo/modules/filesystem/FileSystemFileTest.kt b/packages/expo-file-system/android/src/test/java/expo/modules/filesystem/FileSystemFileTest.kt new file mode 100644 index 00000000000000..be37298af70a72 --- /dev/null +++ b/packages/expo-file-system/android/src/test/java/expo/modules/filesystem/FileSystemFileTest.kt @@ -0,0 +1,28 @@ +package expo.modules.filesystem + +import android.net.Uri +import android.os.Build +import org.junit.Assert.assertThrows +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [Build.VERSION_CODES.R]) +class FileSystemFileTest { + @Test + fun createRejectsContentUriBeforeResolvingFileType() { + val file = FileSystemFile(Uri.parse("content://com.android.externalstorage.documents/tree/primary%3ADownload")) + + val exception = assertThrows(UnableToCreateException::class.java) { + file.create() + } + + assertTrue( + exception.message?.contains("File.create") == true && + exception.message?.contains("Directory.createFile") == true + ) + } +} diff --git a/packages/expo-file-system/package.json b/packages/expo-file-system/package.json index 88e1f034dbbdc0..1340d9cfdedf09 100644 --- a/packages/expo-file-system/package.json +++ b/packages/expo-file-system/package.json @@ -49,11 +49,11 @@ }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0", - "jest-expo": "56.0.0" + "expo-module-scripts": "workspace:*", + "jest-expo": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-font/package.json b/packages/expo-font/package.json index 04e16f01c1375f..9ee32de4c30b58 100644 --- a/packages/expo-font/package.json +++ b/packages/expo-font/package.json @@ -54,10 +54,10 @@ "@types/fontfaceobserver": "^2.1.3", "@types/react": "~19.2.0", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-gl/package.json b/packages/expo-gl/package.json index 1a5acb9e76e101..c6eaf66eea5835 100644 --- a/packages/expo-gl/package.json +++ b/packages/expo-gl/package.json @@ -44,11 +44,11 @@ "@types/react-test-renderer": "^19.1.0", "@types/react": "~19.2.0", "@types/webgl2": "^0.0.6", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "react-test-renderer": "19.2.0" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-dom": "*", "react-native": "*", diff --git a/packages/expo-glass-effect/package.json b/packages/expo-glass-effect/package.json index 5595a9f7c579e3..d06da2204eddad 100644 --- a/packages/expo-glass-effect/package.json +++ b/packages/expo-glass-effect/package.json @@ -41,10 +41,10 @@ "@testing-library/react": "^16.3.0", "@testing-library/react-native": "^13.3.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-haptics/package.json b/packages/expo-haptics/package.json index 0ce9eba32cbc37..3b6c48f833994a 100644 --- a/packages/expo-haptics/package.json +++ b/packages/expo-haptics/package.json @@ -32,9 +32,9 @@ "homepage": "https://docs.expo.dev/versions/latest/sdk/haptics/", "dependencies": {}, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-image-loader/package.json b/packages/expo-image-loader/package.json index 017ee84a0f0449..682cc397ad88cc 100644 --- a/packages/expo-image-loader/package.json +++ b/packages/expo-image-loader/package.json @@ -22,6 +22,6 @@ "dependencies": {}, "devDependencies": {}, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-image-manipulator/package.json b/packages/expo-image-manipulator/package.json index ce4ce777aaff78..6189c2d304fed5 100644 --- a/packages/expo-image-manipulator/package.json +++ b/packages/expo-image-manipulator/package.json @@ -30,12 +30,12 @@ "license": "MIT", "homepage": "https://docs.expo.dev/versions/latest/sdk/imagemanipulator/", "dependencies": { - "expo-image-loader": "56.0.0" + "expo-image-loader": "workspace:~56.0.0" }, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-image-picker/package.json b/packages/expo-image-picker/package.json index 00421e0d1910d3..1d6eefb5858ba8 100644 --- a/packages/expo-image-picker/package.json +++ b/packages/expo-image-picker/package.json @@ -35,15 +35,15 @@ "preset": "expo-module-scripts" }, "dependencies": { - "expo-image-loader": "56.0.0" + "expo-image-loader": "workspace:~56.0.0" }, "devDependencies": { "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-image/package.json b/packages/expo-image/package.json index 12edd0e89a77e8..08f4cbda108724 100644 --- a/packages/expo-image/package.json +++ b/packages/expo-image/package.json @@ -33,10 +33,10 @@ "devDependencies": { "@types/react": "~19.2.0", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*", "react-native-web": "*" diff --git a/packages/expo-insights/package.json b/packages/expo-insights/package.json index 8252142d15ed12..05f5ce7d4279d2 100644 --- a/packages/expo-insights/package.json +++ b/packages/expo-insights/package.json @@ -31,12 +31,12 @@ "author": "650 Industries, Inc.", "license": "MIT", "dependencies": { - "expo-eas-client": "56.0.0" + "expo-eas-client": "workspace:~56.0.0" }, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-intent-launcher/package.json b/packages/expo-intent-launcher/package.json index 4e79fcc8fb489a..04b2902108b8eb 100644 --- a/packages/expo-intent-launcher/package.json +++ b/packages/expo-intent-launcher/package.json @@ -33,9 +33,9 @@ "homepage": "https://docs.expo.dev/versions/latest/sdk/intent-launcher/", "dependencies": {}, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-keep-awake/package.json b/packages/expo-keep-awake/package.json index 07db83fc73eec1..3ea4a566a96ecf 100644 --- a/packages/expo-keep-awake/package.json +++ b/packages/expo-keep-awake/package.json @@ -41,10 +41,10 @@ "devDependencies": { "@testing-library/react-native": "^13.3.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*" }, "jest": { diff --git a/packages/expo-linear-gradient/package.json b/packages/expo-linear-gradient/package.json index a7c010cbbd3836..e3b070d856d119 100644 --- a/packages/expo-linear-gradient/package.json +++ b/packages/expo-linear-gradient/package.json @@ -39,10 +39,10 @@ "@testing-library/react": "^16.3.0", "@testing-library/react-native": "^13.3.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-linking/package.json b/packages/expo-linking/package.json index ff9aa8ea1b3640..bdebfd60fa981b 100644 --- a/packages/expo-linking/package.json +++ b/packages/expo-linking/package.json @@ -37,13 +37,13 @@ "license": "MIT", "homepage": "https://docs.expo.dev/versions/latest/sdk/linking", "dependencies": { - "expo-constants": "56.0.1", + "expo-constants": "workspace:~56.0.1", "invariant": "^2.2.4" }, "devDependencies": { "@types/react": "~19.2.0", "@types/invariant": "^2.2.33", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { "react": "*", diff --git a/packages/expo-live-photo/package.json b/packages/expo-live-photo/package.json index 907ddeea330a28..36348c094c4857 100644 --- a/packages/expo-live-photo/package.json +++ b/packages/expo-live-photo/package.json @@ -39,10 +39,10 @@ "dependencies": {}, "devDependencies": { "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-local-authentication/package.json b/packages/expo-local-authentication/package.json index 80f986e588f6dd..7beeec51ba155e 100644 --- a/packages/expo-local-authentication/package.json +++ b/packages/expo-local-authentication/package.json @@ -42,9 +42,9 @@ "devDependencies": { "@types/invariant": "^2.2.33", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-localization/package.json b/packages/expo-localization/package.json index 4233a9046d31b6..f17075c6fe5338 100644 --- a/packages/expo-localization/package.json +++ b/packages/expo-localization/package.json @@ -45,11 +45,11 @@ "@types/i18n-js": "^3.8.2", "@types/react": "~19.2.0", "@types/rtl-detect": "^1.0.3", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "i18n-js": "^3.9.2" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*" } } diff --git a/packages/expo-location/package.json b/packages/expo-location/package.json index f452a317bb3ba7..0972083ef745c6 100644 --- a/packages/expo-location/package.json +++ b/packages/expo-location/package.json @@ -38,13 +38,13 @@ "preset": "expo-module-scripts" }, "dependencies": { - "@expo/image-utils": "0.9.0" + "@expo/image-utils": "workspace:^0.9.0" }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-mail-composer/package.json b/packages/expo-mail-composer/package.json index ff720cbff2b213..b3f45c10bffd3b 100644 --- a/packages/expo-mail-composer/package.json +++ b/packages/expo-mail-composer/package.json @@ -35,9 +35,9 @@ }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-manifests/package.json b/packages/expo-manifests/package.json index 81a6f95f89b32c..49fdbd2e4ebd00 100644 --- a/packages/expo-manifests/package.json +++ b/packages/expo-manifests/package.json @@ -33,12 +33,12 @@ "preset": "expo-module-scripts" }, "dependencies": { - "expo-json-utils": "56.0.0" + "expo-json-utils": "workspace:~56.0.0" }, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-maps/package.json b/packages/expo-maps/package.json index dab51b6ba43942..8eec58fbb220be 100644 --- a/packages/expo-maps/package.json +++ b/packages/expo-maps/package.json @@ -29,10 +29,10 @@ "devDependencies": { "@types/node": "^22.14.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-media-library/package.json b/packages/expo-media-library/package.json index f8a0a6eb65c318..f73387d57d50bc 100644 --- a/packages/expo-media-library/package.json +++ b/packages/expo-media-library/package.json @@ -38,10 +38,10 @@ }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" }, "codegenConfig": { diff --git a/packages/expo-mesh-gradient/package.json b/packages/expo-mesh-gradient/package.json index 6e9e43e2b2c4a6..0bb9f7b9c6e0e8 100644 --- a/packages/expo-mesh-gradient/package.json +++ b/packages/expo-mesh-gradient/package.json @@ -30,10 +30,10 @@ "dependencies": {}, "devDependencies": { "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-module-scripts/package.json b/packages/expo-module-scripts/package.json index 6451405e50f9d7..109a0436caee77 100644 --- a/packages/expo-module-scripts/package.json +++ b/packages/expo-module-scripts/package.json @@ -79,9 +79,9 @@ "@types/jest": "^29.2.1", "babel-plugin-dynamic-import-node": "^2.3.3", "commander": "^12.1.0", - "eslint-config-universe": "15.1.0", + "eslint-config-universe": "workspace:^15.1.0", "glob": "^13.0.0", - "jest-expo": "56.0.0", + "jest-expo": "workspace:~56.0.0", "jest-snapshot-prettier": "npm:prettier@^2", "jest-watch-typeahead": "2.2.1", "resolve-workspace-root": "^2.0.0", diff --git a/packages/expo-modules-autolinking/package.json b/packages/expo-modules-autolinking/package.json index ead1f46a970aed..04f789db215fde 100644 --- a/packages/expo-modules-autolinking/package.json +++ b/packages/expo-modules-autolinking/package.json @@ -48,11 +48,11 @@ "license": "MIT", "homepage": "https://github.com/expo/expo/tree/main/packages/expo-modules-autolinking#readme", "devDependencies": { - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "memfs": "^3.2.0" }, "dependencies": { - "@expo/require-utils": "56.0.0", + "@expo/require-utils": "workspace:^56.0.0", "@expo/spawn-async": "^1.7.2", "chalk": "^4.1.0", "commander": "^7.2.0" diff --git a/packages/expo-modules-core/package.json b/packages/expo-modules-core/package.json index 762f4f8e3b8d99..f2c30c3d22dc74 100644 --- a/packages/expo-modules-core/package.json +++ b/packages/expo-modules-core/package.json @@ -56,7 +56,7 @@ }, "dependencies": { "@expo/expo-modules-macros-plugin": "~0.0.8", - "expo-modules-jsi": "56.0.0", + "expo-modules-jsi": "workspace:~56.0.0", "invariant": "^2.2.4" }, "peerDependencies": { @@ -73,6 +73,6 @@ "@testing-library/react-native": "^13.3.0", "@types/react": "~19.2.0", "@types/invariant": "^2.2.33", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" } } diff --git a/packages/expo-navigation-bar/package.json b/packages/expo-navigation-bar/package.json index 602045b8c1957d..daedbb7a6590ed 100644 --- a/packages/expo-navigation-bar/package.json +++ b/packages/expo-navigation-bar/package.json @@ -48,10 +48,10 @@ "@types/debug": "^4.1.7", "@types/react": "~19.2.0", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-network-addons/package.json b/packages/expo-network-addons/package.json index 986d4ce1217645..e042418c9c6ff5 100644 --- a/packages/expo-network-addons/package.json +++ b/packages/expo-network-addons/package.json @@ -33,9 +33,9 @@ "license": "MIT", "dependencies": {}, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-network/package.json b/packages/expo-network/package.json index 71fcb9513e2cdc..ad26663af99d7e 100644 --- a/packages/expo-network/package.json +++ b/packages/expo-network/package.json @@ -31,10 +31,10 @@ "dependencies": {}, "devDependencies": { "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*" } } diff --git a/packages/expo-notifications/package.json b/packages/expo-notifications/package.json index 0149926106a515..c3dcb819a7a4ed 100644 --- a/packages/expo-notifications/package.json +++ b/packages/expo-notifications/package.json @@ -42,20 +42,20 @@ ] }, "dependencies": { - "@expo/image-utils": "0.9.0", + "@expo/image-utils": "workspace:^0.9.0", "abort-controller": "^3.0.0", "badgin": "^1.1.5", - "expo-application": "56.0.0", - "expo-constants": "56.0.1" + "expo-application": "workspace:~56.0.0", + "expo-constants": "workspace:~56.0.1" }, "devDependencies": { "@types/react": "~19.2.0", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "memfs": "^3.2.0" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-observe/package.json b/packages/expo-observe/package.json index 743b73597b2b49..a1df13cca677c3 100644 --- a/packages/expo-observe/package.json +++ b/packages/expo-observe/package.json @@ -32,14 +32,14 @@ "author": "650 Industries, Inc.", "license": "MIT", "dependencies": { - "expo-app-metrics": "56.0.0", - "expo-eas-client": "56.0.0" + "expo-app-metrics": "workspace:~56.0.0", + "expo-eas-client": "workspace:~56.0.0" }, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-print/package.json b/packages/expo-print/package.json index de19b013887168..be81fc53674185 100644 --- a/packages/expo-print/package.json +++ b/packages/expo-print/package.json @@ -37,10 +37,10 @@ }, "dependencies": {}, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-processing/package.json b/packages/expo-processing/package.json index 741ee2d9e87bb8..c7469390aad399 100644 --- a/packages/expo-processing/package.json +++ b/packages/expo-processing/package.json @@ -22,10 +22,10 @@ "license": "MIT", "homepage": "https://github.com/expo/expo/tree/main/packages/expo-processing", "dependencies": { - "expo-gl": "56.0.0" + "expo-gl": "workspace:56.0.0" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "processing-js": "^1.6.6" } } diff --git a/packages/expo-router/package.json b/packages/expo-router/package.json index 67c18c2f3946ed..e8f0a4e2e3cfb6 100644 --- a/packages/expo-router/package.json +++ b/packages/expo-router/package.json @@ -88,12 +88,12 @@ "expo" ], "peerDependencies": { - "@expo/log-box": "56.0.1", - "@expo/metro-runtime": "56.0.1", + "@expo/log-box": "workspace:56.0.1", + "@expo/metro-runtime": "workspace:^56.0.1", "@testing-library/react-native": ">= 13.2.0", - "expo": "56.0.0-preview.2", - "expo-constants": "56.0.1", - "expo-linking": "56.0.0", + "expo": "workspace:*", + "expo-constants": "workspace:^56.0.1", + "expo-linking": "workspace:^56.0.0", "react": "*", "react-dom": "*", "react-native": "*", @@ -147,9 +147,9 @@ "tsd": "^0.33.0" }, "dependencies": { - "@expo/metro-runtime": "56.0.1", - "@expo/schema-utils": "56.0.0", - "@expo/ui": "56.0.1", + "@expo/metro-runtime": "workspace:^56.0.1", + "@expo/schema-utils": "workspace:^56.0.0", + "@expo/ui": "workspace:^56.0.1", "@jest/globals": "^29.7.0", "@radix-ui/react-slot": "^1.2.0", "@radix-ui/react-tabs": "^1.1.12", @@ -160,10 +160,10 @@ "color": "^4.2.3", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", - "expo-glass-effect": "56.0.1", - "expo-image": "56.0.1", - "expo-server": "56.0.0", - "expo-symbols": "56.0.1", + "expo-glass-effect": "workspace:^56.0.1", + "expo-image": "workspace:^56.0.1", + "expo-server": "workspace:^56.0.0", + "expo-symbols": "workspace:^56.0.1", "fast-deep-equal": "^3.1.3", "invariant": "^2.2.4", "nanoid": "^3.3.8", diff --git a/packages/expo-screen-capture/package.json b/packages/expo-screen-capture/package.json index 86d8bf29b2efe4..9c67c0fb194890 100644 --- a/packages/expo-screen-capture/package.json +++ b/packages/expo-screen-capture/package.json @@ -35,10 +35,10 @@ "devDependencies": { "@types/react": "~19.2.0", "@testing-library/react-native": "^13.3.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*" } } diff --git a/packages/expo-screen-orientation/package.json b/packages/expo-screen-orientation/package.json index f6780e626ed848..4dde22fd0df3ea 100644 --- a/packages/expo-screen-orientation/package.json +++ b/packages/expo-screen-orientation/package.json @@ -36,10 +36,10 @@ }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-secure-store/package.json b/packages/expo-secure-store/package.json index dba089a109ddd2..ef38afc2a16f65 100644 --- a/packages/expo-secure-store/package.json +++ b/packages/expo-secure-store/package.json @@ -37,9 +37,9 @@ "dependencies": {}, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-sensors/package.json b/packages/expo-sensors/package.json index 2ef623138d23a6..8827a998185fad 100644 --- a/packages/expo-sensors/package.json +++ b/packages/expo-sensors/package.json @@ -45,10 +45,10 @@ "devDependencies": { "@types/invariant": "^2.2.33", "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-server/package.json b/packages/expo-server/package.json index 5a4ebbe5499bb0..42353972734b75 100644 --- a/packages/expo-server/package.json +++ b/packages/expo-server/package.json @@ -61,7 +61,7 @@ "devDependencies": { "@types/express": "^5.0.3", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "npm-run-all2": "^8.0.4", "rimraf": "^6.1.2" }, diff --git a/packages/expo-sharing/package.json b/packages/expo-sharing/package.json index 52e53aaa2af6ff..063d12502aac74 100644 --- a/packages/expo-sharing/package.json +++ b/packages/expo-sharing/package.json @@ -34,17 +34,17 @@ "license": "MIT", "homepage": "https://docs.expo.dev/versions/latest/sdk/sharing/", "dependencies": { - "@expo/plist": "0.6.0", - "@expo/config-plugins": "56.0.0", - "@expo/config-types": "56.0.0" + "@expo/plist": "workspace:^0.6.0", + "@expo/config-plugins": "workspace:^56.0.0", + "@expo/config-types": "workspace:^56.0.0" }, "devDependencies": { "@types/node": "^22.14.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-sms/package.json b/packages/expo-sms/package.json index 1f6798dcd95141..23e2fddea87ecd 100644 --- a/packages/expo-sms/package.json +++ b/packages/expo-sms/package.json @@ -34,9 +34,9 @@ }, "dependencies": {}, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-speech/package.json b/packages/expo-speech/package.json index 0885a8c84472df..7e8d922d7b49ed 100644 --- a/packages/expo-speech/package.json +++ b/packages/expo-speech/package.json @@ -36,9 +36,9 @@ }, "dependencies": {}, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-splash-screen/package.json b/packages/expo-splash-screen/package.json index f1fd2f38e01637..7dce63b3c4a9e0 100644 --- a/packages/expo-splash-screen/package.json +++ b/packages/expo-splash-screen/package.json @@ -39,18 +39,18 @@ "license": "MIT", "homepage": "https://docs.expo.dev/versions/latest/sdk/splash-screen/", "dependencies": { - "@expo/config-plugins": "56.0.0", - "@expo/image-utils": "0.9.0", + "@expo/config-plugins": "workspace:~56.0.0", + "@expo/image-utils": "workspace:^0.9.0", "xml2js": "0.6.0" }, "devDependencies": { - "@expo/plist": "0.6.0", + "@expo/plist": "workspace:*", "@types/node": "^22.14.0", "@types/xml2js": "~0.4.11", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "memfs": "^3.2.0" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-sqlite/package.json b/packages/expo-sqlite/package.json index c3a9e361255544..54313a6aa31cb7 100644 --- a/packages/expo-sqlite/package.json +++ b/packages/expo-sqlite/package.json @@ -63,11 +63,11 @@ "@types/node": "^22.14.0", "@types/react": "~19.2.0", "better-sqlite3": "^11.6.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "react-error-boundary": "^4.0.11" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-standard-web-crypto/package.json b/packages/expo-standard-web-crypto/package.json index 4eac96e66888a8..14cf0d1a373148 100644 --- a/packages/expo-standard-web-crypto/package.json +++ b/packages/expo-standard-web-crypto/package.json @@ -29,11 +29,11 @@ "author": "650 Industries, Inc.", "license": "MIT", "devDependencies": { - "expo-crypto": "56.0.0", - "expo-module-scripts": "56.0.0" + "expo-crypto": "workspace:*", + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo-crypto": "56.0.0" + "expo-crypto": "workspace:^56.0.0" }, "dependencies": {} } diff --git a/packages/expo-status-bar/package.json b/packages/expo-status-bar/package.json index 369ed1e9d35716..574d48caaf60e1 100644 --- a/packages/expo-status-bar/package.json +++ b/packages/expo-status-bar/package.json @@ -44,10 +44,10 @@ "@testing-library/react-native": "^13.3.0", "@types/node": "^22.14.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" }, diff --git a/packages/expo-store-review/package.json b/packages/expo-store-review/package.json index 6cd88e6b586653..4eda717f3ca59a 100644 --- a/packages/expo-store-review/package.json +++ b/packages/expo-store-review/package.json @@ -33,11 +33,11 @@ "homepage": "https://docs.expo.dev/versions/latest/sdk/storereview/", "dependencies": {}, "devDependencies": { - "expo-constants": "56.0.1", - "expo-module-scripts": "56.0.0" + "expo-constants": "workspace:*", + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-symbols/package.json b/packages/expo-symbols/package.json index 18cd9b8b1f0347..3d1f9a01b2daa5 100644 --- a/packages/expo-symbols/package.json +++ b/packages/expo-symbols/package.json @@ -41,13 +41,13 @@ }, "devDependencies": { "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0", - "expo-font": "56.0.1" + "expo-module-scripts": "workspace:*", + "expo-font": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*", - "expo-font": "56.0.1" + "expo-font": "workspace:*" } } diff --git a/packages/expo-system-ui/package.json b/packages/expo-system-ui/package.json index fa855ab1029e45..16a846e1b3a152 100644 --- a/packages/expo-system-ui/package.json +++ b/packages/expo-system-ui/package.json @@ -39,10 +39,10 @@ }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*", "react-native-web": "*" }, diff --git a/packages/expo-task-manager/package.json b/packages/expo-task-manager/package.json index 2b605be7010a92..9cd05face22cb8 100644 --- a/packages/expo-task-manager/package.json +++ b/packages/expo-task-manager/package.json @@ -32,14 +32,14 @@ "license": "MIT", "homepage": "https://docs.expo.dev/versions/latest/sdk/task-manager/", "dependencies": { - "unimodules-app-loader": "56.0.0" + "unimodules-app-loader": "workspace:~56.0.0" }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-test-runner/package.json b/packages/expo-test-runner/package.json index 786e3d44abb6ff..4e1a7500507edb 100644 --- a/packages/expo-test-runner/package.json +++ b/packages/expo-test-runner/package.json @@ -29,8 +29,8 @@ "@babel/core": "^7.23.7", "@types/node": "^22.14.0", "@types/node-fetch": "^2.5.12", - "eslint-config-universe": "15.1.0", - "expo-module-scripts": "56.0.0" + "eslint-config-universe": "workspace:*", + "expo-module-scripts": "workspace:*" }, "dependencies": { "@babel/runtime": "^7.23.8", diff --git a/packages/expo-tracking-transparency/package.json b/packages/expo-tracking-transparency/package.json index 980c24e99c7a5b..71449ae0b3b8f4 100644 --- a/packages/expo-tracking-transparency/package.json +++ b/packages/expo-tracking-transparency/package.json @@ -30,10 +30,10 @@ "homepage": "https://docs.expo.dev/versions/latest/sdk/tracking-transparency", "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" }, "jest": { diff --git a/packages/expo-ui/CHANGELOG.md b/packages/expo-ui/CHANGELOG.md index e1768c6ff62b66..dd25c8c1e14a6f 100644 --- a/packages/expo-ui/CHANGELOG.md +++ b/packages/expo-ui/CHANGELOG.md @@ -26,6 +26,7 @@ _This version does not introduce any user-facing changes._ ### 🎉 New features +- [android] Use `LocalContentColor` when `tint` is omitted ([#45329](https://github.com/expo/expo/pull/45329) by [@Ubax](https://github.com/Ubax)) - [universal] Added `TextInput` component that mirrors RN's `TextInput` API but routes to SwiftUI on iOS, Compose on Android, and RN's `TextInput` on web. ([#45205](https://github.com/expo/expo/pull/45205) by [@nishan](https://github.com/intergalacticspacehighway)) - [compose] Exposed extension utilities for third-party modules: `ModifierRegistry.unregister`, and re-exported `createModifier` / `createModifierWithEventListener` / `createViewModifierEventListener` from `@expo/ui/jetpack-compose/modifiers`. Exported `PrimitiveBaseProps` from `@expo/ui/jetpack-compose`. ([#45122](https://github.com/expo/expo/pull/45122) by [@nishan](https://github.com/intergalacticspacehighway)) - [android] Add `colors` prop to `HorizontalFloatingToolbar` to override the variant's default toolbar and FAB container/content colors. ([#45244](https://github.com/expo/expo/pull/45244) by [@Ubax](https://github.com/Ubax)) diff --git a/packages/expo-ui/android/src/main/java/expo/modules/ui/icon/IconView.kt b/packages/expo-ui/android/src/main/java/expo/modules/ui/icon/IconView.kt index 95fac20e59e0dd..f5bb4e5b808d20 100644 --- a/packages/expo-ui/android/src/main/java/expo/modules/ui/icon/IconView.kt +++ b/packages/expo-ui/android/src/main/java/expo/modules/ui/icon/IconView.kt @@ -7,6 +7,7 @@ import android.graphics.drawable.Drawable import android.net.Uri import androidx.compose.foundation.layout.size import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState @@ -50,6 +51,7 @@ data class Source( data class IconProps( val source: MutableState = mutableStateOf(null), val tint: MutableState = mutableStateOf(null), + val inheritTint: MutableState = mutableStateOf(true), val size: MutableState = mutableStateOf(null), val contentDescription: MutableState = mutableStateOf(null), val modifiers: MutableState = mutableStateOf(emptyList()) @@ -73,6 +75,7 @@ class IconView(context: Context, appContext: AppContext) : override fun ComposableScope.Content() { val (source) = props.source val (tint) = props.tint + val (inheritTint) = props.inheritTint val (iconSize) = props.size val (contentDescription) = props.contentDescription val (modifiers) = props.modifiers @@ -100,10 +103,12 @@ class IconView(context: Context, appContext: AppContext) : // Render icon if painter available if (painter != null) { + val resolvedTint = tint?.compose + ?: if (inheritTint) LocalContentColor.current else androidx.compose.ui.graphics.Color.Unspecified Icon( painter = painter, contentDescription = contentDescription, - tint = tint?.compose ?: androidx.compose.ui.graphics.Color.Unspecified, + tint = resolvedTint, modifier = Modifier .then(iconSize?.let { Modifier.size(it.dp) } ?: Modifier) .then(ModifierRegistry.applyModifiers(modifiers, appContext, this@Content, globalEventDispatcher)) diff --git a/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts b/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts index 6c7f39b3ca407f..5b9f3809d159ae 100644 --- a/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts +++ b/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts @@ -8,6 +8,10 @@ export type DropdownMenuItemElementColors = { textColor?: ColorValue; /** Color of the text when the menu item is disabled. */ disabledTextColor?: ColorValue; + leadingIconColor?: ColorValue; + trailingIconColor?: ColorValue; + disabledLeadingIconColor?: ColorValue; + disabledTrailingIconColor?: ColorValue; }; /** * Props of the `DropdownMenuItem` component. diff --git a/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map b/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map index 8b2c86cfa51001..d5475e98eb6fa9 100644 --- a/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map +++ b/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DropdownMenuItem.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAa7D;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,mCAAmC;IACnC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAOhC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,6BAA6B,CAAC;IAC9C;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AA4BF;;;;;GAKG;AACH,iBAAS,QAAQ,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAErD;AAED;;;;;GAKG;AACH,iBAAS,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,2CAY9D;kBAZQ,yBAAyB;;6BA9BN;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;8BAU5B;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;AAsC1D,OAAO,EAAE,yBAAyB,IAAI,gBAAgB,EAAE,CAAC"} \ No newline at end of file +{"version":3,"file":"DropdownMenuItem.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAa7D;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,mCAAmC;IACnC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,wBAAwB,CAAC,EAAE,UAAU,CAAC;IACtC,yBAAyB,CAAC,EAAE,UAAU,CAAC;CACxC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,6BAA6B,CAAC;IAC9C;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AA4BF;;;;;GAKG;AACH,iBAAS,QAAQ,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAErD;AAED;;;;;GAKG;AACH,iBAAS,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,2CAY9D;kBAZQ,yBAAyB;;6BA9BN;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;8BAU5B;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;AAsC1D,OAAO,EAAE,yBAAyB,IAAI,gBAAgB,EAAE,CAAC"} \ No newline at end of file diff --git a/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts b/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts index a738bd88783bd2..eaa3244e28d1e0 100644 --- a/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts +++ b/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts @@ -5,10 +5,18 @@ export type HorizontalFloatingToolbarColors = { * Color of the toolbar container (background). */ toolbarContainerColor?: ColorValue; + /** + * Color of the toolbar content (icons/text). + */ + toolbarContentColor?: ColorValue; /** * Color of the floating action button container (background). */ fabContainerColor?: ColorValue; + /** + * Color of the floating action button content (icon). + */ + fabContentColor?: ColorValue; }; export type HorizontalFloatingToolbarProps = { /** diff --git a/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts.map b/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts.map index 36256da7aae9a7..690d48b8820900 100644 --- a/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts.map +++ b/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/HorizontalFloatingToolbar/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,MAAM,+BAA+B,GAAG;IAC5C;;OAEG;IACH,qBAAqB,CAAC,EAAE,UAAU,CAAC;IAOnC;;OAEG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAMhC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C;;;OAGG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAEjC;;;OAGG;IACH,MAAM,CAAC,EAAE,+BAA+B,CAAC;IAEzC;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kDAAkD,GAAG;IAC/D;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAmBF;;;GAGG;AACH,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,kDAAkD,2CAO1D;AAaD;;;GAGG;AACH,iBAAS,yBAAyB,CAAC,KAAK,EAAE,8BAA8B,2CAMvE;kBANQ,yBAAyB;;;AAUlC,OAAO,EAAE,yBAAyB,EAAE,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/HorizontalFloatingToolbar/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,MAAM,+BAA+B,GAAG;IAC5C;;OAEG;IACH,qBAAqB,CAAC,EAAE,UAAU,CAAC;IAEnC;;OAEG;IACH,mBAAmB,CAAC,EAAE,UAAU,CAAC;IAEjC;;OAEG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAE/B;;OAEG;IACH,eAAe,CAAC,EAAE,UAAU,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C;;;OAGG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAEjC;;;OAGG;IACH,MAAM,CAAC,EAAE,+BAA+B,CAAC;IAEzC;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kDAAkD,GAAG;IAC/D;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAmBF;;;GAGG;AACH,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,kDAAkD,2CAO1D;AAaD;;;GAGG;AACH,iBAAS,yBAAyB,CAAC,KAAK,EAAE,8BAA8B,2CAMvE;kBANQ,yBAAyB;;;AAUlC,OAAO,EAAE,yBAAyB,EAAE,CAAC"} \ No newline at end of file diff --git a/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts b/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts index 52280d5db13a54..93b234f43e5667 100644 --- a/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts +++ b/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts @@ -1,6 +1,7 @@ import type { Ref } from 'react'; import { type ModifierConfig } from '../../types'; -import type { PaddingValuesRecord } from '../Carousel'; +import { type PaddingValuesRecord } from '../Carousel'; +export type { PaddingValuesRecord }; export type HorizontalPagerHandle = { /** * Mirrors Compose's `PagerState.animateScrollToPage`. Resolves when the diff --git a/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts.map b/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts.map index 11503052aab0df..6f69c7a0e2c854 100644 --- a/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts.map +++ b/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/HorizontalPager/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD;;OAEG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACjC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC9C;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AA6BF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAE1D"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/HorizontalPager/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD;;OAEG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACjC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC9C;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AA6BF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAE1D"} \ No newline at end of file diff --git a/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts b/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts index d9324371761aa5..6d9163e5bc26a6 100644 --- a/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts +++ b/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts @@ -13,16 +13,22 @@ export type IconProps = { */ source: ImageSourcePropType; /** - * The tint color to apply to the icon. - * Accepts hex strings, named colors, or RGB arrays. + * The tint color to apply to the icon. Accepts hex strings, named colors, + * or RGB arrays. + * + * - When omitted, the icon inherits the color from the surrounding + * `LocalContentColor` (e.g. the toolbar/FAB content color). + * - When set to `null`, no tint is applied — the icon is drawn with its + * original colors (`Color.Unspecified`). Use this for multicolored icons. * * @example * ```tsx * * + * * ``` */ - tint?: ColorValue; + tint?: ColorValue | null; /** * The size of the icon in density-independent pixels (dp). * If not specified, the icon will use its intrinsic size. @@ -66,8 +72,10 @@ export type IconProps = { /** * @hidden */ -export type NativeIconProps = Omit & { +export type NativeIconProps = Omit & { source: ImageResolvedAssetSource; + tint?: ColorValue; + inheritTint: boolean; }; /** * Displays an icon from an XML vector drawable or other image source. diff --git a/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts.map b/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts.map index 35f3ce3fb4b38e..72f4014af2168b 100644 --- a/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts.map +++ b/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/Icon/index.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAE9B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,MAAM,SAAS,GAAG;IACtB;;;;;;;;;OASG;IACH,MAAM,EAAE,mBAAmB,CAAC;IAE5B;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG;IACxD,MAAM,EAAE,wBAAwB,CAAC;CAClC,CAAC;AAkBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,2CAEpC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/Icon/index.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAE9B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,MAAM,SAAS,GAAG;IACtB;;;;;;;;;OASG;IACH,MAAM,EAAE,mBAAmB,CAAC;IAE5B;;;;;;;;;;;;;;;OAeG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAEzB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC,GAAG;IACjE,MAAM,EAAE,wBAAwB,CAAC;IACjC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAuBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,2CAEpC"} \ No newline at end of file diff --git a/packages/expo-ui/build/jetpack-compose/index.d.ts b/packages/expo-ui/build/jetpack-compose/index.d.ts index 6809acf25b4cf7..895a000fbed4f5 100644 --- a/packages/expo-ui/build/jetpack-compose/index.d.ts +++ b/packages/expo-ui/build/jetpack-compose/index.d.ts @@ -31,7 +31,7 @@ export * from './ToggleButton'; export * from './Shape'; export * from './ModalBottomSheet'; export * from './Carousel'; -export * from './HorizontalPager'; +export { HorizontalPager, type HorizontalPagerHandle, type HorizontalPagerProps, } from './HorizontalPager'; export * from './SearchBar'; export * from './DockedSearchBar'; export * from './HorizontalFloatingToolbar'; diff --git a/packages/expo-ui/build/jetpack-compose/index.d.ts.map b/packages/expo-ui/build/jetpack-compose/index.d.ts.map index 73089bfa30c5b8..8979ce5252c874 100644 --- a/packages/expo-ui/build/jetpack-compose/index.d.ts.map +++ b/packages/expo-ui/build/jetpack-compose/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jetpack-compose/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uCAAuC,CAAC;AAE/C,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9C,cAAc,WAAW,CAAC;AAE1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jetpack-compose/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uCAAuC,CAAC;AAE/C,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9C,cAAc,WAAW,CAAC;AAE1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"} \ No newline at end of file diff --git a/packages/expo-ui/package.json b/packages/expo-ui/package.json index 6a565f34a6f294..5ff1277a3a37a7 100644 --- a/packages/expo-ui/package.json +++ b/packages/expo-ui/package.json @@ -85,7 +85,7 @@ "@types/babel__core": "^7.20.5", "@types/node": "^22.14.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "react-native-reanimated": "4.3.0", "react-native-worklets": "0.8.3" }, @@ -94,7 +94,7 @@ }, "peerDependencies": { "@babel/core": "*", - "expo": "56.0.0-preview.1", + "expo": "workspace:*", "react": "*", "react-dom": "*", "react-native": "*", diff --git a/packages/expo-ui/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx b/packages/expo-ui/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx index c3e731f75e8eb2..d7b68fe55794e5 100644 --- a/packages/expo-ui/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx +++ b/packages/expo-ui/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx @@ -22,12 +22,10 @@ export type DropdownMenuItemElementColors = { textColor?: ColorValue; /** Color of the text when the menu item is disabled. */ disabledTextColor?: ColorValue; - // TODO: At the moment IconView's tint color defaults to Color.Unspecified instead of LocalContentColor.current. - // Thus the color override will not work for icons. At the moment icon color can only be set directly in IconView. - // leadingIconColor?: ColorValue; - // trailingIconColor?: ColorValue; - // disabledLeadingIconColor?: ColorValue; - // disabledTrailingIconColor?: ColorValue; + leadingIconColor?: ColorValue; + trailingIconColor?: ColorValue; + disabledLeadingIconColor?: ColorValue; + disabledTrailingIconColor?: ColorValue; }; /** diff --git a/packages/expo-ui/src/jetpack-compose/HorizontalFloatingToolbar/index.tsx b/packages/expo-ui/src/jetpack-compose/HorizontalFloatingToolbar/index.tsx index 3e09cf0d7ab654..2e12fd0a7c9418 100644 --- a/packages/expo-ui/src/jetpack-compose/HorizontalFloatingToolbar/index.tsx +++ b/packages/expo-ui/src/jetpack-compose/HorizontalFloatingToolbar/index.tsx @@ -10,20 +10,20 @@ export type HorizontalFloatingToolbarColors = { */ toolbarContainerColor?: ColorValue; - // Color of the toolbar content (icons/text). - // TODO: At the moment IconView's tint color defaults to Color.Unspecified instead of LocalContentColor.current. - // Thus the color override will not work. - // toolbarContentColor?: ColorValue; + /** + * Color of the toolbar content (icons/text). + */ + toolbarContentColor?: ColorValue; /** * Color of the floating action button container (background). */ fabContainerColor?: ColorValue; - // Color of the floating action button content (icon). - // TODO: At the moment IconView's tint color defaults to Color.Unspecified instead of LocalContentColor.current. - // Thus the color override will not work. - // fabContentColor?: ColorValue; + /** + * Color of the floating action button content (icon). + */ + fabContentColor?: ColorValue; }; export type HorizontalFloatingToolbarProps = { diff --git a/packages/expo-ui/src/jetpack-compose/HorizontalPager/index.tsx b/packages/expo-ui/src/jetpack-compose/HorizontalPager/index.tsx index cc379baa5651cd..36e13aa9075215 100644 --- a/packages/expo-ui/src/jetpack-compose/HorizontalPager/index.tsx +++ b/packages/expo-ui/src/jetpack-compose/HorizontalPager/index.tsx @@ -2,9 +2,11 @@ import { requireNativeView } from 'expo'; import type { Ref } from 'react'; import { type ModifierConfig, type ViewEvent } from '../../types'; -import type { PaddingValuesRecord } from '../Carousel'; +import { type PaddingValuesRecord } from '../Carousel'; import { createViewModifierEventListener } from '../modifiers/utils'; +export type { PaddingValuesRecord }; + export type HorizontalPagerHandle = { /** * Mirrors Compose's `PagerState.animateScrollToPage`. Resolves when the diff --git a/packages/expo-ui/src/jetpack-compose/Icon/index.tsx b/packages/expo-ui/src/jetpack-compose/Icon/index.tsx index 684983e5613208..29887f84675315 100644 --- a/packages/expo-ui/src/jetpack-compose/Icon/index.tsx +++ b/packages/expo-ui/src/jetpack-compose/Icon/index.tsx @@ -23,16 +23,22 @@ export type IconProps = { source: ImageSourcePropType; /** - * The tint color to apply to the icon. - * Accepts hex strings, named colors, or RGB arrays. + * The tint color to apply to the icon. Accepts hex strings, named colors, + * or RGB arrays. + * + * - When omitted, the icon inherits the color from the surrounding + * `LocalContentColor` (e.g. the toolbar/FAB content color). + * - When set to `null`, no tint is applied — the icon is drawn with its + * original colors (`Color.Unspecified`). Use this for multicolored icons. * * @example * ```tsx * * + * * ``` */ - tint?: ColorValue; + tint?: ColorValue | null; /** * The size of the icon in density-independent pixels (dp). @@ -80,8 +86,10 @@ export type IconProps = { /** * @hidden */ -export type NativeIconProps = Omit & { +export type NativeIconProps = Omit & { source: ImageResolvedAssetSource; + tint?: ColorValue; + inheritTint: boolean; }; const IconNativeView: React.ComponentType = requireNativeView( @@ -90,12 +98,17 @@ const IconNativeView: React.ComponentType = requireNativeView( ); function transformIconProps(props: IconProps): NativeIconProps { - const { source, modifiers, ...restProps } = props; + const { source, modifiers, tint, ...restProps } = props; + // Differentiate "tint not provided" (inherit `LocalContentColor`) from + // "tint explicitly null" (no tint, draw original colors). + const tintIsExplicitlyNull = 'tint' in props && tint === null; return { modifiers, ...(modifiers ? createViewModifierEventListener(modifiers) : undefined), ...restProps, + tint: tint ?? undefined, + inheritTint: !tintIsExplicitlyNull, source: Image.resolveAssetSource(source), }; } diff --git a/packages/expo-ui/src/jetpack-compose/index.ts b/packages/expo-ui/src/jetpack-compose/index.ts index b9f5da9ea62683..7cf0055ac2b5e6 100644 --- a/packages/expo-ui/src/jetpack-compose/index.ts +++ b/packages/expo-ui/src/jetpack-compose/index.ts @@ -32,7 +32,11 @@ export * from './ToggleButton'; export * from './Shape'; export * from './ModalBottomSheet'; export * from './Carousel'; -export * from './HorizontalPager'; +export { + HorizontalPager, + type HorizontalPagerHandle, + type HorizontalPagerProps, +} from './HorizontalPager'; export * from './SearchBar'; export * from './DockedSearchBar'; export * from './HorizontalFloatingToolbar'; diff --git a/packages/expo-updates-interface/package.json b/packages/expo-updates-interface/package.json index 612ddb89832fed..fcb33aff675dcc 100644 --- a/packages/expo-updates-interface/package.json +++ b/packages/expo-updates-interface/package.json @@ -21,6 +21,6 @@ "homepage": "https://docs.expo.dev", "dependencies": {}, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-updates/package.json b/packages/expo-updates/package.json index ad968de2008d8e..8308584b75c8c6 100644 --- a/packages/expo-updates/package.json +++ b/packages/expo-updates/package.json @@ -39,15 +39,15 @@ }, "dependencies": { "@expo/code-signing-certificates": "^0.0.6", - "@expo/plist": "0.6.0", + "@expo/plist": "workspace:^0.6.0", "@expo/spawn-async": "^1.7.2", "arg": "^4.1.0", "chalk": "^4.1.2", "debug": "^4.3.4", - "expo-eas-client": "56.0.0", - "expo-manifests": "56.0.1", - "expo-structured-headers": "56.0.0", - "expo-updates-interface": "56.0.1", + "expo-eas-client": "workspace:~56.0.0", + "expo-manifests": "workspace:~56.0.1", + "expo-structured-headers": "workspace:~56.0.0", + "expo-updates-interface": "workspace:~56.0.1", "getenv": "^2.0.0", "glob": "^13.0.0", "ignore": "^5.3.1", @@ -55,7 +55,7 @@ "resolve-from": "^5.0.0" }, "devDependencies": { - "@expo/metro-config": "56.0.1", + "@expo/metro-config": "workspace:*", "@testing-library/react-native": "^13.3.0", "@types/debug": "^4.1.7", "@types/getenv": "^1.0.0", @@ -65,7 +65,7 @@ "@types/picomatch": "^4.0.0", "@types/react": "~19.2.0", "@vercel/ncc": "^0.38.3", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "express": "^5.1.0", "form-data": "^4.0.4", "memfs": "^3.2.0", @@ -74,8 +74,8 @@ "xstate": "^4.37.2" }, "peerDependencies": { - "expo": "56.0.0-preview.2", - "expo-dev-client": "56.0.0", + "expo": "workspace:*", + "expo-dev-client": "workspace:*", "react": "*", "react-native": "*" }, diff --git a/packages/expo-video-thumbnails/package.json b/packages/expo-video-thumbnails/package.json index 809fd61cb84f19..37524118f4e06c 100644 --- a/packages/expo-video-thumbnails/package.json +++ b/packages/expo-video-thumbnails/package.json @@ -33,9 +33,9 @@ "homepage": "https://docs.expo.dev/versions/latest/sdk/video-thumbnails/", "dependencies": {}, "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/expo-video/package.json b/packages/expo-video/package.json index 77d5fe84f0db4c..75a016d70dcbab 100644 --- a/packages/expo-video/package.json +++ b/packages/expo-video/package.json @@ -32,10 +32,10 @@ "devDependencies": { "@types/node": "^22.14.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo-web-browser/package.json b/packages/expo-web-browser/package.json index 10d57d6f829155..7ebb1391898752 100644 --- a/packages/expo-web-browser/package.json +++ b/packages/expo-web-browser/package.json @@ -37,10 +37,10 @@ }, "devDependencies": { "@types/node": "^22.14.0", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react-native": "*" } } diff --git a/packages/expo-widgets/package.json b/packages/expo-widgets/package.json index 72d1ab1a6a4b34..00e0b667bd5e65 100644 --- a/packages/expo-widgets/package.json +++ b/packages/expo-widgets/package.json @@ -31,19 +31,19 @@ "license": "MIT", "homepage": "https://docs.expo.dev/versions/latest/sdk/widgets/", "dependencies": { - "@expo/plist": "0.6.0", - "@expo/ui": "56.0.1" + "@expo/plist": "workspace:^0.6.0", + "@expo/ui": "workspace:~56.0.1" }, "devDependencies": { "@expo/spawn-async": "^1.7.2", "@types/node": "^22.14.0", "@types/react": "~19.2.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "react-native": "0.85.2", "resolve-workspace-root": "^2.0.0" }, "peerDependencies": { - "expo": "56.0.0-preview.2", + "expo": "workspace:*", "react": "*", "react-native": "*" } diff --git a/packages/expo/package.json b/packages/expo/package.json index 282d09d3b9daf6..97d7cd8cce2ef7 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -75,36 +75,36 @@ "homepage": "https://github.com/expo/expo/tree/main/packages/expo", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "56.0.2", - "@expo/config": "56.0.0", - "@expo/config-plugins": "56.0.0", - "@expo/devtools": "56.0.0", - "@expo/dom-webview": "56.0.1", - "@expo/fingerprint": "0.17.1", - "@expo/local-build-cache-provider": "56.0.0", - "@expo/log-box": "56.0.1", + "@expo/cli": "workspace:56.0.2", + "@expo/config": "workspace:~56.0.0", + "@expo/config-plugins": "workspace:~56.0.0", + "@expo/devtools": "workspace:56.0.0", + "@expo/dom-webview": "workspace:~56.0.1", + "@expo/fingerprint": "workspace:0.17.1", + "@expo/local-build-cache-provider": "workspace:56.0.0", + "@expo/log-box": "workspace:56.0.1", "@expo/metro": "~56.0.0", - "@expo/metro-config": "56.0.1", + "@expo/metro-config": "workspace:56.0.1", "@expo/vector-icons": "^15.0.2", "@ungap/structured-clone": "^1.3.0", - "babel-preset-expo": "56.0.1", - "expo-asset": "56.0.1", - "expo-constants": "56.0.1", - "expo-file-system": "56.0.1", - "expo-font": "56.0.1", - "expo-keep-awake": "56.0.1", - "expo-modules-autolinking": "56.0.0", - "expo-modules-core": "56.0.0", + "babel-preset-expo": "workspace:~56.0.1", + "expo-asset": "workspace:~56.0.1", + "expo-constants": "workspace:~56.0.1", + "expo-file-system": "workspace:~56.0.1", + "expo-font": "workspace:~56.0.1", + "expo-keep-awake": "workspace:~56.0.1", + "expo-modules-autolinking": "workspace:56.0.0", + "expo-modules-core": "workspace:56.0.0", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-minimum": "^0.1.1" }, "devDependencies": { - "@expo/dom-webview": "56.0.1", - "@expo/metro-runtime": "56.0.1", + "@expo/dom-webview": "workspace:*", + "@expo/metro-runtime": "workspace:*", "@types/node": "^22.14.0", "@types/react": "~19.2.0", - "expo-updates": "56.0.1", + "expo-updates": "workspace:*", "npm-run-all2": "^8.0.4", "react": "19.2.3", "react-dom": "19.2.3", @@ -113,8 +113,8 @@ "web-streams-polyfill": "^3.3.2" }, "peerDependencies": { - "@expo/dom-webview": "56.0.1", - "@expo/metro-runtime": "56.0.1", + "@expo/dom-webview": "workspace:*", + "@expo/metro-runtime": "workspace:*", "react": "*", "react-native": "*", "react-dom": "*", diff --git a/packages/html-elements/package.json b/packages/html-elements/package.json index 992d2906997d87..a389249ee96da7 100644 --- a/packages/html-elements/package.json +++ b/packages/html-elements/package.json @@ -74,6 +74,6 @@ "@testing-library/react": "^16.3.0", "@testing-library/react-native": "^13.3.0", "@types/react": "~19.2.2", - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" } } diff --git a/packages/install-expo-modules/package.json b/packages/install-expo-modules/package.json index 53575d6e85b2cf..bffd1db7fca9b9 100644 --- a/packages/install-expo-modules/package.json +++ b/packages/install-expo-modules/package.json @@ -36,15 +36,15 @@ "directory": "packages/install-expo-modules" }, "devDependencies": { - "@expo/config": "56.0.0", - "@expo/config-plugins": "56.0.0", - "@expo/package-manager": "1.11.0", + "@expo/config": "workspace:*", + "@expo/config-plugins": "workspace:*", + "@expo/package-manager": "workspace:*", "@expo/spawn-async": "^1.7.2", "@types/prompts": "^2.0.6", "@types/semver": "^7.0.0", "chalk": "^4.1.2", "commander": "^12.1.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "glob": "^13.0.0", "prompts": "^2.3.2", "resolve-from": "^5.0.0", diff --git a/packages/patch-project/package.json b/packages/patch-project/package.json index 2a5f9ff6159c35..48f028de5e5962 100644 --- a/packages/patch-project/package.json +++ b/packages/patch-project/package.json @@ -41,17 +41,17 @@ }, "homepage": "https://github.com/expo/expo/tree/main/packages/patch-project#readme", "devDependencies": { - "@expo/cli": "56.0.2", + "@expo/cli": "workspace:*", "@types/debug": "^4.1.5", "@types/getenv": "^1.0.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "memfs": "^3.2.0" }, "dependencies": { "@bacons/xcode": "1.0.0-alpha.24", - "@expo/config": "56.0.0", - "@expo/config-plugins": "56.0.0", - "@expo/env": "2.2.0", + "@expo/config": "workspace:~56.0.0", + "@expo/config-plugins": "workspace:~56.0.0", + "@expo/env": "workspace:~2.2.0", "@expo/spawn-async": "^1.7.2", "arg": "5.0.2", "chalk": "^4.0.0", @@ -61,6 +61,6 @@ "resolve-from": "^5.0.0" }, "peerDependencies": { - "expo": "56.0.0-preview.2" + "expo": "workspace:*" } } diff --git a/packages/pod-install/package.json b/packages/pod-install/package.json index d7bd59e5a75bfd..2c5cc49e04c204 100644 --- a/packages/pod-install/package.json +++ b/packages/pod-install/package.json @@ -34,10 +34,10 @@ "url": "https://github.com/expo/expo/issues" }, "devDependencies": { - "@expo/package-manager": "1.11.0", + "@expo/package-manager": "workspace:*", "chalk": "^4.0.0", "commander": "^12.1.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "terminal-link": "^2.1.1", "update-check": "^1.5.4" } diff --git a/packages/unimodules-app-loader/package.json b/packages/unimodules-app-loader/package.json index 66fce4e638d109..09549d8826d8f7 100644 --- a/packages/unimodules-app-loader/package.json +++ b/packages/unimodules-app-loader/package.json @@ -19,6 +19,6 @@ "license": "MIT", "homepage": "https://github.com/expo/expo/tree/main/packages/unimodules-app-loader", "devDependencies": { - "expo-module-scripts": "56.0.0" + "expo-module-scripts": "workspace:*" } } diff --git a/packages/uri-scheme/package.json b/packages/uri-scheme/package.json index 088b1bf7724aa3..285e08c7409b90 100644 --- a/packages/uri-scheme/package.json +++ b/packages/uri-scheme/package.json @@ -36,13 +36,13 @@ "prepublishOnly": "pnpm run clean && pnpm run build:prod" }, "devDependencies": { - "@expo/config-plugins": "56.0.0", - "@expo/plist": "0.6.0", + "@expo/config-plugins": "workspace:*", + "@expo/plist": "workspace:*", "@expo/spawn-async": "^1.7.2", "@types/prompts": "^2.0.6", "chalk": "^4.0.0", "commander": "^12.1.0", - "expo-module-scripts": "56.0.0", + "expo-module-scripts": "workspace:*", "glob": "^13.0.0", "prompts": "^2.3.2", "update-check": "^1.5.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28a8ef1c17916a..a3974e2303ea18 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1320,8 +1320,8 @@ importers: apps/observe-tester: dependencies: '@expo/html-elements': - specifier: ^0.13.7 - version: 0.13.8(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.85.2(@babel/core@7.29.0)(@react-native/jest-preset@0.85.2(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.2(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: ^56.0.0 + version: link:../../packages/html-elements '@expo/styleguide-base': specifier: ^1.0.1 version: 1.0.1(react@19.2.3) @@ -1780,58 +1780,58 @@ importers: specifier: ^0.0.6 version: 0.0.6 '@expo/config': - specifier: workspace:~55.0.8 + specifier: workspace:~56.0.0 version: link:../config '@expo/config-plugins': - specifier: workspace:~55.0.6 + specifier: workspace:~56.0.0 version: link:../config-plugins '@expo/devcert': specifier: ^1.2.1 version: 1.2.1 '@expo/env': - specifier: workspace:~2.1.1 + specifier: workspace:~2.2.0 version: link:../env '@expo/image-utils': - specifier: workspace:^0.8.12 + specifier: workspace:^0.9.0 version: link:../image-utils '@expo/inline-modules': - specifier: workspace:0.0.1 + specifier: workspace:0.0.2 version: link:../inline-modules '@expo/json-file': - specifier: workspace:^10.0.12 + specifier: workspace:^10.1.0 version: link:../json-file '@expo/log-box': - specifier: workspace:55.0.7 + specifier: workspace:56.0.1 version: link:../log-box '@expo/metro': specifier: ~56.0.0 version: 56.0.0 '@expo/metro-config': - specifier: workspace:~55.0.9 + specifier: workspace:~56.0.1 version: link:../metro-config '@expo/metro-file-map': - specifier: workspace:55.0.0-0 + specifier: workspace:56.0.0-0 version: link:../metro-file-map '@expo/osascript': - specifier: workspace:^2.4.2 + specifier: workspace:^2.5.0 version: link:../osascript '@expo/package-manager': - specifier: workspace:^1.10.3 + specifier: workspace:^1.11.0 version: link:../package-manager '@expo/plist': - specifier: workspace:^0.5.2 + specifier: workspace:^0.6.0 version: link:../plist '@expo/prebuild-config': - specifier: workspace:^55.0.7 + specifier: workspace:^56.0.0 version: link:../prebuild-config '@expo/require-utils': - specifier: workspace:^55.0.2 + specifier: workspace:^56.0.0 version: link:../require-utils '@expo/router-server': - specifier: workspace:^55.0.8 + specifier: workspace:^56.0.1 version: link:../router-server '@expo/schema-utils': - specifier: workspace:^55.0.2 + specifier: workspace:^56.0.0 version: link:../schema-utils '@expo/spawn-async': specifier: ^1.7.2 @@ -1885,7 +1885,7 @@ importers: specifier: workspace:* version: link:../../expo-router expo-server: - specifier: workspace:^55.0.5 + specifier: workspace:^56.0.0 version: link:../../expo-server fetch-nodeshim: specifier: ^0.4.10 @@ -2102,16 +2102,16 @@ importers: packages/@expo/config: dependencies: '@expo/config-plugins': - specifier: workspace:~55.0.6 + specifier: workspace:~56.0.0 version: link:../config-plugins '@expo/config-types': - specifier: workspace:^55.0.5 + specifier: workspace:^56.0.0 version: link:../config-types '@expo/json-file': - specifier: workspace:^10.0.12 + specifier: workspace:^10.1.0 version: link:../json-file '@expo/require-utils': - specifier: workspace:^55.0.2 + specifier: workspace:^56.0.0 version: link:../require-utils deepmerge: specifier: ^4.3.1 @@ -2151,13 +2151,13 @@ importers: packages/@expo/config-plugins: dependencies: '@expo/config-types': - specifier: workspace:^55.0.5 + specifier: workspace:^56.0.0 version: link:../config-types '@expo/json-file': - specifier: workspace:~10.0.12 + specifier: workspace:~10.1.0 version: link:../json-file '@expo/plist': - specifier: workspace:^0.5.2 + specifier: workspace:^0.6.0 version: link:../plist '@expo/sdk-runtime-versions': specifier: ^1.0.0 @@ -2299,7 +2299,7 @@ importers: packages/@expo/fingerprint: dependencies: '@expo/env': - specifier: workspace:^2.0.11 + specifier: workspace:^2.2.0 version: link:../env '@expo/spawn-async': specifier: ^1.7.2 @@ -2363,7 +2363,7 @@ importers: packages/@expo/image-utils: dependencies: '@expo/require-utils': - specifier: workspace:^55.0.2 + specifier: workspace:^56.0.0 version: link:../require-utils '@expo/spawn-async': specifier: ^1.7.2 @@ -2403,7 +2403,7 @@ importers: packages/@expo/inline-modules: dependencies: '@expo/config-plugins': - specifier: workspace:~55.0.6 + specifier: workspace:~56.0.0 version: link:../config-plugins devDependencies: '@types/jest': @@ -2444,7 +2444,7 @@ importers: packages/@expo/local-build-cache-provider: dependencies: '@expo/config': - specifier: workspace:~55.0.8 + specifier: workspace:~56.0.0 version: link:../config chalk: specifier: ^4.1.2 @@ -2463,7 +2463,7 @@ importers: packages/@expo/log-box: dependencies: '@expo/dom-webview': - specifier: workspace:^55.0.3 + specifier: workspace:^56.0.1 version: link:../dom-webview anser: specifier: ^1.4.9 @@ -2524,13 +2524,13 @@ importers: specifier: ^7.20.5 version: 7.29.1 '@expo/config': - specifier: workspace:~55.0.8 + specifier: workspace:~56.0.0 version: link:../config '@expo/env': - specifier: workspace:~2.1.1 + specifier: workspace:~2.2.0 version: link:../env '@expo/json-file': - specifier: workspace:~10.0.12 + specifier: workspace:~10.1.0 version: link:../json-file '@expo/metro': specifier: ~56.0.0 @@ -2655,7 +2655,7 @@ importers: packages/@expo/metro-runtime: dependencies: '@expo/log-box': - specifier: workspace:55.0.7 + specifier: workspace:56.0.1 version: link:../log-box anser: specifier: ^1.4.9 @@ -2708,7 +2708,7 @@ importers: packages/@expo/package-manager: dependencies: '@expo/json-file': - specifier: workspace:^10.0.12 + specifier: workspace:^10.1.0 version: link:../json-file '@expo/spawn-async': specifier: ^1.7.2 @@ -2774,19 +2774,19 @@ importers: packages/@expo/prebuild-config: dependencies: '@expo/config': - specifier: workspace:~55.0.8 + specifier: workspace:~56.0.0 version: link:../config '@expo/config-plugins': - specifier: workspace:~55.0.6 + specifier: workspace:~56.0.0 version: link:../config-plugins '@expo/config-types': - specifier: workspace:^55.0.5 + specifier: workspace:^56.0.0 version: link:../config-types '@expo/image-utils': - specifier: workspace:^0.8.12 + specifier: workspace:^0.9.0 version: link:../image-utils '@expo/json-file': - specifier: workspace:^10.0.12 + specifier: workspace:^10.1.0 version: link:../json-file '@react-native/normalize-colors': specifier: 0.85.2 @@ -2795,7 +2795,7 @@ importers: specifier: ^4.3.1 version: 4.4.3 expo-modules-autolinking: - specifier: workspace:~55.0.8 + specifier: workspace:~56.0.0 version: link:../../expo-modules-autolinking resolve-from: specifier: ^5.0.0 @@ -2860,7 +2860,7 @@ importers: packages/@expo/router-server: dependencies: '@expo/metro-runtime': - specifier: workspace:^55.0.6 + specifier: workspace:^56.0.1 version: link:../metro-runtime debug: specifier: ^4.3.4 @@ -2869,16 +2869,16 @@ importers: specifier: workspace:* version: link:../../expo expo-constants: - specifier: workspace:^55.0.7 + specifier: workspace:^56.0.1 version: link:../../expo-constants expo-font: - specifier: workspace:^55.0.4 + specifier: workspace:^56.0.1 version: link:../../expo-font expo-router: specifier: workspace:* version: link:../../expo-router expo-server: - specifier: workspace:^55.0.5 + specifier: workspace:^56.0.0 version: link:../../expo-server react: specifier: 19.2.3 @@ -3090,7 +3090,7 @@ importers: specifier: workspace:* version: link:../expo expo-widgets: - specifier: workspace:^55.0.1 + specifier: workspace:^56.0.1 version: link:../expo-widgets devDependencies: '@babel/core': @@ -3302,7 +3302,7 @@ importers: specifier: ^3.6.3 version: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-expo: - specifier: workspace:^1.0.0 + specifier: workspace:^1.0.1 version: link:../eslint-plugin-expo eslint-plugin-import: specifier: ^2.30.0 @@ -3428,34 +3428,34 @@ importers: specifier: ^7.20.0 version: 7.29.2 '@expo/cli': - specifier: workspace:55.0.12 + specifier: workspace:56.0.2 version: link:../@expo/cli '@expo/config': - specifier: workspace:~55.0.8 + specifier: workspace:~56.0.0 version: link:../@expo/config '@expo/config-plugins': - specifier: workspace:~55.0.6 + specifier: workspace:~56.0.0 version: link:../@expo/config-plugins '@expo/devtools': - specifier: workspace:55.0.2 + specifier: workspace:56.0.0 version: link:../@expo/devtools '@expo/dom-webview': - specifier: workspace:~55.0.3 + specifier: workspace:~56.0.1 version: link:../@expo/dom-webview '@expo/fingerprint': - specifier: workspace:0.16.5 + specifier: workspace:0.17.1 version: link:../@expo/fingerprint '@expo/local-build-cache-provider': - specifier: workspace:55.0.6 + specifier: workspace:56.0.0 version: link:../@expo/local-build-cache-provider '@expo/log-box': - specifier: workspace:55.0.7 + specifier: workspace:56.0.1 version: link:../@expo/log-box '@expo/metro': specifier: ~56.0.0 version: 56.0.0 '@expo/metro-config': - specifier: workspace:55.0.9 + specifier: workspace:56.0.1 version: link:../@expo/metro-config '@expo/vector-icons': specifier: ^15.0.2 @@ -3464,28 +3464,28 @@ importers: specifier: ^1.3.0 version: 1.3.0 babel-preset-expo: - specifier: workspace:~55.0.8 + specifier: workspace:~56.0.1 version: link:../babel-preset-expo expo-asset: - specifier: workspace:~55.0.7 + specifier: workspace:~56.0.1 version: link:../expo-asset expo-constants: - specifier: workspace:~55.0.7 + specifier: workspace:~56.0.1 version: link:../expo-constants expo-file-system: - specifier: workspace:~55.0.9 + specifier: workspace:~56.0.1 version: link:../expo-file-system expo-font: - specifier: workspace:~55.0.4 + specifier: workspace:~56.0.1 version: link:../expo-font expo-keep-awake: - specifier: workspace:~55.0.4 + specifier: workspace:~56.0.1 version: link:../expo-keep-awake expo-modules-autolinking: - specifier: workspace:55.0.8 + specifier: workspace:56.0.0 version: link:../expo-modules-autolinking expo-modules-core: - specifier: workspace:55.0.12 + specifier: workspace:56.0.0 version: link:../expo-modules-core pretty-format: specifier: ^29.7.0 @@ -3566,7 +3566,7 @@ importers: specifier: workspace:* version: link:../expo expo-updates-interface: - specifier: workspace:~55.1.3 + specifier: workspace:~56.0.1 version: link:../expo-updates-interface react: specifier: 19.2.3 @@ -3617,13 +3617,13 @@ importers: packages/expo-asset: dependencies: '@expo/image-utils': - specifier: workspace:^0.8.12 + specifier: workspace:^0.9.0 version: link:../@expo/image-utils expo: specifier: workspace:* version: link:../expo expo-constants: - specifier: workspace:~55.0.7 + specifier: workspace:~56.0.1 version: link:../expo-constants react: specifier: 19.2.3 @@ -3676,19 +3676,19 @@ importers: packages/expo-auth-session: dependencies: expo-application: - specifier: workspace:~55.0.8 + specifier: workspace:~56.0.0 version: link:../expo-application expo-constants: - specifier: workspace:~55.0.7 + specifier: workspace:~56.0.1 version: link:../expo-constants expo-crypto: - specifier: workspace:~55.0.8 + specifier: workspace:~56.0.0 version: link:../expo-crypto expo-linking: - specifier: workspace:~55.0.7 + specifier: workspace:~56.0.0 version: link:../expo-linking expo-web-browser: - specifier: workspace:~55.0.9 + specifier: workspace:~56.0.1 version: link:../expo-web-browser invariant: specifier: ^2.2.4 @@ -3716,7 +3716,7 @@ importers: specifier: workspace:* version: link:../expo expo-task-manager: - specifier: workspace:~55.0.9 + specifier: workspace:~56.0.0 version: link:../expo-task-manager devDependencies: '@types/node': @@ -3732,7 +3732,7 @@ importers: specifier: workspace:* version: link:../expo expo-task-manager: - specifier: workspace:~55.0.9 + specifier: workspace:~56.0.0 version: link:../expo-task-manager devDependencies: '@types/node': @@ -3821,7 +3821,7 @@ importers: packages/expo-brownfield: dependencies: '@expo/env': - specifier: workspace:~2.1.0 + specifier: workspace:~2.2.0 version: link:../@expo/env chalk: specifier: ^4.1.2 @@ -3836,10 +3836,10 @@ importers: specifier: workspace:* version: link:../expo expo-build-properties: - specifier: workspace:~55.0.9 + specifier: workspace:~56.0.0 version: link:../expo-build-properties expo-manifests: - specifier: workspace:~55.0.9 + specifier: workspace:~56.0.1 version: link:../expo-manifests ora: specifier: ^5.4.1 @@ -3882,7 +3882,7 @@ importers: packages/expo-build-properties: dependencies: '@expo/schema-utils': - specifier: workspace:^55.0.2 + specifier: workspace:^56.0.0 version: link:../@expo/schema-utils expo: specifier: workspace:* @@ -4036,7 +4036,7 @@ importers: packages/expo-constants: dependencies: '@expo/env': - specifier: workspace:~2.1.1 + specifier: workspace:~2.2.0 version: link:../@expo/env expo: specifier: workspace:* @@ -4096,19 +4096,19 @@ importers: specifier: workspace:* version: link:../expo expo-dev-launcher: - specifier: workspace:55.0.10 + specifier: workspace:56.0.0 version: link:../expo-dev-launcher expo-dev-menu: - specifier: workspace:55.0.9 + specifier: workspace:56.0.0 version: link:../expo-dev-menu expo-dev-menu-interface: - specifier: workspace:55.0.1 + specifier: workspace:56.0.0 version: link:../expo-dev-menu-interface expo-manifests: - specifier: workspace:~55.0.9 + specifier: workspace:~56.0.1 version: link:../expo-manifests expo-updates-interface: - specifier: workspace:~55.1.3 + specifier: workspace:~56.0.1 version: link:../expo-updates-interface devDependencies: '@types/node': @@ -4124,16 +4124,16 @@ importers: packages/expo-dev-launcher: dependencies: '@expo/schema-utils': - specifier: workspace:^55.0.2 + specifier: workspace:^56.0.0 version: link:../@expo/schema-utils expo: specifier: workspace:* version: link:../expo expo-dev-menu: - specifier: workspace:55.0.9 + specifier: workspace:56.0.0 version: link:../expo-dev-menu expo-manifests: - specifier: workspace:~55.0.9 + specifier: workspace:~56.0.1 version: link:../expo-manifests react-native: specifier: 0.85.2 @@ -4149,7 +4149,7 @@ importers: specifier: workspace:* version: link:../expo expo-dev-menu-interface: - specifier: workspace:55.0.1 + specifier: workspace:56.0.0 version: link:../expo-dev-menu-interface devDependencies: '@babel/preset-typescript': @@ -4480,7 +4480,7 @@ importers: specifier: workspace:* version: link:../expo expo-image-loader: - specifier: workspace:~55.0.0 + specifier: workspace:~56.0.0 version: link:../expo-image-loader devDependencies: expo-module-scripts: @@ -4493,7 +4493,7 @@ importers: specifier: workspace:* version: link:../expo expo-image-loader: - specifier: workspace:~55.0.0 + specifier: workspace:~56.0.0 version: link:../expo-image-loader devDependencies: '@testing-library/react': @@ -4515,7 +4515,7 @@ importers: specifier: workspace:* version: link:../expo expo-eas-client: - specifier: workspace:~55.0.2 + specifier: workspace:~56.0.0 version: link:../expo-eas-client devDependencies: expo-module-scripts: @@ -4587,7 +4587,7 @@ importers: packages/expo-linking: dependencies: expo-constants: - specifier: workspace:~55.0.7 + specifier: workspace:~56.0.1 version: link:../expo-constants invariant: specifier: ^2.2.4 @@ -4681,7 +4681,7 @@ importers: packages/expo-location: dependencies: '@expo/image-utils': - specifier: workspace:^0.8.12 + specifier: workspace:^0.9.0 version: link:../@expo/image-utils expo: specifier: workspace:* @@ -4713,7 +4713,7 @@ importers: specifier: workspace:* version: link:../expo expo-json-utils: - specifier: workspace:~55.0.0 + specifier: workspace:~56.0.0 version: link:../expo-json-utils devDependencies: expo-module-scripts: @@ -4810,13 +4810,13 @@ importers: specifier: ^12.1.0 version: 12.1.0 eslint-config-universe: - specifier: workspace:^15.0.3 + specifier: workspace:^15.1.0 version: link:../eslint-config-universe glob: specifier: ^13.0.0 version: 13.0.6 jest-expo: - specifier: workspace:~55.0.9 + specifier: workspace:~56.0.0 version: link:../jest-expo jest-snapshot-prettier: specifier: npm:prettier@^2 @@ -4847,7 +4847,7 @@ importers: packages/expo-modules-autolinking: dependencies: '@expo/require-utils': - specifier: workspace:^55.0.2 + specifier: workspace:^56.0.0 version: link:../@expo/require-utils '@expo/spawn-async': specifier: ^1.7.2 @@ -4872,7 +4872,7 @@ importers: specifier: ~0.0.8 version: 0.0.8 expo-modules-jsi: - specifier: workspace:~55.0.0 + specifier: workspace:~56.0.0 version: link:../expo-modules-jsi invariant: specifier: ^2.2.4 @@ -4981,7 +4981,7 @@ importers: packages/expo-notifications: dependencies: '@expo/image-utils': - specifier: workspace:^0.8.12 + specifier: workspace:^0.9.0 version: link:../@expo/image-utils abort-controller: specifier: ^3.0.0 @@ -4993,10 +4993,10 @@ importers: specifier: workspace:* version: link:../expo expo-application: - specifier: workspace:~55.0.8 + specifier: workspace:~56.0.0 version: link:../expo-application expo-constants: - specifier: workspace:~55.0.7 + specifier: workspace:~56.0.1 version: link:../expo-constants react: specifier: 19.2.3 @@ -5024,10 +5024,10 @@ importers: specifier: workspace:* version: link:../expo expo-app-metrics: - specifier: workspace:~0.1.7 + specifier: workspace:~56.0.0 version: link:../expo-app-metrics expo-eas-client: - specifier: workspace:~55.0.2 + specifier: workspace:~56.0.0 version: link:../expo-eas-client react-native: specifier: 0.85.2 @@ -5056,7 +5056,7 @@ importers: specifier: workspace:* version: link:../expo expo-gl: - specifier: workspace:55.0.9 + specifier: workspace:56.0.0 version: link:../expo-gl processing-js: specifier: ^1.6.6 @@ -5065,16 +5065,16 @@ importers: packages/expo-router: dependencies: '@expo/log-box': - specifier: workspace:55.0.7 + specifier: workspace:56.0.1 version: link:../@expo/log-box '@expo/metro-runtime': - specifier: workspace:^55.0.6 + specifier: workspace:^56.0.1 version: link:../@expo/metro-runtime '@expo/schema-utils': - specifier: workspace:^55.0.2 + specifier: workspace:^56.0.0 version: link:../@expo/schema-utils '@expo/ui': - specifier: workspace:^55.0.0 + specifier: workspace:^56.0.1 version: link:../expo-ui '@jest/globals': specifier: ^29.7.0 @@ -5110,22 +5110,22 @@ importers: specifier: workspace:* version: link:../expo expo-constants: - specifier: workspace:^55.0.7 + specifier: workspace:^56.0.1 version: link:../expo-constants expo-glass-effect: - specifier: workspace:^55.0.7 + specifier: workspace:^56.0.1 version: link:../expo-glass-effect expo-image: - specifier: workspace:^55.0.5 + specifier: workspace:^56.0.1 version: link:../expo-image expo-linking: - specifier: workspace:^55.0.7 + specifier: workspace:^56.0.0 version: link:../expo-linking expo-server: - specifier: workspace:^55.0.5 + specifier: workspace:^56.0.0 version: link:../expo-server expo-symbols: - specifier: workspace:^55.0.4 + specifier: workspace:^56.0.1 version: link:../expo-symbols fast-deep-equal: specifier: ^3.1.3 @@ -5322,13 +5322,13 @@ importers: packages/expo-sharing: dependencies: '@expo/config-plugins': - specifier: workspace:^55.0.6 + specifier: workspace:^56.0.0 version: link:../@expo/config-plugins '@expo/config-types': - specifier: workspace:^55.0.5 + specifier: workspace:^56.0.0 version: link:../@expo/config-types '@expo/plist': - specifier: workspace:^0.5.2 + specifier: workspace:^0.6.0 version: link:../@expo/plist expo: specifier: workspace:* @@ -5373,10 +5373,10 @@ importers: packages/expo-splash-screen: dependencies: '@expo/config-plugins': - specifier: workspace:~55.0.6 + specifier: workspace:~56.0.0 version: link:../@expo/config-plugins '@expo/image-utils': - specifier: workspace:^0.8.12 + specifier: workspace:^0.9.0 version: link:../@expo/image-utils expo: specifier: workspace:* @@ -5561,7 +5561,7 @@ importers: specifier: 0.85.2 version: 0.85.2(@babel/core@7.29.0)(@react-native/jest-preset@0.85.2(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.2(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3) unimodules-app-loader: - specifier: workspace:~55.0.2 + specifier: workspace:~56.0.0 version: link:../unimodules-app-loader devDependencies: '@types/node': @@ -5682,7 +5682,7 @@ importers: specifier: ^0.0.6 version: 0.0.6 '@expo/plist': - specifier: workspace:^0.5.2 + specifier: workspace:^0.6.0 version: link:../@expo/plist '@expo/spawn-async': specifier: ^1.7.2 @@ -5703,16 +5703,16 @@ importers: specifier: workspace:* version: link:../expo-dev-client expo-eas-client: - specifier: workspace:~55.0.2 + specifier: workspace:~56.0.0 version: link:../expo-eas-client expo-manifests: - specifier: workspace:~55.0.9 + specifier: workspace:~56.0.1 version: link:../expo-manifests expo-structured-headers: - specifier: workspace:~55.0.0 + specifier: workspace:~56.0.0 version: link:../expo-structured-headers expo-updates-interface: - specifier: workspace:~55.1.3 + specifier: workspace:~56.0.1 version: link:../expo-updates-interface getenv: specifier: ^2.0.0 @@ -5845,10 +5845,10 @@ importers: packages/expo-widgets: dependencies: '@expo/plist': - specifier: workspace:^0.5.2 + specifier: workspace:^0.6.0 version: link:../@expo/plist '@expo/ui': - specifier: workspace:~55.0.1 + specifier: workspace:~56.0.1 version: link:../expo-ui expo: specifier: workspace:* @@ -6010,13 +6010,13 @@ importers: specifier: 1.0.0-alpha.24 version: 1.0.0-alpha.24 '@expo/config': - specifier: workspace:~55.0.8 + specifier: workspace:~56.0.0 version: link:../@expo/config '@expo/config-plugins': - specifier: workspace:~55.0.6 + specifier: workspace:~56.0.0 version: link:../@expo/config-plugins '@expo/env': - specifier: workspace:~2.1.1 + specifier: workspace:~2.2.0 version: link:../@expo/env '@expo/spawn-async': specifier: ^1.7.2 @@ -6288,7 +6288,7 @@ importers: specifier: ^9.39.4 version: 9.39.4(jiti@1.21.7) eslint-config-universe: - specifier: workspace:^15.0.3 + specifier: workspace:^15.1.0 version: link:../packages/eslint-config-universe eslint-plugin-lodash: specifier: ^7.4.0 @@ -7472,16 +7472,6 @@ packages: '@expo/expo-modules-macros-plugin@0.0.8': resolution: {integrity: sha512-ZHH+Hgle/ZyVfTSd9L+ON/0a7BouMEQ3wJKGmOilPLYMTjx5NOcbNZVaJ3iAHKCplvDIHHjPdmqVPorWMHm19A==} - '@expo/html-elements@0.13.8': - resolution: {integrity: sha512-dY8cbf9dkigI7YqIcz5k1Y2GpVG++WKPLp51q5xAGHYNyW7RyuGUPKjgiwK4Th0GBcQFBVCZuu/XZerPqMFA7g==} - peerDependencies: - react: 19.2.3 - react-native: 0.85.2 - react-native-web: '*' - peerDependenciesMeta: - react-native-web: - optional: true - '@expo/json-file@8.3.3': resolution: {integrity: sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==} @@ -17350,13 +17340,6 @@ snapshots: '@expo/expo-modules-macros-plugin@0.0.8': {} - '@expo/html-elements@0.13.8(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.85.2(@babel/core@7.29.0)(@react-native/jest-preset@0.85.2(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.2(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': - dependencies: - react: 19.2.3 - react-native: 0.85.2(@babel/core@7.29.0)(@react-native/jest-preset@0.85.2(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.2(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3) - optionalDependencies: - react-native-web: 0.21.2(encoding@0.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@expo/json-file@8.3.3': dependencies: '@babel/code-frame': 7.10.4 diff --git a/tools/package.json b/tools/package.json index c2e57c19bf650a..cec31ddde91e02 100644 --- a/tools/package.json +++ b/tools/package.json @@ -87,7 +87,7 @@ "@types/semver": "^7.5.8", "@types/uuid": "^9.0.2", "eslint": "^9.39.4", - "eslint-config-universe": "workspace:^15.0.3", + "eslint-config-universe": "workspace:^15.1.0", "eslint-plugin-lodash": "^7.4.0", "prettier": "^3.3.3", "taskr": "1.1.0", diff --git a/tools/src/Packages.test.ts b/tools/src/Packages.test.ts new file mode 100644 index 00000000000000..b3c3e2a476f602 --- /dev/null +++ b/tools/src/Packages.test.ts @@ -0,0 +1,34 @@ +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; + +import { getListOfPackagesAsync, getPackageByName } from './Packages'; + +describe('getPackageByName', () => { + before(async () => { + await getListOfPackagesAsync(); + }); + + it('resolves packages whose directory matches their name', () => { + const pkg = getPackageByName('expo-router'); + assert.ok(pkg); + assert.equal(pkg.packageName, 'expo-router'); + }); + + it('resolves scoped packages whose directory matches their name', () => { + const pkg = getPackageByName('@expo/cli'); + assert.ok(pkg); + assert.equal(pkg.packageName, '@expo/cli'); + }); + + it('resolves scoped packages whose directory differs from their name', () => { + for (const name of ['@expo/ui', '@expo/app-integrity']) { + const pkg = getPackageByName(name); + assert.ok(pkg, `${name} should resolve`); + assert.equal(pkg.packageName, name); + } + }); + + it('returns null for an unknown package name', () => { + assert.equal(getPackageByName('definitely-not-a-real-package'), null); + }); +}); diff --git a/tools/src/Packages.ts b/tools/src/Packages.ts index abfdedf1ad520e..618396a1040eb4 100644 --- a/tools/src/Packages.ts +++ b/tools/src/Packages.ts @@ -421,6 +421,7 @@ export class Package { /** * Resolves to a Package instance if the package with given name exists in the repository. + * Falls back to scanning the cached package list when the directory name doesn't match. */ export function getPackageByName(packageName: string): Package | null { const packageJsonPath = pathToLocalPackageJson(packageName); @@ -428,7 +429,7 @@ export function getPackageByName(packageName: string): Package | null { const packageJson = require(packageJsonPath); return new Package(path.dirname(packageJsonPath), packageJson); } catch { - return null; + return cachedPackages?.find((pkg) => pkg.packageName === packageName) ?? null; } } diff --git a/tools/src/commands/GenerateDocsAPIData.ts b/tools/src/commands/GenerateDocsAPIData.ts index 4ed0592c7280f4..701384da7b1b34 100644 --- a/tools/src/commands/GenerateDocsAPIData.ts +++ b/tools/src/commands/GenerateDocsAPIData.ts @@ -105,6 +105,10 @@ const uiPackagesMapping: Record = { 'jetpack-compose/HorizontalFloatingToolbar/index.tsx', 'expo-ui', ], + 'expo-ui/jetpack-compose/horizontalpager': [ + 'jetpack-compose/HorizontalPager/index.tsx', + 'expo-ui', + ], 'expo-ui/jetpack-compose/host': ['jetpack-compose/Host/index.tsx', 'expo-ui'], 'expo-ui/jetpack-compose/icon': ['jetpack-compose/Icon/index.tsx', 'expo-ui'], 'expo-ui/jetpack-compose/iconbutton': ['jetpack-compose/IconButton/index.tsx', 'expo-ui'], diff --git a/tools/src/publish-packages/tasks/publishCanary.ts b/tools/src/publish-packages/tasks/publishCanary.ts index 19b61b8e2228e0..178d04b7238dd9 100644 --- a/tools/src/publish-packages/tasks/publishCanary.ts +++ b/tools/src/publish-packages/tasks/publishCanary.ts @@ -7,12 +7,10 @@ import { loadRequestedParcels } from './loadRequestedParcels'; import { packPackageToTarball } from './packPackageToTarball'; import { publishAndroidArtifacts } from './publishAndroidPackages'; import { publishPackages } from './publishPackages'; -import { resolveWorkspaceSpecs } from './resolveWorkspaceSpecs'; import { updateBundledNativeModulesFile } from './updateBundledNativeModulesFile'; import { updateModuleTemplate } from './updateModuleTemplate'; import { updatePackageVersions } from './updatePackageVersions'; import { updateWorkspaceProjects } from './updateWorkspaceProjects'; -import { verifyNoWorkspaceSpecs } from './verifyNoWorkspaceSpecs'; import Git from '../../Git'; import logger from '../../Logger'; import { sdkVersionAsync } from '../../ProjectVersions'; @@ -137,12 +135,10 @@ export const publishCanaryPipeline = new Task( updateBundledNativeModulesFile, updateModuleTemplate, updateWorkspaceProjects, - resolveWorkspaceSpecs, updateAndroidProjects, publishAndroidArtifacts, addTemplateTarball, bundleIOSPrebuilds, - verifyNoWorkspaceSpecs, packPackageToTarball, publishPackages, cleanWorkingTree, diff --git a/tools/src/publish-packages/tasks/publishPackagesPipeline.ts b/tools/src/publish-packages/tasks/publishPackagesPipeline.ts index 55b84232665b8a..3184d2f82b9c0a 100644 --- a/tools/src/publish-packages/tasks/publishPackagesPipeline.ts +++ b/tools/src/publish-packages/tasks/publishPackagesPipeline.ts @@ -14,7 +14,6 @@ import { loadRequestedParcels } from './loadRequestedParcels'; import { publishAndroidArtifacts } from './publishAndroidPackages'; import { publishPackages } from './publishPackages'; import { pushCommittedChanges } from './pushCommittedChanges'; -import { resolveWorkspaceSpecs } from './resolveWorkspaceSpecs'; import { selectPackagesToPublish } from './selectPackagesToPublish'; import { updateAndroidProjects } from './updateAndroidProjects'; import { updateBundledNativeModulesFile } from './updateBundledNativeModulesFile'; @@ -24,7 +23,6 @@ import { updatePackageVersions } from './updatePackageVersions'; import { updateProjectTemplates } from './updateProjectTemplates'; import { updateVersionsEndpoint } from './updateVersionsEndpoint'; import { updateWorkspaceProjects } from './updateWorkspaceProjects'; -import { verifyNoWorkspaceSpecs } from './verifyNoWorkspaceSpecs'; import Git from '../../Git'; import logger from '../../Logger'; import { Task } from '../../TasksRunner'; @@ -89,7 +87,6 @@ export const publishPackagesPipeline = new Task( updateProjectTemplates, updateModuleTemplate, updateWorkspaceProjects, - resolveWorkspaceSpecs, updateAndroidProjects, updateIosProjects, addTemplateTarball, @@ -98,7 +95,6 @@ export const publishPackagesPipeline = new Task( pushCommittedChanges, publishAndroidArtifacts, bundleIOSPrebuilds, - verifyNoWorkspaceSpecs, publishPackages, updateVersionsEndpoint, grantTeamAccessToPackages, diff --git a/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.test.ts b/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.test.ts deleted file mode 100644 index eedbb955f4726b..00000000000000 --- a/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.test.ts +++ /dev/null @@ -1,110 +0,0 @@ -import assert from 'node:assert/strict'; -import { describe, it } from 'node:test'; - -import { resolveWorkspaceSpec } from './resolveWorkspaceSpecs'; - -const ctx = { packageName: 'consumer', depKey: 'dependencies', depName: 'target' }; - -describe('resolveWorkspaceSpec', () => { - it('returns target version for workspace:*', () => { - assert.equal(resolveWorkspaceSpec('workspace:*', '1.2.3', ctx), '1.2.3'); - }); - - it('returns target version for bare workspace: with no suffix', () => { - assert.equal(resolveWorkspaceSpec('workspace:', '1.2.3', ctx), '1.2.3'); - }); - - it('prepends ^ to target version for workspace:^', () => { - assert.equal(resolveWorkspaceSpec('workspace:^', '1.2.3', ctx), '^1.2.3'); - }); - - it('prepends ~ to target version for workspace:~', () => { - assert.equal(resolveWorkspaceSpec('workspace:~', '1.2.3', ctx), '~1.2.3'); - }); - - it('strips workspace: prefix for explicit version', () => { - assert.equal(resolveWorkspaceSpec('workspace:1.2.3', undefined, ctx), '1.2.3'); - }); - - it('strips workspace: prefix for explicit caret range', () => { - assert.equal(resolveWorkspaceSpec('workspace:^1.2.3', undefined, ctx), '^1.2.3'); - }); - - it('strips workspace: prefix for explicit tilde range', () => { - assert.equal(resolveWorkspaceSpec('workspace:~1.2.3', undefined, ctx), '~1.2.3'); - }); - - it('returns non-workspace specs unchanged', () => { - assert.equal(resolveWorkspaceSpec('^1.2.3', '9.9.9', ctx), '^1.2.3'); - assert.equal(resolveWorkspaceSpec('1.2.3', undefined, ctx), '1.2.3'); - assert.equal(resolveWorkspaceSpec('*', undefined, ctx), '*'); - }); - - it('passes through prerelease versions when target is prerelease', () => { - assert.equal( - resolveWorkspaceSpec('workspace:*', '56.0.0-preview.1', ctx), - '56.0.0-preview.1' - ); - assert.equal( - resolveWorkspaceSpec('workspace:^', '56.0.0-preview.1', ctx), - '^56.0.0-preview.1' - ); - }); - - describe('error handling', () => { - it('throws when target version is missing for workspace:*', () => { - assert.throws( - () => resolveWorkspaceSpec('workspace:*', undefined, ctx), - /not a workspace package/ - ); - }); - - it('throws when target version is missing for workspace:^', () => { - assert.throws( - () => resolveWorkspaceSpec('workspace:^', undefined, ctx), - /not a workspace package/ - ); - }); - - it('throws when target version is missing for workspace:~', () => { - assert.throws( - () => resolveWorkspaceSpec('workspace:~', undefined, ctx), - /not a workspace package/ - ); - }); - - it('throws when target version is missing for bare workspace:', () => { - assert.throws( - () => resolveWorkspaceSpec('workspace:', undefined, ctx), - /not a workspace package/ - ); - }); - - it('does not require target version for explicit-version specs', () => { - // Explicit forms ship the embedded version regardless of workspace state. - assert.doesNotThrow(() => - resolveWorkspaceSpec('workspace:1.2.3', undefined, ctx) - ); - assert.doesNotThrow(() => - resolveWorkspaceSpec('workspace:^1.2.3', undefined, ctx) - ); - }); - - it('error message names the offending package and dep', () => { - assert.throws( - () => - resolveWorkspaceSpec('workspace:*', undefined, { - packageName: '@expo/cli', - depKey: 'dependencies', - depName: '@expo/inline-modules', - }), - (err: Error) => { - assert.match(err.message, /@expo\/cli/); - assert.match(err.message, /dependencies\.@expo\/inline-modules/); - assert.match(err.message, /workspace:\*/); - return true; - } - ); - }); - }); -}); diff --git a/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.ts b/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.ts deleted file mode 100644 index 094e9573c52f79..00000000000000 --- a/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.ts +++ /dev/null @@ -1,153 +0,0 @@ -import JsonFile from '@expo/json-file'; -import chalk from 'chalk'; -import path from 'path'; - -import { updateWorkspaceProjects } from './updateWorkspaceProjects'; -import logger from '../../Logger'; -import { getListOfPackagesAsync } from '../../Packages'; -import { Task } from '../../TasksRunner'; -import { Parcel, TaskArgs } from '../types'; - -const { green, yellow, cyan, magenta } = chalk; - -const DEPENDENCY_KEYS = [ - 'dependencies', - 'devDependencies', - 'peerDependencies', - 'optionalDependencies', -] as const; - -const WORKSPACE_PREFIX = 'workspace:'; - -/** - * Rewrites every `workspace:` specifier in each parcel's `package.json` to the - * concrete npm range that should ship to the registry. `npm pack` (which the - * publish flow ultimately calls) does not understand `workspace:` and would - * otherwise embed the literal string in the published tarball — installs - * outside the monorepo would then fail to resolve it. - * - * This task runs after `updateWorkspaceProjects`, which only rewrites entries - * that pnpm classifies as workspace deps for packages in the current parcel - * set. That filter has known blind spots (peer deps with `workspace:*`, deps on - * workspace packages not being published in the current run), so this task is - * a comprehensive safety net. - * - * Resolution rules (matching pnpm's publish-time behaviour): - * - * workspace:* → - * workspace: → - * workspace:^ → ^ - * workspace:~ → ~ - * workspace:1.2.3 → 1.2.3 - * workspace:^1.2.3 → ^1.2.3 - * workspace:~1.2.3 → ~1.2.3 - */ -export const resolveWorkspaceSpecs = new Task( - { - name: 'resolveWorkspaceSpecs', - dependsOn: [updateWorkspaceProjects], - filesToStage: ['packages/**/package.json', 'templates/**/package.json'], - }, - async (parcels: Parcel[]) => { - logger.info(`\n🔧 Resolving ${magenta.bold('workspace:')} specifiers...`); - - // Build a name -> version map keyed by package.json `name`. We can't use - // `getPackageByName` because it assumes directory name matches package - // name, which fails for packages like @expo/ui (dir: packages/expo-ui). - const allPackages = await getListOfPackagesAsync(); - const versionByName = new Map(); - for (const pkg of allPackages) { - versionByName.set(pkg.packageName, String(pkg.packageJson.version)); - } - - let totalRewrites = 0; - - for (const { pkg } of parcels) { - const packageJsonPath = path.join(pkg.path, 'package.json'); - const packageJson = await JsonFile.readAsync(packageJsonPath); - let modified = false; - - for (const depKey of DEPENDENCY_KEYS) { - const deps = packageJson[depKey]; - if (!deps || typeof deps !== 'object') { - continue; - } - - const depsRecord = deps as Record; - for (const [depName, currentSpec] of Object.entries(depsRecord)) { - if (typeof currentSpec !== 'string' || !currentSpec.startsWith(WORKSPACE_PREFIX)) { - continue; - } - - const targetVersion = versionByName.get(depName); - const resolved = resolveWorkspaceSpec(currentSpec, targetVersion, { - packageName: pkg.packageName, - depKey, - depName, - }); - - depsRecord[depName] = resolved; - modified = true; - totalRewrites += 1; - - logger.log( - ' ', - green(pkg.packageName), - yellow(`${depKey}.${depName}`), - cyan(currentSpec), - '→', - cyan(resolved) - ); - } - } - - if (modified) { - await JsonFile.writeAsync(packageJsonPath, packageJson); - } - } - - if (totalRewrites === 0) { - logger.log(' No workspace: specifiers to resolve.'); - } - } -); - -/** - * Pure resolver — exported so it can be unit tested without touching disk. - * - * @param spec The current dependency value (must start with `workspace:`). - * @param targetVersion The on-disk version of the target package, or undefined - * if the target isn't a known workspace package. - * @param context Identifying info for error messages. - */ -export function resolveWorkspaceSpec( - spec: string, - targetVersion: string | undefined, - context: { packageName: string; depKey: string; depName: string } -): string { - if (!spec.startsWith(WORKSPACE_PREFIX)) { - return spec; - } - - const rest = spec.slice(WORKSPACE_PREFIX.length); - - // Forms that need targetVersion: `workspace:`, `workspace:*`, `workspace:^`, `workspace:~`. - const needsTargetVersion = rest === '' || rest === '*' || rest === '^' || rest === '~'; - - if (needsTargetVersion && !targetVersion) { - throw new Error( - `${context.packageName} declares ${context.depKey}.${context.depName} as "${spec}" ` + - `but ${context.depName} is not a workspace package in this monorepo. ` + - `Either correct the dependency name or replace the workspace: prefix with an explicit version.` - ); - } - - if (rest === '' || rest === '*') { - return targetVersion!; - } - if (rest === '^' || rest === '~') { - return `${rest}${targetVersion!}`; - } - // Explicit version range with optional ^/~ prefix already baked in. - return rest; -} diff --git a/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.test.ts b/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.test.ts deleted file mode 100644 index 8a28f8529591f2..00000000000000 --- a/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.test.ts +++ /dev/null @@ -1,101 +0,0 @@ -import assert from 'node:assert/strict'; -import { describe, it } from 'node:test'; - -import { findWorkspaceSpecs } from './verifyNoWorkspaceSpecs'; - -describe('findWorkspaceSpecs', () => { - it('returns empty when no deps have workspace: specs', () => { - const offenders = findWorkspaceSpecs( - { - dependencies: { foo: '^1.0.0' }, - peerDependencies: { bar: '*' }, - }, - 'consumer' - ); - assert.deepEqual(offenders, []); - }); - - it('detects workspace: in dependencies', () => { - const offenders = findWorkspaceSpecs( - { dependencies: { foo: 'workspace:*' } }, - 'consumer' - ); - assert.deepEqual(offenders, [ - { packageName: 'consumer', depKey: 'dependencies', depName: 'foo', spec: 'workspace:*' }, - ]); - }); - - it('detects workspace: in devDependencies', () => { - const offenders = findWorkspaceSpecs( - { devDependencies: { foo: 'workspace:^1.0.0' } }, - 'consumer' - ); - assert.equal(offenders.length, 1); - assert.equal(offenders[0].depKey, 'devDependencies'); - }); - - it('detects workspace: in peerDependencies', () => { - const offenders = findWorkspaceSpecs( - { peerDependencies: { foo: 'workspace:*' } }, - 'consumer' - ); - assert.equal(offenders.length, 1); - assert.equal(offenders[0].depKey, 'peerDependencies'); - }); - - it('detects workspace: in optionalDependencies', () => { - const offenders = findWorkspaceSpecs( - { optionalDependencies: { foo: 'workspace:~1.0.0' } }, - 'consumer' - ); - assert.equal(offenders.length, 1); - assert.equal(offenders[0].depKey, 'optionalDependencies'); - }); - - it('detects multiple offenders across different dep types', () => { - const offenders = findWorkspaceSpecs( - { - dependencies: { a: 'workspace:*', b: '^1.0.0' }, - peerDependencies: { c: 'workspace:^' }, - optionalDependencies: { d: 'workspace:1.2.3' }, - }, - 'consumer' - ); - assert.equal(offenders.length, 3); - assert.deepEqual( - offenders.map((o) => o.depName).sort(), - ['a', 'c', 'd'] - ); - }); - - it('ignores non-string values', () => { - const offenders = findWorkspaceSpecs( - // Synthesizing malformed-but-real package.json: e.g. hand-edited file - // accidentally putting an object/null where a string belongs. - { dependencies: { foo: null as unknown as string, bar: { nested: 'oops' } as any } }, - 'consumer' - ); - assert.deepEqual(offenders, []); - }); - - it('ignores non-object dep collections', () => { - const offenders = findWorkspaceSpecs( - { dependencies: 'oops' as unknown as Record }, - 'consumer' - ); - assert.deepEqual(offenders, []); - }); - - it('ignores undefined dep collections', () => { - const offenders = findWorkspaceSpecs({}, 'consumer'); - assert.deepEqual(offenders, []); - }); - - it('reports the package name on each offender', () => { - const offenders = findWorkspaceSpecs( - { dependencies: { foo: 'workspace:*' } }, - '@expo/ui' - ); - assert.equal(offenders[0].packageName, '@expo/ui'); - }); -}); diff --git a/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.ts b/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.ts deleted file mode 100644 index ff6d9bd2654c19..00000000000000 --- a/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.ts +++ /dev/null @@ -1,86 +0,0 @@ -import JsonFile from '@expo/json-file'; -import chalk from 'chalk'; -import path from 'path'; - -import { resolveWorkspaceSpecs } from './resolveWorkspaceSpecs'; -import { Task } from '../../TasksRunner'; -import { Parcel, TaskArgs } from '../types'; - -const { red, yellow } = chalk; - -const DEPENDENCY_KEYS = [ - 'dependencies', - 'devDependencies', - 'peerDependencies', - 'optionalDependencies', -] as const; - -const WORKSPACE_PREFIX = 'workspace:'; - -export type WorkspaceSpecOffender = { - packageName: string; - depKey: string; - depName: string; - spec: string; -}; - -/** - * Pure scanner — exported for unit tests. Returns every entry in any - * dependency-shaped object whose value still begins with `workspace:`. - */ -export function findWorkspaceSpecs( - packageJson: Record, - packageName: string -): WorkspaceSpecOffender[] { - const offenders: WorkspaceSpecOffender[] = []; - for (const depKey of DEPENDENCY_KEYS) { - const deps = packageJson[depKey]; - if (!deps || typeof deps !== 'object') { - continue; - } - for (const [depName, spec] of Object.entries(deps as Record)) { - if (typeof spec === 'string' && spec.startsWith(WORKSPACE_PREFIX)) { - offenders.push({ packageName, depKey, depName, spec }); - } - } - } - return offenders; -} - -/** - * Final guard: scans every parcel's on-disk `package.json` immediately before - * publishing and aborts if any value still starts with `workspace:`. Catches - * regressions in `resolveWorkspaceSpecs` and any other code path that might - * mutate package.json after it ran. - */ -export const verifyNoWorkspaceSpecs = new Task( - { - name: 'verifyNoWorkspaceSpecs', - dependsOn: [resolveWorkspaceSpecs], - }, - async (parcels: Parcel[]) => { - const offenders: WorkspaceSpecOffender[] = []; - - for (const { pkg } of parcels) { - const packageJsonPath = path.join(pkg.path, 'package.json'); - const packageJson = await JsonFile.readAsync(packageJsonPath); - offenders.push(...findWorkspaceSpecs(packageJson, pkg.packageName)); - } - - if (offenders.length === 0) { - return; - } - - const list = offenders - .map((o) => ` - ${red(o.packageName)} ${o.depKey}.${o.depName}: ${yellow(o.spec)}`) - .join('\n'); - throw new Error( - `Found ${offenders.length} unresolved \`workspace:\` specifier${ - offenders.length === 1 ? '' : 's' - } in package.json files about to be published:\n${list}\n\n` + - `npm pack ships these strings verbatim, breaking installs in non-workspace projects. ` + - `The resolveWorkspaceSpecs task should have rewritten them — please report this as a bug ` + - `in the publish pipeline.` - ); - } -);