@praxisui/crud 10.0.0-rc.37 → 10.0.0-rc.39

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,3 +1,5 @@
1
+ import * as i1 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
1
3
  import * as i0 from '@angular/core';
2
4
  import { inject, DestroyRef, signal, HostListener, ViewChild, Inject, ViewEncapsulation, Component, EventEmitter, ChangeDetectorRef, Output, Input, ChangeDetectionStrategy, Injectable, InjectionToken, input, ElementRef, computed, linkedSignal, effect, output, Injector, booleanAttribute, Optional, ENVIRONMENT_INITIALIZER } from '@angular/core';
3
5
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@@ -10,10 +12,8 @@ import { MatSnackBar } from '@angular/material/snack-bar';
10
12
  import { Subscription, firstValueFrom, BehaviorSubject, forkJoin, of } from 'rxjs';
11
13
  import { take, filter, catchError } from 'rxjs/operators';
12
14
  import * as i2$2 from '@praxisui/core';
13
- import { PraxisBulkClientService, PraxisI18nService, generateBulkIdempotencyKey, isBulkExecutionTerminal, API_URL, SafeExpressionEvaluator, buildApiUrl, isUnresolvedTemplateToken, applyDeclarativeValuePipe, ASYNC_CONFIG_STORAGE, GlobalConfigService, CrudOperationResolutionService, LoggerService, SurfaceNavigationError, fillUndefined, GenericCrudService, ResourceDiscoveryService, SETTINGS_PANEL_DATA, FieldControlType, buildBaseColumnFromDef, mapFieldDefinitionsToMetadata, PraxisIconDirective, ResourceQuickConnectComponent, providePraxisI18nConfig, SchemaNormalizerService, PraxisWidgetEventBus, EnterpriseRuntimeContextService, GLOBAL_SURFACE_SERVICE, SurfaceOutletRegistryService, ComponentKeyService, ResourceActionOpenAdapterService, ResourceSurfaceOpenAdapterService, composeHeadersWithVersion, normalizeSurfaceOperationContext, createDefaultTableConfig, SURFACE_DRAWER_REF, translateUnavailableWorkflowMessage, isSurfaceNavigationError, translateSurfaceNavigationRejected, normalizeUnknownError, EmptyStateCardComponent, RESOURCE_DISCOVERY_I18N_CONFIG, PraxisCustomizationModeService, SURFACE_DRAWER_CONTENT_DATA, PraxisIconButtonComponent, PraxisResourceIdentityComponent, ComponentMetadataRegistry } from '@praxisui/core';
15
+ import { PraxisBulkClientService, PraxisI18nService, generateBulkIdempotencyKey, isBulkExecutionTerminal, API_URL, SafeExpressionEvaluator, buildApiUrl, isUnresolvedTemplateToken, applyDeclarativeValuePipe, ASYNC_CONFIG_STORAGE, GlobalConfigService, CrudOperationResolutionService, LoggerService, SurfaceNavigationError, fillUndefined, GenericCrudService, ResourceDiscoveryService, SETTINGS_PANEL_DATA, mapCatalogFieldsToMetadata, FieldControlType, humanizeCatalogFieldName, inferDomainSemanticTone, buildBaseColumnFromDef, mapFieldDefinitionsToMetadata, PraxisIconDirective, ResourceQuickConnectComponent, providePraxisI18nConfig, SchemaNormalizerService, PraxisWidgetEventBus, EnterpriseRuntimeContextService, GLOBAL_SURFACE_SERVICE, SurfaceOutletRegistryService, ComponentKeyService, ResourceActionOpenAdapterService, ResourceSurfaceOpenAdapterService, composeHeadersWithVersion, normalizeSurfaceOperationContext, createDefaultTableConfig, SURFACE_DRAWER_REF, translateUnavailableWorkflowMessage, isSurfaceNavigationError, translateSurfaceNavigationRejected, normalizeUnknownError, EmptyStateCardComponent, RESOURCE_DISCOVERY_I18N_CONFIG, PraxisCustomizationModeService, SURFACE_DRAWER_CONTENT_DATA, PraxisIconButtonComponent, PraxisResourceIdentityComponent, ComponentMetadataRegistry } from '@praxisui/core';
14
16
  export { createDynamicRecord, extractRecordId, isDynamicDataRecord, resolveDataField } from '@praxisui/core';
15
- import * as i1 from '@angular/common';
16
- import { CommonModule } from '@angular/common';
17
17
  import * as i3 from '@angular/material/button';
18
18
  import { MatButtonModule } from '@angular/material/button';
19
19
  import * as i4 from '@angular/material/icon';
@@ -23,7 +23,7 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
23
23
  import * as i2 from '@angular/forms';
24
24
  import { FormsModule } from '@angular/forms';
25
25
  import { PraxisDynamicForm } from '@praxisui/dynamic-form';
26
- import * as i6 from '@angular/material/select';
26
+ import * as i3$1 from '@angular/material/select';
27
27
  import { MatSelectModule } from '@angular/material/select';
28
28
  import * as i7 from '@angular/material/input';
29
29
  import { MatInputModule } from '@angular/material/input';
@@ -37,7 +37,7 @@ import * as i2$1 from '@angular/material/autocomplete';
37
37
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
38
38
  import * as i5 from '@angular/material/card';
39
39
  import { MatCardModule } from '@angular/material/card';
40
- import * as i6$1 from '@angular/material/expansion';
40
+ import * as i6 from '@angular/material/expansion';
41
41
  import { MatExpansionModule } from '@angular/material/expansion';
42
42
  import * as i9 from '@angular/material/slide-toggle';
43
43
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
@@ -57,9 +57,9 @@ const PRAXIS_CRUD_RUNTIME_I18N_CONFIG = {
57
57
  'crud.bulk.cancelRequest': 'Solicitar cancelamento',
58
58
  'crud.bulk.requestingCancel': 'Solicitando cancelamento...',
59
59
  'crud.bulk.cancelRequested': 'Cancelamento solicitado. Aguardando confirmação do servidor.',
60
- 'crud.emptyState.title': 'Conecte o CRUD a um recurso',
61
- 'crud.emptyState.description': 'Informe os metadados (resourcePath / schema) ou forneça metadata.data para habilitar a tabela e as ações.',
62
- 'crud.emptyState.primaryAction': 'Configurar metadados',
60
+ 'crud.emptyState.title': 'Conecte o Workspace a um recurso',
61
+ 'crud.emptyState.description': 'Selecione um recurso do catálogo da API para projetar automaticamente colunas, filtros, indicadores, dossiês e capacidades governadas.',
62
+ 'crud.emptyState.primaryAction': 'Configurar Workspace',
63
63
  'crud.table.emptyState.initial.title': 'Sem registros em {label}',
64
64
  'crud.table.emptyState.initial.titleFallback': 'Nenhum registro disponível.',
65
65
  'crud.table.emptyState.initial.descriptionWithToolbarAction': 'Use "{action}" na barra da tabela para adicionar o primeiro registro quando houver informações para cadastrar.',
@@ -88,9 +88,9 @@ const PRAXIS_CRUD_RUNTIME_I18N_CONFIG = {
88
88
  'crud.bulk.cancelRequest': 'Request cancellation',
89
89
  'crud.bulk.requestingCancel': 'Requesting cancellation...',
90
90
  'crud.bulk.cancelRequested': 'Cancellation requested. Waiting for server confirmation.',
91
- 'crud.emptyState.title': 'Connect CRUD to a resource',
92
- 'crud.emptyState.description': 'Provide metadata (resourcePath / schema) or metadata.data to enable the table and actions.',
93
- 'crud.emptyState.primaryAction': 'Configure metadata',
91
+ 'crud.emptyState.title': 'Connect Workspace to a resource',
92
+ 'crud.emptyState.description': 'Select an API catalog resource to automatically project columns, filters, indicators, dossiers, and governed capabilities.',
93
+ 'crud.emptyState.primaryAction': 'Configure Workspace',
94
94
  'crud.table.emptyState.initial.title': 'No records in {label}',
95
95
  'crud.table.emptyState.initial.titleFallback': 'No records available.',
96
96
  'crud.table.emptyState.initial.descriptionWithToolbarAction': 'Use "{action}" in the table toolbar to add the first record when there is information to register.',
@@ -876,7 +876,7 @@ class PraxisBulkOperationDialogComponent {
876
876
  (click)="loadProposalResults(proposalNextCursor()!)"
877
877
  [disabled]="loadingProposalResults()"
878
878
  >
879
- {{ loadingProposalResults() ? 'Carregando...' : 'Carregar mais resultados' }}
879
+ <span [class.praxis-bulk-dialog__loading-label]="loadingProposalResults()">{{ loadingProposalResults() ? 'Carregando...' : 'Carregar mais resultados' }}</span>
880
880
  </button>
881
881
  }
882
882
  </div>
@@ -975,7 +975,7 @@ class PraxisBulkOperationDialogComponent {
975
975
  (click)="loadExecutionResults(executionNextCursor()!)"
976
976
  [disabled]="loadingExecutionResults()"
977
977
  >
978
- {{ loadingExecutionResults() ? 'Carregando...' : 'Carregar mais resultados' }}
978
+ <span [class.praxis-bulk-dialog__loading-label]="loadingExecutionResults()">{{ loadingExecutionResults() ? 'Carregando...' : 'Carregar mais resultados' }}</span>
979
979
  </button>
980
980
  }
981
981
  </div>
@@ -1026,7 +1026,7 @@ class PraxisBulkOperationDialogComponent {
1026
1026
  }
1027
1027
  </div>
1028
1028
  </div>
1029
- `, isInline: true, styles: [".cdk-global-overlay-wrapper:has(.praxis-bulk-dialog-panel){display:flex!important;justify-content:center!important;align-items:center!important;padding:24px!important;box-sizing:border-box!important}.cdk-overlay-pane.praxis-bulk-dialog-panel{--mat-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mdc-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mat-dialog-container-shape: 16px;position:relative!important;inset:auto!important;margin:auto!important;display:flex!important;justify-content:center!important;align-items:center!important}.cdk-overlay-pane.praxis-bulk-dialog-panel .mat-mdc-dialog-surface{border-radius:16px;border:1px solid var(--border, var(--praxis-border-subtle, rgba(148, 163, 184, .2)));box-shadow:0 24px 64px #0000008c;background-color:var(--card, var(--praxis-color-surface, #1e293b))!important;color:var(--foreground, #f8fafc)!important;overflow:hidden;width:100%}.praxis-bulk-dialog{display:flex;flex-direction:column;max-height:85vh;width:100%;min-width:600px;max-width:680px;margin:0 auto;color:var(--foreground, var(--praxis-text-primary, #f8fafc));background:transparent;box-sizing:border-box}.praxis-bulk-dialog__header{display:flex;justify-content:space-between;align-items:flex-start;padding:22px 26px 18px;border-bottom:1px solid var(--border, rgba(148, 163, 184, .15))}.praxis-bulk-dialog__title-group{display:flex;align-items:flex-start;gap:14px}.praxis-bulk-dialog__header-icon{color:var(--primary, var(--praxis-primary, #0284c7));font-size:28px;width:28px;height:28px;margin-top:2px}.praxis-bulk-dialog__title{font-size:1.25rem;font-weight:600;margin:0;line-height:1.3;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__subtitle{font-size:.875rem;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin:4px 0 0;line-height:1.45}.praxis-bulk-dialog__content{padding:22px 26px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:20px}.praxis-bulk-dialog__targets-badge{display:inline-flex;align-items:center;gap:10px;padding:10px 16px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;font-size:.875rem;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__targets-badge mat-icon{font-size:18px;width:18px;height:18px;color:var(--primary, var(--praxis-primary, #0284c7))}.praxis-bulk-dialog__section{display:flex;flex-direction:column;gap:20px}.praxis-bulk-dialog__section-title{font-size:1rem;font-weight:600;margin:0;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__totals-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:4px 0 12px}.praxis-bulk-dialog__total-card{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:104px;padding:20px 22px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:14px;transition:background .2s ease,border-color .2s ease;box-sizing:border-box;gap:8px}.praxis-bulk-dialog__total-card .total-label{font-size:.8125rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted-foreground, rgba(148, 163, 184, .85));font-weight:600;margin-bottom:2px}.praxis-bulk-dialog__total-card .total-value{font-size:2rem;font-weight:700;color:var(--foreground, #f8fafc);line-height:1;margin:0;letter-spacing:-.02em}.total-card--executable{border-color:color-mix(in srgb,var(--praxis-success, #10b981) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b))!important}.total-card--executable .total-value{color:var(--praxis-success, #10b981)}.total-card--blocked{border-color:color-mix(in srgb,var(--praxis-error, #ef4444) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b))!important}.total-card--blocked .total-value{color:var(--praxis-error, #ef4444)}.praxis-bulk-dialog__alert{display:flex;align-items:flex-start;gap:14px;padding:18px 22px;border-radius:12px;font-size:.875rem;line-height:1.5}.praxis-bulk-dialog__alert mat-icon{font-size:22px;width:22px;height:22px;flex-shrink:0;margin-top:1px}.praxis-bulk-dialog__alert .alert-content{display:flex;flex-direction:column;gap:4px}.praxis-bulk-dialog__alert .alert-content strong{font-size:.9375rem;font-weight:600;color:inherit}.praxis-bulk-dialog__alert .alert-content p{margin:0;font-size:.8125rem;opacity:.9}.praxis-bulk-dialog__alert--error{background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-error, #ef4444) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--error mat-icon{color:var(--praxis-error, #ef4444)}.praxis-bulk-dialog__alert--warning{background:color-mix(in srgb,var(--praxis-warning, #d97706) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--warning mat-icon{color:var(--praxis-warning, #d97706)}.praxis-bulk-dialog__alert--success{background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-success, #10b981) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--success mat-icon{color:var(--praxis-success, #10b981)}.praxis-bulk-dialog__notice-box{display:flex;align-items:center;gap:12px;padding:16px 20px;background:color-mix(in srgb,var(--praxis-info, #0284c7) 14%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-info, #0284c7) 40%,transparent);border-radius:10px;color:var(--foreground, #f8fafc);font-size:.875rem}.praxis-bulk-dialog__notice-box mat-icon{color:var(--praxis-info, #0284c7)}.praxis-bulk-dialog__diagnostics{margin-top:12px;border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;padding:14px 18px;background:color-mix(in srgb,var(--foreground, #f8fafc) 4%,var(--card, #1e293b))}.diagnostics-title{font-size:.875rem;font-weight:600;margin:0 0 8px;color:var(--praxis-text-primary, var(--foreground, inherit))}.diagnostics-list{display:flex;flex-direction:column;gap:6px;max-height:160px;overflow-y:auto}.diagnostic-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.diagnostic-item mat-icon{font-size:16px;width:16px;height:16px;color:var(--praxis-primary, var(--primary, var(--md-sys-color-primary, #0284c7)))}.diagnostic-item--error{color:var(--praxis-error, #dc2626)}.diagnostic-item--error mat-icon{color:var(--praxis-error, #dc2626)}.diagnostic-target{font-weight:600;margin-right:4px;color:var(--praxis-text-primary, var(--foreground, inherit))}.praxis-bulk-dialog__loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;gap:16px;color:var(--praxis-text-muted, var(--muted-foreground, inherit));font-size:.9375rem}.praxis-bulk-dialog__actions{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:16px 24px 20px;border-top:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatDialogModule }, { 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: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { 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"] }], encapsulation: i0.ViewEncapsulation.None });
1029
+ `, isInline: true, styles: [".cdk-global-overlay-wrapper:has(.praxis-bulk-dialog-panel){display:flex!important;justify-content:center!important;align-items:center!important;padding:24px!important;box-sizing:border-box!important}.cdk-overlay-pane.praxis-bulk-dialog-panel{--mat-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mdc-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mat-dialog-container-shape: 16px;position:relative!important;inset:auto!important;margin:auto!important;display:flex!important;justify-content:center!important;align-items:center!important}.cdk-overlay-pane.praxis-bulk-dialog-panel .mat-mdc-dialog-surface{border-radius:16px;border:1px solid var(--border, var(--praxis-border-subtle, rgba(148, 163, 184, .2)));box-shadow:0 24px 64px #0000008c;background-color:var(--card, var(--praxis-color-surface, #1e293b))!important;color:var(--foreground, #f8fafc)!important;overflow:hidden;width:100%}.praxis-bulk-dialog{display:flex;flex-direction:column;max-height:85vh;width:100%;min-width:600px;max-width:680px;margin:0 auto;color:var(--foreground, var(--praxis-text-primary, #f8fafc));background:transparent;box-sizing:border-box}.praxis-bulk-dialog__header{display:flex;justify-content:space-between;align-items:flex-start;padding:22px 26px 18px;border-bottom:1px solid var(--border, rgba(148, 163, 184, .15))}.praxis-bulk-dialog__title-group{display:flex;align-items:flex-start;gap:14px}.praxis-bulk-dialog__header-icon{color:var(--primary, var(--praxis-primary, #0284c7));font-size:28px;width:28px;height:28px;margin-top:2px}.praxis-bulk-dialog__title{font-size:1.25rem;font-weight:600;margin:0;line-height:1.3;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__subtitle{font-size:.875rem;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin:4px 0 0;line-height:1.45}.praxis-bulk-dialog__content{padding:22px 26px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:20px}.praxis-bulk-dialog__targets-badge{display:inline-flex;align-items:center;gap:10px;padding:10px 16px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;font-size:.875rem;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__targets-badge mat-icon{font-size:18px;width:18px;height:18px;color:var(--primary, var(--praxis-primary, #0284c7))}.praxis-bulk-dialog__section{display:flex;flex-direction:column;gap:20px}.praxis-bulk-dialog__section-title{font-size:1rem;font-weight:600;margin:0;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__totals-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:4px 0 12px}.praxis-bulk-dialog__total-card{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:104px;padding:20px 22px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:14px;transition:background .2s ease,border-color .2s ease;box-sizing:border-box;gap:8px}.praxis-bulk-dialog__total-card .total-label{font-size:.8125rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted-foreground, rgba(148, 163, 184, .85));font-weight:600;margin-bottom:2px}.praxis-bulk-dialog__total-card .total-value{font-size:2rem;font-weight:700;color:var(--foreground, #f8fafc);line-height:1;margin:0;letter-spacing:-.02em}.total-card--executable{border-color:color-mix(in srgb,var(--praxis-success, #10b981) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b))!important}.total-card--executable .total-value{color:var(--praxis-success, #10b981)}.total-card--blocked{border-color:color-mix(in srgb,var(--praxis-error, #ef4444) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b))!important}.total-card--blocked .total-value{color:var(--praxis-error, #ef4444)}.praxis-bulk-dialog__alert{display:flex;align-items:flex-start;gap:14px;padding:18px 22px;border-radius:12px;font-size:.875rem;line-height:1.5}.praxis-bulk-dialog__alert mat-icon{font-size:22px;width:22px;height:22px;flex-shrink:0;margin-top:1px}.praxis-bulk-dialog__alert .alert-content{display:flex;flex-direction:column;gap:4px}.praxis-bulk-dialog__alert .alert-content strong{font-size:.9375rem;font-weight:600;color:inherit}.praxis-bulk-dialog__alert .alert-content p{margin:0;font-size:.8125rem;opacity:.9}.praxis-bulk-dialog__alert--error{background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-error, #ef4444) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--error mat-icon{color:var(--praxis-error, #ef4444)}.praxis-bulk-dialog__alert--warning{background:color-mix(in srgb,var(--praxis-warning, #d97706) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--warning mat-icon{color:var(--praxis-warning, #d97706)}.praxis-bulk-dialog__alert--success{background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-success, #10b981) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--success mat-icon{color:var(--praxis-success, #10b981)}.praxis-bulk-dialog__notice-box{display:flex;align-items:center;gap:12px;padding:16px 20px;background:color-mix(in srgb,var(--praxis-info, #0284c7) 14%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-info, #0284c7) 40%,transparent);border-radius:10px;color:var(--foreground, #f8fafc);font-size:.875rem}.praxis-bulk-dialog__notice-box mat-icon{color:var(--praxis-info, #0284c7)}.praxis-bulk-dialog__diagnostics{margin-top:12px;border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;padding:14px 18px;background:color-mix(in srgb,var(--foreground, #f8fafc) 4%,var(--card, #1e293b))}.diagnostics-title{font-size:.875rem;font-weight:600;margin:0 0 8px;color:var(--praxis-text-primary, var(--foreground, inherit))}.diagnostics-list{display:flex;flex-direction:column;gap:6px;max-height:160px;overflow-y:auto}.diagnostic-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.diagnostic-item mat-icon{font-size:16px;width:16px;height:16px;color:var(--praxis-primary, var(--primary, var(--md-sys-color-primary, #0284c7)))}.diagnostic-item--error{color:var(--praxis-error, #dc2626)}.diagnostic-item--error mat-icon{color:var(--praxis-error, #dc2626)}.diagnostic-target{font-weight:600;margin-right:4px;color:var(--praxis-text-primary, var(--foreground, inherit))}.praxis-bulk-dialog__loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;gap:16px;color:var(--praxis-text-muted, var(--muted-foreground, inherit));font-size:.9375rem}.praxis-bulk-dialog__loading>p,.praxis-bulk-dialog__loading-label{font-weight:600;background-image:var( --pdx-text-shimmer-gradient, linear-gradient( 105deg, var(--md-sys-color-on-surface-variant, #64748b) 0%, var(--md-sys-color-on-surface-variant, #64748b) 28%, var(--md-sys-color-primary, #4f46e5) 44%, var(--md-sys-color-tertiary, #7c3aed) 56%, var(--md-sys-color-on-surface-variant, #64748b) 72%, var(--md-sys-color-on-surface-variant, #64748b) 100% ) );background-size:260% 100%;background-position:200% 50%;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;animation:praxis-bulk-dialog-loading-shimmer var(--pdx-text-shimmer-duration, 2.4s) linear infinite}@keyframes praxis-bulk-dialog-loading-shimmer{0%{background-position:200% 50%}to{background-position:-60% 50%}}@media(prefers-reduced-motion:reduce),(forced-colors:active),print{.praxis-bulk-dialog__loading>p,.praxis-bulk-dialog__loading-label{animation:none;background-image:none;color:var( --pdx-text-shimmer-fallback-color, var(--praxis-text-primary, var(--md-sys-color-on-surface, inherit)) );-webkit-text-fill-color:currentColor}}@media(forced-colors:active){.praxis-bulk-dialog__loading>p,.praxis-bulk-dialog__loading-label{color:CanvasText!important;-webkit-text-fill-color:CanvasText!important}}.praxis-bulk-dialog__actions{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:16px 24px 20px;border-top:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatDialogModule }, { 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: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { 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"] }], encapsulation: i0.ViewEncapsulation.None });
1030
1030
  }
1031
1031
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisBulkOperationDialogComponent, decorators: [{
1032
1032
  type: Component,
@@ -1200,7 +1200,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
1200
1200
  (click)="loadProposalResults(proposalNextCursor()!)"
1201
1201
  [disabled]="loadingProposalResults()"
1202
1202
  >
1203
- {{ loadingProposalResults() ? 'Carregando...' : 'Carregar mais resultados' }}
1203
+ <span [class.praxis-bulk-dialog__loading-label]="loadingProposalResults()">{{ loadingProposalResults() ? 'Carregando...' : 'Carregar mais resultados' }}</span>
1204
1204
  </button>
1205
1205
  }
1206
1206
  </div>
@@ -1299,7 +1299,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
1299
1299
  (click)="loadExecutionResults(executionNextCursor()!)"
1300
1300
  [disabled]="loadingExecutionResults()"
1301
1301
  >
1302
- {{ loadingExecutionResults() ? 'Carregando...' : 'Carregar mais resultados' }}
1302
+ <span [class.praxis-bulk-dialog__loading-label]="loadingExecutionResults()">{{ loadingExecutionResults() ? 'Carregando...' : 'Carregar mais resultados' }}</span>
1303
1303
  </button>
1304
1304
  }
1305
1305
  </div>
@@ -1350,7 +1350,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
1350
1350
  }
1351
1351
  </div>
1352
1352
  </div>
1353
- `, styles: [".cdk-global-overlay-wrapper:has(.praxis-bulk-dialog-panel){display:flex!important;justify-content:center!important;align-items:center!important;padding:24px!important;box-sizing:border-box!important}.cdk-overlay-pane.praxis-bulk-dialog-panel{--mat-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mdc-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mat-dialog-container-shape: 16px;position:relative!important;inset:auto!important;margin:auto!important;display:flex!important;justify-content:center!important;align-items:center!important}.cdk-overlay-pane.praxis-bulk-dialog-panel .mat-mdc-dialog-surface{border-radius:16px;border:1px solid var(--border, var(--praxis-border-subtle, rgba(148, 163, 184, .2)));box-shadow:0 24px 64px #0000008c;background-color:var(--card, var(--praxis-color-surface, #1e293b))!important;color:var(--foreground, #f8fafc)!important;overflow:hidden;width:100%}.praxis-bulk-dialog{display:flex;flex-direction:column;max-height:85vh;width:100%;min-width:600px;max-width:680px;margin:0 auto;color:var(--foreground, var(--praxis-text-primary, #f8fafc));background:transparent;box-sizing:border-box}.praxis-bulk-dialog__header{display:flex;justify-content:space-between;align-items:flex-start;padding:22px 26px 18px;border-bottom:1px solid var(--border, rgba(148, 163, 184, .15))}.praxis-bulk-dialog__title-group{display:flex;align-items:flex-start;gap:14px}.praxis-bulk-dialog__header-icon{color:var(--primary, var(--praxis-primary, #0284c7));font-size:28px;width:28px;height:28px;margin-top:2px}.praxis-bulk-dialog__title{font-size:1.25rem;font-weight:600;margin:0;line-height:1.3;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__subtitle{font-size:.875rem;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin:4px 0 0;line-height:1.45}.praxis-bulk-dialog__content{padding:22px 26px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:20px}.praxis-bulk-dialog__targets-badge{display:inline-flex;align-items:center;gap:10px;padding:10px 16px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;font-size:.875rem;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__targets-badge mat-icon{font-size:18px;width:18px;height:18px;color:var(--primary, var(--praxis-primary, #0284c7))}.praxis-bulk-dialog__section{display:flex;flex-direction:column;gap:20px}.praxis-bulk-dialog__section-title{font-size:1rem;font-weight:600;margin:0;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__totals-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:4px 0 12px}.praxis-bulk-dialog__total-card{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:104px;padding:20px 22px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:14px;transition:background .2s ease,border-color .2s ease;box-sizing:border-box;gap:8px}.praxis-bulk-dialog__total-card .total-label{font-size:.8125rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted-foreground, rgba(148, 163, 184, .85));font-weight:600;margin-bottom:2px}.praxis-bulk-dialog__total-card .total-value{font-size:2rem;font-weight:700;color:var(--foreground, #f8fafc);line-height:1;margin:0;letter-spacing:-.02em}.total-card--executable{border-color:color-mix(in srgb,var(--praxis-success, #10b981) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b))!important}.total-card--executable .total-value{color:var(--praxis-success, #10b981)}.total-card--blocked{border-color:color-mix(in srgb,var(--praxis-error, #ef4444) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b))!important}.total-card--blocked .total-value{color:var(--praxis-error, #ef4444)}.praxis-bulk-dialog__alert{display:flex;align-items:flex-start;gap:14px;padding:18px 22px;border-radius:12px;font-size:.875rem;line-height:1.5}.praxis-bulk-dialog__alert mat-icon{font-size:22px;width:22px;height:22px;flex-shrink:0;margin-top:1px}.praxis-bulk-dialog__alert .alert-content{display:flex;flex-direction:column;gap:4px}.praxis-bulk-dialog__alert .alert-content strong{font-size:.9375rem;font-weight:600;color:inherit}.praxis-bulk-dialog__alert .alert-content p{margin:0;font-size:.8125rem;opacity:.9}.praxis-bulk-dialog__alert--error{background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-error, #ef4444) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--error mat-icon{color:var(--praxis-error, #ef4444)}.praxis-bulk-dialog__alert--warning{background:color-mix(in srgb,var(--praxis-warning, #d97706) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--warning mat-icon{color:var(--praxis-warning, #d97706)}.praxis-bulk-dialog__alert--success{background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-success, #10b981) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--success mat-icon{color:var(--praxis-success, #10b981)}.praxis-bulk-dialog__notice-box{display:flex;align-items:center;gap:12px;padding:16px 20px;background:color-mix(in srgb,var(--praxis-info, #0284c7) 14%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-info, #0284c7) 40%,transparent);border-radius:10px;color:var(--foreground, #f8fafc);font-size:.875rem}.praxis-bulk-dialog__notice-box mat-icon{color:var(--praxis-info, #0284c7)}.praxis-bulk-dialog__diagnostics{margin-top:12px;border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;padding:14px 18px;background:color-mix(in srgb,var(--foreground, #f8fafc) 4%,var(--card, #1e293b))}.diagnostics-title{font-size:.875rem;font-weight:600;margin:0 0 8px;color:var(--praxis-text-primary, var(--foreground, inherit))}.diagnostics-list{display:flex;flex-direction:column;gap:6px;max-height:160px;overflow-y:auto}.diagnostic-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.diagnostic-item mat-icon{font-size:16px;width:16px;height:16px;color:var(--praxis-primary, var(--primary, var(--md-sys-color-primary, #0284c7)))}.diagnostic-item--error{color:var(--praxis-error, #dc2626)}.diagnostic-item--error mat-icon{color:var(--praxis-error, #dc2626)}.diagnostic-target{font-weight:600;margin-right:4px;color:var(--praxis-text-primary, var(--foreground, inherit))}.praxis-bulk-dialog__loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;gap:16px;color:var(--praxis-text-muted, var(--muted-foreground, inherit));font-size:.9375rem}.praxis-bulk-dialog__actions{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:16px 24px 20px;border-top:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))))}\n"] }]
1353
+ `, styles: [".cdk-global-overlay-wrapper:has(.praxis-bulk-dialog-panel){display:flex!important;justify-content:center!important;align-items:center!important;padding:24px!important;box-sizing:border-box!important}.cdk-overlay-pane.praxis-bulk-dialog-panel{--mat-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mdc-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mat-dialog-container-shape: 16px;position:relative!important;inset:auto!important;margin:auto!important;display:flex!important;justify-content:center!important;align-items:center!important}.cdk-overlay-pane.praxis-bulk-dialog-panel .mat-mdc-dialog-surface{border-radius:16px;border:1px solid var(--border, var(--praxis-border-subtle, rgba(148, 163, 184, .2)));box-shadow:0 24px 64px #0000008c;background-color:var(--card, var(--praxis-color-surface, #1e293b))!important;color:var(--foreground, #f8fafc)!important;overflow:hidden;width:100%}.praxis-bulk-dialog{display:flex;flex-direction:column;max-height:85vh;width:100%;min-width:600px;max-width:680px;margin:0 auto;color:var(--foreground, var(--praxis-text-primary, #f8fafc));background:transparent;box-sizing:border-box}.praxis-bulk-dialog__header{display:flex;justify-content:space-between;align-items:flex-start;padding:22px 26px 18px;border-bottom:1px solid var(--border, rgba(148, 163, 184, .15))}.praxis-bulk-dialog__title-group{display:flex;align-items:flex-start;gap:14px}.praxis-bulk-dialog__header-icon{color:var(--primary, var(--praxis-primary, #0284c7));font-size:28px;width:28px;height:28px;margin-top:2px}.praxis-bulk-dialog__title{font-size:1.25rem;font-weight:600;margin:0;line-height:1.3;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__subtitle{font-size:.875rem;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin:4px 0 0;line-height:1.45}.praxis-bulk-dialog__content{padding:22px 26px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:20px}.praxis-bulk-dialog__targets-badge{display:inline-flex;align-items:center;gap:10px;padding:10px 16px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;font-size:.875rem;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__targets-badge mat-icon{font-size:18px;width:18px;height:18px;color:var(--primary, var(--praxis-primary, #0284c7))}.praxis-bulk-dialog__section{display:flex;flex-direction:column;gap:20px}.praxis-bulk-dialog__section-title{font-size:1rem;font-weight:600;margin:0;color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__totals-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:4px 0 12px}.praxis-bulk-dialog__total-card{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:104px;padding:20px 22px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:14px;transition:background .2s ease,border-color .2s ease;box-sizing:border-box;gap:8px}.praxis-bulk-dialog__total-card .total-label{font-size:.8125rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted-foreground, rgba(148, 163, 184, .85));font-weight:600;margin-bottom:2px}.praxis-bulk-dialog__total-card .total-value{font-size:2rem;font-weight:700;color:var(--foreground, #f8fafc);line-height:1;margin:0;letter-spacing:-.02em}.total-card--executable{border-color:color-mix(in srgb,var(--praxis-success, #10b981) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b))!important}.total-card--executable .total-value{color:var(--praxis-success, #10b981)}.total-card--blocked{border-color:color-mix(in srgb,var(--praxis-error, #ef4444) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b))!important}.total-card--blocked .total-value{color:var(--praxis-error, #ef4444)}.praxis-bulk-dialog__alert{display:flex;align-items:flex-start;gap:14px;padding:18px 22px;border-radius:12px;font-size:.875rem;line-height:1.5}.praxis-bulk-dialog__alert mat-icon{font-size:22px;width:22px;height:22px;flex-shrink:0;margin-top:1px}.praxis-bulk-dialog__alert .alert-content{display:flex;flex-direction:column;gap:4px}.praxis-bulk-dialog__alert .alert-content strong{font-size:.9375rem;font-weight:600;color:inherit}.praxis-bulk-dialog__alert .alert-content p{margin:0;font-size:.8125rem;opacity:.9}.praxis-bulk-dialog__alert--error{background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-error, #ef4444) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--error mat-icon{color:var(--praxis-error, #ef4444)}.praxis-bulk-dialog__alert--warning{background:color-mix(in srgb,var(--praxis-warning, #d97706) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--warning mat-icon{color:var(--praxis-warning, #d97706)}.praxis-bulk-dialog__alert--success{background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-success, #10b981) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-dialog__alert--success mat-icon{color:var(--praxis-success, #10b981)}.praxis-bulk-dialog__notice-box{display:flex;align-items:center;gap:12px;padding:16px 20px;background:color-mix(in srgb,var(--praxis-info, #0284c7) 14%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-info, #0284c7) 40%,transparent);border-radius:10px;color:var(--foreground, #f8fafc);font-size:.875rem}.praxis-bulk-dialog__notice-box mat-icon{color:var(--praxis-info, #0284c7)}.praxis-bulk-dialog__diagnostics{margin-top:12px;border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;padding:14px 18px;background:color-mix(in srgb,var(--foreground, #f8fafc) 4%,var(--card, #1e293b))}.diagnostics-title{font-size:.875rem;font-weight:600;margin:0 0 8px;color:var(--praxis-text-primary, var(--foreground, inherit))}.diagnostics-list{display:flex;flex-direction:column;gap:6px;max-height:160px;overflow-y:auto}.diagnostic-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.diagnostic-item mat-icon{font-size:16px;width:16px;height:16px;color:var(--praxis-primary, var(--primary, var(--md-sys-color-primary, #0284c7)))}.diagnostic-item--error{color:var(--praxis-error, #dc2626)}.diagnostic-item--error mat-icon{color:var(--praxis-error, #dc2626)}.diagnostic-target{font-weight:600;margin-right:4px;color:var(--praxis-text-primary, var(--foreground, inherit))}.praxis-bulk-dialog__loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;gap:16px;color:var(--praxis-text-muted, var(--muted-foreground, inherit));font-size:.9375rem}.praxis-bulk-dialog__loading>p,.praxis-bulk-dialog__loading-label{font-weight:600;background-image:var( --pdx-text-shimmer-gradient, linear-gradient( 105deg, var(--md-sys-color-on-surface-variant, #64748b) 0%, var(--md-sys-color-on-surface-variant, #64748b) 28%, var(--md-sys-color-primary, #4f46e5) 44%, var(--md-sys-color-tertiary, #7c3aed) 56%, var(--md-sys-color-on-surface-variant, #64748b) 72%, var(--md-sys-color-on-surface-variant, #64748b) 100% ) );background-size:260% 100%;background-position:200% 50%;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;animation:praxis-bulk-dialog-loading-shimmer var(--pdx-text-shimmer-duration, 2.4s) linear infinite}@keyframes praxis-bulk-dialog-loading-shimmer{0%{background-position:200% 50%}to{background-position:-60% 50%}}@media(prefers-reduced-motion:reduce),(forced-colors:active),print{.praxis-bulk-dialog__loading>p,.praxis-bulk-dialog__loading-label{animation:none;background-image:none;color:var( --pdx-text-shimmer-fallback-color, var(--praxis-text-primary, var(--md-sys-color-on-surface, inherit)) );-webkit-text-fill-color:currentColor}}@media(forced-colors:active){.praxis-bulk-dialog__loading>p,.praxis-bulk-dialog__loading-label{color:CanvasText!important;-webkit-text-fill-color:CanvasText!important}}.praxis-bulk-dialog__actions{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:16px 24px 20px;border-top:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))))}\n"] }]
1354
1354
  }], ctorParameters: () => [{ type: undefined, decorators: [{
1355
1355
  type: Inject,
1356
1356
  args: [MAT_DIALOG_DATA]
@@ -2305,7 +2305,7 @@ class PraxisBulkEditDialogComponent {
2305
2305
  (click)="loadProposalResults(proposalNextCursor()!)"
2306
2306
  [disabled]="loadingProposalResults()"
2307
2307
  >
2308
- {{ loadingProposalResults() ? 'Carregando...' : 'Carregar mais resultados' }}
2308
+ <span [class.praxis-bulk-edit-dialog__loading-label]="loadingProposalResults()">{{ loadingProposalResults() ? 'Carregando...' : 'Carregar mais resultados' }}</span>
2309
2309
  </button>
2310
2310
  }
2311
2311
  </div>
@@ -2400,7 +2400,7 @@ class PraxisBulkEditDialogComponent {
2400
2400
  (click)="loadExecutionResults(executionNextCursor()!)"
2401
2401
  [disabled]="loadingExecutionResults()"
2402
2402
  >
2403
- {{ loadingExecutionResults() ? 'Carregando...' : 'Carregar mais resultados' }}
2403
+ <span [class.praxis-bulk-edit-dialog__loading-label]="loadingExecutionResults()">{{ loadingExecutionResults() ? 'Carregando...' : 'Carregar mais resultados' }}</span>
2404
2404
  </button>
2405
2405
  }
2406
2406
  </div>
@@ -2451,7 +2451,7 @@ class PraxisBulkEditDialogComponent {
2451
2451
  }
2452
2452
  </div>
2453
2453
  </div>
2454
- `, isInline: true, styles: [".cdk-global-overlay-wrapper:has(.praxis-bulk-dialog-panel){display:flex!important;justify-content:center!important;align-items:center!important;padding:24px!important;box-sizing:border-box!important}.cdk-overlay-pane.praxis-bulk-dialog-panel{--mat-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mdc-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mat-dialog-container-shape: 16px;position:relative!important;inset:auto!important;margin:auto!important;display:flex!important;justify-content:center!important;align-items:center!important}.cdk-overlay-pane.praxis-bulk-dialog-panel .mat-mdc-dialog-surface{border-radius:16px;border:1px solid var(--border, var(--praxis-border-subtle, rgba(148, 163, 184, .2)));box-shadow:0 24px 64px #0000008c;background-color:var(--card, var(--praxis-color-surface, #1e293b))!important;color:var(--foreground, #f8fafc)!important;overflow:hidden;width:100%}.praxis-bulk-edit-dialog{display:flex;flex-direction:column;max-height:85vh;width:100%;min-width:600px;max-width:680px;margin:0 auto;color:var(--foreground, var(--praxis-text-primary, #f8fafc));background:transparent;box-sizing:border-box}.praxis-bulk-edit-dialog__header{display:flex;justify-content:space-between;align-items:flex-start;padding:22px 26px 18px;border-bottom:1px solid var(--border, rgba(148, 163, 184, .15))}.praxis-bulk-edit-dialog__title-group{display:flex;align-items:flex-start;gap:14px}.praxis-bulk-edit-dialog__header-icon{color:var(--primary, var(--praxis-primary, #0284c7));font-size:28px;width:28px;height:28px;margin-top:2px}.praxis-bulk-edit-dialog__title{font-size:1.25rem;font-weight:600;margin:0;line-height:1.3;color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__subtitle{font-size:.875rem;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin:4px 0 0;line-height:1.45}.praxis-bulk-edit-dialog__content{padding:22px 26px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:20px}.praxis-bulk-edit-dialog__targets-badge{display:inline-flex;align-items:center;gap:10px;padding:10px 16px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;font-size:.875rem;color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__targets-badge mat-icon{font-size:18px;width:18px;height:18px;color:var(--primary, var(--praxis-primary, #0284c7))}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.section-title{font-size:1rem;font-weight:600;margin:0;color:var(--praxis-text-primary, var(--foreground, var(--md-sys-color-on-surface, inherit)))}.praxis-bulk-edit-dialog__empty-box{display:flex;flex-direction:column;align-items:center;padding:32px 16px;background:color-mix(in srgb,var(--praxis-text-primary, var(--foreground, currentColor)) 2%,transparent);border:1px dashed var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .25))));border-radius:8px;color:var(--praxis-text-muted, var(--muted-foreground, var(--md-sys-color-on-surface-variant, inherit)));gap:8px}.praxis-bulk-edit-dialog__empty-box mat-icon{font-size:32px;width:32px;height:32px;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.field-rows-container{display:flex;flex-direction:column;gap:12px}.field-row{display:flex;align-items:center;gap:12px}.field-select{flex:1.3}.field-tech-name{font-size:.75rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit));margin-left:6px;opacity:.75}.operator-select{flex:.9}.value-input{flex:1.4}.clear-notice{flex:1.4;display:flex;align-items:center;gap:8px;font-size:.8125rem;color:var(--praxis-warning, #d97706);background:color-mix(in srgb,var(--praxis-warning, #d97706) 12%,transparent);border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 30%,transparent);padding:8px 12px;border-radius:6px}.clear-notice mat-icon{font-size:16px;width:16px;height:16px}.praxis-bulk-edit-dialog__section{display:flex;flex-direction:column;gap:20px}.praxis-bulk-edit-dialog__totals-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:4px 0 12px}.total-card{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:104px;padding:20px 22px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:14px;transition:background .2s ease,border-color .2s ease;box-sizing:border-box;gap:8px}.total-card .total-label{font-size:.8125rem;text-transform:uppercase;letter-spacing:.05em;font-weight:600;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin-bottom:2px}.total-card .total-value{font-size:2rem;font-weight:700;color:var(--foreground, #f8fafc);line-height:1;margin:0;letter-spacing:-.02em}.total-card--executable{border-color:color-mix(in srgb,var(--praxis-success, #10b981) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b))!important}.total-card--executable .total-value{color:var(--praxis-success, #10b981)}.total-card--blocked{border-color:color-mix(in srgb,var(--praxis-error, #ef4444) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b))!important}.total-card--blocked .total-value{color:var(--praxis-error, #ef4444)}.praxis-bulk-edit-dialog__alert{display:flex;align-items:flex-start;gap:14px;padding:18px 22px;border-radius:12px;font-size:.875rem;line-height:1.5}.praxis-bulk-edit-dialog__alert mat-icon{font-size:22px;width:22px;height:22px;flex-shrink:0;margin-top:1px}.praxis-bulk-edit-dialog__alert .alert-content{display:flex;flex-direction:column;gap:4px}.praxis-bulk-edit-dialog__alert .alert-content strong{font-size:.9375rem;font-weight:600;color:inherit}.praxis-bulk-edit-dialog__alert .alert-content p{margin:0;font-size:.8125rem;opacity:.9}.praxis-bulk-edit-dialog__alert--error{background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-error, #ef4444) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--error mat-icon{color:var(--praxis-error, #ef4444)}.praxis-bulk-edit-dialog__alert--warning{background:color-mix(in srgb,var(--praxis-warning, #d97706) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--warning mat-icon{color:var(--praxis-warning, #d97706)}.praxis-bulk-edit-dialog__alert--success{background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-success, #10b981) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--success mat-icon{color:var(--praxis-success, #10b981)}.praxis-bulk-edit-dialog__diagnostics{margin-top:12px;padding:12px 16px;background:color-mix(in srgb,var(--praxis-text-primary, var(--foreground, currentColor)) 3%,transparent);border:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))));border-radius:8px;display:flex;flex-direction:column;gap:8px}.diagnostics-title{font-size:.875rem;font-weight:600;margin:0 0 4px;color:var(--praxis-text-primary, var(--foreground, inherit))}.diagnostic-item{display:flex;align-items:flex-start;gap:8px;font-size:.8125rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.diagnostic-item mat-icon{font-size:16px;width:16px;height:16px;margin-top:2px;flex-shrink:0;color:var(--praxis-primary, var(--primary, var(--md-sys-color-primary, #0284c7)))}.diagnostic-item--error{color:var(--praxis-error, #ef4444)}.diagnostic-item--error mat-icon{color:var(--praxis-error, #ef4444)}.diagnostic-content{display:flex;flex-wrap:wrap;gap:4px}.diagnostic-target{font-weight:600;color:var(--praxis-text-primary, var(--foreground, inherit))}.praxis-bulk-edit-dialog__loading{display:flex;flex-direction:column;align-items:center;padding:40px;gap:16px;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.praxis-bulk-edit-dialog__actions{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:18px 24px 22px;border-top:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatDialogModule }, { 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: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatFormFieldModule }], encapsulation: i0.ViewEncapsulation.None });
2454
+ `, isInline: true, styles: [".cdk-global-overlay-wrapper:has(.praxis-bulk-dialog-panel){display:flex!important;justify-content:center!important;align-items:center!important;padding:24px!important;box-sizing:border-box!important}.cdk-overlay-pane.praxis-bulk-dialog-panel{--mat-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mdc-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mat-dialog-container-shape: 16px;position:relative!important;inset:auto!important;margin:auto!important;display:flex!important;justify-content:center!important;align-items:center!important}.cdk-overlay-pane.praxis-bulk-dialog-panel .mat-mdc-dialog-surface{border-radius:16px;border:1px solid var(--border, var(--praxis-border-subtle, rgba(148, 163, 184, .2)));box-shadow:0 24px 64px #0000008c;background-color:var(--card, var(--praxis-color-surface, #1e293b))!important;color:var(--foreground, #f8fafc)!important;overflow:hidden;width:100%}.praxis-bulk-edit-dialog{display:flex;flex-direction:column;max-height:85vh;width:100%;min-width:600px;max-width:680px;margin:0 auto;color:var(--foreground, var(--praxis-text-primary, #f8fafc));background:transparent;box-sizing:border-box}.praxis-bulk-edit-dialog__header{display:flex;justify-content:space-between;align-items:flex-start;padding:22px 26px 18px;border-bottom:1px solid var(--border, rgba(148, 163, 184, .15))}.praxis-bulk-edit-dialog__title-group{display:flex;align-items:flex-start;gap:14px}.praxis-bulk-edit-dialog__header-icon{color:var(--primary, var(--praxis-primary, #0284c7));font-size:28px;width:28px;height:28px;margin-top:2px}.praxis-bulk-edit-dialog__title{font-size:1.25rem;font-weight:600;margin:0;line-height:1.3;color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__subtitle{font-size:.875rem;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin:4px 0 0;line-height:1.45}.praxis-bulk-edit-dialog__content{padding:22px 26px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:20px}.praxis-bulk-edit-dialog__targets-badge{display:inline-flex;align-items:center;gap:10px;padding:10px 16px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;font-size:.875rem;color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__targets-badge mat-icon{font-size:18px;width:18px;height:18px;color:var(--primary, var(--praxis-primary, #0284c7))}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.section-title{font-size:1rem;font-weight:600;margin:0;color:var(--praxis-text-primary, var(--foreground, var(--md-sys-color-on-surface, inherit)))}.praxis-bulk-edit-dialog__empty-box{display:flex;flex-direction:column;align-items:center;padding:32px 16px;background:color-mix(in srgb,var(--praxis-text-primary, var(--foreground, currentColor)) 2%,transparent);border:1px dashed var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .25))));border-radius:8px;color:var(--praxis-text-muted, var(--muted-foreground, var(--md-sys-color-on-surface-variant, inherit)));gap:8px}.praxis-bulk-edit-dialog__empty-box mat-icon{font-size:32px;width:32px;height:32px;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.field-rows-container{display:flex;flex-direction:column;gap:12px}.field-row{display:flex;align-items:center;gap:12px}.field-select{flex:1.3}.field-tech-name{font-size:.75rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit));margin-left:6px;opacity:.75}.operator-select{flex:.9}.value-input{flex:1.4}.clear-notice{flex:1.4;display:flex;align-items:center;gap:8px;font-size:.8125rem;color:var(--praxis-warning, #d97706);background:color-mix(in srgb,var(--praxis-warning, #d97706) 12%,transparent);border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 30%,transparent);padding:8px 12px;border-radius:6px}.clear-notice mat-icon{font-size:16px;width:16px;height:16px}.praxis-bulk-edit-dialog__section{display:flex;flex-direction:column;gap:20px}.praxis-bulk-edit-dialog__totals-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:4px 0 12px}.total-card{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:104px;padding:20px 22px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:14px;transition:background .2s ease,border-color .2s ease;box-sizing:border-box;gap:8px}.total-card .total-label{font-size:.8125rem;text-transform:uppercase;letter-spacing:.05em;font-weight:600;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin-bottom:2px}.total-card .total-value{font-size:2rem;font-weight:700;color:var(--foreground, #f8fafc);line-height:1;margin:0;letter-spacing:-.02em}.total-card--executable{border-color:color-mix(in srgb,var(--praxis-success, #10b981) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b))!important}.total-card--executable .total-value{color:var(--praxis-success, #10b981)}.total-card--blocked{border-color:color-mix(in srgb,var(--praxis-error, #ef4444) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b))!important}.total-card--blocked .total-value{color:var(--praxis-error, #ef4444)}.praxis-bulk-edit-dialog__alert{display:flex;align-items:flex-start;gap:14px;padding:18px 22px;border-radius:12px;font-size:.875rem;line-height:1.5}.praxis-bulk-edit-dialog__alert mat-icon{font-size:22px;width:22px;height:22px;flex-shrink:0;margin-top:1px}.praxis-bulk-edit-dialog__alert .alert-content{display:flex;flex-direction:column;gap:4px}.praxis-bulk-edit-dialog__alert .alert-content strong{font-size:.9375rem;font-weight:600;color:inherit}.praxis-bulk-edit-dialog__alert .alert-content p{margin:0;font-size:.8125rem;opacity:.9}.praxis-bulk-edit-dialog__alert--error{background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-error, #ef4444) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--error mat-icon{color:var(--praxis-error, #ef4444)}.praxis-bulk-edit-dialog__alert--warning{background:color-mix(in srgb,var(--praxis-warning, #d97706) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--warning mat-icon{color:var(--praxis-warning, #d97706)}.praxis-bulk-edit-dialog__alert--success{background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-success, #10b981) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--success mat-icon{color:var(--praxis-success, #10b981)}.praxis-bulk-edit-dialog__diagnostics{margin-top:12px;padding:12px 16px;background:color-mix(in srgb,var(--praxis-text-primary, var(--foreground, currentColor)) 3%,transparent);border:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))));border-radius:8px;display:flex;flex-direction:column;gap:8px}.diagnostics-title{font-size:.875rem;font-weight:600;margin:0 0 4px;color:var(--praxis-text-primary, var(--foreground, inherit))}.diagnostic-item{display:flex;align-items:flex-start;gap:8px;font-size:.8125rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.diagnostic-item mat-icon{font-size:16px;width:16px;height:16px;margin-top:2px;flex-shrink:0;color:var(--praxis-primary, var(--primary, var(--md-sys-color-primary, #0284c7)))}.diagnostic-item--error{color:var(--praxis-error, #ef4444)}.diagnostic-item--error mat-icon{color:var(--praxis-error, #ef4444)}.diagnostic-content{display:flex;flex-wrap:wrap;gap:4px}.diagnostic-target{font-weight:600;color:var(--praxis-text-primary, var(--foreground, inherit))}.praxis-bulk-edit-dialog__loading{display:flex;flex-direction:column;align-items:center;padding:40px;gap:16px;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.praxis-bulk-edit-dialog__loading>p,.praxis-bulk-edit-dialog__loading-label{font-weight:600;background-image:var( --pdx-text-shimmer-gradient, linear-gradient( 105deg, var(--md-sys-color-on-surface-variant, #64748b) 0%, var(--md-sys-color-on-surface-variant, #64748b) 28%, var(--md-sys-color-primary, #4f46e5) 44%, var(--md-sys-color-tertiary, #7c3aed) 56%, var(--md-sys-color-on-surface-variant, #64748b) 72%, var(--md-sys-color-on-surface-variant, #64748b) 100% ) );background-size:260% 100%;background-position:200% 50%;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;animation:praxis-bulk-edit-loading-shimmer var(--pdx-text-shimmer-duration, 2.4s) linear infinite}@keyframes praxis-bulk-edit-loading-shimmer{0%{background-position:200% 50%}to{background-position:-60% 50%}}@media(prefers-reduced-motion:reduce),(forced-colors:active),print{.praxis-bulk-edit-dialog__loading>p,.praxis-bulk-edit-dialog__loading-label{animation:none;background-image:none;color:var( --pdx-text-shimmer-fallback-color, var(--praxis-text-primary, var(--md-sys-color-on-surface, inherit)) );-webkit-text-fill-color:currentColor}}@media(forced-colors:active){.praxis-bulk-edit-dialog__loading>p,.praxis-bulk-edit-dialog__loading-label{color:CanvasText!important;-webkit-text-fill-color:CanvasText!important}}.praxis-bulk-edit-dialog__actions{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:18px 24px 22px;border-top:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatDialogModule }, { 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: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "component", type: i3$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatFormFieldModule }], encapsulation: i0.ViewEncapsulation.None });
2455
2455
  }
2456
2456
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisBulkEditDialogComponent, decorators: [{
2457
2457
  type: Component,
@@ -2701,7 +2701,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2701
2701
  (click)="loadProposalResults(proposalNextCursor()!)"
2702
2702
  [disabled]="loadingProposalResults()"
2703
2703
  >
2704
- {{ loadingProposalResults() ? 'Carregando...' : 'Carregar mais resultados' }}
2704
+ <span [class.praxis-bulk-edit-dialog__loading-label]="loadingProposalResults()">{{ loadingProposalResults() ? 'Carregando...' : 'Carregar mais resultados' }}</span>
2705
2705
  </button>
2706
2706
  }
2707
2707
  </div>
@@ -2796,7 +2796,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2796
2796
  (click)="loadExecutionResults(executionNextCursor()!)"
2797
2797
  [disabled]="loadingExecutionResults()"
2798
2798
  >
2799
- {{ loadingExecutionResults() ? 'Carregando...' : 'Carregar mais resultados' }}
2799
+ <span [class.praxis-bulk-edit-dialog__loading-label]="loadingExecutionResults()">{{ loadingExecutionResults() ? 'Carregando...' : 'Carregar mais resultados' }}</span>
2800
2800
  </button>
2801
2801
  }
2802
2802
  </div>
@@ -2847,7 +2847,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2847
2847
  }
2848
2848
  </div>
2849
2849
  </div>
2850
- `, styles: [".cdk-global-overlay-wrapper:has(.praxis-bulk-dialog-panel){display:flex!important;justify-content:center!important;align-items:center!important;padding:24px!important;box-sizing:border-box!important}.cdk-overlay-pane.praxis-bulk-dialog-panel{--mat-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mdc-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mat-dialog-container-shape: 16px;position:relative!important;inset:auto!important;margin:auto!important;display:flex!important;justify-content:center!important;align-items:center!important}.cdk-overlay-pane.praxis-bulk-dialog-panel .mat-mdc-dialog-surface{border-radius:16px;border:1px solid var(--border, var(--praxis-border-subtle, rgba(148, 163, 184, .2)));box-shadow:0 24px 64px #0000008c;background-color:var(--card, var(--praxis-color-surface, #1e293b))!important;color:var(--foreground, #f8fafc)!important;overflow:hidden;width:100%}.praxis-bulk-edit-dialog{display:flex;flex-direction:column;max-height:85vh;width:100%;min-width:600px;max-width:680px;margin:0 auto;color:var(--foreground, var(--praxis-text-primary, #f8fafc));background:transparent;box-sizing:border-box}.praxis-bulk-edit-dialog__header{display:flex;justify-content:space-between;align-items:flex-start;padding:22px 26px 18px;border-bottom:1px solid var(--border, rgba(148, 163, 184, .15))}.praxis-bulk-edit-dialog__title-group{display:flex;align-items:flex-start;gap:14px}.praxis-bulk-edit-dialog__header-icon{color:var(--primary, var(--praxis-primary, #0284c7));font-size:28px;width:28px;height:28px;margin-top:2px}.praxis-bulk-edit-dialog__title{font-size:1.25rem;font-weight:600;margin:0;line-height:1.3;color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__subtitle{font-size:.875rem;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin:4px 0 0;line-height:1.45}.praxis-bulk-edit-dialog__content{padding:22px 26px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:20px}.praxis-bulk-edit-dialog__targets-badge{display:inline-flex;align-items:center;gap:10px;padding:10px 16px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;font-size:.875rem;color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__targets-badge mat-icon{font-size:18px;width:18px;height:18px;color:var(--primary, var(--praxis-primary, #0284c7))}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.section-title{font-size:1rem;font-weight:600;margin:0;color:var(--praxis-text-primary, var(--foreground, var(--md-sys-color-on-surface, inherit)))}.praxis-bulk-edit-dialog__empty-box{display:flex;flex-direction:column;align-items:center;padding:32px 16px;background:color-mix(in srgb,var(--praxis-text-primary, var(--foreground, currentColor)) 2%,transparent);border:1px dashed var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .25))));border-radius:8px;color:var(--praxis-text-muted, var(--muted-foreground, var(--md-sys-color-on-surface-variant, inherit)));gap:8px}.praxis-bulk-edit-dialog__empty-box mat-icon{font-size:32px;width:32px;height:32px;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.field-rows-container{display:flex;flex-direction:column;gap:12px}.field-row{display:flex;align-items:center;gap:12px}.field-select{flex:1.3}.field-tech-name{font-size:.75rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit));margin-left:6px;opacity:.75}.operator-select{flex:.9}.value-input{flex:1.4}.clear-notice{flex:1.4;display:flex;align-items:center;gap:8px;font-size:.8125rem;color:var(--praxis-warning, #d97706);background:color-mix(in srgb,var(--praxis-warning, #d97706) 12%,transparent);border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 30%,transparent);padding:8px 12px;border-radius:6px}.clear-notice mat-icon{font-size:16px;width:16px;height:16px}.praxis-bulk-edit-dialog__section{display:flex;flex-direction:column;gap:20px}.praxis-bulk-edit-dialog__totals-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:4px 0 12px}.total-card{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:104px;padding:20px 22px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:14px;transition:background .2s ease,border-color .2s ease;box-sizing:border-box;gap:8px}.total-card .total-label{font-size:.8125rem;text-transform:uppercase;letter-spacing:.05em;font-weight:600;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin-bottom:2px}.total-card .total-value{font-size:2rem;font-weight:700;color:var(--foreground, #f8fafc);line-height:1;margin:0;letter-spacing:-.02em}.total-card--executable{border-color:color-mix(in srgb,var(--praxis-success, #10b981) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b))!important}.total-card--executable .total-value{color:var(--praxis-success, #10b981)}.total-card--blocked{border-color:color-mix(in srgb,var(--praxis-error, #ef4444) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b))!important}.total-card--blocked .total-value{color:var(--praxis-error, #ef4444)}.praxis-bulk-edit-dialog__alert{display:flex;align-items:flex-start;gap:14px;padding:18px 22px;border-radius:12px;font-size:.875rem;line-height:1.5}.praxis-bulk-edit-dialog__alert mat-icon{font-size:22px;width:22px;height:22px;flex-shrink:0;margin-top:1px}.praxis-bulk-edit-dialog__alert .alert-content{display:flex;flex-direction:column;gap:4px}.praxis-bulk-edit-dialog__alert .alert-content strong{font-size:.9375rem;font-weight:600;color:inherit}.praxis-bulk-edit-dialog__alert .alert-content p{margin:0;font-size:.8125rem;opacity:.9}.praxis-bulk-edit-dialog__alert--error{background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-error, #ef4444) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--error mat-icon{color:var(--praxis-error, #ef4444)}.praxis-bulk-edit-dialog__alert--warning{background:color-mix(in srgb,var(--praxis-warning, #d97706) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--warning mat-icon{color:var(--praxis-warning, #d97706)}.praxis-bulk-edit-dialog__alert--success{background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-success, #10b981) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--success mat-icon{color:var(--praxis-success, #10b981)}.praxis-bulk-edit-dialog__diagnostics{margin-top:12px;padding:12px 16px;background:color-mix(in srgb,var(--praxis-text-primary, var(--foreground, currentColor)) 3%,transparent);border:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))));border-radius:8px;display:flex;flex-direction:column;gap:8px}.diagnostics-title{font-size:.875rem;font-weight:600;margin:0 0 4px;color:var(--praxis-text-primary, var(--foreground, inherit))}.diagnostic-item{display:flex;align-items:flex-start;gap:8px;font-size:.8125rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.diagnostic-item mat-icon{font-size:16px;width:16px;height:16px;margin-top:2px;flex-shrink:0;color:var(--praxis-primary, var(--primary, var(--md-sys-color-primary, #0284c7)))}.diagnostic-item--error{color:var(--praxis-error, #ef4444)}.diagnostic-item--error mat-icon{color:var(--praxis-error, #ef4444)}.diagnostic-content{display:flex;flex-wrap:wrap;gap:4px}.diagnostic-target{font-weight:600;color:var(--praxis-text-primary, var(--foreground, inherit))}.praxis-bulk-edit-dialog__loading{display:flex;flex-direction:column;align-items:center;padding:40px;gap:16px;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.praxis-bulk-edit-dialog__actions{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:18px 24px 22px;border-top:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))))}\n"] }]
2850
+ `, styles: [".cdk-global-overlay-wrapper:has(.praxis-bulk-dialog-panel){display:flex!important;justify-content:center!important;align-items:center!important;padding:24px!important;box-sizing:border-box!important}.cdk-overlay-pane.praxis-bulk-dialog-panel{--mat-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mdc-dialog-container-color: var(--card, var(--praxis-color-surface, #1e293b)) !important;--mat-dialog-container-shape: 16px;position:relative!important;inset:auto!important;margin:auto!important;display:flex!important;justify-content:center!important;align-items:center!important}.cdk-overlay-pane.praxis-bulk-dialog-panel .mat-mdc-dialog-surface{border-radius:16px;border:1px solid var(--border, var(--praxis-border-subtle, rgba(148, 163, 184, .2)));box-shadow:0 24px 64px #0000008c;background-color:var(--card, var(--praxis-color-surface, #1e293b))!important;color:var(--foreground, #f8fafc)!important;overflow:hidden;width:100%}.praxis-bulk-edit-dialog{display:flex;flex-direction:column;max-height:85vh;width:100%;min-width:600px;max-width:680px;margin:0 auto;color:var(--foreground, var(--praxis-text-primary, #f8fafc));background:transparent;box-sizing:border-box}.praxis-bulk-edit-dialog__header{display:flex;justify-content:space-between;align-items:flex-start;padding:22px 26px 18px;border-bottom:1px solid var(--border, rgba(148, 163, 184, .15))}.praxis-bulk-edit-dialog__title-group{display:flex;align-items:flex-start;gap:14px}.praxis-bulk-edit-dialog__header-icon{color:var(--primary, var(--praxis-primary, #0284c7));font-size:28px;width:28px;height:28px;margin-top:2px}.praxis-bulk-edit-dialog__title{font-size:1.25rem;font-weight:600;margin:0;line-height:1.3;color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__subtitle{font-size:.875rem;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin:4px 0 0;line-height:1.45}.praxis-bulk-edit-dialog__content{padding:22px 26px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:20px}.praxis-bulk-edit-dialog__targets-badge{display:inline-flex;align-items:center;gap:10px;padding:10px 16px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:10px;font-size:.875rem;color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__targets-badge mat-icon{font-size:18px;width:18px;height:18px;color:var(--primary, var(--praxis-primary, #0284c7))}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.section-title{font-size:1rem;font-weight:600;margin:0;color:var(--praxis-text-primary, var(--foreground, var(--md-sys-color-on-surface, inherit)))}.praxis-bulk-edit-dialog__empty-box{display:flex;flex-direction:column;align-items:center;padding:32px 16px;background:color-mix(in srgb,var(--praxis-text-primary, var(--foreground, currentColor)) 2%,transparent);border:1px dashed var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .25))));border-radius:8px;color:var(--praxis-text-muted, var(--muted-foreground, var(--md-sys-color-on-surface-variant, inherit)));gap:8px}.praxis-bulk-edit-dialog__empty-box mat-icon{font-size:32px;width:32px;height:32px;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.field-rows-container{display:flex;flex-direction:column;gap:12px}.field-row{display:flex;align-items:center;gap:12px}.field-select{flex:1.3}.field-tech-name{font-size:.75rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit));margin-left:6px;opacity:.75}.operator-select{flex:.9}.value-input{flex:1.4}.clear-notice{flex:1.4;display:flex;align-items:center;gap:8px;font-size:.8125rem;color:var(--praxis-warning, #d97706);background:color-mix(in srgb,var(--praxis-warning, #d97706) 12%,transparent);border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 30%,transparent);padding:8px 12px;border-radius:6px}.clear-notice mat-icon{font-size:16px;width:16px;height:16px}.praxis-bulk-edit-dialog__section{display:flex;flex-direction:column;gap:20px}.praxis-bulk-edit-dialog__totals-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:4px 0 12px}.total-card{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:104px;padding:20px 22px;background:color-mix(in srgb,var(--foreground, #f8fafc) 6%,var(--card, #1e293b));border:1px solid var(--border, rgba(148, 163, 184, .2));border-radius:14px;transition:background .2s ease,border-color .2s ease;box-sizing:border-box;gap:8px}.total-card .total-label{font-size:.8125rem;text-transform:uppercase;letter-spacing:.05em;font-weight:600;color:var(--muted-foreground, rgba(148, 163, 184, .85));margin-bottom:2px}.total-card .total-value{font-size:2rem;font-weight:700;color:var(--foreground, #f8fafc);line-height:1;margin:0;letter-spacing:-.02em}.total-card--executable{border-color:color-mix(in srgb,var(--praxis-success, #10b981) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b))!important}.total-card--executable .total-value{color:var(--praxis-success, #10b981)}.total-card--blocked{border-color:color-mix(in srgb,var(--praxis-error, #ef4444) 50%,transparent)!important;background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b))!important}.total-card--blocked .total-value{color:var(--praxis-error, #ef4444)}.praxis-bulk-edit-dialog__alert{display:flex;align-items:flex-start;gap:14px;padding:18px 22px;border-radius:12px;font-size:.875rem;line-height:1.5}.praxis-bulk-edit-dialog__alert mat-icon{font-size:22px;width:22px;height:22px;flex-shrink:0;margin-top:1px}.praxis-bulk-edit-dialog__alert .alert-content{display:flex;flex-direction:column;gap:4px}.praxis-bulk-edit-dialog__alert .alert-content strong{font-size:.9375rem;font-weight:600;color:inherit}.praxis-bulk-edit-dialog__alert .alert-content p{margin:0;font-size:.8125rem;opacity:.9}.praxis-bulk-edit-dialog__alert--error{background:color-mix(in srgb,var(--praxis-error, #ef4444) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-error, #ef4444) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--error mat-icon{color:var(--praxis-error, #ef4444)}.praxis-bulk-edit-dialog__alert--warning{background:color-mix(in srgb,var(--praxis-warning, #d97706) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-warning, #d97706) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--warning mat-icon{color:var(--praxis-warning, #d97706)}.praxis-bulk-edit-dialog__alert--success{background:color-mix(in srgb,var(--praxis-success, #10b981) 16%,var(--card, #1e293b));border:1px solid color-mix(in srgb,var(--praxis-success, #10b981) 45%,transparent);color:var(--foreground, #f8fafc)}.praxis-bulk-edit-dialog__alert--success mat-icon{color:var(--praxis-success, #10b981)}.praxis-bulk-edit-dialog__diagnostics{margin-top:12px;padding:12px 16px;background:color-mix(in srgb,var(--praxis-text-primary, var(--foreground, currentColor)) 3%,transparent);border:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))));border-radius:8px;display:flex;flex-direction:column;gap:8px}.diagnostics-title{font-size:.875rem;font-weight:600;margin:0 0 4px;color:var(--praxis-text-primary, var(--foreground, inherit))}.diagnostic-item{display:flex;align-items:flex-start;gap:8px;font-size:.8125rem;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.diagnostic-item mat-icon{font-size:16px;width:16px;height:16px;margin-top:2px;flex-shrink:0;color:var(--praxis-primary, var(--primary, var(--md-sys-color-primary, #0284c7)))}.diagnostic-item--error{color:var(--praxis-error, #ef4444)}.diagnostic-item--error mat-icon{color:var(--praxis-error, #ef4444)}.diagnostic-content{display:flex;flex-wrap:wrap;gap:4px}.diagnostic-target{font-weight:600;color:var(--praxis-text-primary, var(--foreground, inherit))}.praxis-bulk-edit-dialog__loading{display:flex;flex-direction:column;align-items:center;padding:40px;gap:16px;color:var(--praxis-text-muted, var(--muted-foreground, inherit))}.praxis-bulk-edit-dialog__loading>p,.praxis-bulk-edit-dialog__loading-label{font-weight:600;background-image:var( --pdx-text-shimmer-gradient, linear-gradient( 105deg, var(--md-sys-color-on-surface-variant, #64748b) 0%, var(--md-sys-color-on-surface-variant, #64748b) 28%, var(--md-sys-color-primary, #4f46e5) 44%, var(--md-sys-color-tertiary, #7c3aed) 56%, var(--md-sys-color-on-surface-variant, #64748b) 72%, var(--md-sys-color-on-surface-variant, #64748b) 100% ) );background-size:260% 100%;background-position:200% 50%;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;animation:praxis-bulk-edit-loading-shimmer var(--pdx-text-shimmer-duration, 2.4s) linear infinite}@keyframes praxis-bulk-edit-loading-shimmer{0%{background-position:200% 50%}to{background-position:-60% 50%}}@media(prefers-reduced-motion:reduce),(forced-colors:active),print{.praxis-bulk-edit-dialog__loading>p,.praxis-bulk-edit-dialog__loading-label{animation:none;background-image:none;color:var( --pdx-text-shimmer-fallback-color, var(--praxis-text-primary, var(--md-sys-color-on-surface, inherit)) );-webkit-text-fill-color:currentColor}}@media(forced-colors:active){.praxis-bulk-edit-dialog__loading>p,.praxis-bulk-edit-dialog__loading-label{color:CanvasText!important;-webkit-text-fill-color:CanvasText!important}}.praxis-bulk-edit-dialog__actions{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:18px 24px 22px;border-top:1px solid var(--praxis-border-subtle, var(--border, var(--md-sys-color-outline-variant, rgba(148, 163, 184, .2))))}\n"] }]
2851
2851
  }], ctorParameters: () => [{ type: undefined, decorators: [{
2852
2852
  type: Inject,
2853
2853
  args: [MAT_DIALOG_DATA]
@@ -5140,6 +5140,7 @@ const PRAXIS_CRUD_AUTHORING_I18N_CONFIG = {
5140
5140
  'crud.authoring.filters.inlineFieldInput': 'Adicionar campo inline',
5141
5141
  'crud.authoring.filters.inlineFieldPlaceholder': 'ex.: status, prioridade',
5142
5142
  'crud.authoring.filters.inlineAdd': 'Adicionar campo',
5143
+ 'crud.authoring.filters.suggestInlineFields': 'Sugerir campos principais',
5143
5144
  'crud.authoring.filters.inlineEmpty': 'Nenhum campo inline fixado. O runtime usará a configuração padrão do schema.',
5144
5145
  'crud.authoring.filters.availableFields': 'Sugestões de campos disponíveis',
5145
5146
  'crud.authoring.filters.quickGroup': 'Atalhos de filtro rápido (Quick Filters)',
@@ -5148,6 +5149,10 @@ const PRAXIS_CRUD_AUTHORING_I18N_CONFIG = {
5148
5149
  'crud.authoring.filters.quickMode.disabled': 'Ocultar filtros rápidos',
5149
5150
  'crud.authoring.filters.quickMode.custom': 'Personalizar chips de filtro rápido',
5150
5151
  'crud.authoring.filters.addQuickFilter': 'Adicionar filtro rápido',
5152
+ 'crud.authoring.filters.generateQuickFromOptions': 'Gerar chips pelas opções de status',
5153
+ 'crud.authoring.filters.generatedAllLabel': 'Todos',
5154
+ 'crud.authoring.filters.generatedActiveLabel': 'Ativos',
5155
+ 'crud.authoring.filters.generatedInactiveLabel': 'Inativos',
5151
5156
  'crud.authoring.filters.removeQuickFilter': 'Remover filtro rápido',
5152
5157
  'crud.authoring.filters.quickEmpty': 'Nenhum filtro rápido configurado.',
5153
5158
  'crud.authoring.filters.quickId': 'Identificador',
@@ -5499,6 +5504,7 @@ const PRAXIS_CRUD_AUTHORING_I18N_CONFIG = {
5499
5504
  'crud.authoring.filters.inlineFieldInput': 'Add inline field',
5500
5505
  'crud.authoring.filters.inlineFieldPlaceholder': 'e.g. status, priority',
5501
5506
  'crud.authoring.filters.inlineAdd': 'Add field',
5507
+ 'crud.authoring.filters.suggestInlineFields': 'Suggest main filter fields',
5502
5508
  'crud.authoring.filters.inlineEmpty': 'No pinned inline fields. Runtime will use the default schema configuration.',
5503
5509
  'crud.authoring.filters.availableFields': 'Available field suggestions',
5504
5510
  'crud.authoring.filters.quickGroup': 'Quick filter shortcuts (Quick Filters)',
@@ -5507,6 +5513,10 @@ const PRAXIS_CRUD_AUTHORING_I18N_CONFIG = {
5507
5513
  'crud.authoring.filters.quickMode.disabled': 'Hide quick filters',
5508
5514
  'crud.authoring.filters.quickMode.custom': 'Customize quick filter chips',
5509
5515
  'crud.authoring.filters.addQuickFilter': 'Add quick filter',
5516
+ 'crud.authoring.filters.generateQuickFromOptions': 'Generate chips from status options',
5517
+ 'crud.authoring.filters.generatedAllLabel': 'All',
5518
+ 'crud.authoring.filters.generatedActiveLabel': 'Active',
5519
+ 'crud.authoring.filters.generatedInactiveLabel': 'Inactive',
5510
5520
  'crud.authoring.filters.removeQuickFilter': 'Remove quick filter',
5511
5521
  'crud.authoring.filters.quickEmpty': 'No quick filters configured.',
5512
5522
  'crud.authoring.filters.quickId': 'Identifier',
@@ -5652,6 +5662,7 @@ class CrudMetadataEditorComponent {
5652
5662
  initialDocument = signal(createCrudAuthoringDocument({}), ...(ngDevMode ? [{ debugName: "initialDocument" }] : /* istanbul ignore next */ []));
5653
5663
  lastExternalSignature = null;
5654
5664
  lastLoadedResourceSignature = '';
5665
+ lastNonEmptyResourcePath = '';
5655
5666
  lastCatalogEndpointSignature = null;
5656
5667
  schemaSub;
5657
5668
  filterSchemaSub;
@@ -5783,6 +5794,25 @@ class CrudMetadataEditorComponent {
5783
5794
  merged.set(name, meta);
5784
5795
  }
5785
5796
  }
5797
+ const catalogRes = this.currentCatalogResource();
5798
+ const catalogMetas = mapCatalogFieldsToMetadata([
5799
+ ...(catalogRes?.responseFields ?? []),
5800
+ ...(catalogRes?.filterFields ?? []),
5801
+ ]);
5802
+ for (const catMeta of catalogMetas) {
5803
+ const name = String(catMeta?.name || '').trim();
5804
+ if (!name)
5805
+ continue;
5806
+ const existing = merged.get(name);
5807
+ if (!existing) {
5808
+ merged.set(name, catMeta);
5809
+ }
5810
+ else if ((!Array.isArray(existing.options) || existing.options.length === 0) &&
5811
+ Array.isArray(catMeta.options) &&
5812
+ catMeta.options.length > 0) {
5813
+ merged.set(name, { ...existing, options: catMeta.options });
5814
+ }
5815
+ }
5786
5816
  for (const column of this.resolvedInheritedColumns()) {
5787
5817
  const name = String(column?.field || '').trim();
5788
5818
  if (name && !merged.has(name)) {
@@ -5790,6 +5820,7 @@ class CrudMetadataEditorComponent {
5790
5820
  name,
5791
5821
  label: String(column.header || name).trim() || name,
5792
5822
  controlType: FieldControlType.INPUT,
5823
+ ...(column.type ? { type: column.type } : {}),
5793
5824
  });
5794
5825
  }
5795
5826
  }
@@ -5800,10 +5831,27 @@ class CrudMetadataEditorComponent {
5800
5831
  name,
5801
5832
  label: String(column.header || name).trim() || name,
5802
5833
  controlType: FieldControlType.INPUT,
5834
+ ...(column.type ? { type: column.type } : {}),
5803
5835
  });
5804
5836
  }
5805
5837
  }
5806
- return Array.from(merged.values());
5838
+ return Array.from(merged.values()).map((meta) => {
5839
+ if (Array.isArray(meta.options) && meta.options.length > 0) {
5840
+ return meta;
5841
+ }
5842
+ const domainVals = this.availableFieldDomainValues(meta.name);
5843
+ if (domainVals.length === 0) {
5844
+ return meta;
5845
+ }
5846
+ return {
5847
+ ...meta,
5848
+ options: domainVals.map((opt) => ({
5849
+ value: opt.key,
5850
+ text: opt.label,
5851
+ label: opt.label,
5852
+ })),
5853
+ };
5854
+ });
5807
5855
  }, ...(ngDevMode ? [{ debugName: "inlineTableFieldMetadata" }] : /* istanbul ignore next */ []));
5808
5856
  availableResourceFieldOptions = computed(() => {
5809
5857
  const seen = new Set();
@@ -5920,12 +5968,16 @@ class CrudMetadataEditorComponent {
5920
5968
  }
5921
5969
  extractCatalogFieldEntry(entry) {
5922
5970
  if (typeof entry === 'string') {
5923
- return { name: entry, label: entry };
5971
+ const name = entry.trim();
5972
+ return { name, label: humanizeCatalogFieldName(name) || name };
5924
5973
  }
5925
5974
  if (entry && typeof entry === 'object') {
5926
5975
  const record = entry;
5927
5976
  const name = String(record.name ?? '').trim();
5928
- const label = String(record.label ?? name).trim() || name;
5977
+ const rawLabel = String(record.label ?? '').trim();
5978
+ const label = rawLabel && rawLabel !== name
5979
+ ? rawLabel
5980
+ : humanizeCatalogFieldName(name) || name;
5929
5981
  return { name, label };
5930
5982
  }
5931
5983
  return { name: '', label: '' };
@@ -6231,6 +6283,11 @@ class CrudMetadataEditorComponent {
6231
6283
  const parsed = parseLegacyOrCrudDocument(seed);
6232
6284
  this.initialDocument.set(parsed);
6233
6285
  this.currentDocument.set(parsed);
6286
+ this.lastNonEmptyResourcePath = String(parsed.metadata.resource?.path || '')
6287
+ .trim()
6288
+ .replace(/^\/+|\/+$/g, '')
6289
+ .replace(/^api\//i, '')
6290
+ .toLowerCase();
6234
6291
  // Observe the supplied snapshot with its external resource, before local edits.
6235
6292
  this.providedSnapshotOwner();
6236
6293
  this.synchronizeSchemaScope();
@@ -6281,7 +6338,12 @@ class CrudMetadataEditorComponent {
6281
6338
  return this.buildPayload();
6282
6339
  }
6283
6340
  reset() {
6284
- this.currentDocument.set(this.initialDocument());
6341
+ const initial = this.initialDocument();
6342
+ this.currentDocument.set(initial);
6343
+ this.lastNonEmptyResourcePath = String(initial.metadata.resource?.path || '')
6344
+ .trim()
6345
+ .replace(/^\/+|\/+$/g, '')
6346
+ .toLowerCase();
6285
6347
  this.synchronizeSchemaScope();
6286
6348
  this.initialValueDrafts.set({});
6287
6349
  this.userExpandedActionPanels.set({});
@@ -8180,7 +8242,7 @@ class CrudMetadataEditorComponent {
8180
8242
  if (!k || seen.has(k))
8181
8243
  continue;
8182
8244
  seen.add(k);
8183
- opts.push({ key: k, label: k });
8245
+ opts.push({ key: k, label: humanizeCatalogFieldName(k) || k });
8184
8246
  }
8185
8247
  if (opts.length > 0) {
8186
8248
  return opts;
@@ -8249,7 +8311,7 @@ class CrudMetadataEditorComponent {
8249
8311
  if (alreadyMapped) {
8250
8312
  return;
8251
8313
  }
8252
- const variant = toneCycle[idx % toneCycle.length];
8314
+ const variant = this.inferKpiCardVariantForDomainKey(opt.key, opt.label, idx, toneCycle);
8253
8315
  const mappedTone = variant === 'primary'
8254
8316
  ? 'info'
8255
8317
  : variant === 'default'
@@ -8272,6 +8334,13 @@ class CrudMetadataEditorComponent {
8272
8334
  };
8273
8335
  });
8274
8336
  }
8337
+ inferKpiCardVariantForDomainKey(key, label, fallbackIndex, fallbackCycle) {
8338
+ const inferred = inferDomainSemanticTone(key, label);
8339
+ if (inferred !== 'default') {
8340
+ return inferred;
8341
+ }
8342
+ return fallbackCycle[fallbackIndex % fallbackCycle.length] ?? 'default';
8343
+ }
8275
8344
  formatByKeyAccessor(key) {
8276
8345
  const trimmed = String(key ?? '').trim();
8277
8346
  if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(trimmed)) {
@@ -8402,6 +8471,173 @@ class CrudMetadataEditorComponent {
8402
8471
  this.addInlineFilterField(field);
8403
8472
  }
8404
8473
  }
8474
+ /**
8475
+ * Recomenda até 4 campos de alta utilidade operacional para a barra de filtros inline
8476
+ * (busca textual/identificador, status/situação, categoria/tipo/opções de domínio e data/período),
8477
+ * excluindo chaves técnicas primárias e campos de texto longo/observação.
8478
+ */
8479
+ recommendedInlineFilterFields() {
8480
+ const candidates = this.availableFilterFieldOptions();
8481
+ if (candidates.length === 0) {
8482
+ return [];
8483
+ }
8484
+ const idFieldLower = (this.resourceIdField().trim() || 'id').toLowerCase();
8485
+ const metaByName = new Map();
8486
+ for (const meta of this.inlineTableFieldMetadata()) {
8487
+ const key = String(meta?.name || '').trim().toLowerCase();
8488
+ if (key) {
8489
+ metaByName.set(key, meta);
8490
+ }
8491
+ }
8492
+ const explicitFilterFields = new Set(this.schemaResolvedFilterFieldsSignal().map((f) => f.field.toLowerCase()));
8493
+ for (const catField of this.currentCatalogResource()?.filterFields ?? []) {
8494
+ const { name } = this.extractCatalogFieldEntry(catField);
8495
+ if (name) {
8496
+ explicitFilterFields.add(name.toLowerCase());
8497
+ }
8498
+ }
8499
+ const scored = [];
8500
+ candidates.forEach((opt, index) => {
8501
+ const field = String(opt.field || '').trim();
8502
+ if (!field) {
8503
+ return;
8504
+ }
8505
+ const lower = field.toLowerCase();
8506
+ const fieldTokens = field
8507
+ .replace(/([a-z0-9])([A-Z])/g, '$1_$2')
8508
+ .normalize('NFD')
8509
+ .replace(/[\u0300-\u036f]/g, '')
8510
+ .toLowerCase()
8511
+ .replace(/[^a-z0-9]+/g, '_')
8512
+ .split('_')
8513
+ .filter(Boolean);
8514
+ const hasFieldToken = (...candidates) => candidates.some((c) => fieldTokens.includes(c));
8515
+ if (lower === 'id' ||
8516
+ lower === idFieldLower ||
8517
+ lower === 'uuid' ||
8518
+ lower === 'guid' ||
8519
+ hasFieldToken('password', 'senha', 'token', 'secret', 'hash', 'avatar', 'foto', 'imagem', 'image', 'thumbnail', 'tenant', 'version', 'versao', 'rowversion', 'etag', 'deleted')) {
8520
+ return;
8521
+ }
8522
+ const meta = metaByName.get(lower);
8523
+ const controlType = String(meta?.controlType || '').toLowerCase();
8524
+ const rawType = String(meta?.type || '').toLowerCase();
8525
+ const tokens = `${field} ${opt.header || ''}`
8526
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
8527
+ .normalize('NFD')
8528
+ .replace(/[\u0300-\u036f]/g, '')
8529
+ .toLowerCase();
8530
+ if (controlType === 'textarea' ||
8531
+ /\b(observac\w*|descric\w*|description|comentari\w*|notes?|detalh\w*|historic\w*|justificativa|resumo|biografia|conteudo|mensagem)\b/.test(tokens)) {
8532
+ return;
8533
+ }
8534
+ const hasDomainOptions = this.availableFieldDomainValues(field).length > 0 ||
8535
+ (Array.isArray(meta?.options) && meta.options.length > 0);
8536
+ const isForeignKeyIdWithoutOptions = fieldTokens.length > 1 &&
8537
+ fieldTokens[fieldTokens.length - 1] === 'id' &&
8538
+ !hasDomainOptions &&
8539
+ controlType !== 'select' &&
8540
+ controlType !== 'autocomplete' &&
8541
+ controlType !== 'entitylookup';
8542
+ if (isForeignKeyIdWithoutOptions) {
8543
+ return;
8544
+ }
8545
+ const isExplicitFilter = explicitFilterFields.has(lower);
8546
+ let role = 'other';
8547
+ let score = isExplicitFilter ? 45 : 30;
8548
+ if (/\b(nome|name|titulo|title|razao\s*social|busca|search|query|codigo|code|protocolo|matricula|sku|cpf|cnpj|documento|email)\b/.test(tokens)) {
8549
+ role = 'search';
8550
+ score = 95 + (isExplicitFilter ? 10 : 0);
8551
+ }
8552
+ else if (/\b(status|situacao|state|estado|ativo|active|enabled|stage|etapa|fase|prioridade|priority|severidade|severity)\b/.test(tokens)) {
8553
+ role = 'status';
8554
+ score = 90 + (hasDomainOptions ? 8 : 0) + (isExplicitFilter ? 5 : 0);
8555
+ }
8556
+ else if (hasDomainOptions ||
8557
+ controlType === 'select' ||
8558
+ controlType === 'multiselect' ||
8559
+ controlType === 'radio' ||
8560
+ controlType === 'toggle' ||
8561
+ controlType === 'checkbox' ||
8562
+ rawType === 'boolean' ||
8563
+ /\b(tipo|type|categoria|category|setor|departamento|department|uf|perfil|role|origem|source|canal|channel|grupo|group|classificac\w*|modalidade)\b/.test(tokens)) {
8564
+ role = 'category';
8565
+ score = 80 + (hasDomainOptions ? 8 : 0) + (isExplicitFilter ? 5 : 0);
8566
+ }
8567
+ else if (controlType.includes('date') ||
8568
+ rawType.includes('date') ||
8569
+ /\b(data|date|competencia|periodo|vencimento|emissao|criacao|created|updated|atualizacao|vigencia|inicio|fim)\b/.test(tokens)) {
8570
+ role = 'date';
8571
+ score = 70 + (isExplicitFilter ? 5 : 0);
8572
+ }
8573
+ scored.push({ field, role, score, index });
8574
+ });
8575
+ if (scored.length === 0) {
8576
+ return [];
8577
+ }
8578
+ const usedRoles = new Set();
8579
+ const ranked = scored
8580
+ .map((item) => {
8581
+ return item;
8582
+ })
8583
+ .sort((a, b) => b.score - a.score || a.index - b.index);
8584
+ const selected = [];
8585
+ // Pass 1: pick top candidate for each primary role to ensure balanced filter bar
8586
+ for (const item of ranked) {
8587
+ if (selected.length >= 4)
8588
+ break;
8589
+ if (item.role !== 'other' && !usedRoles.has(item.role)) {
8590
+ usedRoles.add(item.role);
8591
+ selected.push(item.field);
8592
+ }
8593
+ }
8594
+ // Pass 2: fill remaining slots up to 4 by highest score
8595
+ for (const item of ranked) {
8596
+ if (selected.length >= 4)
8597
+ break;
8598
+ if (!selected.includes(item.field)) {
8599
+ selected.push(item.field);
8600
+ }
8601
+ }
8602
+ return selected;
8603
+ }
8604
+ canSuggestInlineFilterFields() {
8605
+ if (this.isReadonly()) {
8606
+ return false;
8607
+ }
8608
+ const existing = this.filterBarInlineFields();
8609
+ if (existing.length >= 4) {
8610
+ return false;
8611
+ }
8612
+ const existingLower = new Set(existing.map((f) => f.toLowerCase()));
8613
+ const recommended = this.recommendedInlineFilterFields();
8614
+ if (recommended.length === 0) {
8615
+ return false;
8616
+ }
8617
+ return recommended.some((field) => !existingLower.has(field.toLowerCase()));
8618
+ }
8619
+ applyRecommendedInlineFilterFields() {
8620
+ const recommended = this.recommendedInlineFilterFields();
8621
+ if (recommended.length === 0) {
8622
+ return;
8623
+ }
8624
+ const existing = this.filterBarInlineFields();
8625
+ const existingLower = new Set(existing.map((f) => f.toLowerCase()));
8626
+ const merged = [...existing];
8627
+ for (const field of recommended) {
8628
+ if (merged.length >= 4) {
8629
+ break;
8630
+ }
8631
+ if (!existingLower.has(field.toLowerCase())) {
8632
+ existingLower.add(field.toLowerCase());
8633
+ merged.push(field);
8634
+ }
8635
+ }
8636
+ this.updateFilterBar((current) => ({
8637
+ ...current,
8638
+ inlineFields: merged,
8639
+ }));
8640
+ }
8405
8641
  setFilterBarQuickMode(mode) {
8406
8642
  this.quickFilterExpressionDrafts.set({});
8407
8643
  if (mode === 'inherit') {
@@ -8424,6 +8660,147 @@ class CrudMetadataEditorComponent {
8424
8660
  quickFilters: [...existing],
8425
8661
  }));
8426
8662
  }
8663
+ quickFilterDomainPresetField() {
8664
+ const kpiField = this.kpiBandGroupByField().trim();
8665
+ const filterFields = this.availableFilterFieldOptions();
8666
+ const entityFields = this.availableEntityFieldOptions();
8667
+ const candidateNames = Array.from(new Set([
8668
+ ...filterFields.map((f) => f.field),
8669
+ ...entityFields.map((f) => f.field),
8670
+ ]));
8671
+ if (kpiField &&
8672
+ candidateNames.some((n) => n.toLowerCase() === kpiField.toLowerCase()) &&
8673
+ this.availableFieldDomainValues(kpiField).length > 0) {
8674
+ return kpiField;
8675
+ }
8676
+ const preferredOrder = [
8677
+ 'status',
8678
+ 'situacao',
8679
+ 'situacaofuncional',
8680
+ 'ativo',
8681
+ 'active',
8682
+ 'enabled',
8683
+ 'stage',
8684
+ 'phase',
8685
+ 'prioridade',
8686
+ 'priority',
8687
+ 'severidade',
8688
+ 'severity',
8689
+ 'tipo',
8690
+ 'type',
8691
+ 'categoria',
8692
+ 'category',
8693
+ ];
8694
+ for (const preferred of preferredOrder) {
8695
+ const matched = candidateNames.find((n) => n.toLowerCase() === preferred);
8696
+ if (matched && this.availableFieldDomainValues(matched).length > 0) {
8697
+ return matched;
8698
+ }
8699
+ }
8700
+ for (const name of candidateNames) {
8701
+ if (this.availableFieldDomainValues(name).length > 0) {
8702
+ return name;
8703
+ }
8704
+ }
8705
+ return '';
8706
+ }
8707
+ quickFilterDomainPresetOptions(preferredField) {
8708
+ const field = (preferredField?.trim() || this.quickFilterDomainPresetField()).trim();
8709
+ if (!field) {
8710
+ return [];
8711
+ }
8712
+ return this.availableFieldDomainValues(field);
8713
+ }
8714
+ /**
8715
+ * Gera atalhos de filtro rápido (`filterBar.quickFilters`) a partir das opções de domínio
8716
+ * (enum/status ou boolean) do campo principal de status/filtro do recurso, preservando
8717
+ * chips já customizados pelo autor.
8718
+ */
8719
+ generateQuickFiltersFromDomainOptions(preferredField) {
8720
+ const targetField = (preferredField?.trim() || this.quickFilterDomainPresetField()).trim();
8721
+ const domainOptions = this.quickFilterDomainPresetOptions(targetField);
8722
+ if (!targetField || domainOptions.length === 0) {
8723
+ return;
8724
+ }
8725
+ this.quickFilterExpressionDrafts.set({});
8726
+ this.updateFilterBar((current) => {
8727
+ const existing = Array.isArray(current.quickFilters)
8728
+ ? [...current.quickFilters]
8729
+ : [];
8730
+ const hasClearChip = existing.some((qf) => qf.id === 'all' ||
8731
+ (qf.filter &&
8732
+ typeof qf.filter === 'object' &&
8733
+ !Array.isArray(qf.filter) &&
8734
+ Object.keys(qf.filter).length === 0));
8735
+ const nextList = hasClearChip
8736
+ ? [...existing]
8737
+ : [
8738
+ {
8739
+ id: 'all',
8740
+ label: this.tx('crud.authoring.filters.generatedAllLabel', 'All'),
8741
+ filter: {},
8742
+ },
8743
+ ...existing,
8744
+ ];
8745
+ const isBooleanPair = domainOptions.length === 2 &&
8746
+ domainOptions.every((opt) => /^(true|false)$/i.test(opt.key));
8747
+ const itemsToGenerate = isBooleanPair
8748
+ ? [
8749
+ {
8750
+ id: 'active',
8751
+ label: this.tx('crud.authoring.filters.generatedActiveLabel', 'Active'),
8752
+ rawVal: 'true',
8753
+ },
8754
+ {
8755
+ id: 'inactive',
8756
+ label: this.tx('crud.authoring.filters.generatedInactiveLabel', 'Inactive'),
8757
+ rawVal: 'false',
8758
+ },
8759
+ ]
8760
+ : domainOptions.map((opt) => ({
8761
+ id: opt.key
8762
+ .toLowerCase()
8763
+ .normalize('NFD')
8764
+ .replace(/[\u0300-\u036f]/g, '')
8765
+ .replace(/[^a-z0-9_-]+/g, '-')
8766
+ .replace(/^-+|-+$/g, ''),
8767
+ label: opt.label && opt.label !== opt.key
8768
+ ? opt.label
8769
+ : humanizeCatalogFieldName(opt.key) || opt.key,
8770
+ rawVal: opt.key,
8771
+ }));
8772
+ for (const item of itemsToGenerate) {
8773
+ const coercedVal = coerceFilterScalarValue(item.rawVal);
8774
+ const alreadyMapped = nextList.some((qf) => {
8775
+ if (qf.id === item.id || qf.id === `qf-${item.id}`) {
8776
+ return true;
8777
+ }
8778
+ if (qf.filter &&
8779
+ typeof qf.filter === 'object' &&
8780
+ !Array.isArray(qf.filter)) {
8781
+ const filterRecord = qf.filter;
8782
+ if (Object.prototype.hasOwnProperty.call(filterRecord, targetField) &&
8783
+ String(filterRecord[targetField]) === String(coercedVal)) {
8784
+ return true;
8785
+ }
8786
+ }
8787
+ return false;
8788
+ });
8789
+ if (alreadyMapped) {
8790
+ continue;
8791
+ }
8792
+ nextList.push({
8793
+ id: item.id || `qf-${nextList.length + 1}`,
8794
+ label: item.label,
8795
+ filter: { [targetField]: coercedVal },
8796
+ });
8797
+ }
8798
+ return {
8799
+ ...current,
8800
+ quickFilters: nextList,
8801
+ };
8802
+ });
8803
+ }
8427
8804
  addQuickFilter() {
8428
8805
  const list = [...this.filterBarQuickFilters()];
8429
8806
  list.push({
@@ -8624,13 +9001,114 @@ class CrudMetadataEditorComponent {
8624
9001
  return fallback;
8625
9002
  }
8626
9003
  setResourceField(field, value) {
8627
- this.updateMetadata((metadata) => ({
8628
- ...metadata,
8629
- resource: {
8630
- ...(metadata.resource || { path: '' }),
8631
- [field]: typeof value === 'string' ? value : value ?? undefined,
8632
- },
8633
- }));
9004
+ this.updateMetadata((metadata) => {
9005
+ const nextValue = typeof value === 'string' ? value : value ?? undefined;
9006
+ const currentMetadataPath = String(metadata.resource?.path || '')
9007
+ .trim()
9008
+ .replace(/^\/+|\/+$/g, '')
9009
+ .replace(/^api\//i, '')
9010
+ .toLowerCase();
9011
+ const prevPath = currentMetadataPath || this.lastNonEmptyResourcePath;
9012
+ const nextPath = field === 'path'
9013
+ ? String(nextValue || '')
9014
+ .trim()
9015
+ .replace(/^\/+|\/+$/g, '')
9016
+ .replace(/^api\//i, '')
9017
+ .toLowerCase()
9018
+ : prevPath;
9019
+ const isSwitchingResourcePath = field === 'path' && prevPath.length > 0 && nextPath.length > 0 && prevPath !== nextPath;
9020
+ if (field === 'path' && nextPath.length > 0) {
9021
+ this.lastNonEmptyResourcePath = nextPath;
9022
+ }
9023
+ return {
9024
+ ...metadata,
9025
+ resource: {
9026
+ ...(metadata.resource || { path: '' }),
9027
+ ...(isSwitchingResourcePath ? { schemaPath: undefined } : {}),
9028
+ [field]: nextValue,
9029
+ },
9030
+ ...(isSwitchingResourcePath
9031
+ ? {
9032
+ filterCriteria: undefined,
9033
+ queryContext: undefined,
9034
+ ...(metadata.filterBar
9035
+ ? {
9036
+ filterBar: {
9037
+ ...metadata.filterBar,
9038
+ inlineFields: [],
9039
+ quickFilters: undefined,
9040
+ },
9041
+ }
9042
+ : {}),
9043
+ table: metadata.table
9044
+ ? {
9045
+ ...metadata.table,
9046
+ columns: [],
9047
+ columnProjection: undefined,
9048
+ ...(metadata.table.toolbar?.filters
9049
+ ? {
9050
+ toolbar: {
9051
+ ...metadata.table.toolbar,
9052
+ filters: {
9053
+ ...metadata.table.toolbar.filters,
9054
+ quickFilters: undefined,
9055
+ },
9056
+ },
9057
+ }
9058
+ : {}),
9059
+ ...(metadata.table.behavior
9060
+ ? {
9061
+ behavior: {
9062
+ ...metadata.table.behavior,
9063
+ ...(metadata.table.behavior.sorting
9064
+ ? {
9065
+ sorting: {
9066
+ ...metadata.table.behavior.sorting,
9067
+ defaultSort: undefined,
9068
+ },
9069
+ }
9070
+ : {}),
9071
+ ...(metadata.table.behavior.filtering?.advancedFilters
9072
+ ? {
9073
+ filtering: {
9074
+ ...metadata.table.behavior.filtering,
9075
+ advancedFilters: {
9076
+ ...metadata.table.behavior.filtering.advancedFilters,
9077
+ schemaUrl: undefined,
9078
+ ...(metadata.table.behavior.filtering.advancedFilters.settings
9079
+ ? {
9080
+ settings: {
9081
+ ...metadata.table.behavior.filtering.advancedFilters.settings,
9082
+ alwaysVisibleFields: undefined,
9083
+ selectedFieldIds: undefined,
9084
+ alwaysVisibleFieldMetadataOverrides: undefined,
9085
+ },
9086
+ }
9087
+ : {}),
9088
+ },
9089
+ },
9090
+ }
9091
+ : {}),
9092
+ },
9093
+ }
9094
+ : {}),
9095
+ ...(metadata.table.meta
9096
+ ? {
9097
+ meta: {
9098
+ ...metadata.table.meta,
9099
+ idField: undefined,
9100
+ schemaId: undefined,
9101
+ serverHash: undefined,
9102
+ resourcePath: undefined,
9103
+ },
9104
+ }
9105
+ : {}),
9106
+ }
9107
+ : { columns: [] },
9108
+ }
9109
+ : {}),
9110
+ };
9111
+ });
8634
9112
  }
8635
9113
  setPageHeaderField(field, value) {
8636
9114
  const strVal = typeof value === 'string' ? value : String(value ?? '');
@@ -9030,8 +9508,11 @@ class CrudMetadataEditorComponent {
9030
9508
  if (!rawKey || seen.has(rawKey))
9031
9509
  continue;
9032
9510
  seen.add(rawKey);
9033
- const rawLabel = String(opt?.value ?? opt?.label ?? rawKey).trim() || rawKey;
9034
- opts.push({ key: rawKey, label: rawLabel });
9511
+ const rawLabel = String(opt?.value ?? opt?.label ?? '').trim();
9512
+ const label = rawLabel && rawLabel !== rawKey
9513
+ ? rawLabel
9514
+ : humanizeCatalogFieldName(rawKey) || rawKey;
9515
+ opts.push({ key: rawKey, label });
9035
9516
  }
9036
9517
  if (opts.length > 0) {
9037
9518
  map[name] = opts;
@@ -9464,62 +9945,63 @@ class CrudMetadataEditorComponent {
9464
9945
  {{ sectionStatusLabel('connection') }}
9465
9946
  </span>
9466
9947
  </div>
9467
- <div class="editor-grid editor-grid--2col">
9468
- <praxis-resource-quick-connect
9469
- class="editor-field--full"
9470
- data-testid="crud-editor-resource-path"
9471
- [resourcePath]="resourcePath()"
9472
- (resourcePathChange)="setResourceField('path', $event)"
9473
- (resourceSelected)="onCatalogResourceSelected($event)"
9474
- [endpointKey]="resourceEndpointKeyValue()"
9475
- [apiUrlEntry]="resourceApiUrlEntry()"
9476
- intent="crud"
9477
- [label]="tx('crud.authoring.connection.resourcePath', 'Resource')"
9478
- [disabled]="isReadonly()"
9479
- />
9480
- <mat-form-field appearance="outline">
9481
- <mat-label>{{ tx('crud.authoring.connection.idField', 'Identifier field') }}</mat-label>
9482
- <input
9483
- matInput
9484
- data-testid="crud-editor-resource-idField"
9485
- [matAutocomplete]="idFieldAuto"
9486
- [ngModel]="resourceIdField()"
9487
- (ngModelChange)="setResourceField('idField', $event)"
9488
- (focus)="ensureCatalogResourcesLoaded()"
9489
- [disabled]="isReadonly()"
9490
- />
9491
- <mat-autocomplete #idFieldAuto="matAutocomplete">
9492
- @for (item of filteredIdFieldOptions(); track item.field) {
9493
- <mat-option [value]="item.field">
9494
- <div class="endpoint-option-row">
9495
- <div class="endpoint-option-copy">
9496
- <span class="endpoint-option-path">{{ item.field }}</span>
9497
- @if (item.header && item.header !== item.field) {
9498
- <span class="endpoint-option-meta">{{ item.header }}</span>
9499
- }
9948
+ <praxis-resource-quick-connect
9949
+ class="editor-field--full"
9950
+ data-testid="crud-editor-resource-path"
9951
+ [resourcePath]="resourcePath()"
9952
+ (resourcePathChange)="setResourceField('path', $event)"
9953
+ (resourceSelected)="onCatalogResourceSelected($event)"
9954
+ [endpointKey]="resourceEndpointKeyValue()"
9955
+ [apiUrlEntry]="resourceApiUrlEntry()"
9956
+ intent="crud"
9957
+ [label]="tx('crud.authoring.connection.resourcePath', 'Resource')"
9958
+ [disabled]="isReadonly()"
9959
+ >
9960
+ <div class="editor-grid editor-grid--2col">
9961
+ <mat-form-field appearance="outline">
9962
+ <mat-label>{{ tx('crud.authoring.connection.idField', 'Identifier field') }}</mat-label>
9963
+ <input
9964
+ matInput
9965
+ data-testid="crud-editor-resource-idField"
9966
+ [matAutocomplete]="idFieldAuto"
9967
+ [ngModel]="resourceIdField()"
9968
+ (ngModelChange)="setResourceField('idField', $event)"
9969
+ (focus)="ensureCatalogResourcesLoaded()"
9970
+ [disabled]="isReadonly()"
9971
+ />
9972
+ <mat-autocomplete #idFieldAuto="matAutocomplete">
9973
+ @for (item of filteredIdFieldOptions(); track item.field) {
9974
+ <mat-option [value]="item.field">
9975
+ <div class="endpoint-option-row">
9976
+ <div class="endpoint-option-copy">
9977
+ <span class="endpoint-option-path">{{ item.field }}</span>
9978
+ @if (item.header && item.header !== item.field) {
9979
+ <span class="endpoint-option-meta">{{ item.header }}</span>
9980
+ }
9981
+ </div>
9500
9982
  </div>
9501
- </div>
9502
- </mat-option>
9503
- }
9504
- </mat-autocomplete>
9505
- </mat-form-field>
9506
- <mat-form-field appearance="outline">
9507
- <mat-label>{{ tx('crud.authoring.connection.endpointKey', 'Endpoint/API') }}</mat-label>
9508
- <input
9509
- matInput
9510
- data-testid="crud-editor-resource-endpointKey"
9511
- [matAutocomplete]="endpointKeyAuto"
9512
- [ngModel]="resourceEndpointKey()"
9513
- (ngModelChange)="setResourceField('endpointKey', $event)"
9514
- [disabled]="isReadonly()"
9515
- />
9516
- <mat-autocomplete #endpointKeyAuto="matAutocomplete">
9517
- @for (key of filteredResourceEndpointKeys(); track key) {
9518
- <mat-option [value]="key">{{ key }}</mat-option>
9519
- }
9520
- </mat-autocomplete>
9521
- </mat-form-field>
9522
- </div>
9983
+ </mat-option>
9984
+ }
9985
+ </mat-autocomplete>
9986
+ </mat-form-field>
9987
+ <mat-form-field appearance="outline">
9988
+ <mat-label>{{ tx('crud.authoring.connection.endpointKey', 'Endpoint/API') }}</mat-label>
9989
+ <input
9990
+ matInput
9991
+ data-testid="crud-editor-resource-endpointKey"
9992
+ [matAutocomplete]="endpointKeyAuto"
9993
+ [ngModel]="resourceEndpointKey()"
9994
+ (ngModelChange)="setResourceField('endpointKey', $event)"
9995
+ [disabled]="isReadonly()"
9996
+ />
9997
+ <mat-autocomplete #endpointKeyAuto="matAutocomplete">
9998
+ @for (key of filteredResourceEndpointKeys(); track key) {
9999
+ <mat-option [value]="key">{{ key }}</mat-option>
10000
+ }
10001
+ </mat-autocomplete>
10002
+ </mat-form-field>
10003
+ </div>
10004
+ </praxis-resource-quick-connect>
9523
10005
 
9524
10006
  @if (hasReadOnlyMutatingActionsWarning()) {
9525
10007
  <div class="editor-focus" data-testid="crud-editor-readonly-warning">
@@ -9563,7 +10045,8 @@ class CrudMetadataEditorComponent {
9563
10045
  </mat-form-field>
9564
10046
  <mat-form-field appearance="outline">
9565
10047
  <mat-label>{{ tx('crud.authoring.connection.pageDomainIcon', 'Ícone do domínio') }}</mat-label>
9566
- <input matInput data-testid="crud-editor-page-domain-icon" [ngModel]="pageHeaderDomainIcon()" (ngModelChange)="setPageHeaderField('domainIcon', $event)" [disabled]="isReadonly()" />
10048
+ <mat-icon matPrefix [praxisIcon]="pageHeaderDomainIcon() || currentCatalogResource()?.icon || 'domain'"></mat-icon>
10049
+ <input matInput data-testid="crud-editor-page-domain-icon" [placeholder]="currentCatalogResource()?.icon || ''" [ngModel]="pageHeaderDomainIcon()" (ngModelChange)="setPageHeaderField('domainIcon', $event)" [disabled]="isReadonly()" />
9567
10050
  </mat-form-field>
9568
10051
  <mat-form-field appearance="outline">
9569
10052
  <mat-label>{{ tx('crud.authoring.connection.pageDomainTone', 'Tom do badge') }}</mat-label>
@@ -10489,6 +10972,17 @@ class CrudMetadataEditorComponent {
10489
10972
  >
10490
10973
  {{ tx('crud.authoring.filters.inlineAdd', 'Add field') }}
10491
10974
  </button>
10975
+ @if (canSuggestInlineFilterFields()) {
10976
+ <button
10977
+ mat-stroked-button
10978
+ type="button"
10979
+ data-testid="crud-filterbar-smart-suggest-inline-btn"
10980
+ (click)="applyRecommendedInlineFilterFields()"
10981
+ [disabled]="isReadonly()"
10982
+ >
10983
+ {{ tx('crud.authoring.filters.suggestInlineFields', 'Suggest main filter fields') }}
10984
+ </button>
10985
+ }
10492
10986
  </div>
10493
10987
 
10494
10988
  @if (filterBarInlineFields().length === 0) {
@@ -10555,6 +11049,18 @@ class CrudMetadataEditorComponent {
10555
11049
  </mat-select>
10556
11050
  </mat-form-field>
10557
11051
 
11052
+ @if (quickFilterDomainPresetOptions().length > 0) {
11053
+ <button
11054
+ mat-stroked-button
11055
+ type="button"
11056
+ data-testid="crud-filterbar-generate-quick-btn"
11057
+ (click)="generateQuickFiltersFromDomainOptions()"
11058
+ [disabled]="isReadonly()"
11059
+ >
11060
+ {{ tx('crud.authoring.filters.generateQuickFromOptions', 'Generate chips from status options') }}
11061
+ </button>
11062
+ }
11063
+
10558
11064
  @if (filterBarQuickMode() === 'custom') {
10559
11065
  <button
10560
11066
  mat-stroked-button
@@ -10867,7 +11373,7 @@ class CrudMetadataEditorComponent {
10867
11373
  </mat-tab>
10868
11374
  </mat-tab-group>
10869
11375
  </section>
10870
- `, isInline: true, styles: [":host{display:block;container-type:inline-size;min-width:0;color:var(--pfx-settings-panel-fg, var(--md-sys-color-on-surface,#1a1b20))}.editor-shell{display:grid;gap:10px}.editor-header{display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap}.editor-header__titles{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}:host-context(.settings-panel) .editor-header h2{display:none}.editor-diagnostics-disclosure{border:1px solid var(--pfx-settings-panel-border, color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 60%, transparent));border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low,#fafbfd) 92%,transparent);padding:8px 12px}.editor-diagnostics-summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--pfx-settings-panel-fg, var(--md-sys-color-on-surface,#1a1b20))}.editor-diagnostics-summary::-webkit-details-marker{display:none}.editor-diagnostics-summary__hint{color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67));margin-left:auto}.editor-diagnostics-summary:after{content:\"\\25b8\";font-size:13px;color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67));transition:transform .14s ease;flex:0 0 auto}.editor-diagnostics-disclosure[open] .editor-diagnostics-summary:after{transform:rotate(90deg)}.editor-diagnostics-disclosure__body{display:grid;gap:10px;margin-top:10px;padding-top:10px;border-top:1px solid var(--pfx-settings-panel-border, color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 50%, transparent))}.editor-overview{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.editor-health-map{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.editor-health-card{display:grid;gap:4px;padding:10px 12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-health-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent);color:var(--md-sys-color-on-tertiary-container,#261900)}.editor-health-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus{display:flex;gap:10px;align-items:center;padding:8px 12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-focus--success{background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent);color:var(--md-sys-color-on-secondary-container,#001c38)}.editor-focus-chip{padding:4px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent);color:var(--md-sys-color-on-secondary-container,#001c38);white-space:nowrap}.editor-focus-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent);color:var(--md-sys-color-on-tertiary-container,#261900)}.editor-focus-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus-copy{display:grid;gap:2px;font-size:13px}.editor-focus-copy p{margin:0;font-size:12px;color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67))}.editor-tabs{display:flex;flex-direction:column;min-width:0}.editor-tabs .mat-mdc-tab{min-width:104px}.editor-tabs ::ng-deep .mdc-tab__content{gap:8px}.editor-tabs ::ng-deep .mdc-tab__text-label{display:inline-flex;align-items:center;gap:8px}.editor-tabs ::ng-deep .mat-mdc-tab-body-wrapper,.editor-tabs ::ng-deep .mat-mdc-tab-group-container{flex:1 1 auto;min-height:0}.editor-tabs ::ng-deep .mat-mdc-tab-body-content{overflow:hidden}.tab-status-dot{width:8px;height:8px;border-radius:999px;background:var(--md-sys-color-primary,#1263b4);flex:0 0 auto}.tab-status-dot--warn{background:var(--md-sys-color-tertiary,#7d5700)}.tab-status-dot--error{background:var(--md-sys-color-error,#b3261e)}.tab-content{display:grid;gap:14px;min-width:0;padding:12px 2px 4px;box-sizing:border-box}.editor-overview-card{display:grid;gap:3px;padding:10px 12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-overview-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent);color:var(--md-sys-color-on-tertiary-container,#261900)}.editor-overview-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-overview-label{font-size:11px;color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67))}.editor-overview-value{font-size:13px;line-height:1.25;overflow-wrap:anywhere}.editor-overview-note{margin:0;font-size:11px;color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67))}.editor-header h2,.editor-card h3{margin:0;font-size:1.05rem}.editor-header p{margin:0;font-size:12px;color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67))}.editor-chip{padding:4px 10px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 12%,transparent);font-size:12px}.editor-card{display:grid;gap:14px;padding:16px;border-radius:16px;border:1px solid var(--pfx-settings-panel-border, color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 70%, transparent));background:var(--pfx-settings-panel-surface, var(--md-sys-color-surface))}.editor-section-header{display:flex;justify-content:space-between;gap:12px;align-items:start;flex-wrap:wrap}.editor-toolbar-row{display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap}.editor-inline-grow{flex:1 1 240px}.inline-actions-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.inline-chip{display:inline-flex;align-items:center;gap:6px}.chip-remove-btn{border:0;background:transparent;cursor:pointer;font-size:14px;line-height:1;padding:0 2px;color:inherit}.kpi-cards-list{display:grid;gap:12px}.field-suggestions-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding-top:2px}.field-suggestion-chip{appearance:none;display:inline-flex;align-items:center;min-height:26px;padding:3px 10px;border-radius:999px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant,#c5c7ce) 80%,transparent);background:color-mix(in srgb,var(--md-sys-color-surface-container-low,#fafbfd) 88%,transparent);color:var(--md-sys-color-on-surface,#1a1b20);font-family:var(--md-sys-typescale-code-font, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:11.5px;line-height:1.2;cursor:pointer;transition:background-color .14s ease,border-color .14s ease,color .14s ease}.field-suggestion-chip:hover:not(:disabled){border-color:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 52%,transparent);background:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 12%,var(--md-sys-color-surface-container-low,#fafbfd));color:var(--md-sys-color-primary,#1263b4)}.field-suggestion-chip:disabled{opacity:.5;cursor:not-allowed}.inherited-columns-banner{display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap;padding:12px 14px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 55%,transparent);color:var(--md-sys-color-on-secondary-container,#001c38)}.inherited-columns-banner__copy{display:grid;gap:4px}.inherited-columns-banner__title-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.editor-grid{display:grid;gap:12px;align-items:start;grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.editor-grid--compact{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.editor-grid--2col{grid-template-columns:repeat(2,minmax(240px,1fr))}.editor-grid--3col{grid-template-columns:repeat(3,minmax(200px,1fr))}.editor-grid--4col{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.editor-grid--1-2{grid-template-columns:minmax(180px,1fr) minmax(320px,2fr)}.editor-field--full{grid-column:1 / -1}.editor-toggles{display:grid;gap:10px;align-items:start;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}@container (max-width: 720px){.editor-focus{flex-direction:column;align-items:flex-start}.editor-grid,.editor-grid--compact,.editor-grid--2col,.editor-grid--3col,.editor-grid--4col,.editor-grid--1-2,.editor-toggles{grid-template-columns:1fr}}.editor-actions,.action-grid{display:grid;gap:14px}.action-summary-strip{display:flex;flex-wrap:wrap;gap:8px}.action-summary-chip{padding:6px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent);color:var(--md-sys-color-on-secondary-container,#001c38)}.action-summary-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent);color:var(--md-sys-color-on-tertiary-container,#261900)}.action-summary-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.action-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 88%,transparent)}.action-group--advanced{background:color-mix(in srgb,var(--md-sys-color-surface-container,#f5f7fb) 90%,transparent)}.action-group__header{display:grid;gap:4px}.action-subgroup{display:grid;gap:10px;padding:10px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low,#fafbfd) 92%,transparent)}.action-subgroup__header{display:grid;gap:4px}.action-param-list{display:grid;gap:12px}.action-param-row{display:grid;gap:8px}.action-advanced-panel{border:1px solid color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 65%,transparent);border-radius:16px}.editor-section-note{margin:0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.diagnostics-groups{display:grid;gap:12px}.diagnostics-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.diagnostics{display:grid;gap:8px;margin:0;padding-left:18px}.diagnostics .error{color:var(--md-sys-color-error,#b3261e)}.endpoint-option-row{display:flex;align-items:center;gap:10px;padding:2px 0;line-height:1.25}.endpoint-option-method{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:2px 6px;border-radius:6px;background:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 14%,transparent);color:var(--md-sys-color-primary,#1263b4);flex-shrink:0}.endpoint-option-copy{display:flex;flex-direction:column;min-width:0;flex:1}.endpoint-option-path{font-size:12.5px;font-weight:600;font-family:var(--praxis-font-mono, monospace);color:var(--md-sys-color-on-surface,#1a1c1e);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.endpoint-option-meta{font-size:11px;color:var(--md-sys-color-on-surface-variant,#5a5d67);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.endpoint-option-badge{font-size:10px;font-weight:600;padding:2px 6px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 75%,transparent);color:var(--md-sys-color-on-secondary-container,#001c38);flex-shrink:0}pre{margin:0;overflow:auto;max-height:320px;padding:12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i2$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { 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: MatCardModule }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i6$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i6$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i6$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i6$1.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i9.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "directive", type: i10.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i10.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i10.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: PraxisKpiBandComponent, selector: "praxis-kpi-band", inputs: ["config", "dataContext", "isInteractiveHost", "activeFilter", "endpointKey", "apiUrlEntry"], outputs: ["cardClick", "statsLoaded", "statsError", "refreshClick"] }, { kind: "component", type: PraxisTableInlineAuthoringEditorComponent, selector: "praxis-table-inline-authoring-editor", inputs: ["config", "fieldMetadata", "readonly"], outputs: ["configChange"] }, { kind: "component", type: ResourceQuickConnectComponent, selector: "praxis-resource-quick-connect", inputs: ["resourcePath", "endpointKey", "apiUrlEntry", "intent", "resources", "label", "placeholder", "hint", "disabled"], outputs: ["resourcePathChange", "resourceSelected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11376
+ `, isInline: true, styles: [":host{display:block;container-type:inline-size;min-width:0;color:var(--pfx-settings-panel-fg, var(--md-sys-color-on-surface,#1a1b20))}.editor-shell{display:grid;gap:10px}.editor-header{display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap}.editor-header__titles{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}:host-context(.settings-panel) .editor-header h2{display:none}.editor-diagnostics-disclosure{border:1px solid var(--pfx-settings-panel-border, color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 60%, transparent));border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low,#fafbfd) 92%,transparent);padding:8px 12px}.editor-diagnostics-summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--pfx-settings-panel-fg, var(--md-sys-color-on-surface,#1a1b20))}.editor-diagnostics-summary::-webkit-details-marker{display:none}.editor-diagnostics-summary__hint{color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67));margin-left:auto}.editor-diagnostics-summary:after{content:\"\\25b8\";font-size:13px;color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67));transition:transform .14s ease;flex:0 0 auto}.editor-diagnostics-disclosure[open] .editor-diagnostics-summary:after{transform:rotate(90deg)}.editor-diagnostics-disclosure__body{display:grid;gap:10px;margin-top:10px;padding-top:10px;border-top:1px solid var(--pfx-settings-panel-border, color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 50%, transparent))}.editor-overview{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.editor-health-map{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.editor-health-card{display:grid;gap:4px;padding:10px 12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-health-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent);color:var(--md-sys-color-on-tertiary-container,#261900)}.editor-health-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus{display:flex;gap:10px;align-items:center;padding:8px 12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-focus--success{background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent);color:var(--md-sys-color-on-secondary-container,#001c38)}.editor-focus-chip{padding:4px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent);color:var(--md-sys-color-on-secondary-container,#001c38);white-space:nowrap}.editor-focus-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent);color:var(--md-sys-color-on-tertiary-container,#261900)}.editor-focus-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus-copy{display:grid;gap:2px;font-size:13px}.editor-focus-copy p{margin:0;font-size:12px;color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67))}.editor-tabs{display:flex;flex-direction:column;min-width:0}.editor-tabs .mat-mdc-tab{min-width:104px}.editor-tabs ::ng-deep .mdc-tab__content{gap:8px}.editor-tabs ::ng-deep .mdc-tab__text-label{display:inline-flex;align-items:center;gap:8px}.editor-tabs ::ng-deep .mat-mdc-tab-body-wrapper,.editor-tabs ::ng-deep .mat-mdc-tab-group-container{flex:1 1 auto;min-height:0}.editor-tabs ::ng-deep .mat-mdc-tab-body-content{overflow:hidden}.tab-status-dot{width:8px;height:8px;border-radius:999px;background:var(--md-sys-color-primary,#1263b4);flex:0 0 auto}.tab-status-dot--warn{background:var(--md-sys-color-tertiary,#7d5700)}.tab-status-dot--error{background:var(--md-sys-color-error,#b3261e)}.tab-content{display:grid;gap:14px;min-width:0;padding:12px 2px 4px;box-sizing:border-box}.editor-overview-card{display:grid;gap:3px;padding:10px 12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-overview-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent);color:var(--md-sys-color-on-tertiary-container,#261900)}.editor-overview-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-overview-label{font-size:11px;color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67))}.editor-overview-value{font-size:13px;line-height:1.25;overflow-wrap:anywhere}.editor-overview-note{margin:0;font-size:11px;color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67))}.editor-header h2,.editor-card h3{margin:0;font-size:1.05rem}.editor-header p{margin:0;font-size:12px;color:var(--pfx-settings-panel-muted, var(--md-sys-color-on-surface-variant,#5a5d67))}.editor-chip{padding:4px 10px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 12%,transparent);font-size:12px}.editor-card{display:grid;gap:14px;padding:16px;border-radius:16px;border:1px solid var(--pfx-settings-panel-border, color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 70%, transparent));background:var(--pfx-settings-panel-surface, var(--md-sys-color-surface))}.editor-section-header{display:flex;justify-content:space-between;gap:12px;align-items:start;flex-wrap:wrap}.editor-toolbar-row{display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap}.editor-inline-grow{flex:1 1 240px}.inline-actions-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.inline-chip{display:inline-flex;align-items:center;gap:6px}.chip-remove-btn{border:0;background:transparent;cursor:pointer;font-size:14px;line-height:1;padding:0 2px;color:inherit}.kpi-cards-list{display:grid;gap:12px}.field-suggestions-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding-top:2px}.field-suggestion-chip{appearance:none;display:inline-flex;align-items:center;min-height:26px;padding:3px 10px;border-radius:999px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant,#c5c7ce) 80%,transparent);background:color-mix(in srgb,var(--md-sys-color-surface-container-low,#fafbfd) 88%,transparent);color:var(--md-sys-color-on-surface,#1a1b20);font-family:var(--md-sys-typescale-code-font, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:11.5px;line-height:1.2;cursor:pointer;transition:background-color .14s ease,border-color .14s ease,color .14s ease}.field-suggestion-chip:hover:not(:disabled){border-color:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 52%,transparent);background:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 12%,var(--md-sys-color-surface-container-low,#fafbfd));color:var(--md-sys-color-primary,#1263b4)}.field-suggestion-chip:disabled{opacity:.5;cursor:not-allowed}.inherited-columns-banner{display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap;padding:12px 14px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 55%,transparent);color:var(--md-sys-color-on-secondary-container,#001c38)}.inherited-columns-banner__copy{display:grid;gap:4px}.inherited-columns-banner__title-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.editor-grid{display:grid;gap:12px;align-items:start;grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.editor-grid--compact{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.editor-grid--2col{grid-template-columns:repeat(2,minmax(240px,1fr))}.editor-grid--3col{grid-template-columns:repeat(3,minmax(200px,1fr))}.editor-grid--4col{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.editor-grid--1-2{grid-template-columns:minmax(180px,1fr) minmax(320px,2fr)}.editor-field--full{grid-column:1 / -1}.editor-toggles{display:grid;gap:10px;align-items:start;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}@container (max-width: 720px){.editor-focus{flex-direction:column;align-items:flex-start}.editor-grid,.editor-grid--compact,.editor-grid--2col,.editor-grid--3col,.editor-grid--4col,.editor-grid--1-2,.editor-toggles{grid-template-columns:1fr}}.editor-actions,.action-grid{display:grid;gap:14px}.action-summary-strip{display:flex;flex-wrap:wrap;gap:8px}.action-summary-chip{padding:6px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent);color:var(--md-sys-color-on-secondary-container,#001c38)}.action-summary-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent);color:var(--md-sys-color-on-tertiary-container,#261900)}.action-summary-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.action-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 88%,transparent)}.action-group--advanced{background:color-mix(in srgb,var(--md-sys-color-surface-container,#f5f7fb) 90%,transparent)}.action-group__header{display:grid;gap:4px}.action-subgroup{display:grid;gap:10px;padding:10px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low,#fafbfd) 92%,transparent)}.action-subgroup__header{display:grid;gap:4px}.action-param-list{display:grid;gap:12px}.action-param-row{display:grid;gap:8px}.action-advanced-panel{border:1px solid color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 65%,transparent);border-radius:16px}.editor-section-note{margin:0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.diagnostics-groups{display:grid;gap:12px}.diagnostics-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.diagnostics{display:grid;gap:8px;margin:0;padding-left:18px}.diagnostics .error{color:var(--md-sys-color-error,#b3261e)}.endpoint-option-row{display:flex;align-items:center;gap:10px;padding:2px 0;line-height:1.25}.endpoint-option-method{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:2px 6px;border-radius:6px;background:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 14%,transparent);color:var(--md-sys-color-primary,#1263b4);flex-shrink:0}.endpoint-option-copy{display:flex;flex-direction:column;min-width:0;flex:1}.endpoint-option-path{font-size:12.5px;font-weight:600;font-family:var(--praxis-font-mono, monospace);color:var(--md-sys-color-on-surface,#1a1c1e);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.endpoint-option-meta{font-size:11px;color:var(--md-sys-color-on-surface-variant,#5a5d67);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.endpoint-option-badge{font-size:10px;font-weight:600;padding:2px 6px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 75%,transparent);color:var(--md-sys-color-on-secondary-container,#001c38);flex-shrink:0}pre{margin:0;overflow:auto;max-height:320px;padding:12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i2$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i3$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { 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: MatCardModule }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i6.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i6.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i6.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i6.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i9.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "directive", type: i10.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i10.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i10.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: PraxisKpiBandComponent, selector: "praxis-kpi-band", inputs: ["config", "dataContext", "isInteractiveHost", "activeFilter", "endpointKey", "apiUrlEntry"], outputs: ["cardClick", "statsLoaded", "statsError", "refreshClick"] }, { kind: "component", type: PraxisTableInlineAuthoringEditorComponent, selector: "praxis-table-inline-authoring-editor", inputs: ["config", "fieldMetadata", "readonly"], outputs: ["configChange"] }, { kind: "component", type: ResourceQuickConnectComponent, selector: "praxis-resource-quick-connect", inputs: ["resourcePath", "endpointKey", "apiUrlEntry", "intent", "resources", "label", "placeholder", "hint", "disabled"], outputs: ["resourcePathChange", "resourceSelected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
10871
11377
  }
10872
11378
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: CrudMetadataEditorComponent, decorators: [{
10873
11379
  type: Component,
@@ -11016,62 +11522,63 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
11016
11522
  {{ sectionStatusLabel('connection') }}
11017
11523
  </span>
11018
11524
  </div>
11019
- <div class="editor-grid editor-grid--2col">
11020
- <praxis-resource-quick-connect
11021
- class="editor-field--full"
11022
- data-testid="crud-editor-resource-path"
11023
- [resourcePath]="resourcePath()"
11024
- (resourcePathChange)="setResourceField('path', $event)"
11025
- (resourceSelected)="onCatalogResourceSelected($event)"
11026
- [endpointKey]="resourceEndpointKeyValue()"
11027
- [apiUrlEntry]="resourceApiUrlEntry()"
11028
- intent="crud"
11029
- [label]="tx('crud.authoring.connection.resourcePath', 'Resource')"
11030
- [disabled]="isReadonly()"
11031
- />
11032
- <mat-form-field appearance="outline">
11033
- <mat-label>{{ tx('crud.authoring.connection.idField', 'Identifier field') }}</mat-label>
11034
- <input
11035
- matInput
11036
- data-testid="crud-editor-resource-idField"
11037
- [matAutocomplete]="idFieldAuto"
11038
- [ngModel]="resourceIdField()"
11039
- (ngModelChange)="setResourceField('idField', $event)"
11040
- (focus)="ensureCatalogResourcesLoaded()"
11041
- [disabled]="isReadonly()"
11042
- />
11043
- <mat-autocomplete #idFieldAuto="matAutocomplete">
11044
- @for (item of filteredIdFieldOptions(); track item.field) {
11045
- <mat-option [value]="item.field">
11046
- <div class="endpoint-option-row">
11047
- <div class="endpoint-option-copy">
11048
- <span class="endpoint-option-path">{{ item.field }}</span>
11049
- @if (item.header && item.header !== item.field) {
11050
- <span class="endpoint-option-meta">{{ item.header }}</span>
11051
- }
11525
+ <praxis-resource-quick-connect
11526
+ class="editor-field--full"
11527
+ data-testid="crud-editor-resource-path"
11528
+ [resourcePath]="resourcePath()"
11529
+ (resourcePathChange)="setResourceField('path', $event)"
11530
+ (resourceSelected)="onCatalogResourceSelected($event)"
11531
+ [endpointKey]="resourceEndpointKeyValue()"
11532
+ [apiUrlEntry]="resourceApiUrlEntry()"
11533
+ intent="crud"
11534
+ [label]="tx('crud.authoring.connection.resourcePath', 'Resource')"
11535
+ [disabled]="isReadonly()"
11536
+ >
11537
+ <div class="editor-grid editor-grid--2col">
11538
+ <mat-form-field appearance="outline">
11539
+ <mat-label>{{ tx('crud.authoring.connection.idField', 'Identifier field') }}</mat-label>
11540
+ <input
11541
+ matInput
11542
+ data-testid="crud-editor-resource-idField"
11543
+ [matAutocomplete]="idFieldAuto"
11544
+ [ngModel]="resourceIdField()"
11545
+ (ngModelChange)="setResourceField('idField', $event)"
11546
+ (focus)="ensureCatalogResourcesLoaded()"
11547
+ [disabled]="isReadonly()"
11548
+ />
11549
+ <mat-autocomplete #idFieldAuto="matAutocomplete">
11550
+ @for (item of filteredIdFieldOptions(); track item.field) {
11551
+ <mat-option [value]="item.field">
11552
+ <div class="endpoint-option-row">
11553
+ <div class="endpoint-option-copy">
11554
+ <span class="endpoint-option-path">{{ item.field }}</span>
11555
+ @if (item.header && item.header !== item.field) {
11556
+ <span class="endpoint-option-meta">{{ item.header }}</span>
11557
+ }
11558
+ </div>
11052
11559
  </div>
11053
- </div>
11054
- </mat-option>
11055
- }
11056
- </mat-autocomplete>
11057
- </mat-form-field>
11058
- <mat-form-field appearance="outline">
11059
- <mat-label>{{ tx('crud.authoring.connection.endpointKey', 'Endpoint/API') }}</mat-label>
11060
- <input
11061
- matInput
11062
- data-testid="crud-editor-resource-endpointKey"
11063
- [matAutocomplete]="endpointKeyAuto"
11064
- [ngModel]="resourceEndpointKey()"
11065
- (ngModelChange)="setResourceField('endpointKey', $event)"
11066
- [disabled]="isReadonly()"
11067
- />
11068
- <mat-autocomplete #endpointKeyAuto="matAutocomplete">
11069
- @for (key of filteredResourceEndpointKeys(); track key) {
11070
- <mat-option [value]="key">{{ key }}</mat-option>
11071
- }
11072
- </mat-autocomplete>
11073
- </mat-form-field>
11074
- </div>
11560
+ </mat-option>
11561
+ }
11562
+ </mat-autocomplete>
11563
+ </mat-form-field>
11564
+ <mat-form-field appearance="outline">
11565
+ <mat-label>{{ tx('crud.authoring.connection.endpointKey', 'Endpoint/API') }}</mat-label>
11566
+ <input
11567
+ matInput
11568
+ data-testid="crud-editor-resource-endpointKey"
11569
+ [matAutocomplete]="endpointKeyAuto"
11570
+ [ngModel]="resourceEndpointKey()"
11571
+ (ngModelChange)="setResourceField('endpointKey', $event)"
11572
+ [disabled]="isReadonly()"
11573
+ />
11574
+ <mat-autocomplete #endpointKeyAuto="matAutocomplete">
11575
+ @for (key of filteredResourceEndpointKeys(); track key) {
11576
+ <mat-option [value]="key">{{ key }}</mat-option>
11577
+ }
11578
+ </mat-autocomplete>
11579
+ </mat-form-field>
11580
+ </div>
11581
+ </praxis-resource-quick-connect>
11075
11582
 
11076
11583
  @if (hasReadOnlyMutatingActionsWarning()) {
11077
11584
  <div class="editor-focus" data-testid="crud-editor-readonly-warning">
@@ -11115,7 +11622,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
11115
11622
  </mat-form-field>
11116
11623
  <mat-form-field appearance="outline">
11117
11624
  <mat-label>{{ tx('crud.authoring.connection.pageDomainIcon', 'Ícone do domínio') }}</mat-label>
11118
- <input matInput data-testid="crud-editor-page-domain-icon" [ngModel]="pageHeaderDomainIcon()" (ngModelChange)="setPageHeaderField('domainIcon', $event)" [disabled]="isReadonly()" />
11625
+ <mat-icon matPrefix [praxisIcon]="pageHeaderDomainIcon() || currentCatalogResource()?.icon || 'domain'"></mat-icon>
11626
+ <input matInput data-testid="crud-editor-page-domain-icon" [placeholder]="currentCatalogResource()?.icon || ''" [ngModel]="pageHeaderDomainIcon()" (ngModelChange)="setPageHeaderField('domainIcon', $event)" [disabled]="isReadonly()" />
11119
11627
  </mat-form-field>
11120
11628
  <mat-form-field appearance="outline">
11121
11629
  <mat-label>{{ tx('crud.authoring.connection.pageDomainTone', 'Tom do badge') }}</mat-label>
@@ -12041,6 +12549,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
12041
12549
  >
12042
12550
  {{ tx('crud.authoring.filters.inlineAdd', 'Add field') }}
12043
12551
  </button>
12552
+ @if (canSuggestInlineFilterFields()) {
12553
+ <button
12554
+ mat-stroked-button
12555
+ type="button"
12556
+ data-testid="crud-filterbar-smart-suggest-inline-btn"
12557
+ (click)="applyRecommendedInlineFilterFields()"
12558
+ [disabled]="isReadonly()"
12559
+ >
12560
+ {{ tx('crud.authoring.filters.suggestInlineFields', 'Suggest main filter fields') }}
12561
+ </button>
12562
+ }
12044
12563
  </div>
12045
12564
 
12046
12565
  @if (filterBarInlineFields().length === 0) {
@@ -12107,6 +12626,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
12107
12626
  </mat-select>
12108
12627
  </mat-form-field>
12109
12628
 
12629
+ @if (quickFilterDomainPresetOptions().length > 0) {
12630
+ <button
12631
+ mat-stroked-button
12632
+ type="button"
12633
+ data-testid="crud-filterbar-generate-quick-btn"
12634
+ (click)="generateQuickFiltersFromDomainOptions()"
12635
+ [disabled]="isReadonly()"
12636
+ >
12637
+ {{ tx('crud.authoring.filters.generateQuickFromOptions', 'Generate chips from status options') }}
12638
+ </button>
12639
+ }
12640
+
12110
12641
  @if (filterBarQuickMode() === 'custom') {
12111
12642
  <button
12112
12643
  mat-stroked-button
@@ -12612,6 +13143,8 @@ class PraxisCrudComponent {
12612
13143
  filterTeleport = false;
12613
13144
  /** Desabilita auto-abertura da gaveta analítica no clique de linha (Issue #39) */
12614
13145
  disableAutoDrawer = false;
13146
+ /** Indica que um host superior (como PraxisResourcePage) já renderiza pageHeader e scopeBar */
13147
+ hostManagedChrome = false;
12615
13148
  tableSignal = signal(undefined, ...(ngDevMode ? [{ debugName: "tableSignal" }] : /* istanbul ignore next */ []));
12616
13149
  /** Signal reativo do TemplateRef de filtro da tabela interna (usado por PraxisFilterOutlet) */
12617
13150
  filterTemplateSignal = computed(() => {
@@ -12655,6 +13188,95 @@ class PraxisCrudComponent {
12655
13188
  filterCriteriaChange = new EventEmitter();
12656
13189
  /** Evento emitido ao clicar em um card da faixa declarativa de KPIs (Issue #33) */
12657
13190
  kpiCardClick = new EventEmitter();
13191
+ get resolvedPageHeader() {
13192
+ if (this.hostManagedChrome || this.isInspectOnly()) {
13193
+ return null;
13194
+ }
13195
+ const ph = this.resolvedMetadata?.pageHeader;
13196
+ if (!ph) {
13197
+ return null;
13198
+ }
13199
+ const hasTitle = !!ph.title?.trim();
13200
+ const hasSubtitle = !!ph.subtitle?.trim();
13201
+ const hasDomain = !!ph.domain?.label?.trim();
13202
+ if (!hasTitle && !hasSubtitle && !hasDomain) {
13203
+ return null;
13204
+ }
13205
+ if (ph.domain?.icon) {
13206
+ return {
13207
+ ...ph,
13208
+ domain: {
13209
+ ...ph.domain,
13210
+ icon: ph.domain.icon.trim().replace(/-/g, '_'),
13211
+ },
13212
+ };
13213
+ }
13214
+ return ph;
13215
+ }
13216
+ get resolvedStandaloneScopeBarItems() {
13217
+ if (this.hostManagedChrome || this.isInspectOnly()) {
13218
+ return null;
13219
+ }
13220
+ const fb = this.resolvedMetadata?.filterBar;
13221
+ if (!fb || !Array.isArray(fb.quickFilters) || fb.quickFilters.length === 0) {
13222
+ return null;
13223
+ }
13224
+ if (fb.placement === 'table-toolbar') {
13225
+ return null;
13226
+ }
13227
+ return fb.quickFilters.map((qf) => ({
13228
+ id: qf.id,
13229
+ label: qf.label,
13230
+ filter: qf.filter,
13231
+ icon: qf.icon ? qf.icon.trim().replace(/-/g, '_') : undefined,
13232
+ tone: qf.tone,
13233
+ badge: qf.badge,
13234
+ count: qf.count,
13235
+ isDefault: qf.isDefault,
13236
+ }));
13237
+ }
13238
+ get activeStandaloneScopeId() {
13239
+ const items = this.resolvedStandaloneScopeBarItems;
13240
+ if (!items?.length) {
13241
+ return 'all';
13242
+ }
13243
+ const current = this.tableFilterCriteria || {};
13244
+ const currentKeys = Object.keys(current).filter((k) => current[k] !== undefined && current[k] !== null && current[k] !== '');
13245
+ if (currentKeys.length === 0) {
13246
+ const defaultItem = items.find((i) => i.isDefault) || items.find((i) => i.id === 'all');
13247
+ return defaultItem?.id || 'all';
13248
+ }
13249
+ const matched = items.find((item) => {
13250
+ const f = item.filter && typeof item.filter === 'object' && !Array.isArray(item.filter)
13251
+ ? item.filter
13252
+ : null;
13253
+ if (!f)
13254
+ return false;
13255
+ return this.areFilterCriteriaEquivalent(f, current);
13256
+ });
13257
+ return matched?.id || '';
13258
+ }
13259
+ onStandaloneScopeChange(item) {
13260
+ const filter = item.filter && typeof item.filter === 'object' && !Array.isArray(item.filter)
13261
+ ? item.filter
13262
+ : {};
13263
+ if (Object.keys(filter).length === 0) {
13264
+ this.clearFilterCriteria();
13265
+ return;
13266
+ }
13267
+ this.tableFilterCriteria = {
13268
+ ...this.resolveFilterCriteria(this.resolvedMetadata),
13269
+ ...filter,
13270
+ };
13271
+ if (this.table) {
13272
+ this.table.applyAdvancedFilterCriteria(this.tableFilterCriteria);
13273
+ }
13274
+ this.filterCriteriaChange.emit({ ...this.tableFilterCriteria });
13275
+ this.cdr.markForCheck();
13276
+ }
13277
+ onStandaloneScopeClear() {
13278
+ this.clearFilterCriteria();
13279
+ }
12658
13280
  get resolvedKpiBandConfig() {
12659
13281
  const meta = this.resolvedMetadata;
12660
13282
  const band = meta?.kpiBand || meta?.table?.kpiBand || meta?.table?.behavior?.kpiBand;
@@ -13338,9 +13960,11 @@ class PraxisCrudComponent {
13338
13960
  this.tableQueryContext = this.resolveQueryContext(this.resolvedMetadata);
13339
13961
  this.tableFilterCriteria = this.resolveFilterCriteria(this.resolvedMetadata);
13340
13962
  const nextResourceIdentity = this.resolveCrudResourceIdentity(this.resolvedMetadata);
13341
- if (nextResourceIdentity !== this.lastAppliedResourceIdentity ||
13963
+ const resourceChanged = nextResourceIdentity !== this.lastAppliedResourceIdentity ||
13342
13964
  !nextResourceIdentity ||
13343
- this.isInspectOnly(this.resolvedMetadata)) {
13965
+ this.isInspectOnly(this.resolvedMetadata);
13966
+ if (resourceChanged) {
13967
+ this.selectedRow = null;
13344
13968
  this.tableCollectionLinks = null;
13345
13969
  this.collectionCapabilities = null;
13346
13970
  this.collectionCapabilitiesRequestHref = null;
@@ -13348,6 +13972,20 @@ class PraxisCrudComponent {
13348
13972
  this.collectionCapabilitiesRequestSeq += 1;
13349
13973
  }
13350
13974
  this.applyResolvedCrudState(this.resolvedMetadata);
13975
+ const metadataInputChanged = changes['metadata'] && !changes['metadata'].firstChange;
13976
+ if (metadataInputChanged &&
13977
+ resourceChanged &&
13978
+ nextResourceIdentity &&
13979
+ this.resolvedTableConfigPersistenceStrategy === 'local-first') {
13980
+ const keyId = this.componentKeyId();
13981
+ if (keyId) {
13982
+ this.hydratedAuthoringKeyId = keyId;
13983
+ void firstValueFrom(this.storage.saveConfig(`crud-authoring:${keyId}`, this.currentAuthoringDocument)).catch(() => { });
13984
+ }
13985
+ if (this.crudId && this.crudId !== keyId) {
13986
+ void firstValueFrom(this.storage.saveConfig(`crud-authoring:${this.crudId}`, this.currentAuthoringDocument)).catch(() => { });
13987
+ }
13988
+ }
13351
13989
  if (!externalAuthoringSeed && this.resolvedTableConfigPersistenceStrategy === 'local-first') {
13352
13990
  this.tryHydrateStoredAuthoringDocument();
13353
13991
  }
@@ -13552,7 +14190,10 @@ class PraxisCrudComponent {
13552
14190
  String(action.form?.submitUrl || '').trim());
13553
14191
  }
13554
14192
  getCurrentTableConfigSnapshot() {
13555
- const current = this.table?.config || this.tableConfigForBinding || this.effectiveTableConfig;
14193
+ const tableConfigCandidate = this.isTableComponentCompatibleWithResource(this.resolvedMetadata)
14194
+ ? this.table?.config
14195
+ : undefined;
14196
+ const current = tableConfigCandidate || this.tableConfigForBinding || this.effectiveTableConfig;
13556
14197
  if (!current)
13557
14198
  return null;
13558
14199
  try {
@@ -14649,7 +15290,8 @@ class PraxisCrudComponent {
14649
15290
  if (nextResourceIdentity !== null &&
14650
15291
  nextResourceIdentity === this.lastAppliedResourceIdentity &&
14651
15292
  (cfg.columns?.length ?? 0) === 0 &&
14652
- (current?.columns?.length ?? 0) > 0) {
15293
+ (current?.columns?.length ?? 0) > 0 &&
15294
+ this.isTableSnapshotCompatibleWithResource(current, meta)) {
14653
15295
  cfg.columns = JSON.parse(JSON.stringify(current.columns));
14654
15296
  changed = true;
14655
15297
  }
@@ -14682,6 +15324,10 @@ class PraxisCrudComponent {
14682
15324
  if (fb.showAdvanced !== undefined) {
14683
15325
  toolbar.filters.showAdvancedButton = fb.showAdvanced;
14684
15326
  }
15327
+ const standaloneScopeBarRendered = !this.hostManagedChrome &&
15328
+ Array.isArray(fb.quickFilters) &&
15329
+ fb.quickFilters.length > 0 &&
15330
+ fb.placement !== 'table-toolbar';
14685
15331
  if (Array.isArray(fb.quickFilters)) {
14686
15332
  toolbar.filters.quickFilters = [...fb.quickFilters];
14687
15333
  }
@@ -14691,6 +15337,9 @@ class PraxisCrudComponent {
14691
15337
  else if (fb.quickFilters === undefined) {
14692
15338
  delete toolbar.filters.quickFilters;
14693
15339
  }
15340
+ if (standaloneScopeBarRendered) {
15341
+ toolbar.filters.showQuickFilters = false;
15342
+ }
14694
15343
  if (Array.isArray(fb.inlineFields) && fb.inlineFields.length > 0) {
14695
15344
  const behavior = (cfg.behavior = cfg.behavior || {});
14696
15345
  const filtering = (behavior.filtering =
@@ -15129,6 +15778,23 @@ class PraxisCrudComponent {
15129
15778
  if (!resolvedStored || this.isInspectOnly()) {
15130
15779
  return;
15131
15780
  }
15781
+ try {
15782
+ const storedDoc = parseLegacyOrCrudDocument(resolvedStored);
15783
+ const currentPath = String(this.resolvedMetadata?.resource?.path || '')
15784
+ .trim()
15785
+ .replace(/^\/+|\/+$/g, '')
15786
+ .toLowerCase();
15787
+ const storedPath = String(storedDoc?.metadata?.resource?.path || '')
15788
+ .trim()
15789
+ .replace(/^\/+|\/+$/g, '')
15790
+ .toLowerCase();
15791
+ if (currentPath.length > 0 && storedPath.length > 0 && currentPath !== storedPath) {
15792
+ return;
15793
+ }
15794
+ }
15795
+ catch {
15796
+ return;
15797
+ }
15132
15798
  this.applyCrudAuthoringPayload(resolvedStored, 'applied');
15133
15799
  })
15134
15800
  .catch(() => { });
@@ -15137,9 +15803,24 @@ class PraxisCrudComponent {
15137
15803
  const next = parseLegacyOrCrudDocument(payload);
15138
15804
  this.currentAuthoringDocument = next;
15139
15805
  this.resolvedMetadata = next.metadata;
15140
- this.lastTableRuntimeConfigSnapshot = next.metadata.table
15141
- ? this.cloneTableConfigSnapshot(next.metadata.table)
15142
- : null;
15806
+ const nextResourceIdentity = this.resolveCrudResourceIdentity(this.resolvedMetadata);
15807
+ if (nextResourceIdentity !== this.lastAppliedResourceIdentity ||
15808
+ !nextResourceIdentity ||
15809
+ this.isInspectOnly(this.resolvedMetadata)) {
15810
+ this.selectedRow = null;
15811
+ this.tableCollectionLinks = null;
15812
+ this.collectionCapabilities = null;
15813
+ this.collectionCapabilitiesRequestHref = null;
15814
+ this.collectionCapabilitiesResolvedHref = null;
15815
+ this.collectionCapabilitiesRequestSeq += 1;
15816
+ this.lastTableRuntimeConfigSnapshot = null;
15817
+ this.lastEmittedTableRuntimeConfigJson = '';
15818
+ }
15819
+ else {
15820
+ this.lastTableRuntimeConfigSnapshot = next.metadata.table
15821
+ ? this.cloneTableConfigSnapshot(next.metadata.table)
15822
+ : null;
15823
+ }
15143
15824
  this.tableQueryContext = this.resolveQueryContext(this.resolvedMetadata);
15144
15825
  this.tableFilterCriteria = this.resolveFilterCriteria(this.resolvedMetadata);
15145
15826
  this.applyResolvedCrudState(this.resolvedMetadata);
@@ -15421,6 +16102,42 @@ class PraxisCrudComponent {
15421
16102
  const endpointKey = String(meta?.resource?.endpointKey || '').trim().toLowerCase();
15422
16103
  return `${resourcePath.toLowerCase()}|${endpointKey}`;
15423
16104
  }
16105
+ normalizeComparableResourcePath(path) {
16106
+ return String(path || '')
16107
+ .trim()
16108
+ .replace(/^\/+|\/+$/g, '')
16109
+ .replace(/^api\//i, '')
16110
+ .toLowerCase();
16111
+ }
16112
+ isTableComponentCompatibleWithResource(meta) {
16113
+ const targetResourcePath = this.normalizeComparableResourcePath(meta ? this.resolveResourcePath(meta) : '');
16114
+ if (!targetResourcePath) {
16115
+ return true;
16116
+ }
16117
+ const tableResourcePath = this.normalizeComparableResourcePath(this.table?.resourcePath);
16118
+ if (tableResourcePath && tableResourcePath !== targetResourcePath) {
16119
+ return false;
16120
+ }
16121
+ const tableMetaResourcePath = this.normalizeComparableResourcePath(this.table?.config?.meta?.resourcePath);
16122
+ if (tableMetaResourcePath && tableMetaResourcePath !== targetResourcePath) {
16123
+ return false;
16124
+ }
16125
+ return true;
16126
+ }
16127
+ isTableSnapshotCompatibleWithResource(snapshot, meta) {
16128
+ if (!this.isTableComponentCompatibleWithResource(meta)) {
16129
+ return false;
16130
+ }
16131
+ const targetResourcePath = this.normalizeComparableResourcePath(meta ? this.resolveResourcePath(meta) : '');
16132
+ if (!targetResourcePath) {
16133
+ return true;
16134
+ }
16135
+ const snapshotMetaResourcePath = this.normalizeComparableResourcePath(snapshot?.meta?.resourcePath);
16136
+ if (snapshotMetaResourcePath && snapshotMetaResourcePath !== targetResourcePath) {
16137
+ return false;
16138
+ }
16139
+ return true;
16140
+ }
15424
16141
  buildDiscoveryOptions() {
15425
16142
  const endpointKey = this.resolvedMetadata?.resource?.endpointKey;
15426
16143
  return endpointKey ? { endpointKey: endpointKey } : undefined;
@@ -15534,7 +16251,7 @@ class PraxisCrudComponent {
15534
16251
  return Object.entries(params).reduce((current, [name, value]) => current.split(`{${name}}`).join(value), text);
15535
16252
  }
15536
16253
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisCrudComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15537
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisCrudComponent, isStandalone: true, selector: "praxis-crud", inputs: { metadata: "metadata", crudId: "crudId", resource: "resource", componentInstanceId: "componentInstanceId", tableConfigPersistenceStrategy: "tableConfigPersistenceStrategy", context: "context", enableCustomization: "enableCustomization", showResourceIdentityKey: "showResourceIdentityKey", authoringCapability: "authoringCapability", filterCriteria: "filterCriteria", filterTeleport: ["filterTeleport", "filterTeleport", booleanAttribute], disableAutoDrawer: ["disableAutoDrawer", "disableAutoDrawer", booleanAttribute] }, outputs: { configureRequested: "configureRequested", afterOpen: "afterOpen", afterClose: "afterClose", afterSave: "afterSave", afterDelete: "afterDelete", reactiveDeterminationExecuted: "reactiveDeterminationExecuted", reactiveDeterminationPendingChange: "reactiveDeterminationPendingChange", reactiveDeterminationStabilityChange: "reactiveDeterminationStabilityChange", error: "error", rowClick: "rowClick", rowAction: "rowAction", selectionChange: "selectionChange", resourceEvent: "resourceEvent", tableRuntimeConfigChange: "tableRuntimeConfigChange", drawerOpen: "drawerOpen", drawerClose: "drawerClose", crudAuthoringDocumentApplied: "crudAuthoringDocumentApplied", crudAuthoringDocumentSaved: "crudAuthoringDocumentSaved", filterCriteriaChange: "filterCriteriaChange", kpiCardClick: "kpiCardClick" }, providers: [
16254
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisCrudComponent, isStandalone: true, selector: "praxis-crud", inputs: { metadata: "metadata", crudId: "crudId", resource: "resource", componentInstanceId: "componentInstanceId", tableConfigPersistenceStrategy: "tableConfigPersistenceStrategy", context: "context", enableCustomization: "enableCustomization", showResourceIdentityKey: "showResourceIdentityKey", authoringCapability: "authoringCapability", filterCriteria: "filterCriteria", filterTeleport: ["filterTeleport", "filterTeleport", booleanAttribute], disableAutoDrawer: ["disableAutoDrawer", "disableAutoDrawer", booleanAttribute], hostManagedChrome: ["hostManagedChrome", "hostManagedChrome", booleanAttribute] }, outputs: { configureRequested: "configureRequested", afterOpen: "afterOpen", afterClose: "afterClose", afterSave: "afterSave", afterDelete: "afterDelete", reactiveDeterminationExecuted: "reactiveDeterminationExecuted", reactiveDeterminationPendingChange: "reactiveDeterminationPendingChange", reactiveDeterminationStabilityChange: "reactiveDeterminationStabilityChange", error: "error", rowClick: "rowClick", rowAction: "rowAction", selectionChange: "selectionChange", resourceEvent: "resourceEvent", tableRuntimeConfigChange: "tableRuntimeConfigChange", drawerOpen: "drawerOpen", drawerClose: "drawerClose", crudAuthoringDocumentApplied: "crudAuthoringDocumentApplied", crudAuthoringDocumentSaved: "crudAuthoringDocumentSaved", filterCriteriaChange: "filterCriteriaChange", kpiCardClick: "kpiCardClick" }, providers: [
15538
16255
  providePraxisI18nConfig(RESOURCE_DISCOVERY_I18N_CONFIG),
15539
16256
  providePraxisI18nConfig(PRAXIS_CRUD_RUNTIME_I18N_CONFIG),
15540
16257
  ], viewQueries: [{ propertyName: "kpiBand", first: true, predicate: PraxisKpiBandComponent, descendants: true }, { propertyName: "table", first: true, predicate: PraxisTable, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
@@ -15545,6 +16262,29 @@ class PraxisCrudComponent {
15545
16262
  <span>{{ getOpeningActionStatus(actionLabel) }}</span>
15546
16263
  </div>
15547
16264
  }
16265
+ @if (resolvedPageHeader; as ph) {
16266
+ <header class="praxis-crud-runtime__header section-header" data-testid="praxis-crud-page-header">
16267
+ <div class="praxis-crud-runtime__header-main">
16268
+ @if (ph.domain?.label?.trim(); as domLabel) {
16269
+ <div
16270
+ class="praxis-crud-runtime__domain-badge domain-tag"
16271
+ [ngClass]="ph.domain?.tone ? 'tone-' + ph.domain?.tone : ''"
16272
+ >
16273
+ @if (ph.domain?.icon) {
16274
+ <span class="material-symbols-outlined" aria-hidden="true">{{ ph.domain?.icon }}</span>
16275
+ }
16276
+ <span>{{ domLabel }}</span>
16277
+ </div>
16278
+ }
16279
+ @if (ph.title?.trim(); as headerTitle) {
16280
+ <h2 class="praxis-crud-runtime__title page-title title-gradient">{{ headerTitle }}</h2>
16281
+ }
16282
+ @if (ph.subtitle?.trim(); as headerSubtitle) {
16283
+ <p class="praxis-crud-runtime__subtitle page-subtitle">{{ headerSubtitle }}</p>
16284
+ }
16285
+ </div>
16286
+ </header>
16287
+ }
15548
16288
  @if (resolvedKpiBandConfig) {
15549
16289
  <praxis-kpi-band
15550
16290
  [config]="resolvedKpiBandConfig"
@@ -15556,6 +16296,18 @@ class PraxisCrudComponent {
15556
16296
  (cardClick)="onKpiCardClick($event)"
15557
16297
  />
15558
16298
  }
16299
+ @if (resolvedStandaloneScopeBarItems; as scopeItems) {
16300
+ <praxis-scope-bar
16301
+ leadLabel="Filtro:"
16302
+ leadIcon="tune"
16303
+ [items]="scopeItems"
16304
+ [activeId]="activeStandaloneScopeId"
16305
+ [showClearButton]="true"
16306
+ clearLabel="Limpar Filtro"
16307
+ (scopeChange)="onStandaloneScopeChange($event)"
16308
+ (clear)="onStandaloneScopeClear()"
16309
+ />
16310
+ }
15559
16311
  @if (shouldRenderTable(resolvedMetadata)) {
15560
16312
  <praxis-table
15561
16313
  [config]="tableConfigForBinding"
@@ -15595,11 +16347,17 @@ class PraxisCrudComponent {
15595
16347
  }
15596
16348
  }
15597
16349
  </div>
15598
- `, isInline: true, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}.praxis-crud-runtime{position:relative;min-width:0}.praxis-crud-opening-status{position:absolute;z-index:6;top:.7rem;right:.7rem;display:inline-flex;align-items:center;gap:.55rem;min-height:2.25rem;max-width:min(24rem,calc(100% - 1.4rem));padding:.48rem .72rem;border:1px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 32%,transparent);border-radius:999px;color:var(--md-sys-color-on-surface, currentColor);background:color-mix(in srgb,var(--md-sys-color-surface-container-high, var(--md-sys-color-surface)) 94%,transparent);box-shadow:0 10px 28px #0f172a29;font-size:.82rem;font-weight:650;line-height:1.25;pointer-events:none}.praxis-crud-opening-status__spinner{width:.95rem;height:.95rem;flex:0 0 auto;border:2px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 26%,transparent);border-top-color:var(--md-sys-color-primary, #3f51b5);border-radius:50%;animation:praxis-crud-opening-spin .72s linear infinite}@keyframes praxis-crud-opening-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.praxis-crud-opening-status__spinner{animation:none;border-top-color:currentColor}}\n"], dependencies: [{ kind: "component", type: PraxisTable, selector: "praxis-table", inputs: ["config", "resourcePath", "data", "tableId", "componentInstanceId", "configPersistenceStrategy", "title", "subtitle", "icon", "autoDelete", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "crudContext", "filterCriteria", "filterTeleport", "widgetId", "queryContext", "aiContext", "aiAssistantVoiceInputMode", "aiAssistantVoiceLanguage", "horizontalScroll", "enableCustomization", "authoringCapability", "dense"], outputs: ["filterCriteriaChange", "queryContextClear", "queryContextChange", "rowClick", "widgetEvent", "resourceEvent", "rowDoubleClick", "rowExpansionChange", "rowAction", "toolbarAction", "bulkAction", "exportAction", "columnReorder", "columnReorderAttempt", "columnResize", "beforeDelete", "afterDelete", "deleteError", "beforeBulkDelete", "afterBulkDelete", "bulkDeleteError", "schemaStatusChange", "configChange", "metadataChange", "loadingStateChange", "collectionLinksChange", "selectionChange", "drawerOpen", "drawerClose", "drawerTabChange"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone", "variant", "alignment", "density", "iconContainer"] }, { kind: "component", type: PraxisKpiBandComponent, selector: "praxis-kpi-band", inputs: ["config", "dataContext", "isInteractiveHost", "activeFilter", "endpointKey", "apiUrlEntry"], outputs: ["cardClick", "statsLoaded", "statsError", "refreshClick"] }] });
16350
+ `, isInline: true, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}.praxis-crud-runtime{position:relative;min-width:0;display:flex;flex-direction:column;gap:16px}.praxis-crud-runtime__header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}.praxis-crud-runtime__header-main{min-width:0;display:flex;flex-direction:column}.praxis-crud-runtime__domain-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:9999px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px;align-self:flex-start;background:var(--praxis-domain-badge-bg, rgba(255, 255, 255, .08));color:var(--praxis-domain-badge-color, inherit);border:1px solid var(--praxis-domain-badge-border, rgba(255, 255, 255, .1))}.praxis-crud-runtime__domain-badge.tone-primary,.praxis-crud-runtime__domain-badge.tone-info{background:color-mix(in srgb,var(--praxis-info, #0284c7) 14%,transparent);color:var(--praxis-info, #38bdf8);border-color:color-mix(in srgb,var(--praxis-info, #0284c7) 30%,transparent)}.praxis-crud-runtime__domain-badge.tone-accent{background:color-mix(in srgb,var(--praxis-primary, #6366f1) 14%,transparent);color:var(--praxis-primary, #818cf8);border-color:color-mix(in srgb,var(--praxis-primary, #6366f1) 30%,transparent)}.praxis-crud-runtime__domain-badge.tone-success{background:color-mix(in srgb,var(--praxis-success, #059669) 14%,transparent);color:var(--praxis-success, #34d399);border-color:color-mix(in srgb,var(--praxis-success, #059669) 30%,transparent)}.praxis-crud-runtime__domain-badge.tone-warning,.praxis-crud-runtime__domain-badge.tone-warn{background:color-mix(in srgb,var(--praxis-warning, #d97706) 14%,transparent);color:var(--praxis-warning, #fbbf24);border-color:color-mix(in srgb,var(--praxis-warning, #d97706) 30%,transparent)}.praxis-crud-runtime__domain-badge.tone-danger,.praxis-crud-runtime__domain-badge.tone-error{background:color-mix(in srgb,var(--praxis-error, #dc2626) 14%,transparent);color:var(--praxis-error, #f87171);border-color:color-mix(in srgb,var(--praxis-error, #dc2626) 30%,transparent)}.praxis-crud-runtime__domain-badge span.material-symbols-outlined{font-size:14px}.praxis-crud-runtime__title{margin:0 0 6px;font-size:var(--praxis-page-title-size, 1.75rem);font-weight:800;letter-spacing:-.02em;color:var(--praxis-page-title-color, var(--foreground, inherit));line-height:1.2}.praxis-crud-runtime__subtitle{margin:0;font-size:var(--praxis-page-subtitle-size, .9rem);color:var(--muted-foreground, #94a3b8);max-width:800px;line-height:1.5}.praxis-crud-opening-status{position:absolute;z-index:6;top:.7rem;right:.7rem;display:inline-flex;align-items:center;gap:.55rem;min-height:2.25rem;max-width:min(24rem,calc(100% - 1.4rem));padding:.48rem .72rem;border:1px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 32%,transparent);border-radius:999px;color:var(--md-sys-color-on-surface, currentColor);background:color-mix(in srgb,var(--md-sys-color-surface-container-high, var(--md-sys-color-surface)) 94%,transparent);box-shadow:0 10px 28px #0f172a29;font-size:.82rem;font-weight:650;line-height:1.25;pointer-events:none}.praxis-crud-opening-status__spinner{width:.95rem;height:.95rem;flex:0 0 auto;border:2px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 26%,transparent);border-top-color:var(--md-sys-color-primary, #3f51b5);border-radius:50%;animation:praxis-crud-opening-spin .72s linear infinite}@keyframes praxis-crud-opening-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.praxis-crud-opening-status__spinner{animation:none;border-top-color:currentColor}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PraxisTable, selector: "praxis-table", inputs: ["config", "resourcePath", "data", "tableId", "componentInstanceId", "configPersistenceStrategy", "title", "subtitle", "icon", "autoDelete", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "crudContext", "filterCriteria", "filterTeleport", "widgetId", "queryContext", "aiContext", "aiAssistantVoiceInputMode", "aiAssistantVoiceLanguage", "horizontalScroll", "enableCustomization", "authoringCapability", "dense"], outputs: ["filterCriteriaChange", "queryContextClear", "queryContextChange", "rowClick", "widgetEvent", "resourceEvent", "rowDoubleClick", "rowExpansionChange", "rowAction", "toolbarAction", "bulkAction", "exportAction", "columnReorder", "columnReorderAttempt", "columnResize", "beforeDelete", "afterDelete", "deleteError", "beforeBulkDelete", "afterBulkDelete", "bulkDeleteError", "schemaStatusChange", "configChange", "metadataChange", "loadingStateChange", "collectionLinksChange", "selectionChange", "drawerOpen", "drawerClose", "drawerTabChange"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone", "variant", "alignment", "density", "iconContainer"] }, { kind: "component", type: PraxisKpiBandComponent, selector: "praxis-kpi-band", inputs: ["config", "dataContext", "isInteractiveHost", "activeFilter", "endpointKey", "apiUrlEntry"], outputs: ["cardClick", "statsLoaded", "statsError", "refreshClick"] }, { kind: "component", type: PraxisScopeBarComponent, selector: "praxis-scope-bar", inputs: ["config", "items", "activeId", "showOmnibox", "omniboxPlaceholder", "omniboxValue", "omniboxDebounceMs", "leadIcon", "leadLabel", "showClearButton", "clearLabel", "showActiveFilterSummary", "activeFilters", "filterLabels", "target", "targetWidgetId", "targetWidgetIds", "scopeBarId", "searchField"], outputs: ["activeIdChange", "omniboxValueChange", "activeFiltersChange", "scopeChange", "searchChange", "filterCriteriaChange", "clear"] }] });
15599
16351
  }
15600
16352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisCrudComponent, decorators: [{
15601
16353
  type: Component,
15602
- args: [{ selector: 'praxis-crud', standalone: true, imports: [PraxisTable, EmptyStateCardComponent, PraxisKpiBandComponent], providers: [
16354
+ args: [{ selector: 'praxis-crud', standalone: true, imports: [
16355
+ CommonModule,
16356
+ PraxisTable,
16357
+ EmptyStateCardComponent,
16358
+ PraxisKpiBandComponent,
16359
+ PraxisScopeBarComponent,
16360
+ ], providers: [
15603
16361
  providePraxisI18nConfig(RESOURCE_DISCOVERY_I18N_CONFIG),
15604
16362
  providePraxisI18nConfig(PRAXIS_CRUD_RUNTIME_I18N_CONFIG),
15605
16363
  ], template: `
@@ -15610,6 +16368,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
15610
16368
  <span>{{ getOpeningActionStatus(actionLabel) }}</span>
15611
16369
  </div>
15612
16370
  }
16371
+ @if (resolvedPageHeader; as ph) {
16372
+ <header class="praxis-crud-runtime__header section-header" data-testid="praxis-crud-page-header">
16373
+ <div class="praxis-crud-runtime__header-main">
16374
+ @if (ph.domain?.label?.trim(); as domLabel) {
16375
+ <div
16376
+ class="praxis-crud-runtime__domain-badge domain-tag"
16377
+ [ngClass]="ph.domain?.tone ? 'tone-' + ph.domain?.tone : ''"
16378
+ >
16379
+ @if (ph.domain?.icon) {
16380
+ <span class="material-symbols-outlined" aria-hidden="true">{{ ph.domain?.icon }}</span>
16381
+ }
16382
+ <span>{{ domLabel }}</span>
16383
+ </div>
16384
+ }
16385
+ @if (ph.title?.trim(); as headerTitle) {
16386
+ <h2 class="praxis-crud-runtime__title page-title title-gradient">{{ headerTitle }}</h2>
16387
+ }
16388
+ @if (ph.subtitle?.trim(); as headerSubtitle) {
16389
+ <p class="praxis-crud-runtime__subtitle page-subtitle">{{ headerSubtitle }}</p>
16390
+ }
16391
+ </div>
16392
+ </header>
16393
+ }
15613
16394
  @if (resolvedKpiBandConfig) {
15614
16395
  <praxis-kpi-band
15615
16396
  [config]="resolvedKpiBandConfig"
@@ -15621,6 +16402,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
15621
16402
  (cardClick)="onKpiCardClick($event)"
15622
16403
  />
15623
16404
  }
16405
+ @if (resolvedStandaloneScopeBarItems; as scopeItems) {
16406
+ <praxis-scope-bar
16407
+ leadLabel="Filtro:"
16408
+ leadIcon="tune"
16409
+ [items]="scopeItems"
16410
+ [activeId]="activeStandaloneScopeId"
16411
+ [showClearButton]="true"
16412
+ clearLabel="Limpar Filtro"
16413
+ (scopeChange)="onStandaloneScopeChange($event)"
16414
+ (clear)="onStandaloneScopeClear()"
16415
+ />
16416
+ }
15624
16417
  @if (shouldRenderTable(resolvedMetadata)) {
15625
16418
  <praxis-table
15626
16419
  [config]="tableConfigForBinding"
@@ -15660,7 +16453,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
15660
16453
  }
15661
16454
  }
15662
16455
  </div>
15663
- `, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}.praxis-crud-runtime{position:relative;min-width:0}.praxis-crud-opening-status{position:absolute;z-index:6;top:.7rem;right:.7rem;display:inline-flex;align-items:center;gap:.55rem;min-height:2.25rem;max-width:min(24rem,calc(100% - 1.4rem));padding:.48rem .72rem;border:1px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 32%,transparent);border-radius:999px;color:var(--md-sys-color-on-surface, currentColor);background:color-mix(in srgb,var(--md-sys-color-surface-container-high, var(--md-sys-color-surface)) 94%,transparent);box-shadow:0 10px 28px #0f172a29;font-size:.82rem;font-weight:650;line-height:1.25;pointer-events:none}.praxis-crud-opening-status__spinner{width:.95rem;height:.95rem;flex:0 0 auto;border:2px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 26%,transparent);border-top-color:var(--md-sys-color-primary, #3f51b5);border-radius:50%;animation:praxis-crud-opening-spin .72s linear infinite}@keyframes praxis-crud-opening-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.praxis-crud-opening-status__spinner{animation:none;border-top-color:currentColor}}\n"] }]
16456
+ `, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}.praxis-crud-runtime{position:relative;min-width:0;display:flex;flex-direction:column;gap:16px}.praxis-crud-runtime__header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}.praxis-crud-runtime__header-main{min-width:0;display:flex;flex-direction:column}.praxis-crud-runtime__domain-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:9999px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px;align-self:flex-start;background:var(--praxis-domain-badge-bg, rgba(255, 255, 255, .08));color:var(--praxis-domain-badge-color, inherit);border:1px solid var(--praxis-domain-badge-border, rgba(255, 255, 255, .1))}.praxis-crud-runtime__domain-badge.tone-primary,.praxis-crud-runtime__domain-badge.tone-info{background:color-mix(in srgb,var(--praxis-info, #0284c7) 14%,transparent);color:var(--praxis-info, #38bdf8);border-color:color-mix(in srgb,var(--praxis-info, #0284c7) 30%,transparent)}.praxis-crud-runtime__domain-badge.tone-accent{background:color-mix(in srgb,var(--praxis-primary, #6366f1) 14%,transparent);color:var(--praxis-primary, #818cf8);border-color:color-mix(in srgb,var(--praxis-primary, #6366f1) 30%,transparent)}.praxis-crud-runtime__domain-badge.tone-success{background:color-mix(in srgb,var(--praxis-success, #059669) 14%,transparent);color:var(--praxis-success, #34d399);border-color:color-mix(in srgb,var(--praxis-success, #059669) 30%,transparent)}.praxis-crud-runtime__domain-badge.tone-warning,.praxis-crud-runtime__domain-badge.tone-warn{background:color-mix(in srgb,var(--praxis-warning, #d97706) 14%,transparent);color:var(--praxis-warning, #fbbf24);border-color:color-mix(in srgb,var(--praxis-warning, #d97706) 30%,transparent)}.praxis-crud-runtime__domain-badge.tone-danger,.praxis-crud-runtime__domain-badge.tone-error{background:color-mix(in srgb,var(--praxis-error, #dc2626) 14%,transparent);color:var(--praxis-error, #f87171);border-color:color-mix(in srgb,var(--praxis-error, #dc2626) 30%,transparent)}.praxis-crud-runtime__domain-badge span.material-symbols-outlined{font-size:14px}.praxis-crud-runtime__title{margin:0 0 6px;font-size:var(--praxis-page-title-size, 1.75rem);font-weight:800;letter-spacing:-.02em;color:var(--praxis-page-title-color, var(--foreground, inherit));line-height:1.2}.praxis-crud-runtime__subtitle{margin:0;font-size:var(--praxis-page-subtitle-size, .9rem);color:var(--muted-foreground, #94a3b8);max-width:800px;line-height:1.5}.praxis-crud-opening-status{position:absolute;z-index:6;top:.7rem;right:.7rem;display:inline-flex;align-items:center;gap:.55rem;min-height:2.25rem;max-width:min(24rem,calc(100% - 1.4rem));padding:.48rem .72rem;border:1px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 32%,transparent);border-radius:999px;color:var(--md-sys-color-on-surface, currentColor);background:color-mix(in srgb,var(--md-sys-color-surface-container-high, var(--md-sys-color-surface)) 94%,transparent);box-shadow:0 10px 28px #0f172a29;font-size:.82rem;font-weight:650;line-height:1.25;pointer-events:none}.praxis-crud-opening-status__spinner{width:.95rem;height:.95rem;flex:0 0 auto;border:2px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 26%,transparent);border-top-color:var(--md-sys-color-primary, #3f51b5);border-radius:50%;animation:praxis-crud-opening-spin .72s linear infinite}@keyframes praxis-crud-opening-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.praxis-crud-opening-status__spinner{animation:none;border-top-color:currentColor}}\n"] }]
15664
16457
  }], ctorParameters: () => [], propDecorators: { metadata: [{
15665
16458
  type: Input
15666
16459
  }], crudId: [{
@@ -15687,6 +16480,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
15687
16480
  }], disableAutoDrawer: [{
15688
16481
  type: Input,
15689
16482
  args: [{ transform: booleanAttribute }]
16483
+ }], hostManagedChrome: [{
16484
+ type: Input,
16485
+ args: [{ transform: booleanAttribute }]
15690
16486
  }], configureRequested: [{
15691
16487
  type: Output
15692
16488
  }], afterOpen: [{
@@ -17007,16 +17803,25 @@ class PraxisCrudWidgetConfigEditor {
17007
17803
  return undefined;
17008
17804
  }
17009
17805
  if (!('effectiveMetadata' in context) &&
17010
- !('effectiveTableConfig' in context)) {
17806
+ !('effectiveTableConfig' in context) &&
17807
+ !('authoringDocument' in context) &&
17808
+ !('authoringMetadata' in context)) {
17011
17809
  return context;
17012
17810
  }
17013
17811
  const rest = { ...context };
17014
17812
  delete rest['effectiveMetadata'];
17015
17813
  delete rest['effectiveTableConfig'];
17814
+ delete rest['authoringDocument'];
17815
+ delete rest['authoringMetadata'];
17016
17816
  return Object.keys(rest).length > 0 ? rest : undefined;
17017
17817
  }
17018
17818
  createDocumentFromInputs() {
17019
- return parseLegacyOrCrudDocument(this.inputs?.metadata ?? {
17819
+ const rawContext = this.inputs?.context ?? null;
17820
+ const contextSeed = rawContext && typeof rawContext === 'object'
17821
+ ? (rawContext['authoringDocument'] ?? rawContext['authoringMetadata'])
17822
+ : undefined;
17823
+ return parseLegacyOrCrudDocument(this.inputs?.metadata ??
17824
+ contextSeed ?? {
17020
17825
  component: 'praxis-crud',
17021
17826
  table: { columns: [] },
17022
17827
  });
@@ -17159,9 +17964,13 @@ const PRAXIS_CRUD_COMPONENT_METADATA = {
17159
17964
  id: 'praxis-crud',
17160
17965
  selector: 'praxis-crud',
17161
17966
  component: PraxisCrudComponent,
17162
- friendlyName: 'Praxis CRUD',
17163
- description: 'Tabela com operações de CRUD via metadados.',
17967
+ friendlyName: 'Workspace de Recurso',
17968
+ description: 'Superfície operacional completa guiada por contrato: listagem semântica, KPIs, escopo, dossiês e ações de negócio.',
17164
17969
  icon: 'table_chart',
17970
+ layoutHints: {
17971
+ recommendedCols: 12,
17972
+ recommendedRows: 6,
17973
+ },
17165
17974
  runtimeProfiles: [
17166
17975
  {
17167
17976
  id: 'public-local-inspect-only',
@@ -17315,7 +18124,7 @@ const PRAXIS_CRUD_COMPONENT_METADATA = {
17315
18124
  },
17316
18125
  configEditor: {
17317
18126
  component: PraxisCrudWidgetConfigEditor,
17318
- title: 'Configurar CRUD',
18127
+ title: 'Configurações do Workspace de Recurso',
17319
18128
  contextResolver: ({ materializedInputs }) => ({
17320
18129
  context: {
17321
18130
  effectiveMetadata: materializedInputs?.['metadata'],
@@ -18520,10 +19329,14 @@ class PraxisResourcePage {
18520
19329
  }, ...(ngDevMode ? [{ debugName: "hasCrudSeed" }] : /* istanbul ignore next */ []));
18521
19330
  effectiveResource = computed(() => {
18522
19331
  this.inputsVersion();
19332
+ const authoredResource = this.extractResourcePathFromMetadata(this.authoredMetadataSignal());
19333
+ if (authoredResource) {
19334
+ return authoredResource;
19335
+ }
18523
19336
  return (this.resource ||
18524
19337
  this.resourcePath ||
18525
19338
  this.routeResourceSignal() ||
18526
- this.extractResourcePathFromMetadata(this.authoredMetadataSignal() || this.metadata || this.routeMetadataSignal()));
19339
+ this.extractResourcePathFromMetadata(this.metadata || this.routeMetadataSignal()));
18527
19340
  }, ...(ngDevMode ? [{ debugName: "effectiveResource" }] : /* istanbul ignore next */ []));
18528
19341
  effectiveTitle = computed(() => {
18529
19342
  this.inputsVersion();
@@ -18661,8 +19474,12 @@ class PraxisResourcePage {
18661
19474
  const routeCrudId = this.routeCrudIdSignal();
18662
19475
  if (routeCrudId)
18663
19476
  return routeCrudId;
18664
- const res = this.effectiveResource();
18665
- return res ? `crud-${res.replace(/\//g, '-')}` : 'praxis-crud-auto';
19477
+ const initialRes = this.resource ||
19478
+ this.resourcePath ||
19479
+ this.routeResourceSignal() ||
19480
+ this.extractResourcePathFromMetadata(this.metadata || this.routeMetadataSignal()) ||
19481
+ this.effectiveResource();
19482
+ return initialRes ? `crud-${initialRes.replace(/\//g, '-')}` : 'praxis-crud-auto';
18666
19483
  }, ...(ngDevMode ? [{ debugName: "resolvedCrudId" }] : /* istanbul ignore next */ []));
18667
19484
  effectiveFilterCriteria = computed(() => {
18668
19485
  this.inputsVersion();
@@ -19234,6 +20051,7 @@ class PraxisResourcePage {
19234
20051
  [filterTeleport]="effectiveIncludeInlineFilters()"
19235
20052
  [enableCustomization]="effectiveEnableCustomization()"
19236
20053
  [disableAutoDrawer]="disableAutoDrawer"
20054
+ [hostManagedChrome]="true"
19237
20055
  [tableConfigPersistenceStrategy]="tableConfigPersistenceStrategy"
19238
20056
  [context]="context"
19239
20057
  (crudAuthoringDocumentApplied)="onCrudAuthoringDocumentChanged($event)"
@@ -19255,7 +20073,7 @@ class PraxisResourcePage {
19255
20073
  }
19256
20074
  }
19257
20075
  </div>
19258
- `, isInline: true, styles: [":host{display:block;width:100%;min-height:100%;box-sizing:border-box}.praxis-resource-page{width:100%;display:flex;flex-direction:column;gap:20px;padding:var(--praxis-page-padding, 24px);box-sizing:border-box;max-width:1540px;margin:0 auto}.praxis-resource-page__header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}.praxis-resource-page__header-main{min-width:0;display:flex;flex-direction:column}.praxis-resource-page__domain-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:9999px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px;align-self:flex-start;background:var(--praxis-domain-badge-bg, rgba(255, 255, 255, .08));color:var(--praxis-domain-badge-color, inherit);border:1px solid var(--praxis-domain-badge-border, rgba(255, 255, 255, .1))}.praxis-resource-page__domain-badge.tone-primary,.praxis-resource-page__domain-badge.tone-info{background:color-mix(in srgb,var(--praxis-info, #0284c7) 14%,transparent);color:var(--praxis-info, #38bdf8);border-color:color-mix(in srgb,var(--praxis-info, #0284c7) 30%,transparent)}.praxis-resource-page__domain-badge.tone-accent{background:color-mix(in srgb,var(--praxis-primary, #6366f1) 14%,transparent);color:var(--praxis-primary, #818cf8);border-color:color-mix(in srgb,var(--praxis-primary, #6366f1) 30%,transparent)}.praxis-resource-page__domain-badge.tone-success{background:color-mix(in srgb,var(--praxis-success, #059669) 14%,transparent);color:var(--praxis-success, #34d399);border-color:color-mix(in srgb,var(--praxis-success, #059669) 30%,transparent)}.praxis-resource-page__domain-badge.tone-warning,.praxis-resource-page__domain-badge.tone-warn{background:color-mix(in srgb,var(--praxis-warning, #d97706) 14%,transparent);color:var(--praxis-warning, #fbbf24);border-color:color-mix(in srgb,var(--praxis-warning, #d97706) 30%,transparent)}.praxis-resource-page__domain-badge.tone-danger,.praxis-resource-page__domain-badge.tone-error{background:color-mix(in srgb,var(--praxis-error, #dc2626) 14%,transparent);color:var(--praxis-error, #f87171);border-color:color-mix(in srgb,var(--praxis-error, #dc2626) 30%,transparent)}.praxis-resource-page__domain-badge span.material-symbols-outlined{font-size:14px}.praxis-resource-page__title{margin:0 0 6px;font-size:var(--praxis-page-title-size, 2rem);font-weight:800;letter-spacing:-.02em;color:var(--praxis-page-title-color, var(--foreground, inherit));line-height:1.2}.praxis-resource-page__subtitle{margin:0;font-size:var(--praxis-page-subtitle-size, .9rem);color:var(--muted-foreground, #94a3b8);max-width:800px;line-height:1.5}.praxis-resource-page__header-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.praxis-resource-page__configure-btn{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 14px;border-radius:10px;border:1px solid color-mix(in srgb,var(--praxis-primary, #6366f1) 35%,transparent);background:color-mix(in srgb,var(--praxis-primary, #6366f1) 14%,transparent);color:var(--praxis-primary, #818cf8);font-size:13px;font-weight:600;cursor:pointer;transition:all .16s ease}.praxis-resource-page__configure-btn:hover{background:color-mix(in srgb,var(--praxis-primary, #6366f1) 22%,transparent)}.praxis-resource-page__configure-btn .material-symbols-outlined{font-size:18px}.praxis-resource-page__crud-surface{width:100%;border-radius:var(--praxis-surface-radius, 16px);overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PraxisCrudComponent, selector: "praxis-crud", inputs: ["metadata", "crudId", "resource", "componentInstanceId", "tableConfigPersistenceStrategy", "context", "enableCustomization", "showResourceIdentityKey", "authoringCapability", "filterCriteria", "filterTeleport", "disableAutoDrawer"], outputs: ["configureRequested", "afterOpen", "afterClose", "afterSave", "afterDelete", "reactiveDeterminationExecuted", "reactiveDeterminationPendingChange", "reactiveDeterminationStabilityChange", "error", "rowClick", "rowAction", "selectionChange", "resourceEvent", "tableRuntimeConfigChange", "drawerOpen", "drawerClose", "crudAuthoringDocumentApplied", "crudAuthoringDocumentSaved", "filterCriteriaChange", "kpiCardClick"] }, { kind: "component", type: PraxisScopeBarComponent, selector: "praxis-scope-bar", inputs: ["config", "items", "activeId", "showOmnibox", "omniboxPlaceholder", "omniboxValue", "omniboxDebounceMs", "leadIcon", "leadLabel", "showClearButton", "clearLabel", "showActiveFilterSummary", "activeFilters", "filterLabels", "target", "targetWidgetId", "targetWidgetIds", "scopeBarId", "searchField"], outputs: ["activeIdChange", "omniboxValueChange", "activeFiltersChange", "scopeChange", "searchChange", "filterCriteriaChange", "clear"] }, { kind: "component", type: PraxisFilterOutletComponent, selector: "praxis-filter-outlet", inputs: ["target"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20076
+ `, isInline: true, styles: [":host{display:block;width:100%;min-height:100%;box-sizing:border-box}.praxis-resource-page{width:100%;display:flex;flex-direction:column;gap:20px;padding:var(--praxis-page-padding, 24px);box-sizing:border-box;max-width:1540px;margin:0 auto}.praxis-resource-page__header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}.praxis-resource-page__header-main{min-width:0;display:flex;flex-direction:column}.praxis-resource-page__domain-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:9999px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px;align-self:flex-start;background:var(--praxis-domain-badge-bg, rgba(255, 255, 255, .08));color:var(--praxis-domain-badge-color, inherit);border:1px solid var(--praxis-domain-badge-border, rgba(255, 255, 255, .1))}.praxis-resource-page__domain-badge.tone-primary,.praxis-resource-page__domain-badge.tone-info{background:color-mix(in srgb,var(--praxis-info, #0284c7) 14%,transparent);color:var(--praxis-info, #38bdf8);border-color:color-mix(in srgb,var(--praxis-info, #0284c7) 30%,transparent)}.praxis-resource-page__domain-badge.tone-accent{background:color-mix(in srgb,var(--praxis-primary, #6366f1) 14%,transparent);color:var(--praxis-primary, #818cf8);border-color:color-mix(in srgb,var(--praxis-primary, #6366f1) 30%,transparent)}.praxis-resource-page__domain-badge.tone-success{background:color-mix(in srgb,var(--praxis-success, #059669) 14%,transparent);color:var(--praxis-success, #34d399);border-color:color-mix(in srgb,var(--praxis-success, #059669) 30%,transparent)}.praxis-resource-page__domain-badge.tone-warning,.praxis-resource-page__domain-badge.tone-warn{background:color-mix(in srgb,var(--praxis-warning, #d97706) 14%,transparent);color:var(--praxis-warning, #fbbf24);border-color:color-mix(in srgb,var(--praxis-warning, #d97706) 30%,transparent)}.praxis-resource-page__domain-badge.tone-danger,.praxis-resource-page__domain-badge.tone-error{background:color-mix(in srgb,var(--praxis-error, #dc2626) 14%,transparent);color:var(--praxis-error, #f87171);border-color:color-mix(in srgb,var(--praxis-error, #dc2626) 30%,transparent)}.praxis-resource-page__domain-badge span.material-symbols-outlined{font-size:14px}.praxis-resource-page__title{margin:0 0 6px;font-size:var(--praxis-page-title-size, 2rem);font-weight:800;letter-spacing:-.02em;color:var(--praxis-page-title-color, var(--foreground, inherit));line-height:1.2}.praxis-resource-page__subtitle{margin:0;font-size:var(--praxis-page-subtitle-size, .9rem);color:var(--muted-foreground, #94a3b8);max-width:800px;line-height:1.5}.praxis-resource-page__header-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.praxis-resource-page__configure-btn{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 14px;border-radius:10px;border:1px solid color-mix(in srgb,var(--praxis-primary, #6366f1) 35%,transparent);background:color-mix(in srgb,var(--praxis-primary, #6366f1) 14%,transparent);color:var(--praxis-primary, #818cf8);font-size:13px;font-weight:600;cursor:pointer;transition:all .16s ease}.praxis-resource-page__configure-btn:hover{background:color-mix(in srgb,var(--praxis-primary, #6366f1) 22%,transparent)}.praxis-resource-page__configure-btn .material-symbols-outlined{font-size:18px}.praxis-resource-page__crud-surface{width:100%;border-radius:var(--praxis-surface-radius, 16px);overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PraxisCrudComponent, selector: "praxis-crud", inputs: ["metadata", "crudId", "resource", "componentInstanceId", "tableConfigPersistenceStrategy", "context", "enableCustomization", "showResourceIdentityKey", "authoringCapability", "filterCriteria", "filterTeleport", "disableAutoDrawer", "hostManagedChrome"], outputs: ["configureRequested", "afterOpen", "afterClose", "afterSave", "afterDelete", "reactiveDeterminationExecuted", "reactiveDeterminationPendingChange", "reactiveDeterminationStabilityChange", "error", "rowClick", "rowAction", "selectionChange", "resourceEvent", "tableRuntimeConfigChange", "drawerOpen", "drawerClose", "crudAuthoringDocumentApplied", "crudAuthoringDocumentSaved", "filterCriteriaChange", "kpiCardClick"] }, { kind: "component", type: PraxisScopeBarComponent, selector: "praxis-scope-bar", inputs: ["config", "items", "activeId", "showOmnibox", "omniboxPlaceholder", "omniboxValue", "omniboxDebounceMs", "leadIcon", "leadLabel", "showClearButton", "clearLabel", "showActiveFilterSummary", "activeFilters", "filterLabels", "target", "targetWidgetId", "targetWidgetIds", "scopeBarId", "searchField"], outputs: ["activeIdChange", "omniboxValueChange", "activeFiltersChange", "scopeChange", "searchChange", "filterCriteriaChange", "clear"] }, { kind: "component", type: PraxisFilterOutletComponent, selector: "praxis-filter-outlet", inputs: ["target"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19259
20077
  }
19260
20078
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisResourcePage, decorators: [{
19261
20079
  type: Component,
@@ -19349,6 +20167,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
19349
20167
  [filterTeleport]="effectiveIncludeInlineFilters()"
19350
20168
  [enableCustomization]="effectiveEnableCustomization()"
19351
20169
  [disableAutoDrawer]="disableAutoDrawer"
20170
+ [hostManagedChrome]="true"
19352
20171
  [tableConfigPersistenceStrategy]="tableConfigPersistenceStrategy"
19353
20172
  [context]="context"
19354
20173
  (crudAuthoringDocumentApplied)="onCrudAuthoringDocumentChanged($event)"