Files
RecipesCam/package.json
T
3dtours 1e1ead6f54 android: scan the web recipe card's QR and import the look it points at
The landing page's QR card now carries a link to `GET
/api/photos/:id/preset.recipe`, so the app can pick a look up off a
screen instead of a file. PRESETS gains a SCAN QR chip next to IMPORT:
the code is decoded, checked against the preset route, fetched, and
stored through the same `storeImportedRecipe` path IMPORT already uses,
so an imported look and a scanned look land in one place.

Scanning runs on `expo-camera`, not the viewfinder's vision-camera:
v5's object output is iOS-only, Android's `createObjectOutput` throws.
That is a second camera library in the app, so the sheet pauses the
viewfinder (`paused` prop) — CameraX will not let two clients hold one
lens. A native rebuild is required for the new module.

The code holds a URL, never the recipe, so anything that is not the
preset route is refused by name rather than silently dropped. On a
release APK the plain-HTTP link is blocked by Android's cleartext
policy; debug builds have it on. Noted in 7_SCAN_QR.md along with the
web side, the regex, and the paused-viewfinder rule.
2026-09-18 17:01:34 +07:00

58 lines
2.0 KiB
JSON

{
"name": "recipescamera",
"version": "1.2.1",
"main": "index.ts",
"dependencies": {
"@react-native-async-storage/async-storage": "2.2.0",
"@react-native-community/slider": "5.2.0",
"@shopify/react-native-skia": "2.6.2",
"babel-preset-expo": "~57.0.0",
"expo": "~57.0.7",
"expo-asset": "~57.0.5",
"expo-camera": "~57.0.5",
"expo-dev-client": "~57.0.6",
"expo-document-picker": "~57.0.2",
"expo-file-system": "~57.0.1",
"expo-font": "~57.0.1",
"expo-haptics": "~57.0.1",
"expo-iap": "^5.6.0",
"expo-keep-awake": "~57.0.1",
"expo-location": "~57.0.4",
"expo-media-library": "~57.0.2",
"expo-sharing": "~57.0.18",
"expo-status-bar": "~57.0.1",
"lucide-react-native": "^1.24.0",
"nativewind": "^4.2.6",
"react": "19.2.3",
"react-dom": "19.2.3",
"react-native": "0.86.0",
"react-native-nitro-image": "^0.15.2",
"react-native-nitro-modules": "^0.37.1",
"react-native-reanimated": "^4.5.0",
"react-native-safe-area-context": "^5.8.0",
"react-native-vision-camera": "^5.2.3",
"react-native-vision-camera-skia": "^5.2.3",
"react-native-vision-camera-worklets": "^5.2.3",
"react-native-web": "^0.21.2",
"tailwindcss": "^3.4.19"
},
"devDependencies": {
"@types/react": "~19.2.2",
"typescript": "^5.9.3"
},
"scripts": {
"start": "expo start",
"android": "expo run:android",
"ios": "expo run:ios",
"web": "expo start --web",
"apk:lite": "node tools/set-variant.mjs lite && cd android && gradlew.bat assembleLiteRelease --console=plain",
"apk:pro": "node tools/set-variant.mjs pro && cd android && gradlew.bat assembleProRelease --console=plain",
"bundle:lite": "node tools/set-variant.mjs lite && cd android && gradlew.bat bundleLiteRelease --console=plain",
"bundle:pro": "node tools/set-variant.mjs pro && cd android && gradlew.bat bundleProRelease --console=plain"
},
"private": true,
"allowScripts": {
"@shopify/react-native-skia@2.6.2": true
}
}