@praxisui/crud 10.0.0-rc.13 → 10.0.0-rc.15

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 CHANGED
@@ -344,6 +344,33 @@ The host does not need to call `HttpClient`, rebuild create schema URLs, or own
344
344
  a second launcher. Absence of the HATEOAS link keeps the operation unavailable;
345
345
  the runtime does not infer permission from labels, tags, or frontend flags.
346
346
 
347
+ ## Governed Two-Phase Bulk Operations
348
+
349
+ `PraxisCrudComponent` discovers governed two-phase bulk operations published by
350
+ `praxis-metadata-starter` on collection capabilities (`actions[].execution.bulk`
351
+ for `DOMAIN_COMMAND` and `operations['bulk-update'].bulk` for `UNIFORM_UPDATE`)
352
+ and materializes them in the contextual bulk selection toolbar:
353
+
354
+ 1. **Pre-evaluation gates**: validates `limits.maxTargets` before evaluation and
355
+ resolves `expectedVersion` (`ETag`) via `_links.self` only when
356
+ `preconditions.resourceVersion === 'REQUIRED'`.
357
+ 2. **Phase 1 — Immutable Proposal (`PraxisBulkOperationDialogComponent` / `PraxisBulkEditDialogComponent`)**:
358
+ hydrates command parameters (unwrapping `/properties/parameters` and OpenAPI
359
+ `$ref` definitions with a resource-and-action-scoped `formId`) or
360
+ `@BulkEditable` fields (`SET` / `CLEAR`), submits the evaluation request, and
361
+ renders target eligibility totals (`executable`, `blocked`) and per-item
362
+ diagnostics.
363
+ 3. **Phase 2 — Transactional Confirmation & Reconciliation**: confirms the
364
+ approved `proposalId` with an `Idempotency-Key`, polls asynchronous
365
+ executions until terminal state (`COMPLETED`, `COMPLETED_WITH_ERRORS`,
366
+ `CANCELLED`, `STOPPED`, `RECONCILIATION_REQUIRED`), aggregates all rejection
367
+ categories (`denied`, `invalid`, `conflict`, `notProcessed`, `unknown`),
368
+ clears table selection, refreshes the collection, and re-fetches capabilities
369
+ when `refresh.capabilities === true`.
370
+
371
+ Unavailable bulk operations (`availability.allowed === false`) remain visible
372
+ but disabled in the bulk toolbar with their canonical translated reason tooltip.
373
+
347
374
  ## Visual Authoring
348
375
 
349
376
  The package publishes the CRUD-specific authoring surface:
@@ -377,6 +404,7 @@ The manifest owns CRUD orchestration only. It delegates table, form, field, and
377
404
  Main exports:
378
405
 
379
406
  - `PraxisCrudComponent`
407
+ - `PraxisBulkOperationDialogComponent`, `PraxisBulkEditDialogComponent`
380
408
  - `CrudLauncherService`
381
409
  - `DynamicFormDialogHostComponent`
382
410
  - `CrudMetadata`, `CrudActionFormContract`, `CrudDefaults`, `CrudParamMapping`
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-10-14T09:51:43.880Z",
3
+ "generatedAt": "2026-10-14T16:04:24.084Z",
4
4
  "packageName": "@praxisui/crud",
5
- "packageVersion": "10.0.0-rc.13",
5
+ "packageVersion": "10.0.0-rc.15",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 2,