mapples 0.2.0-beta.12 → 0.2.0-beta.13

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.
Files changed (52) hide show
  1. package/dist/api/client.d.ts +15 -0
  2. package/dist/api/client.js +36 -0
  3. package/dist/api/client.js.map +1 -1
  4. package/dist/api/project.d.ts +11 -0
  5. package/dist/api/project.js +29 -0
  6. package/dist/api/project.js.map +1 -0
  7. package/dist/commands/doctor.js +2 -1
  8. package/dist/commands/doctor.js.map +1 -1
  9. package/dist/commands/impl/createImpl.js +26 -4
  10. package/dist/commands/impl/createImpl.js.map +1 -1
  11. package/dist/commands/impl/doctorImpl.js +14 -7
  12. package/dist/commands/impl/doctorImpl.js.map +1 -1
  13. package/dist/commands/impl/initImpl.js +27 -0
  14. package/dist/commands/impl/initImpl.js.map +1 -1
  15. package/dist/commands/init.js +1 -0
  16. package/dist/commands/init.js.map +1 -1
  17. package/dist/nav/navigatorTree.d.ts +36 -2
  18. package/dist/nav/navigatorTree.js +184 -42
  19. package/dist/nav/navigatorTree.js.map +1 -1
  20. package/dist/nav/routeTree.d.ts +2 -1
  21. package/dist/nav/routeTree.js +3 -3
  22. package/dist/nav/routeTree.js.map +1 -1
  23. package/dist/nav/screenOptions.d.ts +24 -0
  24. package/dist/nav/screenOptions.js +41 -13
  25. package/dist/nav/screenOptions.js.map +1 -1
  26. package/dist/runtime/runtimeFiles.d.ts +17 -0
  27. package/dist/runtime/runtimeFiles.js +183 -0
  28. package/dist/runtime/runtimeFiles.js.map +1 -0
  29. package/dist/services/appDeps.d.ts +32 -0
  30. package/dist/services/appDeps.js +132 -0
  31. package/dist/services/appDeps.js.map +1 -0
  32. package/dist/services/doctorService.d.ts +19 -1
  33. package/dist/services/doctorService.js +117 -3
  34. package/dist/services/doctorService.js.map +1 -1
  35. package/dist/services/scaffold.d.ts +10 -1
  36. package/dist/services/scaffold.js +45 -5
  37. package/dist/services/scaffold.js.map +1 -1
  38. package/dist/services/syncEngine.js +23 -7
  39. package/dist/services/syncEngine.js.map +1 -1
  40. package/dist/version.d.ts +21 -0
  41. package/dist/version.js +40 -3
  42. package/dist/version.js.map +1 -1
  43. package/package.json +4 -4
  44. package/templates/agent/mapples.md +9 -4
  45. package/templates/agent/skills/mapples-conventions/SKILL.md +2 -2
  46. package/templates/agent/skills/mapples-design/SKILL.md +4 -4
  47. package/templates/agent/skills/mapples-design/reference/component-library.md +1 -1
  48. package/templates/agent/skills/mapples-design/reference/layout-contract.md +2 -3
  49. package/templates/agent/skills/mapples-design/reference/playbooks/onboarding-flow.md +1 -1
  50. package/templates/agent/skills/mapples-design/reference/playbooks/screen-flow-wiring.md +2 -5
  51. package/templates/gitignore +2 -0
  52. package/templates/package.json +19 -11
package/dist/version.js CHANGED
@@ -1,12 +1,49 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { fileURLToPath } from 'node:url';
3
- /** The CLI's own published version (read from package.json — never hardcoded). */
4
- export function cliVersion() {
3
+ function readCliPackageJson() {
5
4
  // dist/version.js -> ../package.json
6
5
  const pkgPath = fileURLToPath(new URL('../package.json', import.meta.url));
7
- return JSON.parse(readFileSync(pkgPath, 'utf8')).version;
6
+ return JSON.parse(readFileSync(pkgPath, 'utf8'));
7
+ }
8
+ /** The CLI's own published version (read from package.json — never hardcoded). */
9
+ export function cliVersion() {
10
+ return readCliPackageJson().version;
8
11
  }
9
12
  export function cliOrigin() {
10
13
  return `mapples-cli@${cliVersion()}`;
11
14
  }
15
+ /**
16
+ * The npm channel this CLI build was published on: the prerelease id of its
17
+ * version (`0.2.0-beta.12` -> `beta`), or null for a stable release. The
18
+ * Changesets pre mode publishes `X.Y.Z-<tag>.N` under the dist-tag `<tag>`.
19
+ */
20
+ export function cliChannel() {
21
+ const match = /^\d+\.\d+\.\d+-([A-Za-z][0-9A-Za-z-]*)(?:\.|$)/.exec(cliVersion());
22
+ return match ? match[1] : null;
23
+ }
24
+ /**
25
+ * The ONE version spec every `@mapples/*` runtime dependency of a generated
26
+ * app gets. All `@mapples/*` packages publish as one Changesets fixed group
27
+ * (one shared version from 1.6.0 on), so a single spec keeps an app coherent.
28
+ *
29
+ * - Stable CLI: `^<X.Y.Z>`, X.Y.Z being the base version of the CLI's own
30
+ * `@mapples/codegen` dependency — the runtime generation the emitted code
31
+ * targets (codegen is in the same fixed group). No second constant to drift.
32
+ * - Prerelease CLI (`mapples@beta`): the dist-tag itself (`"beta"`). A range
33
+ * cannot express a channel: semver orders `rc` above `beta`, so
34
+ * `^1.6.0-beta.0` resolves to the rc, while caret ranges without a
35
+ * prerelease resolve to the old `latest`. The tag resolves every package to
36
+ * the same fixed-group publish, and the lockfile pins it.
37
+ */
38
+ export function mapplesRuntimeSpec() {
39
+ const channel = cliChannel();
40
+ if (channel)
41
+ return channel;
42
+ const codegen = readCliPackageJson().dependencies?.['@mapples/codegen'];
43
+ const base = codegen ? /(\d+\.\d+\.\d+)/.exec(codegen)?.[1] : undefined;
44
+ if (!base) {
45
+ throw new Error(`cannot derive the @mapples runtime version: the CLI's @mapples/codegen dependency is ${JSON.stringify(codegen)}`);
46
+ }
47
+ return `^${base}`;
48
+ }
12
49
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,kFAAkF;AAClF,MAAM,UAAU,UAAU;IACxB,qCAAqC;IACrC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,OAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAyB,CAAC,OAAO,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,eAAe,UAAU,EAAE,EAAE,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAOzC,SAAS,kBAAkB;IACzB,qCAAqC;IACrC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAmB,CAAC;AACrE,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,UAAU;IACxB,OAAO,kBAAkB,EAAE,CAAC,OAAO,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,eAAe,UAAU,EAAE,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,KAAK,GAAG,gDAAgD,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC,YAAY,EAAE,CAAC,kBAAkB,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,wFAAwF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAClH,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mapples",
3
- "version": "0.2.0-beta.12",
3
+ "version": "0.2.0-beta.13",
4
4
  "description": "Mapples CLI — two-way code sync between Creator and your Expo project",
5
5
  "license": "MIT",
6
6
  "author": "Oleksandr Soloviov <oleksolv@gmail.com>",
@@ -18,9 +18,9 @@
18
18
  "clean": "rm -rf dist *.tsbuildinfo"
19
19
  },
20
20
  "dependencies": {
21
- "@mapples/codegen": "^1.6.0-beta.20260917131610",
22
- "@mapples/sid-ast": "^1.6.0-beta.20260917131610",
23
- "@mapples/textpatch": "^1.6.0-beta.20260929132641",
21
+ "@mapples/codegen": ">=1.6.0-beta.20260930095510 <1.6.0-rc.0",
22
+ "@mapples/sid-ast": ">=1.6.0-beta.20260930095510 <1.6.0-rc.0",
23
+ "@mapples/textpatch": ">=1.6.0-beta.20260930095510 <1.6.0-rc.0",
24
24
  "@noble/hashes": "^1.6.1",
25
25
  "axios": "^1.7.9",
26
26
  "chalk": "^5.4.1",
@@ -5,8 +5,11 @@ This app is linked to a **Mapples Creator** project (visual editor at creator.ma
5
5
  The link is the `mapples` CLI: screens, components and design tokens are TSX and TS files in
6
6
  this repo, and `npx -y mapples@__CLI_VERSION__ sync` pushes your edits to Creator and pulls Creator's edits back
7
7
  (two-way, 3-way merged). Every write to the project goes through `npx -y mapples@__CLI_VERSION__ sync` — there is no
8
- other write path from here. The `mapples` MCP server (`.mcp.json`) is **read-only**: use it to
9
- look at the project (style tokens, assets); never expect it to change anything.
8
+ other write path from here. The `mapples` MCP server (`.mcp.json`) authenticates with the
9
+ project's API key, which exposes **read-only** tools: `get_project` (project metadata) and
10
+ `get_project_style` (the theme, typography and sizing tokens at the current canvas head). It has
11
+ no resources, prompts or asset listing — assets arrive in this repo through
12
+ `npx -y mapples@__CLI_VERSION__ sync`. Never expect it to change anything.
10
13
 
11
14
  ## Skills
12
15
 
@@ -97,8 +100,10 @@ const styles = Styler.create({
97
100
  - Navigation from code: `$actions={{ onPress: { type: 'mapples:navigate', staticData: { pageUuid } } }}`
98
101
  on the element's primary event. The target's `pageUuid` is the `uuid` field of
99
102
  `.mapples/base/pages/<pageId>.json`; `<pageId>` is the key in `.mapples/pages.json` whose
100
- `file` is the target route file. Add a `router.push('/<segment>')` `onPress` handler too so
101
- the built app navigates.
103
+ `file` is the target route file. The built app runs `$actions` itself (as Creator's Play
104
+ does) — do NOT add a `router.push` `onPress` next to it: the action replaces a code handler
105
+ for the same event and the app warns about the duplicate. `$data` bindings (`vars.*`,
106
+ `api.*`, `route.*`) resolve in the app the same way.
102
107
  - Images: `<Image source="https://picsum.photos/seed/<topic>/<w>/<h>" contentFit="cover" />`
103
108
  with an explicit width/height in `styled.style`. Creator asset references (`$refs`) are
104
109
  Creator-side; do not invent them.
@@ -39,8 +39,8 @@ identity: keep it verbatim. Renaming the file renames the route in Creator.
39
39
 
40
40
  | Attribute | Shape | Meaning |
41
41
  | --- | --- | --- |
42
- | `$actions` | `{ onPress: { type: 'mapples:navigate', staticData: { pageUuid: '<uuid>' } } }` | Creator prototype connection on that event. Other action types (`mapples:setState`, `mapples:goBack`, `mapples:switchTab`) exist; navigate is the one you write. |
43
- | `$data` | `{ visible: { key: 'vars.sheetOpen', active: true } }` | a data binding of a prop to a project variable — only when the project already has the variable |
42
+ | `$actions` | `{ onPress: { type: 'mapples:navigate', staticData: { pageUuid: '<uuid>' } } }` | Creator prototype connection on that event — and the handler the built app runs (no `router.push` next to it). Other action types (`mapples:setState`, `mapples:request`, `mapples:goBack`, `mapples:switchTab`) exist; navigate is the one you write. |
43
+ | `$data` | `{ visible: { key: 'vars.sheetOpen', active: true } }` | a data binding of a prop to a project variable (`vars.*`), API response (`api.*`) or route param (`route.*`) — resolved live in the built app; only when the project already has the variable / request |
44
44
  | `$refs` | `{ source: 'ref(image:<uuid>)' }` | a Creator asset reference — Creator-side; never invent one |
45
45
 
46
46
  `pageUuid` lookup: `.mapples/pages.json` maps `pageId → { file, name, route, routeId }`; the
@@ -195,8 +195,8 @@ Two screens in one plan step: do them one after the other inside the step, synci
195
195
 
196
196
  ## Phase N-1 — Wiring
197
197
 
198
- Load `playbooks/screen-flow-wiring.md`. For every navigation the plan names, add to the source
199
- element's primary event both the Creator connection and the runtime handler:
198
+ Load `playbooks/screen-flow-wiring.md`. For every navigation the plan names, add the Creator
199
+ connection to the source element's primary event — it is also what the built app runs:
200
200
 
201
201
  ```tsx
202
202
  <Button
@@ -204,12 +204,12 @@ element's primary event both the Creator connection and the runtime handler:
204
204
  variant="filled"
205
205
  size="lg"
206
206
  fullWidth
207
- onPress={() => router.push('/(main)')}
208
207
  $actions={{ onPress: { type: 'mapples:navigate', staticData: { pageUuid: '<uuid from base>' } } }}
209
208
  />
210
209
  ```
211
210
 
212
- (`import { router } from 'expo-router'`.) Rows and cards use their own `onPress`. Walk the golden
211
+ No `router.push` handler next to it (the action replaces it, and the app warns about the
212
+ duplicate). Rows and cards use their own `onPress` event. Walk the golden
213
213
  path from the entry screen; every screen reachable, every flow with an exit. Sync; the report's
214
214
  `pushedOps` must cover every action you added.
215
215
 
@@ -62,7 +62,7 @@ and `tone` props and the style slots — never rebuild one from Views. Array pro
62
62
  | `ChatComposer` | `placeholder`, `leadingIconName` | the chat input pinned to the bottom |
63
63
  | `SegmentedControl` | `options`, `value` | switching a view mode |
64
64
  | `Rating` | `value`, `max`, `readOnly` | stars |
65
- | `ChipGroup` | `options` [{label, value, iconName?}], `value`, `variant` filter\|choice, `scrollable` | filters and tags |
65
+ | `ChipGroup` | `options` [{label, value, iconName?}], `value`, `variant` filter\|assist (filter chips toggle the selection, assist chips report a press), `scrollable` | filters and tags |
66
66
  | `Chip` | `label`, `variant` assist\|filter\|suggestion, `selected` | a single tag (content-sized; inside a row) |
67
67
 
68
68
  ### content
@@ -174,7 +174,6 @@ left visible with no binding covers the screen forever.
174
174
 
175
175
  ```tsx
176
176
  // (the CLI's `// mapples-route:` marker stays on line 1 once the file is synced)
177
- import { router } from 'expo-router';
178
177
  import { Container, GradientBackground, Icon, Typography, View } from '@mapples/ui';
179
178
  import { Button, Card, PageControl, TextLink } from '@mapples/components';
180
179
  import { Styler } from '@mapples/style';
@@ -183,7 +182,7 @@ export default function Welcome() {
183
182
  return (
184
183
  <Container styled={{ style: styles.root }}>
185
184
  <View styled={{ style: styles.topBar }}>
186
- <TextLink label="Skip" tone="neutral" underline={false} onPress={() => router.push('/(main)')} />
185
+ <TextLink label="Skip" tone="neutral" underline={false} $actions={{ onPress: { type: 'mapples:navigate', staticData: { pageUuid: '<home uuid>' } } }} />
187
186
  </View>
188
187
  <View styled={{ style: styles.hero }}>
189
188
  <GradientBackground
@@ -201,7 +200,7 @@ export default function Welcome() {
201
200
  </View>
202
201
  <View styled={{ style: styles.bottom }}>
203
202
  <PageControl count={3} value={0} variant="bars" />
204
- <Button label="Continue" variant="filled" size="lg" fullWidth onPress={() => router.push('/(onboarding)/features')} />
203
+ <Button label="Continue" variant="filled" size="lg" fullWidth $actions={{ onPress: { type: 'mapples:navigate', staticData: { pageUuid: '<features uuid>' } } }} />
205
204
  </View>
206
205
  </Container>
207
206
  );
@@ -12,4 +12,4 @@ Structure per screen (root column, `justifyContent: 'space-between'`, screen pad
12
12
 
13
13
  CTA copy arc: "Continue" on middle screens; the LAST screen carries the real ask — "Get started" primary plus a `TextLink` "Sign in" row underneath for returning users.
14
14
 
15
- Pitfalls: no emoji heroes; one hero per screen, never hero + photo; dots and button positions must not shift between screens (same bottom block on all three); wire screen→screen and last screen→auth or home in the wiring phase (`$actions` navigate + `router.push`).
15
+ Pitfalls: no emoji heroes; one hero per screen, never hero + photo; dots and button positions must not shift between screens (same bottom block on all three); wire screen→screen and last screen→auth or home in the wiring phase (`$actions` navigate — the app runs it).
@@ -5,22 +5,19 @@ Wiring flows: every CTA connected, entries set, a walkable prototype.
5
5
 
6
6
  A project becomes a product when every path is walkable. After the screens exist, wire them — this is as much the design as the pixels.
7
7
 
8
- How a connection is written (both halves, on the element's primary event):
8
+ How a connection is written (on the element's primary event):
9
9
 
10
10
  ```tsx
11
- import { router } from 'expo-router';
12
- // …
13
11
  <Button
14
12
  label="Add to order"
15
13
  variant="filled"
16
14
  size="lg"
17
15
  fullWidth
18
- onPress={() => router.push('/(main)/cart')}
19
16
  $actions={{ onPress: { type: 'mapples:navigate', staticData: { pageUuid: '<uuid>' } } }}
20
17
  />
21
18
  ```
22
19
 
23
- `$actions` is the Creator connection (the storyboard arrow); `onPress` is the runtime handler. The `pageUuid` is the `uuid` field of `.mapples/base/pages/<pageId>.json`, where `<pageId>` is the key in `.mapples/pages.json` whose `file` is the target route file. Rows use `ListItem`'s `onPress`, cards `MediaCard`'s / `Card`'s `onPress`.
20
+ `$actions` is the Creator connection (the storyboard arrow) AND the app's handler: the built app runs it the way Creator's Play does (guards, replace-on-sign-in and params included). Never add a `router.push` `onPress` next to it — the action replaces a code handler for the same event and the app warns about the duplicate. The `pageUuid` is the `uuid` field of `.mapples/base/pages/<pageId>.json`, where `<pageId>` is the key in `.mapples/pages.json` whose `file` is the target route file. Rows use `ListItem`'s `onPress`, cards `MediaCard`'s / `Card`'s `onPress`.
24
21
 
25
22
  The contract:
26
23
  - Every PRIMARY `Button` navigates to a real page: onboarding Continue → next screen, Get started → auth or home, list row / card → its detail, detail CTA → the flow it starts (cart, booking, player). No dead primary buttons, ever.
@@ -9,3 +9,5 @@ web-build/
9
9
  .mapples/secret
10
10
  # agent-session lease state — local only
11
11
  .mapples/agent.json
12
+ # build-time secrets for the Creator API requests (EXPO_PUBLIC_MAPPLES_SECRET_*) — never commit
13
+ .env*.local
@@ -10,16 +10,19 @@
10
10
  "sync": "mapples sync"
11
11
  },
12
12
  "dependencies": {
13
- "@mapples/action": "^1.1.2",
14
- "@mapples/app": "^1.6.0-beta.0",
15
- "@mapples/components": "^1.2.1",
16
- "@mapples/form": "^1.2.0",
17
- "@mapples/inlang": "^1.2.0",
18
- "@mapples/render": "^1.2.0",
19
- "@mapples/state": "^1.2.0",
20
- "@mapples/style": "^1.2.0",
21
- "@mapples/types": "^1.2.0",
22
- "@mapples/ui": "^1.1.3",
13
+ "@mapples/action": "__MAPPLES_RUNTIME__",
14
+ "@mapples/app": "__MAPPLES_RUNTIME__",
15
+ "@mapples/components": "__MAPPLES_RUNTIME__",
16
+ "@mapples/fonts": "__MAPPLES_RUNTIME__",
17
+ "@mapples/form": "__MAPPLES_RUNTIME__",
18
+ "@mapples/inlang": "__MAPPLES_RUNTIME__",
19
+ "@mapples/navigation": "__MAPPLES_RUNTIME__",
20
+ "@mapples/render": "__MAPPLES_RUNTIME__",
21
+ "@mapples/request": "__MAPPLES_RUNTIME__",
22
+ "@mapples/state": "__MAPPLES_RUNTIME__",
23
+ "@mapples/style": "__MAPPLES_RUNTIME__",
24
+ "@mapples/types": "__MAPPLES_RUNTIME__",
25
+ "@mapples/ui": "__MAPPLES_RUNTIME__",
23
26
  "@react-native-vector-icons/ant-design": "^13.1.0",
24
27
  "@react-native-vector-icons/entypo": "^13.1.0",
25
28
  "@react-native-vector-icons/evil-icons": "^13.1.0",
@@ -38,6 +41,7 @@
38
41
  "@react-native-vector-icons/zocial": "^13.1.0",
39
42
  "expo": "~57.0.23",
40
43
  "expo-constants": "~57.0.18",
44
+ "expo-dev-client": "~57.0.19",
41
45
  "expo-font": "~57.0.4",
42
46
  "expo-image": "~57.0.5",
43
47
  "expo-linear-gradient": "~57.0.2",
@@ -48,6 +52,7 @@
48
52
  "expo-system-ui": "~57.0.4",
49
53
  "expo-web-browser": "~57.0.3",
50
54
  "jsbarcode": "^3.12.3",
55
+ "lodash": "^4.18.0",
51
56
  "react": "19.2.3",
52
57
  "react-dom": "19.2.3",
53
58
  "react-native": "0.86.3",
@@ -58,12 +63,15 @@
58
63
  "react-native-screens": "~4.26.0",
59
64
  "react-native-svg": "15.15.4",
60
65
  "react-native-web": "~0.21.0",
61
- "react-native-worklets": "0.10.1"
66
+ "react-native-worklets": "0.10.1",
67
+ "rxjs": "^7.8.1",
68
+ "yup": "^1.6.0"
62
69
  },
63
70
  "devDependencies": {
64
71
  "@babel/core": "^7.26.0",
65
72
  "@types/react": "~19.2.2",
66
73
  "babel-plugin-mapples-sid": "__CLI_VERSION__",
74
+ "babel-preset-expo": "~57.0.13",
67
75
  "mapples": "__CLI_VERSION__",
68
76
  "typescript": "~6.0.3"
69
77
  },