mapples 0.2.0-beta.9 → 0.2.0
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/README.md +1 -1
- package/dist/api/client.d.ts +16 -0
- package/dist/api/client.js +37 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/commit.js +19 -1
- package/dist/api/commit.js.map +1 -1
- package/dist/api/errors.d.ts +1 -1
- package/dist/api/errors.js +3 -0
- package/dist/api/errors.js.map +1 -1
- package/dist/api/objects.d.ts +3 -1
- package/dist/api/objects.js +31 -4
- package/dist/api/objects.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/assets/assets.d.ts +12 -0
- package/dist/assets/assets.js +31 -2
- package/dist/assets/assets.js.map +1 -1
- package/dist/codegen/imports.d.ts +7 -0
- package/dist/codegen/imports.js +31 -0
- package/dist/codegen/imports.js.map +1 -1
- package/dist/commands/doctor.js +3 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/impl/createImpl.js +34 -4
- package/dist/commands/impl/createImpl.js.map +1 -1
- package/dist/commands/impl/doctorImpl.js +17 -7
- package/dist/commands/impl/doctorImpl.js.map +1 -1
- package/dist/commands/impl/initImpl.js +47 -1
- package/dist/commands/impl/initImpl.js.map +1 -1
- package/dist/commands/impl/syncImpl.js +16 -2
- package/dist/commands/impl/syncImpl.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 +191 -40
- package/dist/nav/navigatorTree.js.map +1 -1
- package/dist/nav/routeTree.d.ts +2 -1
- package/dist/nav/routeTree.js +9 -4
- 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/packages/catalog.d.ts +20 -0
- package/dist/packages/catalog.js +94 -0
- package/dist/packages/catalog.js.map +1 -0
- package/dist/packages/resolve.d.ts +61 -0
- package/dist/packages/resolve.js +149 -0
- package/dist/packages/resolve.js.map +1 -0
- 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 +41 -0
- package/dist/services/appDeps.js +152 -0
- package/dist/services/appDeps.js.map +1 -0
- package/dist/services/appPackages.d.ts +46 -0
- package/dist/services/appPackages.js +266 -0
- package/dist/services/appPackages.js.map +1 -0
- package/dist/services/doctorService.d.ts +28 -1
- package/dist/services/doctorService.js +217 -3
- package/dist/services/doctorService.js.map +1 -1
- package/dist/services/scaffold.d.ts +13 -1
- package/dist/services/scaffold.js +57 -5
- package/dist/services/scaffold.js.map +1 -1
- package/dist/services/syncEngine.js +89 -25
- package/dist/services/syncEngine.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.js.map +1 -1
- package/dist/ui/report.d.ts +8 -0
- package/dist/ui/report.js +22 -0
- package/dist/ui/report.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 -3
- package/templates/agent/mapples.md +9 -4
- package/templates/agent/skills/mapples-conventions/SKILL.md +5 -4
- package/templates/agent/skills/mapples-design/SKILL.md +4 -4
- package/templates/agent/skills/mapples-design/reference/component-library.md +3 -3
- 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/agent/skills/mapples-design/reference/style-guides.md +2 -0
- package/templates/agent/skills/mapples-sync/SKILL.md +3 -2
- package/templates/app/_layout.tsx +6 -1
- package/templates/gitignore +2 -0
- package/templates/metro.config.js +11 -0
- package/templates/package.json +27 -33
package/dist/ui/report.js
CHANGED
|
@@ -14,6 +14,14 @@ export function emptyReport() {
|
|
|
14
14
|
notes: [],
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* A delete whose target is already gone lost nothing: deleting a container
|
|
19
|
+
* takes its children with it, so their own deletes in the same push find no
|
|
20
|
+
* target.
|
|
21
|
+
*/
|
|
22
|
+
export function isAlreadyRemoved(dropped) {
|
|
23
|
+
return dropped.op.op === 'delete' && dropped.reason === 'target deleted or unknown';
|
|
24
|
+
}
|
|
17
25
|
export function renderReport(report) {
|
|
18
26
|
const lines = [];
|
|
19
27
|
const icon = {
|
|
@@ -38,13 +46,27 @@ export function renderReport(report) {
|
|
|
38
46
|
}
|
|
39
47
|
}
|
|
40
48
|
}
|
|
49
|
+
// Info-level findings (a handler the canvas preview doesn't run) are how
|
|
50
|
+
// the code is meant to read — one count, so the real warnings stay visible.
|
|
51
|
+
const infos = report.warnings.filter((w) => w.severity === 'info');
|
|
41
52
|
for (const w of report.warnings) {
|
|
53
|
+
if (w.severity === 'info')
|
|
54
|
+
continue;
|
|
42
55
|
lines.push(` ${chalk.yellow('⚠')} ${w.file ?? ''} ${w.kind}${w.sid ? ` [${w.sid}]` : ''}: ${w.detail}`);
|
|
43
56
|
}
|
|
57
|
+
if (infos.length > 0) {
|
|
58
|
+
lines.push(chalk.gray(` ${infos.length} event handler(s) run in the app only — the canvas preview skips them`));
|
|
59
|
+
}
|
|
60
|
+
const alreadyRemoved = report.dropped.filter(isAlreadyRemoved);
|
|
44
61
|
for (const d of report.dropped) {
|
|
62
|
+
if (isAlreadyRemoved(d))
|
|
63
|
+
continue;
|
|
45
64
|
const { op } = d;
|
|
46
65
|
lines.push(` ${chalk.yellow('⚠')} server dropped ${op.op} ${op.entity} ${d.id ?? op.id ?? op.cid ?? ''}: ${d.reason}`);
|
|
47
66
|
}
|
|
67
|
+
if (alreadyRemoved.length > 0) {
|
|
68
|
+
lines.push(chalk.gray(` ${alreadyRemoved.length} delete(s) skipped — already removed with their parent`));
|
|
69
|
+
}
|
|
48
70
|
for (const w of report.serverWarnings)
|
|
49
71
|
lines.push(` ${chalk.yellow('⚠')} server warning: ${w}`);
|
|
50
72
|
for (const n of report.notes)
|
package/dist/ui/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/ui/report.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/ui/report.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,OAAO,KAAK,MAAM,OAAO,CAAC;AA2B1B,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC;QACZ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,cAAc,EAAE,EAAE;QAClB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAqC;IACpE,OAAO,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,2BAA2B,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAkB;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAA0C;QAClD,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QACzB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACxB,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1B,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;KAC/B,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;YAAE,SAAS;QACvC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,qDAAqD,CACpF,CACF,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;gBAClF,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAChF,CAAC;YACF,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC1C,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,IAAI,CACR,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAC3F,CACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,yEAAyE;IACzE,4EAA4E;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IACnE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;YAAE,SAAS;QACpC,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAC7F,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,MAAM,uEAAuE,CACzF,CACF,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,gBAAgB,CAAC,CAAC,CAAC;YAAE,SAAS;QAClC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACjB,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAC5G,CAAC;IACJ,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,IAAI,CACR,KAAK,cAAc,CAAC,MAAM,wDAAwD,CACnF,CACF,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,cAAc;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACjG,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,OAAO;QACZ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,MAAM,CAAC,SAAS,kCAAkC,CAAC;QACnF,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,SAAS,kBAAkB,MAAM,CAAC,SAAS,QAAQ,CAAC;YAClF,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3D,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
1
|
/** The CLI's own published version (read from package.json — never hardcoded). */
|
|
2
2
|
export declare function cliVersion(): string;
|
|
3
3
|
export declare function cliOrigin(): string;
|
|
4
|
+
/**
|
|
5
|
+
* The npm channel this CLI build was published on: the prerelease id of its
|
|
6
|
+
* version (`0.2.0-beta.12` -> `beta`), or null for a stable release. The
|
|
7
|
+
* Changesets pre mode publishes `X.Y.Z-<tag>.N` under the dist-tag `<tag>`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function cliChannel(): string | null;
|
|
10
|
+
/**
|
|
11
|
+
* The ONE version spec every `@mapples/*` runtime dependency of a generated
|
|
12
|
+
* app gets. All `@mapples/*` packages publish as one Changesets fixed group
|
|
13
|
+
* (one shared version from 1.6.0 on), so a single spec keeps an app coherent.
|
|
14
|
+
*
|
|
15
|
+
* - Stable CLI: `^<X.Y.Z>`, X.Y.Z being the base version of the CLI's own
|
|
16
|
+
* `@mapples/codegen` dependency — the runtime generation the emitted code
|
|
17
|
+
* targets (codegen is in the same fixed group). No second constant to drift.
|
|
18
|
+
* - Prerelease CLI (`mapples@beta`): the dist-tag itself (`"beta"`). A range
|
|
19
|
+
* cannot express a channel: semver orders `rc` above `beta`, so
|
|
20
|
+
* `^1.6.0-beta.0` resolves to the rc, while caret ranges without a
|
|
21
|
+
* prerelease resolve to the old `latest`. The tag resolves every package to
|
|
22
|
+
* the same fixed-group publish, and the lockfile pins it.
|
|
23
|
+
*/
|
|
24
|
+
export declare function mapplesRuntimeSpec(): string;
|
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
|
|
3
|
+
"version": "0.2.0",
|
|
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,8 +18,9 @@
|
|
|
18
18
|
"clean": "rm -rf dist *.tsbuildinfo"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@mapples/codegen": "
|
|
22
|
-
"@mapples/sid-ast": "
|
|
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",
|
|
23
24
|
"@noble/hashes": "^1.6.1",
|
|
24
25
|
"axios": "^1.7.9",
|
|
25
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
|
|
@@ -55,13 +55,14 @@ rewritten by every sync — read them fresh.
|
|
|
55
55
|
`GridTwoColumns`, `GridThreeColumns`, `GridFourColumns`, `GradientBackground`,
|
|
56
56
|
`ImageBackgroundView`, `Typography`, `Text` (never on a screen — use Typography), `Image`,
|
|
57
57
|
`Icon`, `Svg`, `Vector`, `Video`, `QRCode`, `BarCode`, `Pressable`, `IconButton`, `TextInput`,
|
|
58
|
-
`Select`, `FormView`, `TextField`, `SubmitButton
|
|
58
|
+
`Select`, `FormView`, `TextField`, `SubmitButton`, `Button` (themed like the library below, but
|
|
59
|
+
imported from `@mapples/ui`).
|
|
59
60
|
|
|
60
61
|
`@mapples/components` — the themed library (paints itself from the tokens; prefer it):
|
|
61
62
|
|
|
62
63
|
| Group | Types |
|
|
63
64
|
| --- | --- |
|
|
64
|
-
| actions | `
|
|
65
|
+
| actions | `ButtonGroup`, `Fab`, `TextLink`, `BottomActionBar` (`Button` is an `@mapples/ui` import) |
|
|
65
66
|
| input | `InputField`, `SelectField`, `Checkbox`, `RadioGroup`, `Switch`, `Slider`, `NumberStepper`, `PinInput`, `SearchBar`, `ChatComposer`, `SegmentedControl`, `Rating`, `ChipGroup`, `Chip` |
|
|
66
67
|
| content | `Card`, `MediaCard`, `List`, `ListItem`, `SectionHeader`, `Divider`, `Avatar`, `AvatarGroup`, `Badge`, `StatTile`, `Table`, `Timeline`, `ImageCarousel`, `MessageBubble`, `Accordion`, `Skeleton` |
|
|
67
68
|
| navigation | `TopAppBar`, `BottomNavigationBar`, `Tabs`, `Breadcrumbs`, `Steps`, `PageControl` |
|
|
@@ -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
|
|
|
@@ -40,7 +40,7 @@ and `tone` props and the style slots — never rebuild one from Views. Array pro
|
|
|
40
40
|
|
|
41
41
|
| Type | Props to know | Use |
|
|
42
42
|
| --- | --- | --- |
|
|
43
|
-
| `Button` | `label`, `variant` filled\|outlined\|text\|tonal, `size` sm\|md\|lg, `fullWidth`, `leadingIconName`, `tone` | the primary action (filled lg fullWidth), secondary actions (outlined/text) |
|
|
43
|
+
| `Button` | `label`, `variant` filled\|outlined\|text\|tonal, `size` sm\|md\|lg, `fullWidth`, `leadingIconName`, `tone` | the primary action (filled lg fullWidth), secondary actions (outlined/text) — **imported from `@mapples/ui`**, not `@mapples/components` |
|
|
44
44
|
| `ButtonGroup` | `options` [{label, value}], `value` | a segmented pair of actions |
|
|
45
45
|
| `Fab` | `iconName`, `accessibilityLabel`, `label`, `extended` | one floating primary action |
|
|
46
46
|
| `TextLink` | `label`, `tone`, `underline` | Skip, Forgot password?, Sign in |
|
|
@@ -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
|
|
@@ -72,7 +72,7 @@ and `tone` props and the style slots — never rebuild one from Views. Array pro
|
|
|
72
72
|
| `Card` | `variant` elevated\|filled\|outlined; children | any surface that groups content |
|
|
73
73
|
| `MediaCard` | `source`, `title`, `subtitle`, `meta`, `aspectRatio` | a photo-topped tile (rails, grids) |
|
|
74
74
|
| `List` | `variant` plain\|inset\|card, `header`; `ListItem` children | rows — the List draws dividers and the surface |
|
|
75
|
-
| `ListItem` | `title`, `subtitle`, `leading` icon\|avatar\|image\|none, `leadingIconName`, `source`, `trailing` chevron\|text\|switch\|checkbox\|none, `trailingText`, `tone` | one row |
|
|
75
|
+
| `ListItem` | `title`, `subtitle`, `leading` icon\|avatar\|image\|none, `leadingIconName`, `leadingName` (the name whose initials fill a `leading="avatar"` with no `source`), `source`, `trailing` chevron\|text\|switch\|checkbox\|none, `trailingText`, `tone` | one row |
|
|
76
76
|
| `SectionHeader` | `title`, `actionLabel` | "Popular · See all" |
|
|
77
77
|
| `Divider` | `inset` | a hairline between groups |
|
|
78
78
|
| `Avatar` | `name` or `source`, `size` sm\|md\|lg\|xl, `badgeCount` | a person |
|
|
@@ -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.
|
|
@@ -87,6 +87,8 @@ Regular, Medium, SemiBold, Bold unless noted.
|
|
|
87
87
|
The icon family is a project setting in Creator; from code, `Icon iconName="…"` uses the glyph
|
|
88
88
|
names of that family (ionicons names like `home-outline`, `search`, `chevron-forward` when in
|
|
89
89
|
doubt). An unknown name renders as a broken glyph — prefer a common name over a guessed one.
|
|
90
|
+
The app ships only the chosen family's `@react-native-vector-icons/*` pack, which
|
|
91
|
+
`npx -y mapples@__CLI_VERSION__ sync` adds once the family is set — never install packs by hand.
|
|
90
92
|
|
|
91
93
|
> Not ported (Creator-only): the streaming preview cards, the `repairViolations` pass and the
|
|
92
94
|
> four-guide generation count (three here, so the table fits a chat reply).
|
|
@@ -49,11 +49,12 @@ npx -y mapples@__CLI_VERSION__ sync --yes --json
|
|
|
49
49
|
| --- | --- |
|
|
50
50
|
| `files[].action` | `created` / `updated` / `regenerated` (from Creator after a conflict) / `deprecated` (your version moved to `_depr_…`) |
|
|
51
51
|
| `conflicts[]` | both sides changed the same prop or one deleted what the other edited — the file was deprecated and regenerated |
|
|
52
|
-
| `warnings[]` | lossy steps: `NON_LITERAL_PROP` (an expression prop stays code-only), `UNKNOWN_ELEMENT_WITH_SID`, … |
|
|
53
|
-
| `dropped[]` | ops the server skipped (target gone) — the change did not land |
|
|
52
|
+
| `warnings[]` | lossy steps: `NON_LITERAL_PROP` (an expression prop stays code-only), `UNKNOWN_ELEMENT_WITH_SID`, … An entry with `"severity": "info"` is not a problem: every `onPress` handler gets one (the canvas preview doesn't run your code) — skip those and read the rest |
|
|
53
|
+
| `dropped[]` | ops the server skipped (target gone) — the change did not land. An entry with `"alreadyRemoved": true` lost nothing: it is the delete of a child whose container the same push deleted |
|
|
54
54
|
| `serverWarnings[]` | e.g. `CHILDREN_REBASED`: the server reordered children after a concurrent edit |
|
|
55
55
|
| `offline` | true = nothing reached the server; ops parked in `.mapples/outbox/` and drained next run |
|
|
56
56
|
| `notes[]` | navigator creation, agent-lease heartbeat misses, rebases |
|
|
57
|
+
| `packages` | the app's dependencies follow the Creator project (icon pack of the project's icon family, QRCode/BarCode/Gradient/Video packages): `added` / `removed` changed package.json, `pluginsAdded` app.json; `installNeeded: true` means run `packages.packageManager` install (and rebuild the dev client for a native package) before starting the app. `removable` entries are left for the user. Never add or remove these packages by hand to fix a render error — sync again |
|
|
57
58
|
|
|
58
59
|
## Exit codes
|
|
59
60
|
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
// GENERATED by Mapples — DO NOT EDIT. This layout is owned by the CLI and
|
|
2
2
|
// regenerated from the navigation document on every `mapples sync`.
|
|
3
3
|
// Edit navigation in Creator instead.
|
|
4
|
+
import MapplesApp from '@mapples/app';
|
|
4
5
|
import { Stack } from 'expo-router';
|
|
5
6
|
|
|
6
7
|
export default function RootLayout() {
|
|
7
|
-
return
|
|
8
|
+
return (
|
|
9
|
+
<MapplesApp>
|
|
10
|
+
<Stack screenOptions={{ headerShown: false }} />
|
|
11
|
+
</MapplesApp>
|
|
12
|
+
);
|
|
8
13
|
}
|
package/templates/gitignore
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const { getDefaultConfig } = require('expo/metro-config');
|
|
2
|
+
// Resolves the files `mapples sync` writes (mapples/theme.ts, mapples/assetMap.ts)
|
|
3
|
+
// for @mapples/app — see https://www.npmjs.com/package/@mapples/app.
|
|
4
|
+
const { mapplesResolver } = require('@mapples/app/expo');
|
|
5
|
+
|
|
6
|
+
const config = getDefaultConfig(__dirname);
|
|
7
|
+
config.resolver.resolveRequest = mapplesResolver((context, moduleName, platform) =>
|
|
8
|
+
context.resolveRequest(context, moduleName, platform),
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
module.exports = config;
|
package/templates/package.json
CHANGED
|
@@ -10,59 +10,53 @@
|
|
|
10
10
|
"sync": "mapples sync"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@
|
|
14
|
-
"@mapples/
|
|
15
|
-
"@mapples/
|
|
16
|
-
"@mapples/
|
|
17
|
-
"@mapples/
|
|
18
|
-
"@mapples/
|
|
19
|
-
"@mapples/
|
|
20
|
-
"@mapples/
|
|
21
|
-
"@mapples/
|
|
22
|
-
"@
|
|
23
|
-
"@
|
|
24
|
-
"@
|
|
25
|
-
"@
|
|
26
|
-
"@
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"@react-native-vector-icons/ionicons": "^13.1.0",
|
|
32
|
-
"@react-native-vector-icons/lucide": "^13.1.0",
|
|
33
|
-
"@react-native-vector-icons/material-design-icons": "^13.1.0",
|
|
34
|
-
"@react-native-vector-icons/material-icons": "^13.1.0",
|
|
35
|
-
"@react-native-vector-icons/octicons": "^21.1.0",
|
|
36
|
-
"@react-native-vector-icons/simple-line-icons": "^13.1.0",
|
|
37
|
-
"@react-native-vector-icons/zocial": "^13.1.0",
|
|
38
|
-
"expo": "~57.0.23",
|
|
39
|
-
"expo-constants": "~57.0.18",
|
|
13
|
+
"@expo/ui": "~57.0.21",
|
|
14
|
+
"@mapples/action": "__MAPPLES_RUNTIME__",
|
|
15
|
+
"@mapples/app": "__MAPPLES_RUNTIME__",
|
|
16
|
+
"@mapples/components": "__MAPPLES_RUNTIME__",
|
|
17
|
+
"@mapples/fonts": "__MAPPLES_RUNTIME__",
|
|
18
|
+
"@mapples/form": "__MAPPLES_RUNTIME__",
|
|
19
|
+
"@mapples/inlang": "__MAPPLES_RUNTIME__",
|
|
20
|
+
"@mapples/navigation": "__MAPPLES_RUNTIME__",
|
|
21
|
+
"@mapples/render": "__MAPPLES_RUNTIME__",
|
|
22
|
+
"@mapples/request": "__MAPPLES_RUNTIME__",
|
|
23
|
+
"@mapples/state": "__MAPPLES_RUNTIME__",
|
|
24
|
+
"@mapples/style": "__MAPPLES_RUNTIME__",
|
|
25
|
+
"@mapples/types": "__MAPPLES_RUNTIME__",
|
|
26
|
+
"@mapples/ui": "__MAPPLES_RUNTIME__",
|
|
27
|
+
"expo": "~57.0.26",
|
|
28
|
+
"expo-constants": "~57.0.20",
|
|
29
|
+
"expo-dev-client": "~57.0.19",
|
|
30
|
+
"expo-device": "~57.0.2",
|
|
40
31
|
"expo-font": "~57.0.4",
|
|
32
|
+
"expo-glass-effect": "~57.0.4",
|
|
41
33
|
"expo-image": "~57.0.5",
|
|
42
|
-
"expo-
|
|
43
|
-
"expo-
|
|
44
|
-
"expo-router": "~57.0.21",
|
|
34
|
+
"expo-linking": "~57.0.11",
|
|
35
|
+
"expo-router": "~57.0.24",
|
|
45
36
|
"expo-splash-screen": "~57.0.9",
|
|
46
37
|
"expo-status-bar": "~57.0.1",
|
|
38
|
+
"expo-symbols": "~57.0.3",
|
|
47
39
|
"expo-system-ui": "~57.0.4",
|
|
48
40
|
"expo-web-browser": "~57.0.3",
|
|
49
|
-
"
|
|
41
|
+
"lodash": "^4.18.0",
|
|
50
42
|
"react": "19.2.3",
|
|
51
43
|
"react-dom": "19.2.3",
|
|
52
44
|
"react-native": "0.86.3",
|
|
53
45
|
"react-native-gesture-handler": "~2.32.0",
|
|
54
|
-
"react-native-qrcode-svg": "^6.3.22",
|
|
55
46
|
"react-native-reanimated": "4.5.1",
|
|
56
47
|
"react-native-safe-area-context": "~5.7.0",
|
|
57
48
|
"react-native-screens": "~4.26.0",
|
|
58
49
|
"react-native-svg": "15.15.4",
|
|
59
50
|
"react-native-web": "~0.21.0",
|
|
60
|
-
"react-native-worklets": "0.10.1"
|
|
51
|
+
"react-native-worklets": "0.10.1",
|
|
52
|
+
"rxjs": "^7.8.1",
|
|
53
|
+
"yup": "^1.6.0"
|
|
61
54
|
},
|
|
62
55
|
"devDependencies": {
|
|
63
56
|
"@babel/core": "^7.26.0",
|
|
64
57
|
"@types/react": "~19.2.2",
|
|
65
58
|
"babel-plugin-mapples-sid": "__CLI_VERSION__",
|
|
59
|
+
"babel-preset-expo": "~57.0.13",
|
|
66
60
|
"mapples": "__CLI_VERSION__",
|
|
67
61
|
"typescript": "~6.0.3"
|
|
68
62
|
},
|