@cratis/components.migrator 0.0.0 → 4.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Cratis
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,260 @@
1
1
  # @cratis/components.migrator
2
2
 
3
- Reserved for the Cratis Components release workflow.
3
+ The Components 4 Migrator updates a Components 3 codebase to the Components 4 public contracts. It moves root namespaces to explicit subpath imports, replaces deprecated Button appearance props, and changes legacy event-wrapper callbacks to semantic value callbacks. The CLI uses syntax-aware codemods internally, but each command is named for the migration it performs, can be run independently, and is idempotent. Components 4 keeps only package-wide provider setup at the root; every component is imported from its explicit subpath (`@cratis/components/Canvas`, for example). The companion `@cratis/eslint-plugin-components` package's `no-root-barrel-import` rule enforces this once a consumer has migrated.
4
+
5
+ > **Publication status:** The install examples target the owner-authorized 4.0.0 npm release. When
6
+ > reading this README from repository source before that release, verify availability with
7
+ > `npm view @cratis/components.migrator@4.0.0 version`; source contributors run the workspace
8
+ > commands from this checkout instead. The Migrator is never an application runtime dependency.
9
+
10
+ The published package is a **CLI-only** tool. Its public surface is the documented `cratis-components-*` executable names (plus `./package.json` for tooling metadata); `lib/`, `scripts/`, and individual transforms are implementation details and are blocked by the package export map. Do not import them from application code or build custom migration APIs on them.
11
+
12
+ ## `remove-root-namespace-imports`
13
+
14
+ An idempotent, AST-based codemod built on the TypeScript compiler API. The published CLI
15
+ brings its own `typescript` runtime dependency, so its parser does not depend on the consumer
16
+ application's TypeScript version. It rewrites static `import` declarations and named
17
+ `export … from` re-exports only; it never guesses, and reports every case it will not touch.
18
+
19
+ ### What it rewrites
20
+
21
+ | Before | After |
22
+ | --------------------------------------------------- | ----------------------------------------------------------- |
23
+ | `import { Canvas } from '@cratis/components';` | `import * as Canvas from '@cratis/components/Canvas';` |
24
+ | `import type { Canvas } from '@cratis/components';` | `import type * as Canvas from '@cratis/components/Canvas';` |
25
+ | `import { Canvas as C } from '@cratis/components';` | `import * as C from '@cratis/components/Canvas';` |
26
+ | `export { Canvas } from '@cratis/components';` | `export * as Canvas from '@cratis/components/Canvas';` |
27
+ | `export type { Canvas } from '@cratis/components';` | `export type * as Canvas from '@cratis/components/Canvas';` |
28
+ | `export { Canvas as C } from '@cratis/components';` | `export * as C from '@cratis/components/Canvas';` |
29
+
30
+ A named `export … from '@cratis/components'` re-export follows exactly the same rules as an
31
+ import, because the transformation is equally unambiguous in both directions: the exported
32
+ name identifies one specific namespace (or approved setup symbol), so the codemod can
33
+ rewrite it without guessing. Only a **wildcard** re-export of the whole package —
34
+ `export * from '@cratis/components'` or `export * as X from '@cratis/components'` — stays
35
+ unsupported, for the same reason a whole-package namespace import stays unsupported: see
36
+ [What it refuses to guess](#what-it-refuses-to-guess).
37
+
38
+ The historical `CommandStepper` root namespace is a special case: it aliased the complete `CommandDialog` module. The codemod therefore maps it to `@cratis/components/CommandDialog`, preserving the module identity for members retained in Components 4. It cannot restore a removed module export such as the accidental `CommandStepperContent` surface. New code that only needs the standalone component should use `import { CommandStepper } from '@cratis/components/CommandStepper'` (or the equivalent re-export).
39
+
40
+ Multiple namespaces in one import or re-export become one subpath statement per namespace:
41
+
42
+ ```ts
43
+ // Before
44
+ import { Canvas, Common } from '@cratis/components';
45
+
46
+ // After
47
+ import * as Canvas from '@cratis/components/Canvas';
48
+ import * as Common from '@cratis/components/Common';
49
+ ```
50
+
51
+ A mixed import or re-export naming both an approved setup symbol and a namespace is split —
52
+ the setup symbol stays at the root, the namespace moves to its subpath:
53
+
54
+ ```ts
55
+ // Before
56
+ import { CratisComponentsProvider, Canvas } from '@cratis/components';
57
+
58
+ // After
59
+ import { CratisComponentsProvider } from '@cratis/components';
60
+ import * as Canvas from '@cratis/components/Canvas';
61
+ ```
62
+
63
+ Running the codemod again on its own output is a no-op — it only ever matches an import or
64
+ named re-export whose module specifier is exactly `@cratis/components` (or the `--package`
65
+ override), so an already-migrated subpath import or re-export is never revisited.
66
+
67
+ The complete namespace → subpath map, known removed Components 3 compatibility exports, and approved-root-symbol allowlist live in [`lib/namespaceMap.js`](./lib/namespaceMap.js), mirrored by `ESLint/lib/rootNamespaceMap.js`. Contributors must update both packages together when a namespace subpath, removed boundary, or setup symbol changes. The packages share the repository release version; parity specs prevent their migration contracts from drifting.
68
+
69
+ ### What it refuses to guess
70
+
71
+ Each of these is left completely untouched, and reported as a diagnostic instead:
72
+
73
+ - A namespace import of the whole package — `import * as Components from '@cratis/components';`.
74
+ Which subpath each later `Components.X` access belongs to cannot be inferred from the
75
+ import alone.
76
+ - A default import — `import Components from '@cratis/components';`. The package has no
77
+ default export.
78
+ - A side-effect-only import — `import '@cratis/components';`. There is no binding to infer a
79
+ subpath from.
80
+ - A named import of a symbol that is neither an approved setup symbol nor a known namespace
81
+ (for example a member like `Button` that only exists _inside_ a namespace, not at the
82
+ root). The whole import statement is left untouched rather than partially migrated.
83
+ - The Components 3.6 `Compatibility` namespace and its direct pass-through exports. They
84
+ are recognized known removals, not unknown symbols: Components 4 has no compatibility
85
+ subpath, so the transform leaves the statement untouched and directs the consumer to
86
+ typed Cratis parts.
87
+ - A TypeScript import assignment — `import Components = require('@cratis/components');`.
88
+ This is the whole package namespace, so later member access is as ambiguous as `import * as`.
89
+ - A dynamic `import('@cratis/components')` or a CommonJS `require('@cratis/components')`,
90
+ anywhere in the file.
91
+ - A wildcard re-export of the whole package — `export * from '@cratis/components';` — or a
92
+ namespace re-export of the whole package — `export * as Components from
93
+ '@cratis/components';`. Both are exactly as ambiguous as a whole-package namespace import:
94
+ which subpath each later access needs cannot be determined from the re-export alone. A
95
+ _named_ re-export (`export { Canvas } from '@cratis/components';`) is not in this list —
96
+ see [What it rewrites](#what-it-rewrites).
97
+
98
+ Existing subpath imports and re-exports (`@cratis/components/Canvas`, …) are never touched —
99
+ narrow subpath consumers are left exactly as they are.
100
+
101
+ ### Use
102
+
103
+ The packaged CLI requires Node.js 20 or newer and brings its own TypeScript parser; it does
104
+ not depend on the consumer application's TypeScript version. It scans JavaScript, JSX,
105
+ TypeScript, and TSX sources, including `.mjs`, `.cjs`, `.mts`, and `.cts` variants. Components
106
+ 3 has no 3.x Migrator package. Use the Components 4 Migrator bounded to `>=4 <5`; never use
107
+ `latest`.
108
+
109
+ Before any scan or write, the CLI validates its bundled compatibility manifest, checks its own
110
+ version against the declared Migrator range, resolves the configured Components package from the
111
+ invocation directory, and verifies that package is in the supported 3.x migration-source or 4.x
112
+ migration-target window. Missing Components, unsupported versions, stale package metadata, and an
113
+ invalid manifest fail closed. `--help` remains available without Components installed.
114
+
115
+ ```sh
116
+ TOOLING_RANGE='^4.0.0' # Shell-safe equivalent of >=4 <5.
117
+
118
+ # Preview what would change, without writing anything:
119
+ npx --package "@cratis/components.migrator@$TOOLING_RANGE" \
120
+ cratis-components-remove-root-namespace-imports --check path/to/app/src
121
+
122
+ # Apply the rewrite:
123
+ npx --package "@cratis/components.migrator@$TOOLING_RANGE" \
124
+ cratis-components-remove-root-namespace-imports path/to/app/src
125
+
126
+ # Contributors to this repository can run the workspace source directly:
127
+ node Migrator/scripts/remove-root-namespace-imports.js --check Source
128
+ ```
129
+
130
+ The same bounded package works in pnpm and Yarn 2+ projects:
131
+
132
+ ```sh
133
+ pnpm dlx --package "@cratis/components.migrator@$TOOLING_RANGE" \
134
+ cratis-components-remove-root-namespace-imports --check path/to/app/src
135
+ yarn dlx --package "@cratis/components.migrator@$TOOLING_RANGE" \
136
+ cratis-components-remove-root-namespace-imports --check path/to/app/src
137
+ ```
138
+
139
+ Quote any path containing spaces. Angle-bracket placeholders are intentionally not used in executable examples because `<...>` is shell input-redirection syntax.
140
+
141
+ Exit code is non-zero whenever an unsupported case was found (with `--check` or without —
142
+ those always need a human), and, in `--check` mode only, whenever a supported rewrite has
143
+ not yet been applied. Run `--help` for the full option list.
144
+
145
+ After running the codemod, run the project's own build/lint/test gates — the codemod only
146
+ performs the mechanical import/re-export rewrite; it does not attempt to fix any resulting
147
+ unused import, nor does it know whether a namespace member you use (`Canvas.Foo`) still
148
+ exists at that subpath.
149
+
150
+ ## `button-variant-tone`
151
+
152
+ `cratis-components-button-variant-tone` resolves `Button` JSX bindings imported, including aliases and `Common.Button` namespace access, from `@cratis/components/Common`. It applies the runtime's legacy precedence (`link` → `text` → `outlined` → `solid`) and replaces deprecated props:
153
+
154
+ | Deprecated prop | Semantic prop |
155
+ | ------------------------------------- | ------------------- |
156
+ | `text` | `variant='ghost'` |
157
+ | `link` | `variant='link'` |
158
+ | `outlined` | `variant='outline'` |
159
+ | `rounded` | `shape='pill'` |
160
+ | `severity='secondary'` / `'contrast'` | `tone='neutral'` |
161
+ | `severity='info'` / `'help'` | `tone='accent'` |
162
+ | `severity='success'` | `tone='positive'` |
163
+ | `severity='warn'` | `tone='caution'` |
164
+ | `severity='danger'` | `tone='critical'` |
165
+
166
+ A literal `severity='contrast'` also receives `variant='solid'` only when no explicit new variant or stronger true legacy variant applies. A literal new `variant`, `tone`, or `shape` wins and its redundant legacy prop is removed.
167
+
168
+ ```tsx
169
+ // Safe rewrite
170
+ <Button outlined rounded severity='warn' />
171
+ // becomes
172
+ <Button variant='outline' shape='pill' tone='caution' />
173
+ ```
174
+
175
+ The transform never guesses through JSX spreads, dynamic legacy values, duplicate props, or an unknown new-prop expression that conflicts with a legacy prop. It leaves the uncertain prop group semantically unchanged, reports it, and adds one syntax-safe `TODO(cratis-codemod)` annotation. Subsequent runs do not duplicate that annotation.
176
+
177
+ ```tsx
178
+ // Refused and reported
179
+ <Button text={appearance.text} severity={appearance.severity} />
180
+ ```
181
+
182
+ ## `change-handler`
183
+
184
+ `cratis-components-change-handler` resolves affected Components-owned JSX identifiers imported with aliases or namespaces from `@cratis/components/Dropdown`, `@cratis/components/CommandForm`, and `@cratis/components/CommandForm/fields`. It rewrites only a structurally-proven single forwarding callback:
185
+
186
+ ```tsx
187
+ // Safe rewrites
188
+ <Dropdown onChange={(event) => setRole(event.value)} />
189
+ <InputTextField onChange={(event) => setName(event.target.value)} />
190
+ <CheckboxField onChange={({ target: { checked } }) => setEnabled(checked)} />
191
+
192
+ // become
193
+ <Dropdown onChange={(value) => setRole(value)} />
194
+ <InputTextField onChange={(value) => setName(value)} />
195
+ <CheckboxField onChange={(value) => setEnabled(value)} />
196
+ ```
197
+
198
+ The affected CommandForm fields cover legacy `target`/`currentTarget` `value`, `checked`, and `valueAsNumber` payloads, plus `DropdownField`/`MultiSelectField` `event.value`. Already-semantic callbacks and callback references such as `onChange={setValue}` are unchanged.
199
+
200
+ Multi-statement, multi-use, wrong-payload, destructuring-with-default/rest, and native-event-dependent callbacks are refused, reported, and annotated once:
201
+
202
+ ```tsx
203
+ // Refused and reported: the host still depends on the old event object
204
+ <Dropdown
205
+ onChange={(event) => {
206
+ audit(event.originalEvent);
207
+ setRole(event.value);
208
+ }}
209
+ />
210
+ ```
211
+
212
+ ## Run the migration sequence
213
+
214
+ Use the bounded Components 4 tooling train for all three commands. The recommended source/target order is:
215
+
216
+ 1. With Components 3 (`>=3 <4`) installed, preview and apply the root-import transform. Its subpaths exist in both majors.
217
+ 2. Run the Components 3 gates and checkpoint the import-only change.
218
+ 3. Upgrade Core to Components 4 (`^4.0.0`).
219
+ 4. Preview and apply Button appearance, then change-handler migration; these produce Components 4 source.
220
+
221
+ Preflight also accepts the Components 4 target window so the root transform can be recovered after an upgrade. It accepts no other Core major. Preview every step before applying it:
222
+
223
+ ```sh
224
+ TOOLING_RANGE='^4.0.0'
225
+
226
+ npx --package "@cratis/components.migrator@$TOOLING_RANGE" \
227
+ cratis-components-remove-root-namespace-imports --check path/to/app/src
228
+ npx --package "@cratis/components.migrator@$TOOLING_RANGE" \
229
+ cratis-components-remove-root-namespace-imports path/to/app/src
230
+
231
+ npx --package "@cratis/components.migrator@$TOOLING_RANGE" \
232
+ cratis-components-button-variant-tone --check path/to/app/src
233
+ npx --package "@cratis/components.migrator@$TOOLING_RANGE" \
234
+ cratis-components-button-variant-tone path/to/app/src
235
+
236
+ npx --package "@cratis/components.migrator@$TOOLING_RANGE" \
237
+ cratis-components-change-handler --check path/to/app/src
238
+ npx --package "@cratis/components.migrator@$TOOLING_RANGE" \
239
+ cratis-components-change-handler path/to/app/src
240
+ ```
241
+
242
+ Never substitute `latest`; keep tooling within `>=4 <5`. Tooling packages share the repository release version with Core, and the bounded range plus bundled manifest preflight enforce the compatible migration windows without exact-patch coupling. Both new CLIs require Node.js 20 or newer, bundle their own TypeScript compiler dependency, scan `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, `.tsx`, `.mts`, and `.cts` recursively, support `--package <name>`, and exit nonzero for pending check-mode edits or any refused case. Review every diagnostic and `TODO(cratis-codemod)`, then run the consuming project's formatter, lint, type check, tests, and production build.
243
+
244
+ Contributor source commands are:
245
+
246
+ ```sh
247
+ node Migrator/scripts/button-variant-tone.js --check Source
248
+ node Migrator/scripts/change-handler.js --check Source
249
+ ```
250
+
251
+ ### Test
252
+
253
+ ```sh
254
+ cd Migrator && yarn test
255
+ ```
256
+
257
+ Repository fixtures for every supported and unsupported case live under
258
+ `Migrator/test/fixtures`,
259
+ each as an `input.ts`/`expected.ts` pair (`input.ts` and `expected.ts` are identical for an
260
+ unsupported case, since nothing should change).
@@ -0,0 +1,305 @@
1
+ {
2
+ "schemaVersion": 2,
3
+ "releaseStatus": "publication-authorized",
4
+ "publicationEnabled": true,
5
+ "gaScope": {
6
+ "publicPackages": [
7
+ "@cratis/components",
8
+ "@cratis/eslint-plugin-components",
9
+ "@cratis/components.migrator",
10
+ "@cratis/components.conformance",
11
+ "@cratis/components.mui",
12
+ "@cratis/components.primereact",
13
+ "@cratis/components.primereact10"
14
+ ],
15
+ "privateEvidence": [
16
+ {
17
+ "id": "plain",
18
+ "name": "Plain DOM renderer conformance falsification fixture",
19
+ "purpose": "private-conformance-evidence",
20
+ "private": true,
21
+ "published": false
22
+ },
23
+ {
24
+ "id": "storybook",
25
+ "name": "Composed renderer Storybook",
26
+ "purpose": "private-renderer-evidence",
27
+ "private": true,
28
+ "published": false
29
+ }
30
+ ]
31
+ },
32
+ "toolingCompatibility": {
33
+ "componentsCore": ">=4 <5",
34
+ "eslint": ">=4 <5",
35
+ "migrator": ">=4 <5"
36
+ },
37
+ "supportWindows": {
38
+ "components3": {
39
+ "components": ">=3 <4",
40
+ "status": "maintenance-security-critical",
41
+ "migrationRole": "source",
42
+ "migrationTarget": ">=4 <5",
43
+ "tooling": ">=4 <5",
44
+ "eolAt": null,
45
+ "eolApprovedByOwners": false,
46
+ "ownerDecisionPolicy": "Set and approve EOL no later than 12 months after Components 4 GA."
47
+ },
48
+ "components4": {
49
+ "components": ">=4 <5",
50
+ "status": "current",
51
+ "migrationRole": "target",
52
+ "rendererAbi": 1,
53
+ "coreProfile": "core/v1",
54
+ "adapterProfile": "stable-presentation/v1",
55
+ "tooling": {
56
+ "eslint": ">=4 <5",
57
+ "migrator": ">=4 <5"
58
+ },
59
+ "adapters": {
60
+ "@cratis/components.conformance": ">=4 <5",
61
+ "@cratis/components.mui": ">=4 <5",
62
+ "@cratis/components.primereact": ">=4 <5",
63
+ "@cratis/components.primereact10": ">=4 <5"
64
+ }
65
+ }
66
+ },
67
+ "packages": [
68
+ {
69
+ "name": "@cratis/components",
70
+ "role": "core",
71
+ "version": "4.0.0",
72
+ "releaseMajorRange": ">=4 <5",
73
+ "independentRelease": false,
74
+ "private": false,
75
+ "packageAccess": "public",
76
+ "peerDependencies": {
77
+ "@cratis/arc": ">=20.3.1 <23",
78
+ "@cratis/arc.react": ">=20.3.1 <23",
79
+ "@cratis/fundamentals": "^7.10.3",
80
+ "pixi.js": "^8.20.0",
81
+ "react": "^19.0.0",
82
+ "react-dom": "^19.0.0",
83
+ "reflect-metadata": "0.2.2",
84
+ "tsyringe": "4.10.0"
85
+ },
86
+ "upstream": {
87
+ "react": "^19.0.0"
88
+ },
89
+ "rendererAbi": 1,
90
+ "rendererProfile": "core/v1"
91
+ },
92
+ {
93
+ "name": "@cratis/eslint-plugin-components",
94
+ "role": "eslint",
95
+ "version": "4.0.0",
96
+ "releaseMajorRange": ">=4 <5",
97
+ "independentRelease": false,
98
+ "private": false,
99
+ "packageAccess": "public",
100
+ "peerDependencies": {
101
+ "eslint": ">=9"
102
+ },
103
+ "upstream": {}
104
+ },
105
+ {
106
+ "name": "@cratis/components.migrator",
107
+ "role": "migrator",
108
+ "version": "4.0.0",
109
+ "releaseMajorRange": ">=4 <5",
110
+ "independentRelease": false,
111
+ "private": false,
112
+ "packageAccess": "public",
113
+ "peerDependencies": {},
114
+ "upstream": {}
115
+ },
116
+ {
117
+ "name": "@cratis/components.conformance",
118
+ "role": "conformance",
119
+ "version": "4.0.0",
120
+ "releaseMajorRange": ">=4 <5",
121
+ "independentRelease": false,
122
+ "private": false,
123
+ "packageAccess": "public",
124
+ "peerDependencies": {
125
+ "@cratis/components": ">=4 <5",
126
+ "react": "^19.0.0",
127
+ "react-dom": "^19.0.0"
128
+ },
129
+ "upstream": {},
130
+ "rendererAbi": 1
131
+ },
132
+ {
133
+ "name": "@cratis/components.mui",
134
+ "role": "renderer-adapter",
135
+ "version": "4.0.0",
136
+ "releaseMajorRange": ">=4 <5",
137
+ "independentRelease": false,
138
+ "private": false,
139
+ "packageAccess": "public",
140
+ "peerDependencies": {
141
+ "@cratis/components": ">=4 <5",
142
+ "@emotion/react": ">=11.5 <12",
143
+ "@emotion/styled": ">=11.11 <12",
144
+ "@mui/material": ">=9 <10",
145
+ "react": "^19.0.0",
146
+ "react-dom": "^19.0.0"
147
+ },
148
+ "upstream": {
149
+ "@emotion/react": ">=11.5 <12",
150
+ "@emotion/styled": ">=11.11 <12",
151
+ "@mui/material": ">=9 <10",
152
+ "react": "^19.0.0",
153
+ "react-dom": "^19.0.0"
154
+ },
155
+ "rendererAbi": 1,
156
+ "rendererProfile": "stable-presentation/v1",
157
+ "verifiedPeers": {
158
+ "minimum": {
159
+ "@cratis/arc": "22.6.2",
160
+ "@cratis/arc.react": "22.6.2",
161
+ "@cratis/fundamentals": "7.18.1",
162
+ "@emotion/react": "11.5.0",
163
+ "@emotion/styled": "11.11.0",
164
+ "@mui/material": "9.0.0",
165
+ "@types/react": "19.0.0",
166
+ "react": "19.0.0",
167
+ "react-dom": "19.0.0",
168
+ "reflect-metadata": "0.2.2",
169
+ "rxjs": "7.8.2",
170
+ "tsyringe": "4.10.0"
171
+ },
172
+ "current": {
173
+ "@cratis/arc": "22.6.2",
174
+ "@cratis/arc.react": "22.6.2",
175
+ "@cratis/fundamentals": "7.18.1",
176
+ "@emotion/react": "11.14.0",
177
+ "@emotion/styled": "11.14.1",
178
+ "@mui/material": "9.4.0",
179
+ "@types/react": "19.2.18",
180
+ "react": "19.2.8",
181
+ "react-dom": "19.2.8",
182
+ "reflect-metadata": "0.2.2",
183
+ "rxjs": "7.8.2",
184
+ "tsyringe": "4.10.0"
185
+ }
186
+ }
187
+ },
188
+ {
189
+ "name": "@cratis/components.primereact",
190
+ "role": "renderer-adapter",
191
+ "version": "4.0.0",
192
+ "releaseMajorRange": ">=4 <5",
193
+ "independentRelease": false,
194
+ "private": false,
195
+ "packageAccess": "public",
196
+ "peerDependencies": {
197
+ "@cratis/components": ">=4 <5",
198
+ "@primereact/core": ">=11 <12",
199
+ "@primereact/ui": ">=11 <12",
200
+ "@primeuix/themes": ">=3 <4",
201
+ "primereact": ">=11 <12",
202
+ "react": "^19.0.0",
203
+ "react-dom": "^19.0.0"
204
+ },
205
+ "upstream": {
206
+ "@primereact/core": ">=11 <12",
207
+ "@primereact/ui": ">=11 <12",
208
+ "@primeuix/themes": ">=3 <4",
209
+ "primereact": ">=11 <12",
210
+ "react": "^19.0.0",
211
+ "react-dom": "^19.0.0"
212
+ },
213
+ "rendererAbi": 1,
214
+ "rendererProfile": "stable-presentation/v1",
215
+ "verifiedPeers": {
216
+ "minimum": {
217
+ "@cratis/arc": "22.6.2",
218
+ "@cratis/arc.react": "22.6.2",
219
+ "@cratis/fundamentals": "7.18.1",
220
+ "@primereact/core": "11.0.0",
221
+ "@primereact/headless": "11.0.0",
222
+ "@primereact/styles": "11.0.0",
223
+ "@primereact/ui": "11.0.0",
224
+ "@primeuix/motion": "1.0.0",
225
+ "@primeuix/themes": "3.0.0",
226
+ "@primeuix/utils": "0.8.0",
227
+ "@types/react": "19.0.0",
228
+ "primereact": "11.0.0",
229
+ "react": "19.0.0",
230
+ "react-dom": "19.0.0",
231
+ "reflect-metadata": "0.2.2",
232
+ "rxjs": "7.8.2",
233
+ "tsyringe": "4.10.0"
234
+ },
235
+ "current": {
236
+ "@cratis/arc": "22.6.2",
237
+ "@cratis/arc.react": "22.6.2",
238
+ "@cratis/fundamentals": "7.18.1",
239
+ "@primereact/core": "11.1.0",
240
+ "@primereact/headless": "11.1.0",
241
+ "@primereact/styles": "11.1.0",
242
+ "@primereact/ui": "11.1.0",
243
+ "@primeuix/motion": "1.0.0",
244
+ "@primeuix/themes": "3.0.0",
245
+ "@primeuix/utils": "0.8.1",
246
+ "@types/react": "19.2.18",
247
+ "primereact": "11.1.0",
248
+ "react": "19.2.8",
249
+ "react-dom": "19.2.8",
250
+ "reflect-metadata": "0.2.2",
251
+ "rxjs": "7.8.2",
252
+ "tsyringe": "4.10.0"
253
+ }
254
+ }
255
+ },
256
+ {
257
+ "name": "@cratis/components.primereact10",
258
+ "role": "renderer-adapter",
259
+ "version": "4.0.0",
260
+ "releaseMajorRange": ">=4 <5",
261
+ "independentRelease": false,
262
+ "private": false,
263
+ "packageAccess": "public",
264
+ "peerDependencies": {
265
+ "@cratis/components": ">=4 <5",
266
+ "primereact": ">=10.9.9 <11",
267
+ "react": "^19.0.0",
268
+ "react-dom": "^19.0.0"
269
+ },
270
+ "upstream": {
271
+ "primereact": ">=10.9.9 <11",
272
+ "react": "^19.0.0",
273
+ "react-dom": "^19.0.0"
274
+ },
275
+ "rendererAbi": 1,
276
+ "rendererProfile": "stable-presentation/v1",
277
+ "verifiedPeers": {
278
+ "minimum": {
279
+ "@cratis/arc": "22.6.2",
280
+ "@cratis/arc.react": "22.6.2",
281
+ "@cratis/fundamentals": "7.18.1",
282
+ "@types/react": "19.0.0",
283
+ "primereact": "10.9.9",
284
+ "react": "19.0.0",
285
+ "react-dom": "19.0.0",
286
+ "reflect-metadata": "0.2.2",
287
+ "rxjs": "7.8.2",
288
+ "tsyringe": "4.10.0"
289
+ },
290
+ "current": {
291
+ "@cratis/arc": "22.6.2",
292
+ "@cratis/arc.react": "22.6.2",
293
+ "@cratis/fundamentals": "7.18.1",
294
+ "@types/react": "19.2.18",
295
+ "primereact": "10.9.9",
296
+ "react": "19.2.8",
297
+ "react-dom": "19.2.8",
298
+ "reflect-metadata": "0.2.2",
299
+ "rxjs": "7.8.2",
300
+ "tsyringe": "4.10.0"
301
+ }
302
+ }
303
+ }
304
+ ]
305
+ }