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.
Files changed (87) hide show
  1. package/README.md +1 -1
  2. package/dist/api/client.d.ts +16 -0
  3. package/dist/api/client.js +37 -0
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/commit.js +19 -1
  6. package/dist/api/commit.js.map +1 -1
  7. package/dist/api/errors.d.ts +1 -1
  8. package/dist/api/errors.js +3 -0
  9. package/dist/api/errors.js.map +1 -1
  10. package/dist/api/objects.d.ts +3 -1
  11. package/dist/api/objects.js +31 -4
  12. package/dist/api/objects.js.map +1 -1
  13. package/dist/api/project.d.ts +11 -0
  14. package/dist/api/project.js +29 -0
  15. package/dist/api/project.js.map +1 -0
  16. package/dist/assets/assets.d.ts +12 -0
  17. package/dist/assets/assets.js +31 -2
  18. package/dist/assets/assets.js.map +1 -1
  19. package/dist/codegen/imports.d.ts +7 -0
  20. package/dist/codegen/imports.js +31 -0
  21. package/dist/codegen/imports.js.map +1 -1
  22. package/dist/commands/doctor.js +3 -1
  23. package/dist/commands/doctor.js.map +1 -1
  24. package/dist/commands/impl/createImpl.js +34 -4
  25. package/dist/commands/impl/createImpl.js.map +1 -1
  26. package/dist/commands/impl/doctorImpl.js +17 -7
  27. package/dist/commands/impl/doctorImpl.js.map +1 -1
  28. package/dist/commands/impl/initImpl.js +47 -1
  29. package/dist/commands/impl/initImpl.js.map +1 -1
  30. package/dist/commands/impl/syncImpl.js +16 -2
  31. package/dist/commands/impl/syncImpl.js.map +1 -1
  32. package/dist/commands/init.js +1 -0
  33. package/dist/commands/init.js.map +1 -1
  34. package/dist/nav/navigatorTree.d.ts +36 -2
  35. package/dist/nav/navigatorTree.js +191 -40
  36. package/dist/nav/navigatorTree.js.map +1 -1
  37. package/dist/nav/routeTree.d.ts +2 -1
  38. package/dist/nav/routeTree.js +9 -4
  39. package/dist/nav/routeTree.js.map +1 -1
  40. package/dist/nav/screenOptions.d.ts +24 -0
  41. package/dist/nav/screenOptions.js +41 -13
  42. package/dist/nav/screenOptions.js.map +1 -1
  43. package/dist/packages/catalog.d.ts +20 -0
  44. package/dist/packages/catalog.js +94 -0
  45. package/dist/packages/catalog.js.map +1 -0
  46. package/dist/packages/resolve.d.ts +61 -0
  47. package/dist/packages/resolve.js +149 -0
  48. package/dist/packages/resolve.js.map +1 -0
  49. package/dist/runtime/runtimeFiles.d.ts +17 -0
  50. package/dist/runtime/runtimeFiles.js +183 -0
  51. package/dist/runtime/runtimeFiles.js.map +1 -0
  52. package/dist/services/appDeps.d.ts +41 -0
  53. package/dist/services/appDeps.js +152 -0
  54. package/dist/services/appDeps.js.map +1 -0
  55. package/dist/services/appPackages.d.ts +46 -0
  56. package/dist/services/appPackages.js +266 -0
  57. package/dist/services/appPackages.js.map +1 -0
  58. package/dist/services/doctorService.d.ts +28 -1
  59. package/dist/services/doctorService.js +217 -3
  60. package/dist/services/doctorService.js.map +1 -1
  61. package/dist/services/scaffold.d.ts +13 -1
  62. package/dist/services/scaffold.js +57 -5
  63. package/dist/services/scaffold.js.map +1 -1
  64. package/dist/services/syncEngine.js +89 -25
  65. package/dist/services/syncEngine.js.map +1 -1
  66. package/dist/types.d.ts +4 -0
  67. package/dist/types.js.map +1 -1
  68. package/dist/ui/report.d.ts +8 -0
  69. package/dist/ui/report.js +22 -0
  70. package/dist/ui/report.js.map +1 -1
  71. package/dist/version.d.ts +21 -0
  72. package/dist/version.js +40 -3
  73. package/dist/version.js.map +1 -1
  74. package/package.json +4 -3
  75. package/templates/agent/mapples.md +9 -4
  76. package/templates/agent/skills/mapples-conventions/SKILL.md +5 -4
  77. package/templates/agent/skills/mapples-design/SKILL.md +4 -4
  78. package/templates/agent/skills/mapples-design/reference/component-library.md +3 -3
  79. package/templates/agent/skills/mapples-design/reference/layout-contract.md +2 -3
  80. package/templates/agent/skills/mapples-design/reference/playbooks/onboarding-flow.md +1 -1
  81. package/templates/agent/skills/mapples-design/reference/playbooks/screen-flow-wiring.md +2 -5
  82. package/templates/agent/skills/mapples-design/reference/style-guides.md +2 -0
  83. package/templates/agent/skills/mapples-sync/SKILL.md +3 -2
  84. package/templates/app/_layout.tsx +6 -1
  85. package/templates/gitignore +2 -0
  86. package/templates/metro.config.js +11 -0
  87. 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)
@@ -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":"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"}
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
- /** 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.9",
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": "^1.6.0-beta.20260916111702",
22
- "@mapples/sid-ast": "^1.6.0-beta.20260916111702",
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`) 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
@@ -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 | `Button`, `ButtonGroup`, `Fab`, `TextLink`, `BottomActionBar` |
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 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
 
@@ -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\|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
@@ -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} 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.
@@ -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 <Stack screenOptions={{ headerShown: false }} />;
8
+ return (
9
+ <MapplesApp>
10
+ <Stack screenOptions={{ headerShown: false }} />
11
+ </MapplesApp>
12
+ );
8
13
  }
@@ -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
@@ -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;
@@ -10,59 +10,53 @@
10
10
  "sync": "mapples sync"
11
11
  },
12
12
  "dependencies": {
13
- "@mapples/action": "^1.1.2",
14
- "@mapples/components": "^1.2.1",
15
- "@mapples/form": "^1.2.0",
16
- "@mapples/inlang": "^1.2.0",
17
- "@mapples/render": "^1.2.0",
18
- "@mapples/state": "^1.2.0",
19
- "@mapples/style": "^1.2.0",
20
- "@mapples/types": "^1.2.0",
21
- "@mapples/ui": "^1.1.3",
22
- "@react-native-vector-icons/ant-design": "^13.1.0",
23
- "@react-native-vector-icons/entypo": "^13.1.0",
24
- "@react-native-vector-icons/evil-icons": "^13.1.0",
25
- "@react-native-vector-icons/feather": "^13.1.0",
26
- "@react-native-vector-icons/fontawesome": "^13.1.0",
27
- "@react-native-vector-icons/fontawesome5": "^13.1.0",
28
- "@react-native-vector-icons/fontawesome6": "^13.1.0",
29
- "@react-native-vector-icons/fontisto": "^13.1.0",
30
- "@react-native-vector-icons/foundation": "^13.1.0",
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-linear-gradient": "~57.0.2",
43
- "expo-linking": "~57.0.10",
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
- "jsbarcode": "^3.12.3",
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
  },