diff --git a/.changeset/2026-07-28-issue-167-interaction-policy-selection.md b/.changeset/2026-07-28-issue-167-interaction-policy-selection.md new file mode 100644 index 00000000..05d5ea97 --- /dev/null +++ b/.changeset/2026-07-28-issue-167-interaction-policy-selection.md @@ -0,0 +1,9 @@ +--- +'@ankhorage/studio': minor +--- + +Add public interaction-policy and stationary-selection runtime helpers, require ZORA 2.9 in +generated apps, support explicit extension policy declarations, and provide stale-safe +pointer/touch selection with layout-neutral, momentum-safe root-owned unsupported-component +overlays. Generate first-party Expo SDK 54 apps with the compatible Reanimated 4.3.0 and Worklets +0.8.3 pair. diff --git a/README.md b/README.md index d54b8df0..e2c07522 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # @ankhorage/studio -![license: MIT](././paradox/badges/license.svg) ![npm: v0.10.5](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg) +![license: MIT](././paradox/badges/license.svg) ![npm: v0.10.9](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg) Standalone Studio authoring package for Ankhorage apps. diff --git a/apps/studio/app.config.ts b/apps/studio/app.config.ts index fb4a18e6..472e6c48 100644 --- a/apps/studio/app.config.ts +++ b/apps/studio/app.config.ts @@ -4,6 +4,10 @@ export default ({ config }: ConfigContext): ExpoConfig => ({ ...config, name: config.name ?? 'Ankhorage Studio', slug: config.slug ?? 'ankhorage-studio', + android: { + ...config.android, + package: config.android?.package ?? 'com.ankhorage.studio', + }, plugins: [...(config.plugins ?? [])], experiments: { ...config.experiments, diff --git a/apps/studio/babel.config.js b/apps/studio/babel.config.js index 42df1b61..8f3c511f 100644 --- a/apps/studio/babel.config.js +++ b/apps/studio/babel.config.js @@ -13,11 +13,12 @@ module.exports = function (api) { '@': './src', '@root': './', '@ankhorage/studio': '../../dist/root.js', + 'expo-router': '../../node_modules/expo-router', }, }, ], - // Required for Reanimated. Must be the last plugin. - 'react-native-reanimated/plugin', + // Required for Worklets/Reanimated. Must be the last plugin. + 'react-native-worklets/plugin', ], }; }; diff --git a/apps/studio/package.json b/apps/studio/package.json index 3c201cee..4023e72f 100644 --- a/apps/studio/package.json +++ b/apps/studio/package.json @@ -29,11 +29,11 @@ "react-dom": "19.1.0", "react-native": "0.81.5", "react-native-gesture-handler": "~2.28.0", - "react-native-reanimated": "~4.1.1", + "react-native-reanimated": "4.3.0", "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", "react-native-web": "^0.21.2", - "react-native-worklets": "0.5.1", + "react-native-worklets": "0.8.3", "@react-native-picker/picker": "2.11.1", "expo-linear-gradient": "~15.0.8" }, diff --git a/bun.lock b/bun.lock index 1e09070c..4edbfb5e 100644 --- a/bun.lock +++ b/bun.lock @@ -17,11 +17,12 @@ "@ankhorage/supabase-auth": "^1.1.1", "@ankhorage/supabase-vault": "^0.2.0", "@ankhorage/templates": "^3.0.0", - "@ankhorage/zora": "^2.8.7", + "@ankhorage/zora": "^2.9.0", "@ankhorage/zora-chess": "^0.1.2", "@ankhorage/zora-tabletop": "^0.0.5", "@fastify/cors": "^11.2.0", "fastify": "^5.7.4", + "react-native-gesture-handler": "~2.28.0", }, "devDependencies": { "@ankhorage/ankh": "^0.7.0", @@ -66,11 +67,11 @@ "react-dom": "19.1.0", "react-native": "0.81.5", "react-native-gesture-handler": "~2.28.0", - "react-native-reanimated": "~4.1.1", + "react-native-reanimated": "4.3.0", "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", "react-native-web": "^0.21.2", - "react-native-worklets": "0.5.1", + "react-native-worklets": "0.8.3", }, "devDependencies": { "babel-plugin-module-resolver": "^5.0.2", @@ -118,11 +119,11 @@ "@ankhorage/supabase-vault": ["@ankhorage/supabase-vault@0.2.1", "", { "dependencies": { "@ankhorage/contracts": "^2.1.0" } }, "sha512-WkAsYQUtSnSTPx3hA93LowWs3mBjY7sbKTe8yEolKlzpUhr4Y5rhcUZvDhk30uBgqwfkRTCHxKNEDraomlkj0g=="], - "@ankhorage/surface": ["@ankhorage/surface@2.0.3", "", { "dependencies": { "@ankhorage/color-theory": "^0.0.7", "@ankhorage/contracts": "^2.1.0" }, "peerDependencies": { "@expo/vector-icons": ">=14.0.0", "expo-font": "^55.0.6", "react": ">=18.2.0", "react-native": ">=0.72.0", "react-native-safe-area-context": "^5.0.0" }, "optionalPeers": ["@expo/vector-icons", "expo-font"] }, "sha512-F5uG1Hun98N0c8fYgXAOlliUoIgX1LRm5B5IyiN0I2GEiyW12mC1UOu2MNn+9PAjZNdH1tsNbHHikw/OJhh5jA=="], + "@ankhorage/surface": ["@ankhorage/surface@2.1.0", "", { "dependencies": { "@ankhorage/color-theory": "^0.0.7", "@ankhorage/contracts": "^2.1.0" }, "peerDependencies": { "@expo/vector-icons": ">=14.0.0", "expo-font": "^55.0.6", "react": ">=18.2.0", "react-native": ">=0.72.0", "react-native-safe-area-context": "^5.0.0" }, "optionalPeers": ["@expo/vector-icons", "expo-font"] }, "sha512-6DB9lLQV+CfiA1uytI3juD1h06atJDAkpdGfCzQHK1QEnmPaLrS3nhC2/UidA1oRAx4BihFsTYp6yYY1Cprc1A=="], "@ankhorage/templates": ["@ankhorage/templates@3.0.0", "", { "dependencies": { "@ankhorage/contracts": "^4.0.0", "@ankhorage/zora": "^2.8.0" }, "bin": { "ankhorage-templates": "dist/cli/standalone.js" } }, "sha512-aflIReBWhuXpjLLToWHr13zDCuEOvjebfdeGBS5qYfbUg93gJV6xakDNN51tNgCAiroeG6jkytDqrqRPj3ZkJw=="], - "@ankhorage/zora": ["@ankhorage/zora@2.8.7", "", { "dependencies": { "@ankhorage/color-theory": "^0.0.7", "@ankhorage/contracts": "^2.1.0", "@ankhorage/surface": "^2.0.3" }, "peerDependencies": { "@expo/vector-icons": ">=14.0.0", "@react-native-picker/picker": ">=2.0.0", "expo-font": "^55.0.6", "expo-linear-gradient": ">=14.0.0", "react": ">=18.2.0", "react-native": ">=0.72.0" }, "optionalPeers": ["@expo/vector-icons", "expo-font"] }, "sha512-pWEpJyyhsNhoeY6NdVmuwhcaS+JbQ76b7HRqL8Dht0opGVFFHB/rxGaYIm+7iJpdVYPU/dtY+ASeljX1WM+sZw=="], + "@ankhorage/zora": ["@ankhorage/zora@2.9.0", "", { "dependencies": { "@ankhorage/color-theory": "^0.0.7", "@ankhorage/contracts": "^2.1.0", "@ankhorage/surface": "^2.1.0" }, "peerDependencies": { "@expo/vector-icons": ">=14.0.0", "@react-native-picker/picker": ">=2.0.0", "expo-font": "^55.0.6", "expo-linear-gradient": ">=14.0.0", "react": ">=18.2.0", "react-native": ">=0.72.0" }, "optionalPeers": ["@expo/vector-icons", "expo-font"] }, "sha512-iiRaxYAXzkVgfYSy/xwvJf9N0U5f6IP/KhjUN5U3Cc2VEd95/oXKKfEjksnz1WLD3AkecQCTNvqP2jC8S65pUA=="], "@ankhorage/zora-chess": ["@ankhorage/zora-chess@0.1.2", "", { "dependencies": { "chess.js": "^1.4.0" }, "peerDependencies": { "@ankhorage/zora": ">=0.1.0", "react": ">=18.2.0", "react-native": ">=0.72.0" } }, "sha512-uVZyqJzvnyAzCNrrys4UGR/ioVgYxgcKbY/5ET0d7tyOt5joaKqiQMNEbQL+5gby34mqhLjmBSS3xt8mxZgRQg=="], @@ -640,6 +641,10 @@ "@react-native/js-polyfills": ["@react-native/js-polyfills@0.81.5", "", {}, "sha512-fB7M1CMOCIUudTRuj7kzxIBTVw2KXnsgbQ6+4cbqSxo8NmRRhA0Ul4ZUzZj3rFd3VznTL4Brmocv1oiN0bWZ8w=="], + "@react-native/metro-babel-transformer": ["@react-native/metro-babel-transformer@0.86.2", "", { "dependencies": { "@babel/core": "^7.25.2", "@react-native/babel-preset": "0.86.2", "hermes-parser": "0.36.0", "nullthrows": "^1.1.1" } }, "sha512-mX1wgLErdb2hDgXJr9zM9SWLe+ZteZTFTwRWGOQ53yEJwc9DVSnxdTlAtVdMeOj2ntycKh0R8jYdat2Am43cwQ=="], + + "@react-native/metro-config": ["@react-native/metro-config@0.86.2", "", { "dependencies": { "@react-native/js-polyfills": "0.86.2", "@react-native/metro-babel-transformer": "0.86.2", "metro-config": "^0.84.3", "metro-runtime": "^0.84.3" } }, "sha512-hJno256j+MS0b3JD1aD3ouTGZVacKNVBuXL2atMQQ8BZ060vl1ptnZ83y569aDW+/rgFSOcqn6ydKeSz4uUKQQ=="], + "@react-native/normalize-colors": ["@react-native/normalize-colors@0.81.5", "", {}, "sha512-0HuJ8YtqlTVRXGZuGeBejLE04wSQsibpTI+RGOyVqxZvgtlLLC/Ssw0UmbHhT4lYMp2fhdtvKZSs5emWB1zR/g=="], "@react-native/virtualized-lists": ["@react-native/virtualized-lists@0.81.5", "", { "dependencies": { "invariant": "^2.2.4", "nullthrows": "^1.1.1" }, "peerDependencies": { "@types/react": "^19.1.0", "react": "*", "react-native": "*" }, "optionalPeers": ["@types/react"] }, "sha512-UVXgV/db25OPIvwZySeToXD/9sKKhOdkcWmmf4Jh8iBZuyfML+/5CasaZ1E7Lqg6g3uqVQq75NqIwkYmORJMPw=="], @@ -836,7 +841,7 @@ "babel-preset-current-node-syntax": ["babel-preset-current-node-syntax@1.2.0", "", { "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg=="], - "babel-preset-expo": ["babel-preset-expo@54.0.11", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.27.1", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.0", "@react-native/babel-preset": "0.81.5", "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-native-web": "~0.21.0", "babel-plugin-syntax-hermes-parser": "^0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "debug": "^4.3.4", "resolve-from": "^5.0.0" }, "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", "react-refresh": ">=0.14.0 <1.0.0" }, "optionalPeers": ["@babel/runtime", "expo"] }, "sha512-dEpeFDtYEFzmWtWVwvt7sUCZH0fxXPfbJlgXd7XNZSQDa/Ki/hTOj9exMTzqR2oyPHDNcE9VxYCJ4oS6xw4Pjg=="], + "babel-preset-expo": ["babel-preset-expo@54.0.12", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.27.1", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.0", "@react-native/babel-preset": "0.81.5", "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-native-web": "~0.21.0", "babel-plugin-syntax-hermes-parser": "^0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "debug": "^4.3.4", "resolve-from": "^5.0.0" }, "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", "react-refresh": ">=0.14.0 <1.0.0" }, "optionalPeers": ["@babel/runtime", "expo"] }, "sha512-6xeSkdaixmQhWSYL7tfLu0pOS0BY+8ftwmdNSHtpEFSizrXYZkCjk/B6Dxr+6nwNRihixMcS0aBlWS1wlDl3pw=="], "babel-preset-jest": ["babel-preset-jest@29.6.3", "", { "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA=="], @@ -1674,7 +1679,7 @@ "react-freeze": ["react-freeze@1.0.4", "", { "peerDependencies": { "react": ">=17.0.0" } }, "sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA=="], - "react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], "react-native": ["react-native@0.81.5", "", { "dependencies": { "@jest/create-cache-key-function": "^29.7.0", "@react-native/assets-registry": "0.81.5", "@react-native/codegen": "0.81.5", "@react-native/community-cli-plugin": "0.81.5", "@react-native/gradle-plugin": "0.81.5", "@react-native/js-polyfills": "0.81.5", "@react-native/normalize-colors": "0.81.5", "@react-native/virtualized-lists": "0.81.5", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "babel-jest": "^29.7.0", "babel-plugin-syntax-hermes-parser": "0.29.1", "base64-js": "^1.5.1", "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", "glob": "^7.1.1", "invariant": "^2.2.4", "jest-environment-node": "^29.7.0", "memoize-one": "^5.0.0", "metro-runtime": "^0.83.1", "metro-source-map": "^0.83.1", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", "react-devtools-core": "^6.1.5", "react-refresh": "^0.14.0", "regenerator-runtime": "^0.13.2", "scheduler": "0.26.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", "whatwg-fetch": "^3.0.0", "ws": "^6.2.3", "yargs": "^17.6.2" }, "peerDependencies": { "@types/react": "^19.1.0", "react": "^19.1.0" }, "optionalPeers": ["@types/react"], "bin": { "react-native": "cli.js" } }, "sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw=="], @@ -1684,7 +1689,7 @@ "react-native-is-edge-to-edge": ["react-native-is-edge-to-edge@1.3.1", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-NIXU/iT5+ORyCc7p0z2nnlkouYKX425vuU1OEm6bMMtWWR9yvb+Xg5AZmImTKoF9abxCPqrKC3rOZsKzUYgYZA=="], - "react-native-reanimated": ["react-native-reanimated@4.1.7", "", { "dependencies": { "react-native-is-edge-to-edge": "^1.2.1", "semver": "^7.7.2" }, "peerDependencies": { "react": "*", "react-native": "0.78 - 0.82", "react-native-worklets": "0.5 - 0.8" } }, "sha512-Q4H6xA3Tn7QL0/E/KjI86I1KK4tcf+ErRE04LH34Etka2oVQhW6oXQ+Q8ZcDCVxiWp5vgbBH6XcH8BOo4w/Rhg=="], + "react-native-reanimated": ["react-native-reanimated@4.3.0", "", { "dependencies": { "react-native-is-edge-to-edge": "^1.3.1", "semver": "^7.7.3" }, "peerDependencies": { "react": "*", "react-native": "0.81 - 0.85", "react-native-worklets": "0.8.x" } }, "sha512-HOTTPdKtddXTOsmQxDASXEwLS3lqEHrKERD3XOgzSqWJ7L3x81Pnx7mTcKx1FKdkgomMug/XSmm1C6Z7GIowxA=="], "react-native-reanimated-dnd": ["react-native-reanimated-dnd@1.1.0", "", { "peerDependencies": { "react": ">=16.8.0", "react-native": ">=0.60.0", "react-native-gesture-handler": ">=2.0.0", "react-native-reanimated": ">=3.0.0" } }, "sha512-9ZgdAFsw2rjB/0VE3wsR9+PnBOWIoO+1s6lEiyV51ptBcoz0NaUnUb8aqGocEztnXSbySSznpOh5vy6Ijo9A3Q=="], @@ -1694,7 +1699,7 @@ "react-native-web": ["react-native-web@0.21.2", "", { "dependencies": { "@babel/runtime": "^7.18.6", "@react-native/normalize-colors": "^0.74.1", "fbjs": "^3.0.4", "inline-style-prefixer": "^7.0.1", "memoize-one": "^6.0.0", "nullthrows": "^1.1.1", "postcss-value-parser": "^4.2.0", "styleq": "^0.1.3" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-SO2t9/17zM4iEnFvlu2DA9jqNbzNhoUP+AItkoCOyFmDMOhUnBBznBDCYN92fGdfAkfQlWzPoez6+zLxFNsZEg=="], - "react-native-worklets": ["react-native-worklets@0.5.1", "", { "dependencies": { "@babel/plugin-transform-arrow-functions": "^7.0.0-0", "@babel/plugin-transform-class-properties": "^7.0.0-0", "@babel/plugin-transform-classes": "^7.0.0-0", "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", "@babel/plugin-transform-optional-chaining": "^7.0.0-0", "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", "@babel/plugin-transform-template-literals": "^7.0.0-0", "@babel/plugin-transform-unicode-regex": "^7.0.0-0", "@babel/preset-typescript": "^7.16.7", "convert-source-map": "^2.0.0", "semver": "7.7.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0", "react": "*", "react-native": "*" } }, "sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w=="], + "react-native-worklets": ["react-native-worklets@0.8.3", "", { "dependencies": { "@babel/plugin-transform-arrow-functions": "^7.27.1", "@babel/plugin-transform-class-properties": "^7.27.1", "@babel/plugin-transform-classes": "^7.28.4", "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/preset-typescript": "^7.27.1", "convert-source-map": "^2.0.0", "semver": "^7.7.3" }, "peerDependencies": { "@babel/core": "*", "@react-native/metro-config": "*", "react": "*", "react-native": "0.81 - 0.85" } }, "sha512-oCBJROyLU7yG/1R8s0INMflygTH71bx+5XcYkH0CM938TlhSoVbiunE1WVW5FZa51vwYqfLie/IXMX2s1Kh3eg=="], "react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], @@ -2200,6 +2205,16 @@ "@radix-ui/react-roving-focus/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], + "@react-native/metro-babel-transformer/@react-native/babel-preset": ["@react-native/babel-preset@0.86.2", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-for-of": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-react-display-name": "^7.24.7", "@babel/plugin-transform-react-jsx": "^7.25.2", "@babel/plugin-transform-react-jsx-self": "^7.24.7", "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@react-native/babel-plugin-codegen": "0.86.2", "babel-plugin-syntax-hermes-parser": "0.36.0", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" } }, "sha512-4XKEJ6jKW9lXMB1O5o47gBoGgolde1fbX13gLW/erlcn+1ky+MHHo5UjuM3RWGdPJHIvIzekDDumSUHhB9x5iQ=="], + + "@react-native/metro-babel-transformer/hermes-parser": ["hermes-parser@0.36.0", "", { "dependencies": { "hermes-estree": "0.36.0" } }, "sha512-GdpwMmH5x6IpC1cijvcvYnlPB60Mh6kTSF/NFdYV/j56gYdi+0RIakYs+eqOV+bbO0SW7mgVVGSsTJxyPQfo3w=="], + + "@react-native/metro-config/@react-native/js-polyfills": ["@react-native/js-polyfills@0.86.2", "", {}, "sha512-bIwNcGBaQ74shB5z1mRkxOpjikimuwsnOCEkZSzL67Z1FTyK1ObpENfyd2QvcvVW9Cjl+tHuw9ynpBnb2jPoJQ=="], + + "@react-native/metro-config/metro-config": ["metro-config@0.84.4", "", { "dependencies": { "connect": "^3.6.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", "metro": "0.84.4", "metro-cache": "0.84.4", "metro-core": "0.84.4", "metro-runtime": "0.84.4", "yaml": "^2.6.1" } }, "sha512-PMotGDjXcXLWo2TMRH+VR99phFNgYTwqh4OoieIKK3yTJa1Jmkl+fZJxDO0jfBvNF+WESHciHvpNuBtXaF3B0Q=="], + + "@react-native/metro-config/metro-runtime": ["metro-runtime@0.84.4", "", { "dependencies": { "@babel/runtime": "^7.25.0", "flow-enums-runtime": "^0.0.6" } }, "sha512-Jibypds4g7AhzdRKY+kDoj51s5EXMwgyp5ddtlreDAsWefMdOx+agWqgm0H2XSZ/ueanHHVM89fnf5OJnlxa8Q=="], + "@react-navigation/core/react-is": ["react-is@19.2.7", "", {}, "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A=="], "@react-navigation/drawer/@react-navigation/elements": ["@react-navigation/elements@2.9.30", "", { "dependencies": { "color": "^4.2.3", "use-latest-callback": "^0.2.4", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "@react-native-masked-view/masked-view": ">= 0.2.0", "@react-navigation/native": "^7.3.8", "react": ">= 18.2.0", "react-native": "*", "react-native-safe-area-context": ">= 4.0.0" }, "optionalPeers": ["@react-native-masked-view/masked-view"] }, "sha512-2isleieiRMmP4WNMV2Q1u3qP1M47ZqsJ2hJ/Og11FeKXK8YmUTHya7PW7ecsgAh2CXKTxAcbfJDFTSvq2D++Tw=="], @@ -2244,8 +2259,6 @@ "expo/@expo/config": ["@expo/config@12.0.14", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "@expo/config-plugins": "~54.0.5", "@expo/config-types": "^54.0.10", "@expo/json-file": "^10.0.16", "deepmerge": "^4.3.1", "getenv": "^2.0.0", "glob": "^13.0.0", "require-from-string": "^2.0.2", "resolve-from": "^5.0.0", "resolve-workspace-root": "^2.0.0", "semver": "^7.6.0", "slugify": "^1.3.4", "sucrase": "~3.35.1" } }, "sha512-3dfbBd9LnPDgyylhCgkOsaG8Adg52uOVOTQYH5lf23a/t8M5eQpXKCvzUarrf62B78057n2NnkiofK9TfPgvzw=="], - "expo/babel-preset-expo": ["babel-preset-expo@54.0.12", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.27.1", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.0", "@react-native/babel-preset": "0.81.5", "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-native-web": "~0.21.0", "babel-plugin-syntax-hermes-parser": "^0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "debug": "^4.3.4", "resolve-from": "^5.0.0" }, "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", "react-refresh": ">=0.14.0 <1.0.0" }, "optionalPeers": ["@babel/runtime", "expo"] }, "sha512-6xeSkdaixmQhWSYL7tfLu0pOS0BY+8ftwmdNSHtpEFSizrXYZkCjk/B6Dxr+6nwNRihixMcS0aBlWS1wlDl3pw=="], - "expo-modules-autolinking/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], "expo-router/semver": ["semver@7.6.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A=="], @@ -2270,8 +2283,6 @@ "glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "hoist-non-react-statics/react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], - "istanbul-lib-instrument/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "jest-message-util/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], @@ -2338,6 +2349,8 @@ "plist/@xmldom/xmldom": ["@xmldom/xmldom@0.9.10", "", {}, "sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw=="], + "pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], "react-devtools-core/ws": ["ws@7.5.11", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA=="], @@ -2346,8 +2359,6 @@ "react-native-web/memoize-one": ["memoize-one@6.0.0", "", {}, "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="], - "react-native-worklets/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], - "read-yaml-file/js-yaml": ["js-yaml@3.15.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog=="], "requireg/resolve": ["resolve@1.7.1", "", { "dependencies": { "path-parse": "^1.0.5" } }, "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw=="], @@ -2384,6 +2395,8 @@ "@ankhorage/templates/@ankhorage/zora/@ankhorage/contracts": ["@ankhorage/contracts@2.1.0", "", { "dependencies": { "@ankhorage/color-theory": "^0.0.7" } }, "sha512-QGG0atpGDe9+BUWzWvV83Kj309TBOK76yBRbWOoQli8g0LY8QLb7Z4UquD+qVhtWJTp3Y1jHUTEttQ0WjdhY/Q=="], + "@ankhorage/templates/@ankhorage/zora/@ankhorage/surface": ["@ankhorage/surface@2.0.3", "", { "dependencies": { "@ankhorage/color-theory": "^0.0.7", "@ankhorage/contracts": "^2.1.0" }, "peerDependencies": { "@expo/vector-icons": ">=14.0.0", "expo-font": "^55.0.6", "react": ">=18.2.0", "react-native": ">=0.72.0", "react-native-safe-area-context": "^5.0.0" }, "optionalPeers": ["@expo/vector-icons", "expo-font"] }, "sha512-F5uG1Hun98N0c8fYgXAOlliUoIgX1LRm5B5IyiN0I2GEiyW12mC1UOu2MNn+9PAjZNdH1tsNbHHikw/OJhh5jA=="], + "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], "@babel/highlight/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], @@ -2450,6 +2463,18 @@ "@radix-ui/react-primitive/@radix-ui/react-slot/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], + "@react-native/metro-babel-transformer/@react-native/babel-preset/@react-native/babel-plugin-codegen": ["@react-native/babel-plugin-codegen@0.86.2", "", { "dependencies": { "@babel/traverse": "^7.29.0", "@react-native/codegen": "0.86.2" } }, "sha512-NNDZqOlNbH5SzgPks1jFDYH3234Rpa5e/nhZymxhIiBH3NcE3uD+rGj/HWXhH7nHF2ToGK6XbUpqy7nmJPeh+g=="], + + "@react-native/metro-babel-transformer/@react-native/babel-preset/babel-plugin-syntax-hermes-parser": ["babel-plugin-syntax-hermes-parser@0.36.0", "", { "dependencies": { "hermes-parser": "0.36.0" } }, "sha512-LhD0xdoedDw7ansQgXbB2DADLZIK/LRXuWNBPuVzMc5S2WK5GyT89tCM+cQzxFGO0mGyLK6D5TrVOJJzAoDy8Q=="], + + "@react-native/metro-babel-transformer/hermes-parser/hermes-estree": ["hermes-estree@0.36.0", "", {}, "sha512-A1+8zn5oss2CFP7pKsOaxorQG6FNIz1WU1VDqruLPPZl3LVgeE2C5xfFg8Ow6/Ow4mSslLLtYP1J3n38eKyW9w=="], + + "@react-native/metro-config/metro-config/metro": ["metro@0.84.4", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/core": "^7.25.2", "@babel/generator": "^7.29.1", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "accepts": "^2.0.0", "ci-info": "^2.0.0", "connect": "^3.6.5", "debug": "^4.4.0", "error-stack-parser": "^2.0.6", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", "hermes-parser": "0.35.0", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", "metro-babel-transformer": "0.84.4", "metro-cache": "0.84.4", "metro-cache-key": "0.84.4", "metro-config": "0.84.4", "metro-core": "0.84.4", "metro-file-map": "0.84.4", "metro-resolver": "0.84.4", "metro-runtime": "0.84.4", "metro-source-map": "0.84.4", "metro-symbolicate": "0.84.4", "metro-transform-plugins": "0.84.4", "metro-transform-worker": "0.84.4", "mime-types": "^3.0.1", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", "source-map": "^0.5.6", "throat": "^5.0.0", "ws": "^7.5.10", "yargs": "^17.6.2" }, "bin": { "metro": "src/cli.js" } }, "sha512-8ETTubqfD6ornDy2zYDvRcKnVDOXdFJsjetYDBsY4oAsb6NJkiwFR+FaMESyGppFmQUyBQA4H4sFGxzcQSGtFA=="], + + "@react-native/metro-config/metro-config/metro-cache": ["metro-cache@0.84.4", "", { "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", "metro-core": "0.84.4" } }, "sha512-gpcFQdSLUwUCk71saKoE64jLFbx2nwTfVCcPSULMNT8QYq0p1eZZE29Jvd0HtT/UlhC3ZOutLxJME5xqD2JUZg=="], + + "@react-native/metro-config/metro-config/metro-core": ["metro-core@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", "metro-resolver": "0.84.4" } }, "sha512-HONpWC5LGXZn3ffkd4Hu6AIrfE7j4Z0g0wMo/goV24WOB3lhuFZ40KgvaDiSw8iyQHloMYay5N/wPX+z8oN/PQ=="], + "@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@2.1.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA=="], "accepts/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], @@ -2562,6 +2587,36 @@ "@manypkg/find-root/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + "@react-native/metro-babel-transformer/@react-native/babel-preset/@react-native/babel-plugin-codegen/@react-native/codegen": ["@react-native/codegen@0.86.2", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/parser": "^7.29.0", "hermes-parser": "0.36.0", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "tinyglobby": "^0.2.15", "yargs": "^17.6.2" } }, "sha512-xKkudsahUJ1n//55g4fXk5BStVqqmZlz8HQveL45ZxcfDnwvhuYe2GymksQANFsSN+slvrarjrfq8kIxJzbceA=="], + + "@react-native/metro-config/metro-config/metro/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], + + "@react-native/metro-config/metro-config/metro/accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], + + "@react-native/metro-config/metro-config/metro/ci-info": ["ci-info@2.0.0", "", {}, "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="], + + "@react-native/metro-config/metro-config/metro/hermes-parser": ["hermes-parser@0.35.0", "", { "dependencies": { "hermes-estree": "0.35.0" } }, "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA=="], + + "@react-native/metro-config/metro-config/metro/metro-babel-transformer": ["metro-babel-transformer@0.84.4", "", { "dependencies": { "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", "hermes-parser": "0.35.0", "metro-cache-key": "0.84.4", "nullthrows": "^1.1.1" } }, "sha512-rvCfz8snl9h20VcvpOHxZuHP1SlAkv4HXbzw7nyyVwu6Eqo5PRerbakQ9XmUCOsRy70spJ37O+G1TK8oMzo48g=="], + + "@react-native/metro-config/metro-config/metro/metro-cache-key": ["metro-cache-key@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-wVO79aGrkYImpnaVS4+d5RrRBRPX31QtvKB3wKGBuiNSznduZTQHzsrJZRroFJSwnygrzdsGUtDQPuqqFjFdvw=="], + + "@react-native/metro-config/metro-config/metro/metro-file-map": ["metro-file-map@0.84.4", "", { "dependencies": { "debug": "^4.4.0", "fb-watchman": "^2.0.0", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "nullthrows": "^1.1.1", "walker": "^1.0.7" } }, "sha512-KSVDi/u60hKPx++NLu3MTIvyjzNoJnFAF8PQFxaj1jiSka/wjw+Ua6sNuJ0TDHQv+7AAoFQxeMgaRAe8Yic5wQ=="], + + "@react-native/metro-config/metro-config/metro/metro-resolver": ["metro-resolver@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-1qLgbxQ5ZGhhutuPot1Yp348ofDsATL2WkrHF65TobqTT9K3P9qJXw38bomk7ncp5B7OYMfWwtyBZo1lCV792A=="], + + "@react-native/metro-config/metro-config/metro/metro-source-map": ["metro-source-map@0.84.4", "", { "dependencies": { "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-symbolicate": "0.84.4", "nullthrows": "^1.1.1", "ob1": "0.84.4", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "sha512-jbWkPxIesVuo1IWkvezmMJld6iu8nD62GsrZiV6jP37AOdbo4OBq1FJ+qkOg8sV05wAHB//jAbziuW0SlJfW4g=="], + + "@react-native/metro-config/metro-config/metro/metro-symbolicate": ["metro-symbolicate@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-source-map": "0.84.4", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "bin": { "metro-symbolicate": "src/index.js" } }, "sha512-OnfpacxUqGPZQ27t8qK9mFa7uqHIlVWeqRqkCbvMvreEBiamEeOn8krKtcwgP5M4cYDPwuSmCTopHMVthqG4zA=="], + + "@react-native/metro-config/metro-config/metro/metro-transform-plugins": ["metro-transform-plugins@0.84.4", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/generator": "^7.29.1", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "flow-enums-runtime": "^0.0.6", "nullthrows": "^1.1.1" } }, "sha512-kehr6HbAecqD0/a3xLXobELdPaAmRAl8bel0qagPF4vhZtux93nS8S4eq2kgKt6J2GnQpVjSoW1PXdst04mwow=="], + + "@react-native/metro-config/metro-config/metro/metro-transform-worker": ["metro-transform-worker@0.84.4", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/generator": "^7.29.1", "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", "metro": "0.84.4", "metro-babel-transformer": "0.84.4", "metro-cache": "0.84.4", "metro-cache-key": "0.84.4", "metro-minify-terser": "0.84.4", "metro-source-map": "0.84.4", "metro-transform-plugins": "0.84.4", "nullthrows": "^1.1.1" } }, "sha512-W1IYMvvXTu4MxYr7d9h7CeG2vpIr3bmLLIavkPY4O1ilzDrvS8z/NEe6y+pC44Ff7raMXQgYSfdqDUwN/i39gg=="], + + "@react-native/metro-config/metro-config/metro/ws": ["ws@7.5.11", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA=="], + + "@react-native/metro-config/metro-config/metro-core/metro-resolver": ["metro-resolver@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-1qLgbxQ5ZGhhutuPot1Yp348ofDsATL2WkrHF65TobqTT9K3P9qJXw38bomk7ncp5B7OYMfWwtyBZo1lCV792A=="], + "@ts-morph/common/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "babel-plugin-module-resolver/glob/minimatch/brace-expansion": ["brace-expansion@2.1.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA=="], @@ -2602,6 +2657,14 @@ "@manypkg/find-root/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "@react-native/metro-config/metro-config/metro/accepts/negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], + + "@react-native/metro-config/metro-config/metro/hermes-parser/hermes-estree": ["hermes-estree@0.35.0", "", {}, "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg=="], + + "@react-native/metro-config/metro-config/metro/metro-source-map/ob1": ["ob1@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-eJXMpz4aQHXF/YBB9ddqZDIS+ooO91hObo9FoW/xBkr54/zCwYYCDqT/O54vNo8kOkWs5Ou/y28NgdrV0edQNA=="], + + "@react-native/metro-config/metro-config/metro/metro-transform-worker/metro-minify-terser": ["metro-minify-terser@0.84.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "terser": "^5.15.0" } }, "sha512-5qpbaVOMC7CPitIpuewzVeGw7E+C3ykbv2mqTjQLl85Z3annSVGlSCTcsZjqXZzjupfK4Ztj3dDc4kc44NZwtQ=="], + "babel-plugin-module-resolver/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "expo/@expo/config/glob/path-scurry/lru-cache": ["lru-cache@11.5.1", "", {}, "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A=="], diff --git a/docs/studio-runtime-selection.md b/docs/studio-runtime-selection.md new file mode 100644 index 00000000..8d428339 --- /dev/null +++ b/docs/studio-runtime-selection.md @@ -0,0 +1,30 @@ +# Studio Runtime selection + +Generated apps compose Studio selection through the normal Runtime renderer configuration: +`wrapNode` records the bubbling node path, while one root gesture recognizer commits a stationary +selection. Edit mode supplies `interactionPolicy="passive"` only to components that explicitly +support the canonical policy; Preview restores `enabled`. + +Unsupported extension components can expose indicator geometry on native by attaching +`useStudioUnsupportedNodeMeasurement()` from `@ankhorage/studio/runtime` to their existing native +root view: + +```tsx +const measurement = useStudioUnsupportedNodeMeasurement(); + +return ( + + {children} + +); +``` + +The Studio recorder remains `display: "contents"` and therefore does not add a Yoga layout box. +The hook measures the component's authored root through React Native's public ref API. It does not +opt the component into interaction-policy support, clone the rendered element, or alter the +component's props or identity. + +The visual indicator is rendered by the root selection surface with `pointerEvents="none"`. +Native scroll input starts a bounded settle sequence that stops after stable measurements or a +strict sample limit; Preview, unmount, navigation, and removal of the last unsupported measurement +cancel pending work. diff --git a/package.json b/package.json index 72039a10..b976f235 100644 --- a/package.json +++ b/package.json @@ -240,11 +240,12 @@ "@ankhorage/supabase-auth": "^1.1.1", "@ankhorage/supabase-vault": "^0.2.0", "@ankhorage/templates": "^3.0.0", - "@ankhorage/zora": "^2.8.7", + "@ankhorage/zora": "^2.9.0", "@ankhorage/zora-chess": "^0.1.2", "@ankhorage/zora-tabletop": "^0.0.5", "@fastify/cors": "^11.2.0", - "fastify": "^5.7.4" + "fastify": "^5.7.4", + "react-native-gesture-handler": "~2.28.0" }, "peerDependencies": { "@expo/vector-icons": "^15.0.3", diff --git a/paradox/badges/npm.svg b/paradox/badges/npm.svg index bda86b36..1cde34c5 100644 --- a/paradox/badges/npm.svg +++ b/paradox/badges/npm.svg @@ -1,7 +1,7 @@ - -npm: v0.10.5 + +npm: v0.10.9 npm -v0.10.5 +v0.10.9 diff --git a/paradox/diagrams/architecture-overview.mmd b/paradox/diagrams/architecture-overview.mmd index 793e57b3..cb077d24 100644 --- a/paradox/diagrams/architecture-overview.mmd +++ b/paradox/diagrams/architecture-overview.mmd @@ -175,8 +175,10 @@ graph TD module_src_host_createStudioHost_ts --> module_src_host_orchestrator_projectManager_ts module_src_host_generatedAdminExpoWeb_smoke_test_ts["src/host/generatedAdminExpoWeb.smoke.test.ts"] package__ankhorage_studio -.-> module_src_host_generatedAdminExpoWeb_smoke_test_ts + module_src_host_generatedAdminExpoWeb_smoke_test_ts --> module_src_host_installedPackageProvenance_ts module_src_host_generatedAdminExpoWeb_smoke_test_ts --> module_src_host_orchestrator_moduleManager_ts module_src_host_generatedAdminExpoWeb_smoke_test_ts --> module_src_host_orchestrator_projectManager_ts + module_src_host_generatedAdminExpoWeb_smoke_test_ts --> module_src_host_orchestrator_semverRange_ts module_src_host_generatedAdminExpoWeb_smoke_test_ts --> module_src_host_templateRegistry_index_ts module_src_host_generatedAuthAdapterRuntime_smoke_test_ts["src/host/generatedAuthAdapterRuntime.smoke.test.ts"] package__ankhorage_studio -.-> module_src_host_generatedAuthAdapterRuntime_smoke_test_ts @@ -234,6 +236,11 @@ graph TD module_src_host_http_standalone_ts --> module_src_host_http_serverWithSecrets_ts module_src_host_index_ts["src/host/index.ts"] package__ankhorage_studio -.-> module_src_host_index_ts + module_src_host_installedPackageProvenance_test_ts["src/host/installedPackageProvenance.test.ts"] + package__ankhorage_studio -.-> module_src_host_installedPackageProvenance_test_ts + module_src_host_installedPackageProvenance_test_ts --> module_src_host_installedPackageProvenance_ts + module_src_host_installedPackageProvenance_ts["src/host/installedPackageProvenance.ts"] + package__ankhorage_studio -.-> module_src_host_installedPackageProvenance_ts module_src_host_layout_auth_resolveAuthLayoutPlan_test_ts["src/host/layout/auth/resolveAuthLayoutPlan.test.ts"] package__ankhorage_studio -.-> module_src_host_layout_auth_resolveAuthLayoutPlan_test_ts module_src_host_layout_auth_resolveAuthLayoutPlan_test_ts --> module_src_host_layout_auth_resolveAuthLayoutPlan_ts @@ -259,6 +266,9 @@ graph TD module_src_host_layout_layoutGenerator_ts --> module_src_host_modules_layout_ts module_src_host_layout_layoutGenerator_ts --> module_src_index_ts module_src_host_layout_layoutGenerator_ts --> module_src_studioAdminRouteModel_ts + module_src_host_layout_templates_auth_adapter_test_ts["src/host/layout/templates/auth/adapter.test.ts"] + package__ankhorage_studio -.-> module_src_host_layout_templates_auth_adapter_test_ts + module_src_host_layout_templates_auth_adapter_test_ts --> module_src_host_layout_templates_auth_adapter_ts module_src_host_layout_templates_auth_adapter_ts["src/host/layout/templates/auth/adapter.ts"] package__ankhorage_studio -.-> module_src_host_layout_templates_auth_adapter_ts module_src_host_layout_templates_auth_callback_ts["src/host/layout/templates/auth/callback.ts"] @@ -295,9 +305,6 @@ graph TD module_src_host_layout_templates_redirect_ts["src/host/layout/templates/redirect.ts"] package__ankhorage_studio -.-> module_src_host_layout_templates_redirect_ts module_src_host_layout_templates_redirect_ts --> module_src_host_layout_utils_escapeStringLiteral_ts - module_src_host_layout_templates_rootLayout_selectionDom_test_ts["src/host/layout/templates/rootLayout.selectionDom.test.ts"] - package__ankhorage_studio -.-> module_src_host_layout_templates_rootLayout_selectionDom_test_ts - module_src_host_layout_templates_rootLayout_selectionDom_test_ts --> module_src_host_layout_templates_rootLayout_ts module_src_host_layout_templates_rootLayout_test_ts["src/host/layout/templates/rootLayout.test.ts"] package__ankhorage_studio -.-> module_src_host_layout_templates_rootLayout_test_ts module_src_host_layout_templates_rootLayout_test_ts --> module_src_host_layout_templates_rootLayout_ts @@ -345,6 +352,15 @@ graph TD module_src_host_oauthFixtureConsumer_smoke_test_ts --> module_src_host_orchestrator_moduleManager_ts module_src_host_oauthFixtureConsumer_smoke_test_ts --> module_src_host_orchestrator_projectManager_ts module_src_host_oauthFixtureConsumer_smoke_test_ts --> module_src_host_templateRegistry_index_ts + module_src_host_orchestrator_expoSdk54AnimationCompatibility_test_ts["src/host/orchestrator/expoSdk54AnimationCompatibility.test.ts"] + package__ankhorage_studio -.-> module_src_host_orchestrator_expoSdk54AnimationCompatibility_test_ts + module_src_host_orchestrator_expoSdk54AnimationCompatibility_test_ts --> module_src_host_orchestrator_expoSdk54AnimationCompatibility_ts + module_src_host_orchestrator_expoSdk54AnimationCompatibility_test_ts --> module_src_host_orchestrator_templates_ts + module_src_host_orchestrator_expoSdk54AnimationCompatibility_ts["src/host/orchestrator/expoSdk54AnimationCompatibility.ts"] + package__ankhorage_studio -.-> module_src_host_orchestrator_expoSdk54AnimationCompatibility_ts + module_src_host_orchestrator_generatedAppFiles_test_ts["src/host/orchestrator/generatedAppFiles.test.ts"] + package__ankhorage_studio -.-> module_src_host_orchestrator_generatedAppFiles_test_ts + module_src_host_orchestrator_generatedAppFiles_test_ts --> module_src_host_orchestrator_generatedAppFiles_ts module_src_host_orchestrator_generatedAppFiles_ts["src/host/orchestrator/generatedAppFiles.ts"] package__ankhorage_studio -.-> module_src_host_orchestrator_generatedAppFiles_ts module_src_host_orchestrator_generatedAppFiles_ts --> module_src_host_zoraExtensions_index_ts @@ -419,6 +435,11 @@ graph TD module_src_host_orchestrator_scaffolder_ts --> module_src_host_orchestrator_templates_ts module_src_host_orchestrator_scaffolder_ts --> module_src_host_templateRegistry_index_ts module_src_host_orchestrator_scaffolder_ts --> module_src_host_zoraExtensions_index_ts + module_src_host_orchestrator_semverRange_test_ts["src/host/orchestrator/semverRange.test.ts"] + package__ankhorage_studio -.-> module_src_host_orchestrator_semverRange_test_ts + module_src_host_orchestrator_semverRange_test_ts --> module_src_host_orchestrator_semverRange_ts + module_src_host_orchestrator_semverRange_ts["src/host/orchestrator/semverRange.ts"] + package__ankhorage_studio -.-> module_src_host_orchestrator_semverRange_ts module_src_host_orchestrator_studioInfraUp_ts["src/host/orchestrator/studioInfraUp.ts"] package__ankhorage_studio -.-> module_src_host_orchestrator_studioInfraUp_ts module_src_host_orchestrator_studioInfraUp_ts --> module_src_host_orchestrator_infraRuntime_ts @@ -426,9 +447,11 @@ graph TD module_src_host_orchestrator_studioInfraUp_ts --> module_src_host_secrets_trustedOAuthInfraEnvironment_ts module_src_host_orchestrator_templates_test_ts["src/host/orchestrator/templates.test.ts"] package__ankhorage_studio -.-> module_src_host_orchestrator_templates_test_ts + module_src_host_orchestrator_templates_test_ts --> module_src_host_orchestrator_expoSdk54AnimationCompatibility_ts module_src_host_orchestrator_templates_test_ts --> module_src_host_orchestrator_templates_ts module_src_host_orchestrator_templates_ts["src/host/orchestrator/templates.ts"] package__ankhorage_studio -.-> module_src_host_orchestrator_templates_ts + module_src_host_orchestrator_templates_ts --> module_src_host_orchestrator_expoSdk54AnimationCompatibility_ts module_src_host_orchestrator_workspaceRuntime_ts["src/host/orchestrator/workspaceRuntime.ts"] package__ankhorage_studio -.-> module_src_host_orchestrator_workspaceRuntime_ts module_src_host_secrets_bunSupabaseVaultClient_ts["src/host/secrets/bunSupabaseVaultClient.ts"] @@ -593,6 +616,24 @@ graph TD package__ankhorage_studio -.-> module_src_runtime_appExtensionRegistry_ts module_src_runtime_index_ts["src/runtime/index.ts"] package__ankhorage_studio -.-> module_src_runtime_index_ts + module_src_runtime_indicatorRefreshCoordinator_test_ts["src/runtime/indicatorRefreshCoordinator.test.ts"] + package__ankhorage_studio -.-> module_src_runtime_indicatorRefreshCoordinator_test_ts + module_src_runtime_indicatorRefreshCoordinator_test_ts --> module_src_runtime_indicatorRefreshCoordinator_ts + module_src_runtime_indicatorRefreshCoordinator_ts["src/runtime/indicatorRefreshCoordinator.ts"] + package__ankhorage_studio -.-> module_src_runtime_indicatorRefreshCoordinator_ts + module_src_runtime_indicatorSettleCoordinator_test_ts["src/runtime/indicatorSettleCoordinator.test.ts"] + package__ankhorage_studio -.-> module_src_runtime_indicatorSettleCoordinator_test_ts + module_src_runtime_indicatorSettleCoordinator_test_ts --> module_src_runtime_indicatorSettleCoordinator_ts + module_src_runtime_indicatorSettleCoordinator_ts["src/runtime/indicatorSettleCoordinator.ts"] + package__ankhorage_studio -.-> module_src_runtime_indicatorSettleCoordinator_ts + module_src_runtime_interactionPolicy_test_ts["src/runtime/interactionPolicy.test.ts"] + package__ankhorage_studio -.-> module_src_runtime_interactionPolicy_test_ts + module_src_runtime_interactionPolicy_test_ts --> module_src_runtime_interactionPolicyCore_ts + module_src_runtime_interactionPolicy_ts["src/runtime/interactionPolicy.ts"] + package__ankhorage_studio -.-> module_src_runtime_interactionPolicy_ts + module_src_runtime_interactionPolicy_ts --> module_src_runtime_interactionPolicyCore_ts + module_src_runtime_interactionPolicyCore_ts["src/runtime/interactionPolicyCore.ts"] + package__ankhorage_studio -.-> module_src_runtime_interactionPolicyCore_ts module_src_runtime_localizationPreview_ts["src/runtime/localizationPreview.ts"] package__ankhorage_studio -.-> module_src_runtime_localizationPreview_ts module_src_runtime_previewRegistry_ts["src/runtime/previewRegistry.ts"] @@ -601,6 +642,8 @@ graph TD module_src_runtime_previewRuntimeConfig_ts["src/runtime/previewRuntimeConfig.ts"] package__ankhorage_studio -.-> module_src_runtime_previewRuntimeConfig_ts module_src_runtime_previewRuntimeConfig_ts --> module_src_runtime_actionSuppression_ts + module_src_runtime_previewRuntimeConfig_ts --> module_src_runtime_interactionPolicy_ts + module_src_runtime_previewRuntimeConfig_ts --> module_src_runtime_interactionPolicyCore_ts module_src_runtime_previewRuntimeConfig_ts --> module_src_runtime_previewRegistry_ts module_src_runtime_registry_tsx["src/runtime/registry.tsx"] package__ankhorage_studio -.-> module_src_runtime_registry_tsx @@ -608,6 +651,24 @@ graph TD package__ankhorage_studio -.-> module_src_runtime_runtimeActions_ts module_src_runtime_runtimeSurface_test_ts["src/runtime/runtimeSurface.test.ts"] package__ankhorage_studio -.-> module_src_runtime_runtimeSurface_test_ts + module_src_runtime_stationarySelection_test_ts["src/runtime/stationarySelection.test.ts"] + package__ankhorage_studio -.-> module_src_runtime_stationarySelection_test_ts + module_src_runtime_stationarySelection_ts["src/runtime/stationarySelection.ts"] + package__ankhorage_studio -.-> module_src_runtime_stationarySelection_ts + module_src_runtime_stationarySelection_ts --> module_src_runtime_indicatorRefreshCoordinator_ts + module_src_runtime_stationarySelection_ts --> module_src_runtime_indicatorSettleCoordinator_ts + module_src_runtime_stationarySelection_ts --> module_src_runtime_stationarySelectionCoordinator_ts + module_src_runtime_stationarySelection_ts --> module_src_runtime_stationarySelectionInputState_ts + module_src_runtime_stationarySelectionCoordinator_test_ts["src/runtime/stationarySelectionCoordinator.test.ts"] + package__ankhorage_studio -.-> module_src_runtime_stationarySelectionCoordinator_test_ts + module_src_runtime_stationarySelectionCoordinator_test_ts --> module_src_runtime_stationarySelectionCoordinator_ts + module_src_runtime_stationarySelectionCoordinator_ts["src/runtime/stationarySelectionCoordinator.ts"] + package__ankhorage_studio -.-> module_src_runtime_stationarySelectionCoordinator_ts + module_src_runtime_stationarySelectionInputState_test_ts["src/runtime/stationarySelectionInputState.test.ts"] + package__ankhorage_studio -.-> module_src_runtime_stationarySelectionInputState_test_ts + module_src_runtime_stationarySelectionInputState_test_ts --> module_src_runtime_stationarySelectionInputState_ts + module_src_runtime_stationarySelectionInputState_ts["src/runtime/stationarySelectionInputState.ts"] + package__ankhorage_studio -.-> module_src_runtime_stationarySelectionInputState_ts module_src_runtime_useRuntimeAction_ts["src/runtime/useRuntimeAction.ts"] package__ankhorage_studio -.-> module_src_runtime_useRuntimeAction_ts module_src_runtime_useRuntimeAction_ts --> module_src_runtime_runtimeActions_ts diff --git a/paradox/diagrams/export-graph.mmd b/paradox/diagrams/export-graph.mmd index f664ba08..cb4c1e3d 100644 --- a/paradox/diagrams/export-graph.mmd +++ b/paradox/diagrams/export-graph.mmd @@ -57,6 +57,8 @@ graph LR module_src_host_http_serverWithSecrets_ts["src/host/http/serverWithSecrets.ts"] module_src_host_http_standalone_ts["src/host/http/standalone.ts"] module_src_host_index_ts["src/host/index.ts"] + module_src_host_installedPackageProvenance_test_ts["src/host/installedPackageProvenance.test.ts"] + module_src_host_installedPackageProvenance_ts["src/host/installedPackageProvenance.ts"] module_src_host_layout_auth_resolveAuthLayoutPlan_test_ts["src/host/layout/auth/resolveAuthLayoutPlan.test.ts"] module_src_host_layout_auth_resolveAuthLayoutPlan_ts["src/host/layout/auth/resolveAuthLayoutPlan.ts"] module_src_host_layout_authRootBootstrap_test_ts["src/host/layout/authRootBootstrap.test.ts"] @@ -64,6 +66,7 @@ graph LR module_src_host_layout_generatedImportComposer_ts["src/host/layout/generatedImportComposer.ts"] module_src_host_layout_layoutGenerator_test_ts["src/host/layout/layoutGenerator.test.ts"] module_src_host_layout_layoutGenerator_ts["src/host/layout/layoutGenerator.ts"] + module_src_host_layout_templates_auth_adapter_test_ts["src/host/layout/templates/auth/adapter.test.ts"] module_src_host_layout_templates_auth_adapter_ts["src/host/layout/templates/auth/adapter.ts"] module_src_host_layout_templates_auth_callback_ts["src/host/layout/templates/auth/callback.ts"] module_src_host_layout_templates_auth_oauth_ts["src/host/layout/templates/auth/oauth.ts"] @@ -75,7 +78,6 @@ graph LR module_src_host_layout_templates_nestedLayout_test_ts["src/host/layout/templates/nestedLayout.test.ts"] module_src_host_layout_templates_nestedLayout_ts["src/host/layout/templates/nestedLayout.ts"] module_src_host_layout_templates_redirect_ts["src/host/layout/templates/redirect.ts"] - module_src_host_layout_templates_rootLayout_selectionDom_test_ts["src/host/layout/templates/rootLayout.selectionDom.test.ts"] module_src_host_layout_templates_rootLayout_test_ts["src/host/layout/templates/rootLayout.test.ts"] module_src_host_layout_templates_rootLayout_ts["src/host/layout/templates/rootLayout.ts"] module_src_host_layout_templates_screen_ts["src/host/layout/templates/screen.ts"] @@ -91,6 +93,9 @@ graph LR module_src_host_modules_layout_ts["src/host/modules/layout.ts"] module_src_host_modules_runtime_LocalFsTargetAdapter_ts["src/host/modules/runtime/LocalFsTargetAdapter.ts"] module_src_host_oauthFixtureConsumer_smoke_test_ts["src/host/oauthFixtureConsumer.smoke.test.ts"] + module_src_host_orchestrator_expoSdk54AnimationCompatibility_test_ts["src/host/orchestrator/expoSdk54AnimationCompatibility.test.ts"] + module_src_host_orchestrator_expoSdk54AnimationCompatibility_ts["src/host/orchestrator/expoSdk54AnimationCompatibility.ts"] + module_src_host_orchestrator_generatedAppFiles_test_ts["src/host/orchestrator/generatedAppFiles.test.ts"] module_src_host_orchestrator_generatedAppFiles_ts["src/host/orchestrator/generatedAppFiles.ts"] module_src_host_orchestrator_generatedRouteCleanup_ts["src/host/orchestrator/generatedRouteCleanup.ts"] module_src_host_orchestrator_infraGenerator_ts["src/host/orchestrator/infraGenerator.ts"] @@ -108,6 +113,8 @@ graph LR module_src_host_orchestrator_projectStoreSummary_test_ts["src/host/orchestrator/projectStoreSummary.test.ts"] module_src_host_orchestrator_resolveMutations_ts["src/host/orchestrator/resolveMutations.ts"] module_src_host_orchestrator_scaffolder_ts["src/host/orchestrator/scaffolder.ts"] + module_src_host_orchestrator_semverRange_test_ts["src/host/orchestrator/semverRange.test.ts"] + module_src_host_orchestrator_semverRange_ts["src/host/orchestrator/semverRange.ts"] module_src_host_orchestrator_studioInfraUp_ts["src/host/orchestrator/studioInfraUp.ts"] module_src_host_orchestrator_templates_test_ts["src/host/orchestrator/templates.test.ts"] module_src_host_orchestrator_templates_ts["src/host/orchestrator/templates.ts"] @@ -165,12 +172,25 @@ graph LR module_src_runtime_actionSuppression_ts["src/runtime/actionSuppression.ts"] module_src_runtime_appExtensionRegistry_ts["src/runtime/appExtensionRegistry.ts"] module_src_runtime_index_ts["src/runtime/index.ts"] + module_src_runtime_indicatorRefreshCoordinator_test_ts["src/runtime/indicatorRefreshCoordinator.test.ts"] + module_src_runtime_indicatorRefreshCoordinator_ts["src/runtime/indicatorRefreshCoordinator.ts"] + module_src_runtime_indicatorSettleCoordinator_test_ts["src/runtime/indicatorSettleCoordinator.test.ts"] + module_src_runtime_indicatorSettleCoordinator_ts["src/runtime/indicatorSettleCoordinator.ts"] + module_src_runtime_interactionPolicy_test_ts["src/runtime/interactionPolicy.test.ts"] + module_src_runtime_interactionPolicy_ts["src/runtime/interactionPolicy.ts"] + module_src_runtime_interactionPolicyCore_ts["src/runtime/interactionPolicyCore.ts"] module_src_runtime_localizationPreview_ts["src/runtime/localizationPreview.ts"] module_src_runtime_previewRegistry_ts["src/runtime/previewRegistry.ts"] module_src_runtime_previewRuntimeConfig_ts["src/runtime/previewRuntimeConfig.ts"] module_src_runtime_registry_tsx["src/runtime/registry.tsx"] module_src_runtime_runtimeActions_ts["src/runtime/runtimeActions.ts"] module_src_runtime_runtimeSurface_test_ts["src/runtime/runtimeSurface.test.ts"] + module_src_runtime_stationarySelection_test_ts["src/runtime/stationarySelection.test.ts"] + module_src_runtime_stationarySelection_ts["src/runtime/stationarySelection.ts"] + module_src_runtime_stationarySelectionCoordinator_test_ts["src/runtime/stationarySelectionCoordinator.test.ts"] + module_src_runtime_stationarySelectionCoordinator_ts["src/runtime/stationarySelectionCoordinator.ts"] + module_src_runtime_stationarySelectionInputState_test_ts["src/runtime/stationarySelectionInputState.test.ts"] + module_src_runtime_stationarySelectionInputState_ts["src/runtime/stationarySelectionInputState.ts"] module_src_runtime_useRuntimeAction_ts["src/runtime/useRuntimeAction.ts"] module_src_runtimeDiagnosticsModel_test_ts["src/runtimeDiagnosticsModel.test.ts"] module_src_runtimeDiagnosticsModel_ts["src/runtimeDiagnosticsModel.ts"] diff --git a/paradox/diagrams/module-relationships.mmd b/paradox/diagrams/module-relationships.mmd index 1a6a9179..a22cd43e 100644 --- a/paradox/diagrams/module-relationships.mmd +++ b/paradox/diagrams/module-relationships.mmd @@ -57,6 +57,8 @@ graph LR module_src_host_http_serverWithSecrets_ts["src/host/http/serverWithSecrets.ts"] module_src_host_http_standalone_ts["src/host/http/standalone.ts"] module_src_host_index_ts["src/host/index.ts"] + module_src_host_installedPackageProvenance_test_ts["src/host/installedPackageProvenance.test.ts"] + module_src_host_installedPackageProvenance_ts["src/host/installedPackageProvenance.ts"] module_src_host_layout_auth_resolveAuthLayoutPlan_test_ts["src/host/layout/auth/resolveAuthLayoutPlan.test.ts"] module_src_host_layout_auth_resolveAuthLayoutPlan_ts["src/host/layout/auth/resolveAuthLayoutPlan.ts"] module_src_host_layout_authRootBootstrap_test_ts["src/host/layout/authRootBootstrap.test.ts"] @@ -64,6 +66,7 @@ graph LR module_src_host_layout_generatedImportComposer_ts["src/host/layout/generatedImportComposer.ts"] module_src_host_layout_layoutGenerator_test_ts["src/host/layout/layoutGenerator.test.ts"] module_src_host_layout_layoutGenerator_ts["src/host/layout/layoutGenerator.ts"] + module_src_host_layout_templates_auth_adapter_test_ts["src/host/layout/templates/auth/adapter.test.ts"] module_src_host_layout_templates_auth_adapter_ts["src/host/layout/templates/auth/adapter.ts"] module_src_host_layout_templates_auth_callback_ts["src/host/layout/templates/auth/callback.ts"] module_src_host_layout_templates_auth_oauth_ts["src/host/layout/templates/auth/oauth.ts"] @@ -75,7 +78,6 @@ graph LR module_src_host_layout_templates_nestedLayout_test_ts["src/host/layout/templates/nestedLayout.test.ts"] module_src_host_layout_templates_nestedLayout_ts["src/host/layout/templates/nestedLayout.ts"] module_src_host_layout_templates_redirect_ts["src/host/layout/templates/redirect.ts"] - module_src_host_layout_templates_rootLayout_selectionDom_test_ts["src/host/layout/templates/rootLayout.selectionDom.test.ts"] module_src_host_layout_templates_rootLayout_test_ts["src/host/layout/templates/rootLayout.test.ts"] module_src_host_layout_templates_rootLayout_ts["src/host/layout/templates/rootLayout.ts"] module_src_host_layout_templates_screen_ts["src/host/layout/templates/screen.ts"] @@ -91,6 +93,9 @@ graph LR module_src_host_modules_layout_ts["src/host/modules/layout.ts"] module_src_host_modules_runtime_LocalFsTargetAdapter_ts["src/host/modules/runtime/LocalFsTargetAdapter.ts"] module_src_host_oauthFixtureConsumer_smoke_test_ts["src/host/oauthFixtureConsumer.smoke.test.ts"] + module_src_host_orchestrator_expoSdk54AnimationCompatibility_test_ts["src/host/orchestrator/expoSdk54AnimationCompatibility.test.ts"] + module_src_host_orchestrator_expoSdk54AnimationCompatibility_ts["src/host/orchestrator/expoSdk54AnimationCompatibility.ts"] + module_src_host_orchestrator_generatedAppFiles_test_ts["src/host/orchestrator/generatedAppFiles.test.ts"] module_src_host_orchestrator_generatedAppFiles_ts["src/host/orchestrator/generatedAppFiles.ts"] module_src_host_orchestrator_generatedRouteCleanup_ts["src/host/orchestrator/generatedRouteCleanup.ts"] module_src_host_orchestrator_infraGenerator_ts["src/host/orchestrator/infraGenerator.ts"] @@ -108,6 +113,8 @@ graph LR module_src_host_orchestrator_projectStoreSummary_test_ts["src/host/orchestrator/projectStoreSummary.test.ts"] module_src_host_orchestrator_resolveMutations_ts["src/host/orchestrator/resolveMutations.ts"] module_src_host_orchestrator_scaffolder_ts["src/host/orchestrator/scaffolder.ts"] + module_src_host_orchestrator_semverRange_test_ts["src/host/orchestrator/semverRange.test.ts"] + module_src_host_orchestrator_semverRange_ts["src/host/orchestrator/semverRange.ts"] module_src_host_orchestrator_studioInfraUp_ts["src/host/orchestrator/studioInfraUp.ts"] module_src_host_orchestrator_templates_test_ts["src/host/orchestrator/templates.test.ts"] module_src_host_orchestrator_templates_ts["src/host/orchestrator/templates.ts"] @@ -165,12 +172,25 @@ graph LR module_src_runtime_actionSuppression_ts["src/runtime/actionSuppression.ts"] module_src_runtime_appExtensionRegistry_ts["src/runtime/appExtensionRegistry.ts"] module_src_runtime_index_ts["src/runtime/index.ts"] + module_src_runtime_indicatorRefreshCoordinator_test_ts["src/runtime/indicatorRefreshCoordinator.test.ts"] + module_src_runtime_indicatorRefreshCoordinator_ts["src/runtime/indicatorRefreshCoordinator.ts"] + module_src_runtime_indicatorSettleCoordinator_test_ts["src/runtime/indicatorSettleCoordinator.test.ts"] + module_src_runtime_indicatorSettleCoordinator_ts["src/runtime/indicatorSettleCoordinator.ts"] + module_src_runtime_interactionPolicy_test_ts["src/runtime/interactionPolicy.test.ts"] + module_src_runtime_interactionPolicy_ts["src/runtime/interactionPolicy.ts"] + module_src_runtime_interactionPolicyCore_ts["src/runtime/interactionPolicyCore.ts"] module_src_runtime_localizationPreview_ts["src/runtime/localizationPreview.ts"] module_src_runtime_previewRegistry_ts["src/runtime/previewRegistry.ts"] module_src_runtime_previewRuntimeConfig_ts["src/runtime/previewRuntimeConfig.ts"] module_src_runtime_registry_tsx["src/runtime/registry.tsx"] module_src_runtime_runtimeActions_ts["src/runtime/runtimeActions.ts"] module_src_runtime_runtimeSurface_test_ts["src/runtime/runtimeSurface.test.ts"] + module_src_runtime_stationarySelection_test_ts["src/runtime/stationarySelection.test.ts"] + module_src_runtime_stationarySelection_ts["src/runtime/stationarySelection.ts"] + module_src_runtime_stationarySelectionCoordinator_test_ts["src/runtime/stationarySelectionCoordinator.test.ts"] + module_src_runtime_stationarySelectionCoordinator_ts["src/runtime/stationarySelectionCoordinator.ts"] + module_src_runtime_stationarySelectionInputState_test_ts["src/runtime/stationarySelectionInputState.test.ts"] + module_src_runtime_stationarySelectionInputState_ts["src/runtime/stationarySelectionInputState.ts"] module_src_runtime_useRuntimeAction_ts["src/runtime/useRuntimeAction.ts"] module_src_runtimeDiagnosticsModel_test_ts["src/runtimeDiagnosticsModel.test.ts"] module_src_runtimeDiagnosticsModel_ts["src/runtimeDiagnosticsModel.ts"] @@ -300,8 +320,10 @@ graph LR module_src_host_createStudioHost_ts --> module_src_host_orchestrator_infraRuntime_ts module_src_host_createStudioHost_ts --> module_src_host_orchestrator_moduleManager_ts module_src_host_createStudioHost_ts --> module_src_host_orchestrator_projectManager_ts + module_src_host_generatedAdminExpoWeb_smoke_test_ts --> module_src_host_installedPackageProvenance_ts module_src_host_generatedAdminExpoWeb_smoke_test_ts --> module_src_host_orchestrator_moduleManager_ts module_src_host_generatedAdminExpoWeb_smoke_test_ts --> module_src_host_orchestrator_projectManager_ts + module_src_host_generatedAdminExpoWeb_smoke_test_ts --> module_src_host_orchestrator_semverRange_ts module_src_host_generatedAdminExpoWeb_smoke_test_ts --> module_src_host_templateRegistry_index_ts module_src_host_generatedAuthAdapterRuntime_smoke_test_ts --> module_src_host_orchestrator_moduleManager_ts module_src_host_generatedAuthAdapterRuntime_smoke_test_ts --> module_src_host_orchestrator_projectManager_ts @@ -337,6 +359,7 @@ graph LR module_src_host_http_serverWithSecrets_ts --> module_src_host_orchestrator_projectManager_ts module_src_host_http_serverWithSecrets_ts --> module_src_host_utils_workspaceRoot_ts module_src_host_http_standalone_ts --> module_src_host_http_serverWithSecrets_ts + module_src_host_installedPackageProvenance_test_ts --> module_src_host_installedPackageProvenance_ts module_src_host_layout_auth_resolveAuthLayoutPlan_test_ts --> module_src_host_layout_auth_resolveAuthLayoutPlan_ts module_src_host_layout_authRootBootstrap_test_ts --> module_src_host_layout_layoutGenerator_ts module_src_host_layout_generatedImportComposer_test_ts --> module_src_host_layout_generatedImportComposer_ts @@ -348,6 +371,7 @@ graph LR module_src_host_layout_layoutGenerator_ts --> module_src_host_modules_layout_ts module_src_host_layout_layoutGenerator_ts --> module_src_index_ts module_src_host_layout_layoutGenerator_ts --> module_src_studioAdminRouteModel_ts + module_src_host_layout_templates_auth_adapter_test_ts --> module_src_host_layout_templates_auth_adapter_ts module_src_host_layout_templates_auth_callback_ts --> module_src_host_layout_templates_utils_routes_ts module_src_host_layout_templates_auth_callback_ts --> module_src_host_layout_utils_escapeStringLiteral_ts module_src_host_layout_templates_auth_oauth_ts --> module_src_host_layout_auth_resolveAuthLayoutPlan_ts @@ -362,7 +386,6 @@ graph LR module_src_host_layout_templates_nestedLayout_ts --> module_src_host_layout_templates_navigation_ts module_src_host_layout_templates_nestedLayout_ts --> module_src_host_layout_templates_utils_strings_ts module_src_host_layout_templates_redirect_ts --> module_src_host_layout_utils_escapeStringLiteral_ts - module_src_host_layout_templates_rootLayout_selectionDom_test_ts --> module_src_host_layout_templates_rootLayout_ts module_src_host_layout_templates_rootLayout_test_ts --> module_src_host_layout_templates_rootLayout_ts module_src_host_layout_templates_rootLayout_ts --> module_src_host_layout_generatedImportComposer_ts module_src_host_layout_templates_rootLayout_ts --> module_src_host_layout_templates_navigation_ts @@ -380,6 +403,9 @@ graph LR module_src_host_oauthFixtureConsumer_smoke_test_ts --> module_src_host_orchestrator_moduleManager_ts module_src_host_oauthFixtureConsumer_smoke_test_ts --> module_src_host_orchestrator_projectManager_ts module_src_host_oauthFixtureConsumer_smoke_test_ts --> module_src_host_templateRegistry_index_ts + module_src_host_orchestrator_expoSdk54AnimationCompatibility_test_ts --> module_src_host_orchestrator_expoSdk54AnimationCompatibility_ts + module_src_host_orchestrator_expoSdk54AnimationCompatibility_test_ts --> module_src_host_orchestrator_templates_ts + module_src_host_orchestrator_generatedAppFiles_test_ts --> module_src_host_orchestrator_generatedAppFiles_ts module_src_host_orchestrator_generatedAppFiles_ts --> module_src_host_zoraExtensions_index_ts module_src_host_orchestrator_infraGenerator_ts --> module_src_host_orchestrator_infraValidation_ts module_src_host_orchestrator_infraRuntime_test_ts --> module_src_host_orchestrator_infraRuntime_ts @@ -420,10 +446,13 @@ graph LR module_src_host_orchestrator_scaffolder_ts --> module_src_host_orchestrator_templates_ts module_src_host_orchestrator_scaffolder_ts --> module_src_host_templateRegistry_index_ts module_src_host_orchestrator_scaffolder_ts --> module_src_host_zoraExtensions_index_ts + module_src_host_orchestrator_semverRange_test_ts --> module_src_host_orchestrator_semverRange_ts module_src_host_orchestrator_studioInfraUp_ts --> module_src_host_orchestrator_infraRuntime_ts module_src_host_orchestrator_studioInfraUp_ts --> module_src_host_orchestrator_projectManager_ts module_src_host_orchestrator_studioInfraUp_ts --> module_src_host_secrets_trustedOAuthInfraEnvironment_ts + module_src_host_orchestrator_templates_test_ts --> module_src_host_orchestrator_expoSdk54AnimationCompatibility_ts module_src_host_orchestrator_templates_test_ts --> module_src_host_orchestrator_templates_ts + module_src_host_orchestrator_templates_ts --> module_src_host_orchestrator_expoSdk54AnimationCompatibility_ts module_src_host_secrets_projectSecretService_test_ts --> module_src_authSettings_ts module_src_host_secrets_projectSecretService_test_ts --> module_src_host_secrets_projectSecretService_ts module_src_host_secrets_projectSecretService_ts --> module_src_host_orchestrator_projectManager_ts @@ -481,9 +510,21 @@ graph LR module_src_projectSecretUsage_test_ts --> module_src_projectSecretUsage_ts module_src_routeUtils_public_test_ts --> module_src_routeUtils_ts module_src_routeUtils_test_ts --> module_src_routeUtils_ts + module_src_runtime_indicatorRefreshCoordinator_test_ts --> module_src_runtime_indicatorRefreshCoordinator_ts + module_src_runtime_indicatorSettleCoordinator_test_ts --> module_src_runtime_indicatorSettleCoordinator_ts + module_src_runtime_interactionPolicy_test_ts --> module_src_runtime_interactionPolicyCore_ts + module_src_runtime_interactionPolicy_ts --> module_src_runtime_interactionPolicyCore_ts module_src_runtime_previewRegistry_ts --> module_src_runtime_appExtensionRegistry_ts module_src_runtime_previewRuntimeConfig_ts --> module_src_runtime_actionSuppression_ts + module_src_runtime_previewRuntimeConfig_ts --> module_src_runtime_interactionPolicy_ts + module_src_runtime_previewRuntimeConfig_ts --> module_src_runtime_interactionPolicyCore_ts module_src_runtime_previewRuntimeConfig_ts --> module_src_runtime_previewRegistry_ts + module_src_runtime_stationarySelection_ts --> module_src_runtime_indicatorRefreshCoordinator_ts + module_src_runtime_stationarySelection_ts --> module_src_runtime_indicatorSettleCoordinator_ts + module_src_runtime_stationarySelection_ts --> module_src_runtime_stationarySelectionCoordinator_ts + module_src_runtime_stationarySelection_ts --> module_src_runtime_stationarySelectionInputState_ts + module_src_runtime_stationarySelectionCoordinator_test_ts --> module_src_runtime_stationarySelectionCoordinator_ts + module_src_runtime_stationarySelectionInputState_test_ts --> module_src_runtime_stationarySelectionInputState_ts module_src_runtime_useRuntimeAction_ts --> module_src_runtime_runtimeActions_ts module_src_runtimeDiagnosticsModel_test_ts --> module_src_runtimeDiagnosticsModel_ts module_src_runtimeLocalization_public_test_ts --> module_src_runtimeLocalization_ts diff --git a/paradox/index.html b/paradox/index.html index 05f9cc78..28c89dee 100644 --- a/paradox/index.html +++ b/paradox/index.html @@ -438,7 +438,7 @@

@ankhorage/studio

data-target="src/host/generatedAdminExpoWeb.smoke.test.ts" > src/host/generatedAdminExpoWeb.smoke.test.ts - 28 functions + 35 functions
  • @@ -495,6 +495,26 @@

    @ankhorage/studio

    1 function
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +