@praxisui/crud 8.0.0-beta.11 → 8.0.0-beta.13
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 +33 -0
- package/fesm2022/praxisui-crud.mjs +392 -2
- package/index.d.ts +4 -2
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -353,6 +353,39 @@ Direcao de plataforma:
|
|
|
353
353
|
- a semantica canonica continua cobrindo metadata, tabela interna, formulario, actions, open modes e persistencia/reabertura
|
|
354
354
|
- hosts consumidores devem permanecer como demonstradores do contrato, nao como donos de um editor paralelo
|
|
355
355
|
|
|
356
|
+
## Agentic Authoring Contract
|
|
357
|
+
|
|
358
|
+
`PRAXIS_CRUD_AUTHORING_MANIFEST` is the executable AI authoring contract for `@praxisui/crud`.
|
|
359
|
+
|
|
360
|
+
The manifest owns CRUD orchestration only:
|
|
361
|
+
|
|
362
|
+
- `resource.path`, `resourceKey`, `idField`, endpoint key and query context binding
|
|
363
|
+
- list surface orchestration and stable `crudContext`
|
|
364
|
+
- create/edit/view action open mode, route, form binding, params, `initialValue` and back policy
|
|
365
|
+
- delete enablement, confirmation, canonical submit contract and capability policy
|
|
366
|
+
- dialog/drawer/route defaults consumed by `CrudLauncherService`
|
|
367
|
+
- permissions derived from resource capabilities
|
|
368
|
+
|
|
369
|
+
The manifest does not own child component semantics:
|
|
370
|
+
|
|
371
|
+
- `TableConfig` edits must delegate to `praxis-table`
|
|
372
|
+
- `FormConfig` and `FieldMetadata` edits must delegate to `praxis-dynamic-form` or `praxis-metadata-editor`
|
|
373
|
+
- dialog shell changes outside CRUD defaults must delegate to `praxis-dialog` or `praxis-settings-panel`
|
|
374
|
+
|
|
375
|
+
Governed operation families:
|
|
376
|
+
|
|
377
|
+
- `resource.bind`
|
|
378
|
+
- `list.surface.configure`
|
|
379
|
+
- `surface.create.configure`
|
|
380
|
+
- `surface.edit.configure`
|
|
381
|
+
- `surface.view.configure`
|
|
382
|
+
- `delete.enabled.set`
|
|
383
|
+
- `dialog.size.set`
|
|
384
|
+
- `permissions.set`
|
|
385
|
+
- `form.childOperation.delegate`
|
|
386
|
+
|
|
387
|
+
Stable identities are resource path/key, `crudId`, action id and child operation id. Array indexes are not canonical identities. Destructive delete behavior requires explicit confirmation and backend capability support.
|
|
388
|
+
|
|
356
389
|
To build the library, run:
|
|
357
390
|
|
|
358
391
|
```bash
|
|
@@ -4439,7 +4439,7 @@ class PraxisCrudComponent {
|
|
|
4439
4439
|
/>
|
|
4440
4440
|
}
|
|
4441
4441
|
}
|
|
4442
|
-
`, isInline: true, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}\n"], dependencies: [{ kind: "component", type: PraxisTable, selector: "praxis-table", inputs: ["config", "resourcePath", "data", "tableId", "componentInstanceId", "title", "subtitle", "icon", "autoDelete", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "crudContext", "filterCriteria", "queryContext", "enableCustomization", "dense"], outputs: ["rowClick", "rowDoubleClick", "rowExpansionChange", "rowAction", "toolbarAction", "bulkAction", "columnReorder", "columnReorderAttempt", "beforeDelete", "afterDelete", "deleteError", "beforeBulkDelete", "afterBulkDelete", "bulkDeleteError", "schemaStatusChange", "metadataChange", "loadingStateChange", "collectionLinksChange", "selectionChange"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone"] }] });
|
|
4442
|
+
`, isInline: true, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}\n"], dependencies: [{ kind: "component", type: PraxisTable, selector: "praxis-table", inputs: ["config", "resourcePath", "data", "tableId", "componentInstanceId", "title", "subtitle", "icon", "autoDelete", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "crudContext", "filterCriteria", "queryContext", "enableCustomization", "dense"], outputs: ["rowClick", "rowDoubleClick", "rowExpansionChange", "rowAction", "toolbarAction", "bulkAction", "exportAction", "columnReorder", "columnReorderAttempt", "beforeDelete", "afterDelete", "deleteError", "beforeBulkDelete", "afterBulkDelete", "bulkDeleteError", "schemaStatusChange", "metadataChange", "loadingStateChange", "collectionLinksChange", "selectionChange"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone"] }] });
|
|
4443
4443
|
}
|
|
4444
4444
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisCrudComponent, decorators: [{
|
|
4445
4445
|
type: Component,
|
|
@@ -5346,6 +5346,396 @@ const CRUD_AI_CAPABILITIES = {
|
|
|
5346
5346
|
],
|
|
5347
5347
|
};
|
|
5348
5348
|
|
|
5349
|
+
const resourceBindSchema = {
|
|
5350
|
+
type: 'object',
|
|
5351
|
+
required: ['resourcePath'],
|
|
5352
|
+
properties: {
|
|
5353
|
+
resourcePath: { type: 'string' },
|
|
5354
|
+
resourceKey: { type: 'string' },
|
|
5355
|
+
idField: { type: ['string', 'number'] },
|
|
5356
|
+
endpointKey: { type: 'string' },
|
|
5357
|
+
queryContext: { type: 'object' },
|
|
5358
|
+
},
|
|
5359
|
+
};
|
|
5360
|
+
const surfaceConfigureSchema = {
|
|
5361
|
+
type: 'object',
|
|
5362
|
+
required: ['actionId', 'openMode'],
|
|
5363
|
+
properties: {
|
|
5364
|
+
actionId: { enum: ['create', 'edit', 'view'] },
|
|
5365
|
+
openMode: { enum: ['route', 'modal', 'drawer'] },
|
|
5366
|
+
route: { type: 'string' },
|
|
5367
|
+
formId: { type: 'string' },
|
|
5368
|
+
form: {
|
|
5369
|
+
type: 'object',
|
|
5370
|
+
properties: {
|
|
5371
|
+
schemaUrl: { type: 'string' },
|
|
5372
|
+
submitUrl: { type: 'string' },
|
|
5373
|
+
submitMethod: { enum: ['post', 'put', 'patch', 'delete'] },
|
|
5374
|
+
apiEndpointKey: { type: 'string' },
|
|
5375
|
+
initialValue: { type: 'object' },
|
|
5376
|
+
},
|
|
5377
|
+
},
|
|
5378
|
+
params: {
|
|
5379
|
+
type: 'array',
|
|
5380
|
+
items: {
|
|
5381
|
+
type: 'object',
|
|
5382
|
+
required: ['from', 'to', 'name'],
|
|
5383
|
+
properties: {
|
|
5384
|
+
from: { type: 'string' },
|
|
5385
|
+
to: { enum: ['routeParam', 'query', 'input'] },
|
|
5386
|
+
name: { type: 'string' },
|
|
5387
|
+
},
|
|
5388
|
+
},
|
|
5389
|
+
},
|
|
5390
|
+
back: { type: 'object' },
|
|
5391
|
+
},
|
|
5392
|
+
};
|
|
5393
|
+
const listSurfaceSchema = {
|
|
5394
|
+
type: 'object',
|
|
5395
|
+
properties: {
|
|
5396
|
+
tablePatch: { type: 'object' },
|
|
5397
|
+
queryContext: { type: 'object' },
|
|
5398
|
+
filterCriteria: { type: 'object' },
|
|
5399
|
+
},
|
|
5400
|
+
};
|
|
5401
|
+
const deleteBehaviorSchema = {
|
|
5402
|
+
type: 'object',
|
|
5403
|
+
required: ['enabled'],
|
|
5404
|
+
properties: {
|
|
5405
|
+
enabled: { type: 'boolean' },
|
|
5406
|
+
actionId: { type: 'string' },
|
|
5407
|
+
requiresConfirmation: { type: 'boolean' },
|
|
5408
|
+
autoDelete: { type: 'boolean' },
|
|
5409
|
+
form: {
|
|
5410
|
+
type: 'object',
|
|
5411
|
+
properties: {
|
|
5412
|
+
submitUrl: { type: 'string' },
|
|
5413
|
+
submitMethod: { enum: ['delete'] },
|
|
5414
|
+
apiEndpointKey: { type: 'string' },
|
|
5415
|
+
},
|
|
5416
|
+
},
|
|
5417
|
+
},
|
|
5418
|
+
};
|
|
5419
|
+
const dialogHostSchema = {
|
|
5420
|
+
type: 'object',
|
|
5421
|
+
properties: {
|
|
5422
|
+
defaultOpenMode: { enum: ['route', 'modal', 'drawer'] },
|
|
5423
|
+
modal: {
|
|
5424
|
+
type: 'object',
|
|
5425
|
+
properties: {
|
|
5426
|
+
width: { type: 'string' },
|
|
5427
|
+
height: { type: 'string' },
|
|
5428
|
+
minWidth: { type: 'string' },
|
|
5429
|
+
maxWidth: { type: 'string' },
|
|
5430
|
+
density: { type: 'string' },
|
|
5431
|
+
canMaximize: { type: 'boolean' },
|
|
5432
|
+
rememberLastState: { type: 'boolean' },
|
|
5433
|
+
startMaximized: { type: 'boolean' },
|
|
5434
|
+
disableCloseOnEsc: { type: 'boolean' },
|
|
5435
|
+
disableCloseOnBackdrop: { type: 'boolean' },
|
|
5436
|
+
fullscreenBreakpoint: { type: 'string' },
|
|
5437
|
+
},
|
|
5438
|
+
},
|
|
5439
|
+
back: { type: 'object' },
|
|
5440
|
+
},
|
|
5441
|
+
};
|
|
5442
|
+
const permissionsSchema = {
|
|
5443
|
+
type: 'object',
|
|
5444
|
+
properties: {
|
|
5445
|
+
requiredCapabilities: {
|
|
5446
|
+
type: 'array',
|
|
5447
|
+
items: { enum: ['create', 'view', 'edit', 'delete'] },
|
|
5448
|
+
},
|
|
5449
|
+
actionPermissions: { type: 'object' },
|
|
5450
|
+
denyWhenMissingCapability: { type: 'boolean' },
|
|
5451
|
+
},
|
|
5452
|
+
};
|
|
5453
|
+
const childDelegateSchema = {
|
|
5454
|
+
type: 'object',
|
|
5455
|
+
required: ['childComponentId', 'childOperationId', 'reason'],
|
|
5456
|
+
properties: {
|
|
5457
|
+
childComponentId: { enum: ['praxis-dynamic-form', 'praxis-table', 'praxis-dialog', 'praxis-settings-panel'] },
|
|
5458
|
+
childOperationId: { type: 'string' },
|
|
5459
|
+
reason: { type: 'string' },
|
|
5460
|
+
childTarget: { type: 'object' },
|
|
5461
|
+
childParams: { type: 'object' },
|
|
5462
|
+
},
|
|
5463
|
+
};
|
|
5464
|
+
const PRAXIS_CRUD_AUTHORING_MANIFEST = {
|
|
5465
|
+
schemaVersion: '1.0.0',
|
|
5466
|
+
componentId: 'praxis-crud',
|
|
5467
|
+
ownerPackage: '@praxisui/crud',
|
|
5468
|
+
configSchemaId: 'CrudMetadata',
|
|
5469
|
+
manifestVersion: '1.0.0',
|
|
5470
|
+
runtimeInputs: [
|
|
5471
|
+
{ name: 'metadata', type: 'CrudMetadata | string', description: 'Canonical CRUD metadata or serialized metadata document.' },
|
|
5472
|
+
{ name: 'crudId', type: 'string', description: 'Stable CRUD instance id used for table/form identity and persistence.' },
|
|
5473
|
+
{ name: 'componentInstanceId', type: 'string', description: 'Optional stable host instance id for multiple CRUD widgets on the same route.' },
|
|
5474
|
+
{ name: 'context', type: 'Record<string, unknown>', description: 'Opaque host context used for authoring seeds and launcher inputs.' },
|
|
5475
|
+
{ name: 'afterOpen', type: '{ mode: FormOpenMode; action: string }', description: 'Emitted after a CRUD action opens.' },
|
|
5476
|
+
{ name: 'afterSave', type: '{ id: string | number; data: unknown }', description: 'Emitted after save; CRUD refetches the list.' },
|
|
5477
|
+
{ name: 'afterDelete', type: '{ id: string | number }', description: 'Emitted after delete; CRUD refetches the list.' },
|
|
5478
|
+
],
|
|
5479
|
+
editableTargets: [
|
|
5480
|
+
{ kind: 'resourceBinding', resolver: 'crud-resource-by-path-or-key', description: 'Resource path/key, id field, endpoint key and query context owned by CRUD orchestration.' },
|
|
5481
|
+
{ kind: 'listSurface', resolver: 'crud-list-surface', description: 'CRUD-hosted list surface and table delegation boundary.' },
|
|
5482
|
+
{ kind: 'createSurface', resolver: 'crud-action-by-id:create', description: 'Create action open mode, route/form binding and launcher inputs.' },
|
|
5483
|
+
{ kind: 'editSurface', resolver: 'crud-action-by-id:edit', description: 'Edit action open mode, route/form binding and launcher inputs.' },
|
|
5484
|
+
{ kind: 'viewSurface', resolver: 'crud-action-by-id:view', description: 'View action open mode, route/form binding and launcher inputs.' },
|
|
5485
|
+
{ kind: 'deleteBehavior', resolver: 'crud-action-by-id:delete', description: 'Delete action enablement, confirmation, endpoint and capability policy.' },
|
|
5486
|
+
{ kind: 'dialogHost', resolver: 'crud-dialog-host-defaults', description: 'Route/modal/drawer defaults consumed by CrudLauncherService and DynamicFormDialogHostComponent.' },
|
|
5487
|
+
{ kind: 'formBinding', resolver: 'crud-action-form-contract-by-action-id', description: 'CRUD-owned form binding fields: formId, schemaUrl, submitUrl, submitMethod, params and initialValue.' },
|
|
5488
|
+
{ kind: 'permissions', resolver: 'crud-resource-capabilities', description: 'CRUD action availability derived from resource capabilities and action permissions.' },
|
|
5489
|
+
{ kind: 'childOperation', resolver: 'child-authoring-manifest-operation', description: 'Delegated form/table/dialog/settings-panel operation owned by the child component manifest.' },
|
|
5490
|
+
],
|
|
5491
|
+
operations: [
|
|
5492
|
+
{
|
|
5493
|
+
operationId: 'resource.bind',
|
|
5494
|
+
title: 'Bind CRUD resource',
|
|
5495
|
+
scope: 'dataBinding',
|
|
5496
|
+
targetKind: 'resourceBinding',
|
|
5497
|
+
target: { kind: 'resourceBinding', resolver: 'crud-resource-by-path-or-key', ambiguityPolicy: 'fail', required: true },
|
|
5498
|
+
inputSchema: resourceBindSchema,
|
|
5499
|
+
effects: [{ kind: 'compile-domain-patch', handler: 'crud-resource-bind', handlerContract: {
|
|
5500
|
+
reads: ['CrudMetadata.resource', 'api_metadata', 'ResourceDiscoveryService', 'GET /{resource}/capabilities'],
|
|
5501
|
+
writes: ['CrudMetadata.resource', 'CrudMetadata.queryContext', 'PraxisCrudComponent.tableCrudContext'],
|
|
5502
|
+
identityKeys: ['resourcePath', 'resourceKey'],
|
|
5503
|
+
inputSchema: resourceBindSchema,
|
|
5504
|
+
failureModes: ['resource-not-found', 'schema-url-not-canonical', 'capabilities-unavailable', 'id-field-missing'],
|
|
5505
|
+
description: 'Binds CRUD to a canonical resource and validates it against api_metadata/resource capabilities before runtime use.',
|
|
5506
|
+
} }],
|
|
5507
|
+
validators: ['resource-exists-in-api-metadata', 'resource-path-canonical', 'resource-key-stable', 'id-field-known', 'resource-capabilities-resolvable'],
|
|
5508
|
+
affectedPaths: ['resource.path', 'resource.idField', 'resource.endpointKey', 'queryContext', 'filterCriteria'],
|
|
5509
|
+
submissionImpact: 'affects-remote-binding',
|
|
5510
|
+
preconditions: ['crud-metadata-loaded', 'api-metadata-available'],
|
|
5511
|
+
},
|
|
5512
|
+
{
|
|
5513
|
+
operationId: 'list.surface.configure',
|
|
5514
|
+
title: 'Configure CRUD list surface',
|
|
5515
|
+
scope: 'interaction',
|
|
5516
|
+
targetKind: 'listSurface',
|
|
5517
|
+
target: { kind: 'listSurface', resolver: 'crud-list-surface', ambiguityPolicy: 'fail', required: true },
|
|
5518
|
+
inputSchema: listSurfaceSchema,
|
|
5519
|
+
effects: [{ kind: 'compile-domain-patch', handler: 'crud-list-surface-configure', handlerContract: {
|
|
5520
|
+
reads: ['CrudMetadata.table', 'CrudMetadata.queryContext', 'PRAXIS_TABLE_AUTHORING_MANIFEST', 'CRUD_AI_CAPABILITIES'],
|
|
5521
|
+
writes: ['CrudMetadata.table', 'CrudMetadata.queryContext', 'CrudMetadata.filterCriteria'],
|
|
5522
|
+
identityKeys: ['crudId'],
|
|
5523
|
+
inputSchema: listSurfaceSchema,
|
|
5524
|
+
failureModes: ['table-operation-not-delegated', 'table-patch-not-supported', 'query-context-invalid'],
|
|
5525
|
+
description: 'Configures CRUD-owned list orchestration while routing table semantics to the praxis-table manifest.',
|
|
5526
|
+
} }],
|
|
5527
|
+
validators: ['table-child-operation-delegated', 'query-context-valid', 'filter-criteria-bridge-valid', 'crud-context-stable'],
|
|
5528
|
+
affectedPaths: ['table', 'queryContext', 'filterCriteria'],
|
|
5529
|
+
submissionImpact: 'config-only',
|
|
5530
|
+
preconditions: ['crud-metadata-loaded', 'praxis-table-manifest-available'],
|
|
5531
|
+
},
|
|
5532
|
+
{
|
|
5533
|
+
operationId: 'surface.create.configure',
|
|
5534
|
+
title: 'Configure create surface',
|
|
5535
|
+
scope: 'interaction',
|
|
5536
|
+
targetKind: 'createSurface',
|
|
5537
|
+
target: { kind: 'createSurface', resolver: 'crud-action-by-id:create', ambiguityPolicy: 'fail', required: true },
|
|
5538
|
+
inputSchema: surfaceConfigureSchema,
|
|
5539
|
+
effects: [{ kind: 'compile-domain-patch', handler: 'crud-create-surface-configure', handlerContract: {
|
|
5540
|
+
reads: ['CrudMetadata.actions', 'CrudLauncherService.resolveOpenMode', 'DynamicFormDialogHostComponent', 'api_metadata'],
|
|
5541
|
+
writes: ['CrudMetadata.actions[]', 'CrudMetadata.actions[].form', 'CrudMetadata.actions[].params', 'CrudMetadata.actions[].back'],
|
|
5542
|
+
identityKeys: ['actionId'],
|
|
5543
|
+
inputSchema: surfaceConfigureSchema,
|
|
5544
|
+
failureModes: ['action-not-found', 'open-mode-binding-incomplete', 'schema-url-not-canonical', 'submit-url-not-canonical', 'resource-create-not-supported'],
|
|
5545
|
+
description: 'Configures create action binding and launcher inputs without editing the child FormConfig.',
|
|
5546
|
+
} }],
|
|
5547
|
+
validators: ['action-exists', 'open-mode-binding-complete', 'schema-url-canonical', 'submit-url-canonical', 'resource-create-supported', 'form-child-operation-delegated'],
|
|
5548
|
+
affectedPaths: ['actions[].openMode', 'actions[].route', 'actions[].formId', 'actions[].form', 'actions[].params', 'actions[].back'],
|
|
5549
|
+
submissionImpact: 'affects-schema-backed-data',
|
|
5550
|
+
preconditions: ['crud-metadata-loaded', 'resource-capabilities-resolved'],
|
|
5551
|
+
},
|
|
5552
|
+
{
|
|
5553
|
+
operationId: 'surface.edit.configure',
|
|
5554
|
+
title: 'Configure edit surface',
|
|
5555
|
+
scope: 'interaction',
|
|
5556
|
+
targetKind: 'editSurface',
|
|
5557
|
+
target: { kind: 'editSurface', resolver: 'crud-action-by-id:edit', ambiguityPolicy: 'fail', required: true },
|
|
5558
|
+
inputSchema: surfaceConfigureSchema,
|
|
5559
|
+
effects: [{ kind: 'compile-domain-patch', handler: 'crud-edit-surface-configure', handlerContract: {
|
|
5560
|
+
reads: ['CrudMetadata.actions', 'CrudMetadata.resource.idField', 'CrudLauncherService.resolveOpenMode', 'api_metadata'],
|
|
5561
|
+
writes: ['CrudMetadata.actions[]', 'CrudMetadata.actions[].form', 'CrudMetadata.actions[].params', 'CrudMetadata.actions[].back'],
|
|
5562
|
+
identityKeys: ['actionId'],
|
|
5563
|
+
inputSchema: surfaceConfigureSchema,
|
|
5564
|
+
failureModes: ['action-not-found', 'id-param-missing', 'open-mode-binding-incomplete', 'resource-edit-not-supported', 'submit-url-not-canonical'],
|
|
5565
|
+
description: 'Configures edit action routing/form binding and ensures id parameter mapping is available to the launcher.',
|
|
5566
|
+
} }],
|
|
5567
|
+
validators: ['action-exists', 'id-field-known', 'id-param-mapping-valid', 'open-mode-binding-complete', 'schema-url-canonical', 'submit-url-canonical', 'resource-edit-supported', 'form-child-operation-delegated'],
|
|
5568
|
+
affectedPaths: ['actions[].openMode', 'actions[].route', 'actions[].formId', 'actions[].form', 'actions[].params', 'actions[].back'],
|
|
5569
|
+
submissionImpact: 'affects-schema-backed-data',
|
|
5570
|
+
preconditions: ['crud-metadata-loaded', 'resource-capabilities-resolved'],
|
|
5571
|
+
},
|
|
5572
|
+
{
|
|
5573
|
+
operationId: 'surface.view.configure',
|
|
5574
|
+
title: 'Configure view surface',
|
|
5575
|
+
scope: 'interaction',
|
|
5576
|
+
targetKind: 'viewSurface',
|
|
5577
|
+
target: { kind: 'viewSurface', resolver: 'crud-action-by-id:view', ambiguityPolicy: 'fail', required: true },
|
|
5578
|
+
inputSchema: surfaceConfigureSchema,
|
|
5579
|
+
effects: [{ kind: 'compile-domain-patch', handler: 'crud-view-surface-configure', handlerContract: {
|
|
5580
|
+
reads: ['CrudMetadata.actions', 'CrudLauncherService.resolveOpenMode', 'DynamicFormDialogHostComponent', 'api_metadata'],
|
|
5581
|
+
writes: ['CrudMetadata.actions[]', 'CrudMetadata.actions[].form', 'CrudMetadata.actions[].params', 'CrudMetadata.actions[].back'],
|
|
5582
|
+
identityKeys: ['actionId'],
|
|
5583
|
+
inputSchema: surfaceConfigureSchema,
|
|
5584
|
+
failureModes: ['action-not-found', 'open-mode-binding-incomplete', 'resource-view-not-supported', 'readonly-form-delegation-missing'],
|
|
5585
|
+
description: 'Configures view action binding and delegates readonly form behavior to the dynamic-form manifest.',
|
|
5586
|
+
} }],
|
|
5587
|
+
validators: ['action-exists', 'open-mode-binding-complete', 'schema-url-canonical', 'resource-view-supported', 'form-child-operation-delegated', 'readonly-form-delegation-valid'],
|
|
5588
|
+
affectedPaths: ['actions[].openMode', 'actions[].route', 'actions[].formId', 'actions[].form', 'actions[].params', 'actions[].back'],
|
|
5589
|
+
submissionImpact: 'config-only',
|
|
5590
|
+
preconditions: ['crud-metadata-loaded', 'resource-capabilities-resolved'],
|
|
5591
|
+
},
|
|
5592
|
+
{
|
|
5593
|
+
operationId: 'delete.enabled.set',
|
|
5594
|
+
title: 'Configure delete behavior',
|
|
5595
|
+
scope: 'interaction',
|
|
5596
|
+
targetKind: 'deleteBehavior',
|
|
5597
|
+
target: { kind: 'deleteBehavior', resolver: 'crud-action-by-id:delete', ambiguityPolicy: 'fail', required: true },
|
|
5598
|
+
inputSchema: deleteBehaviorSchema,
|
|
5599
|
+
effects: [{ kind: 'compile-domain-patch', handler: 'crud-delete-behavior-set', handlerContract: {
|
|
5600
|
+
reads: ['CrudMetadata.actions', 'CrudMetadata.resource', 'GET /{resource}/{id}/capabilities'],
|
|
5601
|
+
writes: ['CrudMetadata.actions[]', 'CrudMetadata.actions[].requiresConfirmation', 'CrudMetadata.actions[].autoDelete', 'CrudMetadata.actions[].form'],
|
|
5602
|
+
identityKeys: ['actionId'],
|
|
5603
|
+
inputSchema: deleteBehaviorSchema,
|
|
5604
|
+
failureModes: ['delete-action-not-found', 'resource-delete-not-supported', 'destructive-delete-not-confirmed', 'delete-submit-url-not-canonical'],
|
|
5605
|
+
description: 'Enables or disables delete behavior with capability checks and explicit confirmation for destructive changes.',
|
|
5606
|
+
} }],
|
|
5607
|
+
destructive: true,
|
|
5608
|
+
requiresConfirmation: true,
|
|
5609
|
+
validators: ['delete-action-exists', 'resource-delete-supported', 'destructive-delete-confirmed', 'submit-url-canonical', 'permissions-delete-valid'],
|
|
5610
|
+
affectedPaths: ['actions[].disabled', 'actions[].requiresConfirmation', 'actions[].autoDelete', 'actions[].form', 'actions[].form.submitUrl', 'actions[].form.submitMethod', 'actions[].form.apiEndpointKey'],
|
|
5611
|
+
submissionImpact: 'affects-schema-backed-data',
|
|
5612
|
+
preconditions: ['crud-metadata-loaded', 'resource-capabilities-resolved', 'explicit-confirmation-provided'],
|
|
5613
|
+
},
|
|
5614
|
+
{
|
|
5615
|
+
operationId: 'dialog.size.set',
|
|
5616
|
+
title: 'Configure CRUD dialog host defaults',
|
|
5617
|
+
scope: 'interaction',
|
|
5618
|
+
targetKind: 'dialogHost',
|
|
5619
|
+
target: { kind: 'dialogHost', resolver: 'crud-dialog-host-defaults', ambiguityPolicy: 'fail', required: true },
|
|
5620
|
+
inputSchema: dialogHostSchema,
|
|
5621
|
+
effects: [{ kind: 'compile-domain-patch', handler: 'crud-dialog-host-set', handlerContract: {
|
|
5622
|
+
reads: ['CrudMetadata.defaults', 'CrudLauncherService.resolveOpenMode', 'DialogService', 'CRUD_DRAWER_ADAPTER'],
|
|
5623
|
+
writes: ['CrudMetadata.defaults.openMode', 'CrudMetadata.defaults.modal', 'CrudMetadata.defaults.back'],
|
|
5624
|
+
identityKeys: ['crudId'],
|
|
5625
|
+
inputSchema: dialogHostSchema,
|
|
5626
|
+
failureModes: ['open-mode-unsupported', 'drawer-adapter-missing', 'modal-size-invalid', 'back-policy-invalid'],
|
|
5627
|
+
description: 'Configures CRUD-owned route/modal/drawer defaults consumed by the launcher and dialog host.',
|
|
5628
|
+
} }],
|
|
5629
|
+
validators: ['open-mode-supported', 'modal-size-valid', 'drawer-adapter-available-when-needed', 'back-policy-valid', 'settings-panel-shell-compatible'],
|
|
5630
|
+
affectedPaths: ['defaults.openMode', 'defaults.modal', 'defaults.back'],
|
|
5631
|
+
submissionImpact: 'config-only',
|
|
5632
|
+
preconditions: ['crud-metadata-loaded'],
|
|
5633
|
+
},
|
|
5634
|
+
{
|
|
5635
|
+
operationId: 'permissions.set',
|
|
5636
|
+
title: 'Configure CRUD permissions',
|
|
5637
|
+
scope: 'interaction',
|
|
5638
|
+
targetKind: 'permissions',
|
|
5639
|
+
target: { kind: 'permissions', resolver: 'crud-resource-capabilities', ambiguityPolicy: 'fail', required: true },
|
|
5640
|
+
inputSchema: permissionsSchema,
|
|
5641
|
+
effects: [{ kind: 'compile-domain-patch', handler: 'crud-permissions-set', handlerContract: {
|
|
5642
|
+
reads: ['GET /{resource}/capabilities', 'GET /{resource}/{id}/capabilities', 'CrudMetadata.actions'],
|
|
5643
|
+
writes: ['CrudMetadata.actions[].disabled', 'CrudMetadata.actions[].visibleWhen', 'CrudMetadata.actions[].requiresConfirmation'],
|
|
5644
|
+
identityKeys: ['resourcePath'],
|
|
5645
|
+
inputSchema: permissionsSchema,
|
|
5646
|
+
failureModes: ['capability-not-found', 'action-permission-conflict', 'delete-permission-without-confirmation'],
|
|
5647
|
+
description: 'Aligns CRUD action visibility/disablement with resource capabilities without inventing a second permission source.',
|
|
5648
|
+
} }],
|
|
5649
|
+
validators: ['resource-capabilities-resolvable', 'action-permission-supported', 'delete-permission-requires-confirmation', 'permissions-do-not-shadow-backend'],
|
|
5650
|
+
affectedPaths: ['actions[].disabled', 'actions[].visibleWhen', 'actions[].requiresConfirmation'],
|
|
5651
|
+
submissionImpact: 'config-only',
|
|
5652
|
+
preconditions: ['crud-metadata-loaded', 'resource-capabilities-resolved'],
|
|
5653
|
+
},
|
|
5654
|
+
{
|
|
5655
|
+
operationId: 'form.childOperation.delegate',
|
|
5656
|
+
title: 'Delegate child form/table/dialog authoring operation',
|
|
5657
|
+
scope: 'global',
|
|
5658
|
+
targetKind: 'childOperation',
|
|
5659
|
+
target: { kind: 'childOperation', resolver: 'child-authoring-manifest-operation', ambiguityPolicy: 'fail', required: false },
|
|
5660
|
+
inputSchema: childDelegateSchema,
|
|
5661
|
+
effects: [{ kind: 'compile-domain-patch', handler: 'crud-child-operation-delegate', handlerContract: {
|
|
5662
|
+
reads: ['PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST', 'PRAXIS_TABLE_AUTHORING_MANIFEST', 'PRAXIS_DIALOG_AUTHORING_MANIFEST', 'PRAXIS_SETTINGS_PANEL_AUTHORING_MANIFEST'],
|
|
5663
|
+
writes: ['delegatedAuthoringOperations[]'],
|
|
5664
|
+
identityKeys: ['childComponentId', 'childOperationId'],
|
|
5665
|
+
inputSchema: childDelegateSchema,
|
|
5666
|
+
failureModes: ['child-manifest-missing', 'child-operation-not-found', 'attempted-local-child-config-write'],
|
|
5667
|
+
description: 'Records explicit delegation when requested edits belong to child manifests instead of CRUD orchestration.',
|
|
5668
|
+
} }],
|
|
5669
|
+
validators: ['child-manifest-available', 'child-operation-known', 'no-local-form-config-write', 'no-local-table-config-write', 'delegation-target-valid'],
|
|
5670
|
+
affectedPaths: ['delegatedAuthoringOperations'],
|
|
5671
|
+
submissionImpact: 'none',
|
|
5672
|
+
preconditions: ['child-manifest-available'],
|
|
5673
|
+
},
|
|
5674
|
+
],
|
|
5675
|
+
validators: [
|
|
5676
|
+
{ validatorId: 'resource-exists-in-api-metadata', level: 'error', code: 'CRUD_RESOURCE_EXISTS', description: 'Resource must exist in api_metadata or resource discovery.' },
|
|
5677
|
+
{ validatorId: 'resource-path-canonical', level: 'error', code: 'CRUD_RESOURCE_PATH_CANONICAL', description: 'Resource path must be canonical and not a local alias.' },
|
|
5678
|
+
{ validatorId: 'resource-key-stable', level: 'error', code: 'CRUD_RESOURCE_KEY_STABLE', description: 'Resource key must remain stable for surfaces/actions/capabilities.' },
|
|
5679
|
+
{ validatorId: 'id-field-known', level: 'error', code: 'CRUD_ID_FIELD_KNOWN', description: 'CRUD id field must exist for edit/view/delete flows.' },
|
|
5680
|
+
{ validatorId: 'resource-capabilities-resolvable', level: 'error', code: 'CRUD_CAPABILITIES_RESOLVABLE', description: 'Resource capabilities must be resolvable before action enablement is authored.' },
|
|
5681
|
+
{ validatorId: 'table-child-operation-delegated', level: 'error', code: 'CRUD_TABLE_CHILD_DELEGATED', description: 'Table semantics must be delegated to praxis-table.' },
|
|
5682
|
+
{ validatorId: 'query-context-valid', level: 'error', code: 'CRUD_QUERY_CONTEXT_VALID', description: 'Query context must be valid for the bound resource.' },
|
|
5683
|
+
{ validatorId: 'filter-criteria-bridge-valid', level: 'warning', code: 'CRUD_FILTER_CRITERIA_BRIDGE_VALID', description: 'filterCriteria is a bridge; prefer queryContext for new remote authoring.' },
|
|
5684
|
+
{ validatorId: 'crud-context-stable', level: 'error', code: 'CRUD_CONTEXT_STABLE', description: 'Authoring must not break stable crudContext references.' },
|
|
5685
|
+
{ validatorId: 'action-exists', level: 'error', code: 'CRUD_ACTION_EXISTS', description: 'Target action must exist or be created through CRUD action orchestration.' },
|
|
5686
|
+
{ validatorId: 'open-mode-binding-complete', level: 'error', code: 'CRUD_OPEN_MODE_BINDING_COMPLETE', description: 'route requires route; modal/drawer require formId unless resolved by governed overrides.' },
|
|
5687
|
+
{ validatorId: 'schema-url-canonical', level: 'error', code: 'CRUD_SCHEMA_URL_CANONICAL', description: 'Schema URLs must be canonical for the bound resource/action.' },
|
|
5688
|
+
{ validatorId: 'submit-url-canonical', level: 'error', code: 'CRUD_SUBMIT_URL_CANONICAL', description: 'Submit URL and method must be canonical and declared together.' },
|
|
5689
|
+
{ validatorId: 'resource-create-supported', level: 'error', code: 'CRUD_CREATE_SUPPORTED', description: 'Create surface requires resource create capability.' },
|
|
5690
|
+
{ validatorId: 'resource-edit-supported', level: 'error', code: 'CRUD_EDIT_SUPPORTED', description: 'Edit surface requires resource edit capability.' },
|
|
5691
|
+
{ validatorId: 'resource-view-supported', level: 'error', code: 'CRUD_VIEW_SUPPORTED', description: 'View surface requires resource view capability.' },
|
|
5692
|
+
{ validatorId: 'form-child-operation-delegated', level: 'error', code: 'CRUD_FORM_CHILD_DELEGATED', description: 'FormConfig and FieldMetadata edits must delegate to dynamic-form/metadata-editor manifests.' },
|
|
5693
|
+
{ validatorId: 'id-param-mapping-valid', level: 'error', code: 'CRUD_ID_PARAM_MAPPING_VALID', description: 'Edit/view actions must map resource id into route/query/input as required.' },
|
|
5694
|
+
{ validatorId: 'readonly-form-delegation-valid', level: 'error', code: 'CRUD_READONLY_FORM_DELEGATED', description: 'Readonly form behavior belongs to the dynamic-form manifest.' },
|
|
5695
|
+
{ validatorId: 'delete-action-exists', level: 'error', code: 'CRUD_DELETE_ACTION_EXISTS', description: 'Delete behavior requires a delete action target.' },
|
|
5696
|
+
{ validatorId: 'resource-delete-supported', level: 'error', code: 'CRUD_DELETE_SUPPORTED', description: 'Delete behavior requires resource delete capability.' },
|
|
5697
|
+
{ validatorId: 'destructive-delete-confirmed', level: 'error', code: 'CRUD_DELETE_CONFIRMED', description: 'Destructive delete behavior requires explicit confirmation.' },
|
|
5698
|
+
{ validatorId: 'permissions-delete-valid', level: 'error', code: 'CRUD_DELETE_PERMISSION_VALID', description: 'Delete permission cannot bypass resource capabilities or confirmation policy.' },
|
|
5699
|
+
{ validatorId: 'open-mode-supported', level: 'error', code: 'CRUD_OPEN_MODE_SUPPORTED', description: 'Open mode must be route, modal or drawer.' },
|
|
5700
|
+
{ validatorId: 'modal-size-valid', level: 'error', code: 'CRUD_MODAL_SIZE_VALID', description: 'Modal sizing defaults must be valid DialogConfig values.' },
|
|
5701
|
+
{ validatorId: 'drawer-adapter-available-when-needed', level: 'error', code: 'CRUD_DRAWER_ADAPTER_AVAILABLE', description: 'Drawer open mode requires a host-provided drawer adapter.' },
|
|
5702
|
+
{ validatorId: 'back-policy-valid', level: 'error', code: 'CRUD_BACK_POLICY_VALID', description: 'Back policy must be valid for route/modal/drawer behavior.' },
|
|
5703
|
+
{ validatorId: 'settings-panel-shell-compatible', level: 'warning', code: 'CRUD_SETTINGS_PANEL_COMPATIBLE', description: 'Authoring shell must preserve apply/save/reset semantics.' },
|
|
5704
|
+
{ validatorId: 'action-permission-supported', level: 'error', code: 'CRUD_ACTION_PERMISSION_SUPPORTED', description: 'Action permissions must map to supported resource capabilities.' },
|
|
5705
|
+
{ validatorId: 'delete-permission-requires-confirmation', level: 'error', code: 'CRUD_DELETE_PERMISSION_CONFIRMATION', description: 'Delete permission enablement requires confirmation policy.' },
|
|
5706
|
+
{ validatorId: 'permissions-do-not-shadow-backend', level: 'error', code: 'CRUD_PERMISSIONS_NO_BACKEND_SHADOW', description: 'UI permissions must not shadow backend capability denial.' },
|
|
5707
|
+
{ validatorId: 'child-manifest-available', level: 'error', code: 'CRUD_CHILD_MANIFEST_AVAILABLE', description: 'Delegated child manifest must be available.' },
|
|
5708
|
+
{ validatorId: 'child-operation-known', level: 'error', code: 'CRUD_CHILD_OPERATION_KNOWN', description: 'Delegated operation must exist in the child manifest.' },
|
|
5709
|
+
{ validatorId: 'no-local-form-config-write', level: 'error', code: 'CRUD_NO_LOCAL_FORM_CONFIG_WRITE', description: 'CRUD must not locally redefine FormConfig semantics.' },
|
|
5710
|
+
{ validatorId: 'no-local-table-config-write', level: 'error', code: 'CRUD_NO_LOCAL_TABLE_CONFIG_WRITE', description: 'CRUD must not locally redefine TableConfig semantics.' },
|
|
5711
|
+
{ validatorId: 'delegation-target-valid', level: 'error', code: 'CRUD_DELEGATION_TARGET_VALID', description: 'Delegation target must be resolvable by the child manifest.' },
|
|
5712
|
+
],
|
|
5713
|
+
roundTripRequirements: [
|
|
5714
|
+
'CrudMetadata is the canonical CRUD document shape.',
|
|
5715
|
+
'CrudAuthoringDocument wraps CrudMetadata without introducing host-local aliases.',
|
|
5716
|
+
'Resource path and resource key have separate semantics: path is operational, key is discovery/capability identity.',
|
|
5717
|
+
'Open mode round-trip must preserve route, formId, form contract, params, initialValue and back policy.',
|
|
5718
|
+
'FormConfig and FieldMetadata edits must delegate to dynamic-form or metadata-editor manifests.',
|
|
5719
|
+
'TableConfig edits must delegate to praxis-table; CRUD owns only shell orchestration and list surface binding.',
|
|
5720
|
+
'Delete behavior is destructive and requires explicit confirmation plus backend capability support.',
|
|
5721
|
+
'crudContext must remain reference-stable across change detection cycles.',
|
|
5722
|
+
],
|
|
5723
|
+
examples: [
|
|
5724
|
+
{ id: 'crud-bind-funcionarios-resource', request: 'Bind this CRUD to funcionarios using id as the identifier.', operationId: 'resource.bind', target: 'resource:funcionarios', params: { resourcePath: '/funcionarios', resourceKey: 'funcionarios', idField: 'id' }, isPositive: true },
|
|
5725
|
+
{ id: 'crud-list-query-context', request: 'Filter the list by active employees using the canonical query context.', operationId: 'list.surface.configure', target: 'listSurface', params: { queryContext: { filters: [{ field: 'active', operator: 'eq', value: true }] } }, isPositive: true },
|
|
5726
|
+
{ id: 'crud-create-modal', request: 'Open create in a modal with the employee form.', operationId: 'surface.create.configure', target: 'action:create', params: { actionId: 'create', openMode: 'modal', formId: 'employee-create' }, isPositive: true },
|
|
5727
|
+
{ id: 'crud-edit-route-with-id', request: 'Edit should navigate to /employees/:id and map the row id.', operationId: 'surface.edit.configure', target: 'action:edit', params: { actionId: 'edit', openMode: 'route', route: '/employees/:id/edit', params: [{ from: 'id', to: 'routeParam', name: 'id' }] }, isPositive: true },
|
|
5728
|
+
{ id: 'crud-view-drawer-readonly', request: 'Open view in a drawer and keep the form readonly.', operationId: 'surface.view.configure', target: 'action:view', params: { actionId: 'view', openMode: 'drawer', formId: 'employee-view' }, isPositive: true },
|
|
5729
|
+
{ id: 'crud-delete-enable-confirmed', request: 'Enable delete but require confirmation.', operationId: 'delete.enabled.set', target: 'action:delete', params: { enabled: true, actionId: 'delete', requiresConfirmation: true, autoDelete: true }, isPositive: true },
|
|
5730
|
+
{ id: 'crud-dialog-size-medium', request: 'Make CRUD modals 900px wide and remember their last state.', operationId: 'dialog.size.set', target: 'dialogHost', params: { defaultOpenMode: 'modal', modal: { width: '900px', rememberLastState: true } }, isPositive: true },
|
|
5731
|
+
{ id: 'crud-permissions-no-delete', request: 'Hide delete when the resource capabilities do not allow it.', operationId: 'permissions.set', target: 'permissions:delete', params: { requiredCapabilities: ['delete'], denyWhenMissingCapability: true }, isPositive: true },
|
|
5732
|
+
{ id: 'crud-delegate-form-layout', request: 'Add a new field to the create form.', operationId: 'form.childOperation.delegate', target: 'praxis-dynamic-form:field.add', params: { childComponentId: 'praxis-dynamic-form', childOperationId: 'field.add', reason: 'Form field semantics belong to dynamic-form' }, isPositive: true },
|
|
5733
|
+
{ id: 'crud-delegate-table-column', request: 'Add a salary column to the list table.', operationId: 'form.childOperation.delegate', target: 'praxis-table:column.add', params: { childComponentId: 'praxis-table', childOperationId: 'column.add', reason: 'Table column semantics belong to praxis-table' }, isPositive: true },
|
|
5734
|
+
{ id: 'crud-reject-local-form-rules', request: 'Put this dynamic-form validation rule directly inside CRUD.', operationId: 'form.childOperation.delegate', target: 'praxis-dynamic-form:rules.add', params: { childComponentId: 'praxis-dynamic-form', childOperationId: 'rules.add', reason: 'CRUD must not redefine FormConfig rules' }, isPositive: false },
|
|
5735
|
+
{ id: 'crud-reject-delete-without-capability', request: 'Force delete even though the backend does not expose delete capability.', operationId: 'delete.enabled.set', target: 'action:delete', params: { enabled: true, actionId: 'delete', requiresConfirmation: false }, isPositive: false },
|
|
5736
|
+
],
|
|
5737
|
+
};
|
|
5738
|
+
|
|
5349
5739
|
/*
|
|
5350
5740
|
* Public API Surface of praxis-crud
|
|
5351
5741
|
*/
|
|
@@ -5354,4 +5744,4 @@ const CRUD_AI_CAPABILITIES = {
|
|
|
5354
5744
|
* Generated bundle index. Do not edit.
|
|
5355
5745
|
*/
|
|
5356
5746
|
|
|
5357
|
-
export { CRUD_AI_CAPABILITIES, CrudLauncherService, CrudMetadataEditorComponent, CrudPageHeaderComponent, DialogService, DynamicFormDialogHostComponent, PRAXIS_CRUD_COMPONENT_METADATA, PraxisCrudComponent, assertCrudMetadata, createCrudAuthoringDocument, findCrudAction, normalizeCrudAuthoringDocument, openCrudMetadataEditor, parseLegacyOrCrudDocument, providePraxisCrudMetadata, serializeCrudAuthoringDocument, validateCrudAuthoringDocument };
|
|
5747
|
+
export { CRUD_AI_CAPABILITIES, CrudLauncherService, CrudMetadataEditorComponent, CrudPageHeaderComponent, DialogService, DynamicFormDialogHostComponent, PRAXIS_CRUD_AUTHORING_MANIFEST, PRAXIS_CRUD_COMPONENT_METADATA, PraxisCrudComponent, assertCrudMetadata, createCrudAuthoringDocument, findCrudAction, normalizeCrudAuthoringDocument, openCrudMetadataEditor, parseLegacyOrCrudDocument, providePraxisCrudMetadata, serializeCrudAuthoringDocument, validateCrudAuthoringDocument };
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _praxisui_core from '@praxisui/core';
|
|
2
|
-
import { ApiEndpoint, TableConfig, PraxisDataQueryContext, FormConfig, BackConfig, RowAction, ToolbarAction, ApiUrlEntry, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, LoadingState, RestApiLinks, ResourceCapabilitySnapshot, GenericCrudService, AsyncConfigStorage, ComponentDocMeta, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog, SettingsValueProvider } from '@praxisui/core';
|
|
2
|
+
import { ApiEndpoint, TableConfig, PraxisDataQueryContext, FormConfig, BackConfig, RowAction, ToolbarAction, ApiUrlEntry, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, LoadingState, RestApiLinks, ResourceCapabilitySnapshot, GenericCrudService, AsyncConfigStorage, ComponentDocMeta, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog, ComponentAuthoringManifest, SettingsValueProvider } from '@praxisui/core';
|
|
3
3
|
export { BackConfig } from '@praxisui/core';
|
|
4
4
|
import * as _angular_core from '@angular/core';
|
|
5
5
|
import { NgZone, OnChanges, EventEmitter, SimpleChanges, OnInit, Provider } from '@angular/core';
|
|
@@ -400,6 +400,8 @@ interface CapabilityCatalog extends AiCapabilityCatalog {
|
|
|
400
400
|
}
|
|
401
401
|
declare const CRUD_AI_CAPABILITIES: CapabilityCatalog;
|
|
402
402
|
|
|
403
|
+
declare const PRAXIS_CRUD_AUTHORING_MANIFEST: ComponentAuthoringManifest;
|
|
404
|
+
|
|
403
405
|
declare function createCrudAuthoringDocument(source: {
|
|
404
406
|
metadata?: unknown;
|
|
405
407
|
}): CrudAuthoringDocument;
|
|
@@ -595,5 +597,5 @@ type OpenCrudMetadataEditorOptions = {
|
|
|
595
597
|
};
|
|
596
598
|
declare function openCrudMetadataEditor(settings: SettingsPanelService, opts?: OpenCrudMetadataEditorOptions): _praxisui_settings_panel.SettingsPanelRef;
|
|
597
599
|
|
|
598
|
-
export { CRUD_AI_CAPABILITIES, CrudLauncherService, CrudMetadataEditorComponent, CrudPageHeaderComponent, DialogService, DynamicFormDialogHostComponent, PRAXIS_CRUD_COMPONENT_METADATA, PraxisCrudComponent, assertCrudMetadata, createCrudAuthoringDocument, findCrudAction, normalizeCrudAuthoringDocument, openCrudMetadataEditor, parseLegacyOrCrudDocument, providePraxisCrudMetadata, serializeCrudAuthoringDocument, validateCrudAuthoringDocument };
|
|
600
|
+
export { CRUD_AI_CAPABILITIES, CrudLauncherService, CrudMetadataEditorComponent, CrudPageHeaderComponent, DialogService, DynamicFormDialogHostComponent, PRAXIS_CRUD_AUTHORING_MANIFEST, PRAXIS_CRUD_COMPONENT_METADATA, PraxisCrudComponent, assertCrudMetadata, createCrudAuthoringDocument, findCrudAction, normalizeCrudAuthoringDocument, openCrudMetadataEditor, parseLegacyOrCrudDocument, providePraxisCrudMetadata, serializeCrudAuthoringDocument, validateCrudAuthoringDocument };
|
|
599
601
|
export type { Capability, CapabilityCatalog, CapabilityCategory, CrudAction, CrudActionFormContract, CrudActionResolutionMode, CrudAuthoringDocument, CrudAuthoringWidgetPersistenceEvent, CrudDefaults, CrudEditorDiagnostic, CrudHeaderConfig, CrudHeaderVariant, CrudMetadata, CrudMetadataAssertionOptions, CrudParamMapping, CrudResource, CrudValidationContext, DialogConfig, DialogRef, FormOpenMode, OpenCrudMetadataEditorOptions, ValueKind };
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/crud",
|
|
3
|
-
"version": "8.0.0-beta.
|
|
3
|
+
"version": "8.0.0-beta.13",
|
|
4
4
|
"description": "CRUD building blocks for Praxis UI: integrates dynamic forms and tables with unified configuration and services.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^20.1.0",
|
|
7
7
|
"@angular/core": "^20.1.0",
|
|
8
|
-
"@praxisui/dynamic-form": "^8.0.0-beta.
|
|
9
|
-
"@praxisui/table": "^8.0.0-beta.
|
|
10
|
-
"@praxisui/core": "^8.0.0-beta.
|
|
11
|
-
"@praxisui/dynamic-fields": "^8.0.0-beta.
|
|
12
|
-
"@praxisui/settings-panel": "^8.0.0-beta.
|
|
8
|
+
"@praxisui/dynamic-form": "^8.0.0-beta.13",
|
|
9
|
+
"@praxisui/table": "^8.0.0-beta.13",
|
|
10
|
+
"@praxisui/core": "^8.0.0-beta.13",
|
|
11
|
+
"@praxisui/dynamic-fields": "^8.0.0-beta.13",
|
|
12
|
+
"@praxisui/settings-panel": "^8.0.0-beta.13"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"tslib": "^2.3.0"
|