@codeyam/codeyam-cli 0.1.0-staging.5370992 → 0.1.0-staging.56e2dca
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analyzer-template/.build-info.json +7 -7
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +2 -2
- package/analyzer-template/packages/aws/package.json +5 -5
- package/analyzer-template/packages/database/package.json +1 -1
- package/codeyam-cli/src/commands/__tests__/editor.statePersistence.test.js +55 -0
- package/codeyam-cli/src/commands/__tests__/editor.statePersistence.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +39 -3
- package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
- package/codeyam-cli/src/commands/editor.js +426 -13
- package/codeyam-cli/src/commands/editor.js.map +1 -1
- package/codeyam-cli/src/commands/init.js +20 -0
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/data/techStacks.js +1 -1
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js +93 -1
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +146 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +98 -1
- package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js +1108 -0
- package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +120 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +84 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/envFile.test.js +125 -0
- package/codeyam-cli/src/utils/__tests__/envFile.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/handoffContext.test.js +500 -0
- package/codeyam-cli/src/utils/__tests__/handoffContext.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/testRunner.test.js +0 -1
- package/codeyam-cli/src/utils/__tests__/testRunner.test.js.map +1 -1
- package/codeyam-cli/src/utils/designSystemShowcase.js +810 -0
- package/codeyam-cli/src/utils/designSystemShowcase.js.map +1 -0
- package/codeyam-cli/src/utils/devServerState.js +32 -0
- package/codeyam-cli/src/utils/devServerState.js.map +1 -1
- package/codeyam-cli/src/utils/editorAudit.js +28 -6
- package/codeyam-cli/src/utils/editorAudit.js.map +1 -1
- package/codeyam-cli/src/utils/editorRoadmap.js +574 -0
- package/codeyam-cli/src/utils/editorRoadmap.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js +27 -12
- package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -1
- package/codeyam-cli/src/utils/editorScenarios.js +10 -0
- package/codeyam-cli/src/utils/editorScenarios.js.map +1 -1
- package/codeyam-cli/src/utils/editorSeedAdapter.js +27 -14
- package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -1
- package/codeyam-cli/src/utils/envFile.js +90 -0
- package/codeyam-cli/src/utils/envFile.js.map +1 -0
- package/codeyam-cli/src/utils/handoffContext.js +257 -0
- package/codeyam-cli/src/utils/handoffContext.js.map +1 -0
- package/codeyam-cli/src/utils/install-skills.js +36 -6
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/techStackConfig.js +38 -0
- package/codeyam-cli/src/utils/techStackConfig.js.map +1 -0
- package/codeyam-cli/src/utils/techStackConfig.test.js +85 -0
- package/codeyam-cli/src/utils/techStackConfig.test.js.map +1 -0
- package/codeyam-cli/src/utils/testRunner.js +1 -7
- package/codeyam-cli/src/utils/testRunner.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js +1 -0
- package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js +119 -1
- package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +354 -1
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-CLe80MMu.js → CopyButton-DTBZZfSk.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-Crt_KN_U.js → EntityItem-BxclONWq.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-CD7lGABo.js → EntityTypeIcon-BsnEOJZ_.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-CgTNOhnu.js → InlineSpinner-ByaELMbv.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-DtYTSPL2.js → InteractivePreview-6WjVfhxX.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-D3s1MFkb.js → LibraryFunctionPreview-ChX-Hp7W.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-CM5zg40N.js → LogViewer-C-9zQdXg.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{MiniClaudeChat-CQENLSrF.js → MiniClaudeChat-Bs2_Oua4.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-C2PLkej3.js → ReportIssueModal-DQsceHVv.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-DanvyBPb.js → SafeScreenshot-DThcm_9M.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-CefgqbCr.js → ScenarioViewer-Cl4oOA3A.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{Spinner-Bc8BG-Lw.js → Spinner-CIil5-gb.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ViewportInspectBar-BA_Ry-rs.js → ViewportInspectBar-BqkA9zyZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{_index-C1YkzTAV.js → _index-DnOgyseQ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-yH46LLUz.js → activity.(_tab)-DqM9hbNE.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{addon-web-links-CHx25PAe.js → addon-web-links-C58dYPwR.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{agent-transcripts-Bg3e7q4S.js → agent-transcripts-B8NCeOrm.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-database-verify-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-github-verify-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-handoff-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-hosting-verify-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-roadmap-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{book-open-CL-lMgHh.js → book-open-BFSIqZgO.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-GmAjGS9-.js → chevron-down-B9fDzFVh.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/chunk-UVKPFVEO-Bmq2apuh.js +43 -0
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-DFcQkN5j.js → circle-check-DLPObLUx.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{copy-C6iF61Xs.js → copy-DXEmO0TD.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-4ImjHTVC.js → createLucideIcon-BwyFiRot.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{dev.empty-CRepiabR.js → dev.empty-iRhRIFlp.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/editor._tab-BZPBzV73.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-DhtVC4aI.js +161 -0
- package/codeyam-cli/src/webserver/build/client/assets/{editorPreview-CluPkvXJ.js → editorPreview-C6fEYHrh.js} +6 -6
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-DYJRGiDI.js → entity._sha._-pc-vc6wO.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.dev-wdiwx5-Z.js → entity._sha.scenarios._scenarioId.dev-C8AyYgYT.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-BrkN-40Y.js → entity._sha.scenarios._scenarioId.fullscreen-DziaVQX1.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-DxfhekTZ.js → entity._sha_.create-scenario-BTcpgIpC.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CRXJWmpB.js → entity._sha_.edit._scenarioId-D_O_ajfZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-SuW9syRS.js → entry.client-j1Vi0bco.js} +6 -6
- package/codeyam-cli/src/webserver/build/client/assets/{files-D-xGrg29.js → files-kuny2Q_s.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{git-Bq_fbXP5.js → git-DgCZPMie.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/globals-L-aUIeux.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-Bp1l4hSv.js → index-BliGSSpl.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-DE3jI_dv.js → index-SqjQKTdH.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-CWV9XZiG.js → index-vyrZD2g4.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{labs-B_IX45ih.js → labs-c3yLxSEp.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-De-7qQ2u.js → loader-circle-D-q28GLF.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-79d0d81a.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{memory-Cx2xEx7s.js → memory-CEWIUC4t.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{pause-CFxEKL1u.js → pause-BP6fitdh.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{root-DGtly3mb.js → root-L2V0jea7.js} +4 -4
- package/codeyam-cli/src/webserver/build/client/assets/{search-BdBb5aqc.js → search-BooqacKS.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{settings-DdE-Untf.js → settings-BM0nbryO.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-DSCdE99u.js → simulations-ovy6FjRY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{terminal-CrplD4b1.js → terminal-DHemCJIs.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-DqJ0j69l.js → triangle-alert-D87ekDl8.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-DhXHbEjP.js → useCustomSizes-Dk0Tciqg.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-D9QZKaLJ.js → useLastLogLine-C8QvIe05.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-Cy5Qg_UR.js → useReportContext-jkCytuYz.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-5HR2j9ZE.js → useToast-BgqkixU9.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/{analysisRunner-CO8xocj3.js → analysisRunner-QgInFGdU.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/{index-QKPqlUgg.js → index-zblh9auj.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/init-DaE0CBjk.js +14 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-CNvgz1cC.js +853 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/src/webserver/editorProxy.js +255 -20
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
- package/codeyam-cli/src/webserver/server.js +67 -0
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +102 -11
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
- package/codeyam-cli/templates/codeyam-editor-codex.md +61 -0
- package/codeyam-cli/templates/codeyam-editor-gemini.md +59 -0
- package/codeyam-cli/templates/editor-step-hook.py +4 -4
- package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +89 -5
- package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +4 -2
- package/codeyam-cli/templates/expo-react-native/app/index.tsx +36 -0
- package/codeyam-cli/templates/expo-react-native/app.json +11 -0
- package/codeyam-cli/templates/expo-react-native/babel.config.js +1 -0
- package/codeyam-cli/templates/expo-react-native/gitignore +2 -0
- package/codeyam-cli/templates/expo-react-native/package.json +24 -18
- package/codeyam-cli/templates/expo-react-native/patches/expo-modules-autolinking+3.0.24.patch +29 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +1 -0
- package/codeyam-cli/templates/seed-adapters/supabase.ts +261 -77
- package/package.json +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/chunk-JZWAC4HX-BAdwhyCx.js +0 -43
- package/codeyam-cli/src/webserver/build/client/assets/editor._tab-Gbk_i5Js.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-DLM1-ZMt.js +0 -96
- package/codeyam-cli/src/webserver/build/client/assets/globals-9EkC9j9I.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-7e749098.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/init-DlspChIk.js +0 -10
- package/codeyam-cli/src/webserver/build/server/assets/server-build-ChzicV-B.js +0 -689
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/_layout.tsx +0 -33
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/index.tsx +0 -12
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/settings.tsx +0 -12
|
@@ -29,14 +29,13 @@ npm start
|
|
|
29
29
|
|
|
30
30
|
```
|
|
31
31
|
app/ # Expo Router file-based routes
|
|
32
|
-
_layout.tsx # Root layout (
|
|
33
|
-
|
|
34
|
-
_layout.tsx # Tab bar configuration
|
|
35
|
-
index.tsx # Home tab
|
|
36
|
-
settings.tsx # Settings tab
|
|
32
|
+
_layout.tsx # Root layout (SafeAreaProvider, StatusBar)
|
|
33
|
+
index.tsx # Home screen (single entry point)
|
|
37
34
|
components/ # Reusable components
|
|
38
35
|
lib/
|
|
36
|
+
theme.ts # Design tokens (colors, spacing, typography)
|
|
39
37
|
storage.ts # AsyncStorage wrapper for persistent data
|
|
38
|
+
__tests__/ # Test files (keep outside app/ — Expo Router treats all app/ files as routes)
|
|
40
39
|
```
|
|
41
40
|
|
|
42
41
|
## Key Patterns
|
|
@@ -171,6 +170,57 @@ npx jest app/hooks/useCounter.ts # Run specific test file
|
|
|
171
170
|
|
|
172
171
|
The Jest config is in `package.json`. The `transformIgnorePatterns` is pre-configured to handle Expo and React Native module transforms — you should not need to modify it.
|
|
173
172
|
|
|
173
|
+
## Building for a Real iOS Device
|
|
174
|
+
|
|
175
|
+
### Prerequisites
|
|
176
|
+
|
|
177
|
+
- **Xcode 16.x** (Xcode 16.4 or later recommended)
|
|
178
|
+
- **Apple Developer account** (free is fine for personal devices)
|
|
179
|
+
- Device connected via USB or on the same Wi-Fi network
|
|
180
|
+
|
|
181
|
+
### Steps
|
|
182
|
+
|
|
183
|
+
1. Generate the native iOS project:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
npx expo prebuild --clean
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
2. Add Swift 5 enforcement to the generated Podfile. Open `ios/Podfile` and add this inside the `post_install` block, after `react_native_post_install(...)`:
|
|
190
|
+
|
|
191
|
+
```ruby
|
|
192
|
+
# Fix Swift 6.1 (Xcode 16.4) strict concurrency errors
|
|
193
|
+
installer.pods_project.targets.each do |target|
|
|
194
|
+
target.build_configurations.each do |config|
|
|
195
|
+
config.build_settings['SWIFT_VERSION'] = '5.0'
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
3. Reinstall pods with the fix:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
cd ios && pod install && cd ..
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
4. Build and run on your device:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
npx expo run:ios --device
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Troubleshooting
|
|
213
|
+
|
|
214
|
+
- **"invalid code signature" / "profile has not been explicitly trusted"**: Your iPhone doesn't trust the developer profile yet. On your iPhone: **Settings → General → VPN & Device Management** → tap your Apple ID → **Trust**. Then relaunch the app.
|
|
215
|
+
- **"No script URL provided"**: Metro bundler isn't running or the device can't reach it. Start Metro with `npx expo start` in a separate terminal, then relaunch the app. Your phone and Mac must be on the same Wi-Fi network.
|
|
216
|
+
- **"Missing factory in ExpoAppDelegate"** crash: The native project is stale. Run `npx expo prebuild --clean` to regenerate it.
|
|
217
|
+
- **"ambiguous implicit access level for import"** error: The `patch-package` fix wasn't applied. Run `npm install` to reapply, then `cd ios && pod install`.
|
|
218
|
+
|
|
219
|
+
### Notes
|
|
220
|
+
|
|
221
|
+
- The `ios/` and `android/` directories are gitignored — they're generated by `expo prebuild` and shouldn't be committed.
|
|
222
|
+
- The `patches/` directory IS committed — it contains a fix for Xcode 16.4 Swift compatibility that auto-applies on `npm install`.
|
|
223
|
+
|
|
174
224
|
## Web vs Native Differences
|
|
175
225
|
|
|
176
226
|
The CodeYam editor previews your app via **Expo Web** (react-native-web in a browser). Some differences from native iOS/Android devices are expected:
|
|
@@ -184,6 +234,40 @@ The CodeYam editor previews your app via **Expo Web** (react-native-web in a bro
|
|
|
184
234
|
| **Gestures** | Mouse drag events | Touch/swipe with inertia |
|
|
185
235
|
| **StatusBar** | No visible effect | Controls device status bar appearance |
|
|
186
236
|
| **Haptics** | No-op | Real haptic feedback via `expo-haptics` |
|
|
237
|
+
| **Pressable** | `backgroundColor`/`borderStyle` work on Pressable | Must use View wrapper (see below) |
|
|
238
|
+
|
|
239
|
+
### Pressable Styling on Native
|
|
240
|
+
|
|
241
|
+
`<Pressable>` with `backgroundColor`, `borderRadius`, or `borderStyle: 'dashed'` renders correctly in the web preview but **fails silently on native devices** — the background/border simply won't appear.
|
|
242
|
+
|
|
243
|
+
**Fix:** Put visual styles on a wrapping `<View>` and use `onPressIn`/`onPressOut` for press feedback:
|
|
244
|
+
|
|
245
|
+
```tsx
|
|
246
|
+
const [pressed, setPressed] = useState(false);
|
|
247
|
+
|
|
248
|
+
<View
|
|
249
|
+
style={{
|
|
250
|
+
backgroundColor: theme.colors.bgInverse,
|
|
251
|
+
borderRadius: 60,
|
|
252
|
+
overflow: 'hidden',
|
|
253
|
+
}}
|
|
254
|
+
>
|
|
255
|
+
<Pressable
|
|
256
|
+
onPress={onPress}
|
|
257
|
+
onPressIn={() => setPressed(true)}
|
|
258
|
+
onPressOut={() => setPressed(false)}
|
|
259
|
+
style={{
|
|
260
|
+
opacity: pressed ? 0.8 : 1,
|
|
261
|
+
alignItems: 'center',
|
|
262
|
+
padding: theme.spacing.lg,
|
|
263
|
+
}}
|
|
264
|
+
>
|
|
265
|
+
<Text style={{ color: theme.colors.accent }}>+</Text>
|
|
266
|
+
</Pressable>
|
|
267
|
+
</View>;
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
For dashed borders, put `borderStyle`, `borderWidth`, and `borderColor` on the outer `<View>`, not on `<Pressable>`.
|
|
187
271
|
|
|
188
272
|
**The web preview is for layout and data verification.** Test final visual polish on a real device or simulator:
|
|
189
273
|
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import '../global.css';
|
|
2
2
|
import { Stack } from 'expo-router';
|
|
3
3
|
import { StatusBar } from 'expo-status-bar';
|
|
4
|
-
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
4
|
+
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
|
|
5
5
|
|
|
6
6
|
export default function RootLayout() {
|
|
7
7
|
return (
|
|
8
8
|
<SafeAreaProvider>
|
|
9
|
-
<
|
|
9
|
+
<SafeAreaView style={{ flex: 1 }}>
|
|
10
|
+
<Stack screenOptions={{ headerShown: false }} />
|
|
11
|
+
</SafeAreaView>
|
|
10
12
|
<StatusBar style="auto" />
|
|
11
13
|
</SafeAreaProvider>
|
|
12
14
|
);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { View, Text } from 'react-native';
|
|
2
|
+
import { theme } from '@/lib/theme';
|
|
3
|
+
|
|
4
|
+
export default function HomeScreen() {
|
|
5
|
+
return (
|
|
6
|
+
<View
|
|
7
|
+
style={{
|
|
8
|
+
flex: 1,
|
|
9
|
+
alignItems: 'center',
|
|
10
|
+
justifyContent: 'center',
|
|
11
|
+
backgroundColor: theme.colors.bgBase,
|
|
12
|
+
padding: theme.spacing.lg,
|
|
13
|
+
}}
|
|
14
|
+
>
|
|
15
|
+
<Text
|
|
16
|
+
style={{
|
|
17
|
+
fontSize: theme.fontSize['2xl'],
|
|
18
|
+
fontWeight: theme.fontWeight.bold,
|
|
19
|
+
color: theme.colors.textPrimary,
|
|
20
|
+
marginBottom: theme.spacing.sm,
|
|
21
|
+
}}
|
|
22
|
+
>
|
|
23
|
+
Welcome
|
|
24
|
+
</Text>
|
|
25
|
+
<Text
|
|
26
|
+
style={{
|
|
27
|
+
fontSize: theme.fontSize.base,
|
|
28
|
+
color: theme.colors.textSecondary,
|
|
29
|
+
textAlign: 'center',
|
|
30
|
+
}}
|
|
31
|
+
>
|
|
32
|
+
Your Expo app is ready. Start building!
|
|
33
|
+
</Text>
|
|
34
|
+
</View>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"slug": "codeyam-expo-app",
|
|
5
5
|
"version": "1.0.0",
|
|
6
6
|
"scheme": "codeyam-expo-app",
|
|
7
|
+
"icon": "./assets/icon.png",
|
|
7
8
|
"platforms": ["ios", "android", "web"],
|
|
8
9
|
"web": {
|
|
9
10
|
"bundler": "metro",
|
|
@@ -13,6 +14,16 @@
|
|
|
13
14
|
"plugins": ["expo-router"],
|
|
14
15
|
"experiments": {
|
|
15
16
|
"typedRoutes": true
|
|
17
|
+
},
|
|
18
|
+
"ios": {
|
|
19
|
+
"bundleIdentifier": "com.codeyam.expo-app"
|
|
20
|
+
},
|
|
21
|
+
"android": {
|
|
22
|
+
"adaptiveIcon": {
|
|
23
|
+
"foregroundImage": "./assets/adaptive-icon.png",
|
|
24
|
+
"backgroundColor": "#f8fafc"
|
|
25
|
+
},
|
|
26
|
+
"package": "com.codeyam.expoapp"
|
|
16
27
|
}
|
|
17
28
|
}
|
|
18
29
|
}
|
|
@@ -7,42 +7,48 @@
|
|
|
7
7
|
"setup": "npm install",
|
|
8
8
|
"dev": "expo start --web",
|
|
9
9
|
"start": "expo start",
|
|
10
|
-
"android": "expo
|
|
11
|
-
"ios": "expo
|
|
10
|
+
"android": "expo run:android",
|
|
11
|
+
"ios": "expo run:ios",
|
|
12
12
|
"build:web": "expo export --platform web",
|
|
13
|
-
"test": "jest"
|
|
13
|
+
"test": "jest",
|
|
14
|
+
"postinstall": "patch-package"
|
|
14
15
|
},
|
|
15
16
|
"dependencies": {
|
|
16
|
-
"expo": "~
|
|
17
|
-
"expo-router": "~
|
|
18
|
-
"expo-status-bar": "~
|
|
19
|
-
"expo-linking": "~
|
|
20
|
-
"expo-constants": "~
|
|
21
|
-
"expo-font": "~
|
|
22
|
-
"react": "19.
|
|
23
|
-
"react-dom": "19.
|
|
24
|
-
"react-native": "0.
|
|
17
|
+
"expo": "~54.0.0",
|
|
18
|
+
"expo-router": "~6.0.23",
|
|
19
|
+
"expo-status-bar": "~3.0.9",
|
|
20
|
+
"expo-linking": "~8.0.11",
|
|
21
|
+
"expo-constants": "~18.0.13",
|
|
22
|
+
"expo-font": "~14.0.11",
|
|
23
|
+
"react": "19.1.0",
|
|
24
|
+
"react-dom": "19.1.0",
|
|
25
|
+
"react-native": "0.81.5",
|
|
25
26
|
"react-native-web": "^0.21.0",
|
|
26
27
|
"react-native-safe-area-context": "~5.6.2",
|
|
27
|
-
"react-native-screens": "~4.
|
|
28
|
+
"react-native-screens": "~4.16.0",
|
|
29
|
+
"react-native-reanimated": "^4.3.0",
|
|
30
|
+
"react-native-worklets": "^0.8.1",
|
|
31
|
+
"react-refresh": "^0.18.0",
|
|
28
32
|
"@react-navigation/native": "^7.1.33",
|
|
29
33
|
"@expo/vector-icons": "^15.0.2",
|
|
30
34
|
"@react-native-async-storage/async-storage": "2.2.0",
|
|
31
35
|
"nativewind": "^4.2.2",
|
|
32
|
-
"tailwindcss": "^3.4.19"
|
|
36
|
+
"tailwindcss": "^3.4.19",
|
|
37
|
+
"patch-package": "^8.0.0"
|
|
33
38
|
},
|
|
34
39
|
"devDependencies": {
|
|
35
|
-
"@types/react": "~19.
|
|
36
|
-
"babel-preset-expo": "
|
|
40
|
+
"@types/react": "~19.1.10",
|
|
41
|
+
"babel-preset-expo": "~54.0.10",
|
|
42
|
+
"sharp": "^0.33.0",
|
|
37
43
|
"typescript": "~5.9.2",
|
|
38
44
|
"jest": "^29.7.0",
|
|
39
|
-
"jest-expo": "~
|
|
45
|
+
"jest-expo": "~54.0.17",
|
|
40
46
|
"@testing-library/react-native": "^13.2.0"
|
|
41
47
|
},
|
|
42
48
|
"jest": {
|
|
43
49
|
"preset": "jest-expo",
|
|
44
50
|
"transformIgnorePatterns": [
|
|
45
|
-
"node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|nativewind)"
|
|
51
|
+
"node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|nativewind|react-native-reanimated|react-native-worklets)"
|
|
46
52
|
]
|
|
47
53
|
}
|
|
48
54
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
diff --git a/node_modules/expo-modules-autolinking/build/platforms/apple/apple.js b/node_modules/expo-modules-autolinking/build/platforms/apple/apple.js
|
|
2
|
+
index 47487c0..58a6069 100644
|
|
3
|
+
--- a/node_modules/expo-modules-autolinking/build/platforms/apple/apple.js
|
|
4
|
+
+++ b/node_modules/expo-modules-autolinking/build/platforms/apple/apple.js
|
|
5
|
+
@@ -113,7 +113,7 @@ async function generatePackageListFileContentAsync(modules, className, entitleme
|
|
6
|
+
* but only these that are written in Swift and use the new API for creating Expo modules.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
-import ExpoModulesCore
|
|
10
|
+
+public import ExpoModulesCore
|
|
11
|
+
${generateCommonImportList(swiftModules)}
|
|
12
|
+
${generateDebugOnlyImportList(debugOnlySwiftModules)}
|
|
13
|
+
@objc(${className})
|
|
14
|
+
@@ -137,13 +137,13 @@ ${generateReactDelegateHandlers(reactDelegateHandlerModules, debugOnlyReactDeleg
|
|
15
|
+
`;
|
|
16
|
+
}
|
|
17
|
+
function generateCommonImportList(swiftModules) {
|
|
18
|
+
- return swiftModules.map((moduleName) => `import ${moduleName}`).join('\n');
|
|
19
|
+
+ return swiftModules.map((moduleName) => `public import ${moduleName}`).join('\n');
|
|
20
|
+
}
|
|
21
|
+
function generateDebugOnlyImportList(swiftModules) {
|
|
22
|
+
if (!swiftModules.length) {
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
- return (wrapInDebugConfigurationCheck(0, swiftModules.map((moduleName) => `import ${moduleName}`).join('\n')) + '\n');
|
|
26
|
+
+ return (wrapInDebugConfigurationCheck(0, swiftModules.map((moduleName) => `public import ${moduleName}`).join('\n')) + '\n');
|
|
27
|
+
}
|
|
28
|
+
function generateModuleClasses(classNames, debugOnlyClassName) {
|
|
29
|
+
const commonClassNames = formatArrayOfClassNames(classNames);
|