@praxisui/table 10.0.0-rc.39 → 10.0.0-rc.40

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-10-26T17:40:14.409Z",
3
+ "generatedAt": "2026-10-26T18:09:20.136Z",
4
4
  "packageName": "@praxisui/table",
5
- "packageVersion": "10.0.0-rc.39",
5
+ "packageVersion": "10.0.0-rc.40",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 3,
@@ -1257,7 +1257,7 @@ class TableBulkSyncWorkflowComponent {
1257
1257
  return this.text('error.generic');
1258
1258
  }
1259
1259
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableBulkSyncWorkflowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1260
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: TableBulkSyncWorkflowComponent, isStandalone: true, selector: "praxis-table-bulk-sync-workflow", inputs: { handle: { classPropertyName: "handle", publicName: "handle", isSignal: true, isRequired: true, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: "<section class=\"bulk-sync\" [attr.aria-label]=\"text('aria.workflow')\" data-testid=\"table-bulk-sync-workflow\">\n <header class=\"bulk-sync__header\">\n <div>\n <p class=\"bulk-sync__eyebrow\">{{ text('eyebrow') }}</p>\n <h2>{{ authorizationReady() ? text('title', { count: targetCount() }) : text('titleUnavailable') }}</h2>\n <p>{{ text('guidance') }}</p>\n </div>\n <button mat-button type=\"button\" (click)=\"close()\" [disabled]=\"!canClose()\"\n [attr.aria-label]=\"text('aria.close')\">\n {{ text('close') }}\n </button>\n </header>\n\n @if (!canClose()) { <p role=\"status\">{{ text('closePending') }}</p> }\n\n @if (authorizationReady()) {\n @if (snapshot(); as state) {\n @if (state.phase === 'idle' || state.phase === 'evaluating') {\n <div class=\"bulk-sync__editor\" (keydown.enter)=\"preventImplicitSubmit($event)\">\n <praxis-dynamic-form\n [formId]=\"'table-bulk-' + context().tableId\"\n [resourcePath]=\"context().resourcePath\"\n [schemaUrl]=\"context().contract.editableFields!.requestSchema.url\"\n [apiEndpointKey]=\"context().options?.endpointKey ?? null\"\n [apiUrlEntry]=\"context().options?.apiUrlEntry ?? null\"\n [config]=\"formConfig()\"\n configPersistenceStrategy=\"input-first\"\n mode=\"create\"\n [enableCustomization]=\"false\"\n [showAiAssistant]=\"false\"\n (formReady)=\"onFormReady($event)\"\n (payloadPreviewChange)=\"onPreview($event)\"\n ></praxis-dynamic-form>\n </div>\n <div class=\"bulk-sync__actions\">\n <button mat-flat-button type=\"button\" [disabled]=\"!canEvaluate()\" (click)=\"evaluate()\"\n data-testid=\"table-bulk-sync-evaluate\">{{ text('evaluate') }}</button>\n </div>\n }\n\n @if (!authorizedExecution() && authorizedProposal(); as proposal) {\n <section class=\"bulk-sync__review\" [attr.aria-label]=\"text('aria.proposal')\">\n <h3>{{ text(proposal.status === 'READY' ? 'proposal.ready' : 'proposal.blocked') }}</h3>\n <dl class=\"bulk-sync__totals\">\n <div><dt>{{ text('totals.targets') }}</dt><dd>{{ proposal.totals.targetCount }}</dd></div>\n <div><dt>{{ text('totals.executable') }}</dt><dd>{{ proposal.totals.executable }}</dd></div>\n <div><dt>{{ text('totals.blocked') }}</dt><dd>{{ proposal.totals.blocked }}</dd></div>\n </dl>\n <p>{{ text('expiry', { expiresAt: proposal.expiresAt }) }}</p>\n @if (requestedChanges().length) {\n <div class=\"bulk-sync__intent\" data-testid=\"table-bulk-sync-requested-intent\">\n <h4>{{ text('requested.title') }}</h4>\n <p>{{ text('requested.guidance') }}</p>\n <ul>\n @for (change of requestedChanges(); track change.field) {\n <li><strong>{{ change.field }}</strong> \u00B7 {{ text('requested.' + change.operator) }}\n @if (change.operator === 'SET') { <code>{{ requestedValue(change.value) }}</code> }\n </li>\n }\n </ul>\n </div>\n }\n @if (proposal.diagnostics.length) {\n <ul [attr.aria-label]=\"text('aria.diagnostics')\">\n @for (diagnostic of proposal.diagnostics; track $index) {\n <li>{{ diagnostic.message }}</li>\n }\n </ul>\n }\n @if (previewLoaded()) {\n <ul class=\"bulk-sync__items\" [attr.aria-label]=\"text('aria.preview')\">\n @for (item of proposalItems(); track $index) {\n <li><strong>{{ item.id }}</strong> \u00B7 {{ text('decision.' + item.decision) }}\n @for (diagnostic of item.diagnostics; track $index) { <span>{{ diagnostic.message }}</span> }\n </li>\n }\n </ul>\n @if (proposalNext(); as cursor) {\n <button mat-button type=\"button\" [disabled]=\"pageInFlight()\" (click)=\"loadProposalPage(cursor)\">{{ text('preview.more') }}</button>\n }\n } @else {\n <button mat-button type=\"button\" [disabled]=\"pageInFlight()\" (click)=\"loadProposalPage()\">{{ text('preview.load') }}</button>\n }\n @if (proposal.status === 'READY' && !state.execution) {\n <div class=\"bulk-sync__actions\">\n <button mat-flat-button type=\"button\" [disabled]=\"!canConfirm()\" (click)=\"confirm()\"\n data-testid=\"table-bulk-sync-confirm\">{{ text('confirm') }}</button>\n </div>\n }\n </section>\n }\n\n @if (authorizedExecution(); as execution) {\n <section class=\"bulk-sync__review\" [attr.aria-label]=\"text('aria.execution')\">\n <h3>{{ text('execution.heading', { status: text('status.' + execution.status) }) }}</h3>\n <dl class=\"bulk-sync__totals\">\n <div><dt>{{ text('totals.targets') }}</dt><dd>{{ execution.totals.targetCount }}</dd></div>\n <div><dt>{{ text('totals.pending') }}</dt><dd>{{ execution.totals.pending }}</dd></div>\n <div><dt>{{ text('totals.confirmed') }}</dt><dd>{{ execution.totals.confirmed }}</dd></div>\n <div><dt>{{ text('totals.unchanged') }}</dt><dd>{{ execution.totals.unchanged }}</dd></div>\n <div><dt>{{ text('totals.denied') }}</dt><dd>{{ execution.totals.denied }}</dd></div>\n <div><dt>{{ text('totals.invalid') }}</dt><dd>{{ execution.totals.invalid }}</dd></div>\n <div><dt>{{ text('totals.notProcessed') }}</dt><dd>{{ execution.totals.notProcessed }}</dd></div>\n <div><dt>{{ text('totals.conflict') }}</dt><dd>{{ execution.totals.conflict }}</dd></div>\n <div><dt>{{ text('totals.unknown') }}</dt><dd>{{ execution.totals.unknown }}</dd></div>\n </dl>\n @if (!terminal()) {\n <p>{{ text('execution.pending') }}</p>\n <button mat-button type=\"button\" [disabled]=\"working()\" (click)=\"refresh()\"\n data-testid=\"table-bulk-sync-refresh\">{{ text('execution.refresh') }}</button>\n } @else {\n <ul class=\"bulk-sync__items\" [attr.aria-label]=\"text('aria.results')\">\n @for (item of resultItems(); track $index) {\n <li><strong>{{ item.id }}</strong> \u00B7 {{ text('item.' + item.status) }}\n @for (diagnostic of item.diagnostics; track $index) { <span>{{ diagnostic.message }}</span> }\n </li>\n }\n </ul>\n @if (resultNext(); as cursor) {\n <button mat-button type=\"button\" [disabled]=\"pageInFlight()\" (click)=\"loadResultPage(cursor)\">{{ text('results.more') }}</button>\n } @else if (!resultsLoaded()) {\n <button mat-button type=\"button\" [disabled]=\"pageInFlight()\" (click)=\"loadResultPage()\">{{ text('results.load') }}</button>\n }\n }\n </section>\n }\n }\n } @else {\n <p role=\"status\">{{ text('reauthorizing') }}</p>\n @if (!working()) {\n <button mat-button type=\"button\" (click)=\"reauthorize()\">{{ text('reauthorize') }}</button>\n }\n }\n\n @if (message(); as error) {\n <p class=\"bulk-sync__error\" role=\"alert\">{{ error }}</p>\n }\n</section>\n", styles: [":host{display:block;min-width:0}.bulk-sync{margin-block:.75rem 1.25rem;padding:1rem;color:var(--mat-sys-on-surface, inherit);background:var(--mat-sys-surface-container-low, var(--p-table-bg, transparent));border:1px solid var(--p-table-border-color, currentColor);border-radius:var(--mat-sys-corner-medium, .75rem)}.bulk-sync__header{display:flex;justify-content:space-between;align-items:start;gap:1rem}.bulk-sync__header h2{margin:.15rem 0;font:var(--mat-sys-title-large, inherit)}.bulk-sync__header p{margin:.25rem 0}.bulk-sync__eyebrow{color:var(--mat-sys-primary, currentColor);font-weight:600}.bulk-sync__editor{max-width:44rem}.bulk-sync__review{margin-block-start:1rem}.bulk-sync__review h3{margin-block:0 .5rem}.bulk-sync__intent{margin-block:1rem;padding:.75rem;border:1px solid var(--p-table-border-color, currentColor);border-radius:.5rem}.bulk-sync__intent h4{margin:0 .35rem}.bulk-sync__intent p{margin:0 .5rem}.bulk-sync__intent li{overflow-wrap:anywhere}.bulk-sync__intent code{margin-inline-start:.4rem;white-space:pre-wrap}.bulk-sync__totals{display:flex;flex-wrap:wrap;gap:1.5rem;margin:.75rem 0}.bulk-sync__totals div{display:grid;gap:.1rem}.bulk-sync__totals dt{color:var(--mat-sys-on-surface-variant, inherit)}.bulk-sync__totals dd{margin:0;font-weight:700}.bulk-sync__items{max-height:16rem;overflow:auto;padding-inline-start:1.25rem}.bulk-sync__items li{padding-block:.4rem;overflow-wrap:anywhere}.bulk-sync__items span{display:block}.bulk-sync__actions{display:flex;justify-content:flex-end;margin-block-start:1rem}.bulk-sync__error{color:var(--mat-sys-error, currentColor);margin-block:.75rem 0}button:focus-visible{outline:2px solid var(--mat-sys-primary, currentColor);outline-offset:2px}@media(max-width:640px){.bulk-sync{padding:.75rem}.bulk-sync__header{flex-direction:column}.bulk-sync__actions{justify-content:stretch}.bulk-sync__actions button{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: PraxisDynamicForm, selector: "praxis-dynamic-form", inputs: ["resourcePath", "resourceId", "initialValue", "emptyState", "editorialContext", "mode", "config", "actions", "schemaSource", "schemaUrl", "readUrl", "submitUrl", "submitMethod", "submitIdempotencyKey", "submitCorrelationId", "submitResourceVersion", "submitResourceVersionTargetResourceKey", "submitResourceVersionTargetIdField", "responseSchemaUrl", "apiEndpointKey", "apiUrlEntry", "enableCustomization", "showAiAssistant", "formId", "componentInstanceId", "configPersistenceStrategy", "layout", "layoutMode", "formLayout", "generatedLayoutPreset", "layoutPolicy", "backConfig", "hooks", "removeEmptyContainersOnSave", "reactiveValidation", "reactiveValidationDebounceMs", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "readonlyModeGlobal", "disabledModeGlobal", "presentationModeGlobal", "presentation", "presentationPreset", "sectionDefaultAppearance", "sectionDivider", "visibleGlobal", "fieldIconPolicy", "domainRules", "customEndpoints"], outputs: ["formSubmit", "formCancel", "formReset", "configChange", "configPatchChange", "formReady", "valueChange", "payloadPreviewChange", "syncCompleted", "initializationError", "loadingStateChange", "enableCustomizationChange", "customAction", "actionConfirmation", "schemaStatusChange", "fieldRenderError", "ruleDiagnosticsChange", "reactiveDeterminationExecuted", "reactiveDeterminationPendingChange", "tabChange", "tabSelected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1260
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: TableBulkSyncWorkflowComponent, isStandalone: true, selector: "praxis-table-bulk-sync-workflow", inputs: { handle: { classPropertyName: "handle", publicName: "handle", isSignal: true, isRequired: true, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: "<section class=\"bulk-sync\" [attr.aria-label]=\"text('aria.workflow')\" data-testid=\"table-bulk-sync-workflow\">\n <header class=\"bulk-sync__header\">\n <div>\n <p class=\"bulk-sync__eyebrow\">{{ text('eyebrow') }}</p>\n <h2>{{ authorizationReady() ? text('title', { count: targetCount() }) : text('titleUnavailable') }}</h2>\n <p>{{ text('guidance') }}</p>\n </div>\n <button mat-button type=\"button\" (click)=\"close()\" [disabled]=\"!canClose()\"\n [attr.aria-label]=\"text('aria.close')\">\n {{ text('close') }}\n </button>\n </header>\n\n @if (!canClose()) { <p role=\"status\">{{ text('closePending') }}</p> }\n\n @if (authorizationReady()) {\n @if (snapshot(); as state) {\n @if (state.phase === 'idle' || state.phase === 'evaluating') {\n <div class=\"bulk-sync__editor\" (keydown.enter)=\"preventImplicitSubmit($event)\">\n <praxis-dynamic-form\n [formId]=\"'table-bulk-' + context().tableId\"\n [resourcePath]=\"context().resourcePath\"\n [schemaUrl]=\"context().contract.editableFields!.requestSchema.url\"\n [apiEndpointKey]=\"context().options?.endpointKey ?? null\"\n [apiUrlEntry]=\"context().options?.apiUrlEntry ?? null\"\n [config]=\"formConfig()\"\n configPersistenceStrategy=\"input-first\"\n mode=\"create\"\n [enableCustomization]=\"false\"\n [showAiAssistant]=\"false\"\n (formReady)=\"onFormReady($event)\"\n (payloadPreviewChange)=\"onPreview($event)\"\n ></praxis-dynamic-form>\n </div>\n <div class=\"bulk-sync__actions\">\n <button mat-flat-button type=\"button\" [disabled]=\"!canEvaluate()\" (click)=\"evaluate()\"\n data-testid=\"table-bulk-sync-evaluate\">{{ text('evaluate') }}</button>\n </div>\n }\n\n @if (!authorizedExecution() && authorizedProposal(); as proposal) {\n <section class=\"bulk-sync__review\" [attr.aria-label]=\"text('aria.proposal')\">\n <h3>{{ text(proposal.status === 'READY' ? 'proposal.ready' : 'proposal.blocked') }}</h3>\n <dl class=\"bulk-sync__totals\">\n <div><dt>{{ text('totals.targets') }}</dt><dd>{{ proposal.totals.targetCount }}</dd></div>\n <div><dt>{{ text('totals.executable') }}</dt><dd>{{ proposal.totals.executable }}</dd></div>\n <div><dt>{{ text('totals.blocked') }}</dt><dd>{{ proposal.totals.blocked }}</dd></div>\n </dl>\n <p>{{ text('expiry', { expiresAt: proposal.expiresAt }) }}</p>\n @if (requestedChanges().length) {\n <div class=\"bulk-sync__intent\" data-testid=\"table-bulk-sync-requested-intent\">\n <h4>{{ text('requested.title') }}</h4>\n <p>{{ text('requested.guidance') }}</p>\n <ul>\n @for (change of requestedChanges(); track change.field) {\n <li><strong>{{ change.field }}</strong> \u00B7 {{ text('requested.' + change.operator) }}\n @if (change.operator === 'SET') { <code>{{ requestedValue(change.value) }}</code> }\n </li>\n }\n </ul>\n </div>\n }\n @if (proposal.diagnostics.length) {\n <ul [attr.aria-label]=\"text('aria.diagnostics')\">\n @for (diagnostic of proposal.diagnostics; track $index) {\n <li>{{ diagnostic.message }}</li>\n }\n </ul>\n }\n @if (previewLoaded()) {\n <ul class=\"bulk-sync__items\" [attr.aria-label]=\"text('aria.preview')\">\n @for (item of proposalItems(); track $index) {\n <li><strong>{{ item.id }}</strong> \u00B7 {{ text('decision.' + item.decision) }}\n @for (diagnostic of item.diagnostics; track $index) { <span>{{ diagnostic.message }}</span> }\n </li>\n }\n </ul>\n @if (proposalNext(); as cursor) {\n <button mat-button type=\"button\" [disabled]=\"pageInFlight()\" (click)=\"loadProposalPage(cursor)\">{{ text('preview.more') }}</button>\n }\n } @else {\n <button mat-button type=\"button\" [disabled]=\"pageInFlight()\" (click)=\"loadProposalPage()\">{{ text('preview.load') }}</button>\n }\n @if (proposal.status === 'READY' && !state.execution) {\n <div class=\"bulk-sync__actions\">\n <button mat-flat-button type=\"button\" [disabled]=\"!canConfirm()\" (click)=\"confirm()\"\n data-testid=\"table-bulk-sync-confirm\">{{ text('confirm') }}</button>\n </div>\n }\n </section>\n }\n\n @if (authorizedExecution(); as execution) {\n <section class=\"bulk-sync__review\" [attr.aria-label]=\"text('aria.execution')\">\n <h3>{{ text('execution.heading', { status: text('status.' + execution.status) }) }}</h3>\n <dl class=\"bulk-sync__totals\">\n <div><dt>{{ text('totals.targets') }}</dt><dd>{{ execution.totals.targetCount }}</dd></div>\n <div><dt>{{ text('totals.pending') }}</dt><dd>{{ execution.totals.pending }}</dd></div>\n <div><dt>{{ text('totals.confirmed') }}</dt><dd>{{ execution.totals.confirmed }}</dd></div>\n <div><dt>{{ text('totals.unchanged') }}</dt><dd>{{ execution.totals.unchanged }}</dd></div>\n <div><dt>{{ text('totals.denied') }}</dt><dd>{{ execution.totals.denied }}</dd></div>\n <div><dt>{{ text('totals.invalid') }}</dt><dd>{{ execution.totals.invalid }}</dd></div>\n <div><dt>{{ text('totals.notProcessed') }}</dt><dd>{{ execution.totals.notProcessed }}</dd></div>\n <div><dt>{{ text('totals.conflict') }}</dt><dd>{{ execution.totals.conflict }}</dd></div>\n <div><dt>{{ text('totals.unknown') }}</dt><dd>{{ execution.totals.unknown }}</dd></div>\n </dl>\n @if (!terminal()) {\n <p>{{ text('execution.pending') }}</p>\n <button mat-button type=\"button\" [disabled]=\"working()\" (click)=\"refresh()\"\n data-testid=\"table-bulk-sync-refresh\">{{ text('execution.refresh') }}</button>\n } @else {\n <ul class=\"bulk-sync__items\" [attr.aria-label]=\"text('aria.results')\">\n @for (item of resultItems(); track $index) {\n <li><strong>{{ item.id }}</strong> \u00B7 {{ text('item.' + item.status) }}\n @for (diagnostic of item.diagnostics; track $index) { <span>{{ diagnostic.message }}</span> }\n </li>\n }\n </ul>\n @if (resultNext(); as cursor) {\n <button mat-button type=\"button\" [disabled]=\"pageInFlight()\" (click)=\"loadResultPage(cursor)\">{{ text('results.more') }}</button>\n } @else if (!resultsLoaded()) {\n <button mat-button type=\"button\" [disabled]=\"pageInFlight()\" (click)=\"loadResultPage()\">{{ text('results.load') }}</button>\n }\n }\n </section>\n }\n }\n } @else {\n <p role=\"status\">{{ text('reauthorizing') }}</p>\n @if (!working()) {\n <button mat-button type=\"button\" (click)=\"reauthorize()\">{{ text('reauthorize') }}</button>\n }\n }\n\n @if (message(); as error) {\n <p class=\"bulk-sync__error\" role=\"alert\">{{ error }}</p>\n }\n</section>\n", styles: [":host{display:block;min-width:0}.bulk-sync{margin-block:.75rem 1.25rem;padding:1rem;color:var(--mat-sys-on-surface, inherit);background:var(--mat-sys-surface-container-low, var(--p-table-bg, transparent));border:1px solid var(--p-table-border-color, currentColor);border-radius:var(--mat-sys-corner-medium, .75rem)}.bulk-sync__header{display:flex;justify-content:space-between;align-items:start;gap:1rem}.bulk-sync__header h2{margin:.15rem 0;font:var(--mat-sys-title-large, inherit)}.bulk-sync__header p{margin:.25rem 0}.bulk-sync__eyebrow{color:var(--mat-sys-primary, currentColor);font-weight:600}.bulk-sync__editor{max-width:44rem}.bulk-sync__review{margin-block-start:1rem}.bulk-sync__review h3{margin-block:0 .5rem}.bulk-sync__intent{margin-block:1rem;padding:.75rem;border:1px solid var(--p-table-border-color, currentColor);border-radius:.5rem}.bulk-sync__intent h4{margin:0 .35rem}.bulk-sync__intent p{margin:0 .5rem}.bulk-sync__intent li{overflow-wrap:anywhere}.bulk-sync__intent code{margin-inline-start:.4rem;white-space:pre-wrap}.bulk-sync__totals{display:flex;flex-wrap:wrap;gap:1.5rem;margin:.75rem 0}.bulk-sync__totals div{display:grid;gap:.1rem}.bulk-sync__totals dt{color:var(--mat-sys-on-surface-variant, inherit)}.bulk-sync__totals dd{margin:0;font-weight:700}.bulk-sync__items{max-height:16rem;overflow:auto;padding-inline-start:1.25rem}.bulk-sync__items li{padding-block:.4rem;overflow-wrap:anywhere}.bulk-sync__items span{display:block}.bulk-sync__actions{display:flex;justify-content:flex-end;margin-block-start:1rem}.bulk-sync__error{color:var(--mat-sys-error, currentColor);margin-block:.75rem 0}button:focus-visible{outline:2px solid var(--mat-sys-primary, currentColor);outline-offset:2px}@media(max-width:640px){.bulk-sync{padding:.75rem}.bulk-sync__header{flex-direction:column}.bulk-sync__actions{justify-content:stretch}.bulk-sync__actions button{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: PraxisDynamicForm, selector: "praxis-dynamic-form", inputs: ["resourcePath", "resourceId", "initialValue", "emptyState", "editorialContext", "mode", "config", "actions", "schemaSource", "actionId", "operationId", "schemaUrl", "readUrl", "submitUrl", "submitMethod", "submitIdempotencyKey", "submitCorrelationId", "submitResourceVersion", "submitResourceVersionTargetResourceKey", "submitResourceVersionTargetIdField", "responseSchemaUrl", "apiEndpointKey", "apiUrlEntry", "enableCustomization", "showAiAssistant", "formId", "componentInstanceId", "configPersistenceStrategy", "layout", "layoutMode", "formLayout", "generatedLayoutPreset", "layoutPolicy", "backConfig", "hooks", "removeEmptyContainersOnSave", "reactiveValidation", "reactiveValidationDebounceMs", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "readonlyModeGlobal", "disabledModeGlobal", "presentationModeGlobal", "presentation", "presentationPreset", "sectionDefaultAppearance", "sectionDivider", "visibleGlobal", "fieldIconPolicy", "domainRules", "customEndpoints"], outputs: ["formSubmit", "formCancel", "formReset", "configChange", "configPatchChange", "formReady", "valueChange", "payloadPreviewChange", "syncCompleted", "initializationError", "loadingStateChange", "enableCustomizationChange", "customAction", "actionConfirmation", "schemaStatusChange", "fieldRenderError", "ruleDiagnosticsChange", "reactiveDeterminationExecuted", "reactiveDeterminationPendingChange", "tabChange", "tabSelected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1261
1261
  }
1262
1262
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableBulkSyncWorkflowComponent, decorators: [{
1263
1263
  type: Component,
@@ -24759,7 +24759,7 @@ class PraxisTable {
24759
24759
  if (this.aiAdapter || this.aiAdapterLoadStarted)
24760
24760
  return;
24761
24761
  this.aiAdapterLoadStarted = true;
24762
- import('./praxisui-table-table-ai.adapter-DPC3MX0Y.mjs')
24762
+ import('./praxisui-table-table-ai.adapter-2CXgwI8n.mjs')
24763
24763
  .then(({ TableAiAdapter }) => {
24764
24764
  if (!this.isAiAssistantEnabled()) {
24765
24765
  this.aiAssistantOpenAfterAdapterLoad = false;
@@ -25531,7 +25531,7 @@ class PraxisTable {
25531
25531
  initializeAiAssistantController() {
25532
25532
  if (!this.aiAdapter || this.aiAssistantController)
25533
25533
  return;
25534
- import('./praxisui-table-table-agentic-authoring-turn-flow-CB4ne1nl.mjs')
25534
+ import('./praxisui-table-table-agentic-authoring-turn-flow-D0489HPn.mjs')
25535
25535
  .then(({ TableAgenticAuthoringTurnFlow }) => {
25536
25536
  if (this.aiAssistantController || !this.aiAdapter)
25537
25537
  return;
@@ -1,6 +1,6 @@
1
1
  import { Observable, firstValueFrom } from 'rxjs';
2
2
  import { withAuthoringScopePolicy } from '@praxisui/ai';
3
- import { aw as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-C6NaFjJJ.mjs';
3
+ import { aw as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-vjpONc0b.mjs';
4
4
 
5
5
  class TableAgenticAuthoringTurnFlow {
6
6
  adapter;
@@ -1,7 +1,7 @@
1
1
  import { firstValueFrom } from 'rxjs';
2
2
  import { BaseAiAdapter, sanitizePraxisAssistantText, createComponentAuthoringContext } from '@praxisui/ai';
3
3
  import { PRAXIS_GLOBAL_ACTION_CATALOG, deepMerge } from '@praxisui/core';
4
- import { W as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, p as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, a7 as coerceTableComponentEditPlans, a9 as compileTableComponentEditPlans, Z as TASK_PRESETS, ah as getTableComponentEditPlanCapabilities, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, V as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-C6NaFjJJ.mjs';
4
+ import { W as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, p as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, a7 as coerceTableComponentEditPlans, a9 as compileTableComponentEditPlans, Z as TASK_PRESETS, ah as getTableComponentEditPlanCapabilities, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, V as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-vjpONc0b.mjs';
5
5
 
6
6
  const TABLE_ROW_EXPRESSION_CONTEXT_OPTION = {
7
7
  mode: 'expression',
@@ -1,2 +1,2 @@
1
- export { A as ANALYTICS_TABLE_ROW_KEY_FIELD, a as AnalyticalDrawerRegistryService, b as AnalyticsTableConfigAdapterService, c as AnalyticsTableContractService, d as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, e as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, f as ColumnsConfigEditorComponent, D as DATE_PRESETS, g as DataFormatterComponent, h as DataFormattingService, F as FORMULA_TEMPLATES, i as FilterConfigService, j as FilterSettingsComponent, k as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, l as PRAXIS_ANALYTICAL_DRAWER_SCHEMAS, m as PRAXIS_FILTER_AUTHORING_MANIFEST, n as PRAXIS_FILTER_COMPONENT_METADATA, o as PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, p as PRAXIS_TABLE_AUTHORING_MANIFEST, q as PRAXIS_TABLE_COMPONENT_METADATA, r as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, s as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, t as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, u as PraxisAnalyticalDrawerComponent, v as PraxisFilter, w as PraxisFilterOutletComponent, x as PraxisFilterOutletDirective, y as PraxisFilterWidgetConfigEditor, z as PraxisScopeBarComponent, E as PraxisTable, G as PraxisTableConfigEditor, H as PraxisTableInlineAuthoringEditorComponent, I as PraxisTableToolbar, K as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, L as TABLE_COMPONENT_AI_CAPABILITIES, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, V as TABLE_COMPONENT_EDIT_PLAN_KIND, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Y as TABLE_GOVERNED_PAGE_PREVIEW_ADAPTER, Z as TASK_PRESETS, _ as TableDefaultsProvider, $ as TableRulesEditorComponent, a0 as ToolbarActionsEditorComponent, a1 as ValueMappingEditorComponent, a2 as VisualFormulaBuilderComponent, a3 as analyticsComparisonMetricField, a4 as applyComputedFieldsToRows, a5 as buildTableApplyPlan, a6 as coerceTableComponentEditPlan, a7 as coerceTableComponentEditPlans, a8 as compileTableComponentEditPlan, a9 as compileTableComponentEditPlans, aa as createTableAuthoringDocument, ab as decodeTablePageInputs, ac as encodeTablePageInputs, ad as formatComputedFieldValue, ae as getActionId, af as getEnum, ag as getTableCapabilities, ah as getTableComponentEditPlanCapabilities, ai as interpolateRelationEndpoint, aj as isAnalyticalDrawerSchema, ak as isTableRendererSupportedByRichContentP0, al as mapTableRendererToRichContentP0, am as materializeTablePageRuntimeInputs, an as normalizeComputedFieldDefinition, ao as normalizeTableAuthoringDocument, ap as parseLegacyOrTableDocument, aq as projectTablePageEditorChanges, ar as providePraxisAnalyticalDrawerSchemas, as as providePraxisFilterMetadata, at as providePraxisTableMetadata, au as providePraxisTableToolbarAppearance, av as serializeTableAuthoringDocument, ax as toCanonicalTableConfig, ay as validateTableAuthoringDocument, az as validateTablePageWidget } from './praxisui-table-praxisui-table-C6NaFjJJ.mjs';
1
+ export { A as ANALYTICS_TABLE_ROW_KEY_FIELD, a as AnalyticalDrawerRegistryService, b as AnalyticsTableConfigAdapterService, c as AnalyticsTableContractService, d as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, e as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, f as ColumnsConfigEditorComponent, D as DATE_PRESETS, g as DataFormatterComponent, h as DataFormattingService, F as FORMULA_TEMPLATES, i as FilterConfigService, j as FilterSettingsComponent, k as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, l as PRAXIS_ANALYTICAL_DRAWER_SCHEMAS, m as PRAXIS_FILTER_AUTHORING_MANIFEST, n as PRAXIS_FILTER_COMPONENT_METADATA, o as PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, p as PRAXIS_TABLE_AUTHORING_MANIFEST, q as PRAXIS_TABLE_COMPONENT_METADATA, r as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, s as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, t as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, u as PraxisAnalyticalDrawerComponent, v as PraxisFilter, w as PraxisFilterOutletComponent, x as PraxisFilterOutletDirective, y as PraxisFilterWidgetConfigEditor, z as PraxisScopeBarComponent, E as PraxisTable, G as PraxisTableConfigEditor, H as PraxisTableInlineAuthoringEditorComponent, I as PraxisTableToolbar, K as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, L as TABLE_COMPONENT_AI_CAPABILITIES, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, V as TABLE_COMPONENT_EDIT_PLAN_KIND, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Y as TABLE_GOVERNED_PAGE_PREVIEW_ADAPTER, Z as TASK_PRESETS, _ as TableDefaultsProvider, $ as TableRulesEditorComponent, a0 as ToolbarActionsEditorComponent, a1 as ValueMappingEditorComponent, a2 as VisualFormulaBuilderComponent, a3 as analyticsComparisonMetricField, a4 as applyComputedFieldsToRows, a5 as buildTableApplyPlan, a6 as coerceTableComponentEditPlan, a7 as coerceTableComponentEditPlans, a8 as compileTableComponentEditPlan, a9 as compileTableComponentEditPlans, aa as createTableAuthoringDocument, ab as decodeTablePageInputs, ac as encodeTablePageInputs, ad as formatComputedFieldValue, ae as getActionId, af as getEnum, ag as getTableCapabilities, ah as getTableComponentEditPlanCapabilities, ai as interpolateRelationEndpoint, aj as isAnalyticalDrawerSchema, ak as isTableRendererSupportedByRichContentP0, al as mapTableRendererToRichContentP0, am as materializeTablePageRuntimeInputs, an as normalizeComputedFieldDefinition, ao as normalizeTableAuthoringDocument, ap as parseLegacyOrTableDocument, aq as projectTablePageEditorChanges, ar as providePraxisAnalyticalDrawerSchemas, as as providePraxisFilterMetadata, at as providePraxisTableMetadata, au as providePraxisTableToolbarAppearance, av as serializeTableAuthoringDocument, ax as toCanonicalTableConfig, ay as validateTableAuthoringDocument, az as validateTablePageWidget } from './praxisui-table-praxisui-table-vjpONc0b.mjs';
2
2
  export { createDynamicRecord, extractRecordId, isDynamicDataRecord, resolveDataField } from '@praxisui/core';
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "10.0.0-rc.39",
3
+ "version": "10.0.0-rc.40",
4
4
  "description": "Advanced data table for Angular (Praxis UI) with editing, filtering, sorting, virtualization, and settings panel integration.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
7
7
  "@angular/core": "^21.0.0",
8
8
  "@angular/platform-browser": "^21.0.0",
9
- "@praxisui/ai": "^10.0.0-rc.39",
10
- "@praxisui/core": "^10.0.0-rc.39",
11
- "@praxisui/dynamic-fields": "^10.0.0-rc.39",
12
- "@praxisui/dynamic-form": "^10.0.0-rc.39",
13
- "@praxisui/metadata-editor": "^10.0.0-rc.39",
14
- "@praxisui/rich-content": "^10.0.0-rc.39",
15
- "@praxisui/settings-panel": "^10.0.0-rc.39",
16
- "@praxisui/table-rule-builder": "^10.0.0-rc.39",
9
+ "@praxisui/ai": "^10.0.0-rc.40",
10
+ "@praxisui/core": "^10.0.0-rc.40",
11
+ "@praxisui/dynamic-fields": "^10.0.0-rc.40",
12
+ "@praxisui/dynamic-form": "^10.0.0-rc.40",
13
+ "@praxisui/metadata-editor": "^10.0.0-rc.40",
14
+ "@praxisui/rich-content": "^10.0.0-rc.40",
15
+ "@praxisui/settings-panel": "^10.0.0-rc.40",
16
+ "@praxisui/table-rule-builder": "^10.0.0-rc.40",
17
17
  "@angular/cdk": "^21.0.0",
18
18
  "@angular/forms": "^21.0.0",
19
19
  "@angular/material": "^21.0.0",
20
20
  "@angular/router": "^21.0.0",
21
- "@praxisui/dialog": "^10.0.0-rc.39",
21
+ "@praxisui/dialog": "^10.0.0-rc.40",
22
22
  "rxjs": "~7.8.0"
23
23
  },
24
24
  "dependencies": {