Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,15 @@ Implements the counter-proposal from the cat-factory slice-4 triage (`docs/subje
- **`@modular-vue/vue`** (re-exported from `@modular-vue/core`) — the same surface as a `computed`-based composable plus `<PanelsOutlet>` with `#empty` / `#wrap` slots and `provide`-based `usePanelSubject`. `usePanels` accepts `MaybeRefOrGetter` for the group, subject, and `onDuplicate`, and tracks **both** runtime slot sources — the reactive computed and the `recalculateSlots()` signal `Ref` — serving whichever produced the more recent evaluation, so dynamic-slot panels update on either path (matching the React host's behavior).
- **`ModuleErrorBoundary`** (both bindings) — new optional `label` prop (default `"Module"`) naming the failing unit in the notice and console message; `<PanelsOutlet>` passes `"Panel"` so a crashed panel isn't mislabeled a module.
- **Docs** — new [`docs/subject-panels.md`](docs/subject-panels.md) guide (entry shape, resolver semantics, both hosts, the Vue reactivity caveat, `when` vs `dynamicSlots`, `subjectKey`, panels-vs-pairing); the compositions README's sibling-primitive comparison extended three → four; cross-links from `reactive-slots-vue.md` and `remote-capability-manifests.md`; the triage doc gains its Resolution section.
- **Housekeeping (Gap D)** — the Vue family peer ranges (`vue`, `vue-core`, `vue-runtime`, `vue-nuxt`, `vue-journeys`, `vue-compositions`, `vue-testing`) widen to admit `@modular-frontend/core@^0.3.0`, aligning lagging `^0.1.0`-only ranges with the engine version already in the workspace.
- **Housekeeping (Gap D)** — the `@modular-frontend/core` peer ranges are widened and unified so adopting panels (which lives in `@modular-frontend/core@0.4.0`) no longer collides with bindings that were still pinned to older lines. See the dedicated entry below.

### Changed — `@modular-frontend/core` as a shared peer dependency (panels adoption)

Adopting panels was harder than it should have been: panels ship in `@modular-frontend/core@0.4.0`, but much of the ecosystem still constrained the engine to older lines, so an install that pulled `0.4.0` for panels tripped peer-dependency conflicts against packages that only admitted `^0.3.0` (or, worse, `^0.1.0`). The fix treats `@modular-frontend/core` as what it is — the one framework-neutral singleton the whole tree shares — and expresses that with peer dependencies rather than hand-maintained per-minor ranges.

- **Unified, forward-looking peer range** — every binding that peer-depends on `@modular-frontend/core` now declares a single `>=0.1.0 <2.0.0` range instead of an enumerated `^0.1.0 || ^0.2.0 || ^0.3.0` (or a lone `^0.1.0`). Under semver a `0.x` caret is patch-only, so the old union was really `>=0.1.0 <0.4.0` — it excluded `0.4.0` and every future minor, and each release required a manual append (the step that was missed for `0.4.0`). The open range admits the whole pre-`2.0` line in one expression, so future additive `0.x`/`1.x` engine releases need no per-package edit. Touches `@modular-vue/vue`, `@modular-vue/core`, `@modular-vue/runtime`, `@modular-vue/nuxt`, `@modular-vue/journeys`, `@modular-vue/compositions`, `@modular-vue/testing`, `@modular-angular/angular`, `@modular-angular/core`, and `@modular-frontend/testing` (the last three were still on `^0.1.0`, excluding `0.2`/`0.3` as well).
- **Hard dependencies promoted to peers** — `@modular-react/core`, `@modular-frontend/compositions-engine`, and `@modular-frontend/journeys-engine` carried `@modular-frontend/core` as a plain `dependencies: "workspace:*"`, which publishes as an exact version pin and can install a _second_ engine copy alongside a consumer's own. Because the engine holds identity-sensitive runtime (the slots context, module/registry identity, the shared resolver reductions behind panels and compositions), a duplicate copy silently breaks identity checks and gives structurally-but-not-nominally compatible types. These now declare `@modular-frontend/core` as a `peerDependencies` (`>=0.1.0 <2.0.0`) backed by a `devDependencies: "workspace:*"`, matching the stance `@modular-frontend/testing` already took and the packaging philosophy documented in `scripts/check-publish.mjs` (shared singletons stay peers so a consumer's types bind to their single copy). Verified end-to-end by `check:publish` (publint + attw on the packed tarballs).
- **Vue scaffolder** — `@modular-vue/cli` baked `@modular-frontend/core: "^0.1.0"` into every generated app, so a freshly scaffolded project was born unable to install panels. It now bakes the same `>=0.1.0 <2.0.0` range.

### Changed — downstream feedback: types, plugins, and the cancel affordance

Expand Down
2 changes: 1 addition & 1 deletion packages/angular-router-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,6 @@
"@angular/core": "^20.0.0 || ^21.0.0 || ^22.0.0",
"@angular/router": "^20.0.0 || ^21.0.0 || ^22.0.0",
"@modular-angular/angular": "^0.1.0",
"@modular-frontend/core": "^0.1.0"
"@modular-frontend/core": ">=0.1.0 <2.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/angular/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,6 @@
},
"peerDependencies": {
"@angular/core": "^20.0.0 || ^21.0.0 || ^22.0.0",
"@modular-frontend/core": "^0.1.0"
"@modular-frontend/core": ">=0.1.0 <2.0.0"
}
}
7 changes: 4 additions & 3 deletions packages/compositions-engine/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,17 @@
"prepublishOnly": "pnpm build",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@modular-frontend/core": "workspace:*"
},
"devDependencies": {
"@modular-frontend/core": "workspace:*",
"happy-dom": "^20.9.0",
"oxfmt": "^0.51.0",
"oxlint": "^1.66.0",
"rolldown-plugin-dts": "^0.26.0",
"typescript": "^6.0.3",
"vite": "^8.1.3",
"vitest": "^4.1.10"
},
"peerDependencies": {
"@modular-frontend/core": ">=0.1.0 <2.0.0"
}
}
7 changes: 4 additions & 3 deletions packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,16 @@
"prepublishOnly": "pnpm build",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@modular-frontend/core": "workspace:*"
},
"devDependencies": {
"@modular-frontend/core": "workspace:*",
"oxfmt": "^0.51.0",
"oxlint": "^1.66.0",
"rolldown-plugin-dts": "^0.26.0",
"typescript": "^6.0.3",
"vite": "^8.1.3",
"vitest": "^4.1.10"
},
"peerDependencies": {
"@modular-frontend/core": ">=0.1.0 <2.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/frontend-testing/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,6 @@
"vitest": "^4.1.10"
},
"peerDependencies": {
"@modular-frontend/core": "^0.1.0"
"@modular-frontend/core": ">=0.1.0 <2.0.0"
}
}
7 changes: 4 additions & 3 deletions packages/journeys-engine/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,17 @@
"prepublishOnly": "pnpm build",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@modular-frontend/core": "workspace:*"
},
"devDependencies": {
"@modular-frontend/core": "workspace:*",
"happy-dom": "^20.9.0",
"oxfmt": "^0.51.0",
"oxlint": "^1.66.0",
"rolldown-plugin-dts": "^0.26.0",
"typescript": "^6.0.3",
"vite": "^8.1.3",
"vitest": "^4.1.10"
},
"peerDependencies": {
"@modular-frontend/core": ">=0.1.0 <2.0.0"
}
}
4 changes: 2 additions & 2 deletions packages/vue-cli/src/templates/scaffold.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ export const MODULAR_VUE_VERSION = "^1.0.0";
const V = {
/** `@modular-vue/*` family (core, runtime, vue, testing, journeys). */
modularVue: MODULAR_VUE_VERSION,
/** `@modular-frontend/*` shared engine/core (0.x — tight range, see D-policy). */
modularFrontend: "^0.1.0",
/** `@modular-frontend/*` shared engine/core — one open range across the pre-2.0 line so a generated app is never pinned off the latest (e.g. panels landed in 0.4). */
modularFrontend: ">=0.1.0 <2.0.0",
vue: "^3.5.0",
vueRouter: "^5.0.0",
vueTsc: "^3.3.0",
Expand Down
8 changes: 4 additions & 4 deletions packages/vue-cli/test/__snapshots__/cli.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ dist/
"typecheck": "vue-tsc --noEmit"
},
"dependencies": {
"@modular-frontend/core": "^0.1.0",
"@modular-frontend/core": ">=0.1.0 <2.0.0",
"@modular-vue/vue": "^1.0.0",
"wretch": "^2.11.0"
},
Expand Down Expand Up @@ -286,7 +286,7 @@ export type CustomerOnboardingHandle = typeof customerOnboardingHandle
"typecheck": "vue-tsc --noEmit"
},
"dependencies": {
"@modular-frontend/core": "^0.1.0",
"@modular-frontend/core": ">=0.1.0 <2.0.0",
"@modular-vue/core": "^1.0.0",
"@acme/app-shared": "workspace:*"
},
Expand Down Expand Up @@ -485,7 +485,7 @@ const user = useStore('auth', (s) => s.user)
"typecheck": "vue-tsc --noEmit"
},
"dependencies": {
"@modular-frontend/core": "^0.1.0",
"@modular-frontend/core": ">=0.1.0 <2.0.0",
"@modular-vue/core": "^1.0.0",
"@acme/app-shared": "workspace:*"
},
Expand Down Expand Up @@ -733,7 +733,7 @@ onlyBuiltDependencies:
"@acme/customer-onboarding-journey": "workspace:*",
"@acme/dashboard-module": "workspace:*",
"@acme/orders-module": "workspace:*",
"@modular-frontend/core": "^0.1.0",
"@modular-frontend/core": ">=0.1.0 <2.0.0",
"@modular-vue/core": "^1.0.0",
"@modular-vue/journeys": "^1.0.0",
"@modular-vue/runtime": "^1.0.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/vue-compositions/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"vue": "^3.5.40"
},
"peerDependencies": {
"@modular-frontend/core": "^0.1.0 || ^0.2.0 || ^0.3.0",
"@modular-frontend/core": ">=0.1.0 <2.0.0",
"@modular-vue/vue": "^1.0.0",
"vue": "^3.5.40"
}
Expand Down
2 changes: 1 addition & 1 deletion packages/vue-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
"vue-router": "^5.0.0"
},
"peerDependencies": {
"@modular-frontend/core": "^0.1.0 || ^0.2.0 || ^0.3.0",
"@modular-frontend/core": ">=0.1.0 <2.0.0",
"@modular-vue/vue": "^1.0.0",
"vue": "^3.5.40",
"vue-router": "^5.0.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/vue-journeys/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
"vue": "^3.5.40"
},
"peerDependencies": {
"@modular-frontend/core": "^0.1.0 || ^0.2.0 || ^0.3.0",
"@modular-frontend/core": ">=0.1.0 <2.0.0",
"@modular-vue/vue": "^1.0.0",
"vue": "^3.5.40"
}
Expand Down
2 changes: 1 addition & 1 deletion packages/vue-nuxt/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
"vue-router": "^5.0.0"
},
"peerDependencies": {
"@modular-frontend/core": "^0.1.0 || ^0.2.0 || ^0.3.0",
"@modular-frontend/core": ">=0.1.0 <2.0.0",
"@modular-vue/runtime": "^1.0.0",
"nuxt": "^4.4.0",
"vue": "^3.5.40",
Expand Down
2 changes: 1 addition & 1 deletion packages/vue-runtime/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
"vue-router": "^5.0.0"
},
"peerDependencies": {
"@modular-frontend/core": "^0.1.0 || ^0.2.0 || ^0.3.0",
"@modular-frontend/core": ">=0.1.0 <2.0.0",
"@modular-vue/core": "^1.0.0",
"@modular-vue/vue": "^1.0.0",
"vue": "^3.5.40",
Expand Down
2 changes: 1 addition & 1 deletion packages/vue-testing/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
"vue-router": "^5.0.0"
},
"peerDependencies": {
"@modular-frontend/core": "^0.1.0 || ^0.2.0 || ^0.3.0",
"@modular-frontend/core": ">=0.1.0 <2.0.0",
"@modular-frontend/testing": "^0.1.0",
"@modular-vue/core": "^1.0.0",
"@modular-vue/journeys": "^1.0.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/vue/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
"vue": "^3.5.40"
},
"peerDependencies": {
"@modular-frontend/core": "^0.1.0 || ^0.2.0 || ^0.3.0",
"@modular-frontend/core": ">=0.1.0 <2.0.0",
"vue": "^3.5.40"
}
}
Loading
Loading