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.
- package/dist/api/client.d.ts +15 -0
- package/dist/api/client.js +36 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/project.d.ts +11 -0
- package/dist/api/project.js +29 -0
- package/dist/api/project.js.map +1 -0
- package/dist/commands/doctor.js +2 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/impl/createImpl.js +26 -4
- package/dist/commands/impl/createImpl.js.map +1 -1
- package/dist/commands/impl/doctorImpl.js +14 -7
- package/dist/commands/impl/doctorImpl.js.map +1 -1
- package/dist/commands/impl/initImpl.js +27 -0
- package/dist/commands/impl/initImpl.js.map +1 -1
- package/dist/commands/init.js +1 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/nav/navigatorTree.d.ts +36 -2
- package/dist/nav/navigatorTree.js +184 -42
- package/dist/nav/navigatorTree.js.map +1 -1
- package/dist/nav/routeTree.d.ts +2 -1
- package/dist/nav/routeTree.js +3 -3
- package/dist/nav/routeTree.js.map +1 -1
- package/dist/nav/screenOptions.d.ts +24 -0
- package/dist/nav/screenOptions.js +41 -13
- package/dist/nav/screenOptions.js.map +1 -1
- package/dist/runtime/runtimeFiles.d.ts +17 -0
- package/dist/runtime/runtimeFiles.js +183 -0
- package/dist/runtime/runtimeFiles.js.map +1 -0
- package/dist/services/appDeps.d.ts +32 -0
- package/dist/services/appDeps.js +132 -0
- package/dist/services/appDeps.js.map +1 -0
- package/dist/services/doctorService.d.ts +19 -1
- package/dist/services/doctorService.js +117 -3
- package/dist/services/doctorService.js.map +1 -1
- package/dist/services/scaffold.d.ts +10 -1
- package/dist/services/scaffold.js +45 -5
- package/dist/services/scaffold.js.map +1 -1
- package/dist/services/syncEngine.js +23 -7
- package/dist/services/syncEngine.js.map +1 -1
- package/dist/version.d.ts +21 -0
- package/dist/version.js +40 -3
- package/dist/version.js.map +1 -1
- package/package.json +4 -4
- package/templates/agent/mapples.md +9 -4
- package/templates/agent/skills/mapples-conventions/SKILL.md +2 -2
- package/templates/agent/skills/mapples-design/SKILL.md +4 -4
- package/templates/agent/skills/mapples-design/reference/component-library.md +1 -1
- package/templates/agent/skills/mapples-design/reference/layout-contract.md +2 -3
- package/templates/agent/skills/mapples-design/reference/playbooks/onboarding-flow.md +1 -1
- package/templates/agent/skills/mapples-design/reference/playbooks/screen-flow-wiring.md +2 -5
- package/templates/gitignore +2 -0
- 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
|
-
|
|
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'))
|
|
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
|
package/dist/version.js.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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": "
|
|
22
|
-
"@mapples/sid-ast": "
|
|
23
|
-
"@mapples/textpatch": "
|
|
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`)
|
|
9
|
-
|
|
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.
|
|
101
|
-
the
|
|
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
|
|
199
|
-
element's primary event
|
|
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
|
-
|
|
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\|
|
|
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}
|
|
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
|
|
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
|
|
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 (
|
|
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)
|
|
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.
|
package/templates/gitignore
CHANGED
package/templates/package.json
CHANGED
|
@@ -10,16 +10,19 @@
|
|
|
10
10
|
"sync": "mapples sync"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@mapples/action": "
|
|
14
|
-
"@mapples/app": "
|
|
15
|
-
"@mapples/components": "
|
|
16
|
-
"@mapples/
|
|
17
|
-
"@mapples/
|
|
18
|
-
"@mapples/
|
|
19
|
-
"@mapples/
|
|
20
|
-
"@mapples/
|
|
21
|
-
"@mapples/
|
|
22
|
-
"@mapples/
|
|
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
|
},
|